[hibernate-commits] Hibernate SVN: r11282 - in trunk/HibernateExt: annotations and 289 other directories.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Wed Mar 14 18:06:53 EDT 2007


Author: epbernard
Date: 2007-03-14 18:05:59 -0400 (Wed, 14 Mar 2007)
New Revision: 11282

Added:
   trunk/HibernateExt/annotations/
   trunk/HibernateExt/annotations/.cvsignore
   trunk/HibernateExt/annotations/build.properties.dist
   trunk/HibernateExt/annotations/build.xml
   trunk/HibernateExt/annotations/changelog.txt
   trunk/HibernateExt/annotations/doc/
   trunk/HibernateExt/annotations/doc/api/
   trunk/HibernateExt/annotations/doc/api/package.html
   trunk/HibernateExt/annotations/doc/reference/
   trunk/HibernateExt/annotations/doc/reference/.cvsignore
   trunk/HibernateExt/annotations/doc/reference/build.xml
   trunk/HibernateExt/annotations/doc/reference/en/
   trunk/HibernateExt/annotations/doc/reference/en/images/
   trunk/HibernateExt/annotations/doc/reference/en/images/hibernate_logo_a.png
   trunk/HibernateExt/annotations/doc/reference/en/master.xml
   trunk/HibernateExt/annotations/doc/reference/en/modules/
   trunk/HibernateExt/annotations/doc/reference/en/modules/additionalmodules.xml
   trunk/HibernateExt/annotations/doc/reference/en/modules/entity.xml
   trunk/HibernateExt/annotations/doc/reference/en/modules/setup.xml
   trunk/HibernateExt/annotations/doc/reference/en/modules/xml-overriding.xml
   trunk/HibernateExt/annotations/doc/reference/en/styles/
   trunk/HibernateExt/annotations/doc/reference/en/styles/fopdf.xsl
   trunk/HibernateExt/annotations/doc/reference/en/styles/html.css
   trunk/HibernateExt/annotations/doc/reference/en/styles/html.xsl
   trunk/HibernateExt/annotations/doc/reference/en/styles/html_chunk.xsl
   trunk/HibernateExt/annotations/doc/reference/fr/
   trunk/HibernateExt/annotations/doc/reference/fr/images/
   trunk/HibernateExt/annotations/doc/reference/fr/images/hibernate_logo_a.png
   trunk/HibernateExt/annotations/doc/reference/fr/master.xml
   trunk/HibernateExt/annotations/doc/reference/fr/modules/
   trunk/HibernateExt/annotations/doc/reference/fr/modules/entity.xml
   trunk/HibernateExt/annotations/doc/reference/fr/modules/lucene.xml
   trunk/HibernateExt/annotations/doc/reference/fr/modules/setup.xml
   trunk/HibernateExt/annotations/doc/reference/fr/modules/validator.xml
   trunk/HibernateExt/annotations/doc/reference/fr/modules/xml-overriding.xml
   trunk/HibernateExt/annotations/doc/reference/fr/styles/
   trunk/HibernateExt/annotations/doc/reference/fr/styles/fopdf.xsl
   trunk/HibernateExt/annotations/doc/reference/fr/styles/html.css
   trunk/HibernateExt/annotations/doc/reference/fr/styles/html.xsl
   trunk/HibernateExt/annotations/doc/reference/fr/styles/html_chunk.xsl
   trunk/HibernateExt/annotations/doc/reference/zh_cn/
   trunk/HibernateExt/annotations/doc/reference/zh_cn/fop/
   trunk/HibernateExt/annotations/doc/reference/zh_cn/fop/simhei.ttf
   trunk/HibernateExt/annotations/doc/reference/zh_cn/fop/simhei.xml
   trunk/HibernateExt/annotations/doc/reference/zh_cn/fop/simsun.ttc
   trunk/HibernateExt/annotations/doc/reference/zh_cn/fop/simsun.xml
   trunk/HibernateExt/annotations/doc/reference/zh_cn/fop/userconfig.xml
   trunk/HibernateExt/annotations/doc/reference/zh_cn/images/
   trunk/HibernateExt/annotations/doc/reference/zh_cn/images/hibernate_logo_a.png
   trunk/HibernateExt/annotations/doc/reference/zh_cn/master.xml
   trunk/HibernateExt/annotations/doc/reference/zh_cn/modules/
   trunk/HibernateExt/annotations/doc/reference/zh_cn/modules/entity.xml
   trunk/HibernateExt/annotations/doc/reference/zh_cn/modules/lucene.xml
   trunk/HibernateExt/annotations/doc/reference/zh_cn/modules/setup.xml
   trunk/HibernateExt/annotations/doc/reference/zh_cn/modules/validator.xml
   trunk/HibernateExt/annotations/doc/reference/zh_cn/modules/xml-overriding.xml
   trunk/HibernateExt/annotations/doc/reference/zh_cn/styles/
   trunk/HibernateExt/annotations/doc/reference/zh_cn/styles/fopdf.xsl
   trunk/HibernateExt/annotations/doc/reference/zh_cn/styles/html.css
   trunk/HibernateExt/annotations/doc/reference/zh_cn/styles/html.xsl
   trunk/HibernateExt/annotations/doc/reference/zh_cn/styles/html_chunk.xsl
   trunk/HibernateExt/annotations/jdbc/
   trunk/HibernateExt/annotations/jdbc/hsqldb.jar
   trunk/HibernateExt/annotations/lgpl.txt
   trunk/HibernateExt/annotations/lib/
   trunk/HibernateExt/annotations/lib/README.txt
   trunk/HibernateExt/annotations/readme.txt
   trunk/HibernateExt/annotations/src/
   trunk/HibernateExt/annotations/src/java/
   trunk/HibernateExt/annotations/src/java/org/
   trunk/HibernateExt/annotations/src/java/org/hibernate/
   trunk/HibernateExt/annotations/src/java/org/hibernate/AnnotationException.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/AccessType.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/BatchSize.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Cache.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/CacheConcurrencyStrategy.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/CacheModeType.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Cascade.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/CascadeType.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Check.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/CollectionId.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/CollectionOfElements.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Columns.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/DiscriminatorFormula.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Entity.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Fetch.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/FetchMode.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Filter.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/FilterDef.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/FilterDefs.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/FilterJoinTable.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/FilterJoinTables.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Filters.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/FlushModeType.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/ForceDiscriminator.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/ForeignKey.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Formula.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Generated.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/GenerationTime.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/GenericGenerator.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Immutable.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Index.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/IndexColumn.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/LazyCollection.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/LazyCollectionOption.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/LazyToOne.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/LazyToOneOption.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Loader.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/MapKey.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/MapKeyManyToMany.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/NamedNativeQueries.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/NamedNativeQuery.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/NamedQueries.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/NamedQuery.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/NotFound.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/NotFoundAction.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/OnDelete.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/OnDeleteAction.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/OptimisticLock.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/OptimisticLockType.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/OrderBy.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/ParamDef.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Parameter.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Parent.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Persister.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/PolymorphismType.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Proxy.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/ResultCheckStyle.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/SQLDelete.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/SQLDeleteAll.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/SQLInsert.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/SQLUpdate.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Sort.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/SortType.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Table.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Tables.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Target.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Tuplizer.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Tuplizers.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Type.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/TypeDef.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/TypeDefs.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Where.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/WhereJoinTable.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/AbstractPropertyHolder.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/AnnotatedClassType.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/AnnotationBinder.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/AnnotationConfiguration.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/BinderHelper.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/ClassPropertyHolder.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/CollectionPropertyHolder.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/ComponentPropertyHolder.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/CreateKeySecondPass.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/DefaultComponentSafeNamingStrategy.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/EJB3DTDEntityResolver.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/EJB3NamingStrategy.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/Ejb3Column.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/Ejb3DiscriminatorColumn.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/Ejb3JoinColumn.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/ExtendedMappings.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/FkSecondPass.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/IndexColumn.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/IndexSecondPass.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/InheritanceState.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/NotYetImplementedException.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/OneToOneSecondPass.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/PropertyData.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/PropertyHolder.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/PropertyHolderBuilder.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/PropertyInferredData.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/PropertyPreloadedData.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/WrappedInferredData.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/ArrayBinder.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/BagBinder.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/CollectionBinder.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/EntityBinder.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/IdBagBinder.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/ListBinder.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/MapBinder.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/Nullability.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/PrimitiveArrayBinder.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/PropertyBinder.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/QueryBinder.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/ResultsetMappingSecondPass.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/SetBinder.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/SimpleValueBinder.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/TableBinder.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/Version.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/reflection/
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/reflection/EJB3OverridenAnnotationReader.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/reflection/EJB3ReflectionManager.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/reflection/XMLContext.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/ejb/
   trunk/HibernateExt/annotations/src/java/org/hibernate/ejb/orm_1_0.xsd
   trunk/HibernateExt/annotations/src/java/org/hibernate/mapping/
   trunk/HibernateExt/annotations/src/java/org/hibernate/mapping/IdGenerator.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/type/
   trunk/HibernateExt/annotations/src/java/org/hibernate/type/AbstractLobType.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/type/ByteArrayBlobType.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/type/CharacterArrayClobType.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/type/EnumType.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/type/PrimitiveByteArrayBlobType.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/type/PrimitiveCharacterArrayClobType.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/type/SerializableToBlobType.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/type/StringClobType.java
   trunk/HibernateExt/annotations/src/test/
   trunk/HibernateExt/annotations/src/test/ehcache.xml
   trunk/HibernateExt/annotations/src/test/hibernate.properties
   trunk/HibernateExt/annotations/src/test/log4j.properties
   trunk/HibernateExt/annotations/src/test/org/
   trunk/HibernateExt/annotations/src/test/org/hibernate/
   trunk/HibernateExt/annotations/src/test/org/hibernate/annotations/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/A320.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/A320b.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/AlternativeNamingStrategy.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/AmericaCupClass.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Boat.hbm.xml
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Boat.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Company.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/ConfigurationTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Country.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Customer.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Discount.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/EntityTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Ferry.hbm.xml
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Ferry.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Flight.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/FlyingObject.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/IncorrectEntity.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/JoinedSubclassTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Passport.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Plane.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Port.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/SafeMappingTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/SecuredBindingTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Sky.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/TestCase.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Thing.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Ticket.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/TicketComparator.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/AccessTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/Bed.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/BigBed.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/Chair.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/Furniture.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/Thingy.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/Woody.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/array/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/array/ArrayTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/array/Competitor.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/array/Contest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/bytecode/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/bytecode/Hammer.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/bytecode/ProxyBreakingTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/bytecode/Tool.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/bytecode/hammer.hbm.xml
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cascade/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cascade/CascadeTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cascade/Mouth.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cascade/Tooth.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/Channel.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/Child.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/ChildPk.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/CompositeIdTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/Order.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/OrderLine.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/OrderLinePk.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/Parent.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/ParentPk.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/Presenter.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/Product.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/TvMagazin.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/TvMagazinPk.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement/Boy.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement/Brand.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement/Character.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement/CollectionElementTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement/CountryAttitude.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement/Toy.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/duplicatedgenerator/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/duplicatedgenerator/DuplicateTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/duplicatedgenerator/Flight.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/duplicatedgenerator/orm.xml
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Address.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/AddressType.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Book.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/CorpType.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Country.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Deal.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/EmbeddedTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/FixedLeg.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/FloatLeg.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/InternetProvider.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Leg.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/LegalStructure.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Manager.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Nationality.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/NotonialDeal.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Person.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/RegionalArticle.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/RegionalArticlePk.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/SpreadDeal.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Summary.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Swap.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/VanillaSwap.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Address.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/BasicHibernateAnnotationsTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Bid.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/CasterStringType.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/CommunityBid.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Country.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Flight.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Forest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Java5FeaturesTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Length.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/MonetaryAmount.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/MonetaryAmountUserType.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/PropertyDefaultMappingsTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Race.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Ransom.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Starred.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Tree.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/WashingMachine.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/ZipCode.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/package-info.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/Cellular.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/Communication.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/EntityNonEntityTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/GSM.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/Interaction.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/Phone.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/Voice.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/fetch/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/fetch/FetchingTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/fetch/Person.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/fetch/Stay.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/DNA.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/EmbeddedGenericsTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/Gene.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/GenericsTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/Item.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/Paper.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/PaperType.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/Price.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/PricedStuff.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/SomeGuy.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/State.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/StateType.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/Stuff.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/UnresolvedTypeTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/WildEntity.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/Child.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/ChildHierarchy1.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/ChildHierarchy2.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/ChildHierarchy22.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/GenericsInheritanceTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/Parent.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/ParentHierarchy1.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/ParentHierarchy2.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/ParentHierarchy22.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/hibernate.cfg.xml
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Ball.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/BreakDance.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Computer.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Department.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Dog.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/FirTree.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Footballer.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/FootballerPk.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Furniture.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/GoalKeeper.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Home.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/IdClassTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/IdTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Location.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/MilitaryBuilding.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Phone.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Shoe.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/SoundSystem.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Store.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Tower.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Tree.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/package-info.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/identifiercollection/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/identifiercollection/IdentifierCollectionTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/identifiercollection/Passport.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/identifiercollection/Stamp.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/Card.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/CardField.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/CardKey.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/Customer.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/IdManyToOne.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/Project.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/Store.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/StoreCustomer.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/StoreCustomerPK.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/AddressBook.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/AddressEntry.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/AddressEntryPk.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/AlphabeticalDirectory.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Atmosphere.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Drawer.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Dress.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Gas.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/GasKey.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Generation.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/GenerationGroup.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/GenerationUser.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/IndexedCollectionTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/MapKeyTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/News.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Newspaper.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Painter.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Painting.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/PaintingPk.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/PressReleaseAgency.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Software.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Trainee.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Training.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Version.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Wardrobe.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/Apple.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/Carrot.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/Fruit.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/SubclassTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/Tomato.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/Vegetable.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/VegetablePk.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Alarm.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Asset.hbm.xml
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Asset.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Clothing.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Document.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/EventInformation.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/File.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/FinancialAsset.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Folder.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/JoinedSubclassAndSecondaryTable.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/JoinedSubclassTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Parent.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Pool.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/ProgramExecution.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/PropertyAsset.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Sweater.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/SwimmingPool.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/SymbolicLink.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/mixed/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/mixed/Document.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/mixed/File.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/mixed/Folder.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/mixed/SubclassTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/mixed/SymbolicLink.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/Building.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/Funk.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/House.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/Music.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/Noise.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/PaperTrash.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/Rock.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/Trash.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/union/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/union/Document.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/union/File.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/union/Folder.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/union/SubclassTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/union/SymbolicLink.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/interfaces/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/interfaces/Contact.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/interfaces/ContactImpl.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/interfaces/InterfacesTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/interfaces/User.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/interfaces/UserImpl.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/Cat.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/Death.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/Dog.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/DogPk.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/JoinTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/Life.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/loader/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/loader/Loader.hbm.xml
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/loader/LoaderTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/loader/Player.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/loader/Team.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/loader/TestCase.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/lob/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/lob/Book.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/lob/CompiledCode.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/lob/Editor.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/lob/LobTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Building.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/BuildingCompany.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Cat.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/CatPk.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/City.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Company.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Employee.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Employer.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Friend.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Group.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/GroupWithSet.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Inspector.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/InspectorPrefixes.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/KnownClient.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Man.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/ManPk.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/ManyToManyTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Permission.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Store.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Supplier.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Woman.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/WomanPk.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Zone.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/BiggestForest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Car.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Carz.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Child.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Color.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Customer.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Deal.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/DistrictUser.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/ForestType.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Frame.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Lens.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Lotz.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/LotzPK.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/ManyToOneJoinTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/ManyToOneOnNonPkTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/ManyToOneTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Node.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/NodePk.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Order.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/OrderLine.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Parent.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/ParentPk.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/TreeType.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/User.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/UserPK.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/notfound/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/notfound/Coin.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/notfound/Currency.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/notfound/NotFoundTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Child.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/City.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Monkey.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/OneToManyTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Organisation.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/OrganisationUser.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Parent.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/ParentPk.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Person.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/PoliticalParty.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Politician.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Soldier.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Street.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Tiger.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Trainer.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Troop.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Address.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Body.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Client.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Computer.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/ComputerPk.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Heart.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/OneToOneTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Owner.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/OwnerAddress.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Party.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/PartyAffiliate.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/SerialNumber.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/SerialNumberPk.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Trousers.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/TrousersZip.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/orm.xml
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/override/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/override/AssociationOverrideTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/override/Location.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/override/Move.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/override/Trip.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/persister/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/persister/Card.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/persister/CollectionPersister.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/persister/Deck.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/persister/EntityPersister.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/persister/PersisterTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/polymorphism/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/polymorphism/Car.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/polymorphism/MovingThing.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/polymorphism/PolymorphismTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/polymorphism/SportCar.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Area.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Captain.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/CasimirParticle.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Chaos.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Dictionary.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Dimensions.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Identity.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Mark.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Night.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/QueryAndSQLTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/SpaceShip.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/SynonymousDictionary.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/orm.xml
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/quote/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/quote/QuoteTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/quote/Role.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/quote/User.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Bag.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Clothes.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/House.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Inhabitant.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Item.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/ItemCost.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Luggage.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Postman.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Rambler.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/ReferencedColumnNameTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Vendor.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/WarehouseItem.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/Administration.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/Availability.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/BusTrip.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/BusTripPk.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/Competition.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/EJB3OverridenAnnotationReaderTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/LogListener.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/Match.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/Organization.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/OtherLogListener.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/SocialSecurityMoralAccount.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/SocialSecurityNumber.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/SocialSecurityPhysicalAccount.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/TennisMatch.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/XMLContextTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/metadata-complete.xml
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/orm.xml
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/strategy/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/strategy/Location.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/strategy/Storm.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/strategy/StrategyTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass/Component.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass/Machine.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass/Product.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass/Robot.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass/T800.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass/TablePerClassTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/Brand.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/Luggage.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/LuggageImpl.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/Owner.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/OwnerImpl.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/Size.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/SizeImpl.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/TargetTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/Country.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/Cuisine.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/DataProxyHandler.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/DynamicComponentTuplizer.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/DynamicEntityTuplizer.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/DynamicInstantiator.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/EntityNameInterceptor.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/ProxyHelper.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/TuplizerTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/type/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/type/Dvd.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/type/MyOid.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/type/MyOidGenerator.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/type/MyOidType.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/type/TypeTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/Antenna.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/Conductor.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/GeneratedTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/IndexTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/ProfessionalAgreement.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/Truck.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/Vehicule.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/VersionTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/version/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/CarModel.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/Ejb3XmlTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/Light.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/Lighter.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/Manufacturer.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/Model.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/orm.xml
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/orm2.xml
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/orm3.xml
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/A.hbm.xml
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/A.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/AImpl.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/B.hbm.xml
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/B.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/BImpl.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/CloudType.hbm.xml
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/CloudType.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/Government.hbm.xml
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/Government.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/HbmTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/PrimeMinister.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/Sky.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/Z.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/ZImpl.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/lucene/
   trunk/HibernateExt/commons-annotations/
   trunk/HibernateExt/commons-annotations/build.xml
   trunk/HibernateExt/commons-annotations/changelog.txt
   trunk/HibernateExt/commons-annotations/lgpl.txt
   trunk/HibernateExt/commons-annotations/lib/
   trunk/HibernateExt/commons-annotations/lib/README.txt
   trunk/HibernateExt/commons-annotations/readme.txt
   trunk/HibernateExt/commons-annotations/src/
   trunk/HibernateExt/commons-annotations/src/java/
   trunk/HibernateExt/commons-annotations/src/java/org/
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/AssertionFailure.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/annotationfactory/
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/annotationfactory/AnnotationDescriptor.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/annotationfactory/AnnotationFactory.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/annotationfactory/AnnotationProxy.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/AnnotationReader.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/Filter.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/ReflectionManager.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/ReflectionUtil.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/XAnnotatedElement.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/XClass.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/XMember.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/XMethod.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/XPackage.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/XProperty.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaAnnotationReader.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaReflectionManager.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXAnnotatedElement.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXArrayType.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXClass.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXCollectionType.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXMember.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXMethod.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXPackage.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXProperty.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXSimpleType.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXType.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/Pair.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/ApproximatingTypeEnvironment.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/CompoundTypeEnvironment.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/IdentityTypeEnvironment.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/SimpleTypeEnvironment.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/TypeEnvironment.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/TypeEnvironmentFactory.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/TypeFactory.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/TypeSwitch.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/TypeUtils.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/util/
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/util/ReflectHelper.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/util/StringHelper.java
   trunk/HibernateExt/commons-annotations/src/test/
   trunk/HibernateExt/commons-annotations/src/test/org/
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/annotationfactory/
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/annotationfactory/AnnotationFactoryTest.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/annotationfactory/AnnotationProxyTest.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/annotationfactory/TestAnnotation.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/Foo.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/FooFather.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/JavaReflectionManagerTest.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/JavaXClassTest.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/JavaXPropertyTest.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/Sex.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/TestAnnotation.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/XAnnotatedElementTestCase.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/ApproximatingTypeEnvironmentTest.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/BigBlob.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/Dad.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/Grandpa.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/Language.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/Neighbour.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/Son.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/SonOfBlob.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/TestAnnotation.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/TypeEnvironmentFactoryTest.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/TypeUtilsTest.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/DeepGenericsContainment.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/DeepGenericsInheritance.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/Dummy.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/DummySubclass.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/GenericSuperclass1.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/GenericSuperclass2.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/Subclass1.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/Subclass2.java
   trunk/HibernateExt/entitymanager/
   trunk/HibernateExt/entitymanager/.cvsignore
   trunk/HibernateExt/entitymanager/build.properties.dist
   trunk/HibernateExt/entitymanager/build.xml
   trunk/HibernateExt/entitymanager/changelog.txt
   trunk/HibernateExt/entitymanager/doc/
   trunk/HibernateExt/entitymanager/doc/reference/
   trunk/HibernateExt/entitymanager/doc/reference/.cvsignore
   trunk/HibernateExt/entitymanager/doc/reference/build.xml
   trunk/HibernateExt/entitymanager/doc/reference/en/
   trunk/HibernateExt/entitymanager/doc/reference/en/images/
   trunk/HibernateExt/entitymanager/doc/reference/en/images/hibernate_logo_a.png
   trunk/HibernateExt/entitymanager/doc/reference/en/master.xml
   trunk/HibernateExt/entitymanager/doc/reference/en/modules/
   trunk/HibernateExt/entitymanager/doc/reference/en/modules/architecture.xml
   trunk/HibernateExt/entitymanager/doc/reference/en/modules/batch.xml
   trunk/HibernateExt/entitymanager/doc/reference/en/modules/configuration.xml
   trunk/HibernateExt/entitymanager/doc/reference/en/modules/entitymanagerapi.xml
   trunk/HibernateExt/entitymanager/doc/reference/en/modules/listeners.xml
   trunk/HibernateExt/entitymanager/doc/reference/en/modules/query_ejbql.xml
   trunk/HibernateExt/entitymanager/doc/reference/en/modules/query_native.xml
   trunk/HibernateExt/entitymanager/doc/reference/en/modules/transactions.xml
   trunk/HibernateExt/entitymanager/doc/reference/en/styles/
   trunk/HibernateExt/entitymanager/doc/reference/en/styles/fopdf.xsl
   trunk/HibernateExt/entitymanager/doc/reference/en/styles/html.css
   trunk/HibernateExt/entitymanager/doc/reference/en/styles/html.xsl
   trunk/HibernateExt/entitymanager/doc/reference/en/styles/html_chunk.xsl
   trunk/HibernateExt/entitymanager/jdbc/
   trunk/HibernateExt/entitymanager/jdbc/hsqldb.jar
   trunk/HibernateExt/entitymanager/lgpl.txt
   trunk/HibernateExt/entitymanager/lib/
   trunk/HibernateExt/entitymanager/lib/README.txt
   trunk/HibernateExt/entitymanager/lib/jboss-archive-browsing.jar
   trunk/HibernateExt/entitymanager/readme.txt
   trunk/HibernateExt/entitymanager/src/
   trunk/HibernateExt/entitymanager/src/java/
   trunk/HibernateExt/entitymanager/src/java/org/
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/AbstractEntityManagerImpl.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/CurrentEntityManagerImpl.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/Ejb3Configuration.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/Ejb3ConfigurationObjectFactory.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/EntityManagerFactoryImpl.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/EntityManagerImpl.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/EventListenerConfigurator.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/HibernateEntityManager.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/HibernateEntityManagerFactory.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/HibernateEntityManagerImplementor.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/HibernatePersistence.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/HibernateQuery.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/InjectionSettingsFactory.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/QueryImpl.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/TransactionImpl.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/Version.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/connection/
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/connection/InjectedDataSourceConnectionProvider.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/BeanCallback.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/Callback.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/CallbackHandlerConsumer.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/CallbackResolver.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3AutoFlushEventListener.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3DeleteEventListener.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3FlushEntityEventListener.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3FlushEventListener.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3MergeEventListener.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PersistEventListener.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PersistOnFlushEventListener.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PostDeleteEventListener.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PostInsertEventListener.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PostLoadEventListener.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PostUpdateEventListener.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3SaveEventListener.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3SaveOrUpdateEventListener.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EntityCallbackHandler.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/ListenerCallback.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/instrument/
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/instrument/InterceptFieldClassFileTransformer.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/ExplodedJarVisitor.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/FileZippedJarVisitor.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/InputStreamZippedJarVisitor.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/JarVisitor.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/NamedInputStream.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/PersistenceMetadata.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/PersistenceXmlLoader.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/XmlHelper.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/transaction/
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/transaction/JoinableCMTTransaction.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/transaction/JoinableCMTTransactionFactory.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/util/
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/util/ConfigurationHelper.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/util/LogHelper.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/util/NamingHelper.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/engine/
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/engine/EJB3CascadeStyle.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/engine/EJB3CascadingAction.java
   trunk/HibernateExt/entitymanager/src/resources/
   trunk/HibernateExt/entitymanager/src/resources/META-INF/
   trunk/HibernateExt/entitymanager/src/resources/META-INF/services/
   trunk/HibernateExt/entitymanager/src/resources/META-INF/services/javax.persistence.spi.PersistenceProvider
   trunk/HibernateExt/entitymanager/src/resources/org/
   trunk/HibernateExt/entitymanager/src/resources/org/hibernate/
   trunk/HibernateExt/entitymanager/src/resources/org/hibernate/ejb/
   trunk/HibernateExt/entitymanager/src/resources/org/hibernate/ejb/persistence_1_0.xsd
   trunk/HibernateExt/entitymanager/src/test-resources/
   trunk/HibernateExt/entitymanager/src/test-resources/cfgxmlpar/
   trunk/HibernateExt/entitymanager/src/test-resources/cfgxmlpar/META-INF/
   trunk/HibernateExt/entitymanager/src/test-resources/cfgxmlpar/META-INF/persistence.xml
   trunk/HibernateExt/entitymanager/src/test-resources/cfgxmlpar/org/
   trunk/HibernateExt/entitymanager/src/test-resources/cfgxmlpar/org/hibernate/
   trunk/HibernateExt/entitymanager/src/test-resources/cfgxmlpar/org/hibernate/ejb/
   trunk/HibernateExt/entitymanager/src/test-resources/cfgxmlpar/org/hibernate/ejb/test/
   trunk/HibernateExt/entitymanager/src/test-resources/cfgxmlpar/org/hibernate/ejb/test/pack/
   trunk/HibernateExt/entitymanager/src/test-resources/cfgxmlpar/org/hibernate/ejb/test/pack/cfgxmlpar/
   trunk/HibernateExt/entitymanager/src/test-resources/cfgxmlpar/org/hibernate/ejb/test/pack/cfgxmlpar/hibernate.cfg.xml
   trunk/HibernateExt/entitymanager/src/test-resources/defaultpar/
   trunk/HibernateExt/entitymanager/src/test-resources/defaultpar/META-INF/
   trunk/HibernateExt/entitymanager/src/test-resources/defaultpar/META-INF/orm.xml
   trunk/HibernateExt/entitymanager/src/test-resources/defaultpar/META-INF/persistence.xml
   trunk/HibernateExt/entitymanager/src/test-resources/defaultpar/org/
   trunk/HibernateExt/entitymanager/src/test-resources/defaultpar/org/hibernate/
   trunk/HibernateExt/entitymanager/src/test-resources/defaultpar/org/hibernate/ejb/
   trunk/HibernateExt/entitymanager/src/test-resources/defaultpar/org/hibernate/ejb/test/
   trunk/HibernateExt/entitymanager/src/test-resources/defaultpar/org/hibernate/ejb/test/pack/
   trunk/HibernateExt/entitymanager/src/test-resources/defaultpar/org/hibernate/ejb/test/pack/defaultpar/
   trunk/HibernateExt/entitymanager/src/test-resources/defaultpar/org/hibernate/ejb/test/pack/defaultpar/Mouse.hbm.xml
   trunk/HibernateExt/entitymanager/src/test-resources/excludehbmpar/
   trunk/HibernateExt/entitymanager/src/test-resources/excludehbmpar/META-INF/
   trunk/HibernateExt/entitymanager/src/test-resources/excludehbmpar/META-INF/persistence.xml
   trunk/HibernateExt/entitymanager/src/test-resources/excludehbmpar/org/
   trunk/HibernateExt/entitymanager/src/test-resources/excludehbmpar/org/hibernate/
   trunk/HibernateExt/entitymanager/src/test-resources/excludehbmpar/org/hibernate/ejb/
   trunk/HibernateExt/entitymanager/src/test-resources/excludehbmpar/org/hibernate/ejb/test/
   trunk/HibernateExt/entitymanager/src/test-resources/excludehbmpar/org/hibernate/ejb/test/pack/
   trunk/HibernateExt/entitymanager/src/test-resources/excludehbmpar/org/hibernate/ejb/test/pack/excludehbmpar/
   trunk/HibernateExt/entitymanager/src/test-resources/excludehbmpar/org/hibernate/ejb/test/pack/excludehbmpar/Mouse.hbm.xml
   trunk/HibernateExt/entitymanager/src/test-resources/excludehbmpar/orm2.xml
   trunk/HibernateExt/entitymanager/src/test-resources/explicitpar/
   trunk/HibernateExt/entitymanager/src/test-resources/explicitpar/META-INF/
   trunk/HibernateExt/entitymanager/src/test-resources/explicitpar/META-INF/orm.xml
   trunk/HibernateExt/entitymanager/src/test-resources/explicitpar/META-INF/persistence.xml
   trunk/HibernateExt/entitymanager/src/test-resources/explodedpar/
   trunk/HibernateExt/entitymanager/src/test-resources/explodedpar/META-INF/
   trunk/HibernateExt/entitymanager/src/test-resources/explodedpar/META-INF/persistence.xml
   trunk/HibernateExt/entitymanager/src/test-resources/explodedpar/org/
   trunk/HibernateExt/entitymanager/src/test-resources/explodedpar/org/hibernate/
   trunk/HibernateExt/entitymanager/src/test-resources/explodedpar/org/hibernate/ejb/
   trunk/HibernateExt/entitymanager/src/test-resources/explodedpar/org/hibernate/ejb/test/
   trunk/HibernateExt/entitymanager/src/test-resources/explodedpar/org/hibernate/ejb/test/pack/
   trunk/HibernateExt/entitymanager/src/test-resources/explodedpar/org/hibernate/ejb/test/pack/explodedpar/
   trunk/HibernateExt/entitymanager/src/test-resources/explodedpar/org/hibernate/ejb/test/pack/explodedpar/Elephant.hbm.xml
   trunk/HibernateExt/entitymanager/src/test-resources/externaljar/
   trunk/HibernateExt/entitymanager/src/test-resources/externaljar/META-INF/
   trunk/HibernateExt/entitymanager/src/test-resources/externaljar/META-INF/MANIFEST.MF
   trunk/HibernateExt/entitymanager/src/test-resources/externaljar/META-INF/orm.xml
   trunk/HibernateExt/entitymanager/src/test-resources/overridenpar/
   trunk/HibernateExt/entitymanager/src/test-resources/overridenpar/META-INF/
   trunk/HibernateExt/entitymanager/src/test-resources/overridenpar/META-INF/persistence.xml
   trunk/HibernateExt/entitymanager/src/test-resources/space par/
   trunk/HibernateExt/entitymanager/src/test-resources/space par/META-INF/
   trunk/HibernateExt/entitymanager/src/test-resources/space par/META-INF/persistence.xml
   trunk/HibernateExt/entitymanager/src/test/
   trunk/HibernateExt/entitymanager/src/test/NoPackageEntity.java
   trunk/HibernateExt/entitymanager/src/test/hibernate.properties
   trunk/HibernateExt/entitymanager/src/test/log4j.properties
   trunk/HibernateExt/entitymanager/src/test/org/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/Cat.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/Distributor.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/EJB3TestCase.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/EntityManagerTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/Item.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/LastUpdateListener.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/MyNamingStrategy.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/PackagedEntityManagerTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/QueryTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/TestCase.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ValidatorIntegrationTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/Wallet.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/association/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/association/AssociationTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/association/Incident.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/association/IncidentStatus.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/association/Kitchen.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/association/Oven.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/CallbackAndDirtyTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/CallbacksTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/CommunicationSystem.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/CountryChecker.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/CountryNameCheckerListener.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Customer.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Employee.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/ExceptionListener.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/FirstOneListener.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/IncreaseListener.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Person.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Plant.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/RemoteControl.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Rythm.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Television.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Translation.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/VideoSystem.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Author.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/CascadeTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Conference.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/DeleteOrphanTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/ExtractionDocument.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/ExtractionDocumentInfo.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/FetchTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/FetchTest2.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Grandson.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Parent.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Soldier.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Soldier2.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Son.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Song.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Student.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Teacher.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Troop.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Troop2.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/connection/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/connection/DataSourceInjectionTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/connection/FakeDataSource.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/connection/FakeDataSourceException.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/connection/PersistenceUnitInfoImpl.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration/EntityManagerSerializationTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration/EventOverridingTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration/ExceptionInterceptor.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration/InterceptorTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration/ProgrammaticConfTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration/TestCase.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Cat.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Colony.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Competition.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Competitor.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Decorate.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Dog.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Dress.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Empire.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/FlushModeTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/FlushTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/GetReferenceTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Mail.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/MergeTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Music.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Pet.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Race.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/RefreshTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/RemoveTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/A.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/B1.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/B2.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/B3.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/B4.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/C1.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/C2.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/CascadePersistTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/exception/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/exception/ExceptionTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/exception/Music.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/hibernate.cfg.xml
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/inheritance/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/inheritance/Fruit.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/inheritance/InheritanceTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/inheritance/Strawberry.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/instrument/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/instrument/InstrumentedClassLoader.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/instrument/InterceptFieldClassFileTransformerTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/instrument/Simple.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/lob/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/lob/BlobTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/lob/ImageReader.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/lock/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/lock/Lock.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/lock/LockTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Animal.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Child.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Employee.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Employer.hbm.xml
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Employer.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/FindTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/FlushTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/GetLoadTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Mammal.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/MergeNewTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/MergeTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Node.hbm.xml
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Node.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/NumberedNode.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Parent.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/ParentChild.hbm.xml
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/PersistTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Reptile.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Workload.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/cfgxmlpar/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/cfgxmlpar/Morito.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/ApplicationServer.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/IncrementListener.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/Lighter.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/Money.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/Mouse.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/OtherIncrementListener.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/Version.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/package-info.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/excludehbmpar/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/excludehbmpar/Caipirinha.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/explicitpar/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/explicitpar/Washer.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/explodedpar/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/explodedpar/Carpet.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/explodedpar/Elephant.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/explodedpar/package-info.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/externaljar/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/externaljar/Scooter.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/overridenpar/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/overridenpar/Bug.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/spacepar/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/spacepar/Bug.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/various/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/various/Airplane.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/various/Seat.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/package-info.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/packaging/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/packaging/JarVisitorTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/transaction/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/transaction/Book.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/transaction/FlushAndTransactionTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/Address.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/Article.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/Employee.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/Light.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/Lighter.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/XmlAttributeOverrideTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/XmlTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/orm.xml
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/orm2.xml
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/orm3.xml
   trunk/HibernateExt/jpa-api/
   trunk/HibernateExt/jpa-api/.cvsignore
   trunk/HibernateExt/jpa-api/build.xml
   trunk/HibernateExt/jpa-api/doc/
   trunk/HibernateExt/jpa-api/doc/api/
   trunk/HibernateExt/jpa-api/doc/api/package.html
   trunk/HibernateExt/jpa-api/etc/
   trunk/HibernateExt/jpa-api/etc/jdstyle.css
   trunk/HibernateExt/jpa-api/etc/license.txt
   trunk/HibernateExt/jpa-api/src/
   trunk/HibernateExt/jpa-api/src/javax/
   trunk/HibernateExt/jpa-api/src/javax/persistence/
   trunk/HibernateExt/jpa-api/src/javax/persistence/AssociationOverride.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/AssociationOverrides.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/AttributeOverride.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/AttributeOverrides.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/Basic.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/CascadeType.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/Column.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/ColumnResult.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/DiscriminatorColumn.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/DiscriminatorType.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/DiscriminatorValue.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/Embeddable.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/Embedded.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/EmbeddedId.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/Entity.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/EntityExistsException.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/EntityListeners.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/EntityManager.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/EntityManagerFactory.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/EntityNotFoundException.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/EntityResult.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/EntityTransaction.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/EnumType.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/Enumerated.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/ExcludeDefaultListeners.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/ExcludeSuperclassListeners.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/FetchType.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/FieldResult.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/FlushModeType.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/GeneratedValue.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/GenerationType.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/Id.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/IdClass.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/Inheritance.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/InheritanceType.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/JoinColumn.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/JoinColumns.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/JoinTable.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/Lob.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/LockModeType.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/ManyToMany.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/ManyToOne.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/MapKey.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/MappedSuperclass.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/NamedNativeQueries.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/NamedNativeQuery.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/NamedQueries.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/NamedQuery.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/NoResultException.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/NonUniqueResultException.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/OneToMany.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/OneToOne.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/OptimisticLockException.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/OrderBy.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/Persistence.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/PersistenceContext.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/PersistenceContextType.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/PersistenceContexts.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/PersistenceException.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/PersistenceProperty.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/PersistenceUnit.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/PersistenceUnits.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/PostLoad.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/PostPersist.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/PostRemove.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/PostUpdate.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/PrePersist.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/PreRemove.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/PreUpdate.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/PrimaryKeyJoinColumn.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/PrimaryKeyJoinColumns.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/Query.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/QueryHint.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/RollbackException.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/SecondaryTable.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/SecondaryTables.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/SequenceGenerator.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/SqlResultSetMapping.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/SqlResultSetMappings.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/Table.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/TableGenerator.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/Temporal.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/TemporalType.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/TransactionRequiredException.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/Transient.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/UniqueConstraint.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/Version.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/package-info.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/spi/
   trunk/HibernateExt/jpa-api/src/javax/persistence/spi/ClassTransformer.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/spi/PersistenceProvider.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/spi/PersistenceUnitInfo.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/spi/PersistenceUnitTransactionType.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/spi/package-info.java
   trunk/HibernateExt/search/
   trunk/HibernateExt/search/build.properties.dist
   trunk/HibernateExt/search/build.xml
   trunk/HibernateExt/search/changelog.txt
   trunk/HibernateExt/search/doc/
   trunk/HibernateExt/search/doc/api/
   trunk/HibernateExt/search/doc/api/package.html
   trunk/HibernateExt/search/doc/reference/
   trunk/HibernateExt/search/doc/reference/.cvsignore
   trunk/HibernateExt/search/doc/reference/build.xml
   trunk/HibernateExt/search/doc/reference/en/
   trunk/HibernateExt/search/doc/reference/en/images/
   trunk/HibernateExt/search/doc/reference/en/images/hibernate_logo_a.png
   trunk/HibernateExt/search/doc/reference/en/images/jms-backend.png
   trunk/HibernateExt/search/doc/reference/en/images/lucene-backend.png
   trunk/HibernateExt/search/doc/reference/en/master.xml
   trunk/HibernateExt/search/doc/reference/en/modules/
   trunk/HibernateExt/search/doc/reference/en/modules/architecture.xml
   trunk/HibernateExt/search/doc/reference/en/modules/batchindex.xml
   trunk/HibernateExt/search/doc/reference/en/modules/configuration.xml
   trunk/HibernateExt/search/doc/reference/en/modules/mapping.xml
   trunk/HibernateExt/search/doc/reference/en/modules/query.xml
   trunk/HibernateExt/search/doc/reference/en/styles/
   trunk/HibernateExt/search/doc/reference/en/styles/fopdf.xsl
   trunk/HibernateExt/search/doc/reference/en/styles/html.css
   trunk/HibernateExt/search/doc/reference/en/styles/html.xsl
   trunk/HibernateExt/search/doc/reference/en/styles/html_chunk.xsl
   trunk/HibernateExt/search/jdbc/
   trunk/HibernateExt/search/jdbc/hsqldb.jar
   trunk/HibernateExt/search/lgpl.txt
   trunk/HibernateExt/search/lib/
   trunk/HibernateExt/search/lib/README.txt
   trunk/HibernateExt/search/lib/jms.jar
   trunk/HibernateExt/search/lib/lucene-core-2.1.0.jar
   trunk/HibernateExt/search/readme.txt
   trunk/HibernateExt/search/src/
   trunk/HibernateExt/search/src/java/
   trunk/HibernateExt/search/src/java/org/
   trunk/HibernateExt/search/src/java/org/hibernate/
   trunk/HibernateExt/search/src/java/org/hibernate/search/
   trunk/HibernateExt/search/src/java/org/hibernate/search/Environment.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/FullTextSession.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/Search.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/SearchException.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/SearchFactory.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/Version.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/
   trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Boost.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/ContainedIn.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/DateBridge.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/DocumentId.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Field.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/FieldBridge.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Index.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Indexed.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/IndexedEmbedded.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Keyword.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Parameter.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Resolution.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Store.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Text.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Unstored.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/backend/
   trunk/HibernateExt/search/src/java/org/hibernate/search/backend/AddLuceneWork.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/backend/BackendQueueProcessorFactory.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/backend/DeleteLuceneWork.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/backend/LuceneWork.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/backend/QueueingProcessor.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/backend/Work.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/backend/WorkType.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/backend/Worker.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/backend/WorkerFactory.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/backend/Workspace.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/
   trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/BatchedQueueingProcessor.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/PostTransactionWorkQueueSynchronization.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/TransactionalWorker.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/jms/
   trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/jms/AbstractJMSHibernateSearchController.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/jms/JMSBackendQueueProcessor.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/jms/JMSBackendQueueProcessorFactory.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/lucene/
   trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/lucene/LuceneBackendQueueProcessor.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/lucene/LuceneBackendQueueProcessorFactory.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/lucene/LuceneWorker.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/
   trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/BridgeFactory.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/FieldBridge.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/ParameterizedBridge.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/String2FieldBridgeAdaptor.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/StringBridge.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/TwoWayFieldBridge.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/TwoWayString2FieldBridgeAdaptor.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/TwoWayStringBridge.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/
   trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/BigDecimalBridge.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/BigIntegerBridge.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/BooleanBridge.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/DateBridge.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/DoubleBridge.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/EnumBridge.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/FloatBridge.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/IntegerBridge.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/LongBridge.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/NumberBridge.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/ShortBridge.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/StringBridge.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/engine/
   trunk/HibernateExt/search/src/java/org/hibernate/search/engine/DocumentBuilder.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/event/
   trunk/HibernateExt/search/src/java/org/hibernate/search/event/FullTextIndexEventListener.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/impl/
   trunk/HibernateExt/search/src/java/org/hibernate/search/impl/FullTextSessionImpl.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/query/
   trunk/HibernateExt/search/src/java/org/hibernate/search/query/EntityInfo.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/query/FullTextQueryImpl.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/query/IteratorImpl.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/query/ScrollableResultsImpl.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/store/
   trunk/HibernateExt/search/src/java/org/hibernate/search/store/DirectoryProvider.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/store/DirectoryProviderFactory.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/store/FSDirectoryProvider.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/store/FSMasterDirectoryProvider.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/store/FSSlaveDirectoryProvider.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/store/RAMDirectoryProvider.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/util/
   trunk/HibernateExt/search/src/java/org/hibernate/search/util/BinderHelper.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/util/ContextHelper.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/util/DirectoryProviderHelper.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/util/FileHelper.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/util/WeakIdentityHashMap.java
   trunk/HibernateExt/search/src/test-resources/
   trunk/HibernateExt/search/src/test/
   trunk/HibernateExt/search/src/test/hibernate.properties
   trunk/HibernateExt/search/src/test/log4j.properties
   trunk/HibernateExt/search/src/test/org/
   trunk/HibernateExt/search/src/test/org/hibernate/
   trunk/HibernateExt/search/src/test/org/hibernate/search/
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/AlternateDocument.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/Clock.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/Document.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/FSDirectoryTest.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/HANTestCase.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/RamDirectoryTest.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/SearchTestCase.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/TransactionTest.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/bridge/
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/bridge/BridgeTest.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/bridge/Cloud.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/bridge/CloudType.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/bridge/DateSplitBridge.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/bridge/PaddedIntegerBridge.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/bridge/TruncateFieldBridge.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/bridge/TruncateStringBridge.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/directoryProvider/
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/directoryProvider/FSSlaveAndMasterDPTest.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/directoryProvider/MultipleSFTestCase.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/directoryProvider/SnowStorm.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/embedded/
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/embedded/Address.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/embedded/EmbeddedTest.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/embedded/Owner.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/embedded/Tower.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/fieldAccess/
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/fieldAccess/Document.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/fieldAccess/FieldAccessTest.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/inheritance/
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/inheritance/Animal.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/inheritance/InheritanceTest.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/inheritance/Mammal.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/master/
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/master/JMSMasterTest.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/master/MDBSearchController.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/master/MyHibernateUtil.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/master/TShirt.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/slave/
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/slave/JMSSlaveTest.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/slave/SearchQueueChecker.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/slave/TShirt.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/query/
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/query/AlternateBook.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/query/Book.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/query/Clock.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/query/LuceneQueryTest.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/session/
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/session/Email.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/session/MassIndexTest.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/util/
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/util/FileHelperTest.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/worker/
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/worker/AsyncWorkerTest.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/worker/Employee.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/worker/Employer.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/worker/SyncWorkerTest.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/worker/WorkerTestCase.java
   trunk/HibernateExt/validator/
   trunk/HibernateExt/validator/build.properties.dist
   trunk/HibernateExt/validator/build.xml
   trunk/HibernateExt/validator/changelog.txt
   trunk/HibernateExt/validator/doc/
   trunk/HibernateExt/validator/doc/api/
   trunk/HibernateExt/validator/doc/api/package.html
   trunk/HibernateExt/validator/doc/reference/
   trunk/HibernateExt/validator/doc/reference/build.xml
   trunk/HibernateExt/validator/doc/reference/en/
   trunk/HibernateExt/validator/doc/reference/en/images/
   trunk/HibernateExt/validator/doc/reference/en/images/hibernate_logo_a.png
   trunk/HibernateExt/validator/doc/reference/en/master.xml
   trunk/HibernateExt/validator/doc/reference/en/modules/
   trunk/HibernateExt/validator/doc/reference/en/modules/checkconstraints.xml
   trunk/HibernateExt/validator/doc/reference/en/modules/defineconstraints.xml
   trunk/HibernateExt/validator/doc/reference/en/styles/
   trunk/HibernateExt/validator/doc/reference/en/styles/fopdf.xsl
   trunk/HibernateExt/validator/doc/reference/en/styles/html.css
   trunk/HibernateExt/validator/doc/reference/en/styles/html.xsl
   trunk/HibernateExt/validator/doc/reference/en/styles/html_chunk.xsl
   trunk/HibernateExt/validator/jdbc/
   trunk/HibernateExt/validator/jdbc/hsqldb.jar
   trunk/HibernateExt/validator/lgpl.txt
   trunk/HibernateExt/validator/lib/
   trunk/HibernateExt/validator/lib/README.txt
   trunk/HibernateExt/validator/readme.txt
   trunk/HibernateExt/validator/src/
   trunk/HibernateExt/validator/src/java/
   trunk/HibernateExt/validator/src/java/org/
   trunk/HibernateExt/validator/src/java/org/hibernate/
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/AbstractLuhnValidator.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/AssertFalse.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/AssertFalseValidator.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/AssertTrue.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/AssertTrueValidator.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/ClassValidator.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/CreditCardNumber.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/CreditCardNumberValidator.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/Digits.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/DigitsValidator.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/EAN.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/EANValidator.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/Email.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/EmailValidator.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/Environment.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/Future.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/FutureValidator.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/InvalidStateException.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/InvalidValue.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/Length.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/LengthValidator.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/Max.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/MaxValidator.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/MessageInterpolator.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/Min.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/MinValidator.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/NotEmpty.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/NotEmptyValidator.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/NotNull.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/NotNullValidator.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/Past.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/PastValidator.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/Pattern.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/PatternValidator.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/Patterns.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/PersistentClassConstraint.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/PropertyConstraint.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/Range.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/RangeValidator.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/Size.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/SizeValidator.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/Valid.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/Validator.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/ValidatorClass.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/Version.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/event/
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/event/JPAValidateListener.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/event/ValidateEventListener.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/event/ValidatePreInsertEventListener.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/event/ValidatePreUpdateEventListener.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/interpolator/
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/interpolator/DefaultMessageInterpolator.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/interpolator/DefaultMessageInterpolatorAggerator.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages.properties
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_da.properties
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_de.properties
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_es.properties
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_fr.properties
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_it.properties
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_nl.properties
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_pt_BR.properties
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_sv.properties
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_zh_CN.properties
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_zh_TW.properties
   trunk/HibernateExt/validator/src/test/
   trunk/HibernateExt/validator/src/test/ValidatorMessages.properties
   trunk/HibernateExt/validator/src/test/ValidatorMessages_da.properties
   trunk/HibernateExt/validator/src/test/ValidatorMessages_fr.properties
   trunk/HibernateExt/validator/src/test/hibernate.properties
   trunk/HibernateExt/validator/src/test/log4j.properties
   trunk/HibernateExt/validator/src/test/messages_en.properties
   trunk/HibernateExt/validator/src/test/org/
   trunk/HibernateExt/validator/src/test/org/hibernate/
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Address.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Brother.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Building.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Contact.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/EmailTest.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Engine.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/HANTestCase.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/InterpolationTest.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Serializability.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/SerializabilityValidator.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Site.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Tv.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/TvOwner.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/User.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/ValidatorTest.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Vase.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/collections/
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/collections/Movie.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/collections/Presenter.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/collections/Show.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/collections/Tv.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/collections/ValidationCollectionTest.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/Address.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/CreditCard.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/EmbeddedObjectTest.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/HibernateAnnotationIntegrationTest.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/MarsAddress.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/Martian.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/MartianPk.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/Music.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/NonHibernateAnnotationsIntegrationTest.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/PrefixMessageInterpolator.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/Rock.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/Tv.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/TvOwner.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/User.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/Venusian.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/VenusianPk.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance/
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance/Animal.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance/BoneEater.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance/Dog.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance/Eater.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance/InheritanceTest.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance/Name.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/jpa/
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/jpa/Commander.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/jpa/JPATestCase.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/jpa/JPAValidateListenerTest.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/jpa/Submarine.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/valid/
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/valid/Address.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/valid/Form.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/valid/Member.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/valid/ValidTest.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/validators/
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/validators/Car.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/validators/CreditCard.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/validators/DigitsTest.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/validators/LuhnTest.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/validators/NotEmptyTest.java
Removed:
   trunk/HibernateExt/annotations/.cvsignore
   trunk/HibernateExt/annotations/build.properties.dist
   trunk/HibernateExt/annotations/build.xml
   trunk/HibernateExt/annotations/changelog.txt
   trunk/HibernateExt/annotations/doc/
   trunk/HibernateExt/annotations/doc/api/
   trunk/HibernateExt/annotations/doc/api/package.html
   trunk/HibernateExt/annotations/doc/reference/
   trunk/HibernateExt/annotations/doc/reference/.cvsignore
   trunk/HibernateExt/annotations/doc/reference/build.xml
   trunk/HibernateExt/annotations/doc/reference/en/
   trunk/HibernateExt/annotations/doc/reference/en/images/
   trunk/HibernateExt/annotations/doc/reference/en/images/hibernate_logo_a.png
   trunk/HibernateExt/annotations/doc/reference/en/master.xml
   trunk/HibernateExt/annotations/doc/reference/en/modules/
   trunk/HibernateExt/annotations/doc/reference/en/modules/additionalmodules.xml
   trunk/HibernateExt/annotations/doc/reference/en/modules/entity.xml
   trunk/HibernateExt/annotations/doc/reference/en/modules/setup.xml
   trunk/HibernateExt/annotations/doc/reference/en/modules/xml-overriding.xml
   trunk/HibernateExt/annotations/doc/reference/en/styles/
   trunk/HibernateExt/annotations/doc/reference/en/styles/fopdf.xsl
   trunk/HibernateExt/annotations/doc/reference/en/styles/html.css
   trunk/HibernateExt/annotations/doc/reference/en/styles/html.xsl
   trunk/HibernateExt/annotations/doc/reference/en/styles/html_chunk.xsl
   trunk/HibernateExt/annotations/doc/reference/fr/
   trunk/HibernateExt/annotations/doc/reference/fr/images/
   trunk/HibernateExt/annotations/doc/reference/fr/images/hibernate_logo_a.png
   trunk/HibernateExt/annotations/doc/reference/fr/master.xml
   trunk/HibernateExt/annotations/doc/reference/fr/modules/
   trunk/HibernateExt/annotations/doc/reference/fr/modules/entity.xml
   trunk/HibernateExt/annotations/doc/reference/fr/modules/lucene.xml
   trunk/HibernateExt/annotations/doc/reference/fr/modules/setup.xml
   trunk/HibernateExt/annotations/doc/reference/fr/modules/validator.xml
   trunk/HibernateExt/annotations/doc/reference/fr/modules/xml-overriding.xml
   trunk/HibernateExt/annotations/doc/reference/fr/styles/
   trunk/HibernateExt/annotations/doc/reference/fr/styles/fopdf.xsl
   trunk/HibernateExt/annotations/doc/reference/fr/styles/html.css
   trunk/HibernateExt/annotations/doc/reference/fr/styles/html.xsl
   trunk/HibernateExt/annotations/doc/reference/fr/styles/html_chunk.xsl
   trunk/HibernateExt/annotations/doc/reference/zh_cn/
   trunk/HibernateExt/annotations/doc/reference/zh_cn/fop/
   trunk/HibernateExt/annotations/doc/reference/zh_cn/fop/simhei.ttf
   trunk/HibernateExt/annotations/doc/reference/zh_cn/fop/simhei.xml
   trunk/HibernateExt/annotations/doc/reference/zh_cn/fop/simsun.ttc
   trunk/HibernateExt/annotations/doc/reference/zh_cn/fop/simsun.xml
   trunk/HibernateExt/annotations/doc/reference/zh_cn/fop/userconfig.xml
   trunk/HibernateExt/annotations/doc/reference/zh_cn/images/
   trunk/HibernateExt/annotations/doc/reference/zh_cn/images/hibernate_logo_a.png
   trunk/HibernateExt/annotations/doc/reference/zh_cn/master.xml
   trunk/HibernateExt/annotations/doc/reference/zh_cn/modules/
   trunk/HibernateExt/annotations/doc/reference/zh_cn/modules/entity.xml
   trunk/HibernateExt/annotations/doc/reference/zh_cn/modules/lucene.xml
   trunk/HibernateExt/annotations/doc/reference/zh_cn/modules/setup.xml
   trunk/HibernateExt/annotations/doc/reference/zh_cn/modules/validator.xml
   trunk/HibernateExt/annotations/doc/reference/zh_cn/modules/xml-overriding.xml
   trunk/HibernateExt/annotations/doc/reference/zh_cn/styles/
   trunk/HibernateExt/annotations/doc/reference/zh_cn/styles/fopdf.xsl
   trunk/HibernateExt/annotations/doc/reference/zh_cn/styles/html.css
   trunk/HibernateExt/annotations/doc/reference/zh_cn/styles/html.xsl
   trunk/HibernateExt/annotations/doc/reference/zh_cn/styles/html_chunk.xsl
   trunk/HibernateExt/annotations/jdbc/
   trunk/HibernateExt/annotations/jdbc/hsqldb.jar
   trunk/HibernateExt/annotations/lgpl.txt
   trunk/HibernateExt/annotations/lib/
   trunk/HibernateExt/annotations/lib/README.txt
   trunk/HibernateExt/annotations/readme.txt
   trunk/HibernateExt/annotations/src/
   trunk/HibernateExt/annotations/src/java/
   trunk/HibernateExt/annotations/src/java/org/
   trunk/HibernateExt/annotations/src/java/org/hibernate/
   trunk/HibernateExt/annotations/src/java/org/hibernate/AnnotationException.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/AccessType.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/BatchSize.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Cache.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/CacheConcurrencyStrategy.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/CacheModeType.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Cascade.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/CascadeType.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Check.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/CollectionId.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/CollectionOfElements.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Columns.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/DiscriminatorFormula.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Entity.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Fetch.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/FetchMode.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Filter.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/FilterDef.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/FilterDefs.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/FilterJoinTable.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/FilterJoinTables.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Filters.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/FlushModeType.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/ForceDiscriminator.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/ForeignKey.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Formula.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Generated.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/GenerationTime.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/GenericGenerator.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Immutable.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Index.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/IndexColumn.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/LazyCollection.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/LazyCollectionOption.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/LazyToOne.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/LazyToOneOption.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Loader.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/MapKey.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/MapKeyManyToMany.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/NamedNativeQueries.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/NamedNativeQuery.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/NamedQueries.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/NamedQuery.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/NotFound.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/NotFoundAction.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/OnDelete.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/OnDeleteAction.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/OptimisticLock.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/OptimisticLockType.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/OrderBy.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/ParamDef.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Parameter.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Parent.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Persister.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/PolymorphismType.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Proxy.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/ResultCheckStyle.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/SQLDelete.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/SQLDeleteAll.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/SQLInsert.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/SQLUpdate.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Sort.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/SortType.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Table.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Tables.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Target.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Tuplizer.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Tuplizers.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Type.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/TypeDef.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/TypeDefs.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Where.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/WhereJoinTable.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/AbstractPropertyHolder.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/AnnotatedClassType.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/AnnotationBinder.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/AnnotationConfiguration.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/BinderHelper.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/ClassPropertyHolder.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/CollectionPropertyHolder.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/ComponentPropertyHolder.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/CreateKeySecondPass.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/DefaultComponentSafeNamingStrategy.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/EJB3DTDEntityResolver.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/EJB3NamingStrategy.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/Ejb3Column.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/Ejb3DiscriminatorColumn.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/Ejb3JoinColumn.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/ExtendedMappings.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/FkSecondPass.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/IndexColumn.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/IndexSecondPass.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/InheritanceState.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/NotYetImplementedException.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/OneToOneSecondPass.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/PropertyData.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/PropertyHolder.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/PropertyHolderBuilder.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/PropertyInferredData.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/PropertyPreloadedData.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/WrappedInferredData.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/ArrayBinder.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/BagBinder.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/CollectionBinder.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/EntityBinder.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/IdBagBinder.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/ListBinder.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/MapBinder.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/Nullability.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/PrimitiveArrayBinder.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/PropertyBinder.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/QueryBinder.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/ResultsetMappingSecondPass.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/SetBinder.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/SimpleValueBinder.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/TableBinder.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/Version.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/reflection/
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/reflection/EJB3OverridenAnnotationReader.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/reflection/EJB3ReflectionManager.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/reflection/XMLContext.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/ejb/
   trunk/HibernateExt/annotations/src/java/org/hibernate/ejb/orm_1_0.xsd
   trunk/HibernateExt/annotations/src/java/org/hibernate/mapping/
   trunk/HibernateExt/annotations/src/java/org/hibernate/mapping/IdGenerator.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/type/
   trunk/HibernateExt/annotations/src/java/org/hibernate/type/AbstractLobType.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/type/ByteArrayBlobType.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/type/CharacterArrayClobType.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/type/EnumType.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/type/PrimitiveByteArrayBlobType.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/type/PrimitiveCharacterArrayClobType.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/type/SerializableToBlobType.java
   trunk/HibernateExt/annotations/src/java/org/hibernate/type/StringClobType.java
   trunk/HibernateExt/annotations/src/test/
   trunk/HibernateExt/annotations/src/test/ehcache.xml
   trunk/HibernateExt/annotations/src/test/hibernate.properties
   trunk/HibernateExt/annotations/src/test/log4j.properties
   trunk/HibernateExt/annotations/src/test/org/
   trunk/HibernateExt/annotations/src/test/org/hibernate/
   trunk/HibernateExt/annotations/src/test/org/hibernate/annotations/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/A320.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/A320b.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/AlternativeNamingStrategy.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/AmericaCupClass.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Boat.hbm.xml
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Boat.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Company.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/ConfigurationTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Country.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Customer.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Discount.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/EntityTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Ferry.hbm.xml
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Ferry.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Flight.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/FlyingObject.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/IncorrectEntity.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/JoinedSubclassTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Passport.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Plane.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Port.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/SafeMappingTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/SecuredBindingTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Sky.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/TestCase.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Thing.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Ticket.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/TicketComparator.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/AccessTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/Bed.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/BigBed.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/Chair.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/Furniture.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/Thingy.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/Woody.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/array/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/array/ArrayTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/array/Competitor.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/array/Contest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/bytecode/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/bytecode/Hammer.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/bytecode/ProxyBreakingTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/bytecode/Tool.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/bytecode/hammer.hbm.xml
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cascade/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cascade/CascadeTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cascade/Mouth.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cascade/Tooth.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/Channel.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/Child.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/ChildPk.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/CompositeIdTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/Order.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/OrderLine.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/OrderLinePk.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/Parent.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/ParentPk.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/Presenter.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/Product.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/TvMagazin.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/TvMagazinPk.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement/Boy.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement/Brand.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement/Character.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement/CollectionElementTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement/CountryAttitude.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement/Toy.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/duplicatedgenerator/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/duplicatedgenerator/DuplicateTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/duplicatedgenerator/Flight.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/duplicatedgenerator/orm.xml
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Address.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/AddressType.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Book.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/CorpType.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Country.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Deal.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/EmbeddedTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/FixedLeg.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/FloatLeg.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/InternetProvider.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Leg.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/LegalStructure.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Manager.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Nationality.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/NotonialDeal.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Person.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/RegionalArticle.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/RegionalArticlePk.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/SpreadDeal.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Summary.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Swap.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/VanillaSwap.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Address.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/BasicHibernateAnnotationsTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Bid.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/CasterStringType.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/CommunityBid.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Country.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Flight.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Forest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Java5FeaturesTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Length.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/MonetaryAmount.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/MonetaryAmountUserType.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/PropertyDefaultMappingsTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Race.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Ransom.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Starred.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Tree.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/WashingMachine.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/ZipCode.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/package-info.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/Cellular.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/Communication.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/EntityNonEntityTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/GSM.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/Interaction.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/Phone.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/Voice.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/fetch/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/fetch/FetchingTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/fetch/Person.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/fetch/Stay.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/DNA.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/EmbeddedGenericsTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/Gene.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/GenericsTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/Item.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/Paper.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/PaperType.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/Price.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/PricedStuff.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/SomeGuy.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/State.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/StateType.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/Stuff.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/UnresolvedTypeTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/WildEntity.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/Child.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/ChildHierarchy1.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/ChildHierarchy2.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/ChildHierarchy22.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/GenericsInheritanceTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/Parent.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/ParentHierarchy1.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/ParentHierarchy2.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/ParentHierarchy22.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/hibernate.cfg.xml
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Ball.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/BreakDance.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Computer.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Department.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Dog.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/FirTree.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Footballer.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/FootballerPk.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Furniture.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/GoalKeeper.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Home.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/IdClassTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/IdTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Location.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/MilitaryBuilding.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Phone.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Shoe.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/SoundSystem.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Store.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Tower.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Tree.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/package-info.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/identifiercollection/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/identifiercollection/IdentifierCollectionTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/identifiercollection/Passport.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/identifiercollection/Stamp.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/Card.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/CardField.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/CardKey.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/Customer.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/IdManyToOne.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/Project.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/Store.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/StoreCustomer.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/StoreCustomerPK.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/AddressBook.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/AddressEntry.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/AddressEntryPk.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/AlphabeticalDirectory.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Atmosphere.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Drawer.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Dress.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Gas.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/GasKey.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Generation.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/GenerationGroup.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/GenerationUser.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/IndexedCollectionTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/MapKeyTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/News.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Newspaper.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Painter.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Painting.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/PaintingPk.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/PressReleaseAgency.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Software.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Trainee.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Training.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Version.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Wardrobe.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/Apple.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/Carrot.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/Fruit.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/SubclassTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/Tomato.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/Vegetable.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/VegetablePk.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Alarm.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Asset.hbm.xml
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Asset.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Clothing.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Document.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/EventInformation.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/File.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/FinancialAsset.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Folder.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/JoinedSubclassAndSecondaryTable.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/JoinedSubclassTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Parent.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Pool.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/ProgramExecution.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/PropertyAsset.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Sweater.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/SwimmingPool.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/SymbolicLink.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/mixed/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/mixed/Document.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/mixed/File.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/mixed/Folder.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/mixed/SubclassTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/mixed/SymbolicLink.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/Building.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/Funk.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/House.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/Music.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/Noise.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/PaperTrash.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/Rock.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/Trash.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/union/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/union/Document.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/union/File.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/union/Folder.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/union/SubclassTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/union/SymbolicLink.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/interfaces/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/interfaces/Contact.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/interfaces/ContactImpl.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/interfaces/InterfacesTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/interfaces/User.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/interfaces/UserImpl.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/Cat.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/Death.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/Dog.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/DogPk.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/JoinTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/Life.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/loader/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/loader/Loader.hbm.xml
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/loader/LoaderTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/loader/Player.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/loader/Team.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/loader/TestCase.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/lob/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/lob/Book.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/lob/CompiledCode.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/lob/Editor.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/lob/LobTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Building.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/BuildingCompany.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Cat.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/CatPk.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/City.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Company.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Employee.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Employer.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Friend.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Group.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/GroupWithSet.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Inspector.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/InspectorPrefixes.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/KnownClient.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Man.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/ManPk.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/ManyToManyTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Permission.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Store.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Supplier.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Woman.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/WomanPk.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Zone.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/BiggestForest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Car.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Carz.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Child.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Color.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Customer.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Deal.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/DistrictUser.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/ForestType.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Frame.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Lens.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Lotz.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/LotzPK.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/ManyToOneJoinTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/ManyToOneOnNonPkTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/ManyToOneTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Node.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/NodePk.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Order.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/OrderLine.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Parent.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/ParentPk.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/TreeType.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/User.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/UserPK.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/notfound/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/notfound/Coin.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/notfound/Currency.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/notfound/NotFoundTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Child.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/City.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Monkey.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/OneToManyTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Organisation.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/OrganisationUser.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Parent.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/ParentPk.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Person.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/PoliticalParty.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Politician.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Soldier.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Street.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Tiger.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Trainer.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Troop.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Address.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Body.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Client.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Computer.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/ComputerPk.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Heart.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/OneToOneTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Owner.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/OwnerAddress.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Party.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/PartyAffiliate.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/SerialNumber.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/SerialNumberPk.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Trousers.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/TrousersZip.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/orm.xml
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/override/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/override/AssociationOverrideTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/override/Location.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/override/Move.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/override/Trip.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/persister/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/persister/Card.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/persister/CollectionPersister.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/persister/Deck.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/persister/EntityPersister.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/persister/PersisterTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/polymorphism/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/polymorphism/Car.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/polymorphism/MovingThing.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/polymorphism/PolymorphismTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/polymorphism/SportCar.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Area.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Captain.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/CasimirParticle.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Chaos.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Dictionary.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Dimensions.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Identity.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Mark.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Night.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/QueryAndSQLTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/SpaceShip.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/SynonymousDictionary.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/orm.xml
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/quote/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/quote/QuoteTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/quote/Role.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/quote/User.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Bag.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Clothes.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/House.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Inhabitant.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Item.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/ItemCost.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Luggage.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Postman.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Rambler.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/ReferencedColumnNameTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Vendor.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/WarehouseItem.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/Administration.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/Availability.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/BusTrip.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/BusTripPk.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/Competition.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/EJB3OverridenAnnotationReaderTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/LogListener.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/Match.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/Organization.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/OtherLogListener.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/SocialSecurityMoralAccount.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/SocialSecurityNumber.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/SocialSecurityPhysicalAccount.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/TennisMatch.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/XMLContextTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/metadata-complete.xml
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/orm.xml
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/strategy/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/strategy/Location.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/strategy/Storm.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/strategy/StrategyTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass/Component.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass/Machine.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass/Product.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass/Robot.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass/T800.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass/TablePerClassTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/Brand.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/Luggage.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/LuggageImpl.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/Owner.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/OwnerImpl.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/Size.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/SizeImpl.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/TargetTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/Country.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/Cuisine.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/DataProxyHandler.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/DynamicComponentTuplizer.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/DynamicEntityTuplizer.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/DynamicInstantiator.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/EntityNameInterceptor.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/ProxyHelper.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/TuplizerTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/type/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/type/Dvd.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/type/MyOid.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/type/MyOidGenerator.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/type/MyOidType.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/type/TypeTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/Antenna.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/Conductor.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/GeneratedTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/IndexTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/ProfessionalAgreement.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/Truck.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/Vehicule.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/VersionTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/version/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/CarModel.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/Ejb3XmlTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/Light.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/Lighter.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/Manufacturer.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/Model.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/orm.xml
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/orm2.xml
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/orm3.xml
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/A.hbm.xml
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/A.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/AImpl.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/B.hbm.xml
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/B.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/BImpl.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/CloudType.hbm.xml
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/CloudType.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/Government.hbm.xml
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/Government.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/HbmTest.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/PrimeMinister.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/Sky.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/Z.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/ZImpl.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/lucene/
   trunk/HibernateExt/commons-annotations/build.xml
   trunk/HibernateExt/commons-annotations/changelog.txt
   trunk/HibernateExt/commons-annotations/lgpl.txt
   trunk/HibernateExt/commons-annotations/lib/
   trunk/HibernateExt/commons-annotations/lib/README.txt
   trunk/HibernateExt/commons-annotations/readme.txt
   trunk/HibernateExt/commons-annotations/src/
   trunk/HibernateExt/commons-annotations/src/java/
   trunk/HibernateExt/commons-annotations/src/java/org/
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/AssertionFailure.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/annotationfactory/
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/annotationfactory/AnnotationDescriptor.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/annotationfactory/AnnotationFactory.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/annotationfactory/AnnotationProxy.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/AnnotationReader.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/Filter.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/ReflectionManager.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/ReflectionUtil.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/XAnnotatedElement.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/XClass.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/XMember.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/XMethod.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/XPackage.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/XProperty.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaAnnotationReader.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaReflectionManager.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXAnnotatedElement.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXArrayType.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXClass.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXCollectionType.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXMember.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXMethod.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXPackage.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXProperty.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXSimpleType.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXType.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/Pair.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/ApproximatingTypeEnvironment.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/CompoundTypeEnvironment.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/IdentityTypeEnvironment.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/SimpleTypeEnvironment.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/TypeEnvironment.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/TypeEnvironmentFactory.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/TypeFactory.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/TypeSwitch.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/TypeUtils.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/util/
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/util/ReflectHelper.java
   trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/util/StringHelper.java
   trunk/HibernateExt/commons-annotations/src/test/
   trunk/HibernateExt/commons-annotations/src/test/org/
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/annotationfactory/
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/annotationfactory/AnnotationFactoryTest.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/annotationfactory/AnnotationProxyTest.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/annotationfactory/TestAnnotation.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/Foo.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/FooFather.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/JavaReflectionManagerTest.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/JavaXClassTest.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/JavaXPropertyTest.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/Sex.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/TestAnnotation.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/XAnnotatedElementTestCase.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/ApproximatingTypeEnvironmentTest.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/BigBlob.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/Dad.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/Grandpa.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/Language.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/Neighbour.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/Son.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/SonOfBlob.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/TestAnnotation.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/TypeEnvironmentFactoryTest.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/TypeUtilsTest.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/DeepGenericsContainment.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/DeepGenericsInheritance.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/Dummy.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/DummySubclass.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/GenericSuperclass1.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/GenericSuperclass2.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/Subclass1.java
   trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/Subclass2.java
   trunk/HibernateExt/ejb-api/
   trunk/HibernateExt/ejb/
   trunk/HibernateExt/entitymanager/.cvsignore
   trunk/HibernateExt/entitymanager/build.properties.dist
   trunk/HibernateExt/entitymanager/build.xml
   trunk/HibernateExt/entitymanager/changelog.txt
   trunk/HibernateExt/entitymanager/doc/
   trunk/HibernateExt/entitymanager/doc/reference/
   trunk/HibernateExt/entitymanager/doc/reference/.cvsignore
   trunk/HibernateExt/entitymanager/doc/reference/build.xml
   trunk/HibernateExt/entitymanager/doc/reference/en/
   trunk/HibernateExt/entitymanager/doc/reference/en/images/
   trunk/HibernateExt/entitymanager/doc/reference/en/images/hibernate_logo_a.png
   trunk/HibernateExt/entitymanager/doc/reference/en/master.xml
   trunk/HibernateExt/entitymanager/doc/reference/en/modules/
   trunk/HibernateExt/entitymanager/doc/reference/en/modules/architecture.xml
   trunk/HibernateExt/entitymanager/doc/reference/en/modules/batch.xml
   trunk/HibernateExt/entitymanager/doc/reference/en/modules/configuration.xml
   trunk/HibernateExt/entitymanager/doc/reference/en/modules/entitymanagerapi.xml
   trunk/HibernateExt/entitymanager/doc/reference/en/modules/listeners.xml
   trunk/HibernateExt/entitymanager/doc/reference/en/modules/query_ejbql.xml
   trunk/HibernateExt/entitymanager/doc/reference/en/modules/query_native.xml
   trunk/HibernateExt/entitymanager/doc/reference/en/modules/transactions.xml
   trunk/HibernateExt/entitymanager/doc/reference/en/styles/
   trunk/HibernateExt/entitymanager/doc/reference/en/styles/fopdf.xsl
   trunk/HibernateExt/entitymanager/doc/reference/en/styles/html.css
   trunk/HibernateExt/entitymanager/doc/reference/en/styles/html.xsl
   trunk/HibernateExt/entitymanager/doc/reference/en/styles/html_chunk.xsl
   trunk/HibernateExt/entitymanager/jdbc/
   trunk/HibernateExt/entitymanager/jdbc/hsqldb.jar
   trunk/HibernateExt/entitymanager/lgpl.txt
   trunk/HibernateExt/entitymanager/lib/
   trunk/HibernateExt/entitymanager/lib/README.txt
   trunk/HibernateExt/entitymanager/lib/jboss-archive-browsing.jar
   trunk/HibernateExt/entitymanager/readme.txt
   trunk/HibernateExt/entitymanager/src/
   trunk/HibernateExt/entitymanager/src/java/
   trunk/HibernateExt/entitymanager/src/java/org/
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/AbstractEntityManagerImpl.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/CurrentEntityManagerImpl.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/Ejb3Configuration.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/Ejb3ConfigurationObjectFactory.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/EntityManagerFactoryImpl.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/EntityManagerImpl.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/EventListenerConfigurator.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/HibernateEntityManager.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/HibernateEntityManagerFactory.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/HibernateEntityManagerImplementor.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/HibernatePersistence.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/HibernateQuery.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/InjectionSettingsFactory.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/QueryImpl.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/TransactionImpl.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/Version.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/connection/
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/connection/InjectedDataSourceConnectionProvider.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/BeanCallback.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/Callback.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/CallbackHandlerConsumer.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/CallbackResolver.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3AutoFlushEventListener.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3DeleteEventListener.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3FlushEntityEventListener.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3FlushEventListener.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3MergeEventListener.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PersistEventListener.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PersistOnFlushEventListener.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PostDeleteEventListener.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PostInsertEventListener.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PostLoadEventListener.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PostUpdateEventListener.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3SaveEventListener.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3SaveOrUpdateEventListener.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EntityCallbackHandler.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/ListenerCallback.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/instrument/
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/instrument/InterceptFieldClassFileTransformer.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/ExplodedJarVisitor.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/FileZippedJarVisitor.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/InputStreamZippedJarVisitor.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/JarVisitor.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/NamedInputStream.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/PersistenceMetadata.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/PersistenceXmlLoader.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/XmlHelper.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/transaction/
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/transaction/JoinableCMTTransaction.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/transaction/JoinableCMTTransactionFactory.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/util/
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/util/ConfigurationHelper.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/util/LogHelper.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/util/NamingHelper.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/engine/
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/engine/EJB3CascadeStyle.java
   trunk/HibernateExt/entitymanager/src/java/org/hibernate/engine/EJB3CascadingAction.java
   trunk/HibernateExt/entitymanager/src/resources/
   trunk/HibernateExt/entitymanager/src/resources/META-INF/
   trunk/HibernateExt/entitymanager/src/resources/META-INF/services/
   trunk/HibernateExt/entitymanager/src/resources/META-INF/services/javax.persistence.spi.PersistenceProvider
   trunk/HibernateExt/entitymanager/src/resources/org/
   trunk/HibernateExt/entitymanager/src/resources/org/hibernate/
   trunk/HibernateExt/entitymanager/src/resources/org/hibernate/ejb/
   trunk/HibernateExt/entitymanager/src/resources/org/hibernate/ejb/persistence_1_0.xsd
   trunk/HibernateExt/entitymanager/src/test-resources/
   trunk/HibernateExt/entitymanager/src/test-resources/cfgxmlpar/
   trunk/HibernateExt/entitymanager/src/test-resources/cfgxmlpar/META-INF/
   trunk/HibernateExt/entitymanager/src/test-resources/cfgxmlpar/META-INF/persistence.xml
   trunk/HibernateExt/entitymanager/src/test-resources/cfgxmlpar/org/
   trunk/HibernateExt/entitymanager/src/test-resources/cfgxmlpar/org/hibernate/
   trunk/HibernateExt/entitymanager/src/test-resources/cfgxmlpar/org/hibernate/ejb/
   trunk/HibernateExt/entitymanager/src/test-resources/cfgxmlpar/org/hibernate/ejb/test/
   trunk/HibernateExt/entitymanager/src/test-resources/cfgxmlpar/org/hibernate/ejb/test/pack/
   trunk/HibernateExt/entitymanager/src/test-resources/cfgxmlpar/org/hibernate/ejb/test/pack/cfgxmlpar/
   trunk/HibernateExt/entitymanager/src/test-resources/cfgxmlpar/org/hibernate/ejb/test/pack/cfgxmlpar/hibernate.cfg.xml
   trunk/HibernateExt/entitymanager/src/test-resources/defaultpar/
   trunk/HibernateExt/entitymanager/src/test-resources/defaultpar/META-INF/
   trunk/HibernateExt/entitymanager/src/test-resources/defaultpar/META-INF/orm.xml
   trunk/HibernateExt/entitymanager/src/test-resources/defaultpar/META-INF/persistence.xml
   trunk/HibernateExt/entitymanager/src/test-resources/defaultpar/org/
   trunk/HibernateExt/entitymanager/src/test-resources/defaultpar/org/hibernate/
   trunk/HibernateExt/entitymanager/src/test-resources/defaultpar/org/hibernate/ejb/
   trunk/HibernateExt/entitymanager/src/test-resources/defaultpar/org/hibernate/ejb/test/
   trunk/HibernateExt/entitymanager/src/test-resources/defaultpar/org/hibernate/ejb/test/pack/
   trunk/HibernateExt/entitymanager/src/test-resources/defaultpar/org/hibernate/ejb/test/pack/defaultpar/
   trunk/HibernateExt/entitymanager/src/test-resources/defaultpar/org/hibernate/ejb/test/pack/defaultpar/Mouse.hbm.xml
   trunk/HibernateExt/entitymanager/src/test-resources/excludehbmpar/
   trunk/HibernateExt/entitymanager/src/test-resources/excludehbmpar/META-INF/
   trunk/HibernateExt/entitymanager/src/test-resources/excludehbmpar/META-INF/persistence.xml
   trunk/HibernateExt/entitymanager/src/test-resources/excludehbmpar/org/
   trunk/HibernateExt/entitymanager/src/test-resources/excludehbmpar/org/hibernate/
   trunk/HibernateExt/entitymanager/src/test-resources/excludehbmpar/org/hibernate/ejb/
   trunk/HibernateExt/entitymanager/src/test-resources/excludehbmpar/org/hibernate/ejb/test/
   trunk/HibernateExt/entitymanager/src/test-resources/excludehbmpar/org/hibernate/ejb/test/pack/
   trunk/HibernateExt/entitymanager/src/test-resources/excludehbmpar/org/hibernate/ejb/test/pack/excludehbmpar/
   trunk/HibernateExt/entitymanager/src/test-resources/excludehbmpar/org/hibernate/ejb/test/pack/excludehbmpar/Mouse.hbm.xml
   trunk/HibernateExt/entitymanager/src/test-resources/excludehbmpar/orm2.xml
   trunk/HibernateExt/entitymanager/src/test-resources/explicitpar/
   trunk/HibernateExt/entitymanager/src/test-resources/explicitpar/META-INF/
   trunk/HibernateExt/entitymanager/src/test-resources/explicitpar/META-INF/orm.xml
   trunk/HibernateExt/entitymanager/src/test-resources/explicitpar/META-INF/persistence.xml
   trunk/HibernateExt/entitymanager/src/test-resources/explodedpar/
   trunk/HibernateExt/entitymanager/src/test-resources/explodedpar/META-INF/
   trunk/HibernateExt/entitymanager/src/test-resources/explodedpar/META-INF/persistence.xml
   trunk/HibernateExt/entitymanager/src/test-resources/explodedpar/org/
   trunk/HibernateExt/entitymanager/src/test-resources/explodedpar/org/hibernate/
   trunk/HibernateExt/entitymanager/src/test-resources/explodedpar/org/hibernate/ejb/
   trunk/HibernateExt/entitymanager/src/test-resources/explodedpar/org/hibernate/ejb/test/
   trunk/HibernateExt/entitymanager/src/test-resources/explodedpar/org/hibernate/ejb/test/pack/
   trunk/HibernateExt/entitymanager/src/test-resources/explodedpar/org/hibernate/ejb/test/pack/explodedpar/
   trunk/HibernateExt/entitymanager/src/test-resources/explodedpar/org/hibernate/ejb/test/pack/explodedpar/Elephant.hbm.xml
   trunk/HibernateExt/entitymanager/src/test-resources/externaljar/
   trunk/HibernateExt/entitymanager/src/test-resources/externaljar/META-INF/
   trunk/HibernateExt/entitymanager/src/test-resources/externaljar/META-INF/MANIFEST.MF
   trunk/HibernateExt/entitymanager/src/test-resources/externaljar/META-INF/orm.xml
   trunk/HibernateExt/entitymanager/src/test-resources/overridenpar/
   trunk/HibernateExt/entitymanager/src/test-resources/overridenpar/META-INF/
   trunk/HibernateExt/entitymanager/src/test-resources/overridenpar/META-INF/persistence.xml
   trunk/HibernateExt/entitymanager/src/test-resources/space par/
   trunk/HibernateExt/entitymanager/src/test-resources/space par/META-INF/
   trunk/HibernateExt/entitymanager/src/test-resources/space par/META-INF/persistence.xml
   trunk/HibernateExt/entitymanager/src/test/
   trunk/HibernateExt/entitymanager/src/test/NoPackageEntity.java
   trunk/HibernateExt/entitymanager/src/test/hibernate.properties
   trunk/HibernateExt/entitymanager/src/test/log4j.properties
   trunk/HibernateExt/entitymanager/src/test/org/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/Cat.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/Distributor.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/EJB3TestCase.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/EntityManagerTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/Item.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/LastUpdateListener.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/MyNamingStrategy.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/PackagedEntityManagerTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/QueryTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/TestCase.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ValidatorIntegrationTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/Wallet.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/association/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/association/AssociationTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/association/Incident.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/association/IncidentStatus.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/association/Kitchen.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/association/Oven.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/CallbackAndDirtyTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/CallbacksTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/CommunicationSystem.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/CountryChecker.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/CountryNameCheckerListener.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Customer.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Employee.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/ExceptionListener.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/FirstOneListener.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/IncreaseListener.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Person.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Plant.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/RemoteControl.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Rythm.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Television.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Translation.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/VideoSystem.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Author.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/CascadeTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Conference.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/DeleteOrphanTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/ExtractionDocument.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/ExtractionDocumentInfo.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/FetchTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/FetchTest2.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Grandson.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Parent.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Soldier.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Soldier2.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Son.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Song.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Student.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Teacher.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Troop.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Troop2.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/connection/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/connection/DataSourceInjectionTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/connection/FakeDataSource.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/connection/FakeDataSourceException.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/connection/PersistenceUnitInfoImpl.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration/EntityManagerSerializationTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration/EventOverridingTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration/ExceptionInterceptor.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration/InterceptorTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration/ProgrammaticConfTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration/TestCase.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Cat.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Colony.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Competition.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Competitor.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Decorate.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Dog.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Dress.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Empire.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/FlushModeTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/FlushTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/GetReferenceTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Mail.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/MergeTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Music.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Pet.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Race.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/RefreshTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/RemoveTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/A.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/B1.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/B2.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/B3.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/B4.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/C1.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/C2.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/CascadePersistTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/exception/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/exception/ExceptionTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/exception/Music.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/hibernate.cfg.xml
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/inheritance/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/inheritance/Fruit.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/inheritance/InheritanceTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/inheritance/Strawberry.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/instrument/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/instrument/InstrumentedClassLoader.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/instrument/InterceptFieldClassFileTransformerTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/instrument/Simple.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/lob/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/lob/BlobTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/lob/ImageReader.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/lock/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/lock/Lock.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/lock/LockTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Animal.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Child.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Employee.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Employer.hbm.xml
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Employer.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/FindTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/FlushTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/GetLoadTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Mammal.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/MergeNewTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/MergeTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Node.hbm.xml
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Node.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/NumberedNode.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Parent.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/ParentChild.hbm.xml
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/PersistTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Reptile.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Workload.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/cfgxmlpar/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/cfgxmlpar/Morito.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/ApplicationServer.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/IncrementListener.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/Lighter.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/Money.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/Mouse.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/OtherIncrementListener.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/Version.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/package-info.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/excludehbmpar/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/excludehbmpar/Caipirinha.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/explicitpar/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/explicitpar/Washer.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/explodedpar/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/explodedpar/Carpet.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/explodedpar/Elephant.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/explodedpar/package-info.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/externaljar/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/externaljar/Scooter.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/overridenpar/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/overridenpar/Bug.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/spacepar/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/spacepar/Bug.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/various/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/various/Airplane.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/various/Seat.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/package-info.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/packaging/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/packaging/JarVisitorTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/transaction/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/transaction/Book.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/transaction/FlushAndTransactionTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/Address.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/Article.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/Employee.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/Light.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/Lighter.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/XmlAttributeOverrideTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/XmlTest.java
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/orm.xml
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/orm2.xml
   trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/orm3.xml
   trunk/HibernateExt/jpa-api/.cvsignore
   trunk/HibernateExt/jpa-api/build.xml
   trunk/HibernateExt/jpa-api/doc/
   trunk/HibernateExt/jpa-api/doc/api/
   trunk/HibernateExt/jpa-api/doc/api/package.html
   trunk/HibernateExt/jpa-api/etc/
   trunk/HibernateExt/jpa-api/etc/jdstyle.css
   trunk/HibernateExt/jpa-api/etc/license.txt
   trunk/HibernateExt/jpa-api/src/
   trunk/HibernateExt/jpa-api/src/javax/
   trunk/HibernateExt/jpa-api/src/javax/persistence/
   trunk/HibernateExt/jpa-api/src/javax/persistence/AssociationOverride.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/AssociationOverrides.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/AttributeOverride.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/AttributeOverrides.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/Basic.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/CascadeType.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/Column.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/ColumnResult.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/DiscriminatorColumn.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/DiscriminatorType.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/DiscriminatorValue.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/Embeddable.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/Embedded.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/EmbeddedId.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/Entity.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/EntityExistsException.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/EntityListeners.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/EntityManager.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/EntityManagerFactory.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/EntityNotFoundException.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/EntityResult.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/EntityTransaction.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/EnumType.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/Enumerated.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/ExcludeDefaultListeners.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/ExcludeSuperclassListeners.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/FetchType.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/FieldResult.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/FlushModeType.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/GeneratedValue.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/GenerationType.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/Id.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/IdClass.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/Inheritance.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/InheritanceType.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/JoinColumn.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/JoinColumns.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/JoinTable.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/Lob.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/LockModeType.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/ManyToMany.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/ManyToOne.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/MapKey.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/MappedSuperclass.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/NamedNativeQueries.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/NamedNativeQuery.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/NamedQueries.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/NamedQuery.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/NoResultException.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/NonUniqueResultException.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/OneToMany.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/OneToOne.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/OptimisticLockException.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/OrderBy.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/Persistence.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/PersistenceContext.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/PersistenceContextType.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/PersistenceContexts.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/PersistenceException.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/PersistenceProperty.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/PersistenceUnit.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/PersistenceUnits.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/PostLoad.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/PostPersist.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/PostRemove.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/PostUpdate.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/PrePersist.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/PreRemove.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/PreUpdate.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/PrimaryKeyJoinColumn.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/PrimaryKeyJoinColumns.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/Query.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/QueryHint.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/RollbackException.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/SecondaryTable.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/SecondaryTables.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/SequenceGenerator.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/SqlResultSetMapping.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/SqlResultSetMappings.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/Table.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/TableGenerator.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/Temporal.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/TemporalType.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/TransactionRequiredException.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/Transient.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/UniqueConstraint.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/Version.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/package-info.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/spi/
   trunk/HibernateExt/jpa-api/src/javax/persistence/spi/ClassTransformer.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/spi/PersistenceProvider.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/spi/PersistenceUnitInfo.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/spi/PersistenceUnitTransactionType.java
   trunk/HibernateExt/jpa-api/src/javax/persistence/spi/package-info.java
   trunk/HibernateExt/metadata/
   trunk/HibernateExt/search/build.properties.dist
   trunk/HibernateExt/search/build.xml
   trunk/HibernateExt/search/changelog.txt
   trunk/HibernateExt/search/doc/
   trunk/HibernateExt/search/doc/api/
   trunk/HibernateExt/search/doc/api/package.html
   trunk/HibernateExt/search/doc/reference/
   trunk/HibernateExt/search/doc/reference/.cvsignore
   trunk/HibernateExt/search/doc/reference/build.xml
   trunk/HibernateExt/search/doc/reference/en/
   trunk/HibernateExt/search/doc/reference/en/images/
   trunk/HibernateExt/search/doc/reference/en/images/hibernate_logo_a.png
   trunk/HibernateExt/search/doc/reference/en/images/jms-backend.png
   trunk/HibernateExt/search/doc/reference/en/images/lucene-backend.png
   trunk/HibernateExt/search/doc/reference/en/master.xml
   trunk/HibernateExt/search/doc/reference/en/modules/
   trunk/HibernateExt/search/doc/reference/en/modules/architecture.xml
   trunk/HibernateExt/search/doc/reference/en/modules/batchindex.xml
   trunk/HibernateExt/search/doc/reference/en/modules/configuration.xml
   trunk/HibernateExt/search/doc/reference/en/modules/mapping.xml
   trunk/HibernateExt/search/doc/reference/en/modules/query.xml
   trunk/HibernateExt/search/doc/reference/en/styles/
   trunk/HibernateExt/search/doc/reference/en/styles/fopdf.xsl
   trunk/HibernateExt/search/doc/reference/en/styles/html.css
   trunk/HibernateExt/search/doc/reference/en/styles/html.xsl
   trunk/HibernateExt/search/doc/reference/en/styles/html_chunk.xsl
   trunk/HibernateExt/search/jdbc/
   trunk/HibernateExt/search/jdbc/hsqldb.jar
   trunk/HibernateExt/search/lgpl.txt
   trunk/HibernateExt/search/lib/
   trunk/HibernateExt/search/lib/README.txt
   trunk/HibernateExt/search/lib/jms.jar
   trunk/HibernateExt/search/lib/lucene-core-2.1.0.jar
   trunk/HibernateExt/search/readme.txt
   trunk/HibernateExt/search/src/
   trunk/HibernateExt/search/src/java/
   trunk/HibernateExt/search/src/java/org/
   trunk/HibernateExt/search/src/java/org/hibernate/
   trunk/HibernateExt/search/src/java/org/hibernate/search/
   trunk/HibernateExt/search/src/java/org/hibernate/search/Environment.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/FullTextSession.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/Search.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/SearchException.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/SearchFactory.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/Version.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/
   trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Boost.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/ContainedIn.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/DateBridge.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/DocumentId.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Field.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/FieldBridge.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Index.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Indexed.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/IndexedEmbedded.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Keyword.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Parameter.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Resolution.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Store.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Text.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Unstored.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/backend/
   trunk/HibernateExt/search/src/java/org/hibernate/search/backend/AddLuceneWork.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/backend/BackendQueueProcessorFactory.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/backend/DeleteLuceneWork.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/backend/LuceneWork.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/backend/QueueingProcessor.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/backend/Work.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/backend/WorkType.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/backend/Worker.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/backend/WorkerFactory.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/backend/Workspace.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/
   trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/BatchedQueueingProcessor.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/PostTransactionWorkQueueSynchronization.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/TransactionalWorker.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/jms/
   trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/jms/AbstractJMSHibernateSearchController.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/jms/JMSBackendQueueProcessor.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/jms/JMSBackendQueueProcessorFactory.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/lucene/
   trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/lucene/LuceneBackendQueueProcessor.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/lucene/LuceneBackendQueueProcessorFactory.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/lucene/LuceneWorker.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/
   trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/BridgeFactory.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/FieldBridge.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/ParameterizedBridge.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/String2FieldBridgeAdaptor.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/StringBridge.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/TwoWayFieldBridge.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/TwoWayString2FieldBridgeAdaptor.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/TwoWayStringBridge.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/
   trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/BigDecimalBridge.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/BigIntegerBridge.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/BooleanBridge.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/DateBridge.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/DoubleBridge.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/EnumBridge.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/FloatBridge.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/IntegerBridge.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/LongBridge.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/NumberBridge.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/ShortBridge.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/StringBridge.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/engine/
   trunk/HibernateExt/search/src/java/org/hibernate/search/engine/DocumentBuilder.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/event/
   trunk/HibernateExt/search/src/java/org/hibernate/search/event/FullTextIndexEventListener.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/impl/
   trunk/HibernateExt/search/src/java/org/hibernate/search/impl/FullTextSessionImpl.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/query/
   trunk/HibernateExt/search/src/java/org/hibernate/search/query/EntityInfo.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/query/FullTextQueryImpl.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/query/IteratorImpl.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/query/ScrollableResultsImpl.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/store/
   trunk/HibernateExt/search/src/java/org/hibernate/search/store/DirectoryProvider.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/store/DirectoryProviderFactory.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/store/FSDirectoryProvider.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/store/FSMasterDirectoryProvider.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/store/FSSlaveDirectoryProvider.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/store/RAMDirectoryProvider.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/util/
   trunk/HibernateExt/search/src/java/org/hibernate/search/util/BinderHelper.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/util/ContextHelper.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/util/DirectoryProviderHelper.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/util/FileHelper.java
   trunk/HibernateExt/search/src/java/org/hibernate/search/util/WeakIdentityHashMap.java
   trunk/HibernateExt/search/src/test-resources/
   trunk/HibernateExt/search/src/test/
   trunk/HibernateExt/search/src/test/hibernate.properties
   trunk/HibernateExt/search/src/test/log4j.properties
   trunk/HibernateExt/search/src/test/org/
   trunk/HibernateExt/search/src/test/org/hibernate/
   trunk/HibernateExt/search/src/test/org/hibernate/search/
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/AlternateDocument.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/Clock.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/Document.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/FSDirectoryTest.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/HANTestCase.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/RamDirectoryTest.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/SearchTestCase.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/TransactionTest.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/bridge/
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/bridge/BridgeTest.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/bridge/Cloud.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/bridge/CloudType.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/bridge/DateSplitBridge.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/bridge/PaddedIntegerBridge.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/bridge/TruncateFieldBridge.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/bridge/TruncateStringBridge.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/directoryProvider/
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/directoryProvider/FSSlaveAndMasterDPTest.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/directoryProvider/MultipleSFTestCase.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/directoryProvider/SnowStorm.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/embedded/
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/embedded/Address.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/embedded/EmbeddedTest.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/embedded/Owner.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/embedded/Tower.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/fieldAccess/
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/fieldAccess/Document.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/fieldAccess/FieldAccessTest.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/inheritance/
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/inheritance/Animal.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/inheritance/InheritanceTest.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/inheritance/Mammal.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/master/
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/master/JMSMasterTest.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/master/MDBSearchController.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/master/MyHibernateUtil.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/master/TShirt.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/slave/
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/slave/JMSSlaveTest.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/slave/SearchQueueChecker.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/slave/TShirt.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/query/
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/query/AlternateBook.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/query/Book.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/query/Clock.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/query/LuceneQueryTest.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/session/
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/session/Email.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/session/MassIndexTest.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/util/
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/util/FileHelperTest.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/worker/
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/worker/AsyncWorkerTest.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/worker/Employee.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/worker/Employer.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/worker/SyncWorkerTest.java
   trunk/HibernateExt/search/src/test/org/hibernate/search/test/worker/WorkerTestCase.java
   trunk/HibernateExt/validator/build.properties.dist
   trunk/HibernateExt/validator/build.xml
   trunk/HibernateExt/validator/changelog.txt
   trunk/HibernateExt/validator/doc/
   trunk/HibernateExt/validator/doc/api/
   trunk/HibernateExt/validator/doc/api/package.html
   trunk/HibernateExt/validator/doc/reference/
   trunk/HibernateExt/validator/doc/reference/build.xml
   trunk/HibernateExt/validator/doc/reference/en/
   trunk/HibernateExt/validator/doc/reference/en/images/
   trunk/HibernateExt/validator/doc/reference/en/images/hibernate_logo_a.png
   trunk/HibernateExt/validator/doc/reference/en/master.xml
   trunk/HibernateExt/validator/doc/reference/en/modules/
   trunk/HibernateExt/validator/doc/reference/en/modules/checkconstraints.xml
   trunk/HibernateExt/validator/doc/reference/en/modules/defineconstraints.xml
   trunk/HibernateExt/validator/doc/reference/en/styles/
   trunk/HibernateExt/validator/doc/reference/en/styles/fopdf.xsl
   trunk/HibernateExt/validator/doc/reference/en/styles/html.css
   trunk/HibernateExt/validator/doc/reference/en/styles/html.xsl
   trunk/HibernateExt/validator/doc/reference/en/styles/html_chunk.xsl
   trunk/HibernateExt/validator/jdbc/
   trunk/HibernateExt/validator/jdbc/hsqldb.jar
   trunk/HibernateExt/validator/lgpl.txt
   trunk/HibernateExt/validator/lib/
   trunk/HibernateExt/validator/lib/README.txt
   trunk/HibernateExt/validator/readme.txt
   trunk/HibernateExt/validator/src/
   trunk/HibernateExt/validator/src/java/
   trunk/HibernateExt/validator/src/java/org/
   trunk/HibernateExt/validator/src/java/org/hibernate/
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/AbstractLuhnValidator.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/AssertFalse.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/AssertFalseValidator.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/AssertTrue.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/AssertTrueValidator.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/ClassValidator.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/CreditCardNumber.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/CreditCardNumberValidator.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/Digits.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/DigitsValidator.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/EAN.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/EANValidator.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/Email.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/EmailValidator.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/Environment.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/Future.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/FutureValidator.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/InvalidStateException.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/InvalidValue.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/Length.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/LengthValidator.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/Max.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/MaxValidator.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/MessageInterpolator.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/Min.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/MinValidator.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/NotEmpty.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/NotEmptyValidator.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/NotNull.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/NotNullValidator.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/Past.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/PastValidator.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/Pattern.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/PatternValidator.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/Patterns.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/PersistentClassConstraint.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/PropertyConstraint.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/Range.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/RangeValidator.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/Size.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/SizeValidator.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/Valid.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/Validator.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/ValidatorClass.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/Version.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/event/
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/event/JPAValidateListener.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/event/ValidateEventListener.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/event/ValidatePreInsertEventListener.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/event/ValidatePreUpdateEventListener.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/interpolator/
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/interpolator/DefaultMessageInterpolator.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/interpolator/DefaultMessageInterpolatorAggerator.java
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages.properties
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_da.properties
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_de.properties
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_es.properties
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_fr.properties
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_it.properties
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_nl.properties
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_pt_BR.properties
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_sv.properties
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_zh_CN.properties
   trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_zh_TW.properties
   trunk/HibernateExt/validator/src/test/
   trunk/HibernateExt/validator/src/test/ValidatorMessages.properties
   trunk/HibernateExt/validator/src/test/ValidatorMessages_da.properties
   trunk/HibernateExt/validator/src/test/ValidatorMessages_fr.properties
   trunk/HibernateExt/validator/src/test/hibernate.properties
   trunk/HibernateExt/validator/src/test/log4j.properties
   trunk/HibernateExt/validator/src/test/messages_en.properties
   trunk/HibernateExt/validator/src/test/org/
   trunk/HibernateExt/validator/src/test/org/hibernate/
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Address.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Brother.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Building.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Contact.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/EmailTest.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Engine.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/HANTestCase.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/InterpolationTest.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Serializability.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/SerializabilityValidator.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Site.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Tv.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/TvOwner.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/User.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/ValidatorTest.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Vase.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/collections/
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/collections/Movie.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/collections/Presenter.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/collections/Show.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/collections/Tv.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/collections/ValidationCollectionTest.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/Address.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/CreditCard.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/EmbeddedObjectTest.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/HibernateAnnotationIntegrationTest.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/MarsAddress.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/Martian.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/MartianPk.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/Music.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/NonHibernateAnnotationsIntegrationTest.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/PrefixMessageInterpolator.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/Rock.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/Tv.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/TvOwner.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/User.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/Venusian.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/VenusianPk.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance/
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance/Animal.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance/BoneEater.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance/Dog.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance/Eater.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance/InheritanceTest.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance/Name.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/jpa/
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/jpa/Commander.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/jpa/JPATestCase.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/jpa/JPAValidateListenerTest.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/jpa/Submarine.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/valid/
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/valid/Address.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/valid/Form.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/valid/Member.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/valid/ValidTest.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/validators/
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/validators/Car.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/validators/CreditCard.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/validators/DigitsTest.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/validators/LuhnTest.java
   trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/validators/NotEmptyTest.java
Modified:
   trunk/HibernateExt/common/common-build.xml
Log:
Merge from Branch_3_2 to trunk for HAN, HEM, Search, Validator and commons-annotations

Copied: trunk/HibernateExt/annotations (from rev 11279, branches/Branch_3_2/HibernateExt/annotations)


Property changes on: trunk/HibernateExt/annotations
___________________________________________________________________
Name: svn:ignore
   + target
build
build.properties
test_output
testout
common-build.xml
javadoc.bat
build.properties
instrumenttestout
classes


Deleted: trunk/HibernateExt/annotations/.cvsignore
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/.cvsignore	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/.cvsignore	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,9 +0,0 @@
-target
-build
-build.properties
-test_output
-testout
-common-build.xml
-javadoc.bat
-build.properties
-instrumenttestout

Copied: trunk/HibernateExt/annotations/.cvsignore (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/.cvsignore)
===================================================================
--- trunk/HibernateExt/annotations/.cvsignore	                        (rev 0)
+++ trunk/HibernateExt/annotations/.cvsignore	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,9 @@
+target
+build
+build.properties
+test_output
+testout
+common-build.xml
+javadoc.bat
+build.properties
+instrumenttestout

Deleted: trunk/HibernateExt/annotations/build.properties.dist
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/build.properties.dist	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/build.properties.dist	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,9 +0,0 @@
-common.dir=.
-src.dir=src
-test.dir=test
-hibernate-core.home=../hibernate-3.2
-
-#locally present jars
-jpa-api.jar=./lib/ejb3-persistence.jar
-commons-annotations.jar=./lib/hibernate-commons-annotations.jar
-validator.jar=./lib/test/hibernate-validator.jar
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/build.properties.dist (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/build.properties.dist)
===================================================================
--- trunk/HibernateExt/annotations/build.properties.dist	                        (rev 0)
+++ trunk/HibernateExt/annotations/build.properties.dist	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,9 @@
+common.dir=.
+src.dir=src
+test.dir=test
+hibernate-core.home=../hibernate-3.2
+
+#locally present jars
+jpa-api.jar=./lib/ejb3-persistence.jar
+commons-annotations.jar=./lib/hibernate-commons-annotations.jar
+validator.jar=./lib/test/hibernate-validator.jar
\ No newline at end of file

Deleted: trunk/HibernateExt/annotations/build.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/build.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/build.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,244 +0,0 @@
-<!--
-
-  Hibernate Annotations ANT build script.
-
-  You need JDK 5.0 installed to build Hibernate Annotations.
-
--->
-
-<project name="Hibernate Annotations" default="dist" basedir=".">
-
-	<!-- Give user a chance to override without editing this file
-		   (and without typing -D each time it compiles it) -->
-	<property file="build.properties"/>
-	<property file="${user.home}/.ant.properties"/>
-
-	<!-- Name of project and version, used to create filenames -->
-	<property name="Name" value="Hibernate Annotations"/>
-	<property name="name" value="hibernate-annotations"/>
-	<property name="version" value="3.2.2.GA"/>
-	<property name="javadoc.packagenames" value="org.hibernate.*"/>
-	<property name="jdbc.dir" value="jdbc"/>
-	<property name="copy.test" value="true"/>
-    <property name="javac.source" value="1.5"/>
-    <property name="javac.target" value="1.5"/>
-    <property name="common.dir" value="../common"/>
-
-	<property name="jpa-api.jar" value="${basedir}/../jpa-api/build/ejb3-persistence.jar"/>
-	<property name="validator.jar"
-			  value="${basedir}/../validator/target/hibernate-validator/hibernate-validator.jar"/>
-	<property name="commons-annotations.jar"
-			  value="${basedir}/../commons-annotations/target/hibernate-commons-annotations/hibernate-commons-annotations.jar"/>
-
-
-	<available property="jpa-present" file="${basedir}/../jpa-api" type="dir"/>
-	<import file="${common.dir}/common-build.xml"/>
-	<property name="jpa-javadoc.dir" value="${dist.doc.dir}/jpa-api"/>
-
-	<path id="lib.moduleclass.path">
-		<pathelement location="${jpa-api.jar}"/>
-		<pathelement location="${commons-annotations.jar}"/>
-	</path>
-
-	<path id="junit.moduleclasspath">
-		<pathelement location="${src.dir}"/>
-		<pathelement location="${test.dir}"/>
-        <pathelement location="${validator.jar}"/>
-        <pathelement location="lib/testlibs/org.eclipse.jdt.core_3.1.0.jar"/>
-		<fileset dir="${jdbc.dir}">
-			<include name="**/*.jar"/>
-			<include name="**/*.zip"/>
-		</fileset>
-	</path>
-
-	<target name="init">
-		<antcall target="common-build.init"/>
-		<available file="${jpa-api.jar}" type="file" property="jpa-api.jar.available"/>
-		<available file="${commons-annotations.jar}" type="file" property="commons-annotations.jar.available"/>
-		<available file="${validator.jar}" type="file" property="validator.jar.available"/>
-        <mkdir dir="${lib.dir}/test"/>
-    </target>
-
-	<target name="get.jpa-api" depends="init" unless="jpa-api.jar.available">
-		<ant inheritall="false" dir="${basedir}/../jpa-api" target="clean"/>
-		<ant inheritall="false" dir="${basedir}/../jpa-api" target="jar"/>
-	</target>
-
-	<target name="get.commons-annotations" depends="init" unless="commons-annotations.jar.available">
-		<ant inheritall="false" dir="${basedir}/../commons-annotations" target="clean"/>
-		<ant inheritall="false" dir="${basedir}/../commons-annotations" target="jar"/>
-	</target>
-
-	<target name="get.validator" depends="init" unless="validator.jar.available">
-		<ant inheritall="false" dir="${basedir}/../validator" target="clean"/>
-		<ant inheritall="false" dir="${basedir}/../validator" target="jar"/>
-	</target>
-
-	<target name="compile" depends="init,get.jpa-api,get.commons-annotations"
-			description="Compile the Java source code">
-		<available
-				classname="org.eclipse.core.launcher.Main"
-				property="build.compiler"
-				value="org.eclipse.jdt.core.JDTCompilerAdapter"
-				classpath="${java.class.path}"/>
-		<javac
-				srcdir="${src.dir}"
-				destdir="${classes.dir}"
-				classpathref="lib.class.path"
-				debug="${javac.debug}"
-				optimize="${javac.optimize}"
-				nowarn="on"
-				source="${javac.source}"
-                target="${javac.target}">
-			<src path="${src.dir}"/>
-		</javac>
-		<copy todir="${classes.dir}">
-			<fileset dir="${src.dir}">
-				<include name="**/resources/*.properties"/>
-				<include name="**/*.xsd"/>
-			</fileset>
-		</copy>
-	</target>
-
-	<target name="compiletest" depends="compile,get.validator" description="Compile the tests">
-		<available
-				classname="org.eclipse.core.launcher.Main"
-				property="build.compiler"
-				value="org.eclipse.jdt.core.JDTCompilerAdapter"
-				classpath="${java.class.path}"/>
-		<javac
-				destdir="${testclasses.dir}"
-				classpathref="junit.classpath"
-				debug="${javac.debug}"
-				optimize="${javac.optimize}"
-				nowarn="on"
-				source="${javac.source}"
-                target="${javac.target}">
-			<src refid="testsrc.path"/>
-		</javac>
-	</target>
-
-
-	<!-- target name="junit" depends="compiletest">
-			<mkdir dir="test_output"/>
-			<junit fork="yes" printsummary="yes" haltonfailure="yes"
-				 forkmode="perBatch">
-				<classpath>
-					<fileset dir="${jdbc.dir}">
-						<include name="**/*.jar"/>
-						<include name="**/*.zip"/>
-					</fileset>
-					<path refid="lib.class.path"/>
-					<pathelement path="${classes.dir}"/>
-					<pathelement path="${src.dir}"/>
-					<pathelement path="${test.dir}"/>
-				</classpath>
-				<formatter type="plain"/>
-				<formatter type="xml"/>
-				<batchtest fork="yes" todir="test_output" haltonfailure="no">
-					<fileset dir="${classes.dir}">
-						<include name="**/*Test.class"/>
-					</fileset>
-				</batchtest>
-			</junit>
-		</target -->
-
-	<!-- Run a single unit test. -->
-	<target name="junitsingle" depends="compiletest"
-			description="Run a single test suite (requires testname and jdbc.driver properties)">
-		<mkdir dir="test_output"/>
-		<junit printsummary="yes" fork="yes" haltonfailure="yes">
-			<classpath>
-				<fileset dir="${jdbc.dir}">
-					<include name="**/*.jar"/>
-					<include name="**/*.zip"/>
-				</fileset>
-				<path refid="lib.class.path"/>
-				<pathelement path="${classes.dir}"/>
-				<pathelement path="${src.dir}"/>
-				<!-- pick up properties from here -->
-				<pathelement path="${test.dir}"/>
-				<!-- pick up mappings from here -->
-			</classpath>
-			<formatter type="plain"/>
-			<formatter type="xml"/>
-			<test fork="yes" todir="test_output" haltonfailure="no" name="${testname}"/>
-		</junit>
-	</target>
-
-	<!-- target name="report">
-			<mkdir dir="test_output"/>
-			<junitreport todir="test_output">
-			  <fileset dir="test_output">
-				<include name="TEST-*.xml"/>
-			  </fileset>
-			  <report format="frames" todir="test_output/report"/>
-			</junitreport>
-		</target -->
-
-	<target name="jar" depends="compile" description="Build the distribution .jar file">
-		<mkdir dir="${classes.dir}/META-INF"/>
-		<manifest file="${classes.dir}/META-INF/MANIFEST.MF">
-			<attribute name="Product" value="${Name}"/>
-			<attribute name="Version" value="${version}"/>
-		</manifest>
-		<antcall target="common-build.jar"/>
-	</target>
-
-	<!-- target name="javadoc" description="Compile the Javadoc API documentation to dist dir">
-				<echo>Skipping java doc since ant's javadoc task cannot handle an alternative javadoc</echo>
-		 </target -->
-
-	<target name="jpa-javadoc" if="jpa-present">
-		<mkdir dir="${jpa-javadoc.dir}"/>
-		<ant dir="../jpa-api" target="javadoc" inheritAll="false"/>
-		<copy todir="${jpa-javadoc.dir}">
-			<fileset dir="${basedir}/../jpa-api/build/api">
-				<include name="**/*.*"/>
-			</fileset>
-		</copy>
-	</target>
-
-	<!-- Some of this can probably be moved to common-build... -->
-	<target name="dist" depends="jar,javadoc,jpa-javadoc,copysource,copytest,copylib,extras"
-			description="Build everything">
-
-		<ant inheritall="false" dir="${basedir}/doc/reference"/>
-		<copy todir="${dist.dir}/doc/reference" failonerror="false">
-			<fileset dir="${basedir}/doc/reference/build">
-				<include name="**/*.*"/>
-			</fileset>
-		</copy>
-
-		<copy todir="${dist.dir}" failonerror="false">
-			<fileset dir="${common.dir}">
-				<include name="common-build.xml"/>
-			</fileset>
-		</copy>
-
-        <!-- copy dependencies -->
-        <copy todir="${dist.lib.dir}" failonerror="false">
-			<fileset file="${jpa-api.jar}"/>
-            <fileset file="${commons-annotations.jar}"/>
-        </copy>
-        <mkdir dir="${dist.lib.dir}/test"/>
-        <copy todir="${dist.lib.dir}/test" failonerror="false">
-            <fileset file="${validator.jar}"/>
-        </copy>
-
-        <copy file="${basedir}/build.properties.dist" tofile="${dist.dir}/build.properties" failonerror="false">
-		</copy>
-		<antcall target="common-build.dist"/>
-	</target>
-
-	<target name="zip-dist" description="zip the dist">
-		<zip zipfile="${dist.dir}-${version}.zip">
-			<zipfileset prefix="${name}-${version}" dir="${dist.dir}"/>
-		</zip>
-		<tar compression="gzip" tarfile="${dist.dir}-${version}.tar.gz">
-			<tarfileset prefix="${name}-${version}" dir="${dist.dir}"/>
-		</tar>
-	</target>
-
-
-</project>

Copied: trunk/HibernateExt/annotations/build.xml (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/build.xml)
===================================================================
--- trunk/HibernateExt/annotations/build.xml	                        (rev 0)
+++ trunk/HibernateExt/annotations/build.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,244 @@
+<!--
+
+  Hibernate Annotations ANT build script.
+
+  You need JDK 5.0 installed to build Hibernate Annotations.
+
+-->
+
+<project name="Hibernate Annotations" default="dist" basedir=".">
+
+	<!-- Give user a chance to override without editing this file
+		   (and without typing -D each time it compiles it) -->
+	<property file="build.properties"/>
+	<property file="${user.home}/.ant.properties"/>
+
+	<!-- Name of project and version, used to create filenames -->
+	<property name="Name" value="Hibernate Annotations"/>
+	<property name="name" value="hibernate-annotations"/>
+	<property name="version" value="3.2.2.GA"/>
+	<property name="javadoc.packagenames" value="org.hibernate.*"/>
+	<property name="jdbc.dir" value="jdbc"/>
+	<property name="copy.test" value="true"/>
+    <property name="javac.source" value="1.5"/>
+    <property name="javac.target" value="1.5"/>
+    <property name="common.dir" value="../common"/>
+
+	<property name="jpa-api.jar" value="${basedir}/../jpa-api/build/ejb3-persistence.jar"/>
+	<property name="validator.jar"
+			  value="${basedir}/../validator/target/hibernate-validator/hibernate-validator.jar"/>
+	<property name="commons-annotations.jar"
+			  value="${basedir}/../commons-annotations/target/hibernate-commons-annotations/hibernate-commons-annotations.jar"/>
+
+
+	<available property="jpa-present" file="${basedir}/../jpa-api" type="dir"/>
+	<import file="${common.dir}/common-build.xml"/>
+	<property name="jpa-javadoc.dir" value="${dist.doc.dir}/jpa-api"/>
+
+	<path id="lib.moduleclass.path">
+		<pathelement location="${jpa-api.jar}"/>
+		<pathelement location="${commons-annotations.jar}"/>
+	</path>
+
+	<path id="junit.moduleclasspath">
+		<pathelement location="${src.dir}"/>
+		<pathelement location="${test.dir}"/>
+        <pathelement location="${validator.jar}"/>
+        <pathelement location="lib/testlibs/org.eclipse.jdt.core_3.1.0.jar"/>
+		<fileset dir="${jdbc.dir}">
+			<include name="**/*.jar"/>
+			<include name="**/*.zip"/>
+		</fileset>
+	</path>
+
+	<target name="init">
+		<antcall target="common-build.init"/>
+		<available file="${jpa-api.jar}" type="file" property="jpa-api.jar.available"/>
+		<available file="${commons-annotations.jar}" type="file" property="commons-annotations.jar.available"/>
+		<available file="${validator.jar}" type="file" property="validator.jar.available"/>
+        <mkdir dir="${lib.dir}/test"/>
+    </target>
+
+	<target name="get.jpa-api" depends="init" unless="jpa-api.jar.available">
+		<ant inheritall="false" dir="${basedir}/../jpa-api" target="clean"/>
+		<ant inheritall="false" dir="${basedir}/../jpa-api" target="jar"/>
+	</target>
+
+	<target name="get.commons-annotations" depends="init" unless="commons-annotations.jar.available">
+		<ant inheritall="false" dir="${basedir}/../commons-annotations" target="clean"/>
+		<ant inheritall="false" dir="${basedir}/../commons-annotations" target="jar"/>
+	</target>
+
+	<target name="get.validator" depends="init" unless="validator.jar.available">
+		<ant inheritall="false" dir="${basedir}/../validator" target="clean"/>
+		<ant inheritall="false" dir="${basedir}/../validator" target="jar"/>
+	</target>
+
+	<target name="compile" depends="init,get.jpa-api,get.commons-annotations"
+			description="Compile the Java source code">
+		<available
+				classname="org.eclipse.core.launcher.Main"
+				property="build.compiler"
+				value="org.eclipse.jdt.core.JDTCompilerAdapter"
+				classpath="${java.class.path}"/>
+		<javac
+				srcdir="${src.dir}"
+				destdir="${classes.dir}"
+				classpathref="lib.class.path"
+				debug="${javac.debug}"
+				optimize="${javac.optimize}"
+				nowarn="on"
+				source="${javac.source}"
+                target="${javac.target}">
+			<src path="${src.dir}"/>
+		</javac>
+		<copy todir="${classes.dir}">
+			<fileset dir="${src.dir}">
+				<include name="**/resources/*.properties"/>
+				<include name="**/*.xsd"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="compiletest" depends="compile,get.validator" description="Compile the tests">
+		<available
+				classname="org.eclipse.core.launcher.Main"
+				property="build.compiler"
+				value="org.eclipse.jdt.core.JDTCompilerAdapter"
+				classpath="${java.class.path}"/>
+		<javac
+				destdir="${testclasses.dir}"
+				classpathref="junit.classpath"
+				debug="${javac.debug}"
+				optimize="${javac.optimize}"
+				nowarn="on"
+				source="${javac.source}"
+                target="${javac.target}">
+			<src refid="testsrc.path"/>
+		</javac>
+	</target>
+
+
+	<!-- target name="junit" depends="compiletest">
+			<mkdir dir="test_output"/>
+			<junit fork="yes" printsummary="yes" haltonfailure="yes"
+				 forkmode="perBatch">
+				<classpath>
+					<fileset dir="${jdbc.dir}">
+						<include name="**/*.jar"/>
+						<include name="**/*.zip"/>
+					</fileset>
+					<path refid="lib.class.path"/>
+					<pathelement path="${classes.dir}"/>
+					<pathelement path="${src.dir}"/>
+					<pathelement path="${test.dir}"/>
+				</classpath>
+				<formatter type="plain"/>
+				<formatter type="xml"/>
+				<batchtest fork="yes" todir="test_output" haltonfailure="no">
+					<fileset dir="${classes.dir}">
+						<include name="**/*Test.class"/>
+					</fileset>
+				</batchtest>
+			</junit>
+		</target -->
+
+	<!-- Run a single unit test. -->
+	<target name="junitsingle" depends="compiletest"
+			description="Run a single test suite (requires testname and jdbc.driver properties)">
+		<mkdir dir="test_output"/>
+		<junit printsummary="yes" fork="yes" haltonfailure="yes">
+			<classpath>
+				<fileset dir="${jdbc.dir}">
+					<include name="**/*.jar"/>
+					<include name="**/*.zip"/>
+				</fileset>
+				<path refid="lib.class.path"/>
+				<pathelement path="${classes.dir}"/>
+				<pathelement path="${src.dir}"/>
+				<!-- pick up properties from here -->
+				<pathelement path="${test.dir}"/>
+				<!-- pick up mappings from here -->
+			</classpath>
+			<formatter type="plain"/>
+			<formatter type="xml"/>
+			<test fork="yes" todir="test_output" haltonfailure="no" name="${testname}"/>
+		</junit>
+	</target>
+
+	<!-- target name="report">
+			<mkdir dir="test_output"/>
+			<junitreport todir="test_output">
+			  <fileset dir="test_output">
+				<include name="TEST-*.xml"/>
+			  </fileset>
+			  <report format="frames" todir="test_output/report"/>
+			</junitreport>
+		</target -->
+
+	<target name="jar" depends="compile" description="Build the distribution .jar file">
+		<mkdir dir="${classes.dir}/META-INF"/>
+		<manifest file="${classes.dir}/META-INF/MANIFEST.MF">
+			<attribute name="Product" value="${Name}"/>
+			<attribute name="Version" value="${version}"/>
+		</manifest>
+		<antcall target="common-build.jar"/>
+	</target>
+
+	<!-- target name="javadoc" description="Compile the Javadoc API documentation to dist dir">
+				<echo>Skipping java doc since ant's javadoc task cannot handle an alternative javadoc</echo>
+		 </target -->
+
+	<target name="jpa-javadoc" if="jpa-present">
+		<mkdir dir="${jpa-javadoc.dir}"/>
+		<ant dir="../jpa-api" target="javadoc" inheritAll="false"/>
+		<copy todir="${jpa-javadoc.dir}">
+			<fileset dir="${basedir}/../jpa-api/build/api">
+				<include name="**/*.*"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<!-- Some of this can probably be moved to common-build... -->
+	<target name="dist" depends="jar,javadoc,jpa-javadoc,copysource,copytest,copylib,extras"
+			description="Build everything">
+
+		<ant inheritall="false" dir="${basedir}/doc/reference"/>
+		<copy todir="${dist.dir}/doc/reference" failonerror="false">
+			<fileset dir="${basedir}/doc/reference/build">
+				<include name="**/*.*"/>
+			</fileset>
+		</copy>
+
+		<copy todir="${dist.dir}" failonerror="false">
+			<fileset dir="${common.dir}">
+				<include name="common-build.xml"/>
+			</fileset>
+		</copy>
+
+        <!-- copy dependencies -->
+        <copy todir="${dist.lib.dir}" failonerror="false">
+			<fileset file="${jpa-api.jar}"/>
+            <fileset file="${commons-annotations.jar}"/>
+        </copy>
+        <mkdir dir="${dist.lib.dir}/test"/>
+        <copy todir="${dist.lib.dir}/test" failonerror="false">
+            <fileset file="${validator.jar}"/>
+        </copy>
+
+        <copy file="${basedir}/build.properties.dist" tofile="${dist.dir}/build.properties" failonerror="false">
+		</copy>
+		<antcall target="common-build.dist"/>
+	</target>
+
+	<target name="zip-dist" description="zip the dist">
+		<zip zipfile="${dist.dir}-${version}.zip">
+			<zipfileset prefix="${name}-${version}" dir="${dist.dir}"/>
+		</zip>
+		<tar compression="gzip" tarfile="${dist.dir}-${version}.tar.gz">
+			<tarfileset prefix="${name}-${version}" dir="${dist.dir}"/>
+		</tar>
+	</target>
+
+
+</project>

Deleted: trunk/HibernateExt/annotations/changelog.txt
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/changelog.txt	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/changelog.txt	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,552 +0,0 @@
-Hibernate Annotations Changelog
-===============================
-
-3.2.1.GA (8-12-2006)
---------------------
-
-** Bug
-    * [ANN-395] - @Embedded can not map interface
-    * [ANN-425] - Property not found when defined in a @IdClass and referenced by a @OneToMany
-    * [ANN-430] - @ManyToOne results in default outer join eager fetch, should be lazy
-    * [ANN-448] - @OrderBy does not work with an association table when Set is used for collection
-    * [ANN-450] - @MapKey does not work with embedded fields
-    * [ANN-452] - Check lucene behavior on rollback()
-    * [ANN-458] - Hibernate Validator initialization always requires keys in ValidatorMessges.properties
-    * [ANN-466] - Discriminator values longer than 31 break in PostgreSQL
-    * [ANN-471] - lazily resolve default messages in DefaultMessageInterpolator
-    * [ANN-473] - Unable to define unique constraints on a denormalized table (union-subclass)
-    * [ANN-474] - <sequence-generator> and <table-generator> at the entity level can override those at the property level in JPA XML
-    * [ANN-477] - @Formula doesn't work in entities referenced by @JoinColumn(referencedColumnName="...")
-    * [ANN-491] - Collection mapped with javax.persistence.MapKey isn't loaded properly.
-    * [ANN-499] - @IdClass and @ManyToOne leads to repeated column exception
-
-
-** Improvement
-    * [ANN-37] - Support for SQL Overriding (László Benke, Assaf Berg)
-    * [ANN-387] - lucene integration does not support Inheritance
-    * [ANN-422] - Add targetEntity to MapKeyManyToMany annotation
-    * [ANN-449] - @Min, @Max store value as Integer.  @Range stores values as Long.
-    * [ANN-456] - ClassValidator sould be able to get a reflectionManager from the caller (ie the event listener)
-    * [ANN-460] - Support for several entity types per Index
-    * [ANN-468] - IdFieldBridge should be introduced to cope with additional constraints on Brigdes used by document ids
-    * [ANN-475] - Make ClassValidator independent from javax.persistence annotations
-    * [ANN-476] - EJB3 naming strategy struggles with quoted identifiers when generating composed table/column names
-    * [ANN-497] - Reuse the same synchronization queue per transaction for Search operations
-
-** New Feature
-    * [ANN-363] - Support for a @FieldBridge
-    * [ANN-364] - @Boost or equivalent on entity and on fields
-    * [ANN-383] - Align with Lucene 2 APIs for annotations
-    * [ANN-384] - Reindex an object on a per instance basis (not triggered by a change)
-    * [ANN-454] - Support for Built-in bridges in Lucene
-    * [ANN-455] - Comprehensive built-in type support
-    * [ANN-457] - Support field annotations in Hibernate Lucene (Richard Hallier)
-    * [ANN-463] - @DateBridge
-    * [ANN-478] - French translation (Vincent Ricard)
-    * [ANN-482] - Use of transaction Synchronization rather than post-commit-* events
-    * [ANN-493] - @NonEmpty
-
-** Patch
-    * [ANN-445] - Add dutch (Nederlands) validator_nl.properties for hibernate validator
-    * [ANN-465] - SingleTableTest.testDefaultDiscriminatorColumn fix
-    * [ANN-498] - Add Spanish Validation Bundle
-    * [ANN-500] - Swedish default messages
-
-** Task
-    * [ANN-479] - Various optimizations of the Xlayer (reflection layer)
-    * [ANN-483] - reorganize lucene packaging
-    * [ANN-488] - Rename org.hibernate.lucene to org.hibernate.search
-
-
-3.2.0.GA (16-10-2006)
----------------------
-Same code base as 3.2.0.CR3
-
-** Task
-    * [ANN-459] - Add EJB 3.0 JavaDoc to the distribution
-
-
-3.2.0.CR3 (04-10-2006)
-----------------------
-** Bug
-    * [ANN-408] - map a entity to integer map is not possible
-
-
-** Improvement
-    * [ANN-346] - Introduce @FilterJoinTable to complete @Filter on association involving a join table
-    * [ANN-447] - Introduce @WhereJoinTable to complete @Where on association involving a join table
-
-** New Feature
-    * [ANN-443] - Define a hibernate.validator.interpolator_class
-
-
-3.2.0.CR2 (16-09-2006)
-----------------------
-** Bug
-    * [ANN-181] - Do not fail on unbound attributes marked as @Type
-    * [ANN-243] - @MapKey doesn't properly refer to column name mapped to property (quoted column)
-    * [ANN-345] - EJB3NamingStrategy should be Serializable
-    * [ANN-359] - @MappedSuperclass overriding fails on EJB3 DD
-    * [ANN-362] - Specification of table @Table name with quotes using backticks fails with @OneToMany mapping
-    * [ANN-368] - Keywords first letter is not decapilalized
-    * [ANN-369] - @CollectionOfElements on a Map uses reserved word "key" as column name
-    * [ANN-370] - Lucene updates are not thread safe
-    * [ANN-375] - @Email validator failed a valid email address
-    * [ANN-379] -  Map<Entity, Entity> fails due to unique constraint on map-key column
-    * [ANN-382] - Id involving many to one may fail depending on the entity process ordering
-    * [ANN-393] - Documentation errors in Many-toMany Annotation explanation
-    * [ANN-405] - JPA XML overriding wrong when default schema and *-to-one association
-    * [ANN-409] - Enum constants in HQL leads to ClassCastException
-    * [ANN-411] - @Generated(INSERT) properties does not update columns
-    * [ANN-412] - Generator definition (@Table,  @Generic,  @Sequence) no longer taken into account at field level
-    * [ANN-414] - Map, OneToMany, join table or @ManyToMany does not work on MySQL and on composite keys
-    * [ANN-415] - <named-native-query result-class leads to CCE
-    * [ANN-416] - Mapping of inheritance with several generic superclasses fails
-    * [ANN-421] - Unable to map no packaged classes when JPA XML is used
-    * [ANN-423] - @Min/@Max broken with BigInteger/BigDecimal
-    * [ANN-424] - column overriding fails on composite elements when defined at the entity level
-    * [ANN-426] - Validator keep a JavaXFactory in a static variable creating memleaks on redeployement
-    * [ANN-427] - throw "java.lang.IllegalStateException: Property parent has an unbound type and no explicit target entity." on generic type
-
-
-** Improvement
-    * [ANN-7] - Document usage of @IndexColumn in one-to-many with indexed collection
-    * [ANN-36] - @ForceDiscriminator (Serg Prasolov)
-    * [ANN-39] - @CollectionId for idbags
-    * [ANN-47] - Allow to set an enum parameter on a query
-    * [ANN-261] - Allow specifying foreign key constraint name using annotations (inspired by David Hay)
-    * [ANN-265] - Fall back to default validator message if the key is not found
-    * [ANN-343] - validator messages in brazilian portuguese
-    * [ANN-350] - Support ejb3 dd when no schema locator is defined
-    * [ANN-351] - Validator Brazilian translation
-    * [ANN-355] - Make XML overriding rules for access type smoother
-    * [ANN-356] - Clear the PC on Rollback on RESOURCE_LOCAL Transactions
-    * [ANN-371] - Abstract DocumentBuilder from the underlying Directory implementation
-    * [ANN-373] - imports are not done for the full entityname
-    * [ANN-374] - Map - OneToMany w or w/o join table creates bad sql
-    * [ANN-381] - Make possible to specify an @EmbeddedId's field in a @OneToMany's mappedBy property
-    * [ANN-397] - Incomplete AnnotationException at org.hibernate.cfg.annotations.TableBinder
-    * [ANN-399] - Class validator should not WARN on unbound properties not involved in validation
-
-** New Feature
-    * [ANN-284] - @OrderBy clash with @Formula Properties
-    * [ANN-349] - Add @FlushModeType.MANUAL
-    * [ANN-367] - Upgrade to Lucene 2.0.0 (Sylvain Vieujot)
-    * [ANN-372] - @Boost factor on document and fields
-    * [ANN-378] - Chinese translation (Xiaogang Cao)
-    * [ANN-385] - Abstract the Lucene directory implementation and allow configuration based definition
-    * [ANN-386] - Add support for RAMDirectory
-    * [ANN-419] - Support SortedMap
-    * [ANN-440] - MessageIntrospector hook introduced in HibernateValidator
-
-
-** Task
-    * [ANN-410] - Depreciate EJB 3 Package annotations
-
-
-3.2.0.CR1 (13-05-2006)
-----------------------
-** Bug
-    * [ANN-95] - Cannot create a unique constraint on columns belonging to both the superclass and the class
-    * [ANN-97] - JoinColumn with referencedColumnName clashes with unique=true on target column
-    * [ANN-118] - Duplicate unique constraint may be created
-    * [ANN-281] - @Mapkey broken if key is Entity
-    * [ANN-288] - Hibernate chokes on methods in entities starting with get...() and returning int[]
-    * [ANN-289] - @OneToOne and @Column fails
-    * [ANN-305] - ImprovedNamingStrategy not compatible with Hibernate annotations (@Index in particular)
-    * [ANN-306] - "Unbound" @Transient properties not properly being ignored
-    * [ANN-307] - BindHelper.findPropertiesByColumns behaviour is non deterministic due to HashSet being used
-    * [ANN-310] - Dist is missing resource files
-    * [ANN-329] - Entity.name is ignored in inheritance mapping
-    * [ANN-330] - Entity name not used to build default table name (classname is used instead)
-    * [ANN-331] - Extra element concatenated to default columns in collection of elements
-    * [ANN-333] - CollectionOfElements not using specified JoinTable
-    * [ANN-335] - AnnotationBinder just throws NPE if @OneToMany annotation is not on a Collection or Array
-    * [ANN-339] - @OrderBy does not work when an association table is involved
-    * [ANN-340] - Hard dependency to CGLIB classes in mustBeSkipped()
-
-
-** Improvement
-    * [ANN-120] - Map, OneToMany, join table or @ManyToMany does not work
-    * [ANN-195] - Potentially move from TableA_TableB to EntityA_EntityB on join tables is the spec remains
-    * [ANN-293] - Unidirectional @ManyToMany should throw and error or warning when target entity cannot be resolved
-    * [ANN-323] - XML overriding should have precedence over annotations for queries, rs, generators
-    * [ANN-325] - entity described in XML should be part of the mapped entities
-    * [ANN-327] - Support for Map<Entity,Entity>
-    * [ANN-337] - XML result-set-mapping should overrides @SqlResultSetMapping
-    * [ANN-338] - @Temporal no longer has default value
-
-** New Feature
-    * [ANN-40] - @Parent
-    * [ANN-89] - Support generated=true property option for automatic refresh
-    * [ANN-158] - Support for @ManyToOne or @OneToOne @JoinTable (bidirectional)
-    * [ANN-224] - Ability to override fetching and lazy options through annotations
-    * [ANN-276] - Proper support of @OneToOne @PrimaryKeyJoinColumns
-
-
-3.1.0.Beta10b Preview (27-04-2006)
-----------------------------------
-** Bug
-    * [ANN-292] - @EmbeddedId object containing only @ManyToOne fails / wrong pk generation when at EmbeddedId contains @ManyToOne
-    * [ANN-295] - Generators behave like allocationSize+1
-    * [ANN-300] - @OneToOne(optional=false) does not create foreign key
-    * [ANN-301] - Validator won't validate "new" (=transient) bean when bean is CGLIB-instrumented
-    * [ANN-319] - Make Hibernate Annotations types Serializable and thread safe
-    * [ANN-321] - Discriminator column wo @DiscriminatorColumn has the wrong varchar length
-    * [ANN-328] - @javax.persistence.MapKey broken
-
-
-** Improvement
-    * [ANN-316] - Do not escape el expressions like #{foo} expressions in Validation messages
-
-** New Feature
-    * [ANN-1] - Support Map
-    * [ANN-296] - Support for allocationSize in @SequenceGenerator
-    * [ANN-304] - Display the version number at init time to avoid user confusion regarding the version used
-    * [ANN-322] - Allow EJB3 style XML Overriding
-
-
-3.1beta9 Preview (27-03-2006)
------------------------------
-** Bug
-    * [ANN-16] - Annotations: composite pk with two manytoone not working
-    * [ANN-98] - Wrong unsaved-value strategy for IdClass entities
-    * [ANN-196] - sequence should increase by assocationSize rather than regular hilo
-    * [ANN-197] - table generator should stock hi * low_max instead of hi
-    * [ANN-211] - ClassValidator throws NPE during flush
-    * [ANN-230] - Id Annotation - bad example of GeneratedValue
-    * [ANN-234] - @NotNull syntax doesn't make join column null in conjunction with @OneToOne or @ManyToOne
-    * [ANN-236] - @OneToMany(mappedBy) cannot referenced an hbm file described entity
-    * [ANN-240] - @AttributeOverride only works in @Entity, not @MappedSuperclass
-    * [ANN-241] - @Index broken on property when no  columnName is defined
-    * [ANN-253] - Do not raise unresolved type exception if targetEntity is defined on the association annotation
-    * [ANN-254] - References to invalid CascadeType.CREATE in documentation
-    * [ANN-255] - Validator problem with @Valid @Embedded objects
-    * [ANN-256] - Incorrect classloader used for ResourceBundle loading in JavaEE environment
-    * [ANN-257] - referencedColumnName is not recognized on a many-to-one to a composite primary key
-    * [ANN-258] - OneToOne annotation: Hibernate is not respecting the optional=true behaviour
-    * [ANN-266] - @Temporal on Calendar is not mapped properly
-    * [ANN-269] - doc error in example validation annotation
-    * [ANN-274] - @AttributeOverride ignored when defined on an @Entity having a @MappedSuperclass annotated with @IdClass
-    * [ANN-280] - Index not work
-    * [ANN-282] - @IdClass including @Id claims no identifier property rather than @Id not authorized
-
-
-** Improvement
-    * [ANN-146] - @NotNull should be ignored for SINGLE_TABLE subclass properties
-    * [ANN-208] - Enable @Valid for Collections, Maps and Arrays
-    * [ANN-223] - Entity name should be the default for discriminator value (not the fqcn)
-    * [ANN-233] - @Email not documented
-    * [ANN-245] - Better doc on MapKey explaining that the column is shared between the key and the referenced property
-    * [ANN-262] - @org.hibernate.annotatios.Table.name remaned in @...Table.appliesTo
-    * [ANN-271] - Change @EntityResult(Class entityClass) ( was @EntityResult(String name) )
-    * [ANN-272] - Remove TYPE @Target on @JoinColumn(s)
-    * [ANN-275] - Default discriminator column is DTYPE rather than TYPE
-    * [ANN-291] - addUnderscore changed to protected visibility in DefaultComponentSafeNamingStrategy as an extension point
-
-** New Feature
-    * [ANN-15] - Use of @ManyToOne in a @EmbeddedId
-    * [ANN-226] - Allow Associations within an @Embeddable Class
-    * [ANN-259] - @OnDelete for @OneToOne and @ManyToOne (Radim Tlusty, Mat?j Kraus)
-    * [ANN-270] - Add @SqlResultSetMappings
-    * [ANN-273] - @AssociationOverride(s) similar to @AttributeOverride(s)
-    * [ANN-287] - Abstraction layer on top of reflection calls (Paolo Perrotta, Davide Marchignoli)
-
-
-** Task
-    * [ANN-228] - Get rid of the compliance and limitation section in the doc.
-    * [ANN-239] - DefaultValidatorMessages_de.properties: translation errors
-
-	
-3.1beta8 Preview (20-01-2006)
------------------------------
-** Bug
-    * [ANN-132] - transient fields are considered to be persistent when not annotated with @Transient
-    * [ANN-162] - OneToMany mapping from annotated to hbm loaded class fails with infinite loop
-    * [ANN-175] - extractType executed on @Transient and fail when the return type is <T extends MembershipData>  T
-    * [ANN-176] - Endless loop when annotated class references by ManyToOne class mapped in .hbm.xml
-    * [ANN-177] - unable to use referencedColumnName = joined subclass primary column name
-    * [ANN-178] - Different handling column naming with @JoinColumn between 3.1beta5 and 3.1beta7
-    * [ANN-180] - Indexed collection, field access, onetomany+mappedby seems to fail
-    * [ANN-187] - Unable to referenceColumnName a column (property) of the super class
-    * [ANN-193] - @IdClass should work on @MappedSuperclass
-    * [ANN-199] - NPE when mappedBy property is wrong on a @OneToOne
-    * [ANN-214] - Annotation website documentation syntax error
-
-** New Feature
-    * [ANN-147] - Allow embeddable subclasses in the middle of a class hierarchy
-    * [ANN-172] - Delegates the SQL type of enum to @Enumerated
-    * [ANN-188] - @Email for validator
-    * [ANN-190] - @TableGenerator as per the pfd instead of @GeneratorIdTable & co
-    * [ANN-191] - Non entity classes in between entity classes in the hierarchy
-    * [ANN-200] - Support of @Basic, @Lob, @Enumerated, @Temporal as per the PFD
-    * [ANN-209] - @Named(Native)Query(hints=...)
-
-
-** Improvement
-    * [ANN-17] - Support dotted annotation when declaring resultsets
-    * [ANN-56] - @AccessType: Support mixed field/property access strategies for an Entity
-    * [ANN-192] - Access type guessed from position of @Id or @EmbeddedId
-    * [ANN-194] - Access type guessed from owner entity for Embeddable objects
-    * [ANN-198] - Better error message when @ManyToOne references an unknown entity
-    * [ANN-201] - Rename @EmbeddableSuperclass into @MappedSuperclass
-    * [ANN-203] - Move to @Id @GeneratedValue(strategy=AUTO, generator="blah")
-    * [ANN-204] - @TableGenerator instead of @TableGenerator and @GeneratedIdTable
-    * [ANN-205] - @NamedQuery(query=...) instead of @NamedQuery(queryString=...) same for @NamedNativeQuery
-    * [ANN-215] - Support SqlResutSetMapping with dotted notation in arbitrary order
-    * [ANN-216] - Support scalar queries through @ColumnResult
-    * [ANN-218] - @SecondaryTable(PrimaryKeyJoinColumn[] pkJoinColumns) instead of @SecondaryTable(JoinColumn[] joins() )
-    * [ANN-219] - @JoinTable(name, catalog, schema, uniqueConstraints) instead of @JoinTable(table=@Table())
-    * [ANN-220] - @Column(table=) and @JoinColumn(table=) instead of @Column(secondaryTable=)
-    * [ANN-221] - @Inheritance(strategy), @DiscriminatorColumn(discriminatorType), @DiscriminatorValue instead of @Inheritance
-    * [ANN-225] - @EntityListeners replace @EntityListener
-
-
-3.1beta7 Preview (13-12-2005)
------------------------------
-
-** Bug
-    * [ANN-114] - NPE when SecondaryTable uses a non pk reference column in @JoinColumn
-    * [ANN-115] - @Index does not work on joincolumns
-    * [ANN-117] - setOrphanDelete not set causing some delete-orphan .clear() to fail
-    * [ANN-123] - Support for Generics superclass
-    * [ANN-124] - FIELD constant thing is wrong in the doc
-    * [ANN-133] - Bytecode enhancement process adds non-transient properties to beans
-    * [ANN-135] - Inconsistent range check between Range Validator class and generated DDL.
-    * [ANN-136] - Validator annotations not applied to the hibernate metamodel for id properties
-    * [ANN-139] - SINGLE_TABLE inheritance raise an WrongClassException under certain circumstances
-    * [ANN-142] - Automatic Generation of Composite IDs - Annonation declaration fails
-    * [ANN-151] - <subclass extends= broken when using AnnotationConfiguration
-    * [ANN-152] - Indexes generated by the LuceneEventListener are deleted at startup (Mattias Arbin)
-    * [ANN-156] - MapKey Cannot Map @Id when using @IdClass
-    * [ANN-165] - @Length(min=4) ie wo max generate a varchar(Integer.MAX_VALUE)
-    * [ANN-171] - Class cast exception during processing of non getter generic methods
-    * [ANN-173] - ClassValidator.getInvalidValues  should not depend on equals() for circularity check
-
-** New Feature
-    * [ANN-111] - add function for validating properties before bean creation
-    * [ANN-116] - fetch validators from implemented interfaces
-    * [ANN-125] - Validator does not preserve method hierarchy in InvalidValue[]
-    * [ANN-127] - Add @Future
-    * [ANN-128] - Externalize EJB3 namings to NamingStrategy
-
-
-** Improvement
-    * [ANN-119] - Embedded international error messages
-    * [ANN-121] - Named Queries should be package level visible
-    * [ANN-126] - mention usage of columnDefinition as part of @Column in docs
-    * [ANN-138] - Support collections of value types with separate annotation
-    * [ANN-148] - EnumType should be aware of DababaseMetadata.storesUpperCaseIdentifiers() and co (Tim Fennell)
-    * [ANN-149] - Do not check lazy/uninitialized fields in Validator
-    * [ANN-153] - Customize the parent directory for indexes generated by LuceneEventListener (Mattias Arbin)
-    * [ANN-154] - Customize Analyzer subclass for the LuceneEventListener (Mattias Arbin)
-    * [ANN-168] - @FilterDef should support condition
-    * [ANN-170] - Keep user order of hbm files (to ease the typedef usage)
-
-
-3.1beta6 Preview (07-10-2005)
------------------------------
- * ANN-105 More exception handling in AnnotationConfiguration
- * ANN-109 @Index does not support join columns references
- * ANN-93 Make Hibernate Validator Serializable Friendly
-
-3.1beta5 Preview (14-09-2005)
------------------------------
- * ANN-70 Lucene integration
- * ANN-13 Support for referencedColumnName referencing non PK columns for @ManyToMany
- * ANN-63 Use metadata.getUserName() when guessing Enum backing type (Scott Haug)
- * ANN-38 Finish the optional=false support
- * ANN-69 Expand the resource bundle message itself in the Validator framework
- * ANN-68 Apply validator on a particular property (Jesus Marin)
- * ANN-41 Allow field validations and validate private method (Chris Wood)
- * ANN-75 Support named (native) query parameters (from Carlos Gonzalez)
- * ANN-73 Use an eager strategy for the second join of a ManyToMany
- * ANN-74 Allow configuration artefacts (hbm, classes) loading precedence
- * ANN-79 Support collection of composite elements
- * ANN-19 Annotations should support collections of primitive and core types
- * ANN-77 Support primitive arrays
- * ANN-20 Support dotted annotation when using overriding (Alexei Akhounov)
- * ANN-55 @Proxy annotation should take proxyClass argument
- * ANN-2 Bidirectional true @OneToOne
- * ANN-80 @NotFound(action=NotFoundAction.IGNORE)
- * ANN-57 @Table ignores unique contraint in association table
- * ANN-3 Support of component inside SecondaryTable
- * ANN-87 @InheritanceJoinColumn rename is incomplete
- * ANN-81 ColumnDefinition not assigned when using @Column and @JoinColumn
- * ANN-34 Second passes binded to HbmBinder.SecondPass
- * NPE on Index and Unique constrains when column name has case inconsistency
- * ANN-86 @Index not used on properties having no @Column
- * ANN-49 Super class of Embeddable not mapped correctly (Alexei Akhounov)
- * ANN-66 Null enums don't store to database correctly
- * ANN-65 Validator ignores components (the DDL still ignores it)
- * ANN-60 NPE when @EmbeddableSuperclass has a superclass @Entity
- * ANN-90 mention usage of @Column together with @Id explicitly
- * ANN-18 Document bean-level validator mecanism
-
-3.1beta4 Preview (04-08-2005)
------------------------------
- * ANN-54 EnumType fails to find the Enum in setParameterValues(Properties)
- * ANN-32 Support index creation
- * ANN-22 Hibernate 3 Annotations should support all Id generators
- * ANN-51 redeclaring id in entity subclass raises ClassCastException
- * ANN-43 @MapKey throw exception if key is id or a component subproperty
- * ANN-52 Exception when @OrderBy contains the id property or a component subproperty
- * ANN-13 Support for referencedColumnName referencing non PK columns for @ManyToOne, @OneToOne and @OneToMany
- * ANN-46 Raise a warning on @Filter on subclasses
- * ANN-48 @UniqueConstraint reorders columns (Chris Wood)
- * ANN-6 enum did not worked for enums persisted in string based columns (MySql and Oracle)
- * ANN-8 array of primitive no longer create a non null column
- * ANN-45 Proper support for @Basic byte[]
- * ANN-44 Don't mandate to list embedded superclasses
- * ANN-42 Don't mandate resultset to be defined before named native queries
- * ANN-11 More robust support for enum persistence (wider range of SQL types)
- * HBX-307 Remove @Serialized and support @Lob tagging of a serializable type
-
-3.1beta3 Preview (24-06-2005)
------------------------------
- * Rename @AssociationTable to @JoinTable
- * HBX-213 support of @IdClass
- * change targetEntity from String to Class
- * HBX-305 Support Java5 Enums
- * Add @Basic(optional=false) and Lob(optional=false)
- * HBX-284 AnnotationOverride in inheritance in conjunction with @EmbeddedSuperclass
- * HBX-304 @AttributeOverride instead of @Embedded(override=@AttributeOverride) or @EmbeddedId(...)
- * HBX-290 All collection binder exception now show the collection role
- * HBX-299 Fix test suite error on MySql
- * HBX-302 @MapKey(name="propertyName") to map a map using a property of the associated class as a map key
- * HBX-201 @Formula on properties or fields.
- * Support @EntityResult(discriminatorColumn)
- * Relax List usage as per the spec (non indexed list are defaulted to bag semantic)
- * HBX-300 enable HQL order by fragment using @javax.persistence.OrderBy
- * HBX-298 FKs on association tables are forced not null
- * HBX-297 Primitive types creates a non null constrained column if defaulted and not SINGLE_TABLE (HBX-301)
- * HBX-287 @DiscriminatorFormula
- * HBX-205 @OnDelete(action=OnDeleteAction.CASCADE) for joined subclasses and collections
- * Change @OneToOne(usePkasFk=true) into @PrimaryKeyJoinColumn
- * Rename @InheritanceJoinColumn/@InheritanceJoinColumns to @PrimaryKeyJoinColumn/@PrimaryKeyJoinColumns
- * Support @Basic(temporalType=...)
- * HBX-282 protect @ManyToMany from abusive not joined filters
- * Align with @NamedNativeQuery/@NamedNativeQueries
- * HBX-283 Better getter resolution
- * HBX-75 Implicit inheritance join columns declaration in composite PK
- * HBX-54 Explicit exception when @Id is missing
- * HBX-210 Fix NPE when the @Id was on the superclass of the root entity in conjonction with @OneToOne use
- * HBX-280/HBX-157 Support @EmbeddabledSuperclass
-
-3.0beta2 Preview (27-05-2005)
------------------------------
- * HBX-87 fetching method is now used even when loading through a query
- * Add the validate framework and bind it to the annotation binder.
- * HBX-199 Support @Columns and thus multi-column properties (ie composite user types)
- * HBX-206 Support @OrderBy and @Sort
- * HBX-203/HBX-81 Support Hibernate cascade strategies through @Cascade (Pablo Nussembaum)
- * HBX-47 Persist is cascaded on flush operation when using the EJB3 event listeners
- * HBX-125 Support for named native SQL queries (not Scalar results)
- * HBX-225 @Type annotation now work for @Id and @Version (Pablo Nussembaum, Emmanuel Bernard)
- * HBX-248 TABLE_PER_CLASS no longer limited to leaf entities and use union-subclass as its strategy
- * HBX-186 inheritance strategy no longer have to be defined on every entity (only on root entry)
- * HBX-53 Annotated classes can be defined in any arbitrary order
- * Support Array through @IndexColumn (Anthony Patricio)
- * HBX-216 Ignore static fields and properties
- * HBX-229/HBX-134 Filter javac generated methods that compensate type erasure aka bridge method (Rogério Gatto)
- * HBX-184 Support List mappings through @IndexColumn (Matthiew Inger, Emmanuel Bernard)
- * HBX-187 Move to a CollectionBinder structure (Matthiew Inger, Emmanuel Bernard)
- * Fix of CascadeType.REMOVE
-
-3.0beta1 Preview (07-04-2005) based on the EJB3 Early Draft 2
--------------------------------------------------------------
- * support parameters in @Type (HBX-197)
- * support @TypeDef at package and class level
- * HBX-166 support @Lob for Character[],char[], String, byte[] and Byte[] (experimental)
- * HBX-159/HBX-140 add @Filter(s) and @FilterDef(s) (Matthew Inger, Magnus Sandberg)
- * HBX-44 @OneToOne support composite PK
- * @OneToOne is supported except for true bidirectional @OneToOne
- * Add @Cache annotation: allow to define caching on root entities and on collections (,eg @Cache(usage=CacheConcurrencyStrategy.TRANSACTIONAL, region="specificCacheRegion") )
- * Support @OneToMany default (ie using an association table)
- * HBX-164 insertable/updatable of @JoinColumn now work in @ManyToOne processing (Mario Ivankovits, Emmanuel Bernard)
- * HBX-153 @Id(generate=GeneratorType.AUTO, generator="my_potential_sequence") now work (Pablo Nussembaum)
- * Support @ManyToMany wo @AssociationTable (ie defaults)
- * Support @ManyToMany(mappedBy)
- * Support @OneToMany(mappedBy) (no JoinColumn needed on the @OneToMany side)
- * Appropriate default value when no @JoinColumn is defined in a ManyToOne
- * rename @GeneratorTable to @GeneratedIdTable
- * rename CREATE to PERSIST, add REFRESH cascade style
- * support Mapping Defaults for Non-Relationship Fields or Properties algorithm as defined in the EJB3 spec
- * support @Serialized
- * support @Lob for java.sql.Clob and java.sql.Blob
- * allow embedded object declaration wo @Embeddable (if @Embedded or @EmbeddedId is present in the property)
- * support for @EmbeddedId
- * rename DependentAttribute to AttributeOverride, Dependent to Embedded and DependentObject to Embeddable
- * support @ManyToOne in embedded objects
- * support for @NamedQuery and @NamedQueries (EJBQL)
- * move javax.ejb.* into javax.persistence.* and update copyright header
-
-3.0alpha3 (28-02-2005)
-----------------------
-* HBX-116 Support for Where clause in classes and collections @Where(clause="")
-* HBX-115 Support for class proxying configuration: @Proxy(lazy=false, proxyClassName="my.Interface")
-* HBX-88 Support for hibernate type abstraction through @Type (only on basic properties for now)
-* HBX-108 Support @BatchSize(size=n) for entities and collections
-* HBX-107 implements @org.hibernate.annotations.Entity
-* HBX-103 handle abstract classes
-* HBX-83 precision & scale support for column (Bogdan Ghidireac)
-
-3.0alpha2 (25-01-2005)
-----------------------
-* HBX-61 Support for @UniqueConstraint (except primaryKey=true)
-* HBX-60 Support for a proper @TableGenerator (using MultipleHiLoPerTableGenerator)
-* HBX-63 Support @GeneratorTable
-* HBX-68 Add declarative configuration of annotated classes
-* HBX-74 Rollback the HB-1315 fix: dialect no longer have to be set in hibernate.properties
-
-
-Hibernate-annotations-3.0alpha1 based on the EJB3 Early Draft 1 (6.01.2005)
----------------------------------------------------------------------------
-* Support for EJB3 annotations:
- - @Transient
- - @Column (not primaryKey)
- - @JoinColumn (referencedColumnName - only for a reference to a PK, not primaryKey)
- - @Version
- - @Basic
- - @Entity
- - @Table (not uniqueConstraints)
- - @AccessType
- - @Id
- - @CascadeType
- - @FetchType
- - @GeneratorType (NONE, IDENTITY, TABLE, SEQUENCE)
- - @TableGenerator (with scope visibility)
- - @SequenceGenerator (with scope visibility, does not support initialValue() and allocationSize())
- - *not* @GeneratorTable (will have to write a new TableHiloGenerator, but it can wait)
- - @ManyToOne (not optional)
- - @OneToMany (Set and Collection, generics version or not, JoinColumn not guessed)
- - @OneToOne
-     but not optional
-     no composite PK/FK
- - @ManyToMany
- - @AssociationTable (Has to be on both sides)
- - @Inheritance
- - @InheritanceType (has to be defined on every classes of the hierarchy for JOINED strategy,
-                     not very clear about the TABLE_PER_CLASS strategy)
- - @DiscriminatorColumn
- - @DiscriminatorType
- - @InheritanceJoinColumn
- - @InheritanceJoinColumns
-     this annotation for Composite PK Entities has to be explicit, I do not respect the implicit semantic of the EJB3 spec
- - @SecondaryTable (@OneToMany @JoinColumn(secondaryTable="..." does not work yet due to H3 core issue HHH-36
- - @SecondaryTables
-     this annotation for Composite PK Entities has to be explicit, I do not respect the implicit semantic of the EJB3 spec
- - @DependentObject
- - @Dependent
- - @DependentAttribute (only for basic properties as per the spec)
- - @Id in conjunction with @DependentObject (composite primary keys)
- - @JoinColumns in conjunction with @ManytoOne, @OneToMany, @ManytoMany
-      - note that the composite FK columns have to be in the same table (no != secondary tables). This is probably a weird case and certainly a not recommanded one.
-
-
-Still missing or incomplete features compared to the EJB3 spec
---------------------------------------------------------------
- - use of referencedColumnName for column other than the PK ones @ManyToMany (HBX-62)
- - Support for a true bidirectional one to one relationship (HBX-177)
- - support for initialValue and allocationSize in @SequenceGenerator (HBX-59)
- - finish support of optional=false (HBX-190)
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/changelog.txt (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/changelog.txt)
===================================================================
--- trunk/HibernateExt/annotations/changelog.txt	                        (rev 0)
+++ trunk/HibernateExt/annotations/changelog.txt	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,552 @@
+Hibernate Annotations Changelog
+===============================
+
+3.2.1.GA (8-12-2006)
+--------------------
+
+** Bug
+    * [ANN-395] - @Embedded can not map interface
+    * [ANN-425] - Property not found when defined in a @IdClass and referenced by a @OneToMany
+    * [ANN-430] - @ManyToOne results in default outer join eager fetch, should be lazy
+    * [ANN-448] - @OrderBy does not work with an association table when Set is used for collection
+    * [ANN-450] - @MapKey does not work with embedded fields
+    * [ANN-452] - Check lucene behavior on rollback()
+    * [ANN-458] - Hibernate Validator initialization always requires keys in ValidatorMessges.properties
+    * [ANN-466] - Discriminator values longer than 31 break in PostgreSQL
+    * [ANN-471] - lazily resolve default messages in DefaultMessageInterpolator
+    * [ANN-473] - Unable to define unique constraints on a denormalized table (union-subclass)
+    * [ANN-474] - <sequence-generator> and <table-generator> at the entity level can override those at the property level in JPA XML
+    * [ANN-477] - @Formula doesn't work in entities referenced by @JoinColumn(referencedColumnName="...")
+    * [ANN-491] - Collection mapped with javax.persistence.MapKey isn't loaded properly.
+    * [ANN-499] - @IdClass and @ManyToOne leads to repeated column exception
+
+
+** Improvement
+    * [ANN-37] - Support for SQL Overriding (László Benke, Assaf Berg)
+    * [ANN-387] - lucene integration does not support Inheritance
+    * [ANN-422] - Add targetEntity to MapKeyManyToMany annotation
+    * [ANN-449] - @Min, @Max store value as Integer.  @Range stores values as Long.
+    * [ANN-456] - ClassValidator sould be able to get a reflectionManager from the caller (ie the event listener)
+    * [ANN-460] - Support for several entity types per Index
+    * [ANN-468] - IdFieldBridge should be introduced to cope with additional constraints on Brigdes used by document ids
+    * [ANN-475] - Make ClassValidator independent from javax.persistence annotations
+    * [ANN-476] - EJB3 naming strategy struggles with quoted identifiers when generating composed table/column names
+    * [ANN-497] - Reuse the same synchronization queue per transaction for Search operations
+
+** New Feature
+    * [ANN-363] - Support for a @FieldBridge
+    * [ANN-364] - @Boost or equivalent on entity and on fields
+    * [ANN-383] - Align with Lucene 2 APIs for annotations
+    * [ANN-384] - Reindex an object on a per instance basis (not triggered by a change)
+    * [ANN-454] - Support for Built-in bridges in Lucene
+    * [ANN-455] - Comprehensive built-in type support
+    * [ANN-457] - Support field annotations in Hibernate Lucene (Richard Hallier)
+    * [ANN-463] - @DateBridge
+    * [ANN-478] - French translation (Vincent Ricard)
+    * [ANN-482] - Use of transaction Synchronization rather than post-commit-* events
+    * [ANN-493] - @NonEmpty
+
+** Patch
+    * [ANN-445] - Add dutch (Nederlands) validator_nl.properties for hibernate validator
+    * [ANN-465] - SingleTableTest.testDefaultDiscriminatorColumn fix
+    * [ANN-498] - Add Spanish Validation Bundle
+    * [ANN-500] - Swedish default messages
+
+** Task
+    * [ANN-479] - Various optimizations of the Xlayer (reflection layer)
+    * [ANN-483] - reorganize lucene packaging
+    * [ANN-488] - Rename org.hibernate.lucene to org.hibernate.search
+
+
+3.2.0.GA (16-10-2006)
+---------------------
+Same code base as 3.2.0.CR3
+
+** Task
+    * [ANN-459] - Add EJB 3.0 JavaDoc to the distribution
+
+
+3.2.0.CR3 (04-10-2006)
+----------------------
+** Bug
+    * [ANN-408] - map a entity to integer map is not possible
+
+
+** Improvement
+    * [ANN-346] - Introduce @FilterJoinTable to complete @Filter on association involving a join table
+    * [ANN-447] - Introduce @WhereJoinTable to complete @Where on association involving a join table
+
+** New Feature
+    * [ANN-443] - Define a hibernate.validator.interpolator_class
+
+
+3.2.0.CR2 (16-09-2006)
+----------------------
+** Bug
+    * [ANN-181] - Do not fail on unbound attributes marked as @Type
+    * [ANN-243] - @MapKey doesn't properly refer to column name mapped to property (quoted column)
+    * [ANN-345] - EJB3NamingStrategy should be Serializable
+    * [ANN-359] - @MappedSuperclass overriding fails on EJB3 DD
+    * [ANN-362] - Specification of table @Table name with quotes using backticks fails with @OneToMany mapping
+    * [ANN-368] - Keywords first letter is not decapilalized
+    * [ANN-369] - @CollectionOfElements on a Map uses reserved word "key" as column name
+    * [ANN-370] - Lucene updates are not thread safe
+    * [ANN-375] - @Email validator failed a valid email address
+    * [ANN-379] -  Map<Entity, Entity> fails due to unique constraint on map-key column
+    * [ANN-382] - Id involving many to one may fail depending on the entity process ordering
+    * [ANN-393] - Documentation errors in Many-toMany Annotation explanation
+    * [ANN-405] - JPA XML overriding wrong when default schema and *-to-one association
+    * [ANN-409] - Enum constants in HQL leads to ClassCastException
+    * [ANN-411] - @Generated(INSERT) properties does not update columns
+    * [ANN-412] - Generator definition (@Table,  @Generic,  @Sequence) no longer taken into account at field level
+    * [ANN-414] - Map, OneToMany, join table or @ManyToMany does not work on MySQL and on composite keys
+    * [ANN-415] - <named-native-query result-class leads to CCE
+    * [ANN-416] - Mapping of inheritance with several generic superclasses fails
+    * [ANN-421] - Unable to map no packaged classes when JPA XML is used
+    * [ANN-423] - @Min/@Max broken with BigInteger/BigDecimal
+    * [ANN-424] - column overriding fails on composite elements when defined at the entity level
+    * [ANN-426] - Validator keep a JavaXFactory in a static variable creating memleaks on redeployement
+    * [ANN-427] - throw "java.lang.IllegalStateException: Property parent has an unbound type and no explicit target entity." on generic type
+
+
+** Improvement
+    * [ANN-7] - Document usage of @IndexColumn in one-to-many with indexed collection
+    * [ANN-36] - @ForceDiscriminator (Serg Prasolov)
+    * [ANN-39] - @CollectionId for idbags
+    * [ANN-47] - Allow to set an enum parameter on a query
+    * [ANN-261] - Allow specifying foreign key constraint name using annotations (inspired by David Hay)
+    * [ANN-265] - Fall back to default validator message if the key is not found
+    * [ANN-343] - validator messages in brazilian portuguese
+    * [ANN-350] - Support ejb3 dd when no schema locator is defined
+    * [ANN-351] - Validator Brazilian translation
+    * [ANN-355] - Make XML overriding rules for access type smoother
+    * [ANN-356] - Clear the PC on Rollback on RESOURCE_LOCAL Transactions
+    * [ANN-371] - Abstract DocumentBuilder from the underlying Directory implementation
+    * [ANN-373] - imports are not done for the full entityname
+    * [ANN-374] - Map - OneToMany w or w/o join table creates bad sql
+    * [ANN-381] - Make possible to specify an @EmbeddedId's field in a @OneToMany's mappedBy property
+    * [ANN-397] - Incomplete AnnotationException at org.hibernate.cfg.annotations.TableBinder
+    * [ANN-399] - Class validator should not WARN on unbound properties not involved in validation
+
+** New Feature
+    * [ANN-284] - @OrderBy clash with @Formula Properties
+    * [ANN-349] - Add @FlushModeType.MANUAL
+    * [ANN-367] - Upgrade to Lucene 2.0.0 (Sylvain Vieujot)
+    * [ANN-372] - @Boost factor on document and fields
+    * [ANN-378] - Chinese translation (Xiaogang Cao)
+    * [ANN-385] - Abstract the Lucene directory implementation and allow configuration based definition
+    * [ANN-386] - Add support for RAMDirectory
+    * [ANN-419] - Support SortedMap
+    * [ANN-440] - MessageIntrospector hook introduced in HibernateValidator
+
+
+** Task
+    * [ANN-410] - Depreciate EJB 3 Package annotations
+
+
+3.2.0.CR1 (13-05-2006)
+----------------------
+** Bug
+    * [ANN-95] - Cannot create a unique constraint on columns belonging to both the superclass and the class
+    * [ANN-97] - JoinColumn with referencedColumnName clashes with unique=true on target column
+    * [ANN-118] - Duplicate unique constraint may be created
+    * [ANN-281] - @Mapkey broken if key is Entity
+    * [ANN-288] - Hibernate chokes on methods in entities starting with get...() and returning int[]
+    * [ANN-289] - @OneToOne and @Column fails
+    * [ANN-305] - ImprovedNamingStrategy not compatible with Hibernate annotations (@Index in particular)
+    * [ANN-306] - "Unbound" @Transient properties not properly being ignored
+    * [ANN-307] - BindHelper.findPropertiesByColumns behaviour is non deterministic due to HashSet being used
+    * [ANN-310] - Dist is missing resource files
+    * [ANN-329] - Entity.name is ignored in inheritance mapping
+    * [ANN-330] - Entity name not used to build default table name (classname is used instead)
+    * [ANN-331] - Extra element concatenated to default columns in collection of elements
+    * [ANN-333] - CollectionOfElements not using specified JoinTable
+    * [ANN-335] - AnnotationBinder just throws NPE if @OneToMany annotation is not on a Collection or Array
+    * [ANN-339] - @OrderBy does not work when an association table is involved
+    * [ANN-340] - Hard dependency to CGLIB classes in mustBeSkipped()
+
+
+** Improvement
+    * [ANN-120] - Map, OneToMany, join table or @ManyToMany does not work
+    * [ANN-195] - Potentially move from TableA_TableB to EntityA_EntityB on join tables is the spec remains
+    * [ANN-293] - Unidirectional @ManyToMany should throw and error or warning when target entity cannot be resolved
+    * [ANN-323] - XML overriding should have precedence over annotations for queries, rs, generators
+    * [ANN-325] - entity described in XML should be part of the mapped entities
+    * [ANN-327] - Support for Map<Entity,Entity>
+    * [ANN-337] - XML result-set-mapping should overrides @SqlResultSetMapping
+    * [ANN-338] - @Temporal no longer has default value
+
+** New Feature
+    * [ANN-40] - @Parent
+    * [ANN-89] - Support generated=true property option for automatic refresh
+    * [ANN-158] - Support for @ManyToOne or @OneToOne @JoinTable (bidirectional)
+    * [ANN-224] - Ability to override fetching and lazy options through annotations
+    * [ANN-276] - Proper support of @OneToOne @PrimaryKeyJoinColumns
+
+
+3.1.0.Beta10b Preview (27-04-2006)
+----------------------------------
+** Bug
+    * [ANN-292] - @EmbeddedId object containing only @ManyToOne fails / wrong pk generation when at EmbeddedId contains @ManyToOne
+    * [ANN-295] - Generators behave like allocationSize+1
+    * [ANN-300] - @OneToOne(optional=false) does not create foreign key
+    * [ANN-301] - Validator won't validate "new" (=transient) bean when bean is CGLIB-instrumented
+    * [ANN-319] - Make Hibernate Annotations types Serializable and thread safe
+    * [ANN-321] - Discriminator column wo @DiscriminatorColumn has the wrong varchar length
+    * [ANN-328] - @javax.persistence.MapKey broken
+
+
+** Improvement
+    * [ANN-316] - Do not escape el expressions like #{foo} expressions in Validation messages
+
+** New Feature
+    * [ANN-1] - Support Map
+    * [ANN-296] - Support for allocationSize in @SequenceGenerator
+    * [ANN-304] - Display the version number at init time to avoid user confusion regarding the version used
+    * [ANN-322] - Allow EJB3 style XML Overriding
+
+
+3.1beta9 Preview (27-03-2006)
+-----------------------------
+** Bug
+    * [ANN-16] - Annotations: composite pk with two manytoone not working
+    * [ANN-98] - Wrong unsaved-value strategy for IdClass entities
+    * [ANN-196] - sequence should increase by assocationSize rather than regular hilo
+    * [ANN-197] - table generator should stock hi * low_max instead of hi
+    * [ANN-211] - ClassValidator throws NPE during flush
+    * [ANN-230] - Id Annotation - bad example of GeneratedValue
+    * [ANN-234] - @NotNull syntax doesn't make join column null in conjunction with @OneToOne or @ManyToOne
+    * [ANN-236] - @OneToMany(mappedBy) cannot referenced an hbm file described entity
+    * [ANN-240] - @AttributeOverride only works in @Entity, not @MappedSuperclass
+    * [ANN-241] - @Index broken on property when no  columnName is defined
+    * [ANN-253] - Do not raise unresolved type exception if targetEntity is defined on the association annotation
+    * [ANN-254] - References to invalid CascadeType.CREATE in documentation
+    * [ANN-255] - Validator problem with @Valid @Embedded objects
+    * [ANN-256] - Incorrect classloader used for ResourceBundle loading in JavaEE environment
+    * [ANN-257] - referencedColumnName is not recognized on a many-to-one to a composite primary key
+    * [ANN-258] - OneToOne annotation: Hibernate is not respecting the optional=true behaviour
+    * [ANN-266] - @Temporal on Calendar is not mapped properly
+    * [ANN-269] - doc error in example validation annotation
+    * [ANN-274] - @AttributeOverride ignored when defined on an @Entity having a @MappedSuperclass annotated with @IdClass
+    * [ANN-280] - Index not work
+    * [ANN-282] - @IdClass including @Id claims no identifier property rather than @Id not authorized
+
+
+** Improvement
+    * [ANN-146] - @NotNull should be ignored for SINGLE_TABLE subclass properties
+    * [ANN-208] - Enable @Valid for Collections, Maps and Arrays
+    * [ANN-223] - Entity name should be the default for discriminator value (not the fqcn)
+    * [ANN-233] - @Email not documented
+    * [ANN-245] - Better doc on MapKey explaining that the column is shared between the key and the referenced property
+    * [ANN-262] - @org.hibernate.annotatios.Table.name remaned in @...Table.appliesTo
+    * [ANN-271] - Change @EntityResult(Class entityClass) ( was @EntityResult(String name) )
+    * [ANN-272] - Remove TYPE @Target on @JoinColumn(s)
+    * [ANN-275] - Default discriminator column is DTYPE rather than TYPE
+    * [ANN-291] - addUnderscore changed to protected visibility in DefaultComponentSafeNamingStrategy as an extension point
+
+** New Feature
+    * [ANN-15] - Use of @ManyToOne in a @EmbeddedId
+    * [ANN-226] - Allow Associations within an @Embeddable Class
+    * [ANN-259] - @OnDelete for @OneToOne and @ManyToOne (Radim Tlusty, Mat?j Kraus)
+    * [ANN-270] - Add @SqlResultSetMappings
+    * [ANN-273] - @AssociationOverride(s) similar to @AttributeOverride(s)
+    * [ANN-287] - Abstraction layer on top of reflection calls (Paolo Perrotta, Davide Marchignoli)
+
+
+** Task
+    * [ANN-228] - Get rid of the compliance and limitation section in the doc.
+    * [ANN-239] - DefaultValidatorMessages_de.properties: translation errors
+
+	
+3.1beta8 Preview (20-01-2006)
+-----------------------------
+** Bug
+    * [ANN-132] - transient fields are considered to be persistent when not annotated with @Transient
+    * [ANN-162] - OneToMany mapping from annotated to hbm loaded class fails with infinite loop
+    * [ANN-175] - extractType executed on @Transient and fail when the return type is <T extends MembershipData>  T
+    * [ANN-176] - Endless loop when annotated class references by ManyToOne class mapped in .hbm.xml
+    * [ANN-177] - unable to use referencedColumnName = joined subclass primary column name
+    * [ANN-178] - Different handling column naming with @JoinColumn between 3.1beta5 and 3.1beta7
+    * [ANN-180] - Indexed collection, field access, onetomany+mappedby seems to fail
+    * [ANN-187] - Unable to referenceColumnName a column (property) of the super class
+    * [ANN-193] - @IdClass should work on @MappedSuperclass
+    * [ANN-199] - NPE when mappedBy property is wrong on a @OneToOne
+    * [ANN-214] - Annotation website documentation syntax error
+
+** New Feature
+    * [ANN-147] - Allow embeddable subclasses in the middle of a class hierarchy
+    * [ANN-172] - Delegates the SQL type of enum to @Enumerated
+    * [ANN-188] - @Email for validator
+    * [ANN-190] - @TableGenerator as per the pfd instead of @GeneratorIdTable & co
+    * [ANN-191] - Non entity classes in between entity classes in the hierarchy
+    * [ANN-200] - Support of @Basic, @Lob, @Enumerated, @Temporal as per the PFD
+    * [ANN-209] - @Named(Native)Query(hints=...)
+
+
+** Improvement
+    * [ANN-17] - Support dotted annotation when declaring resultsets
+    * [ANN-56] - @AccessType: Support mixed field/property access strategies for an Entity
+    * [ANN-192] - Access type guessed from position of @Id or @EmbeddedId
+    * [ANN-194] - Access type guessed from owner entity for Embeddable objects
+    * [ANN-198] - Better error message when @ManyToOne references an unknown entity
+    * [ANN-201] - Rename @EmbeddableSuperclass into @MappedSuperclass
+    * [ANN-203] - Move to @Id @GeneratedValue(strategy=AUTO, generator="blah")
+    * [ANN-204] - @TableGenerator instead of @TableGenerator and @GeneratedIdTable
+    * [ANN-205] - @NamedQuery(query=...) instead of @NamedQuery(queryString=...) same for @NamedNativeQuery
+    * [ANN-215] - Support SqlResutSetMapping with dotted notation in arbitrary order
+    * [ANN-216] - Support scalar queries through @ColumnResult
+    * [ANN-218] - @SecondaryTable(PrimaryKeyJoinColumn[] pkJoinColumns) instead of @SecondaryTable(JoinColumn[] joins() )
+    * [ANN-219] - @JoinTable(name, catalog, schema, uniqueConstraints) instead of @JoinTable(table=@Table())
+    * [ANN-220] - @Column(table=) and @JoinColumn(table=) instead of @Column(secondaryTable=)
+    * [ANN-221] - @Inheritance(strategy), @DiscriminatorColumn(discriminatorType), @DiscriminatorValue instead of @Inheritance
+    * [ANN-225] - @EntityListeners replace @EntityListener
+
+
+3.1beta7 Preview (13-12-2005)
+-----------------------------
+
+** Bug
+    * [ANN-114] - NPE when SecondaryTable uses a non pk reference column in @JoinColumn
+    * [ANN-115] - @Index does not work on joincolumns
+    * [ANN-117] - setOrphanDelete not set causing some delete-orphan .clear() to fail
+    * [ANN-123] - Support for Generics superclass
+    * [ANN-124] - FIELD constant thing is wrong in the doc
+    * [ANN-133] - Bytecode enhancement process adds non-transient properties to beans
+    * [ANN-135] - Inconsistent range check between Range Validator class and generated DDL.
+    * [ANN-136] - Validator annotations not applied to the hibernate metamodel for id properties
+    * [ANN-139] - SINGLE_TABLE inheritance raise an WrongClassException under certain circumstances
+    * [ANN-142] - Automatic Generation of Composite IDs - Annonation declaration fails
+    * [ANN-151] - <subclass extends= broken when using AnnotationConfiguration
+    * [ANN-152] - Indexes generated by the LuceneEventListener are deleted at startup (Mattias Arbin)
+    * [ANN-156] - MapKey Cannot Map @Id when using @IdClass
+    * [ANN-165] - @Length(min=4) ie wo max generate a varchar(Integer.MAX_VALUE)
+    * [ANN-171] - Class cast exception during processing of non getter generic methods
+    * [ANN-173] - ClassValidator.getInvalidValues  should not depend on equals() for circularity check
+
+** New Feature
+    * [ANN-111] - add function for validating properties before bean creation
+    * [ANN-116] - fetch validators from implemented interfaces
+    * [ANN-125] - Validator does not preserve method hierarchy in InvalidValue[]
+    * [ANN-127] - Add @Future
+    * [ANN-128] - Externalize EJB3 namings to NamingStrategy
+
+
+** Improvement
+    * [ANN-119] - Embedded international error messages
+    * [ANN-121] - Named Queries should be package level visible
+    * [ANN-126] - mention usage of columnDefinition as part of @Column in docs
+    * [ANN-138] - Support collections of value types with separate annotation
+    * [ANN-148] - EnumType should be aware of DababaseMetadata.storesUpperCaseIdentifiers() and co (Tim Fennell)
+    * [ANN-149] - Do not check lazy/uninitialized fields in Validator
+    * [ANN-153] - Customize the parent directory for indexes generated by LuceneEventListener (Mattias Arbin)
+    * [ANN-154] - Customize Analyzer subclass for the LuceneEventListener (Mattias Arbin)
+    * [ANN-168] - @FilterDef should support condition
+    * [ANN-170] - Keep user order of hbm files (to ease the typedef usage)
+
+
+3.1beta6 Preview (07-10-2005)
+-----------------------------
+ * ANN-105 More exception handling in AnnotationConfiguration
+ * ANN-109 @Index does not support join columns references
+ * ANN-93 Make Hibernate Validator Serializable Friendly
+
+3.1beta5 Preview (14-09-2005)
+-----------------------------
+ * ANN-70 Lucene integration
+ * ANN-13 Support for referencedColumnName referencing non PK columns for @ManyToMany
+ * ANN-63 Use metadata.getUserName() when guessing Enum backing type (Scott Haug)
+ * ANN-38 Finish the optional=false support
+ * ANN-69 Expand the resource bundle message itself in the Validator framework
+ * ANN-68 Apply validator on a particular property (Jesus Marin)
+ * ANN-41 Allow field validations and validate private method (Chris Wood)
+ * ANN-75 Support named (native) query parameters (from Carlos Gonzalez)
+ * ANN-73 Use an eager strategy for the second join of a ManyToMany
+ * ANN-74 Allow configuration artefacts (hbm, classes) loading precedence
+ * ANN-79 Support collection of composite elements
+ * ANN-19 Annotations should support collections of primitive and core types
+ * ANN-77 Support primitive arrays
+ * ANN-20 Support dotted annotation when using overriding (Alexei Akhounov)
+ * ANN-55 @Proxy annotation should take proxyClass argument
+ * ANN-2 Bidirectional true @OneToOne
+ * ANN-80 @NotFound(action=NotFoundAction.IGNORE)
+ * ANN-57 @Table ignores unique contraint in association table
+ * ANN-3 Support of component inside SecondaryTable
+ * ANN-87 @InheritanceJoinColumn rename is incomplete
+ * ANN-81 ColumnDefinition not assigned when using @Column and @JoinColumn
+ * ANN-34 Second passes binded to HbmBinder.SecondPass
+ * NPE on Index and Unique constrains when column name has case inconsistency
+ * ANN-86 @Index not used on properties having no @Column
+ * ANN-49 Super class of Embeddable not mapped correctly (Alexei Akhounov)
+ * ANN-66 Null enums don't store to database correctly
+ * ANN-65 Validator ignores components (the DDL still ignores it)
+ * ANN-60 NPE when @EmbeddableSuperclass has a superclass @Entity
+ * ANN-90 mention usage of @Column together with @Id explicitly
+ * ANN-18 Document bean-level validator mecanism
+
+3.1beta4 Preview (04-08-2005)
+-----------------------------
+ * ANN-54 EnumType fails to find the Enum in setParameterValues(Properties)
+ * ANN-32 Support index creation
+ * ANN-22 Hibernate 3 Annotations should support all Id generators
+ * ANN-51 redeclaring id in entity subclass raises ClassCastException
+ * ANN-43 @MapKey throw exception if key is id or a component subproperty
+ * ANN-52 Exception when @OrderBy contains the id property or a component subproperty
+ * ANN-13 Support for referencedColumnName referencing non PK columns for @ManyToOne, @OneToOne and @OneToMany
+ * ANN-46 Raise a warning on @Filter on subclasses
+ * ANN-48 @UniqueConstraint reorders columns (Chris Wood)
+ * ANN-6 enum did not worked for enums persisted in string based columns (MySql and Oracle)
+ * ANN-8 array of primitive no longer create a non null column
+ * ANN-45 Proper support for @Basic byte[]
+ * ANN-44 Don't mandate to list embedded superclasses
+ * ANN-42 Don't mandate resultset to be defined before named native queries
+ * ANN-11 More robust support for enum persistence (wider range of SQL types)
+ * HBX-307 Remove @Serialized and support @Lob tagging of a serializable type
+
+3.1beta3 Preview (24-06-2005)
+-----------------------------
+ * Rename @AssociationTable to @JoinTable
+ * HBX-213 support of @IdClass
+ * change targetEntity from String to Class
+ * HBX-305 Support Java5 Enums
+ * Add @Basic(optional=false) and Lob(optional=false)
+ * HBX-284 AnnotationOverride in inheritance in conjunction with @EmbeddedSuperclass
+ * HBX-304 @AttributeOverride instead of @Embedded(override=@AttributeOverride) or @EmbeddedId(...)
+ * HBX-290 All collection binder exception now show the collection role
+ * HBX-299 Fix test suite error on MySql
+ * HBX-302 @MapKey(name="propertyName") to map a map using a property of the associated class as a map key
+ * HBX-201 @Formula on properties or fields.
+ * Support @EntityResult(discriminatorColumn)
+ * Relax List usage as per the spec (non indexed list are defaulted to bag semantic)
+ * HBX-300 enable HQL order by fragment using @javax.persistence.OrderBy
+ * HBX-298 FKs on association tables are forced not null
+ * HBX-297 Primitive types creates a non null constrained column if defaulted and not SINGLE_TABLE (HBX-301)
+ * HBX-287 @DiscriminatorFormula
+ * HBX-205 @OnDelete(action=OnDeleteAction.CASCADE) for joined subclasses and collections
+ * Change @OneToOne(usePkasFk=true) into @PrimaryKeyJoinColumn
+ * Rename @InheritanceJoinColumn/@InheritanceJoinColumns to @PrimaryKeyJoinColumn/@PrimaryKeyJoinColumns
+ * Support @Basic(temporalType=...)
+ * HBX-282 protect @ManyToMany from abusive not joined filters
+ * Align with @NamedNativeQuery/@NamedNativeQueries
+ * HBX-283 Better getter resolution
+ * HBX-75 Implicit inheritance join columns declaration in composite PK
+ * HBX-54 Explicit exception when @Id is missing
+ * HBX-210 Fix NPE when the @Id was on the superclass of the root entity in conjonction with @OneToOne use
+ * HBX-280/HBX-157 Support @EmbeddabledSuperclass
+
+3.0beta2 Preview (27-05-2005)
+-----------------------------
+ * HBX-87 fetching method is now used even when loading through a query
+ * Add the validate framework and bind it to the annotation binder.
+ * HBX-199 Support @Columns and thus multi-column properties (ie composite user types)
+ * HBX-206 Support @OrderBy and @Sort
+ * HBX-203/HBX-81 Support Hibernate cascade strategies through @Cascade (Pablo Nussembaum)
+ * HBX-47 Persist is cascaded on flush operation when using the EJB3 event listeners
+ * HBX-125 Support for named native SQL queries (not Scalar results)
+ * HBX-225 @Type annotation now work for @Id and @Version (Pablo Nussembaum, Emmanuel Bernard)
+ * HBX-248 TABLE_PER_CLASS no longer limited to leaf entities and use union-subclass as its strategy
+ * HBX-186 inheritance strategy no longer have to be defined on every entity (only on root entry)
+ * HBX-53 Annotated classes can be defined in any arbitrary order
+ * Support Array through @IndexColumn (Anthony Patricio)
+ * HBX-216 Ignore static fields and properties
+ * HBX-229/HBX-134 Filter javac generated methods that compensate type erasure aka bridge method (Rogério Gatto)
+ * HBX-184 Support List mappings through @IndexColumn (Matthiew Inger, Emmanuel Bernard)
+ * HBX-187 Move to a CollectionBinder structure (Matthiew Inger, Emmanuel Bernard)
+ * Fix of CascadeType.REMOVE
+
+3.0beta1 Preview (07-04-2005) based on the EJB3 Early Draft 2
+-------------------------------------------------------------
+ * support parameters in @Type (HBX-197)
+ * support @TypeDef at package and class level
+ * HBX-166 support @Lob for Character[],char[], String, byte[] and Byte[] (experimental)
+ * HBX-159/HBX-140 add @Filter(s) and @FilterDef(s) (Matthew Inger, Magnus Sandberg)
+ * HBX-44 @OneToOne support composite PK
+ * @OneToOne is supported except for true bidirectional @OneToOne
+ * Add @Cache annotation: allow to define caching on root entities and on collections (,eg @Cache(usage=CacheConcurrencyStrategy.TRANSACTIONAL, region="specificCacheRegion") )
+ * Support @OneToMany default (ie using an association table)
+ * HBX-164 insertable/updatable of @JoinColumn now work in @ManyToOne processing (Mario Ivankovits, Emmanuel Bernard)
+ * HBX-153 @Id(generate=GeneratorType.AUTO, generator="my_potential_sequence") now work (Pablo Nussembaum)
+ * Support @ManyToMany wo @AssociationTable (ie defaults)
+ * Support @ManyToMany(mappedBy)
+ * Support @OneToMany(mappedBy) (no JoinColumn needed on the @OneToMany side)
+ * Appropriate default value when no @JoinColumn is defined in a ManyToOne
+ * rename @GeneratorTable to @GeneratedIdTable
+ * rename CREATE to PERSIST, add REFRESH cascade style
+ * support Mapping Defaults for Non-Relationship Fields or Properties algorithm as defined in the EJB3 spec
+ * support @Serialized
+ * support @Lob for java.sql.Clob and java.sql.Blob
+ * allow embedded object declaration wo @Embeddable (if @Embedded or @EmbeddedId is present in the property)
+ * support for @EmbeddedId
+ * rename DependentAttribute to AttributeOverride, Dependent to Embedded and DependentObject to Embeddable
+ * support @ManyToOne in embedded objects
+ * support for @NamedQuery and @NamedQueries (EJBQL)
+ * move javax.ejb.* into javax.persistence.* and update copyright header
+
+3.0alpha3 (28-02-2005)
+----------------------
+* HBX-116 Support for Where clause in classes and collections @Where(clause="")
+* HBX-115 Support for class proxying configuration: @Proxy(lazy=false, proxyClassName="my.Interface")
+* HBX-88 Support for hibernate type abstraction through @Type (only on basic properties for now)
+* HBX-108 Support @BatchSize(size=n) for entities and collections
+* HBX-107 implements @org.hibernate.annotations.Entity
+* HBX-103 handle abstract classes
+* HBX-83 precision & scale support for column (Bogdan Ghidireac)
+
+3.0alpha2 (25-01-2005)
+----------------------
+* HBX-61 Support for @UniqueConstraint (except primaryKey=true)
+* HBX-60 Support for a proper @TableGenerator (using MultipleHiLoPerTableGenerator)
+* HBX-63 Support @GeneratorTable
+* HBX-68 Add declarative configuration of annotated classes
+* HBX-74 Rollback the HB-1315 fix: dialect no longer have to be set in hibernate.properties
+
+
+Hibernate-annotations-3.0alpha1 based on the EJB3 Early Draft 1 (6.01.2005)
+---------------------------------------------------------------------------
+* Support for EJB3 annotations:
+ - @Transient
+ - @Column (not primaryKey)
+ - @JoinColumn (referencedColumnName - only for a reference to a PK, not primaryKey)
+ - @Version
+ - @Basic
+ - @Entity
+ - @Table (not uniqueConstraints)
+ - @AccessType
+ - @Id
+ - @CascadeType
+ - @FetchType
+ - @GeneratorType (NONE, IDENTITY, TABLE, SEQUENCE)
+ - @TableGenerator (with scope visibility)
+ - @SequenceGenerator (with scope visibility, does not support initialValue() and allocationSize())
+ - *not* @GeneratorTable (will have to write a new TableHiloGenerator, but it can wait)
+ - @ManyToOne (not optional)
+ - @OneToMany (Set and Collection, generics version or not, JoinColumn not guessed)
+ - @OneToOne
+     but not optional
+     no composite PK/FK
+ - @ManyToMany
+ - @AssociationTable (Has to be on both sides)
+ - @Inheritance
+ - @InheritanceType (has to be defined on every classes of the hierarchy for JOINED strategy,
+                     not very clear about the TABLE_PER_CLASS strategy)
+ - @DiscriminatorColumn
+ - @DiscriminatorType
+ - @InheritanceJoinColumn
+ - @InheritanceJoinColumns
+     this annotation for Composite PK Entities has to be explicit, I do not respect the implicit semantic of the EJB3 spec
+ - @SecondaryTable (@OneToMany @JoinColumn(secondaryTable="..." does not work yet due to H3 core issue HHH-36
+ - @SecondaryTables
+     this annotation for Composite PK Entities has to be explicit, I do not respect the implicit semantic of the EJB3 spec
+ - @DependentObject
+ - @Dependent
+ - @DependentAttribute (only for basic properties as per the spec)
+ - @Id in conjunction with @DependentObject (composite primary keys)
+ - @JoinColumns in conjunction with @ManytoOne, @OneToMany, @ManytoMany
+      - note that the composite FK columns have to be in the same table (no != secondary tables). This is probably a weird case and certainly a not recommanded one.
+
+
+Still missing or incomplete features compared to the EJB3 spec
+--------------------------------------------------------------
+ - use of referencedColumnName for column other than the PK ones @ManyToMany (HBX-62)
+ - Support for a true bidirectional one to one relationship (HBX-177)
+ - support for initialValue and allocationSize in @SequenceGenerator (HBX-59)
+ - finish support of optional=false (HBX-190)
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/doc (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/doc)

Copied: trunk/HibernateExt/annotations/doc/api (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/doc/api)

Deleted: trunk/HibernateExt/annotations/doc/api/package.html
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/doc/api/package.html	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/doc/api/package.html	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1 +0,0 @@
-<body></body>

Copied: trunk/HibernateExt/annotations/doc/api/package.html (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/doc/api/package.html)
===================================================================
--- trunk/HibernateExt/annotations/doc/api/package.html	                        (rev 0)
+++ trunk/HibernateExt/annotations/doc/api/package.html	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1 @@
+<body></body>

Copied: trunk/HibernateExt/annotations/doc/reference (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/doc/reference)


Property changes on: trunk/HibernateExt/annotations/doc/reference
___________________________________________________________________
Name: svn:ignore
   + build

Deleted: trunk/HibernateExt/annotations/doc/reference/.cvsignore
===================================================================
(Binary files differ)

Copied: trunk/HibernateExt/annotations/doc/reference/.cvsignore (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/doc/reference/.cvsignore)
===================================================================
(Binary files differ)

Deleted: trunk/HibernateExt/annotations/doc/reference/build.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/doc/reference/build.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/doc/reference/build.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,25 +0,0 @@
-<project name="Documentation" default="all.doc" basedir=".">
-
-    <!-- Use the core Hibernate3 doc build system -->
-    <import file="../../../common/common-build.xml"/>
-    <import file="${hibernate-cvs.doc.reference}/build.xml"/>
-
-
-    <target name="all.doc" depends="clean">
-
-        <!-- TRANSLATOR: Duplicate this call for your language -->
-        <antcall target="lang.all">
-            <param name="docname" value="hibernate_annotations"/>
-            <param name="lang" value="en"/>
-        </antcall>
-        <antcall target="lang.all">
-            <param name="docname" value="hibernate_annotations"/>
-            <param name="lang" value="zh_cn"/>
-        </antcall>
-        <antcall target="lang.all">
-	    <param name="docname" value="hibernate_annotations"/>
-	    <param name="lang" value="fr"/>
-	</antcall>
-    </target>
-
-</project>

Copied: trunk/HibernateExt/annotations/doc/reference/build.xml (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/doc/reference/build.xml)
===================================================================
--- trunk/HibernateExt/annotations/doc/reference/build.xml	                        (rev 0)
+++ trunk/HibernateExt/annotations/doc/reference/build.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,25 @@
+<project name="Documentation" default="all.doc" basedir=".">
+
+    <!-- Use the core Hibernate3 doc build system -->
+    <import file="../../../common/common-build.xml"/>
+    <import file="${hibernate-cvs.doc.reference}/build.xml"/>
+
+
+    <target name="all.doc" depends="clean">
+
+        <!-- TRANSLATOR: Duplicate this call for your language -->
+        <antcall target="lang.all">
+            <param name="docname" value="hibernate_annotations"/>
+            <param name="lang" value="en"/>
+        </antcall>
+        <antcall target="lang.all">
+            <param name="docname" value="hibernate_annotations"/>
+            <param name="lang" value="zh_cn"/>
+        </antcall>
+        <antcall target="lang.all">
+	    <param name="docname" value="hibernate_annotations"/>
+	    <param name="lang" value="fr"/>
+	</antcall>
+    </target>
+
+</project>

Copied: trunk/HibernateExt/annotations/doc/reference/en (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/doc/reference/en)

Copied: trunk/HibernateExt/annotations/doc/reference/en/images (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/doc/reference/en/images)

Deleted: trunk/HibernateExt/annotations/doc/reference/en/images/hibernate_logo_a.png
===================================================================
(Binary files differ)

Copied: trunk/HibernateExt/annotations/doc/reference/en/images/hibernate_logo_a.png (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/doc/reference/en/images/hibernate_logo_a.png)
===================================================================
(Binary files differ)

Deleted: trunk/HibernateExt/annotations/doc/reference/en/master.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/doc/reference/en/master.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/doc/reference/en/master.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,77 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3CR3//EN"
-"../../../../../Hibernate3/doc/reference/support/docbook-dtd/docbookx.dtd" [
-<!ENTITY setup SYSTEM "modules/setup.xml">
-<!ENTITY entity SYSTEM "modules/entity.xml">
-<!ENTITY xml-overriding SYSTEM "modules/xml-overriding.xml">
-<!ENTITY additionalmodules SYSTEM "modules/additionalmodules.xml">
-]>
-<book lang="en">
-  <bookinfo>
-    <title>Hibernate Annotations</title>
-
-    <subtitle>Reference Guide</subtitle>
-
-    <releaseinfo>3.2.2.GA</releaseinfo>
-
-    <mediaobject>
-      <imageobject>
-        <imagedata fileref="images/hibernate_logo_a.png" format="png" />
-      </imageobject>
-    </mediaobject>
-  </bookinfo>
-
-  <toc></toc>
-
-  <preface id="preface" revision="1">
-    <title>Preface</title>
-
-    <para>Hibernate, like all other object/relational mapping tools, requires
-    metadata that governs the transformation of data from one representation
-    to the other (and vice versa). In Hibernate 2.x, mapping metadata is most
-    of the time declared in XML text files. Another option is XDoclet,
-    utilizing Javadoc source code annotations and a preprocessor at compile
-    time. The same kind of annotation support is now available in the standard
-    JDK, although more powerful and better supported by tools. IntelliJ IDEA,
-    and Eclipse for example, support auto-completion and syntax highlighting
-    of JDK 5.0 annotations. Annotations are compiled into the bytecode and
-    read at runtime (in Hibernate's case on startup) using reflection, so no
-    external XML files are needed.</para>
-
-    <para>The EJB3 specification recognizes the interest and the success of
-    the transparent object/relational mapping paradigm. The EJB3 specification
-    standardizes the basic APIs and the metadata needed for any
-    object/relational persistence mechanism. <emphasis>Hibernate
-    EntityManager</emphasis> implements the programming interfaces and
-    lifecycle rules as defined by the EJB3 persistence specification. Together
-    with <emphasis>Hibernate Annotations</emphasis>, this wrapper implements a
-    complete (and standalone) EJB3 persistence solution on top of the mature
-    Hibernate core. You may use a combination of all three together,
-    annotations without EJB3 programming interfaces and lifecycle, or even
-    pure native Hibernate, depending on the business and technical needs of
-    your project. You can at all times fall back to Hibernate native APIs, or
-    if required, even to native JDBC and SQL.</para>
-
-    <para>This release is based on the final release of the EJB 3.0 / JPA
-    specification (aka JSP-220) and support all the specification features
-    (including the optional ones). Most of the Hibernate features and
-    extensions are also available through Hibernate specific annotations
-    compared to the specification are also available. While the Hibernate
-    feature coverage is now very high, some are still missing. The eventual
-    goal is to cover all of them. See the JIRA road map section for more
-    informations.</para>
-
-    <para>If you are moving from previous Hibernate Annotations versions,
-    please have a look at <ulink url="http://www.hibernate.org/398.html">Java
-    Persistence migration guide</ulink>.</para>
-  </preface>
-
-  &setup;
-
-  &entity;
-
-  &xml-overriding;
-
-  &additionalmodules;
-
-</book>
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/doc/reference/en/master.xml (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/doc/reference/en/master.xml)
===================================================================
--- trunk/HibernateExt/annotations/doc/reference/en/master.xml	                        (rev 0)
+++ trunk/HibernateExt/annotations/doc/reference/en/master.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3CR3//EN"
+"../../../../../Hibernate3/doc/reference/support/docbook-dtd/docbookx.dtd" [
+<!ENTITY setup SYSTEM "modules/setup.xml">
+<!ENTITY entity SYSTEM "modules/entity.xml">
+<!ENTITY xml-overriding SYSTEM "modules/xml-overriding.xml">
+<!ENTITY additionalmodules SYSTEM "modules/additionalmodules.xml">
+]>
+<book lang="en">
+  <bookinfo>
+    <title>Hibernate Annotations</title>
+
+    <subtitle>Reference Guide</subtitle>
+
+    <releaseinfo>3.2.2.GA</releaseinfo>
+
+    <mediaobject>
+      <imageobject>
+        <imagedata fileref="images/hibernate_logo_a.png" format="png" />
+      </imageobject>
+    </mediaobject>
+  </bookinfo>
+
+  <toc></toc>
+
+  <preface id="preface" revision="1">
+    <title>Preface</title>
+
+    <para>Hibernate, like all other object/relational mapping tools, requires
+    metadata that governs the transformation of data from one representation
+    to the other (and vice versa). In Hibernate 2.x, mapping metadata is most
+    of the time declared in XML text files. Another option is XDoclet,
+    utilizing Javadoc source code annotations and a preprocessor at compile
+    time. The same kind of annotation support is now available in the standard
+    JDK, although more powerful and better supported by tools. IntelliJ IDEA,
+    and Eclipse for example, support auto-completion and syntax highlighting
+    of JDK 5.0 annotations. Annotations are compiled into the bytecode and
+    read at runtime (in Hibernate's case on startup) using reflection, so no
+    external XML files are needed.</para>
+
+    <para>The EJB3 specification recognizes the interest and the success of
+    the transparent object/relational mapping paradigm. The EJB3 specification
+    standardizes the basic APIs and the metadata needed for any
+    object/relational persistence mechanism. <emphasis>Hibernate
+    EntityManager</emphasis> implements the programming interfaces and
+    lifecycle rules as defined by the EJB3 persistence specification. Together
+    with <emphasis>Hibernate Annotations</emphasis>, this wrapper implements a
+    complete (and standalone) EJB3 persistence solution on top of the mature
+    Hibernate core. You may use a combination of all three together,
+    annotations without EJB3 programming interfaces and lifecycle, or even
+    pure native Hibernate, depending on the business and technical needs of
+    your project. You can at all times fall back to Hibernate native APIs, or
+    if required, even to native JDBC and SQL.</para>
+
+    <para>This release is based on the final release of the EJB 3.0 / JPA
+    specification (aka JSP-220) and support all the specification features
+    (including the optional ones). Most of the Hibernate features and
+    extensions are also available through Hibernate specific annotations
+    compared to the specification are also available. While the Hibernate
+    feature coverage is now very high, some are still missing. The eventual
+    goal is to cover all of them. See the JIRA road map section for more
+    informations.</para>
+
+    <para>If you are moving from previous Hibernate Annotations versions,
+    please have a look at <ulink url="http://www.hibernate.org/398.html">Java
+    Persistence migration guide</ulink>.</para>
+  </preface>
+
+  &setup;
+
+  &entity;
+
+  &xml-overriding;
+
+  &additionalmodules;
+
+</book>
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/doc/reference/en/modules (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/doc/reference/en/modules)

Deleted: trunk/HibernateExt/annotations/doc/reference/en/modules/additionalmodules.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/doc/reference/en/modules/additionalmodules.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/doc/reference/en/modules/additionalmodules.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,120 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<chapter id="additionalmodules">
-  <title>Additional modules</title>
-
-  <para>Hibernate Annotations mainly focus on persistence metadata. The
-  project also have a nice integration with two Hibernate modules.</para>
-
-  <section>
-    <title>Hibernate Validator</title>
-
-    <section>
-      <title>Description</title>
-
-      <para>Annotations are a very convenient and elegant way to specify
-      invariant constraints for a domain model. You can, for example, express
-      that a property should never be null, that the account balance should be
-      strictly positive, etc. These domain model constraints are declared in
-      the bean itself by annotating its properties. A validator can then read
-      them and check for constraint violations. The validation mechanism can
-      be executed in different layers in your application without having to
-      duplicate any of these rules (presentation layer, data access layer).
-      Following the DRY principle, Hibernate Validator has been designed for
-      that purpose.</para>
-
-      <para>Hibernate Validator works at two levels. First, it is able to
-      check in-memory instances of a class for constraint violations. Second,
-      it can apply the constraints to the Hibernate metamodel and incorporate
-      them into the generated database schema.</para>
-
-      <para>Each constraint annotation is associated to a validator
-      implementation responsible for checking the constraint on the entity
-      instance. A validator can also (optionally) apply the constraint to the
-      Hibernate metamodel, allowing Hibernate to generate DDL that expresses
-      the constraint. With the appropriate event listener, you can execute the
-      checking operation on inserts and updates done by Hibernate. Hibernate
-      Validator is not limited to use with Hibernate. You can easily use it
-      anywhere in your application.</para>
-
-      <para>When checking instances at runtime, Hibernate Validator returns
-      information about constraint violations in an array of
-      <classname>InvalidValue</classname> s. Among other information, the
-      <classname>InvalidValue</classname> contains an error description
-      message that can embed the parameter values bundle with the annotation
-      (eg. length limit), and message strings that may be externalized to a
-      <classname>ResourceBundle</classname> .</para>
-    </section>
-
-    <section>
-      <title>Integration with Hibernate Annotations</title>
-
-      <para>If Hibernate Validator
-      (<filename>hibernate-validator.jar</filename>) is available in the
-      classpath, Hibernate Annotations will integrates in two ways:</para>
-
-      <itemizedlist>
-        <listitem>
-          <para>Constraints will be applied to the Data Definition Language.
-          In other words, the database schema will reflect the constraints
-          (provided that you use the hbm2ddl tool).</para>
-        </listitem>
-
-        <listitem>
-          <para>Before an entity change is applied to the database (insert or
-          update), the entity is validated. Validation errors, if any, will be
-          carried over through an
-          <classname>InvalidStateException</classname>.</para>
-        </listitem>
-      </itemizedlist>
-
-      <para>For entities free of validation rules, the runtime performance
-      cost is null.</para>
-
-      <para>To disable constraint propagation to DDL, set up
-      <literal>hibernate.validator.apply_to_ddl</literal> to false in the
-      configuration file. Such a need is very uncommon and not
-      recommanded.</para>
-
-      <para>To disable pre-entity change validation, set up
-      <literal>hibernate.validator.autoregister_listeners</literal> to false
-      in the configuration file. Such a need is very uncommon and not
-      recommanded.</para>
-
-      <para>Check the Hibernate Validator reference documentation for more
-      information.</para>
-    </section>
-  </section>
-
-  <section>
-    <title>Hibernate Search</title>
-
-    <section>
-      <title>Decription</title>
-
-      <para>Full text search engines like <productname>Apache
-      Lucene</productname> are a very powerful technology to bring free
-      text/efficient queries to applications. If suffers several mismatches
-      when dealing with a object domain model (keeping the index up to date,
-      mismatch between the index structure and the domain model, querying
-      mismatch...) Hibernate Search indexes your domain model thanks to a few
-      annotations, takes care of the database / index synchronization and
-      brings you back regular managed objects from free text queries.
-      Hibernate Search is using <ulink url="http://lucene.apache.org">Apache
-      Lucene</ulink> under the cover.</para>
-    </section>
-
-    <section>
-      <title>Integration with Hibernate Annotations</title>
-
-      <para>Hibernate Search integrates with Hibernate Annotations
-      transparently provided that hibernate-search.jar is present in the
-      classpath. If you do not wish to autoregister Hibernate Search event
-      listeners, you can set
-      <literal>hibernate.search.autoregister_listeners</literal> to false.
-      Such a need is very uncommon and not recommanded.</para>
-
-      <para>Check the Hibernate Search reference documentation for more
-      information.</para>
-    </section>
-  </section>
-</chapter>
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/doc/reference/en/modules/additionalmodules.xml (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/doc/reference/en/modules/additionalmodules.xml)
===================================================================
--- trunk/HibernateExt/annotations/doc/reference/en/modules/additionalmodules.xml	                        (rev 0)
+++ trunk/HibernateExt/annotations/doc/reference/en/modules/additionalmodules.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<chapter id="additionalmodules">
+  <title>Additional modules</title>
+
+  <para>Hibernate Annotations mainly focus on persistence metadata. The
+  project also have a nice integration with two Hibernate modules.</para>
+
+  <section>
+    <title>Hibernate Validator</title>
+
+    <section>
+      <title>Description</title>
+
+      <para>Annotations are a very convenient and elegant way to specify
+      invariant constraints for a domain model. You can, for example, express
+      that a property should never be null, that the account balance should be
+      strictly positive, etc. These domain model constraints are declared in
+      the bean itself by annotating its properties. A validator can then read
+      them and check for constraint violations. The validation mechanism can
+      be executed in different layers in your application without having to
+      duplicate any of these rules (presentation layer, data access layer).
+      Following the DRY principle, Hibernate Validator has been designed for
+      that purpose.</para>
+
+      <para>Hibernate Validator works at two levels. First, it is able to
+      check in-memory instances of a class for constraint violations. Second,
+      it can apply the constraints to the Hibernate metamodel and incorporate
+      them into the generated database schema.</para>
+
+      <para>Each constraint annotation is associated to a validator
+      implementation responsible for checking the constraint on the entity
+      instance. A validator can also (optionally) apply the constraint to the
+      Hibernate metamodel, allowing Hibernate to generate DDL that expresses
+      the constraint. With the appropriate event listener, you can execute the
+      checking operation on inserts and updates done by Hibernate. Hibernate
+      Validator is not limited to use with Hibernate. You can easily use it
+      anywhere in your application.</para>
+
+      <para>When checking instances at runtime, Hibernate Validator returns
+      information about constraint violations in an array of
+      <classname>InvalidValue</classname> s. Among other information, the
+      <classname>InvalidValue</classname> contains an error description
+      message that can embed the parameter values bundle with the annotation
+      (eg. length limit), and message strings that may be externalized to a
+      <classname>ResourceBundle</classname> .</para>
+    </section>
+
+    <section>
+      <title>Integration with Hibernate Annotations</title>
+
+      <para>If Hibernate Validator
+      (<filename>hibernate-validator.jar</filename>) is available in the
+      classpath, Hibernate Annotations will integrates in two ways:</para>
+
+      <itemizedlist>
+        <listitem>
+          <para>Constraints will be applied to the Data Definition Language.
+          In other words, the database schema will reflect the constraints
+          (provided that you use the hbm2ddl tool).</para>
+        </listitem>
+
+        <listitem>
+          <para>Before an entity change is applied to the database (insert or
+          update), the entity is validated. Validation errors, if any, will be
+          carried over through an
+          <classname>InvalidStateException</classname>.</para>
+        </listitem>
+      </itemizedlist>
+
+      <para>For entities free of validation rules, the runtime performance
+      cost is null.</para>
+
+      <para>To disable constraint propagation to DDL, set up
+      <literal>hibernate.validator.apply_to_ddl</literal> to false in the
+      configuration file. Such a need is very uncommon and not
+      recommanded.</para>
+
+      <para>To disable pre-entity change validation, set up
+      <literal>hibernate.validator.autoregister_listeners</literal> to false
+      in the configuration file. Such a need is very uncommon and not
+      recommanded.</para>
+
+      <para>Check the Hibernate Validator reference documentation for more
+      information.</para>
+    </section>
+  </section>
+
+  <section>
+    <title>Hibernate Search</title>
+
+    <section>
+      <title>Decription</title>
+
+      <para>Full text search engines like <productname>Apache
+      Lucene</productname> are a very powerful technology to bring free
+      text/efficient queries to applications. If suffers several mismatches
+      when dealing with a object domain model (keeping the index up to date,
+      mismatch between the index structure and the domain model, querying
+      mismatch...) Hibernate Search indexes your domain model thanks to a few
+      annotations, takes care of the database / index synchronization and
+      brings you back regular managed objects from free text queries.
+      Hibernate Search is using <ulink url="http://lucene.apache.org">Apache
+      Lucene</ulink> under the cover.</para>
+    </section>
+
+    <section>
+      <title>Integration with Hibernate Annotations</title>
+
+      <para>Hibernate Search integrates with Hibernate Annotations
+      transparently provided that hibernate-search.jar is present in the
+      classpath. If you do not wish to autoregister Hibernate Search event
+      listeners, you can set
+      <literal>hibernate.search.autoregister_listeners</literal> to false.
+      Such a need is very uncommon and not recommanded.</para>
+
+      <para>Check the Hibernate Search reference documentation for more
+      information.</para>
+    </section>
+  </section>
+</chapter>
\ No newline at end of file

Deleted: trunk/HibernateExt/annotations/doc/reference/en/modules/entity.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/doc/reference/en/modules/entity.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/doc/reference/en/modules/entity.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,3583 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<chapter id="entity">
-  <title>Entity Beans</title>
-
-  <sect1 id="entity-overview" revision="2">
-    <title>Intro</title>
-
-    <para>This section covers EJB 3.0 (aka Java Persistence) entity
-    annotations and Hibernate-specific extensions.</para>
-  </sect1>
-
-  <sect1 id="entity-mapping" revision="2">
-    <title>Mapping with EJB3/JPA Annotations</title>
-
-    <para>EJB3 entities are plain POJOs. Actually they represent the exact
-    same concept as the Hibernate persistent entities. Their mappings are
-    defined through JDK 5.0 annotations (an XML descriptor syntax for
-    overriding is defined in the EJB3 specification). Annotations can be split
-    in two categories, the logical mapping annotations (allowing you to
-    describe the object model, the class associations, etc.) and the physical
-    mapping annotations (describing the physical schema, tables, columns,
-    indexes, etc). We will mix annotations from both categories in the
-    following code examples.</para>
-
-    <para>EJB3 annotations are in the <literal>javax.persistence.*</literal>
-    package. Most JDK 5 compliant IDE (like Eclipse, IntelliJ IDEA and
-    Netbeans) can autocomplete annotation interfaces and attributes for you
-    (even without a specific "EJB3" module, since EJB3 annotations are plain
-    JDK 5 annotations).</para>
-
-    <para>For more and runnable concrete examples read the JBoss EJB 3.0
-    tutorial or review the Hibernate Annotations test suite. Most of the unit
-    tests have been designed to represent a concrete example and be a
-    inspiration source.</para>
-
-    <sect2 id="entity-mapping-entity">
-      <title>Declaring an entity bean</title>
-
-      <para>Every bound persistent POJO class is an entity bean and is
-      declared using the <literal>@Entity</literal> annotation (at the class
-      level):</para>
-
-      <programlisting>
- at Entity
-public class Flight implements Serializable {
-    Long id;
-
-    @Id
-    public Long getId() { return id; }
-
-    public void setId(Long id) { this.id = id; }
-}
-         </programlisting>
-
-      <para><literal>@Entity</literal> declares the class as an entity bean
-      (i.e. a persistent POJO class), <literal>@Id</literal> declares the
-      identifier property of this entity bean. The other mapping declarations
-      are implicit. This configuration by exception concept is central to the
-      new EJB3 specification and a major improvement. The class Flight is
-      mapped to the Flight table, using the column id as its primary key
-      column.</para>
-
-      <para>Depending on whether you annotate fields or methods, the access
-      type used by Hibernate will be <literal>field</literal> or
-      <literal>property</literal>. The EJB3 spec requires that you declare
-      annotations on the element type that will be accessed, i.e. the getter
-      method if you use <literal>property</literal> access, the field if you
-      use <literal>field</literal> access. Mixing EJB3 annotations in both
-      fields and methods should be avoided. Hibernate will guess the access
-      type from the position of <literal>@Id</literal> or
-      <literal>@EmbeddedId</literal>.</para>
-
-      <sect3>
-        <title>Defining the table</title>
-
-        <para><literal>@Table</literal> is set at the class level; it allows
-        you to define the table, catalog, and schema names for your entity
-        bean mapping. If no <literal>@Table</literal> is defined the default
-        values are used: the unqualified class name of the entity.</para>
-
-        <programlisting>
- at Entity
- at Table(name="tbl_sky")
-public class Sky implements Serializable {
-...
-            </programlisting>
-
-        <para>The <literal>@Table</literal> element also contains a
-        <literal>schema</literal> and a <literal>catalog</literal> attributes,
-        if they need to be defined. You can also define unique constraints to
-        the table using the <literal>@UniqueConstraint</literal> annotation in
-        conjunction with <literal>@Table</literal> (for a unique constraint
-        bound to a single column, refer to <literal>@Column</literal>).</para>
-
-        <programlisting>@Table(name="tbl_sky",
-    <emphasis role="bold">uniqueConstraints = {@UniqueConstraint(columnNames={"month", "day"})}</emphasis>
-)</programlisting>
-
-        <para>A unique constraint is applied to the tuple month, day. Note
-        that the <literal>columnNames</literal> array refers to the logical
-        column names.</para>
-
-        <remark>The logical column name is defined by the Hibernate
-        NamingStrategy implementation. The default EJB3 naming strategy use
-        the physical column name as the logical column name. Note that this
-        may be different than the property name (if the column name is
-        explicit). Unless you override the NamingStrategy, you shouldn't worry
-        about that.</remark>
-      </sect3>
-
-      <sect3 id="entity-mapping-entity-version" revision="1">
-        <title>Versioning for optimistic locking</title>
-
-        <para>You can add optimistic locking capability to an entity bean
-        using the <literal>@Version</literal> annotation:</para>
-
-        <programlisting>
- at Entity
-public class Flight implements Serializable {
-...
-    @Version
-    @Column(name="OPTLOCK")
-    public Integer getVersion() { ... }
-}           </programlisting>
-
-        <para>The version property will be mapped to the
-        <literal>OPTLOCK</literal> column, and the entity manager will use it
-        to detect conflicting updates (preventing lost updates you might
-        otherwise see with the last-commit-wins strategy).</para>
-
-        <para>The version column may be a numeric (the recommended solution)
-        or a timestamp as per the EJB3 spec. Hibernate support any kind of
-        type provided that you define and implement the appropriate
-        <classname>UserVersionType</classname>.</para>
-
-        <para>The application must not alter the version number set up by
-        Hibernate in any way. To artificially increase the version number,
-        check in Hibernate Entity Manager's reference documentation
-        <literal>LockMode.WRITE</literal></para>
-      </sect3>
-    </sect2>
-
-    <sect2 id="entity-mapping-property" revision="1">
-      <title>Mapping simple properties</title>
-
-      <sect3>
-        <title>Declaring basic property mappings</title>
-
-        <para>Every non static non transient property (field or method) of an
-        entity bean is considered persistent, unless you annotate it as
-        <literal>@Transient</literal>. Not having an annotation for your
-        property is equivalent to the appropriate <literal>@Basic</literal>
-        annotation. The <literal>@Basic</literal> annotation allows you to
-        declare the fetching strategy for a property:</para>
-
-        <programlisting>public transient int counter; //transient property
-
-private String firstname; //persistent property
-
- at Transient
-String getLengthInMeter() { ... } //transient property
-
-String getName() {... } // persistent property
-
- at Basic
-int getLength() { ... } // persistent property
-
- at Basic(fetch = FetchType.LAZY)
-String getDetailedComment() { ... } // persistent property
-
- at Temporal(TemporalType.TIME)
-java.util.Date getDepartureTime() { ... } // persistent property           
-
- at Enumerated(STRING)
-Starred getNote() { ... } //enum persisted as String in database</programlisting>
-
-        <para><literal>counter</literal>, a transient field, and
-        <literal>lengthInMeter</literal>, a method annotated as
-        <literal>@Transient</literal>, and will be ignored by the entity
-        manager. <literal>name</literal>, <literal>length</literal>, and
-        <literal>firstname</literal> properties are mapped persistent and
-        eagerly fetched (the default for simple properties). The
-        <literal>detailedComment</literal> property value will be lazily
-        fetched from the database once a lazy property of the entity is
-        accessed for the first time. Usually you don't need to lazy simple
-        properties (not to be confused with lazy association fetching).</para>
-
-        <note>
-          <para>To enable property level lazy fetching, your classes have to
-          be instrumented: bytecode is added to the original one to enable
-          such feature, please refer to the Hibernate reference documentation.
-          If your classes are not instrumented, property level lazy loading is
-          silently ignored.</para>
-        </note>
-
-        <para>The recommended alternative is to use the projection capability
-        of EJB-QL or Criteria queries.</para>
-
-        <para>EJB3 support property mapping of all basic types supported by
-        Hibernate (all basic Java types , their respective wrappers and
-        serializable classes). Hibernate Annotations support out of the box
-        Enum type mapping either into a ordinal column (saving the enum
-        ordinal) or a string based column (saving the enum string
-        representation): the persistence representation, defaulted to ordinal,
-        can be overriden through the <literal>@Enumerated</literal> annotation
-        as shown in the <literal>note</literal> property example.</para>
-
-        <para>In core Java APIs, the temporal precision is not defined. When
-        dealing with temporal data you might want to describe the expected
-        precision in database. Temporal data can have <literal>DATE</literal>,
-        <literal>TIME</literal>, or <literal>TIMESTAMP</literal> precision (ie
-        the actual date, only the time, or both). Use the
-        <literal>@Temporal</literal> annotation to fine tune that.</para>
-
-        <para><literal>@Lob</literal> indicates that the property should be
-        persisted in a Blob or a Clob depending on the property type:
-        <classname>java.sql.Clob</classname>,
-        <classname>Character[]</classname>, <classname>char[]</classname> and
-        java.lang.<classname>String</classname> will be persisted in a Clob.
-        <classname>java.sql.Blob</classname>, <classname>Byte[]</classname>,
-        <classname>byte[] </classname>and serializable type will be persisted
-        in a Blob.</para>
-
-        <programlisting>
- at Lob
-public String getFullText() {
-    return fullText;
-}
-
- at Lob 
-public byte[] getFullCode() {
-    return fullCode;
-}
- </programlisting>
-
-        <para>If the property type implements
-        <classname>java.io.Serializable</classname> and is not a basic type,
-        and if the property is not annotated with <literal>@Lob</literal>,
-        then the Hibernate <literal>serializable</literal> type is
-        used.</para>
-      </sect3>
-
-      <sect3 id="entity-mapping-property-column" revision="1">
-        <title>Declaring column attributes</title>
-
-        <para>The column(s) used for a property mapping can be defined using
-        the <literal>@Column</literal> annotation. Use it to override default
-        values (see the EJB3 specification for more information on the
-        defaults). You can use this annotation at the property level for
-        properties that are:</para>
-
-        <itemizedlist>
-          <listitem>
-            <para>not annotated at all</para>
-          </listitem>
-
-          <listitem>
-            <para>annotated with <literal>@Basic</literal></para>
-          </listitem>
-
-          <listitem>
-            <para>annotated with <literal>@Version</literal></para>
-          </listitem>
-
-          <listitem>
-            <para>annotated with <literal>@Lob</literal></para>
-          </listitem>
-
-          <listitem>
-            <para>annotated with <literal>@Temporal</literal></para>
-          </listitem>
-
-          <listitem>
-            <para>annotated with
-            <literal>@org.hibernate.annotations.CollectionOfElements</literal>
-            (for Hibernate only)</para>
-          </listitem>
-        </itemizedlist>
-
-        <programlisting>
- at Entity
-public class Flight implements Serializable {
-...
- at Column(updatable = false, name = "flight_name", nullable = false, length=50)
-public String getName() { ... }
-            </programlisting>
-
-        <para>The <literal>name</literal> property is mapped to the
-        <literal>flight_name</literal> column, which is not nullable, has a
-        length of 50 and is not updatable (making the property
-        immutable).</para>
-
-        <para>This annotation can be applied to regular properties as well as
-        <literal>@Id</literal> or <literal>@Version</literal>
-        properties.</para>
-
-        <programlistingco>
-          <areaspec>
-            <area coords="2 55" id="hm1" />
-
-            <area coords="3 55" id="hm2" />
-
-            <area coords="4 55" id="hm3" />
-
-            <area coords="5 55" id="hm4" />
-
-            <area coords="6 55" id="hm5" />
-
-            <area coords="7 55" id="hm6" />
-
-            <area coords="8 55" id="hm7" />
-
-            <area coords="9 55" id="hm8" />
-
-            <area coords="10 55" id="hm9" />
-
-            <area coords="11 55" id="hm10" />
-          </areaspec>
-
-          <programlisting>@Column(
-    name="columnName";
-    boolean unique() default false;
-    boolean nullable() default true;
-    boolean insertable() default true;
-    boolean updatable() default true;
-    String columnDefinition() default "";
-    String table() default "";
-    int length() default 255;
-    int precision() default 0; // decimal precision
-    int scale() default 0; // decimal scale</programlisting>
-
-          <calloutlist>
-            <callout arearefs="hm1">
-              <para><literal>name</literal> (optional): the column name
-              (default to the property name)</para>
-            </callout>
-
-            <callout arearefs="hm2">
-              <para><literal>unique</literal> (optional): set a unique
-              constraint on this column or not (default false)</para>
-            </callout>
-
-            <callout arearefs="hm3">
-              <para><literal>nullable</literal> (optional): set the column as
-              nullable (default true).</para>
-            </callout>
-
-            <callout arearefs="hm4">
-              <para><literal>insertable</literal> (optional): whether or not
-              the column will be part of the insert statement (default
-              true)</para>
-            </callout>
-
-            <callout arearefs="hm5">
-              <para><literal>updatable</literal> (optional): whether or not
-              the column will be part of the update statement (default
-              true)</para>
-            </callout>
-
-            <callout arearefs="hm6">
-              <para><literal>columnDefinition</literal> (optional): override
-              the sql DDL fragment for this particular column (non
-              portable)</para>
-            </callout>
-
-            <callout arearefs="hm7">
-              <para><literal>table</literal> (optional): define the targeted
-              table (default primary table)</para>
-            </callout>
-
-            <callout arearefs="hm8">
-              <para><literal><literal>length</literal></literal> (optional):
-              column length (default 255)</para>
-            </callout>
-
-            <callout arearefs="hm8">
-              <para><literal><literal>precision</literal></literal>
-              (optional): column decimal precision (default 0)</para>
-            </callout>
-
-            <callout arearefs="hm10">
-              <para><literal><literal>scale</literal></literal> (optional):
-              column decimal scale if useful (default 0)</para>
-            </callout>
-          </calloutlist>
-        </programlistingco>
-      </sect3>
-
-      <sect3>
-        <title>Embedded objects (aka components)</title>
-
-        <para>It is possible to declare an embedded component inside an entity
-        and even override its column mapping. Component classes have to be
-        annotated at the class level with the <literal>@Embeddable</literal>
-        annotation. It is possible to override the column mapping of an
-        embedded object for a particular entity using the
-        <literal>@Embedded</literal> and <literal>@AttributeOverride</literal>
-        annotation in the associated property:</para>
-
-        <programlisting>
- at Entity
-public class Person implements Serializable {
-
-    // Persistent component using defaults
-    Address homeAddress;
-
-    @Embedded
-    @AttributeOverrides( {
-            @AttributeOverride(name="iso2", column = @Column(name="bornIso2") ),
-            @AttributeOverride(name="name", column = @Column(name="bornCountryName") )
-    } )
-    Country bornIn;
-    ...
-}
-            </programlisting>
-
-        <programlisting>
- at Embeddable
-public class Address implements Serializable {
-    String city;
-    Country nationality; //no overriding here
-}
-            </programlisting>
-
-        <programlisting>
- at Embeddable
-public class Country implements Serializable {
-    private String iso2;
-    @Column(name="countryName") private String name;
-
-    public String getIso2() { return iso2; }
-    public void setIso2(String iso2) { this.iso2 = iso2; }
-
-    
-    public String getName() { return name; }
-    public void setName(String name) { this.name = name; }
-    ...
-}
-            </programlisting>
-
-        <para>A embeddable object inherit the access type of its owning entity
-        (note that you can override that using the Hibernate specific
-        <literal>@AccessType</literal> annotations (see <xref
-        linkend="entity-hibspec" />).</para>
-
-        <para>The <literal>Person</literal> entity bean has two component
-        properties, <literal>homeAddress</literal> and
-        <literal>bornIn</literal>. <literal>homeAddress</literal> property has
-        not been annotated, but Hibernate will guess that it is a persistent
-        component by looking for the <literal>@Embeddable</literal> annotation
-        in the Address class. We also override the mapping of a column name
-        (to <literal>bornCountryName</literal>) with the
-        <literal>@Embedded</literal> and <literal>@AttributeOverride
-        </literal>annotations for each mapped attribute of
-        <literal>Country</literal>. As you can see, <literal>Country
-        </literal>is also a nested component of <literal>Address</literal>,
-        again using auto-detection by Hibernate and EJB3 defaults. Overriding
-        columns of embedded objects of embedded objects is currently not
-        supported in the EJB3 spec, however, Hibernate Annotations supports it
-        through dotted expressions.</para>
-
-        <para><programlisting>    @Embedded
-    @AttributeOverrides( {
-            @AttributeOverride(name="city", column = @Column(name="fld_city") )
-            @AttributeOverride(name="<emphasis role="bold">nationality.iso2</emphasis>", column = @Column(name="nat_Iso2") ),
-            @AttributeOverride(name="<emphasis role="bold">nationality.name</emphasis>", column = @Column(name="nat_CountryName") )
-            //nationality columns in homeAddress are overridden
-    } )
-    Address homeAddress;</programlisting>Hibernate Annotations supports one
-        more feature that is not explicitly supported by the EJB3
-        specification. You can annotate a embedded object with the
-        <literal>@MappedSuperclass</literal> annotation to make the superclass
-        properties persistent (see <literal>@MappedSuperclass</literal> for
-        more informations).</para>
-
-        <para>While not supported by the EJB3 specification, Hibernate
-        Annotations allows you to use association annotations in an embeddable
-        object (ie <literal>@*ToOne</literal> nor
-        <literal>@*ToMany</literal>). To override the association columns you
-        can use <literal>@AssociationOverride</literal>.</para>
-
-        <para>If you want to have the same embeddable object type twice in the
-        same entity, the column name defaulting will not work: at least one of
-        the columns will have to be explicit. Hibernate goes beyond the EJB3
-        spec and allows you to enhance the defaulting mechanism through the
-        <classname>NamingStrategy</classname>.
-        <classname>DefaultComponentSafeNamingStrategy</classname> is a small
-        improvement over the default EJB3NamingStrategy that allows embedded
-        objects to be defaulted even if used twice in the same entity.</para>
-      </sect3>
-
-      <sect3>
-        <title>Non-annotated property defaults</title>
-
-        <para>If a property is not annotated, the following rules
-        apply:</para>
-
-        <itemizedlist>
-          <listitem>
-             If the property is of a single type, it is mapped as @Basic 
-          </listitem>
-
-          <listitem>
-             Otherwise, if the type of the property is annotated as @Embeddable, it is mapped as @Embedded 
-          </listitem>
-
-          <listitem>
-             Otherwise, if the type of the property is Serializable, it is mapped as @Basic in a column holding the object in its serialized version 
-          </listitem>
-
-          <listitem>
-             Otherwise, if the type of the property is java.sql.Clob or java.sql.Blob, it is mapped as @Lob with the appropriate LobType 
-          </listitem>
-        </itemizedlist>
-      </sect3>
-    </sect2>
-
-    <sect2 id="entity-mapping-identifier" label=""
-           xreflabel="Mapping identifier properties">
-      <title>Mapping identifier properties</title>
-
-      <para>The <literal>@Id</literal> annotation lets you define which
-      property is the identifier of your entity bean. This property can be set
-      by the application itself or be generated by Hibernate (preferred). You
-      can define the identifier generation strategy thanks to the
-      <literal>@GeneratedValue</literal> annotation:</para>
-
-      <itemizedlist>
-        <listitem>
-           AUTO - either identity column, sequence or table depending on the underlying DB 
-        </listitem>
-
-        <listitem>
-           TABLE - table holding the id 
-        </listitem>
-
-        <listitem>
-           IDENTITY - identity column 
-        </listitem>
-
-        <listitem>
-           SEQUENCE - sequence 
-        </listitem>
-      </itemizedlist>
-
-      <para>Hibernate provides more id generators than the basic EJB3 ones.
-      Check <xref linkend="entity-hibspec" /> for more informations.</para>
-
-      <para>The following example shows a sequence generator using the
-      SEQ_STORE configuration (see below)</para>
-
-      <programlisting>
- at Id @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQ_STORE")
-public Integer getId() { ... }
-         </programlisting>
-
-      <para>The next example uses the identity generator:</para>
-
-      <programlisting>
- at Id @GeneratedValue(strategy=GenerationType.IDENTITY)
-public Long getId() { ... }
-         </programlisting>
-
-      <para>The <literal>AUTO</literal> generator is the preferred type for
-      portable applications (across several DB vendors). The identifier
-      generation configuration can be shared for several
-      <literal>@Id</literal> mappings with the generator attribute. There are
-      several configurations available through
-      <literal>@SequenceGenerator</literal> and
-      <literal>@TableGenerator</literal>. The scope of a generator can be the
-      application or the class. Class-defined generators are not visible
-      outside the class and can override application level generators.
-      Application level generators are defined at XML level (see <xref
-      linkend="xml-overriding" />):</para>
-
-      <programlisting>&lt;table-generator name="EMP_GEN"
-            table="GENERATOR_TABLE"
-            pk-column-name="key"
-            value-column-name="hi"
-            pk-column-value="EMP"
-            allocation-size="20"/&gt;
-
-//and the annotation equivalent
-
- at javax.persistence.TableGenerator(
-    name="EMP_GEN",
-    table="GENERATOR_TABLE",
-    pkColumnName = "key",
-    valueColumnName = "hi"
-    pkColumnValue="EMP",
-    allocationSize=20
-)
-
-&lt;sequence-generator name="SEQ_GEN" 
-    sequence-name="my_sequence"
-    allocation-size="20"/&gt;
-
-//and the annotation equivalent
-
- at javax.persistence.SequenceGenerator(
-    name="SEQ_GEN",
-    sequenceName="my_sequence",
-    allocationSize=20
-)
-         </programlisting>
-
-      <para>If JPA XML (like <filename>META-INF/orm.xml</filename>) is used to
-      define thegenerators, <literal>EMP_GEN</literal> and
-      <literal>SEQ_GEN</literal> are application level generators.
-      <literal>EMP_GEN</literal> defines a table based id generator using the
-      hilo algorithm with a <literal>max_lo</literal> of 20. The hi value is
-      kept in a <literal>table</literal> "<literal>GENERATOR_TABLE</literal>".
-      The information is kept in a row where <literal>pkColumnName</literal>
-      "key" is equals to <literal>pkColumnValue</literal>
-      "<literal>EMP</literal>" and column <literal>valueColumnName</literal>
-      "<literal>hi</literal>" contains the the next high value used.</para>
-
-      <para><literal>SEQ_GEN</literal> defines a sequence generator using a
-      sequence named <literal>my_sequence</literal>. The allocation size used
-      for this sequence based hilo algorithm is 20. Note that this version of
-      Hibernate Annotations does not handle <literal>initialValue</literal> in
-      the sequence generator. The default allocation size is 50, so if you
-      want to use a sequence and pickup the value each time, you must set the
-      allocation size to 1.</para>
-
-      <note>
-        <para>Package level definition is no longer supported by the EJB 3.0
-        specification. However, you can use the
-        <literal>@GenericGenerator</literal> at the package level (see <xref
-        linkend="entity-hibspec-identifier" />).</para>
-      </note>
-
-      <para>The next example shows the definition of a sequence generator in a
-      class scope:</para>
-
-      <programlisting>
- at Entity
- at javax.persistence.SequenceGenerator(
-    name="SEQ_STORE",
-    sequenceName="my_sequence"
-)
-public class Store implements Serializable {
-    private Long id;
-
-    @Id @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQ_STORE")
-    public Long getId() { return id; }
-}
-         </programlisting>
-
-      <para>This class will use a sequence named my_sequence and the SEQ_STORE
-      generator is not visible in other classes. Note that you can check the
-      Hibernate Annotations tests in the org.hibernate.test.metadata.id
-      package for more examples.</para>
-
-      <para>You can define a composite primary key through several
-      syntaxes:</para>
-
-      <itemizedlist>
-        <listitem>
-           annotate the component property as @Id and make the component class @Embeddable 
-        </listitem>
-
-        <listitem>
-           annotate the component property as @EmbeddedId 
-        </listitem>
-
-        <listitem>
-           annotate the class as @IdClass and annotate each property of the entity involved in the primary key with @Id 
-        </listitem>
-      </itemizedlist>
-
-      <para>While quite common to the EJB2 developer,
-      <literal>@IdClass</literal> is likely new for Hibernate users. The
-      composite primary key class corresponds to multiple fields or properties
-      of the entity class, and the names of primary key fields or properties
-      in the primary key class and those of the entity class must match and
-      their types must be the same. Let's look at an example:</para>
-
-      <programlisting>@Entity
-<emphasis role="bold">@IdClass(FootballerPk.class)</emphasis>
-public class Footballer {
-    //part of the id key
-    <emphasis role="bold">@Id</emphasis> public String getFirstname() {
-        return firstname;
-    }
-
-    public void setFirstname(String firstname) {
-        this.firstname = firstname;
-    }
-
-    //part of the id key
-    <emphasis role="bold">@Id</emphasis> public String getLastname() {
-        return lastname;
-    }
-
-    public void setLastname(String lastname) {
-        this.lastname = lastname;
-    }
-
-    public String getClub() {
-        return club;
-    }
-
-    public void setClub(String club) {
-        this.club = club;
-    }
-
-    //appropriate equals() and hashCode() implementation
-}
-
- at Embeddable
-public class FootballerPk implements Serializable {
-    //same name and type as in Footballer
-    public String getFirstname() {
-        return firstname;
-    }
-
-    public void setFirstname(String firstname) {
-        this.firstname = firstname;
-    }
-
-    //same name and type as in Footballer
-    public String getLastname() {
-        return lastname;
-    }
-
-    public void setLastname(String lastname) {
-        this.lastname = lastname;
-    }
-
-    //appropriate equals() and hashCode() implementation
-}
-</programlisting>
-
-      <para>As you may have seen, <literal>@IdClass</literal> points to the
-      corresponding primary key class.</para>
-
-      <para>While not supported by the EJB3 specification, Hibernate allows
-      you to define associations inside a composite identifier. Simply use the
-      regular annotations for that</para>
-
-      <programlisting>@Entity
- at AssociationOverride( name="id.channel", joinColumns = @JoinColumn(name="chan_id") )
-public class TvMagazin {
-    @EmbeddedId public TvMagazinPk id;
-    @Temporal(TemporalType.TIME) Date time;
-}
-
- at Embeddable
-public class TvMagazinPk implements Serializable {
-    @ManyToOne
-    public Channel channel;
-    public String name;
-    @ManyToOne
-    public Presenter presenter;
-}
-</programlisting>
-    </sect2>
-
-    <sect2>
-      <title>Mapping inheritance</title>
-
-      <para>EJB3 supports the three types of inheritance:</para>
-
-      <itemizedlist>
-        <listitem>
-           Table per Class Strategy: the &lt;union-class&gt; element in Hibernate 
-        </listitem>
-
-        <listitem>
-           Single Table per Class Hierarchy Strategy: the &lt;subclass&gt; element in Hibernate 
-        </listitem>
-
-        <listitem>
-           Joined Subclass Strategy: the &lt;joined-subclass&gt; element in Hibernate 
-        </listitem>
-      </itemizedlist>
-
-      <para>The chosen strategy is declared at the class level of the top
-      level entity in the hierarchy using the <literal>@Inheritance</literal>
-      annotation.</para>
-
-      <note>
-        <para>Annotating interfaces is currently not supported.</para>
-      </note>
-
-      <sect3>
-        <title>Table per class</title>
-
-        <para>This strategy has many drawbacks (esp. with polymorphic queries
-        and associations) explained in the EJB3 spec, the Hibernate reference
-        documentation, Hibernate in Action, and many other places. Hibernate
-        work around most of them implementing this strategy using <literal>SQL
-        UNION</literal> queries. It is commonly used for the top level of an
-        inheritance hierarchy:</para>
-
-        <programlisting>
- at Entity
- at Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
-public class Flight implements Serializable {
-            </programlisting>
-
-        <para>This strategy support one to many associations provided that
-        they are bidirectional. This strategy does not support the
-        <literal>IDENTITY</literal> generator strategy: the id has to be
-        shared across several tables. Consequently, when using this strategy,
-        you should not use <literal>AUTO </literal>nor
-        <literal>IDENTITY</literal>.</para>
-      </sect3>
-
-      <sect3>
-        <title>Single table per class hierarchy</title>
-
-        <para>All properties of all super- and subclasses are mapped into the
-        same table, instances are distinguished by a special discriminator
-        column:</para>
-
-        <programlisting>
- at Entity
- at Inheritance(strategy=InheritanceType.SINGLE_TABLE)
- at DiscriminatorColumn(
-    name="planetype",
-    discriminatorType=DiscriminatorType.STRING
-)
- at DiscriminatorValue("Plane")
-public class Plane { ... }
-
- at Entity
- at DiscriminatorValue("A320")
-public class A320 extends Plane { ... }
-            </programlisting>
-
-        <para><classname>Plane</classname> is the superclass, it defines the
-        inheritance strategy <literal>InheritanceType.SINGLE_TABLE</literal>.
-        It also defines the discriminator column through the
-        <literal>@DiscriminatorColumn</literal> annotation, a discriminator
-        column can also define the discriminator type. Finally, the
-        <literal>@DiscriminatorValue</literal> annotation defines the value
-        used to differentiate a class in the hierarchy. All of these
-        attributes have sensible default values. The default name of the
-        discriminator column is <literal>DTYPE</literal>. The default
-        discriminator value is the entity name (as defined in
-        <literal>@Entity.name</literal>) for DiscriminatorType.STRING.
-        <classname>A320</classname> is a subclass; you only have to define
-        discriminator value if you don't want to use the default value. The
-        strategy and the discriminator type are implicit.</para>
-
-        <para><literal>@Inheritance</literal> and
-        <literal>@DiscriminatorColumn</literal> should only be defined at the
-        top of the entity hierarchy.</para>
-      </sect3>
-
-      <sect3>
-        <title>Joined subclasses</title>
-
-        <para>The<literal> @PrimaryKeyJoinColumn</literal> and
-        <literal>@PrimaryKeyJoinColumns</literal> annotations define the
-        primary key(s) of the joined subclass table:</para>
-
-        <programlisting>
- at Entity
- at Inheritance(strategy=InheritanceType.JOINED)
-public class Boat implements Serializable { ... }
-
- at Entity
-public class Ferry extends Boat { ... }
-
- at Entity
- at PrimaryKeyJoinColumn(name="BOAT_ID")
-public class AmericaCupClass  extends Boat { ... }
-            </programlisting>
-
-        <para>All of the above entities use the <literal>JOINED</literal>
-        strategy, the <literal>Ferry</literal> table is joined with the
-        <literal>Boat</literal> table using the same primary key names. The
-        <literal>AmericaCupClass</literal> table is joined with
-        <literal>Boat</literal> using the join condition <code>Boat.id =
-        AmericaCupClass.BOAT_ID</code>.</para>
-      </sect3>
-
-      <sect3>
-        <title>Inherit properties from superclasses</title>
-
-        <para>This is sometimes useful to share common properties through a
-        technical or a business superclass without including it as a regular
-        mapped entity (ie no specific table for this entity). For that purpose
-        you can map them as <literal>@MappedSuperclass</literal>.</para>
-
-        <programlisting>@MappedSuperclass
-public class BaseEntity {
-    @Basic
-    @Temporal(TemporalType.TIMESTAMP)
-    public Date getLastUpdate() { ... }
-    public String getLastUpdater() { ... }
-    ...
-}
-
- at Entity class Order extends BaseEntity {
-    @Id public Integer getId() { ... }
-    ...
-}</programlisting>
-
-        <para>In database, this hierarchy will be represented as an
-        <literal>Order</literal> table having the <literal>id</literal>,
-        <literal>lastUpdate</literal> and <literal>lastUpdater</literal>
-        columns. The embedded superclass property mappings are copied into
-        their entity subclasses. Remember that the embeddable superclass is
-        not the root of the hierarchy though.</para>
-
-        <note>
-          <para>Properties from superclasses not mapped as
-          <literal>@MappedSuperclass</literal> are ignored.</para>
-        </note>
-
-        <note>
-          <para>The access type (field or methods), is inherited from the root
-          entity, unless you use the Hibernate annotation
-          <literal>@AccessType</literal></para>
-        </note>
-
-        <note>
-          <para>The same notion can be applied to
-          <literal>@Embeddable</literal> objects to persist properties from
-          their superclasses. You also need to use
-          <literal>@MappedSuperclass</literal> to do that (this should not be
-          considered as a standard EJB3 feature though)</para>
-        </note>
-
-        <note>
-          <para>It is allowed to mark a class as
-          <literal>@MappedSuperclass</literal> in the middle of the mapped
-          inheritance hierarchy.</para>
-        </note>
-
-        <note>
-          <para>Any class in the hierarchy non annotated with
-          <literal>@MappedSuperclass</literal> nor <literal>@Entity</literal>
-          will be ignored.</para>
-        </note>
-
-        <para>You can override columns defined in entity superclasses at the
-        root entity level using the <literal>@AttributeOverride</literal>
-        annotation.</para>
-
-        <programlisting>@MappedSuperclass
-public class FlyingObject implements Serializable {
-
-    public int getAltitude() {
-        return altitude;
-    }
-
-    @Transient
-    public int getMetricAltitude() {
-        return metricAltitude;
-    }
-
-    @ManyToOne
-    public PropulsionType getPropulsion() {
-        return metricAltitude;
-    }
-    ...
-}
-
- at Entity
- at AttributeOverride( name="altitude", column = @Column(name="fld_altitude") )
- at AssociationOverride( name="propulsion", joinColumns = @JoinColumn(name="fld_propulsion_fk") )
-public class Plane extends FlyingObject {
-    ...
-}</programlisting>
-
-        <para>The <literal>altitude</literal> property will be persisted in an
-        <literal>fld_altitude</literal> column of table
-        <literal>Plane</literal> and the propulsion association will be
-        materialized in a <literal>fld_propulsion_fk</literal> foreign key
-        column.</para>
-
-        <para>You can define <literal>@AttributeOverride</literal>(s) and
-        <literal>@AssociationOverride</literal>(s) on
-        <literal>@Entity</literal> classes,
-        <literal>@MappedSuperclass</literal> classes and properties pointing
-        to an <literal>@Embeddable</literal> object.</para>
-      </sect3>
-    </sect2>
-
-    <sect2 id="entity-mapping-association">
-      <title>Mapping entity bean associations/relationships</title>
-
-      <sect3>
-        <title>One-to-one</title>
-
-        <para>You can associate entity beans through a one-to-one relationship
-        using <literal>@OneToOne</literal>. There are three cases for
-        one-to-one associations: either the associated entities share the same
-        primary keys values, a foreign key is held by one of the entities
-        (note that this FK column in the database should be constrained unique
-        to simulate one-to-one multiplicity), or a association table is used
-        to store the link between the 2 entities (a unique constraint has to
-        be defined on each fk to ensure the one to one multiplicity)</para>
-
-        <para>First, we map a real one-to-one association using shared primary
-        keys:</para>
-
-        <programlisting>
- at Entity
-public class Body {
-    @Id
-    public Long getId() { return id; }
-
-    @OneToOne(cascade = CascadeType.ALL)
-    @PrimaryKeyJoinColumn
-    public Heart getHeart() {
-        return heart;
-    }
-    ...
-}
-            </programlisting>
-
-        <programlisting>
- at Entity
-public class Heart {
-    @Id
-    public Long getId() { ...}
-}
-            </programlisting>
-
-        <para>The one to one is marked as true by using the
-        <literal>@PrimaryKeyJoinColumn</literal> annotation.</para>
-
-        <para>In the following example, the associated entities are linked
-        through a foreign key column:</para>
-
-        <programlisting>
- at Entity
-public class Customer implements Serializable {
-    @OneToOne(cascade = CascadeType.ALL)
-    <emphasis role="bold">@JoinColumn(name="passport_fk")</emphasis>
-    public Passport getPassport() {
-        ...
-    }
-
- at Entity
-public class Passport implements Serializable {
-    @OneToOne(<emphasis role="bold">mappedBy = "passport"</emphasis>)
-    public Customer getOwner() {
-    ...
-}
-            </programlisting>
-
-        <para>A <classname>Customer</classname> is linked to a
-        <classname>Passport</classname>, with a foreign key column named
-        <literal>passport_fk</literal> in the <literal>Customer</literal>
-        table. The join column is declared with the
-        <literal>@JoinColumn</literal> annotation which looks like the
-        <literal>@Column</literal> annotation. It has one more parameters
-        named <literal>referencedColumnName</literal>. This parameter declares
-        the column in the targeted entity that will be used to the join. Note
-        that when using
-        <literal><literal>referencedColumnName</literal></literal> to a non
-        primary key column, the associated class has to be
-        <classname>Serializable</classname>. Also note that the
-        <literal><literal>referencedColumnName</literal></literal> to a non
-        primary key column has to be mapped to a property having a single
-        column (other cases might not work).</para>
-
-        <para>The association may be bidirectional. In a bidirectional
-        relationship, one of the sides (and only one) has to be the owner: the
-        owner is responsible for the association column(s) update. To declare
-        a side as <emphasis>not</emphasis> responsible for the relationship,
-        the attribute <literal>mappedBy</literal> is used.
-        <literal>mappedBy</literal> refers to the property name of the
-        association on the owner side. In our case, this is
-        <literal>passport</literal>. As you can see, you don't have to (must
-        not) declare the join column since it has already been declared on the
-        owners side.</para>
-
-        <para>If no <literal>@JoinColumn</literal> is declared on the owner
-        side, the defaults apply. A join column(s) will be created in the
-        owner table and its name will be the concatenation of the name of the
-        relationship in the owner side, <keycap>_</keycap> (underscore), and
-        the name of the primary key column(s) in the owned side. In this
-        example <literal>passport_id</literal> because the property name is
-        <literal>passport</literal> and the column id of <literal>Passport
-        </literal>is <literal>id</literal>.</para>
-
-        <para>The third possibility (using an association table) is very
-        exotic.</para>
-
-        <programlisting>
- at Entity
-public class Customer implements Serializable {
-    @OneToOne(cascade = CascadeType.ALL)
-    <emphasis role="bold">@JoinTable(name = "CustomerPassports"
-        joinColumns = @JoinColumn(name="customer_fk"),
-        inverseJoinColumns = @JoinColumns(name="passport_fk")</emphasis>
-    )
-    public Passport getPassport() {
-        ...
-    }
-
- at Entity
-public class Passport implements Serializable {
-    @OneToOne(<emphasis role="bold">mappedBy = "passport"</emphasis>)
-    public Customer getOwner() {
-    ...
-}
-            </programlisting>
-
-        <para>A <classname>Customer</classname> is linked to a
-        <classname>Passport</classname> through a association table named
-        <literal>CustomerPassports</literal> ; this association table has a
-        foreign key column named <literal>passport_fk</literal> pointing to
-        the <literal>Passport</literal> table (materialized by the
-        <literal>inverseJoinColumn</literal>, and a foreign key column named
-        <literal>customer_fk</literal> pointing to the
-        <literal>Customer</literal> table materialized by the
-        <literal>joinColumns</literal> attribute.</para>
-
-        <para>You must declare the join table name and the join columns
-        explicitly in such a mapping.</para>
-      </sect3>
-
-      <sect3>
-        <title>Many-to-one</title>
-
-        <para>Many-to-one associations are declared at the property level with
-        the annotation <literal>@ManyToOne</literal>:</para>
-
-        <programlisting>
- at Entity()
-public class Flight implements Serializable {
-    <emphasis role="bold">@ManyToOne</emphasis>( cascade = {CascadeType.PERSIST, CascadeType.MERGE} )
-    @JoinColumn(name="COMP_ID")
-    public Company getCompany() {
-        return company;
-    }
-    ...
-}
-            </programlisting>
-
-        <para>The <literal>@JoinColumn</literal> attribute is optional, the
-        default value(s) is like in one to one, the concatenation of the name
-        of the relationship in the owner side, <keycap>_</keycap>
-        (underscore), and the name of the primary key column in the owned
-        side. In this example <literal>company_id</literal> because the
-        property name is <literal>company</literal> and the column id of
-        Company is <literal>id</literal>.</para>
-
-        <para><literal>@ManyToOne</literal> has a parameter named
-        <literal>targetEntity</literal> which describes the target entity
-        name. You usually don't need this parameter since the default value
-        (the type of the property that stores the association) is good in
-        almost all cases. However this is useful when you want to use
-        interfaces as the return type instead of the regular entity.</para>
-
-        <programlisting>
- at Entity()
-public class Flight implements Serializable {
-    @ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE}, <emphasis
-            role="bold">targetEntity=CompanyImpl.class</emphasis> )
-    @JoinColumn(name="COMP_ID")
-    public Company getCompany() {
-        return company;
-    }
-    ...
-}
-
-public interface Company {
-    ...
-            </programlisting>
-
-        <para>You can alse map a many to one association through an
-        association table. This association table described by the
-        <literal>@JoinTable</literal> annotation will contains a foreign key
-        referencing back the entity table (through
-        <literal>@JoinTable.joinColumns</literal>) and a a foreign key
-        referencing the target entity table (through
-        <literal>@JoinTable.inverseJoinColumns</literal>).</para>
-
-        <programlisting>
- at Entity()
-public class Flight implements Serializable {
-    @ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE} )
-    <emphasis role="bold">@JoinTable(name="Flight_Company",
-        joinColumns = @JoinColumn(name="FLIGHT_ID"),
-        inverseJoinColumns = @JoinColumns(name="COMP_ID")
-    )</emphasis>
-    public Company getCompany() {
-        return company;
-    }
-    ...
-}
-            </programlisting>
-      </sect3>
-
-      <sect3 id="entity-mapping-association-collections" revision="1">
-        <title>Collections</title>
-
-        <sect4 id="entity-mapping-association-collections-overview"
-               revision="1">
-          <title>Overview</title>
-
-          <para>You can map <classname>Collection</classname>,
-          <literal>List</literal> (ie ordered lists, not indexed lists),
-          <literal>Map</literal> and <classname>Set</classname>. The EJB3
-          specification describes how to map an ordered list (ie a list
-          ordered at load time) using
-          <literal>@javax.persistence.OrderBy</literal> annotation: this
-          annotation takes into parameter a list of comma separated (target
-          entity) properties to order the collection by (eg <code>firstname
-          asc, age desc</code>), if the string is empty, the collection will
-          be ordered by id. For true indexed collections, please refer to the
-          <xref linkend="entity-hibspec" />. EJB3 allows you to map Maps using
-          as a key one of the target entity property using
-          <literal>@MapKey(name="myProperty")</literal> (myProperty is a
-          property name in the target entity). When using
-          <literal>@MapKey</literal> (without property name), the target
-          entity primary key is used. The map key uses the same column as the
-          property pointed out: there is no additional column defined to hold
-          the map key, and it does make sense since the map key actually
-          represent a target property. Be aware that once loaded, the key is
-          no longer kept in sync with the property, in other words, if you
-          change the property value, the key will not change automatically in
-          your Java model (for true map support please refers to <xref
-          linkend="entity-hibspec" />). Many people confuse
-          <literal>&lt;map&gt;</literal> capabilities and
-          <literal>@MapKey</literal> ones. These are two different features.
-          <literal>@MapKey</literal> still has some limitations, please check
-          the forum or the JIRA tracking system for more informations.</para>
-
-          <para>Hibernate has several notions of collections.</para>
-
-          <para></para>
-
-          <table>
-            <title>Collections semantics</title>
-
-            <tgroup cols="3">
-              <colspec colname="c1" />
-
-              <colspec colname="c2" />
-
-              <colspec colname="c3" colnum="2" />
-
-              <thead>
-                <row>
-                  <entry>Semantic</entry>
-
-                  <entry>java representation</entry>
-
-                  <entry>annotations</entry>
-                </row>
-              </thead>
-
-              <tbody>
-                <row>
-                  <entry>Bag semantic</entry>
-
-                  <entry>java.util.List, java.util.Collection</entry>
-
-                  <entry>@org.hibernate.annotations.CollectionOfElements or
-                  @OneToMany or @ManyToMany</entry>
-                </row>
-
-                <row>
-                  <entry>Bag semantic with primary key (withtout the
-                  limitations of Bag semantic)</entry>
-
-                  <entry>java.util.List, java.util.Collection</entry>
-
-                  <entry>(@org.hibernate.annotations.CollectionOfElements or
-                  @OneToMany or @ManyToMany) and @CollectionId</entry>
-                </row>
-
-                <row>
-                  <entry>List semantic</entry>
-
-                  <entry>java.util.List</entry>
-
-                  <entry>(@org.hibernate.annotations.CollectionOfElements or
-                  @OneToMany or @ManyToMany) and
-                  @org.hibernate.annotations.IndexColumn</entry>
-                </row>
-
-                <row>
-                  <entry>Set semantic</entry>
-
-                  <entry>java.util.Set</entry>
-
-                  <entry>@org.hibernate.annotations.CollectionOfElements or
-                  @OneToMany or @ManyToMany</entry>
-                </row>
-
-                <row>
-                  <entry>Map semantic</entry>
-
-                  <entry>java.util.Map</entry>
-
-                  <entry>(@org.hibernate.annotations.CollectionOfElements or
-                  @OneToMany or @ManyToMany) and (nothing or
-                  @org.hibernate.annotations.MapKey/MapKeyManyToMany for true
-                  map support, OR @javax.persistence.MapKey</entry>
-                </row>
-              </tbody>
-            </tgroup>
-          </table>
-
-          <remark>So specifically, java.util.List collections without
-          @org.hibernate.annotations.IndexColumn are going to be considered as
-          bags.</remark>
-
-          <para>Collection of primitive, core type or embedded objects is not
-          supported by the EJB3 specification. Hibernate Annotations allows
-          them however (see <xref linkend="entity-hibspec" />).</para>
-
-          <programlisting>@Entity public class City {
-    @OneToMany(mappedBy="city")
-    <emphasis role="bold">@OrderBy("streetName")</emphasis>
-    public List&lt;Street&gt; getStreets() {
-        return streets;
-    }
-...
-}
-
- at Entity public class Street {
-    <emphasis role="bold">public String getStreetName()</emphasis> {
-        return streetName;
-    }
-
-    @ManyToOne
-    public City getCity() {
-        return city;
-    }
-    ...
-}
-
-
- at Entity
-public class Software {
-    @OneToMany(mappedBy="software")
-    <emphasis role="bold">@MapKey(name="codeName")</emphasis>
-    public Map&lt;String, Version&gt; getVersions() {
-        return versions;
-    }
-...
-}
-
- at Entity
- at Table(name="tbl_version")
-public class Version {
-    <emphasis role="bold">public String getCodeName()</emphasis> {...}
-
-    @ManyToOne
-    public Software getSoftware() { ... }
-...
-}</programlisting>
-
-          <para>So <literal>City</literal> has a collection of
-          <literal>Street</literal>s that are ordered by
-          <literal>streetName</literal> (of <literal>Street</literal>) when
-          the collection is loaded. <literal>Software</literal> has a map of
-          <literal>Version</literal>s which key is the
-          <literal>Version</literal> <literal>codeName</literal>.</para>
-
-          <para>Unless the collection is a generic, you will have to define
-          <literal>targetEntity</literal>. This is a annotation attribute that
-          take the target entity class as a value.</para>
-        </sect4>
-
-        <sect4 id="entity-mapping-association-collection-onetomany"
-               revision="2">
-          <title>One-to-many</title>
-
-          <para>One-to-many associations are declared at the property level
-          with the annotation <literal>@OneToMany</literal>. One to many
-          associations may be bidirectional.</para>
-
-          <sect5>
-            <title>Bidirectional</title>
-
-            <para>Since many to one are (almost) always the owner side of a
-            bidirectional relationship in the EJB3 spec, the one to many
-            association is annotated by <literal>@OneToMany( mappedBy=...
-            )</literal></para>
-
-            <programlisting>@Entity
-public class Troop {
-    @OneToMany(mappedBy="troop")
-    public Set&lt;Soldier&gt; getSoldiers() {
-    ...
-}
-
- at Entity
-public class Soldier {
-    @ManyToOne
-    @JoinColumn(name="troop_fk")
-    public Troop getTroop() {
-    ...
-}              </programlisting>
-
-            <para><classname>Troop</classname> has a bidirectional one to many
-            relationship with <literal>Soldier</literal> through the
-            <literal>troop</literal> property. You don't have to (must not)
-            define any physical mapping in the <literal>mappedBy</literal>
-            side.</para>
-
-            <para>To map a bidirectional one to many, with the one-to-many
-            side as the owning side, you have to remove the
-            <literal>mappedBy</literal> element and set the many to one
-            <literal>@JoinColumn</literal> as insertable and updatable to
-            false. This solution is obviously not optimized and will produce
-            some additional UPDATE statements.</para>
-
-            <programlisting>@Entity
-public class Troop {
-    @OneToMany
-    @JoinColumn(name="troop_fk") //we need to duplicate the physical information
-    public Set&lt;Soldier&gt; getSoldiers() {
-    ...
-}
-
- at Entity
-public class Soldier {
-    @ManyToOne
-    @JoinColumn(name="troop_fk", insertable=false, updatable=false)
-    public Troop getTroop() {
-    ...
-}</programlisting>
-          </sect5>
-
-          <sect5>
-            <title>Unidirectional</title>
-
-            <para>A unidirectional one to many using a foreign key column in
-            the owned entity is not that common and not really recommended. We
-            strongly advise you to use a join table for this kind of
-            association (as explained in the next section). This kind of
-            association is described through a
-            <literal>@JoinColumn</literal></para>
-
-            <programlisting>
- at Entity
-public class Customer implements Serializable {
-    @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
-    @JoinColumn(name="CUST_ID")
-    public Set&lt;Ticket&gt; getTickets() {
-    ...
-}
-
- at Entity
-public class Ticket implements Serializable {
-    ... //no bidir
-}
-               </programlisting>
-
-            <para><literal>Customer</literal> describes a unidirectional
-            relationship with <literal>Ticket</literal> using the join column
-            <literal>CUST_ID</literal>.</para>
-          </sect5>
-
-          <sect5>
-            <title>Unidirectional with join table</title>
-
-            <para>A unidirectional one to many with join table is much
-            preferred. This association is described through an
-            <literal>@JoinTable</literal>.</para>
-
-            <programlisting>
- at Entity
-public class Trainer {
-    @OneToMany
-    @JoinTable(
-            name="TrainedMonkeys",
-            joinColumns = { @JoinColumn( name="trainer_id") },
-            inverseJoinColumns = @JoinColumn( name="monkey_id")
-    )
-    public Set&lt;Monkey&gt; getTrainedMonkeys() {
-    ...
-}
-
- at Entity
-public class Monkey {
-    ... //no bidir
-}
-               </programlisting>
-
-            <para><literal>Trainer</literal> describes a unidirectional
-            relationship with <classname>Monkey</classname> using the join
-            table <classname>TrainedMonkeys</classname>, with a foreign key
-            <literal>trainer_id</literal> to <literal>Trainer</literal>
-            (<literal>joinColumns</literal>) and a foreign key
-            <literal>monkey_id</literal> to <literal>Monkey</literal>
-            (<literal>inversejoinColumns</literal>).</para>
-          </sect5>
-
-          <sect5 id="entity-mapping-association-collection-manytomany-default"
-                 revision="1">
-            <title>Defaults</title>
-
-            <para>Without describing any physical mapping, a unidirectional
-            one to many with join table is used. The table name is the
-            concatenation of the owner table name, <keycap>_</keycap>, and the
-            other side table name. The foreign key name(s) referencing the
-            owner table is the concatenation of the owner table,
-            <keycap>_</keycap>, and the owner primary key column(s) name. The
-            foreign key name(s) referencing the other side is the
-            concatenation of the owner property name, <keycap>_</keycap>, and
-            the other side primary key column(s) name. A unique constraint is
-            added to the foreign key referencing the other side table to
-            reflect the one to many.</para>
-
-            <programlisting>
- at Entity
-public class Trainer {
-    @OneToMany
-    public Set&lt;Tiger&gt; getTrainedTigers() {
-    ...
-}
-
- at Entity
-public class Tiger {
-    ... //no bidir
-}
-               </programlisting>
-
-            <para><classname>Trainer</classname> describes a unidirectional
-            relationship with <classname>Tiger</classname> using the join
-            table <literal>Trainer_Tiger</literal>, with a foreign key
-            <literal>trainer_id</literal> to <literal>Trainer</literal> (table
-            name, <keycap>_</keycap>, trainer id) and a foreign key
-            <literal>trainedTigers_id</literal> to <literal>Monkey</literal>
-            (property name, <keycap>_</keycap>, Tiger primary column).</para>
-          </sect5>
-        </sect4>
-
-        <sect4 id="eentity-mapping-association-collection-manytomany"
-               revision="">
-          <title>Many-to-many</title>
-
-          <sect5>
-            <title>Definition</title>
-
-            <para>A many-to-many association is defined logically using the
-            <literal>@ManyToMany</literal> annotation. You also have to
-            describe the association table and the join conditions using the
-            <literal>@JoinTable</literal> annotation. If the association is
-            bidirectional, one side has to be the owner and one side has to be
-            the inverse end (ie. it will be ignored when updating the
-            relationship values in the association table):</para>
-
-            <programlisting>
- at Entity
-public class Employer implements Serializable {
-    @ManyToMany(
-        targetEntity=org.hibernate.test.metadata.manytomany.Employee.class,
-        cascade={CascadeType.PERSIST, CascadeType.MERGE}
-    )
-    @JoinTable(
-        name="EMPLOYER_EMPLOYEE",
-        joinColumns={@JoinColumn(name="EMPER_ID")},
-        inverseJoinColumns={@JoinColumn(name="EMPEE_ID")}
-    )
-    public Collection getEmployees() {
-        return employees;
-    }
-    ...
-}
-               </programlisting>
-
-            <programlisting>
- at Entity
-public class Employee implements Serializable {
-    @ManyToMany(
-        cascade={CascadeType.PERSIST, CascadeType.MERGE},
-        mappedBy="employees"
-        targetEntity=Employer.class
-    )
-    public Collection getEmployers() {
-        return employers;
-    }
-}
-               </programlisting>
-
-            <para>We've already shown the many declarations and the detailed
-            attributes for associations. We'll go deeper in the
-            <literal>@JoinTable</literal> description, it defines a
-            <literal>name</literal>, an array of join columns (an array in
-            annotation is defined using { A, B, C }), and an array of inverse
-            join columns. The latter ones are the columns of the association
-            table which refer to the <classname>Employee</classname> primary
-            key (the "other side").</para>
-
-            <para>As seen previously, the other side don't have to (must not)
-            describe the physical mapping: a simple
-            <literal>mappedBy</literal> argument containing the owner side
-            property name bind the two.</para>
-          </sect5>
-
-          <sect5>
-            <title>Default values</title>
-
-            <para>As any other annotations, most values are guessed in a many
-            to many relationship. Without describing any physical mapping in a
-            unidirectional many to many the following rules applied. The table
-            name is the concatenation of the owner table name,
-            <keycap>_</keycap> and the other side table name. The foreign key
-            name(s) referencing the owner table is the concatenation of the
-            owner table name, <keycap>_</keycap> and the owner primary key
-            column(s). The foreign key name(s) referencing the other side is
-            the concatenation of the owner property name, <keycap>_</keycap>,
-            and the other side primary key column(s). These are the same rules
-            used for a unidirectional one to many relationship.</para>
-
-            <programlisting>
- at Entity
-public class Store {
-    @ManyToMany(cascade = CascadeType.PERSIST)
-    public Set&lt;City&gt; getImplantedIn() {
-        ...
-    }
-}
-
- at Entity
-public class City {
-    ... //no bidirectional relationship
-}
-               </programlisting>
-
-            <para>A <literal>Store_City</literal> is used as the join table.
-            The <literal>Store_id</literal> column is a foreign key to the
-            <literal>Store</literal> table. The
-            <literal>implantedIn_id</literal> column is a foreign key to the
-            <literal>City</literal> table.</para>
-
-            <para>Without describing any physical mapping in a bidirectional
-            many to many the following rules applied. The table name is the
-            concatenation of the owner table name, <keycap>_</keycap> and the
-            other side table name. The foreign key name(s) referencing the
-            owner table is the concatenation of the other side property name,
-            <keycap>_</keycap>, and the owner primary key column(s). The
-            foreign key name(s) referencing the other side is the
-            concatenation of the owner property name, <keycap>_</keycap>, and
-            the other side primary key column(s). These are the same rules
-            used for a unidirectional one to many relationship.</para>
-
-            <programlisting>
- at Entity
-public class Store {
-    @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
-    public Set&lt;Customer&gt; getCustomers() {
-        ...
-    }
-}
-
- at Entity
-public class Customer {
-    @ManyToMany(mappedBy="customers")
-    public Set&lt;Store&gt; getStores() {
-        ...
-    }
-}
-               </programlisting>
-
-            <para>A <literal>Store_Customer</literal> is used as the join
-            table. The <literal>stores_id</literal> column is a foreign key to
-            the <literal>Store</literal> table. The
-            <literal>customers_id</literal> column is a foreign key to the
-            <literal>Customer</literal> table.</para>
-          </sect5>
-        </sect4>
-      </sect3>
-
-      <sect3>
-        <title>Transitive persistence with cascading</title>
-
-        <para>You probably have noticed the <literal>cascade</literal>
-        attribute taking an array of <classname>CascadeType</classname> as a
-        value. The cascade concept in EJB3 is very is similar to the
-        transitive persistence and cascading of operations in Hibernate, but
-        with slightly different semantics and cascading types:</para>
-
-        <itemizedlist>
-          <listitem>
-             CascadeType.PERSIST: cascades the persist (create) operation to associated entities persist() is called or if the entity is managed 
-          </listitem>
-
-          <listitem>
-             CascadeType.MERGE: cascades the merge operation to associated entities if merge() is called or if the entity is managed 
-          </listitem>
-
-          <listitem>
-             CascadeType.REMOVE: cascades the remove operation to associated entities if delete() is called 
-          </listitem>
-
-          <listitem>
-             CascadeType.REFRESH: cascades the refresh operation to associated entities if refresh() is called 
-          </listitem>
-
-          <listitem>
-             CascadeType.ALL: all of the above 
-          </listitem>
-        </itemizedlist>
-
-        <para>Please refer to the chapter 6.3 of the EJB3 specification for
-        more information on cascading and create/merge semantics.</para>
-      </sect3>
-
-      <sect3 id="entity-mapping-association-fetching" revision="1">
-        <title>Association fetching</title>
-
-        <para>You have the ability to either eagerly or lazily fetch
-        associated entities. The <literal>fetch</literal> parameter can be set
-        to <literal>FetchType.LAZY</literal> or
-        <literal>FetchType.EAGER</literal>. <literal>EAGER</literal> will try
-        to use an outer join select to retrieve the associated object, while
-        <literal>LAZY</literal> will only trigger a select when the associated
-        object is accessed for the first time. <literal>@OneToMany</literal>
-        and <literal>@ManyToMany</literal> associations are defaulted to
-        <literal>LAZY</literal> and <literal>@OneToOne</literal> and
-        <literal>@ManyToOne</literal> are defaulted to
-        <literal>EAGER</literal>. For more information about static fetching,
-        check <xref linkend="entity-hibspec-singleassoc-fetching" />.</para>
-
-        <para>The recommanded approach is to use <literal>LAZY</literal> onn
-        all static fetching definitions and override this choice dynamically
-        through JPA-QL. JPA-QL has a <literal>fetch</literal> keyword that
-        allows you to override laziness when doing a particular query. This is
-        very useful to improve performance and is decided on a use case to use
-        case basis.</para>
-      </sect3>
-    </sect2>
-
-    <sect2>
-      <title>Mapping composite primary and foreign keys</title>
-
-      <para>Composite primary keys use a embedded class as the primary key
-      representation, so you'd use the <literal>@Id</literal> and
-      <literal>@Embeddable</literal> annotations. Alternatively, you can use
-      the <literal>@EmbeddedId</literal> annotation. Note that the dependent
-      class has to be serializable and implements
-      <methodname>equals()</methodname>/<methodname>hashCode()</methodname>.
-      You can also use <literal>@IdClass</literal> as described in <xref
-      linkend="entity-mapping-identifier" />.</para>
-
-      <programlisting>
- at Entity
-public class RegionalArticle implements Serializable {
-
-    @Id
-    public RegionalArticlePk getPk() { ... }
-}
-
- at Embeddable
-public class RegionalArticlePk implements Serializable { ... }
-         </programlisting>
-
-      <para>or alternatively</para>
-
-      <programlisting>
- at Entity
-public class RegionalArticle implements Serializable {
-
-    @EmbeddedId
-    public RegionalArticlePk getPk() { ... }
-}
-
-public class RegionalArticlePk implements Serializable { ... }
-         </programlisting>
-
-      <para><literal>@Embeddable</literal> inherit the access type of its
-      owning entity unless the Hibernate specific annotation
-      <literal>@AccessType</literal> is used. Composite foreign keys (if not
-      using the default sensitive values) are defined on associations using
-      the <literal>@JoinColumns</literal> element, which is basically an array
-      of <literal>@JoinColumn</literal>. It is considered a good practice to
-      express <literal>referencedColumnNames</literal> explicitly. Otherwise,
-      Hibernate will suppose that you use the same order of columns as in the
-      primary key declaration.</para>
-
-      <programlisting>
- at Entity
-public class Parent implements Serializable {
-    @Id
-    public ParentPk id;
-    public int age;
-
-    @OneToMany(cascade=CascadeType.ALL)
-    @JoinColumns ({
-        @JoinColumn(name="parentCivility", referencedColumnName = "isMale"),
-        @JoinColumn(name="parentLastName", referencedColumnName = "lastName"),
-        @JoinColumn(name="parentFirstName", referencedColumnName = "firstName")
-    })
-    public Set&lt;Child&gt; children; //unidirectional
-    ...
-}
-         </programlisting>
-
-      <programlisting>
- at Entity
-public class Child implements Serializable {
-    @Id @GeneratedValue
-    public Integer id;
-
-    @ManyToOne
-    @JoinColumns ({
-        @JoinColumn(name="parentCivility", referencedColumnName = "isMale"),
-        @JoinColumn(name="parentLastName", referencedColumnName = "lastName"),
-        @JoinColumn(name="parentFirstName", referencedColumnName = "firstName")
-    })
-    public Parent parent; //unidirectional
-}
-         </programlisting>
-
-      <programlisting>
- at Embeddable
-public class ParentPk implements Serializable {
-    String firstName;
-    String lastName;
-    ...
-}
-         </programlisting>
-
-      <para>Note the explicit usage of the
-      <literal>referencedColumnName</literal>.</para>
-    </sect2>
-
-    <sect2>
-      <title>Mapping secondary tables</title>
-
-      <para>You can map a single entity bean to several tables using the
-      <literal>@SecondaryTable</literal> or
-      <literal>@SecondaryTables</literal> class level annotations. To express
-      that a column is in a particular table, use the <literal>table</literal>
-      parameter of <literal>@Column</literal> or
-      <literal>@JoinColumn</literal>.</para>
-
-      <programlisting>
- at Entity
- at Table(name="MainCat")
-<emphasis role="bold">@SecondaryTables({
-    @SecondaryTable(name="Cat1", pkJoinColumns={
-        @PrimaryKeyJoinColumn(name="cat_id", referencedColumnName="id")
-    ),
-    @SecondaryTable(name="Cat2", uniqueConstraints={@UniqueConstraint(columnNames={"storyPart2"})})
-})</emphasis>
-public class Cat implements Serializable {
-
-    private Integer id;
-    private String name;
-    private String storyPart1;
-    private String storyPart2;
-
-    @Id @GeneratedValue
-    public Integer getId() {
-        return id;
-    }
-
-    public String getName() {
-        return name;
-    }
-    
-    <emphasis role="bold">@Column(table="Cat1")</emphasis>
-    public String getStoryPart1() {
-        return storyPart1;
-    }
-
-    <emphasis role="bold">@Column(table="Cat2")</emphasis>
-    public String getStoryPart2() {
-        return storyPart2;
-    }
-</programlisting>
-
-      <para>In this example, <literal>name</literal> will be in
-      <literal>MainCat</literal>. <literal>storyPart1</literal> will be in
-      <literal>Cat1</literal> and <literal>storyPart2</literal> will be in
-      <literal>Cat2</literal>. <literal>Cat1</literal> will be joined to
-      <literal>MainCat</literal> using the <literal>cat_id</literal> as a
-      foreign key, and <literal>Cat2</literal> using <literal>id</literal> (ie
-      the same column name, the <literal>MainCat</literal> id column has).
-      Plus a unique constraint on <literal>storyPart2</literal> has been
-      set.</para>
-
-      <para>Check out the JBoss EJB 3 tutorial or the Hibernate Annotations
-      unit test suite for more examples.</para>
-    </sect2>
-  </sect1>
-
-  <sect1 id="entity-mapping-query">
-    <title>Mapping Queries</title>
-
-    <sect2 id="entity-mapping-query-hql" label="Mapping JPAQL/HQL queries"
-           revision="1">
-      <title>Mapping JPAQL/HQL queries</title>
-
-      <para>You can map EJBQL/HQL queries using annotations.
-      <literal>@NamedQuery</literal> and <literal>@NamedQueries</literal> can
-      be defined at the class level or in a JPA XML file. However their
-      definitions are global to the session factory/entity manager factory
-      scope. A named query is defined by its name and the actual query
-      string.</para>
-
-      <programlisting>&lt;entity-mappings&gt;
-    &lt;named-query name="plane.getAll"&gt;
-        &lt;query&gt;select p from Plane p&lt;/query&gt;
-    &lt;/named-query&gt;
-    ...
-&lt;/entity-mappings&gt;
-...
-
- at Entity
- at NamedQuery(name="night.moreRecentThan", query="select n from Night n where n.date &gt;= :date")
-public class Night {
-    ...
-}
-
-public class MyDao {
-    doStuff() {
-        Query q = s.getNamedQuery("night.moreRecentThan");
-        q.setDate( "date", aMonthAgo );
-        List results = q.list();
-        ...
-    }
-    ...
-}
-        </programlisting>
-
-      <para>You can also provide some hints to a query through an array of
-      <literal>QueryHint</literal> through a <literal>hints</literal>
-      attribute.</para>
-
-      <para>The availabe Hibernate hints are</para>
-
-      <para></para>
-
-      <table>
-        <title>Query hints</title>
-
-        <tgroup cols="2">
-          <thead>
-            <colspec colname="c1" />
-
-            <colspec colname="c2" colnum="2" />
-
-            <row>
-              <entry>hint</entry>
-
-              <entry colname="c2">description</entry>
-            </row>
-          </thead>
-
-          <tbody>
-            <row>
-              <entry>org.hibernate.cacheable</entry>
-
-              <entry>Whether the query should interact with the second level
-              cache (defualt to false)</entry>
-            </row>
-
-            <row>
-              <entry>org.hibernate.cacheRegion</entry>
-
-              <entry>Cache region name (default used otherwise)</entry>
-            </row>
-
-            <row>
-              <entry>org.hibernate.timeout</entry>
-
-              <entry>Query timeout</entry>
-            </row>
-
-            <row>
-              <entry>org.hibernate.fetchSize</entry>
-
-              <entry>resultset fetch size</entry>
-            </row>
-
-            <row>
-              <entry>org.hibernate.flushMode</entry>
-
-              <entry>Flush mode used for this query</entry>
-            </row>
-
-            <row>
-              <entry>org.hibernate.cacheMode</entry>
-
-              <entry>Cache mode used for this query</entry>
-            </row>
-
-            <row>
-              <entry>org.hibernate.readOnly</entry>
-
-              <entry>Entities loaded by this query should be in read only mode
-              or not (default to false)</entry>
-            </row>
-
-            <row>
-              <entry>org.hibernate.comment</entry>
-
-              <entry>Query comment added to the generated SQL</entry>
-            </row>
-          </tbody>
-        </tgroup>
-      </table>
-    </sect2>
-
-    <sect2 id="entity-mapping-query-native" revision="2">
-      <title>Mapping native queries</title>
-
-      <para>You can also map a native query (ie a plain SQL query). To achieve
-      that, you need to describe the SQL resultset structure using
-      <literal>@SqlResultSetMapping</literal> (or
-      <literal>@SqlResultSetMappings</literal> if you plan to define several
-      resulset mappings). Like <literal>@NamedQuery</literal>, a
-      <literal>@SqlResultSetMapping</literal> can be defined at class level or
-      in a JPA XML file. However its scope is global to the
-      application.</para>
-
-      <para>As we will see, a <literal>resultSetMapping</literal> parameter is
-      defined in <literal>@NamedNativeQuery</literal>, it represents the name
-      of a defined <literal>@SqlResultSetMapping</literal>. The resultset
-      mapping declares the entities retrieved by this native query. Each field
-      of the entity is bound to an SQL alias (or column name). All fields of
-      the entity including the ones of subclasses and the foreign key columns
-      of related entities have to be present in the SQL query. Field
-      definitions are optional provided that they map to the same column name
-      as the one declared on the class property.</para>
-
-      <para><programlisting>@NamedNativeQuery(name="night&amp;area", query="select night.id nid, night.night_duration, "
-    + " night.night_date, area.id aid, night.area_id, area.name "
-    + "from Night night, Area area where night.area_id = area.id", <emphasis
-            role="bold">resultSetMapping="joinMapping"</emphasis>)
- at SqlResultSetMapping(name="joinMapping", entities={
-    @EntityResult(entityClass=org.hibernate.test.annotations.query.Night.class, fields = {
-        @FieldResult(name="id", column="nid"),
-        @FieldResult(name="duration", column="night_duration"),
-        @FieldResult(name="date", column="night_date"),
-        @FieldResult(name="area", column="area_id"),
-        discriminatorColumn="disc"
-    }),
-    @EntityResult(entityClass=org.hibernate.test.annotations.query.Area.class, fields = {
-        @FieldResult(name="id", column="aid"),
-        @FieldResult(name="name", column="name")
-    })
-    }
-)</programlisting></para>
-
-      <para>In the above example, the <literal>night&amp;area</literal> named
-      query use the <literal>joinMapping</literal> result set mapping. This
-      mapping returns 2 entities, <literal>Night</literal> and
-      <literal>Area</literal>, each property is declared and associated to a
-      column name, actually the column name retrieved by the query. Let's now
-      see an implicit declaration of the property / column.</para>
-
-      <programlisting>@Entity
-<emphasis role="bold">@SqlResultSetMapping(name="implicit", entities=@EntityResult(entityClass=org.hibernate.test.annotations.query.SpaceShip.class))
- at NamedNativeQuery(name="implicitSample", query="select * from SpaceShip", resultSetMapping="implicit")</emphasis>
-public class SpaceShip {
-    private String name;
-    private String model;
-    private double speed;
-
-    @Id
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    @Column(name="model_txt")
-    public String getModel() {
-        return model;
-    }
-
-    public void setModel(String model) {
-        this.model = model;
-    }
-
-    public double getSpeed() {
-        return speed;
-    }
-
-    public void setSpeed(double speed) {
-        this.speed = speed;
-    }
-}</programlisting>
-
-      <para>In this example, we only describe the entity member of the result
-      set mapping. The property / column mappings is done using the entity
-      mapping values. In this case the <literal>model</literal> property is
-      bound to the <literal>model_txt </literal>column. If the association to
-      a related entity involve a composite primary key, a
-      <literal>@FieldResult</literal> element should be used for each foreign
-      key column. The <literal>@FieldResult</literal> name is composed of the
-      property name for the relationship, followed by a dot ("."), followed by
-      the name or the field or property of the primary key.</para>
-
-      <programlisting>@Entity
- at SqlResultSetMapping(name="compositekey",
-        entities=@EntityResult(entityClass=org.hibernate.test.annotations.query.SpaceShip.class,
-            fields = {
-                    @FieldResult(name="name", column = "name"),
-                    @FieldResult(name="model", column = "model"),
-                    @FieldResult(name="speed", column = "speed"),
-<emphasis role="bold">                    @FieldResult(name="captain.firstname", column = "firstn"),
-                    @FieldResult(name="captain.lastname", column = "lastn"),</emphasis>
-                    @FieldResult(name="dimensions.length", column = "length"),
-                    @FieldResult(name="dimensions.width", column = "width")
-                    }),
-        columns = { @ColumnResult(name = "surface"),
-                    @ColumnResult(name = "volume") } )
-
- at NamedNativeQuery(name="compositekey",
-    query="select name, model, speed, lname as lastn, fname as firstn, length, width, length * width as surface from SpaceShip", 
-    resultSetMapping="compositekey")
-} )
-public class SpaceShip {
-    private String name;
-    private String model;
-    private double speed;
-    private Captain captain;
-    private Dimensions dimensions;
-
-    @Id
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    @ManyToOne(fetch= FetchType.LAZY)
-    @JoinColumns( {
-            @JoinColumn(name="fname", referencedColumnName = "firstname"),
-            @JoinColumn(name="lname", referencedColumnName = "lastname")
-            } )
-    public Captain getCaptain() {
-        return captain;
-    }
-
-    public void setCaptain(Captain captain) {
-        this.captain = captain;
-    }
-
-    public String getModel() {
-        return model;
-    }
-
-    public void setModel(String model) {
-        this.model = model;
-    }
-
-    public double getSpeed() {
-        return speed;
-    }
-
-    public void setSpeed(double speed) {
-        this.speed = speed;
-    }
-
-    public Dimensions getDimensions() {
-        return dimensions;
-    }
-
-    public void setDimensions(Dimensions dimensions) {
-        this.dimensions = dimensions;
-    }
-}
-
- at Entity
- at IdClass(Identity.class)
-public class Captain implements Serializable {
-    private String firstname;
-    private String lastname;
-
-    @Id
-    public String getFirstname() {
-        return firstname;
-    }
-
-    public void setFirstname(String firstname) {
-        this.firstname = firstname;
-    }
-
-    @Id
-    public String getLastname() {
-        return lastname;
-    }
-
-    public void setLastname(String lastname) {
-        this.lastname = lastname;
-    }
-}
-</programlisting>
-
-      <note>
-        <para>If you look at the dimension property, you'll see that Hibernate
-        supports the dotted notation for embedded objects (you can even have
-        nested embedded objects). EJB3 implementations do not have to support
-        this feature, we do :-)</para>
-      </note>
-
-      <para>If you retrieve a single entity and if you use the default
-      mapping, you can use the <literal>resultClass</literal> attribute
-      instead of <literal>resultSetMapping</literal>:</para>
-
-      <programlisting><emphasis role="bold">@NamedNativeQuery(name="implicitSample", query="select * from SpaceShip", 
-    resultClass=SpaceShip.class)</emphasis>
-public class SpaceShip {</programlisting>
-
-      <para>In some of your native queries, you'll have to return scalar
-      values, for example when building report queries. You can map them in
-      the <literal>@SqlResultsetMapping</literal> through
-      <literal>@ColumnResult</literal>. You actually can even mix, entities
-      and scalar returns in the same native query (this is probably not that
-      common though).</para>
-
-      <programlisting><emphasis role="bold">@SqlResultSetMapping(name="scalar", columns=@ColumnResult(name="dimension"))
- at NamedNativeQuery(name="scalar", query="select length*width as dimension from SpaceShip", resultSetMapping="scalar")</emphasis></programlisting>
-
-      <para>An other query hint specific to native queries has been
-      introduced: <literal>org.hibernate.callable</literal> which can be true
-      or false depending on whether the query is a stored procedure or
-      not.</para>
-    </sect2>
-  </sect1>
-
-  <sect1 id="entity-hibspec" xreflabel="Hibernate Annotation Extensions">
-    <title>Hibernate Annotation Extensions</title>
-
-    <para>Hibernate 3.1 offers a variety of additional annotations that you
-    can mix/match with your EJB 3 entities. They have been designed as a
-    natural extension of EJB3 annotations.</para>
-
-    <para>To empower the EJB3 capabilities, hibernate provides specific
-    annotations that match hibernate features. The
-    <classname>org.hibernate.annotations</classname> package contains all
-    these annotations extensions.</para>
-
-    <sect2 id="entity-hibspec-entity" revision="3">
-      <title>Entity</title>
-
-      <para>You can fine tune some of the actions done by Hibernate on
-      entities beyond what the EJB3 spec offers.</para>
-
-      <para><classname>@org.hibernate.annotations.Entity</classname> adds
-      additional metadata that may be needed beyond what is defined in the
-      standard <literal>@Entity</literal> <itemizedlist>
-          <listitem>
-             mutable: whether this entity is mutable or not 
-          </listitem>
-
-          <listitem>
-             dynamicInsert: allow dynamic SQL for inserts 
-          </listitem>
-
-          <listitem>
-             dynamicUpdate: allow dynamic SQL for updates 
-          </listitem>
-
-          <listitem>
-             selectBeforeUpdate: Specifies that Hibernate should never perform an SQL UPDATE unless it is certain that an object is actually modified. 
-          </listitem>
-
-          <listitem>
-             polymorphism: whether the entity polymorphism is of PolymorphismType.IMPLICIT (default) or PolymorphismType.EXPLICIT 
-          </listitem>
-
-          <listitem>
-             optimisticLock: optimistic locking strategy (OptimisticLockType.VERSION, OptimisticLockType.NONE, OptimisticLockType.DIRTY or OptimisticLockType.ALL) 
-          </listitem>
-        </itemizedlist></para>
-
-      <para><note>
-          <para>@javax.persistence.Entity is still mandatory,
-          @org.hibernate.annotations.Entity is not a replacement.</para>
-        </note></para>
-
-      <para>Here are some additional Hibernate annotation extensions</para>
-
-      <para><literal>@org.hibernate.annotations.BatchSize</literal> allows you
-      to define the batch size when fetching instances of this entity ( eg.
-      <literal>@BatchSize(size=4)</literal> ). When loading a given entity,
-      Hibernate will then load all the uninitialized entities of the same type
-      in the persistence context up to the batch size.</para>
-
-      <para><literal>@org.hibernate.annotations.Proxy</literal> defines the
-      laziness attributes of the entity. lazy (default to true) define whether
-      the class is lazy or not. proxyClassName is the interface used to
-      generate the proxy (default is the class itself).</para>
-
-      <para><literal>@org.hibernate.annotations.Where</literal> defines an
-      optional SQL WHERE clause used when instances of this class is
-      retrieved.</para>
-
-      <para><literal>@org.hibernate.annotations.Check</literal> defines an
-      optional check constraints defined in the DDL statetement.</para>
-
-      <para><literal>@OnDelete(action=OnDeleteAction.CASCADE)</literal> on
-      joined subclasses: use a SQL cascade delete on deletion instead of the
-      regular Hibernate mechanism.</para>
-
-      <para><literal>@Table(appliesTo="tableName", indexes = {
-      @Index(name="index1", columnNames={"column1", "column2"} ) } )</literal>
-      creates the defined indexes on the columns of table
-      <literal>tableName</literal>. This can be applied on the primary table
-      or any secondary table. The <literal>@Tables</literal> annotation allows
-      your to apply indexes on different tables. This annotation is expected
-      where <literal>@javax.persistence.Table</literal> or
-      <literal>@javax.persistence.SecondaryTable</literal>(s) occurs.</para>
-
-      <note>
-        <para><literal>@org.hibernate.annotations.Table</literal> is a
-        complement, not a replacement to
-        <literal>@javax.persistence.Table</literal>. Especially, if you want
-        to change the default name of a table, you must use
-        <literal>@javax.persistence.Table</literal>, not
-        <literal>@org.hibernate.annotations.Table</literal>.</para>
-      </note>
-
-      <para><literal>@org.hibernate.annotations.Table</literal> can also be
-      used to define the following elements of secondary tables:</para>
-
-      <itemizedlist>
-        <listitem>
-          <para><literal>fetch</literal>: If set to JOIN, the default,
-          Hibernate will use an inner join to retrieve a secondary table
-          defined by a class or its superclasses and an outer join for a
-          secondary table defined by a subclass. If set to select then
-          Hibernate will use a sequential select for a secondary table defined
-          on a subclass, which will be issued only if a row turns out to
-          represent an instance of the subclass. Inner joins will still be
-          used to retrieve a secondary defined by the class and its
-          superclasses.</para>
-        </listitem>
-
-        <listitem>
-          <para><literal>inverse</literal>: If true, Hibernate will not try to
-          insert or update the properties defined by this join. Default to
-          false.</para>
-        </listitem>
-
-        <listitem>
-          <para><literal>optional</literal>: If enabled (the default),
-          Hibernate will insert a row only if the properties defined by this
-          join are non-null and will always use an outer join to retrieve the
-          properties.</para>
-        </listitem>
-
-        <listitem>
-          <para><literal>foreignKey</literal>: defines the Foreign Key name of
-          a secondary table pointing back to the primary table.</para>
-        </listitem>
-      </itemizedlist>
-
-      <para><literal>@Immutable</literal> marks an entity as immutable. The
-      entity may not be updated or deleted by the application. This allows
-      Hibernate to make some minor performance optimizations.</para>
-
-      <para><literal>@Persister</literal> lets you define your own custom
-      persistence strategy. You may, for example, specify your own subclass of
-      <classname>org.hibernate.persister.EntityPersister</classname> or you
-      might even provide a completely new implementation of the interface
-      <literal>org.hibernate.persister.ClassPersister</literal> that
-      implements persistence via, for example, stored procedure calls,
-      serialization to flat files or LDAP.</para>
-
-      <para><programlisting>@Entity
- at BatchSize(size=5)
- at org.hibernate.annotations.Entity(
-        selectBeforeUpdate = true,
-        dynamicInsert = true, dynamicUpdate = true,
-        optimisticLock = OptimisticLockType.ALL,
-        polymorphism = PolymorphismType.EXPLICIT)
- at Where(clause="1=1")
- at org.hibernate.annotations.Table(name="Forest", indexes = { @Index(name="idx", columnNames = { "name", "length" } ) } )
- at Persister(impl=MyEntityPersister.class)
-public class Forest { ... }</programlisting><programlisting>@Entity
- at Inheritance(
-    strategy=InheritanceType.JOINED
-)
-public class Vegetable { ... }
-
- at Entity
- at OnDelete(action=OnDeleteAction.CASCADE)
-public class Carrot extends Vegetable { ... }</programlisting></para>
-    </sect2>
-
-    <sect2 id="entity-hibspec-identifier" label="Identifier" revision="1">
-      <title>Identifier</title>
-
-      <para><literal><literal>@org.hibernate.annotations.GenericGenerator</literal>
-      allows you to define an Hibernate specific id
-      generator.</literal></para>
-
-      <para><programlisting>@Id @GeneratedValue(generator="system-uuid")
- at GenericGenerator(name="system-uuid", strategy = "uuid")
-public String getId() {
-
- at Id @GeneratedValue(generator="hibseq")
- at GenericGenerator(name="hibseq", strategy = "seqhilo",
-    parameters = {
-        @Parameter(name="max_lo", value = "5"),
-        @Parameter(name="sequence", value="heybabyhey")
-    }
-)
-public Integer getId() {</programlisting></para>
-
-      <para><literal>strategy</literal> is the short name of an Hibernate3
-      generator strategy or the fully qualified class name of an
-      <classname>IdentifierGenerator</classname> implementation. You can add
-      some parameters through the <literal>parameters</literal>
-      attribute.</para>
-
-      <para>Contrary to its standard counterpart,
-      <literal>@GenericGenerator</literal> can be used in package level
-      annotations, making it an application level generator (just like if it
-      were in a JPA XML file).</para>
-
-      <programlisting>@GenericGenerator(name="hibseq", strategy = "seqhilo",
-    parameters = {
-        @Parameter(name="max_lo", value = "5"),
-        @Parameter(name="sequence", value="heybabyhey")
-    }
-)
-package org.hibernate.test.model</programlisting>
-    </sect2>
-
-    <sect2 id="entity-hibspec-property" revision="2">
-      <title>Property</title>
-
-      <sect3>
-        <title>Access type</title>
-
-        <para>The access type is guessed from the position of
-        <literal>@Id</literal> or <literal>@EmbeddedId</literal> in the entity
-        hierarchy. Sub-entities, embedded objects and mapped superclass
-        inherit the access type from the root entity.</para>
-
-        <para>In Hibernate, you can override the access type to:</para>
-
-        <itemizedlist>
-          <listitem>
-            <para>use a custom access type strategy</para>
-          </listitem>
-
-          <listitem>
-            <para>fine tune the access type at the class level or at the
-            property level</para>
-          </listitem>
-        </itemizedlist>
-
-        <para>An @AccessType annotation has been introduced to support this
-        behavior. You can define the access type on</para>
-
-        <itemizedlist>
-          <listitem>
-            <para>an entity</para>
-          </listitem>
-
-          <listitem>
-            <para>a superclass</para>
-          </listitem>
-
-          <listitem>
-            <para>an embeddable object</para>
-          </listitem>
-
-          <listitem>
-            <para>a property</para>
-          </listitem>
-        </itemizedlist>
-
-        <para>The access type is overriden for the annotated element, if
-        overriden on a class, all the properties of the given class inherit
-        the access type. For root entities, the access type is considered to
-        be the default one for the whole hierarchy (overridable at class or
-        property level).</para>
-
-        <para>If the access type is marked as "property", the getters are
-        scanned for annotations, if the access type is marked as "field", the
-        fields are scanned for annotations. Otherwise the elements marked with
-        @Id or @embeddedId are scanned.</para>
-
-        <para>You can override an access type for a property, but the element
-        to annotate will not be influenced: for example an entity having
-        access type <literal>field</literal>, can annotate a field with
-        <literal>@AccessType("property")</literal>, the access type will then
-        be property for this attribute, the the annotations still have to be
-        carried on the field.</para>
-
-        <para>If a superclass or an embeddable object is not annotated, the
-        root entity access type is used (even if an access type has been
-        define on an intermediate superclass or embeddable object). The
-        russian doll principle does not apply.</para>
-
-        <programlisting>@Entity
-public class Person implements Serializable {
-    @Id  @GeneratedValue //access type field
-    Integer id;
-
-    @Embedded
-    @AttributeOverrides({
-    @AttributeOverride(name = "iso2", column = @Column(name = "bornIso2")),
-    @AttributeOverride(name = "name", column = @Column(name = "bornCountryName"))
-            })
-    Country bornIn;
-}
-
- at Embeddable
-<emphasis role="bold">@AccessType("property")</emphasis> //override access type for all properties in Country
-public class Country implements Serializable {
-    private String iso2;
-    private String name;
-
-    public String getIso2() {
-        return iso2;
-    }
-
-    public void setIso2(String iso2) {
-        this.iso2 = iso2;
-    }
-
-    @Column(name = "countryName")
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-}
-</programlisting>
-      </sect3>
-
-      <sect3>
-        <title>Formula</title>
-
-        <para>Sometimes, you want the Database to do some computation for you
-        rather than in the JVM, you might also create some kind of virtual
-        column. You can use a SQL fragment (aka formula) instead of mapping a
-        property into a column. This kind of property is read only (its value
-        is calculated by your formula fragment).</para>
-
-        <programlisting>@Formula("obj_length * obj_height * obj_width")
-public long getObjectVolume()</programlisting>
-
-        <para>The SQL fragment can be as complex as you want avec even include
-        subselects.</para>
-      </sect3>
-
-      <sect3>
-        <title>Type</title>
-
-        <para><literal>@org.hibernate.annotations.Type</literal> overrides the
-        default hibernate type used: this is generally not necessary since the
-        type is correctly inferred by Hibernate. Please refer to the Hibernate
-        reference guide for more informations on the Hibernate types.</para>
-
-        <para><literal>@org.hibernate.annotations.TypeDef</literal> and
-        <literal>@org.hibernate.annotations.TypeDefs</literal> allows you to
-        declare type definitions. These annotations are placed at the class or
-        package level. Note that these definitions will be global for the
-        session factory (even at the class level) and that type definition has
-        to be defined before any usage.</para>
-
-        <programlisting>@TypeDefs(
-    {
-    @TypeDef(
-        name="caster",
-        typeClass = CasterStringType.class,
-        parameters = {
-            @Parameter(name="cast", value="lower")
-        }
-    )
-    }
-)
-package org.hibernate.test.annotations.entity;
-
-...
-public class Forest {
-    @Type(type="caster")
-    public String getSmallText() {
-    ...
-}
-         </programlisting>
-
-        <para>When using composite user type, you will have to express column
-        definitions. The <literal>@Columns</literal> has been introduced for
-        that purpose.</para>
-
-        <programlisting>@Type(type="org.hibernate.test.annotations.entity.MonetaryAmountUserType")
- at Columns(columns = {
-    @Column(name="r_amount"),
-    @Column(name="r_currency")
-})
-public MonetaryAmount getAmount() {
-    return amount;
-}
-
-
-public class MonetaryAmount implements Serializable {
-    private BigDecimal amount;
-    private Currency currency;
-    ...
-}</programlisting>
-      </sect3>
-
-      <sect3>
-        <title>Index</title>
-
-        <para>You can define an index on a particular column using the
-        <literal>@Index</literal> annotation on a one column property, the
-        columnNames attribute will then be ignored</para>
-
-        <programlisting>@Column(secondaryTable="Cat1")
- at Index(name="story1index")
-public String getStoryPart1() {
-    return storyPart1;
-}</programlisting>
-      </sect3>
-
-      <sect3>
-        <title>@Parent</title>
-
-        <para>When inside an embeddable object, you can define one of the
-        properties as a pointer back to the owner element.</para>
-
-        <programlisting>@Entity
-public class Person {
-    @Embeddable public Address address;
-    ...
-}
-
- at Embeddable
-public class Address {
-    @Parent public Person owner;
-    ...
-}
-
-
-person == person.address.owner</programlisting>
-      </sect3>
-
-      <sect3>
-        <title>Generated properties</title>
-
-        <para>Some properties are generated at insert or update time by your
-        database. Hibernate can deal with such properties and triggers a
-        subsequent select to read these properties.</para>
-
-        <programlisting>@Entity
-public class Antenna {
-    @Id public Integer id;
-    @Generated(GenerationTime.ALWAYS) @Column(insertable = false, updatable = false)
-    public String longitude;
-
-    @Generated(GenerationTime.INSERT) @Column(insertable = false)
-    public String latitude;
-}</programlisting>
-
-        <para>Annotate your property as <literal>@Generated</literal> You have
-        to make sure your insertability or updatability does not conflict with
-        the generation strategy you have chosen. When GenerationTime.INSERT is
-        chosen, the property must not contains insertable columns, when
-        GenerationTime.ALWAYS is chosen, the property must not contains
-        insertable nor updatable columns.</para>
-
-        <para><literal>@Version</literal> properties cannot be
-        <literal>@Generated(INSERT)</literal> by design, it has to be either
-        <literal>NEVER</literal> or <literal>ALWAYS</literal>.</para>
-      </sect3>
-
-      <sect3>
-        <title>@Target</title>
-
-        <para>Sometimes, the type guessed by reflection is not the one you
-        want Hibernate to use. This is especially true on components when an
-        interface is used. You can use <literal>@Target</literal> to by pass
-        the reflection guessing mechanism (very much like the
-        <literal>targetEntity</literal> attribute available on
-        associations.</para>
-
-        <programlisting>    @Embedded
-    <emphasis role="bold">@Target(OwnerImpl.class)</emphasis>
-    public Owner getOwner() {
-        return owner;
-    }</programlisting>
-
-        <para></para>
-      </sect3>
-
-      <sect3>
-        <title>Optimistic lock</title>
-
-        <para>It is sometimes useful to avoid increasing the version number
-        even if a given property is dirty (particularly collections). You can
-        do that by annotating the property (or collection) with
-        <literal>@OptimisticLock(excluded=true)</literal>.</para>
-
-        <para>More formally, specifies that updates to this property do not
-        require acquisition of the optimistic lock.</para>
-      </sect3>
-    </sect2>
-
-    <sect2 id="entity-hibspec-inheritance" revision="3">
-      <title>Inheritance</title>
-
-      <para>SINGLE_TABLE is a very powerful strategy but sometimes, and
-      especially for legacy systems, you cannot add an additional
-      discriminator column. For that purpose Hibernate has introduced the
-      notion of discriminator formula:
-      <literal>@DiscriminatorFormula</literal> is a replacement of
-      <literal>@DiscriminatorColumn</literal> and use a SQL fragment as a
-      formula for discriminator resolution (no need to have a dedicated
-      column).</para>
-
-      <programlisting>@Entity
-<emphasis role="bold">@DiscriminatorFormula("case when forest_type is null then 0 else forest_type end")</emphasis>
-public class Forest { ... }</programlisting>
-
-      <para>By default, when querying the top entities, Hibernate does not put
-      a restriction clause on the discriminator column. This can be
-      inconvenient if this column contains values not mapped in your hierarchy
-      (through <literal>@DiscriminatorValue</literal>). To work around that
-      you can use <literal>@ForceDiscriminator</literal> (at the class level,
-      next to <literal>@DiscriminatorColumn</literal>). Hibernate will then
-      list the available values when loading the entities.</para>
-
-      <para>You can define the foreign key name generated by Hibernate for
-      subclass tables in the JOINED inheritance strategy.</para>
-
-      <programlisting>@Entity
- at Inheritance(strategy = InheritanceType.JOINED)
-public abstract class File { ... }
-
- at Entity
- at ForeignKey(name = "FK_DOCU_FILE")
-public class Document extends File {</programlisting>
-
-      <para>The foreign key from the <literal>Document</literal> table to the
-      <literal>File</literal> table will be named
-      <literal>FK_DOCU_FILE</literal>.</para>
-    </sect2>
-
-    <sect2 id="entity-hibspec-singleassoc">
-      <title>Single Association related annotations</title>
-
-      <para>By default, when Hibernate cannot resolve the association because
-      the expected associated element is not in database (wrong id on the
-      association column), an exception is raised by Hibernate. This might be
-      inconvenient for lecacy and badly maintained schemas. You can ask
-      Hibernate to ignore such elements instead of raising an exception using
-      the <literal>@NotFound</literal> annotation. This annotation can be used
-      on a <literal>@OneToOne</literal> (with FK),
-      <literal>@ManyToOne</literal>, <literal>@OneToMany</literal> or
-      <literal>@ManyToMany</literal> association.</para>
-
-      <programlisting>@Entity
-public class Child {
-    ...
-    @ManyToOne
-    @NotFound(action=NotFoundAction.IGNORE)
-    public Parent getParent() { ... }
-    ...
-}</programlisting>
-
-      <para>Sometimes you want to delegate to your database the deletion of
-      cascade when a given entity is deleted.</para>
-
-      <programlisting>@Entity
-public class Child {
-    ...
-    @ManyToOne
-    @OnDelete(action=OnDeleteAction.CASCADE)
-    public Parent getParent() { ... }
-    ...
-}</programlisting>
-
-      <para>In this case Hibernate generates a cascade delete constraint at
-      the database level.</para>
-
-      <para>Foreign key constraints, while generated by Hibernate, have a
-      fairly unreadable name. You can override the constraint name by use
-      <literal>@ForeignKey</literal>.</para>
-
-      <programlisting>@Entity
-public class Child {
-    ...
-    @ManyToOne
-    <emphasis role="bold">@ForeignKey(name="FK_PARENT")</emphasis>
-    public Parent getParent() { ... }
-    ...
-}
-
-alter table Child add constraint FK_PARENT foreign key (parent_id) references Parent</programlisting>
-
-      <sect3 id="entity-hibspec-singleassoc-fetching"
-             label="Lazy options and fetching modes">
-        <title>Lazy options and fetching modes</title>
-
-        <para>EJB3 comes with the <literal>fetch</literal> option to define
-        lazy loading and fetching modes, however Hibernate has a much more
-        option set in this area. To fine tune the lazy loading and fetching
-        strategies, some additional annotations have been introduced:</para>
-
-        <itemizedlist>
-          <listitem>
-            <para><literal>@LazyToOne</literal>: defines the lazyness option
-            on <literal>@ManyToOne</literal> and <literal>@OneToOne</literal>
-            associations. <literal>LazyToOneOption</literal> can be
-            <literal>PROXY</literal> (ie use a proxy based lazy loading),
-            <literal>NO_PROXY</literal> (use a bytecode enhancement based lazy
-            loading - note that build time bytecode processing is necessary)
-            and <literal>FALSE</literal> (association not lazy)</para>
-          </listitem>
-
-          <listitem>
-            <para><literal>@LazyCollection</literal>: defines the lazyness
-            option on <literal>@ManyTo</literal>Many and
-            <literal>@OneToMany</literal> associations. LazyCollectionOption
-            can be <literal>TRUE</literal> (the collection is lazy and will be
-            loaded when its state is accessed), <literal>EXTRA</literal> (the
-            collection is lazy and all operations will try to avoid the
-            collection loading, this is especially useful for huge collections
-            when loading all the elements is not necessary) and FALSE
-            (association not lazy)</para>
-          </listitem>
-
-          <listitem>
-            <para><literal>@Fetch</literal>: defines the fetching strategy
-            used to load the association. <literal>FetchMode</literal> can be
-            <literal>SELECT</literal> (a select is triggered when the
-            association needs to be loaded), <literal>SUBSELECT</literal>
-            (only available for collections, use a subselect strategy - please
-            refers to the Hibernate Reference Documentation for more
-            information) or <literal>JOIN</literal> (use a SQL JOIN to load
-            the association while loading the owner entity).
-            <literal>JOIN</literal> overrides any lazy attribute (an
-            association loaded through a <literal>JOIN</literal> strategy
-            cannot be lazy).</para>
-          </listitem>
-        </itemizedlist>
-
-        <para>The Hibernate annotations overrides the EJB3 fetching
-        options.</para>
-
-        <table>
-          <title>Lazy and fetch options equivalent</title>
-
-          <tgroup cols="3">
-            <thead>
-              <row>
-                <entry>Annotations</entry>
-
-                <entry>Lazy</entry>
-
-                <entry>Fetch</entry>
-              </row>
-            </thead>
-
-            <tbody>
-              <row>
-                <entry>@[One|Many]ToOne](fetch=FetchType.LAZY)</entry>
-
-                <entry>@LazyToOne(PROXY)</entry>
-
-                <entry>@Fetch(SELECT)</entry>
-              </row>
-
-              <row>
-                <entry>@[One|Many]ToOne](fetch=FetchType.EAGER)</entry>
-
-                <entry>@LazyToOne(FALSE)</entry>
-
-                <entry>@Fetch(JOIN)</entry>
-              </row>
-
-              <row>
-                <entry>@ManyTo[One|Many](fetch=FetchType.LAZY)</entry>
-
-                <entry>@LazyCollection(TRUE)</entry>
-
-                <entry>@Fetch(SELECT)</entry>
-              </row>
-
-              <row>
-                <entry>@ManyTo[One|Many](fetch=FetchType.EAGER)</entry>
-
-                <entry>@LazyCollection(FALSE)</entry>
-
-                <entry>@Fetch(JOIN)</entry>
-              </row>
-            </tbody>
-          </tgroup>
-        </table>
-      </sect3>
-    </sect2>
-
-    <sect2 id="entity-hibspec-collection" revision="2">
-      <title>Collection related annotations</title>
-
-      <sect3 id="entity-hibspec-collection-enhance" revision="3">
-        <title>Enhance collection settings</title>
-
-        <para>It is possible to set <itemizedlist>
-            <listitem>
-               the batch size for collections using @BatchSize 
-            </listitem>
-
-            <listitem>
-               the where clause, using @Where (applied on the target entity) or @WhereJoinTable (applied on the association table) 
-            </listitem>
-
-            <listitem>
-               the check clause, using @Check 
-            </listitem>
-
-            <listitem>
-               the SQL order by clause, using @OrderBy 
-            </listitem>
-
-            <listitem>
-               the delete cascade strategy through @OnDelete(action=OnDeleteAction.CASCADE) 
-            </listitem>
-
-            <listitem>
-               the collection immutability using @Immutable: if set specifies that the elements of the collection never change (a minor performance optimization in some cases) 
-            </listitem>
-
-            <listitem>
-              <para>a custom collection persister (ie the persistence strategy
-              used) using <literal>@Persister</literal>: the class must
-              implement
-              <classname>org.hibernate.persister.collectionCollectionPersister</classname>
-              </para>
-            </listitem>
-          </itemizedlist></para>
-
-        <para>You can also declare a sort comparator. Use the
-        <literal>@Sort</literal> annotation. Expressing the comparator type
-        you want between unsorted, natural or custom comparator. If you want
-        to use your own comparator implementation, you'll also have to express
-        the implementation class using the <literal>comparator</literal>
-        attribute. Note that you need to use either a
-        <classname>SortedSet</classname> or a <classname>SortedMap</classname>
-        interface.</para>
-
-        <programlisting>    @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
-    @JoinColumn(name="CUST_ID")
-    @Sort(type = SortType.COMPARATOR, comparator = TicketComparator.class)
-    @Where(clause="1=1")
-    @OnDelete(action=OnDeleteAction.CASCADE)
-    public SortedSet&lt;Ticket&gt; getTickets() {
-        return tickets;
-    }</programlisting>
-
-        <para>Please refer to the previous descriptions of these annotations
-        for more informations.</para>
-
-        <para>Foreign key constraints, while generated by Hibernate, have a
-        fairly unreadable name. You can override the constraint name by use
-        <literal>@ForeignKey</literal>. Note that this annotation has to be
-        placed on the owning side of the relationship,
-        <literal>inverseName</literal> referencing to the other side
-        constraint.</para>
-
-        <programlisting>@Entity
-public class Woman {
-    ...
-    @ManyToMany(cascade = {CascadeType.ALL})
-    <emphasis role="bold">@ForeignKey(name = "TO_WOMAN_FK", inverseName = "TO_MAN_FK")</emphasis>
-    public Set&lt;Man&gt; getMens() {
-        return mens;
-    }
-}
-
-alter table Man_Woman add constraint TO_WOMAN_FK foreign key (woman_id) references Woman
-alter table Man_Woman add constraint TO_MAN_FK foreign key (man_id) references Man</programlisting>
-      </sect3>
-
-      <sect3 id="entity-hibspec-collection-extratype" revision="1">
-        <title>Extra collection types</title>
-
-        <sect4>
-          <title>List</title>
-
-          <para>Beyond EJB3, Hibernate Annotations supports true
-          <classname>List</classname> and <classname>Array</classname>. Map
-          your collection the same way as usual and add the
-          @<literal>IndexColumn</literal>. This annotation allows you to
-          describe the column that will hold the index. You can also declare
-          the index value in DB that represent the first element (aka as base
-          index). The usual value is <literal>0</literal> or
-          <literal>1</literal>.</para>
-
-          <programlisting>@OneToMany(cascade = CascadeType.ALL)
- at IndexColumn(name = "drawer_position", base=1)
-public List&lt;Drawer&gt; getDrawers() {
-    return drawers;
-}</programlisting>
-
-          <note>
-            <para>If you forgot to set <literal>@IndexColumn</literal>, the
-            bag semantic is applied. If you want the bag semantic without the
-            limitations of it, consider using
-            <literal>@CollectionId</literal>.</para>
-          </note>
-        </sect4>
-
-        <sect4 id="entity-hibspec-collection-extratype-map" revision="1">
-          <title>Map</title>
-
-          <para>Hibernate Annotations also supports true Map mappings, if
-          <literal>@javax.persistence.MapKey</literal> is not set, hibernate
-          will map the key element or embeddable object in its/their own
-          columns. To overrides the default columns, you can use
-          <literal>@org.hibernate.annotations.MapKey</literal> if your key is
-          a basic type (defaulted to <literal>mapkey</literal>) or an
-          embeddable object, or you can use
-          <literal>@org.hibernate.annotations.MapKeyManyToMany</literal> if
-          your key is an entity.</para>
-
-          <para>Both <literal>@org.hibernate.annotations.MapKey</literal> and
-          <literal>@org.hibernate.annotations.MapKeyManyToMany</literal>
-          allows you to override the target element to be used. This is
-          especially useful if your collection does not use generics (or if
-          you use interfaces).</para>
-
-          <programlisting>    @CollectionOfElements(targetElement = SizeImpl.class)
-    @MapKeyManyToMany(<emphasis role="bold">targetEntity = LuggageImpl.class</emphasis>)
-    private Map&lt;Luggage, Size&gt; sizePerLuggage = new HashMap&lt;Luggage, Size&gt;();</programlisting>
-
-          <para></para>
-        </sect4>
-
-        <sect4 id="entity-hibspec-collection-extratype-indexbidir">
-          <title>Bidirectional association with indexed collections</title>
-
-          <para>A bidirectional association where one end is represented as a
-          <literal>@IndexColumn</literal> or
-          <literal>@org.hibernate.annotations.MapKey[ManyToMany]</literal>
-          requires special consideration. If there is a property of the child
-          class which maps to the index column, no problem, we can continue
-          using <literal>mappedBy</literal> on the collection mapping:</para>
-
-          <programlisting>@Entity
-public class Parent {
-    @OneToMany(mappedBy="parent")
-    @org.hibernate.annotations.MapKey(columns=@Column(name="name"))
-    private Map&lt;String, Child&gt; children;
-    ...
-}
-
- at Entity
-public class Parent {
-    ...
-    @Basic
-    private String name;
-
-    @ManyToOne
-    @JoinColumn(name="parent_id", nullable=false)
-    private Parent parent;
-    ...
-}</programlisting>
-
-          <para>But, if there is no such property on the child class, we can't
-          think of the association as truly bidirectional (there is
-          information available at one end of the association that is not
-          available at the other end). In this case, we can't map the
-          collection <literal>mappedBy</literal>. Instead, we could use the
-          following mapping:</para>
-
-          <programlisting>@Entity
-public class Parent {
-    @OneToMany
-    @org.hibernate.annotations.MapKey(columns=@Column(name="name"))
-    @JoinColumn(name="parent_id", nullable=false)
-    private Map&lt;String, Child&gt; children;
-    ...
-}
-
- at Entity
-public class Parent {
-    ...
-    @ManyToOne
-    @JoinColumn(name="parent_id", insertable=false, updatable=false, nullable=false)
-    private Parent parent;
-    ...
-}</programlisting>
-
-          <para>Note that in this mapping, the collection-valued end of the
-          association is responsible for updates to the foreign key.</para>
-        </sect4>
-
-        <sect4>
-          <title>Bag with primary key</title>
-
-          <para>Another interesting feature is the ability to define a
-          surrogate primary key to a bag collection. This remove pretty much
-          all of the drawbacks of bags: update and removal are efficient, more
-          than one <literal>EAGER</literal> bag per query or per entity. This
-          primary key will be contained in a additional column of your
-          collection table but will not be visible to the Java application.
-          @CollectionId is used to mark a collection as id bag, it also allow
-          to override the primary key column(s), the primary key type and the
-          generator strategy. The strategy can be <literal>identity</literal>,
-          or any defined generator name of your application.</para>
-
-          <programlisting>@Entity
- at TableGenerator(name="ids_generator", table="IDS")
-public class Passport {
-    ...
-
-    @ManyToMany(cascade = CascadeType.ALL)
-    @JoinTable(name="PASSPORT_VISASTAMP")
-    <emphasis role="bold">@CollectionId(
-        columns = @Column(name="COLLECTION_ID"), 
-        type=@Type(type="long"), 
-        generator = "ids_generator"
-    )</emphasis>
-    private Collection&lt;Stamp&gt; visaStamp = new ArrayList();
-    ...
-}</programlisting>
-        </sect4>
-
-        <sect4>
-          <title>Collection of element or composite elements</title>
-
-          <para>Hibernate Annotations also supports collections of core types
-          (Integer, String, Enums, ...), collections of embeddable objects and
-          even arrays of primitive types. This is known as collection of
-          elements.</para>
-
-          <para>A collection of elements has to be annotated as
-          <literal>@CollectionOfElements</literal> (as a replacement of
-          <literal>@OneToMany</literal>) To define the collection table, the
-          <literal>@JoinTable</literal> annotation is used on the association
-          property, <literal>joinColumns</literal> defines the join columns
-          between the entity primary table and the collection table
-          (inverseJoincolumn is useless and should be left empty). For
-          collection of core types or array of primitive types, you can
-          override the element column definition using a
-          <literal>@Column</literal> on the association property. You can also
-          override the columns of a collection of embeddable object using
-          <literal>@AttributeOverride</literal>. To reach the collection
-          element, you need to append "element" to the attribute override name
-          (eg "element" for core types, or "element.serial" for the serial
-          property of an embeddable element). To reach the index/key of a
-          collection, append "key" instead.</para>
-
-          <programlisting>@Entity
-public class Boy {
-    private Integer id;
-    private Set&lt;String&gt; nickNames = new HashSet&lt;String&gt;();
-    private int[] favoriteNumbers;
-    private Set&lt;Toy&gt; favoriteToys = new HashSet&lt;Toy&gt;();
-    private Set&lt;Character&gt; characters = new HashSet&lt;Character&gt;();
-
-    @Id @GeneratedValue
-    public Integer getId() {
-        return id;
-    }
-
-    <emphasis role="bold">@CollectionOfElements
-    public Set&lt;String&gt;</emphasis> getNickNames() {
-        return nickNames;
-    }
-
-    <emphasis role="bold">@CollectionOfElements
-    @JoinTable(
-            table=@Table(name="BoyFavoriteNumbers"),
-            joinColumns = @JoinColumn(name="BoyId")
-    )
-    @Column(name="favoriteNumber", nullable=false)</emphasis>
-    @IndexColumn(name="nbr_index")
-    public int[] getFavoriteNumbers() {
-        return favoriteNumbers;
-    }
-
-    <emphasis role="bold">@CollectionOfElements
-    @AttributeOverride( name="element.serial", column=@Column(name="serial_nbr") )</emphasis>
-    public Set&lt;Toy&gt; getFavoriteToys() {
-        return favoriteToys;
-    }
-
-    <emphasis role="bold">@CollectionOfElements
-    public Set&lt;Character&gt;</emphasis> getCharacters() {
-        return characters;
-    }
-    ...
-}
-
-public enum Character {
-    GENTLE,
-    NORMAL,
-    AGGRESSIVE,
-    ATTENTIVE,
-    VIOLENT,
-    CRAFTY
-}
-
- at Embeddable
-public class Toy {
-    public String name;
-    public String serial;
-    public Boy owner;
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getSerial() {
-        return serial;
-    }
-
-    public void setSerial(String serial) {
-        this.serial = serial;
-    }
-
-    <emphasis role="bold">@Parent</emphasis>
-    public Boy getOwner() {
-        return owner;
-    }
-
-    public void setOwner(Boy owner) {
-        this.owner = owner;
-    }
-
-    public boolean equals(Object o) {
-        if ( this == o ) return true;
-        if ( o == null || getClass() != o.getClass() ) return false;
-
-        final Toy toy = (Toy) o;
-
-        if ( !name.equals( toy.name ) ) return false;
-        if ( !serial.equals( toy.serial ) ) return false;
-
-        return true;
-    }
-
-    public int hashCode() {
-        int result;
-        result = name.hashCode();
-        result = 29 * result + serial.hashCode();
-        return result;
-    }
-}</programlisting>
-
-          <para>On a collection of embeddable objects, the embeddable object
-          can have a property annotated with <literal>@Parent</literal>. This
-          property will then point back to the entity containing the
-          collection.</para>
-
-          <note>
-            <para>Previous versions of Hibernate Annotations used the
-            <literal>@OneToMany</literal> to mark a collection of elements.
-            Due to semantic inconsistencies, we've introduced the annotation
-            <literal>@CollectionOfElements</literal>. Marking collections of
-            elements the old way still work but is considered deprecated and
-            is going to be unsupported in future releases</para>
-          </note>
-        </sect4>
-      </sect3>
-    </sect2>
-
-    <sect2>
-      <title>Cache</title>
-
-      <para>In order to optimize your database accesses, you can activave the
-      so called second level cache of Hibernate. This cache is configurable on
-      a per entity and per collection basis.</para>
-
-      <para><literal>@org.hibernate.annotations.Cache</literal> defines the
-      caching strategy and region of a given second level cache. This
-      annotation can be applied on the root entity (not the sub entities), and
-      on the collections.</para>
-
-      <programlisting>@Entity
- at Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
-public class Forest { ... }</programlisting>
-
-      <programlisting>    @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
-    @JoinColumn(name="CUST_ID")
-    @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
-    public SortedSet&lt;Ticket&gt; getTickets() {
-        return tickets;
-    }</programlisting>
-
-      <para></para>
-
-      <programlistingco>
-        <areaspec>
-          <area coords="2 55" id="hm1" />
-
-          <area coords="3 55" id="hm2" />
-
-          <area coords="4 55" id="hm3" />
-        </areaspec>
-
-        <programlisting>@Cache(
-    CacheConcurrencyStrategy usage();
-    String region() default "";
-    String include() default "all";
-)</programlisting>
-
-        <calloutlist>
-          <callout arearefs="hm1">
-            <para>usage: the given cache concurrency strategy (NONE,
-            READ_ONLY, NONSTRICT_READ_WRITE, READ_WRITE, TRANSACTIONAL)</para>
-          </callout>
-
-          <callout arearefs="hm2">
-            <para>region (optional): the cache region (default to the fqcn of
-            the class or the fq role name of the collection)</para>
-          </callout>
-
-          <callout arearefs="hm3">
-            <para><literal>include</literal> (optional): all to include all
-            properties, non-lazy to only include non lazy properties (default
-            all).</para>
-          </callout>
-        </calloutlist>
-      </programlistingco>
-    </sect2>
-
-    <sect2 id="entity-hibspec-filters">
-      <title>Filters</title>
-
-      <para>Hibernate has the ability to apply arbitrary filters on top of
-      your data. Those filters are applied at runtime on a given session.
-      First, you need to define them.</para>
-
-      <para><literal>@org.hibernate.annotations.FilterDef</literal> or
-      <literal>@FilterDefs</literal> define filter definition(s) used by
-      filter(s) using the same name. A filter definition has a name() and an
-      array of parameters(). A parameter will allow you to adjust the behavior
-      of the filter at runtime. Each parameter is defined by a
-      <literal>@ParamDef</literal> which has a name and a type. You can also
-      define a defaultCondition() parameter for a given
-      <literal>@FilterDef</literal> to set the default condition to use when
-      none are defined in each individual <literal>@Filter</literal>. A
-      <literal>@FilterDef</literal>(s) can be defined at the class or package
-      level.</para>
-
-      <para>We now need to define the SQL filter clause applied to either the
-      entity load or the collection load. <literal>@Filter</literal> is used
-      and placed either on the entity or the collection element</para>
-
-      <para><programlisting>@Entity
- at FilterDef(name="minLength", parameters={ @ParamDef( name="minLength", type="integer" ) } )
- at Filters( {
-    @Filter(name="betweenLength", condition=":minLength &lt;= length and :maxLength &gt;= length"),
-    @Filter(name="minLength", condition=":minLength &lt;= length")
-} )
-public class Forest { ... }</programlisting></para>
-
-      <para>When the collection use an association table as a relational
-      representation, you might want to apply the filter condition to the
-      association table itself or to the target entity table. To apply the
-      constraint on the target entity, use the regular
-      <literal>@Filter</literal> annotation. However, if you wan to target the
-      association table, use the <literal>@FilterJoinTable</literal>
-      annotation.</para>
-
-      <programlisting>    @OneToMany
-    @JoinTable
-    //filter on the target entity table
-    @Filter(name="betweenLength", condition=":minLength &lt;= length and :maxLength &gt;= length")
-    //filter on the association table
-    @FilterJoinTable(name="security", condition=":userlevel &gt;= requredLevel")
-    public Set&lt;Forest&gt; getForests() { ... }</programlisting>
-    </sect2>
-
-    <sect2 id="entity-hibspec-query">
-      <title>Queries</title>
-
-      <para>Since Hibernate has more features on named queries than the one
-      defined in the EJB3 specification,
-      <literal>@org.hibernate.annotations.NamedQuery</literal>,
-      <literal>@org.hibernate.annotations.NamedQueries</literal>,
-      <literal>@org.hibernate.annotations.NamedNativeQuery</literal> and
-      <literal>@org.hibernate.annotations.NamedNativeQueries</literal> have
-      been introduced. They add some attributes to the standard version and
-      can be used as a replacement:</para>
-
-      <itemizedlist>
-        <listitem>
-          <para>flushMode: define the query flush mode (Always, Auto, Commit
-          or Never)</para>
-        </listitem>
-
-        <listitem>
-          <para>cacheable: whether the query should be cached or not</para>
-        </listitem>
-
-        <listitem>
-          <para>cacheRegion: cache region used if the query is cached</para>
-        </listitem>
-
-        <listitem>
-          <para>fetchSize: JDBC statement fetch size for this query</para>
-        </listitem>
-
-        <listitem>
-          <para>timeout: query time out</para>
-        </listitem>
-
-        <listitem>
-          <para>callable: for native queries only, to be set to true for
-          stored procedures</para>
-        </listitem>
-
-        <listitem>
-          <para>comment: if comments are activated, the comment seen when the
-          query is sent to the database.</para>
-        </listitem>
-
-        <listitem>
-          <para>cacheMode: Cache interaction mode (get, ignore, normal, put or
-          refresh)</para>
-        </listitem>
-
-        <listitem>
-          <para>readOnly: whether or not the elements retrievent from the
-          query are in read only mode.</para>
-        </listitem>
-      </itemizedlist>
-
-      <para>Those hints can be set in a standard
-      <literal>@javax.persistence.NamedQuery</literal> annotations through the
-      detyped <literal>@QueryHint</literal>. Another key advantage is the
-      ability to set those annotations at a package level.</para>
-    </sect2>
-
-    <sect2 id="entity-hibspec-customsql" revision="1">
-      <title>Custom SQL for CRUD operations</title>
-
-      <para>Hibernate gives you the avility to override every single SQL
-      statement generated. We have seen native SQL query usage already, but
-      you can also override the SQL statement used to load or change the state
-      of entities.</para>
-
-      <programlisting>@Entity
- at Table(name="CHAOS")
-<emphasis role="bold">@SQLInsert( sql="INSERT INTO CHAOS(size, name, nickname, id) VALUES(?,upper(?),?,?)")
- at SQLUpdate( sql="UPDATE CHAOS SET size = ?, name = upper(?), nickname = ? WHERE id = ?")
- at SQLDelete( sql="DELETE CHAOS WHERE id = ?")
- at SQLDeleteAll( sql="DELETE CHAOS")
-</emphasis><emphasis role="bold">@Loader(namedQuery = "chaos")</emphasis>
- at NamedNativeQuery(name="chaos", query="select id, size, name, lower( nickname ) as nickname from CHAOS where id= ?", resultClass = Chaos.class)
-public class Chaos {
-    @Id
-    private Long id;
-    private Long size;
-    private String name;
-    private String nickname;</programlisting>
-
-      <para><literal>@SQLInsert</literal>, <literal>@SQLUpdate</literal>,
-      <literal>@SQLDelete</literal>, <literal>@SQLDeleteAll</literal>
-      respectively override the INSERT statement, UPDATE statement, DELETE
-      statement, DELETE statement to remove all entities.</para>
-
-      <para>If you expect to call a store procedure, be sure to set the
-      <literal>callable</literal> attribute to true
-      (<literal>@SQLInsert(callable=true, ...)</literal>).</para>
-
-      <para>To check that the execution happens correctly, Hibernate allows
-      you to define one of those three strategies:</para>
-
-      <itemizedlist>
-        <listitem>
-          <para>NONE: no check is performed: the store procedure is expected
-          to fail upon issues</para>
-        </listitem>
-
-        <listitem>
-          <para>COUNT: use of rowcount to check that the update is
-          successful</para>
-        </listitem>
-
-        <listitem>
-          <para>PARAM: like COUNT but using an output parameter rather that
-          the standard mechanism</para>
-        </listitem>
-      </itemizedlist>
-
-      <para>To define the result check style, use the <literal>check</literal>
-      parameter (<literal>@SQLUpdate(check=ResultCheckStyle.COUNT,
-      ...)</literal>).</para>
-
-      <para>You can also override the SQL load statement by a native SQL query
-      or a HQL query. You just have to refer to a named query with the
-      <literal><literal>@Loader</literal></literal> annotation.</para>
-
-      <para>You can use the exact same set of annotations to override the
-      collection related statements.</para>
-
-      <programlisting>@OneToMany
- at JoinColumn(name="chaos_fk")
-<emphasis role="bold">@SQLInsert( sql="UPDATE CASIMIR_PARTICULE SET chaos_fk = ? where id = ?")
- at SQLDelete( sql="UPDATE CASIMIR_PARTICULE SET chaos_fk = null where id = ?")</emphasis>
-private Set&lt;CasimirParticle&gt; particles = new HashSet&lt;CasimirParticle&gt;();</programlisting>
-
-      <para>The parameters order is important and is defined by the order
-      Hibernate handle properties. You can see the expected order by enabling
-      debug logging for the <literal>org.hibernate.persister.entity</literal>
-      level. With this level enabled Hibernate will print out the static SQL
-      that is used to create, update, delete etc. entities. (To see the
-      expected sequence, remember to not include your custom SQL through
-      annotations as that will override the Hibernate generated static
-      sql.)</para>
-
-      <para>Overriding SQL statements for secondary tables is also possible
-      using <literal>@org.hibernate.annotations.Table</literal> and either (or
-      all) attributes <literal>sqlInsert</literal>,
-      <literal>sqlUpdate</literal>, <literal>sqlDelete</literal>:</para>
-
-      <programlisting>@Entity
- at SecondaryTables({
-    @SecondaryTable(name = "`Cat nbr1`"),
-    @SecondaryTable(name = "Cat2"})
- at org.hibernate.annotations.Tables( {
-    @Table(appliesTo = "Cat", comment = "My cat table" ),
-    @Table(appliesTo = "Cat2", foreignKey = @ForeignKey(name="FK_CAT2_CAT"), fetch = FetchMode.SELECT,
-        <emphasis role="bold">sqlInsert=@SQLInsert(sql="insert into Cat2(storyPart2, id) values(upper(?), ?)") )</emphasis>
-} )
-public class Cat implements Serializable {</programlisting>
-
-      <para>The previous example also show that you can give a comment to a
-      given table (promary or secondary): This comment will be used for DDL
-      generation.</para>
-    </sect2>
-
-    <sect2>
-      <title>Tuplizer</title>
-
-      <para><classname>org.hibernate.tuple.Tuplizer</classname>, and its
-      sub-interfaces, are responsible for managing a particular representation
-      of a piece of data, given that representation's
-      <literal>org.hibernate.EntityMode</literal>. If a given piece of data is
-      thought of as a data structure, then a tuplizer is the thing which knows
-      how to create such a data structure and how to extract values from and
-      inject values into such a data structure. For example, for the POJO
-      entity mode, the correpsonding tuplizer knows how create the POJO
-      through its constructor and how to access the POJO properties using the
-      defined property accessors. There are two high-level types of Tuplizers,
-      represented by the
-      <classname>org.hibernate.tuple.EntityTuplizer</classname> and
-      <classname>org.hibernate.tuple.ComponentTuplizer</classname> interfaces.
-      EntityTuplizers are responsible for managing the above mentioned
-      contracts in regards to entities, while
-      <classname>ComponentTuplizers</classname> do the same for components.
-      Check the Hibernate reference documentation for more information.</para>
-
-      <para>To define tuplixer in annotations, simply use the
-      <literal>@Tuplizer</literal> annotation on the according element</para>
-
-      <programlisting>@Entity
-<emphasis role="bold">@Tuplizer(impl = DynamicEntityTuplizer.class)</emphasis>
-public interface Cuisine {
-    @Id
-    @GeneratedValue
-    public Long getId();
-    public void setId(Long id);
-
-    public String getName();
-    public void setName(String name);
-
-    <emphasis role="bold">@Tuplizer(impl = DynamicComponentTuplizer.class)</emphasis>
-    public Country getCountry();
-    public void setCountry(Country country);
-
-
-}</programlisting>
-    </sect2>
-  </sect1>
-</chapter>
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/doc/reference/en/modules/entity.xml (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/doc/reference/en/modules/entity.xml)
===================================================================
--- trunk/HibernateExt/annotations/doc/reference/en/modules/entity.xml	                        (rev 0)
+++ trunk/HibernateExt/annotations/doc/reference/en/modules/entity.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,3583 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<chapter id="entity">
+  <title>Entity Beans</title>
+
+  <sect1 id="entity-overview" revision="2">
+    <title>Intro</title>
+
+    <para>This section covers EJB 3.0 (aka Java Persistence) entity
+    annotations and Hibernate-specific extensions.</para>
+  </sect1>
+
+  <sect1 id="entity-mapping" revision="2">
+    <title>Mapping with EJB3/JPA Annotations</title>
+
+    <para>EJB3 entities are plain POJOs. Actually they represent the exact
+    same concept as the Hibernate persistent entities. Their mappings are
+    defined through JDK 5.0 annotations (an XML descriptor syntax for
+    overriding is defined in the EJB3 specification). Annotations can be split
+    in two categories, the logical mapping annotations (allowing you to
+    describe the object model, the class associations, etc.) and the physical
+    mapping annotations (describing the physical schema, tables, columns,
+    indexes, etc). We will mix annotations from both categories in the
+    following code examples.</para>
+
+    <para>EJB3 annotations are in the <literal>javax.persistence.*</literal>
+    package. Most JDK 5 compliant IDE (like Eclipse, IntelliJ IDEA and
+    Netbeans) can autocomplete annotation interfaces and attributes for you
+    (even without a specific "EJB3" module, since EJB3 annotations are plain
+    JDK 5 annotations).</para>
+
+    <para>For more and runnable concrete examples read the JBoss EJB 3.0
+    tutorial or review the Hibernate Annotations test suite. Most of the unit
+    tests have been designed to represent a concrete example and be a
+    inspiration source.</para>
+
+    <sect2 id="entity-mapping-entity">
+      <title>Declaring an entity bean</title>
+
+      <para>Every bound persistent POJO class is an entity bean and is
+      declared using the <literal>@Entity</literal> annotation (at the class
+      level):</para>
+
+      <programlisting>
+ at Entity
+public class Flight implements Serializable {
+    Long id;
+
+    @Id
+    public Long getId() { return id; }
+
+    public void setId(Long id) { this.id = id; }
+}
+         </programlisting>
+
+      <para><literal>@Entity</literal> declares the class as an entity bean
+      (i.e. a persistent POJO class), <literal>@Id</literal> declares the
+      identifier property of this entity bean. The other mapping declarations
+      are implicit. This configuration by exception concept is central to the
+      new EJB3 specification and a major improvement. The class Flight is
+      mapped to the Flight table, using the column id as its primary key
+      column.</para>
+
+      <para>Depending on whether you annotate fields or methods, the access
+      type used by Hibernate will be <literal>field</literal> or
+      <literal>property</literal>. The EJB3 spec requires that you declare
+      annotations on the element type that will be accessed, i.e. the getter
+      method if you use <literal>property</literal> access, the field if you
+      use <literal>field</literal> access. Mixing EJB3 annotations in both
+      fields and methods should be avoided. Hibernate will guess the access
+      type from the position of <literal>@Id</literal> or
+      <literal>@EmbeddedId</literal>.</para>
+
+      <sect3>
+        <title>Defining the table</title>
+
+        <para><literal>@Table</literal> is set at the class level; it allows
+        you to define the table, catalog, and schema names for your entity
+        bean mapping. If no <literal>@Table</literal> is defined the default
+        values are used: the unqualified class name of the entity.</para>
+
+        <programlisting>
+ at Entity
+ at Table(name="tbl_sky")
+public class Sky implements Serializable {
+...
+            </programlisting>
+
+        <para>The <literal>@Table</literal> element also contains a
+        <literal>schema</literal> and a <literal>catalog</literal> attributes,
+        if they need to be defined. You can also define unique constraints to
+        the table using the <literal>@UniqueConstraint</literal> annotation in
+        conjunction with <literal>@Table</literal> (for a unique constraint
+        bound to a single column, refer to <literal>@Column</literal>).</para>
+
+        <programlisting>@Table(name="tbl_sky",
+    <emphasis role="bold">uniqueConstraints = {@UniqueConstraint(columnNames={"month", "day"})}</emphasis>
+)</programlisting>
+
+        <para>A unique constraint is applied to the tuple month, day. Note
+        that the <literal>columnNames</literal> array refers to the logical
+        column names.</para>
+
+        <remark>The logical column name is defined by the Hibernate
+        NamingStrategy implementation. The default EJB3 naming strategy use
+        the physical column name as the logical column name. Note that this
+        may be different than the property name (if the column name is
+        explicit). Unless you override the NamingStrategy, you shouldn't worry
+        about that.</remark>
+      </sect3>
+
+      <sect3 id="entity-mapping-entity-version" revision="1">
+        <title>Versioning for optimistic locking</title>
+
+        <para>You can add optimistic locking capability to an entity bean
+        using the <literal>@Version</literal> annotation:</para>
+
+        <programlisting>
+ at Entity
+public class Flight implements Serializable {
+...
+    @Version
+    @Column(name="OPTLOCK")
+    public Integer getVersion() { ... }
+}           </programlisting>
+
+        <para>The version property will be mapped to the
+        <literal>OPTLOCK</literal> column, and the entity manager will use it
+        to detect conflicting updates (preventing lost updates you might
+        otherwise see with the last-commit-wins strategy).</para>
+
+        <para>The version column may be a numeric (the recommended solution)
+        or a timestamp as per the EJB3 spec. Hibernate support any kind of
+        type provided that you define and implement the appropriate
+        <classname>UserVersionType</classname>.</para>
+
+        <para>The application must not alter the version number set up by
+        Hibernate in any way. To artificially increase the version number,
+        check in Hibernate Entity Manager's reference documentation
+        <literal>LockMode.WRITE</literal></para>
+      </sect3>
+    </sect2>
+
+    <sect2 id="entity-mapping-property" revision="1">
+      <title>Mapping simple properties</title>
+
+      <sect3>
+        <title>Declaring basic property mappings</title>
+
+        <para>Every non static non transient property (field or method) of an
+        entity bean is considered persistent, unless you annotate it as
+        <literal>@Transient</literal>. Not having an annotation for your
+        property is equivalent to the appropriate <literal>@Basic</literal>
+        annotation. The <literal>@Basic</literal> annotation allows you to
+        declare the fetching strategy for a property:</para>
+
+        <programlisting>public transient int counter; //transient property
+
+private String firstname; //persistent property
+
+ at Transient
+String getLengthInMeter() { ... } //transient property
+
+String getName() {... } // persistent property
+
+ at Basic
+int getLength() { ... } // persistent property
+
+ at Basic(fetch = FetchType.LAZY)
+String getDetailedComment() { ... } // persistent property
+
+ at Temporal(TemporalType.TIME)
+java.util.Date getDepartureTime() { ... } // persistent property           
+
+ at Enumerated(STRING)
+Starred getNote() { ... } //enum persisted as String in database</programlisting>
+
+        <para><literal>counter</literal>, a transient field, and
+        <literal>lengthInMeter</literal>, a method annotated as
+        <literal>@Transient</literal>, and will be ignored by the entity
+        manager. <literal>name</literal>, <literal>length</literal>, and
+        <literal>firstname</literal> properties are mapped persistent and
+        eagerly fetched (the default for simple properties). The
+        <literal>detailedComment</literal> property value will be lazily
+        fetched from the database once a lazy property of the entity is
+        accessed for the first time. Usually you don't need to lazy simple
+        properties (not to be confused with lazy association fetching).</para>
+
+        <note>
+          <para>To enable property level lazy fetching, your classes have to
+          be instrumented: bytecode is added to the original one to enable
+          such feature, please refer to the Hibernate reference documentation.
+          If your classes are not instrumented, property level lazy loading is
+          silently ignored.</para>
+        </note>
+
+        <para>The recommended alternative is to use the projection capability
+        of EJB-QL or Criteria queries.</para>
+
+        <para>EJB3 support property mapping of all basic types supported by
+        Hibernate (all basic Java types , their respective wrappers and
+        serializable classes). Hibernate Annotations support out of the box
+        Enum type mapping either into a ordinal column (saving the enum
+        ordinal) or a string based column (saving the enum string
+        representation): the persistence representation, defaulted to ordinal,
+        can be overriden through the <literal>@Enumerated</literal> annotation
+        as shown in the <literal>note</literal> property example.</para>
+
+        <para>In core Java APIs, the temporal precision is not defined. When
+        dealing with temporal data you might want to describe the expected
+        precision in database. Temporal data can have <literal>DATE</literal>,
+        <literal>TIME</literal>, or <literal>TIMESTAMP</literal> precision (ie
+        the actual date, only the time, or both). Use the
+        <literal>@Temporal</literal> annotation to fine tune that.</para>
+
+        <para><literal>@Lob</literal> indicates that the property should be
+        persisted in a Blob or a Clob depending on the property type:
+        <classname>java.sql.Clob</classname>,
+        <classname>Character[]</classname>, <classname>char[]</classname> and
+        java.lang.<classname>String</classname> will be persisted in a Clob.
+        <classname>java.sql.Blob</classname>, <classname>Byte[]</classname>,
+        <classname>byte[] </classname>and serializable type will be persisted
+        in a Blob.</para>
+
+        <programlisting>
+ at Lob
+public String getFullText() {
+    return fullText;
+}
+
+ at Lob 
+public byte[] getFullCode() {
+    return fullCode;
+}
+ </programlisting>
+
+        <para>If the property type implements
+        <classname>java.io.Serializable</classname> and is not a basic type,
+        and if the property is not annotated with <literal>@Lob</literal>,
+        then the Hibernate <literal>serializable</literal> type is
+        used.</para>
+      </sect3>
+
+      <sect3 id="entity-mapping-property-column" revision="1">
+        <title>Declaring column attributes</title>
+
+        <para>The column(s) used for a property mapping can be defined using
+        the <literal>@Column</literal> annotation. Use it to override default
+        values (see the EJB3 specification for more information on the
+        defaults). You can use this annotation at the property level for
+        properties that are:</para>
+
+        <itemizedlist>
+          <listitem>
+            <para>not annotated at all</para>
+          </listitem>
+
+          <listitem>
+            <para>annotated with <literal>@Basic</literal></para>
+          </listitem>
+
+          <listitem>
+            <para>annotated with <literal>@Version</literal></para>
+          </listitem>
+
+          <listitem>
+            <para>annotated with <literal>@Lob</literal></para>
+          </listitem>
+
+          <listitem>
+            <para>annotated with <literal>@Temporal</literal></para>
+          </listitem>
+
+          <listitem>
+            <para>annotated with
+            <literal>@org.hibernate.annotations.CollectionOfElements</literal>
+            (for Hibernate only)</para>
+          </listitem>
+        </itemizedlist>
+
+        <programlisting>
+ at Entity
+public class Flight implements Serializable {
+...
+ at Column(updatable = false, name = "flight_name", nullable = false, length=50)
+public String getName() { ... }
+            </programlisting>
+
+        <para>The <literal>name</literal> property is mapped to the
+        <literal>flight_name</literal> column, which is not nullable, has a
+        length of 50 and is not updatable (making the property
+        immutable).</para>
+
+        <para>This annotation can be applied to regular properties as well as
+        <literal>@Id</literal> or <literal>@Version</literal>
+        properties.</para>
+
+        <programlistingco>
+          <areaspec>
+            <area coords="2 55" id="hm1" />
+
+            <area coords="3 55" id="hm2" />
+
+            <area coords="4 55" id="hm3" />
+
+            <area coords="5 55" id="hm4" />
+
+            <area coords="6 55" id="hm5" />
+
+            <area coords="7 55" id="hm6" />
+
+            <area coords="8 55" id="hm7" />
+
+            <area coords="9 55" id="hm8" />
+
+            <area coords="10 55" id="hm9" />
+
+            <area coords="11 55" id="hm10" />
+          </areaspec>
+
+          <programlisting>@Column(
+    name="columnName";
+    boolean unique() default false;
+    boolean nullable() default true;
+    boolean insertable() default true;
+    boolean updatable() default true;
+    String columnDefinition() default "";
+    String table() default "";
+    int length() default 255;
+    int precision() default 0; // decimal precision
+    int scale() default 0; // decimal scale</programlisting>
+
+          <calloutlist>
+            <callout arearefs="hm1">
+              <para><literal>name</literal> (optional): the column name
+              (default to the property name)</para>
+            </callout>
+
+            <callout arearefs="hm2">
+              <para><literal>unique</literal> (optional): set a unique
+              constraint on this column or not (default false)</para>
+            </callout>
+
+            <callout arearefs="hm3">
+              <para><literal>nullable</literal> (optional): set the column as
+              nullable (default true).</para>
+            </callout>
+
+            <callout arearefs="hm4">
+              <para><literal>insertable</literal> (optional): whether or not
+              the column will be part of the insert statement (default
+              true)</para>
+            </callout>
+
+            <callout arearefs="hm5">
+              <para><literal>updatable</literal> (optional): whether or not
+              the column will be part of the update statement (default
+              true)</para>
+            </callout>
+
+            <callout arearefs="hm6">
+              <para><literal>columnDefinition</literal> (optional): override
+              the sql DDL fragment for this particular column (non
+              portable)</para>
+            </callout>
+
+            <callout arearefs="hm7">
+              <para><literal>table</literal> (optional): define the targeted
+              table (default primary table)</para>
+            </callout>
+
+            <callout arearefs="hm8">
+              <para><literal><literal>length</literal></literal> (optional):
+              column length (default 255)</para>
+            </callout>
+
+            <callout arearefs="hm8">
+              <para><literal><literal>precision</literal></literal>
+              (optional): column decimal precision (default 0)</para>
+            </callout>
+
+            <callout arearefs="hm10">
+              <para><literal><literal>scale</literal></literal> (optional):
+              column decimal scale if useful (default 0)</para>
+            </callout>
+          </calloutlist>
+        </programlistingco>
+      </sect3>
+
+      <sect3>
+        <title>Embedded objects (aka components)</title>
+
+        <para>It is possible to declare an embedded component inside an entity
+        and even override its column mapping. Component classes have to be
+        annotated at the class level with the <literal>@Embeddable</literal>
+        annotation. It is possible to override the column mapping of an
+        embedded object for a particular entity using the
+        <literal>@Embedded</literal> and <literal>@AttributeOverride</literal>
+        annotation in the associated property:</para>
+
+        <programlisting>
+ at Entity
+public class Person implements Serializable {
+
+    // Persistent component using defaults
+    Address homeAddress;
+
+    @Embedded
+    @AttributeOverrides( {
+            @AttributeOverride(name="iso2", column = @Column(name="bornIso2") ),
+            @AttributeOverride(name="name", column = @Column(name="bornCountryName") )
+    } )
+    Country bornIn;
+    ...
+}
+            </programlisting>
+
+        <programlisting>
+ at Embeddable
+public class Address implements Serializable {
+    String city;
+    Country nationality; //no overriding here
+}
+            </programlisting>
+
+        <programlisting>
+ at Embeddable
+public class Country implements Serializable {
+    private String iso2;
+    @Column(name="countryName") private String name;
+
+    public String getIso2() { return iso2; }
+    public void setIso2(String iso2) { this.iso2 = iso2; }
+
+    
+    public String getName() { return name; }
+    public void setName(String name) { this.name = name; }
+    ...
+}
+            </programlisting>
+
+        <para>A embeddable object inherit the access type of its owning entity
+        (note that you can override that using the Hibernate specific
+        <literal>@AccessType</literal> annotations (see <xref
+        linkend="entity-hibspec" />).</para>
+
+        <para>The <literal>Person</literal> entity bean has two component
+        properties, <literal>homeAddress</literal> and
+        <literal>bornIn</literal>. <literal>homeAddress</literal> property has
+        not been annotated, but Hibernate will guess that it is a persistent
+        component by looking for the <literal>@Embeddable</literal> annotation
+        in the Address class. We also override the mapping of a column name
+        (to <literal>bornCountryName</literal>) with the
+        <literal>@Embedded</literal> and <literal>@AttributeOverride
+        </literal>annotations for each mapped attribute of
+        <literal>Country</literal>. As you can see, <literal>Country
+        </literal>is also a nested component of <literal>Address</literal>,
+        again using auto-detection by Hibernate and EJB3 defaults. Overriding
+        columns of embedded objects of embedded objects is currently not
+        supported in the EJB3 spec, however, Hibernate Annotations supports it
+        through dotted expressions.</para>
+
+        <para><programlisting>    @Embedded
+    @AttributeOverrides( {
+            @AttributeOverride(name="city", column = @Column(name="fld_city") )
+            @AttributeOverride(name="<emphasis role="bold">nationality.iso2</emphasis>", column = @Column(name="nat_Iso2") ),
+            @AttributeOverride(name="<emphasis role="bold">nationality.name</emphasis>", column = @Column(name="nat_CountryName") )
+            //nationality columns in homeAddress are overridden
+    } )
+    Address homeAddress;</programlisting>Hibernate Annotations supports one
+        more feature that is not explicitly supported by the EJB3
+        specification. You can annotate a embedded object with the
+        <literal>@MappedSuperclass</literal> annotation to make the superclass
+        properties persistent (see <literal>@MappedSuperclass</literal> for
+        more informations).</para>
+
+        <para>While not supported by the EJB3 specification, Hibernate
+        Annotations allows you to use association annotations in an embeddable
+        object (ie <literal>@*ToOne</literal> nor
+        <literal>@*ToMany</literal>). To override the association columns you
+        can use <literal>@AssociationOverride</literal>.</para>
+
+        <para>If you want to have the same embeddable object type twice in the
+        same entity, the column name defaulting will not work: at least one of
+        the columns will have to be explicit. Hibernate goes beyond the EJB3
+        spec and allows you to enhance the defaulting mechanism through the
+        <classname>NamingStrategy</classname>.
+        <classname>DefaultComponentSafeNamingStrategy</classname> is a small
+        improvement over the default EJB3NamingStrategy that allows embedded
+        objects to be defaulted even if used twice in the same entity.</para>
+      </sect3>
+
+      <sect3>
+        <title>Non-annotated property defaults</title>
+
+        <para>If a property is not annotated, the following rules
+        apply:</para>
+
+        <itemizedlist>
+          <listitem>
+             If the property is of a single type, it is mapped as @Basic 
+          </listitem>
+
+          <listitem>
+             Otherwise, if the type of the property is annotated as @Embeddable, it is mapped as @Embedded 
+          </listitem>
+
+          <listitem>
+             Otherwise, if the type of the property is Serializable, it is mapped as @Basic in a column holding the object in its serialized version 
+          </listitem>
+
+          <listitem>
+             Otherwise, if the type of the property is java.sql.Clob or java.sql.Blob, it is mapped as @Lob with the appropriate LobType 
+          </listitem>
+        </itemizedlist>
+      </sect3>
+    </sect2>
+
+    <sect2 id="entity-mapping-identifier" label=""
+           xreflabel="Mapping identifier properties">
+      <title>Mapping identifier properties</title>
+
+      <para>The <literal>@Id</literal> annotation lets you define which
+      property is the identifier of your entity bean. This property can be set
+      by the application itself or be generated by Hibernate (preferred). You
+      can define the identifier generation strategy thanks to the
+      <literal>@GeneratedValue</literal> annotation:</para>
+
+      <itemizedlist>
+        <listitem>
+           AUTO - either identity column, sequence or table depending on the underlying DB 
+        </listitem>
+
+        <listitem>
+           TABLE - table holding the id 
+        </listitem>
+
+        <listitem>
+           IDENTITY - identity column 
+        </listitem>
+
+        <listitem>
+           SEQUENCE - sequence 
+        </listitem>
+      </itemizedlist>
+
+      <para>Hibernate provides more id generators than the basic EJB3 ones.
+      Check <xref linkend="entity-hibspec" /> for more informations.</para>
+
+      <para>The following example shows a sequence generator using the
+      SEQ_STORE configuration (see below)</para>
+
+      <programlisting>
+ at Id @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQ_STORE")
+public Integer getId() { ... }
+         </programlisting>
+
+      <para>The next example uses the identity generator:</para>
+
+      <programlisting>
+ at Id @GeneratedValue(strategy=GenerationType.IDENTITY)
+public Long getId() { ... }
+         </programlisting>
+
+      <para>The <literal>AUTO</literal> generator is the preferred type for
+      portable applications (across several DB vendors). The identifier
+      generation configuration can be shared for several
+      <literal>@Id</literal> mappings with the generator attribute. There are
+      several configurations available through
+      <literal>@SequenceGenerator</literal> and
+      <literal>@TableGenerator</literal>. The scope of a generator can be the
+      application or the class. Class-defined generators are not visible
+      outside the class and can override application level generators.
+      Application level generators are defined at XML level (see <xref
+      linkend="xml-overriding" />):</para>
+
+      <programlisting>&lt;table-generator name="EMP_GEN"
+            table="GENERATOR_TABLE"
+            pk-column-name="key"
+            value-column-name="hi"
+            pk-column-value="EMP"
+            allocation-size="20"/&gt;
+
+//and the annotation equivalent
+
+ at javax.persistence.TableGenerator(
+    name="EMP_GEN",
+    table="GENERATOR_TABLE",
+    pkColumnName = "key",
+    valueColumnName = "hi"
+    pkColumnValue="EMP",
+    allocationSize=20
+)
+
+&lt;sequence-generator name="SEQ_GEN" 
+    sequence-name="my_sequence"
+    allocation-size="20"/&gt;
+
+//and the annotation equivalent
+
+ at javax.persistence.SequenceGenerator(
+    name="SEQ_GEN",
+    sequenceName="my_sequence",
+    allocationSize=20
+)
+         </programlisting>
+
+      <para>If JPA XML (like <filename>META-INF/orm.xml</filename>) is used to
+      define thegenerators, <literal>EMP_GEN</literal> and
+      <literal>SEQ_GEN</literal> are application level generators.
+      <literal>EMP_GEN</literal> defines a table based id generator using the
+      hilo algorithm with a <literal>max_lo</literal> of 20. The hi value is
+      kept in a <literal>table</literal> "<literal>GENERATOR_TABLE</literal>".
+      The information is kept in a row where <literal>pkColumnName</literal>
+      "key" is equals to <literal>pkColumnValue</literal>
+      "<literal>EMP</literal>" and column <literal>valueColumnName</literal>
+      "<literal>hi</literal>" contains the the next high value used.</para>
+
+      <para><literal>SEQ_GEN</literal> defines a sequence generator using a
+      sequence named <literal>my_sequence</literal>. The allocation size used
+      for this sequence based hilo algorithm is 20. Note that this version of
+      Hibernate Annotations does not handle <literal>initialValue</literal> in
+      the sequence generator. The default allocation size is 50, so if you
+      want to use a sequence and pickup the value each time, you must set the
+      allocation size to 1.</para>
+
+      <note>
+        <para>Package level definition is no longer supported by the EJB 3.0
+        specification. However, you can use the
+        <literal>@GenericGenerator</literal> at the package level (see <xref
+        linkend="entity-hibspec-identifier" />).</para>
+      </note>
+
+      <para>The next example shows the definition of a sequence generator in a
+      class scope:</para>
+
+      <programlisting>
+ at Entity
+ at javax.persistence.SequenceGenerator(
+    name="SEQ_STORE",
+    sequenceName="my_sequence"
+)
+public class Store implements Serializable {
+    private Long id;
+
+    @Id @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQ_STORE")
+    public Long getId() { return id; }
+}
+         </programlisting>
+
+      <para>This class will use a sequence named my_sequence and the SEQ_STORE
+      generator is not visible in other classes. Note that you can check the
+      Hibernate Annotations tests in the org.hibernate.test.metadata.id
+      package for more examples.</para>
+
+      <para>You can define a composite primary key through several
+      syntaxes:</para>
+
+      <itemizedlist>
+        <listitem>
+           annotate the component property as @Id and make the component class @Embeddable 
+        </listitem>
+
+        <listitem>
+           annotate the component property as @EmbeddedId 
+        </listitem>
+
+        <listitem>
+           annotate the class as @IdClass and annotate each property of the entity involved in the primary key with @Id 
+        </listitem>
+      </itemizedlist>
+
+      <para>While quite common to the EJB2 developer,
+      <literal>@IdClass</literal> is likely new for Hibernate users. The
+      composite primary key class corresponds to multiple fields or properties
+      of the entity class, and the names of primary key fields or properties
+      in the primary key class and those of the entity class must match and
+      their types must be the same. Let's look at an example:</para>
+
+      <programlisting>@Entity
+<emphasis role="bold">@IdClass(FootballerPk.class)</emphasis>
+public class Footballer {
+    //part of the id key
+    <emphasis role="bold">@Id</emphasis> public String getFirstname() {
+        return firstname;
+    }
+
+    public void setFirstname(String firstname) {
+        this.firstname = firstname;
+    }
+
+    //part of the id key
+    <emphasis role="bold">@Id</emphasis> public String getLastname() {
+        return lastname;
+    }
+
+    public void setLastname(String lastname) {
+        this.lastname = lastname;
+    }
+
+    public String getClub() {
+        return club;
+    }
+
+    public void setClub(String club) {
+        this.club = club;
+    }
+
+    //appropriate equals() and hashCode() implementation
+}
+
+ at Embeddable
+public class FootballerPk implements Serializable {
+    //same name and type as in Footballer
+    public String getFirstname() {
+        return firstname;
+    }
+
+    public void setFirstname(String firstname) {
+        this.firstname = firstname;
+    }
+
+    //same name and type as in Footballer
+    public String getLastname() {
+        return lastname;
+    }
+
+    public void setLastname(String lastname) {
+        this.lastname = lastname;
+    }
+
+    //appropriate equals() and hashCode() implementation
+}
+</programlisting>
+
+      <para>As you may have seen, <literal>@IdClass</literal> points to the
+      corresponding primary key class.</para>
+
+      <para>While not supported by the EJB3 specification, Hibernate allows
+      you to define associations inside a composite identifier. Simply use the
+      regular annotations for that</para>
+
+      <programlisting>@Entity
+ at AssociationOverride( name="id.channel", joinColumns = @JoinColumn(name="chan_id") )
+public class TvMagazin {
+    @EmbeddedId public TvMagazinPk id;
+    @Temporal(TemporalType.TIME) Date time;
+}
+
+ at Embeddable
+public class TvMagazinPk implements Serializable {
+    @ManyToOne
+    public Channel channel;
+    public String name;
+    @ManyToOne
+    public Presenter presenter;
+}
+</programlisting>
+    </sect2>
+
+    <sect2>
+      <title>Mapping inheritance</title>
+
+      <para>EJB3 supports the three types of inheritance:</para>
+
+      <itemizedlist>
+        <listitem>
+           Table per Class Strategy: the &lt;union-class&gt; element in Hibernate 
+        </listitem>
+
+        <listitem>
+           Single Table per Class Hierarchy Strategy: the &lt;subclass&gt; element in Hibernate 
+        </listitem>
+
+        <listitem>
+           Joined Subclass Strategy: the &lt;joined-subclass&gt; element in Hibernate 
+        </listitem>
+      </itemizedlist>
+
+      <para>The chosen strategy is declared at the class level of the top
+      level entity in the hierarchy using the <literal>@Inheritance</literal>
+      annotation.</para>
+
+      <note>
+        <para>Annotating interfaces is currently not supported.</para>
+      </note>
+
+      <sect3>
+        <title>Table per class</title>
+
+        <para>This strategy has many drawbacks (esp. with polymorphic queries
+        and associations) explained in the EJB3 spec, the Hibernate reference
+        documentation, Hibernate in Action, and many other places. Hibernate
+        work around most of them implementing this strategy using <literal>SQL
+        UNION</literal> queries. It is commonly used for the top level of an
+        inheritance hierarchy:</para>
+
+        <programlisting>
+ at Entity
+ at Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
+public class Flight implements Serializable {
+            </programlisting>
+
+        <para>This strategy support one to many associations provided that
+        they are bidirectional. This strategy does not support the
+        <literal>IDENTITY</literal> generator strategy: the id has to be
+        shared across several tables. Consequently, when using this strategy,
+        you should not use <literal>AUTO </literal>nor
+        <literal>IDENTITY</literal>.</para>
+      </sect3>
+
+      <sect3>
+        <title>Single table per class hierarchy</title>
+
+        <para>All properties of all super- and subclasses are mapped into the
+        same table, instances are distinguished by a special discriminator
+        column:</para>
+
+        <programlisting>
+ at Entity
+ at Inheritance(strategy=InheritanceType.SINGLE_TABLE)
+ at DiscriminatorColumn(
+    name="planetype",
+    discriminatorType=DiscriminatorType.STRING
+)
+ at DiscriminatorValue("Plane")
+public class Plane { ... }
+
+ at Entity
+ at DiscriminatorValue("A320")
+public class A320 extends Plane { ... }
+            </programlisting>
+
+        <para><classname>Plane</classname> is the superclass, it defines the
+        inheritance strategy <literal>InheritanceType.SINGLE_TABLE</literal>.
+        It also defines the discriminator column through the
+        <literal>@DiscriminatorColumn</literal> annotation, a discriminator
+        column can also define the discriminator type. Finally, the
+        <literal>@DiscriminatorValue</literal> annotation defines the value
+        used to differentiate a class in the hierarchy. All of these
+        attributes have sensible default values. The default name of the
+        discriminator column is <literal>DTYPE</literal>. The default
+        discriminator value is the entity name (as defined in
+        <literal>@Entity.name</literal>) for DiscriminatorType.STRING.
+        <classname>A320</classname> is a subclass; you only have to define
+        discriminator value if you don't want to use the default value. The
+        strategy and the discriminator type are implicit.</para>
+
+        <para><literal>@Inheritance</literal> and
+        <literal>@DiscriminatorColumn</literal> should only be defined at the
+        top of the entity hierarchy.</para>
+      </sect3>
+
+      <sect3>
+        <title>Joined subclasses</title>
+
+        <para>The<literal> @PrimaryKeyJoinColumn</literal> and
+        <literal>@PrimaryKeyJoinColumns</literal> annotations define the
+        primary key(s) of the joined subclass table:</para>
+
+        <programlisting>
+ at Entity
+ at Inheritance(strategy=InheritanceType.JOINED)
+public class Boat implements Serializable { ... }
+
+ at Entity
+public class Ferry extends Boat { ... }
+
+ at Entity
+ at PrimaryKeyJoinColumn(name="BOAT_ID")
+public class AmericaCupClass  extends Boat { ... }
+            </programlisting>
+
+        <para>All of the above entities use the <literal>JOINED</literal>
+        strategy, the <literal>Ferry</literal> table is joined with the
+        <literal>Boat</literal> table using the same primary key names. The
+        <literal>AmericaCupClass</literal> table is joined with
+        <literal>Boat</literal> using the join condition <code>Boat.id =
+        AmericaCupClass.BOAT_ID</code>.</para>
+      </sect3>
+
+      <sect3>
+        <title>Inherit properties from superclasses</title>
+
+        <para>This is sometimes useful to share common properties through a
+        technical or a business superclass without including it as a regular
+        mapped entity (ie no specific table for this entity). For that purpose
+        you can map them as <literal>@MappedSuperclass</literal>.</para>
+
+        <programlisting>@MappedSuperclass
+public class BaseEntity {
+    @Basic
+    @Temporal(TemporalType.TIMESTAMP)
+    public Date getLastUpdate() { ... }
+    public String getLastUpdater() { ... }
+    ...
+}
+
+ at Entity class Order extends BaseEntity {
+    @Id public Integer getId() { ... }
+    ...
+}</programlisting>
+
+        <para>In database, this hierarchy will be represented as an
+        <literal>Order</literal> table having the <literal>id</literal>,
+        <literal>lastUpdate</literal> and <literal>lastUpdater</literal>
+        columns. The embedded superclass property mappings are copied into
+        their entity subclasses. Remember that the embeddable superclass is
+        not the root of the hierarchy though.</para>
+
+        <note>
+          <para>Properties from superclasses not mapped as
+          <literal>@MappedSuperclass</literal> are ignored.</para>
+        </note>
+
+        <note>
+          <para>The access type (field or methods), is inherited from the root
+          entity, unless you use the Hibernate annotation
+          <literal>@AccessType</literal></para>
+        </note>
+
+        <note>
+          <para>The same notion can be applied to
+          <literal>@Embeddable</literal> objects to persist properties from
+          their superclasses. You also need to use
+          <literal>@MappedSuperclass</literal> to do that (this should not be
+          considered as a standard EJB3 feature though)</para>
+        </note>
+
+        <note>
+          <para>It is allowed to mark a class as
+          <literal>@MappedSuperclass</literal> in the middle of the mapped
+          inheritance hierarchy.</para>
+        </note>
+
+        <note>
+          <para>Any class in the hierarchy non annotated with
+          <literal>@MappedSuperclass</literal> nor <literal>@Entity</literal>
+          will be ignored.</para>
+        </note>
+
+        <para>You can override columns defined in entity superclasses at the
+        root entity level using the <literal>@AttributeOverride</literal>
+        annotation.</para>
+
+        <programlisting>@MappedSuperclass
+public class FlyingObject implements Serializable {
+
+    public int getAltitude() {
+        return altitude;
+    }
+
+    @Transient
+    public int getMetricAltitude() {
+        return metricAltitude;
+    }
+
+    @ManyToOne
+    public PropulsionType getPropulsion() {
+        return metricAltitude;
+    }
+    ...
+}
+
+ at Entity
+ at AttributeOverride( name="altitude", column = @Column(name="fld_altitude") )
+ at AssociationOverride( name="propulsion", joinColumns = @JoinColumn(name="fld_propulsion_fk") )
+public class Plane extends FlyingObject {
+    ...
+}</programlisting>
+
+        <para>The <literal>altitude</literal> property will be persisted in an
+        <literal>fld_altitude</literal> column of table
+        <literal>Plane</literal> and the propulsion association will be
+        materialized in a <literal>fld_propulsion_fk</literal> foreign key
+        column.</para>
+
+        <para>You can define <literal>@AttributeOverride</literal>(s) and
+        <literal>@AssociationOverride</literal>(s) on
+        <literal>@Entity</literal> classes,
+        <literal>@MappedSuperclass</literal> classes and properties pointing
+        to an <literal>@Embeddable</literal> object.</para>
+      </sect3>
+    </sect2>
+
+    <sect2 id="entity-mapping-association">
+      <title>Mapping entity bean associations/relationships</title>
+
+      <sect3>
+        <title>One-to-one</title>
+
+        <para>You can associate entity beans through a one-to-one relationship
+        using <literal>@OneToOne</literal>. There are three cases for
+        one-to-one associations: either the associated entities share the same
+        primary keys values, a foreign key is held by one of the entities
+        (note that this FK column in the database should be constrained unique
+        to simulate one-to-one multiplicity), or a association table is used
+        to store the link between the 2 entities (a unique constraint has to
+        be defined on each fk to ensure the one to one multiplicity)</para>
+
+        <para>First, we map a real one-to-one association using shared primary
+        keys:</para>
+
+        <programlisting>
+ at Entity
+public class Body {
+    @Id
+    public Long getId() { return id; }
+
+    @OneToOne(cascade = CascadeType.ALL)
+    @PrimaryKeyJoinColumn
+    public Heart getHeart() {
+        return heart;
+    }
+    ...
+}
+            </programlisting>
+
+        <programlisting>
+ at Entity
+public class Heart {
+    @Id
+    public Long getId() { ...}
+}
+            </programlisting>
+
+        <para>The one to one is marked as true by using the
+        <literal>@PrimaryKeyJoinColumn</literal> annotation.</para>
+
+        <para>In the following example, the associated entities are linked
+        through a foreign key column:</para>
+
+        <programlisting>
+ at Entity
+public class Customer implements Serializable {
+    @OneToOne(cascade = CascadeType.ALL)
+    <emphasis role="bold">@JoinColumn(name="passport_fk")</emphasis>
+    public Passport getPassport() {
+        ...
+    }
+
+ at Entity
+public class Passport implements Serializable {
+    @OneToOne(<emphasis role="bold">mappedBy = "passport"</emphasis>)
+    public Customer getOwner() {
+    ...
+}
+            </programlisting>
+
+        <para>A <classname>Customer</classname> is linked to a
+        <classname>Passport</classname>, with a foreign key column named
+        <literal>passport_fk</literal> in the <literal>Customer</literal>
+        table. The join column is declared with the
+        <literal>@JoinColumn</literal> annotation which looks like the
+        <literal>@Column</literal> annotation. It has one more parameters
+        named <literal>referencedColumnName</literal>. This parameter declares
+        the column in the targeted entity that will be used to the join. Note
+        that when using
+        <literal><literal>referencedColumnName</literal></literal> to a non
+        primary key column, the associated class has to be
+        <classname>Serializable</classname>. Also note that the
+        <literal><literal>referencedColumnName</literal></literal> to a non
+        primary key column has to be mapped to a property having a single
+        column (other cases might not work).</para>
+
+        <para>The association may be bidirectional. In a bidirectional
+        relationship, one of the sides (and only one) has to be the owner: the
+        owner is responsible for the association column(s) update. To declare
+        a side as <emphasis>not</emphasis> responsible for the relationship,
+        the attribute <literal>mappedBy</literal> is used.
+        <literal>mappedBy</literal> refers to the property name of the
+        association on the owner side. In our case, this is
+        <literal>passport</literal>. As you can see, you don't have to (must
+        not) declare the join column since it has already been declared on the
+        owners side.</para>
+
+        <para>If no <literal>@JoinColumn</literal> is declared on the owner
+        side, the defaults apply. A join column(s) will be created in the
+        owner table and its name will be the concatenation of the name of the
+        relationship in the owner side, <keycap>_</keycap> (underscore), and
+        the name of the primary key column(s) in the owned side. In this
+        example <literal>passport_id</literal> because the property name is
+        <literal>passport</literal> and the column id of <literal>Passport
+        </literal>is <literal>id</literal>.</para>
+
+        <para>The third possibility (using an association table) is very
+        exotic.</para>
+
+        <programlisting>
+ at Entity
+public class Customer implements Serializable {
+    @OneToOne(cascade = CascadeType.ALL)
+    <emphasis role="bold">@JoinTable(name = "CustomerPassports"
+        joinColumns = @JoinColumn(name="customer_fk"),
+        inverseJoinColumns = @JoinColumns(name="passport_fk")</emphasis>
+    )
+    public Passport getPassport() {
+        ...
+    }
+
+ at Entity
+public class Passport implements Serializable {
+    @OneToOne(<emphasis role="bold">mappedBy = "passport"</emphasis>)
+    public Customer getOwner() {
+    ...
+}
+            </programlisting>
+
+        <para>A <classname>Customer</classname> is linked to a
+        <classname>Passport</classname> through a association table named
+        <literal>CustomerPassports</literal> ; this association table has a
+        foreign key column named <literal>passport_fk</literal> pointing to
+        the <literal>Passport</literal> table (materialized by the
+        <literal>inverseJoinColumn</literal>, and a foreign key column named
+        <literal>customer_fk</literal> pointing to the
+        <literal>Customer</literal> table materialized by the
+        <literal>joinColumns</literal> attribute.</para>
+
+        <para>You must declare the join table name and the join columns
+        explicitly in such a mapping.</para>
+      </sect3>
+
+      <sect3>
+        <title>Many-to-one</title>
+
+        <para>Many-to-one associations are declared at the property level with
+        the annotation <literal>@ManyToOne</literal>:</para>
+
+        <programlisting>
+ at Entity()
+public class Flight implements Serializable {
+    <emphasis role="bold">@ManyToOne</emphasis>( cascade = {CascadeType.PERSIST, CascadeType.MERGE} )
+    @JoinColumn(name="COMP_ID")
+    public Company getCompany() {
+        return company;
+    }
+    ...
+}
+            </programlisting>
+
+        <para>The <literal>@JoinColumn</literal> attribute is optional, the
+        default value(s) is like in one to one, the concatenation of the name
+        of the relationship in the owner side, <keycap>_</keycap>
+        (underscore), and the name of the primary key column in the owned
+        side. In this example <literal>company_id</literal> because the
+        property name is <literal>company</literal> and the column id of
+        Company is <literal>id</literal>.</para>
+
+        <para><literal>@ManyToOne</literal> has a parameter named
+        <literal>targetEntity</literal> which describes the target entity
+        name. You usually don't need this parameter since the default value
+        (the type of the property that stores the association) is good in
+        almost all cases. However this is useful when you want to use
+        interfaces as the return type instead of the regular entity.</para>
+
+        <programlisting>
+ at Entity()
+public class Flight implements Serializable {
+    @ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE}, <emphasis
+            role="bold">targetEntity=CompanyImpl.class</emphasis> )
+    @JoinColumn(name="COMP_ID")
+    public Company getCompany() {
+        return company;
+    }
+    ...
+}
+
+public interface Company {
+    ...
+            </programlisting>
+
+        <para>You can alse map a many to one association through an
+        association table. This association table described by the
+        <literal>@JoinTable</literal> annotation will contains a foreign key
+        referencing back the entity table (through
+        <literal>@JoinTable.joinColumns</literal>) and a a foreign key
+        referencing the target entity table (through
+        <literal>@JoinTable.inverseJoinColumns</literal>).</para>
+
+        <programlisting>
+ at Entity()
+public class Flight implements Serializable {
+    @ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE} )
+    <emphasis role="bold">@JoinTable(name="Flight_Company",
+        joinColumns = @JoinColumn(name="FLIGHT_ID"),
+        inverseJoinColumns = @JoinColumns(name="COMP_ID")
+    )</emphasis>
+    public Company getCompany() {
+        return company;
+    }
+    ...
+}
+            </programlisting>
+      </sect3>
+
+      <sect3 id="entity-mapping-association-collections" revision="1">
+        <title>Collections</title>
+
+        <sect4 id="entity-mapping-association-collections-overview"
+               revision="1">
+          <title>Overview</title>
+
+          <para>You can map <classname>Collection</classname>,
+          <literal>List</literal> (ie ordered lists, not indexed lists),
+          <literal>Map</literal> and <classname>Set</classname>. The EJB3
+          specification describes how to map an ordered list (ie a list
+          ordered at load time) using
+          <literal>@javax.persistence.OrderBy</literal> annotation: this
+          annotation takes into parameter a list of comma separated (target
+          entity) properties to order the collection by (eg <code>firstname
+          asc, age desc</code>), if the string is empty, the collection will
+          be ordered by id. For true indexed collections, please refer to the
+          <xref linkend="entity-hibspec" />. EJB3 allows you to map Maps using
+          as a key one of the target entity property using
+          <literal>@MapKey(name="myProperty")</literal> (myProperty is a
+          property name in the target entity). When using
+          <literal>@MapKey</literal> (without property name), the target
+          entity primary key is used. The map key uses the same column as the
+          property pointed out: there is no additional column defined to hold
+          the map key, and it does make sense since the map key actually
+          represent a target property. Be aware that once loaded, the key is
+          no longer kept in sync with the property, in other words, if you
+          change the property value, the key will not change automatically in
+          your Java model (for true map support please refers to <xref
+          linkend="entity-hibspec" />). Many people confuse
+          <literal>&lt;map&gt;</literal> capabilities and
+          <literal>@MapKey</literal> ones. These are two different features.
+          <literal>@MapKey</literal> still has some limitations, please check
+          the forum or the JIRA tracking system for more informations.</para>
+
+          <para>Hibernate has several notions of collections.</para>
+
+          <para></para>
+
+          <table>
+            <title>Collections semantics</title>
+
+            <tgroup cols="3">
+              <colspec colname="c1" />
+
+              <colspec colname="c2" />
+
+              <colspec colname="c3" colnum="2" />
+
+              <thead>
+                <row>
+                  <entry>Semantic</entry>
+
+                  <entry>java representation</entry>
+
+                  <entry>annotations</entry>
+                </row>
+              </thead>
+
+              <tbody>
+                <row>
+                  <entry>Bag semantic</entry>
+
+                  <entry>java.util.List, java.util.Collection</entry>
+
+                  <entry>@org.hibernate.annotations.CollectionOfElements or
+                  @OneToMany or @ManyToMany</entry>
+                </row>
+
+                <row>
+                  <entry>Bag semantic with primary key (withtout the
+                  limitations of Bag semantic)</entry>
+
+                  <entry>java.util.List, java.util.Collection</entry>
+
+                  <entry>(@org.hibernate.annotations.CollectionOfElements or
+                  @OneToMany or @ManyToMany) and @CollectionId</entry>
+                </row>
+
+                <row>
+                  <entry>List semantic</entry>
+
+                  <entry>java.util.List</entry>
+
+                  <entry>(@org.hibernate.annotations.CollectionOfElements or
+                  @OneToMany or @ManyToMany) and
+                  @org.hibernate.annotations.IndexColumn</entry>
+                </row>
+
+                <row>
+                  <entry>Set semantic</entry>
+
+                  <entry>java.util.Set</entry>
+
+                  <entry>@org.hibernate.annotations.CollectionOfElements or
+                  @OneToMany or @ManyToMany</entry>
+                </row>
+
+                <row>
+                  <entry>Map semantic</entry>
+
+                  <entry>java.util.Map</entry>
+
+                  <entry>(@org.hibernate.annotations.CollectionOfElements or
+                  @OneToMany or @ManyToMany) and (nothing or
+                  @org.hibernate.annotations.MapKey/MapKeyManyToMany for true
+                  map support, OR @javax.persistence.MapKey</entry>
+                </row>
+              </tbody>
+            </tgroup>
+          </table>
+
+          <remark>So specifically, java.util.List collections without
+          @org.hibernate.annotations.IndexColumn are going to be considered as
+          bags.</remark>
+
+          <para>Collection of primitive, core type or embedded objects is not
+          supported by the EJB3 specification. Hibernate Annotations allows
+          them however (see <xref linkend="entity-hibspec" />).</para>
+
+          <programlisting>@Entity public class City {
+    @OneToMany(mappedBy="city")
+    <emphasis role="bold">@OrderBy("streetName")</emphasis>
+    public List&lt;Street&gt; getStreets() {
+        return streets;
+    }
+...
+}
+
+ at Entity public class Street {
+    <emphasis role="bold">public String getStreetName()</emphasis> {
+        return streetName;
+    }
+
+    @ManyToOne
+    public City getCity() {
+        return city;
+    }
+    ...
+}
+
+
+ at Entity
+public class Software {
+    @OneToMany(mappedBy="software")
+    <emphasis role="bold">@MapKey(name="codeName")</emphasis>
+    public Map&lt;String, Version&gt; getVersions() {
+        return versions;
+    }
+...
+}
+
+ at Entity
+ at Table(name="tbl_version")
+public class Version {
+    <emphasis role="bold">public String getCodeName()</emphasis> {...}
+
+    @ManyToOne
+    public Software getSoftware() { ... }
+...
+}</programlisting>
+
+          <para>So <literal>City</literal> has a collection of
+          <literal>Street</literal>s that are ordered by
+          <literal>streetName</literal> (of <literal>Street</literal>) when
+          the collection is loaded. <literal>Software</literal> has a map of
+          <literal>Version</literal>s which key is the
+          <literal>Version</literal> <literal>codeName</literal>.</para>
+
+          <para>Unless the collection is a generic, you will have to define
+          <literal>targetEntity</literal>. This is a annotation attribute that
+          take the target entity class as a value.</para>
+        </sect4>
+
+        <sect4 id="entity-mapping-association-collection-onetomany"
+               revision="2">
+          <title>One-to-many</title>
+
+          <para>One-to-many associations are declared at the property level
+          with the annotation <literal>@OneToMany</literal>. One to many
+          associations may be bidirectional.</para>
+
+          <sect5>
+            <title>Bidirectional</title>
+
+            <para>Since many to one are (almost) always the owner side of a
+            bidirectional relationship in the EJB3 spec, the one to many
+            association is annotated by <literal>@OneToMany( mappedBy=...
+            )</literal></para>
+
+            <programlisting>@Entity
+public class Troop {
+    @OneToMany(mappedBy="troop")
+    public Set&lt;Soldier&gt; getSoldiers() {
+    ...
+}
+
+ at Entity
+public class Soldier {
+    @ManyToOne
+    @JoinColumn(name="troop_fk")
+    public Troop getTroop() {
+    ...
+}              </programlisting>
+
+            <para><classname>Troop</classname> has a bidirectional one to many
+            relationship with <literal>Soldier</literal> through the
+            <literal>troop</literal> property. You don't have to (must not)
+            define any physical mapping in the <literal>mappedBy</literal>
+            side.</para>
+
+            <para>To map a bidirectional one to many, with the one-to-many
+            side as the owning side, you have to remove the
+            <literal>mappedBy</literal> element and set the many to one
+            <literal>@JoinColumn</literal> as insertable and updatable to
+            false. This solution is obviously not optimized and will produce
+            some additional UPDATE statements.</para>
+
+            <programlisting>@Entity
+public class Troop {
+    @OneToMany
+    @JoinColumn(name="troop_fk") //we need to duplicate the physical information
+    public Set&lt;Soldier&gt; getSoldiers() {
+    ...
+}
+
+ at Entity
+public class Soldier {
+    @ManyToOne
+    @JoinColumn(name="troop_fk", insertable=false, updatable=false)
+    public Troop getTroop() {
+    ...
+}</programlisting>
+          </sect5>
+
+          <sect5>
+            <title>Unidirectional</title>
+
+            <para>A unidirectional one to many using a foreign key column in
+            the owned entity is not that common and not really recommended. We
+            strongly advise you to use a join table for this kind of
+            association (as explained in the next section). This kind of
+            association is described through a
+            <literal>@JoinColumn</literal></para>
+
+            <programlisting>
+ at Entity
+public class Customer implements Serializable {
+    @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
+    @JoinColumn(name="CUST_ID")
+    public Set&lt;Ticket&gt; getTickets() {
+    ...
+}
+
+ at Entity
+public class Ticket implements Serializable {
+    ... //no bidir
+}
+               </programlisting>
+
+            <para><literal>Customer</literal> describes a unidirectional
+            relationship with <literal>Ticket</literal> using the join column
+            <literal>CUST_ID</literal>.</para>
+          </sect5>
+
+          <sect5>
+            <title>Unidirectional with join table</title>
+
+            <para>A unidirectional one to many with join table is much
+            preferred. This association is described through an
+            <literal>@JoinTable</literal>.</para>
+
+            <programlisting>
+ at Entity
+public class Trainer {
+    @OneToMany
+    @JoinTable(
+            name="TrainedMonkeys",
+            joinColumns = { @JoinColumn( name="trainer_id") },
+            inverseJoinColumns = @JoinColumn( name="monkey_id")
+    )
+    public Set&lt;Monkey&gt; getTrainedMonkeys() {
+    ...
+}
+
+ at Entity
+public class Monkey {
+    ... //no bidir
+}
+               </programlisting>
+
+            <para><literal>Trainer</literal> describes a unidirectional
+            relationship with <classname>Monkey</classname> using the join
+            table <classname>TrainedMonkeys</classname>, with a foreign key
+            <literal>trainer_id</literal> to <literal>Trainer</literal>
+            (<literal>joinColumns</literal>) and a foreign key
+            <literal>monkey_id</literal> to <literal>Monkey</literal>
+            (<literal>inversejoinColumns</literal>).</para>
+          </sect5>
+
+          <sect5 id="entity-mapping-association-collection-manytomany-default"
+                 revision="1">
+            <title>Defaults</title>
+
+            <para>Without describing any physical mapping, a unidirectional
+            one to many with join table is used. The table name is the
+            concatenation of the owner table name, <keycap>_</keycap>, and the
+            other side table name. The foreign key name(s) referencing the
+            owner table is the concatenation of the owner table,
+            <keycap>_</keycap>, and the owner primary key column(s) name. The
+            foreign key name(s) referencing the other side is the
+            concatenation of the owner property name, <keycap>_</keycap>, and
+            the other side primary key column(s) name. A unique constraint is
+            added to the foreign key referencing the other side table to
+            reflect the one to many.</para>
+
+            <programlisting>
+ at Entity
+public class Trainer {
+    @OneToMany
+    public Set&lt;Tiger&gt; getTrainedTigers() {
+    ...
+}
+
+ at Entity
+public class Tiger {
+    ... //no bidir
+}
+               </programlisting>
+
+            <para><classname>Trainer</classname> describes a unidirectional
+            relationship with <classname>Tiger</classname> using the join
+            table <literal>Trainer_Tiger</literal>, with a foreign key
+            <literal>trainer_id</literal> to <literal>Trainer</literal> (table
+            name, <keycap>_</keycap>, trainer id) and a foreign key
+            <literal>trainedTigers_id</literal> to <literal>Monkey</literal>
+            (property name, <keycap>_</keycap>, Tiger primary column).</para>
+          </sect5>
+        </sect4>
+
+        <sect4 id="eentity-mapping-association-collection-manytomany"
+               revision="">
+          <title>Many-to-many</title>
+
+          <sect5>
+            <title>Definition</title>
+
+            <para>A many-to-many association is defined logically using the
+            <literal>@ManyToMany</literal> annotation. You also have to
+            describe the association table and the join conditions using the
+            <literal>@JoinTable</literal> annotation. If the association is
+            bidirectional, one side has to be the owner and one side has to be
+            the inverse end (ie. it will be ignored when updating the
+            relationship values in the association table):</para>
+
+            <programlisting>
+ at Entity
+public class Employer implements Serializable {
+    @ManyToMany(
+        targetEntity=org.hibernate.test.metadata.manytomany.Employee.class,
+        cascade={CascadeType.PERSIST, CascadeType.MERGE}
+    )
+    @JoinTable(
+        name="EMPLOYER_EMPLOYEE",
+        joinColumns={@JoinColumn(name="EMPER_ID")},
+        inverseJoinColumns={@JoinColumn(name="EMPEE_ID")}
+    )
+    public Collection getEmployees() {
+        return employees;
+    }
+    ...
+}
+               </programlisting>
+
+            <programlisting>
+ at Entity
+public class Employee implements Serializable {
+    @ManyToMany(
+        cascade={CascadeType.PERSIST, CascadeType.MERGE},
+        mappedBy="employees"
+        targetEntity=Employer.class
+    )
+    public Collection getEmployers() {
+        return employers;
+    }
+}
+               </programlisting>
+
+            <para>We've already shown the many declarations and the detailed
+            attributes for associations. We'll go deeper in the
+            <literal>@JoinTable</literal> description, it defines a
+            <literal>name</literal>, an array of join columns (an array in
+            annotation is defined using { A, B, C }), and an array of inverse
+            join columns. The latter ones are the columns of the association
+            table which refer to the <classname>Employee</classname> primary
+            key (the "other side").</para>
+
+            <para>As seen previously, the other side don't have to (must not)
+            describe the physical mapping: a simple
+            <literal>mappedBy</literal> argument containing the owner side
+            property name bind the two.</para>
+          </sect5>
+
+          <sect5>
+            <title>Default values</title>
+
+            <para>As any other annotations, most values are guessed in a many
+            to many relationship. Without describing any physical mapping in a
+            unidirectional many to many the following rules applied. The table
+            name is the concatenation of the owner table name,
+            <keycap>_</keycap> and the other side table name. The foreign key
+            name(s) referencing the owner table is the concatenation of the
+            owner table name, <keycap>_</keycap> and the owner primary key
+            column(s). The foreign key name(s) referencing the other side is
+            the concatenation of the owner property name, <keycap>_</keycap>,
+            and the other side primary key column(s). These are the same rules
+            used for a unidirectional one to many relationship.</para>
+
+            <programlisting>
+ at Entity
+public class Store {
+    @ManyToMany(cascade = CascadeType.PERSIST)
+    public Set&lt;City&gt; getImplantedIn() {
+        ...
+    }
+}
+
+ at Entity
+public class City {
+    ... //no bidirectional relationship
+}
+               </programlisting>
+
+            <para>A <literal>Store_City</literal> is used as the join table.
+            The <literal>Store_id</literal> column is a foreign key to the
+            <literal>Store</literal> table. The
+            <literal>implantedIn_id</literal> column is a foreign key to the
+            <literal>City</literal> table.</para>
+
+            <para>Without describing any physical mapping in a bidirectional
+            many to many the following rules applied. The table name is the
+            concatenation of the owner table name, <keycap>_</keycap> and the
+            other side table name. The foreign key name(s) referencing the
+            owner table is the concatenation of the other side property name,
+            <keycap>_</keycap>, and the owner primary key column(s). The
+            foreign key name(s) referencing the other side is the
+            concatenation of the owner property name, <keycap>_</keycap>, and
+            the other side primary key column(s). These are the same rules
+            used for a unidirectional one to many relationship.</para>
+
+            <programlisting>
+ at Entity
+public class Store {
+    @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
+    public Set&lt;Customer&gt; getCustomers() {
+        ...
+    }
+}
+
+ at Entity
+public class Customer {
+    @ManyToMany(mappedBy="customers")
+    public Set&lt;Store&gt; getStores() {
+        ...
+    }
+}
+               </programlisting>
+
+            <para>A <literal>Store_Customer</literal> is used as the join
+            table. The <literal>stores_id</literal> column is a foreign key to
+            the <literal>Store</literal> table. The
+            <literal>customers_id</literal> column is a foreign key to the
+            <literal>Customer</literal> table.</para>
+          </sect5>
+        </sect4>
+      </sect3>
+
+      <sect3>
+        <title>Transitive persistence with cascading</title>
+
+        <para>You probably have noticed the <literal>cascade</literal>
+        attribute taking an array of <classname>CascadeType</classname> as a
+        value. The cascade concept in EJB3 is very is similar to the
+        transitive persistence and cascading of operations in Hibernate, but
+        with slightly different semantics and cascading types:</para>
+
+        <itemizedlist>
+          <listitem>
+             CascadeType.PERSIST: cascades the persist (create) operation to associated entities persist() is called or if the entity is managed 
+          </listitem>
+
+          <listitem>
+             CascadeType.MERGE: cascades the merge operation to associated entities if merge() is called or if the entity is managed 
+          </listitem>
+
+          <listitem>
+             CascadeType.REMOVE: cascades the remove operation to associated entities if delete() is called 
+          </listitem>
+
+          <listitem>
+             CascadeType.REFRESH: cascades the refresh operation to associated entities if refresh() is called 
+          </listitem>
+
+          <listitem>
+             CascadeType.ALL: all of the above 
+          </listitem>
+        </itemizedlist>
+
+        <para>Please refer to the chapter 6.3 of the EJB3 specification for
+        more information on cascading and create/merge semantics.</para>
+      </sect3>
+
+      <sect3 id="entity-mapping-association-fetching" revision="1">
+        <title>Association fetching</title>
+
+        <para>You have the ability to either eagerly or lazily fetch
+        associated entities. The <literal>fetch</literal> parameter can be set
+        to <literal>FetchType.LAZY</literal> or
+        <literal>FetchType.EAGER</literal>. <literal>EAGER</literal> will try
+        to use an outer join select to retrieve the associated object, while
+        <literal>LAZY</literal> will only trigger a select when the associated
+        object is accessed for the first time. <literal>@OneToMany</literal>
+        and <literal>@ManyToMany</literal> associations are defaulted to
+        <literal>LAZY</literal> and <literal>@OneToOne</literal> and
+        <literal>@ManyToOne</literal> are defaulted to
+        <literal>EAGER</literal>. For more information about static fetching,
+        check <xref linkend="entity-hibspec-singleassoc-fetching" />.</para>
+
+        <para>The recommanded approach is to use <literal>LAZY</literal> onn
+        all static fetching definitions and override this choice dynamically
+        through JPA-QL. JPA-QL has a <literal>fetch</literal> keyword that
+        allows you to override laziness when doing a particular query. This is
+        very useful to improve performance and is decided on a use case to use
+        case basis.</para>
+      </sect3>
+    </sect2>
+
+    <sect2>
+      <title>Mapping composite primary and foreign keys</title>
+
+      <para>Composite primary keys use a embedded class as the primary key
+      representation, so you'd use the <literal>@Id</literal> and
+      <literal>@Embeddable</literal> annotations. Alternatively, you can use
+      the <literal>@EmbeddedId</literal> annotation. Note that the dependent
+      class has to be serializable and implements
+      <methodname>equals()</methodname>/<methodname>hashCode()</methodname>.
+      You can also use <literal>@IdClass</literal> as described in <xref
+      linkend="entity-mapping-identifier" />.</para>
+
+      <programlisting>
+ at Entity
+public class RegionalArticle implements Serializable {
+
+    @Id
+    public RegionalArticlePk getPk() { ... }
+}
+
+ at Embeddable
+public class RegionalArticlePk implements Serializable { ... }
+         </programlisting>
+
+      <para>or alternatively</para>
+
+      <programlisting>
+ at Entity
+public class RegionalArticle implements Serializable {
+
+    @EmbeddedId
+    public RegionalArticlePk getPk() { ... }
+}
+
+public class RegionalArticlePk implements Serializable { ... }
+         </programlisting>
+
+      <para><literal>@Embeddable</literal> inherit the access type of its
+      owning entity unless the Hibernate specific annotation
+      <literal>@AccessType</literal> is used. Composite foreign keys (if not
+      using the default sensitive values) are defined on associations using
+      the <literal>@JoinColumns</literal> element, which is basically an array
+      of <literal>@JoinColumn</literal>. It is considered a good practice to
+      express <literal>referencedColumnNames</literal> explicitly. Otherwise,
+      Hibernate will suppose that you use the same order of columns as in the
+      primary key declaration.</para>
+
+      <programlisting>
+ at Entity
+public class Parent implements Serializable {
+    @Id
+    public ParentPk id;
+    public int age;
+
+    @OneToMany(cascade=CascadeType.ALL)
+    @JoinColumns ({
+        @JoinColumn(name="parentCivility", referencedColumnName = "isMale"),
+        @JoinColumn(name="parentLastName", referencedColumnName = "lastName"),
+        @JoinColumn(name="parentFirstName", referencedColumnName = "firstName")
+    })
+    public Set&lt;Child&gt; children; //unidirectional
+    ...
+}
+         </programlisting>
+
+      <programlisting>
+ at Entity
+public class Child implements Serializable {
+    @Id @GeneratedValue
+    public Integer id;
+
+    @ManyToOne
+    @JoinColumns ({
+        @JoinColumn(name="parentCivility", referencedColumnName = "isMale"),
+        @JoinColumn(name="parentLastName", referencedColumnName = "lastName"),
+        @JoinColumn(name="parentFirstName", referencedColumnName = "firstName")
+    })
+    public Parent parent; //unidirectional
+}
+         </programlisting>
+
+      <programlisting>
+ at Embeddable
+public class ParentPk implements Serializable {
+    String firstName;
+    String lastName;
+    ...
+}
+         </programlisting>
+
+      <para>Note the explicit usage of the
+      <literal>referencedColumnName</literal>.</para>
+    </sect2>
+
+    <sect2>
+      <title>Mapping secondary tables</title>
+
+      <para>You can map a single entity bean to several tables using the
+      <literal>@SecondaryTable</literal> or
+      <literal>@SecondaryTables</literal> class level annotations. To express
+      that a column is in a particular table, use the <literal>table</literal>
+      parameter of <literal>@Column</literal> or
+      <literal>@JoinColumn</literal>.</para>
+
+      <programlisting>
+ at Entity
+ at Table(name="MainCat")
+<emphasis role="bold">@SecondaryTables({
+    @SecondaryTable(name="Cat1", pkJoinColumns={
+        @PrimaryKeyJoinColumn(name="cat_id", referencedColumnName="id")
+    ),
+    @SecondaryTable(name="Cat2", uniqueConstraints={@UniqueConstraint(columnNames={"storyPart2"})})
+})</emphasis>
+public class Cat implements Serializable {
+
+    private Integer id;
+    private String name;
+    private String storyPart1;
+    private String storyPart2;
+
+    @Id @GeneratedValue
+    public Integer getId() {
+        return id;
+    }
+
+    public String getName() {
+        return name;
+    }
+    
+    <emphasis role="bold">@Column(table="Cat1")</emphasis>
+    public String getStoryPart1() {
+        return storyPart1;
+    }
+
+    <emphasis role="bold">@Column(table="Cat2")</emphasis>
+    public String getStoryPart2() {
+        return storyPart2;
+    }
+</programlisting>
+
+      <para>In this example, <literal>name</literal> will be in
+      <literal>MainCat</literal>. <literal>storyPart1</literal> will be in
+      <literal>Cat1</literal> and <literal>storyPart2</literal> will be in
+      <literal>Cat2</literal>. <literal>Cat1</literal> will be joined to
+      <literal>MainCat</literal> using the <literal>cat_id</literal> as a
+      foreign key, and <literal>Cat2</literal> using <literal>id</literal> (ie
+      the same column name, the <literal>MainCat</literal> id column has).
+      Plus a unique constraint on <literal>storyPart2</literal> has been
+      set.</para>
+
+      <para>Check out the JBoss EJB 3 tutorial or the Hibernate Annotations
+      unit test suite for more examples.</para>
+    </sect2>
+  </sect1>
+
+  <sect1 id="entity-mapping-query">
+    <title>Mapping Queries</title>
+
+    <sect2 id="entity-mapping-query-hql" label="Mapping JPAQL/HQL queries"
+           revision="1">
+      <title>Mapping JPAQL/HQL queries</title>
+
+      <para>You can map EJBQL/HQL queries using annotations.
+      <literal>@NamedQuery</literal> and <literal>@NamedQueries</literal> can
+      be defined at the class level or in a JPA XML file. However their
+      definitions are global to the session factory/entity manager factory
+      scope. A named query is defined by its name and the actual query
+      string.</para>
+
+      <programlisting>&lt;entity-mappings&gt;
+    &lt;named-query name="plane.getAll"&gt;
+        &lt;query&gt;select p from Plane p&lt;/query&gt;
+    &lt;/named-query&gt;
+    ...
+&lt;/entity-mappings&gt;
+...
+
+ at Entity
+ at NamedQuery(name="night.moreRecentThan", query="select n from Night n where n.date &gt;= :date")
+public class Night {
+    ...
+}
+
+public class MyDao {
+    doStuff() {
+        Query q = s.getNamedQuery("night.moreRecentThan");
+        q.setDate( "date", aMonthAgo );
+        List results = q.list();
+        ...
+    }
+    ...
+}
+        </programlisting>
+
+      <para>You can also provide some hints to a query through an array of
+      <literal>QueryHint</literal> through a <literal>hints</literal>
+      attribute.</para>
+
+      <para>The availabe Hibernate hints are</para>
+
+      <para></para>
+
+      <table>
+        <title>Query hints</title>
+
+        <tgroup cols="2">
+          <thead>
+            <colspec colname="c1" />
+
+            <colspec colname="c2" colnum="2" />
+
+            <row>
+              <entry>hint</entry>
+
+              <entry colname="c2">description</entry>
+            </row>
+          </thead>
+
+          <tbody>
+            <row>
+              <entry>org.hibernate.cacheable</entry>
+
+              <entry>Whether the query should interact with the second level
+              cache (defualt to false)</entry>
+            </row>
+
+            <row>
+              <entry>org.hibernate.cacheRegion</entry>
+
+              <entry>Cache region name (default used otherwise)</entry>
+            </row>
+
+            <row>
+              <entry>org.hibernate.timeout</entry>
+
+              <entry>Query timeout</entry>
+            </row>
+
+            <row>
+              <entry>org.hibernate.fetchSize</entry>
+
+              <entry>resultset fetch size</entry>
+            </row>
+
+            <row>
+              <entry>org.hibernate.flushMode</entry>
+
+              <entry>Flush mode used for this query</entry>
+            </row>
+
+            <row>
+              <entry>org.hibernate.cacheMode</entry>
+
+              <entry>Cache mode used for this query</entry>
+            </row>
+
+            <row>
+              <entry>org.hibernate.readOnly</entry>
+
+              <entry>Entities loaded by this query should be in read only mode
+              or not (default to false)</entry>
+            </row>
+
+            <row>
+              <entry>org.hibernate.comment</entry>
+
+              <entry>Query comment added to the generated SQL</entry>
+            </row>
+          </tbody>
+        </tgroup>
+      </table>
+    </sect2>
+
+    <sect2 id="entity-mapping-query-native" revision="2">
+      <title>Mapping native queries</title>
+
+      <para>You can also map a native query (ie a plain SQL query). To achieve
+      that, you need to describe the SQL resultset structure using
+      <literal>@SqlResultSetMapping</literal> (or
+      <literal>@SqlResultSetMappings</literal> if you plan to define several
+      resulset mappings). Like <literal>@NamedQuery</literal>, a
+      <literal>@SqlResultSetMapping</literal> can be defined at class level or
+      in a JPA XML file. However its scope is global to the
+      application.</para>
+
+      <para>As we will see, a <literal>resultSetMapping</literal> parameter is
+      defined in <literal>@NamedNativeQuery</literal>, it represents the name
+      of a defined <literal>@SqlResultSetMapping</literal>. The resultset
+      mapping declares the entities retrieved by this native query. Each field
+      of the entity is bound to an SQL alias (or column name). All fields of
+      the entity including the ones of subclasses and the foreign key columns
+      of related entities have to be present in the SQL query. Field
+      definitions are optional provided that they map to the same column name
+      as the one declared on the class property.</para>
+
+      <para><programlisting>@NamedNativeQuery(name="night&amp;area", query="select night.id nid, night.night_duration, "
+    + " night.night_date, area.id aid, night.area_id, area.name "
+    + "from Night night, Area area where night.area_id = area.id", <emphasis
+            role="bold">resultSetMapping="joinMapping"</emphasis>)
+ at SqlResultSetMapping(name="joinMapping", entities={
+    @EntityResult(entityClass=org.hibernate.test.annotations.query.Night.class, fields = {
+        @FieldResult(name="id", column="nid"),
+        @FieldResult(name="duration", column="night_duration"),
+        @FieldResult(name="date", column="night_date"),
+        @FieldResult(name="area", column="area_id"),
+        discriminatorColumn="disc"
+    }),
+    @EntityResult(entityClass=org.hibernate.test.annotations.query.Area.class, fields = {
+        @FieldResult(name="id", column="aid"),
+        @FieldResult(name="name", column="name")
+    })
+    }
+)</programlisting></para>
+
+      <para>In the above example, the <literal>night&amp;area</literal> named
+      query use the <literal>joinMapping</literal> result set mapping. This
+      mapping returns 2 entities, <literal>Night</literal> and
+      <literal>Area</literal>, each property is declared and associated to a
+      column name, actually the column name retrieved by the query. Let's now
+      see an implicit declaration of the property / column.</para>
+
+      <programlisting>@Entity
+<emphasis role="bold">@SqlResultSetMapping(name="implicit", entities=@EntityResult(entityClass=org.hibernate.test.annotations.query.SpaceShip.class))
+ at NamedNativeQuery(name="implicitSample", query="select * from SpaceShip", resultSetMapping="implicit")</emphasis>
+public class SpaceShip {
+    private String name;
+    private String model;
+    private double speed;
+
+    @Id
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    @Column(name="model_txt")
+    public String getModel() {
+        return model;
+    }
+
+    public void setModel(String model) {
+        this.model = model;
+    }
+
+    public double getSpeed() {
+        return speed;
+    }
+
+    public void setSpeed(double speed) {
+        this.speed = speed;
+    }
+}</programlisting>
+
+      <para>In this example, we only describe the entity member of the result
+      set mapping. The property / column mappings is done using the entity
+      mapping values. In this case the <literal>model</literal> property is
+      bound to the <literal>model_txt </literal>column. If the association to
+      a related entity involve a composite primary key, a
+      <literal>@FieldResult</literal> element should be used for each foreign
+      key column. The <literal>@FieldResult</literal> name is composed of the
+      property name for the relationship, followed by a dot ("."), followed by
+      the name or the field or property of the primary key.</para>
+
+      <programlisting>@Entity
+ at SqlResultSetMapping(name="compositekey",
+        entities=@EntityResult(entityClass=org.hibernate.test.annotations.query.SpaceShip.class,
+            fields = {
+                    @FieldResult(name="name", column = "name"),
+                    @FieldResult(name="model", column = "model"),
+                    @FieldResult(name="speed", column = "speed"),
+<emphasis role="bold">                    @FieldResult(name="captain.firstname", column = "firstn"),
+                    @FieldResult(name="captain.lastname", column = "lastn"),</emphasis>
+                    @FieldResult(name="dimensions.length", column = "length"),
+                    @FieldResult(name="dimensions.width", column = "width")
+                    }),
+        columns = { @ColumnResult(name = "surface"),
+                    @ColumnResult(name = "volume") } )
+
+ at NamedNativeQuery(name="compositekey",
+    query="select name, model, speed, lname as lastn, fname as firstn, length, width, length * width as surface from SpaceShip", 
+    resultSetMapping="compositekey")
+} )
+public class SpaceShip {
+    private String name;
+    private String model;
+    private double speed;
+    private Captain captain;
+    private Dimensions dimensions;
+
+    @Id
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    @ManyToOne(fetch= FetchType.LAZY)
+    @JoinColumns( {
+            @JoinColumn(name="fname", referencedColumnName = "firstname"),
+            @JoinColumn(name="lname", referencedColumnName = "lastname")
+            } )
+    public Captain getCaptain() {
+        return captain;
+    }
+
+    public void setCaptain(Captain captain) {
+        this.captain = captain;
+    }
+
+    public String getModel() {
+        return model;
+    }
+
+    public void setModel(String model) {
+        this.model = model;
+    }
+
+    public double getSpeed() {
+        return speed;
+    }
+
+    public void setSpeed(double speed) {
+        this.speed = speed;
+    }
+
+    public Dimensions getDimensions() {
+        return dimensions;
+    }
+
+    public void setDimensions(Dimensions dimensions) {
+        this.dimensions = dimensions;
+    }
+}
+
+ at Entity
+ at IdClass(Identity.class)
+public class Captain implements Serializable {
+    private String firstname;
+    private String lastname;
+
+    @Id
+    public String getFirstname() {
+        return firstname;
+    }
+
+    public void setFirstname(String firstname) {
+        this.firstname = firstname;
+    }
+
+    @Id
+    public String getLastname() {
+        return lastname;
+    }
+
+    public void setLastname(String lastname) {
+        this.lastname = lastname;
+    }
+}
+</programlisting>
+
+      <note>
+        <para>If you look at the dimension property, you'll see that Hibernate
+        supports the dotted notation for embedded objects (you can even have
+        nested embedded objects). EJB3 implementations do not have to support
+        this feature, we do :-)</para>
+      </note>
+
+      <para>If you retrieve a single entity and if you use the default
+      mapping, you can use the <literal>resultClass</literal> attribute
+      instead of <literal>resultSetMapping</literal>:</para>
+
+      <programlisting><emphasis role="bold">@NamedNativeQuery(name="implicitSample", query="select * from SpaceShip", 
+    resultClass=SpaceShip.class)</emphasis>
+public class SpaceShip {</programlisting>
+
+      <para>In some of your native queries, you'll have to return scalar
+      values, for example when building report queries. You can map them in
+      the <literal>@SqlResultsetMapping</literal> through
+      <literal>@ColumnResult</literal>. You actually can even mix, entities
+      and scalar returns in the same native query (this is probably not that
+      common though).</para>
+
+      <programlisting><emphasis role="bold">@SqlResultSetMapping(name="scalar", columns=@ColumnResult(name="dimension"))
+ at NamedNativeQuery(name="scalar", query="select length*width as dimension from SpaceShip", resultSetMapping="scalar")</emphasis></programlisting>
+
+      <para>An other query hint specific to native queries has been
+      introduced: <literal>org.hibernate.callable</literal> which can be true
+      or false depending on whether the query is a stored procedure or
+      not.</para>
+    </sect2>
+  </sect1>
+
+  <sect1 id="entity-hibspec" xreflabel="Hibernate Annotation Extensions">
+    <title>Hibernate Annotation Extensions</title>
+
+    <para>Hibernate 3.1 offers a variety of additional annotations that you
+    can mix/match with your EJB 3 entities. They have been designed as a
+    natural extension of EJB3 annotations.</para>
+
+    <para>To empower the EJB3 capabilities, hibernate provides specific
+    annotations that match hibernate features. The
+    <classname>org.hibernate.annotations</classname> package contains all
+    these annotations extensions.</para>
+
+    <sect2 id="entity-hibspec-entity" revision="3">
+      <title>Entity</title>
+
+      <para>You can fine tune some of the actions done by Hibernate on
+      entities beyond what the EJB3 spec offers.</para>
+
+      <para><classname>@org.hibernate.annotations.Entity</classname> adds
+      additional metadata that may be needed beyond what is defined in the
+      standard <literal>@Entity</literal> <itemizedlist>
+          <listitem>
+             mutable: whether this entity is mutable or not 
+          </listitem>
+
+          <listitem>
+             dynamicInsert: allow dynamic SQL for inserts 
+          </listitem>
+
+          <listitem>
+             dynamicUpdate: allow dynamic SQL for updates 
+          </listitem>
+
+          <listitem>
+             selectBeforeUpdate: Specifies that Hibernate should never perform an SQL UPDATE unless it is certain that an object is actually modified. 
+          </listitem>
+
+          <listitem>
+             polymorphism: whether the entity polymorphism is of PolymorphismType.IMPLICIT (default) or PolymorphismType.EXPLICIT 
+          </listitem>
+
+          <listitem>
+             optimisticLock: optimistic locking strategy (OptimisticLockType.VERSION, OptimisticLockType.NONE, OptimisticLockType.DIRTY or OptimisticLockType.ALL) 
+          </listitem>
+        </itemizedlist></para>
+
+      <para><note>
+          <para>@javax.persistence.Entity is still mandatory,
+          @org.hibernate.annotations.Entity is not a replacement.</para>
+        </note></para>
+
+      <para>Here are some additional Hibernate annotation extensions</para>
+
+      <para><literal>@org.hibernate.annotations.BatchSize</literal> allows you
+      to define the batch size when fetching instances of this entity ( eg.
+      <literal>@BatchSize(size=4)</literal> ). When loading a given entity,
+      Hibernate will then load all the uninitialized entities of the same type
+      in the persistence context up to the batch size.</para>
+
+      <para><literal>@org.hibernate.annotations.Proxy</literal> defines the
+      laziness attributes of the entity. lazy (default to true) define whether
+      the class is lazy or not. proxyClassName is the interface used to
+      generate the proxy (default is the class itself).</para>
+
+      <para><literal>@org.hibernate.annotations.Where</literal> defines an
+      optional SQL WHERE clause used when instances of this class is
+      retrieved.</para>
+
+      <para><literal>@org.hibernate.annotations.Check</literal> defines an
+      optional check constraints defined in the DDL statetement.</para>
+
+      <para><literal>@OnDelete(action=OnDeleteAction.CASCADE)</literal> on
+      joined subclasses: use a SQL cascade delete on deletion instead of the
+      regular Hibernate mechanism.</para>
+
+      <para><literal>@Table(appliesTo="tableName", indexes = {
+      @Index(name="index1", columnNames={"column1", "column2"} ) } )</literal>
+      creates the defined indexes on the columns of table
+      <literal>tableName</literal>. This can be applied on the primary table
+      or any secondary table. The <literal>@Tables</literal> annotation allows
+      your to apply indexes on different tables. This annotation is expected
+      where <literal>@javax.persistence.Table</literal> or
+      <literal>@javax.persistence.SecondaryTable</literal>(s) occurs.</para>
+
+      <note>
+        <para><literal>@org.hibernate.annotations.Table</literal> is a
+        complement, not a replacement to
+        <literal>@javax.persistence.Table</literal>. Especially, if you want
+        to change the default name of a table, you must use
+        <literal>@javax.persistence.Table</literal>, not
+        <literal>@org.hibernate.annotations.Table</literal>.</para>
+      </note>
+
+      <para><literal>@org.hibernate.annotations.Table</literal> can also be
+      used to define the following elements of secondary tables:</para>
+
+      <itemizedlist>
+        <listitem>
+          <para><literal>fetch</literal>: If set to JOIN, the default,
+          Hibernate will use an inner join to retrieve a secondary table
+          defined by a class or its superclasses and an outer join for a
+          secondary table defined by a subclass. If set to select then
+          Hibernate will use a sequential select for a secondary table defined
+          on a subclass, which will be issued only if a row turns out to
+          represent an instance of the subclass. Inner joins will still be
+          used to retrieve a secondary defined by the class and its
+          superclasses.</para>
+        </listitem>
+
+        <listitem>
+          <para><literal>inverse</literal>: If true, Hibernate will not try to
+          insert or update the properties defined by this join. Default to
+          false.</para>
+        </listitem>
+
+        <listitem>
+          <para><literal>optional</literal>: If enabled (the default),
+          Hibernate will insert a row only if the properties defined by this
+          join are non-null and will always use an outer join to retrieve the
+          properties.</para>
+        </listitem>
+
+        <listitem>
+          <para><literal>foreignKey</literal>: defines the Foreign Key name of
+          a secondary table pointing back to the primary table.</para>
+        </listitem>
+      </itemizedlist>
+
+      <para><literal>@Immutable</literal> marks an entity as immutable. The
+      entity may not be updated or deleted by the application. This allows
+      Hibernate to make some minor performance optimizations.</para>
+
+      <para><literal>@Persister</literal> lets you define your own custom
+      persistence strategy. You may, for example, specify your own subclass of
+      <classname>org.hibernate.persister.EntityPersister</classname> or you
+      might even provide a completely new implementation of the interface
+      <literal>org.hibernate.persister.ClassPersister</literal> that
+      implements persistence via, for example, stored procedure calls,
+      serialization to flat files or LDAP.</para>
+
+      <para><programlisting>@Entity
+ at BatchSize(size=5)
+ at org.hibernate.annotations.Entity(
+        selectBeforeUpdate = true,
+        dynamicInsert = true, dynamicUpdate = true,
+        optimisticLock = OptimisticLockType.ALL,
+        polymorphism = PolymorphismType.EXPLICIT)
+ at Where(clause="1=1")
+ at org.hibernate.annotations.Table(name="Forest", indexes = { @Index(name="idx", columnNames = { "name", "length" } ) } )
+ at Persister(impl=MyEntityPersister.class)
+public class Forest { ... }</programlisting><programlisting>@Entity
+ at Inheritance(
+    strategy=InheritanceType.JOINED
+)
+public class Vegetable { ... }
+
+ at Entity
+ at OnDelete(action=OnDeleteAction.CASCADE)
+public class Carrot extends Vegetable { ... }</programlisting></para>
+    </sect2>
+
+    <sect2 id="entity-hibspec-identifier" label="Identifier" revision="1">
+      <title>Identifier</title>
+
+      <para><literal><literal>@org.hibernate.annotations.GenericGenerator</literal>
+      allows you to define an Hibernate specific id
+      generator.</literal></para>
+
+      <para><programlisting>@Id @GeneratedValue(generator="system-uuid")
+ at GenericGenerator(name="system-uuid", strategy = "uuid")
+public String getId() {
+
+ at Id @GeneratedValue(generator="hibseq")
+ at GenericGenerator(name="hibseq", strategy = "seqhilo",
+    parameters = {
+        @Parameter(name="max_lo", value = "5"),
+        @Parameter(name="sequence", value="heybabyhey")
+    }
+)
+public Integer getId() {</programlisting></para>
+
+      <para><literal>strategy</literal> is the short name of an Hibernate3
+      generator strategy or the fully qualified class name of an
+      <classname>IdentifierGenerator</classname> implementation. You can add
+      some parameters through the <literal>parameters</literal>
+      attribute.</para>
+
+      <para>Contrary to its standard counterpart,
+      <literal>@GenericGenerator</literal> can be used in package level
+      annotations, making it an application level generator (just like if it
+      were in a JPA XML file).</para>
+
+      <programlisting>@GenericGenerator(name="hibseq", strategy = "seqhilo",
+    parameters = {
+        @Parameter(name="max_lo", value = "5"),
+        @Parameter(name="sequence", value="heybabyhey")
+    }
+)
+package org.hibernate.test.model</programlisting>
+    </sect2>
+
+    <sect2 id="entity-hibspec-property" revision="2">
+      <title>Property</title>
+
+      <sect3>
+        <title>Access type</title>
+
+        <para>The access type is guessed from the position of
+        <literal>@Id</literal> or <literal>@EmbeddedId</literal> in the entity
+        hierarchy. Sub-entities, embedded objects and mapped superclass
+        inherit the access type from the root entity.</para>
+
+        <para>In Hibernate, you can override the access type to:</para>
+
+        <itemizedlist>
+          <listitem>
+            <para>use a custom access type strategy</para>
+          </listitem>
+
+          <listitem>
+            <para>fine tune the access type at the class level or at the
+            property level</para>
+          </listitem>
+        </itemizedlist>
+
+        <para>An @AccessType annotation has been introduced to support this
+        behavior. You can define the access type on</para>
+
+        <itemizedlist>
+          <listitem>
+            <para>an entity</para>
+          </listitem>
+
+          <listitem>
+            <para>a superclass</para>
+          </listitem>
+
+          <listitem>
+            <para>an embeddable object</para>
+          </listitem>
+
+          <listitem>
+            <para>a property</para>
+          </listitem>
+        </itemizedlist>
+
+        <para>The access type is overriden for the annotated element, if
+        overriden on a class, all the properties of the given class inherit
+        the access type. For root entities, the access type is considered to
+        be the default one for the whole hierarchy (overridable at class or
+        property level).</para>
+
+        <para>If the access type is marked as "property", the getters are
+        scanned for annotations, if the access type is marked as "field", the
+        fields are scanned for annotations. Otherwise the elements marked with
+        @Id or @embeddedId are scanned.</para>
+
+        <para>You can override an access type for a property, but the element
+        to annotate will not be influenced: for example an entity having
+        access type <literal>field</literal>, can annotate a field with
+        <literal>@AccessType("property")</literal>, the access type will then
+        be property for this attribute, the the annotations still have to be
+        carried on the field.</para>
+
+        <para>If a superclass or an embeddable object is not annotated, the
+        root entity access type is used (even if an access type has been
+        define on an intermediate superclass or embeddable object). The
+        russian doll principle does not apply.</para>
+
+        <programlisting>@Entity
+public class Person implements Serializable {
+    @Id  @GeneratedValue //access type field
+    Integer id;
+
+    @Embedded
+    @AttributeOverrides({
+    @AttributeOverride(name = "iso2", column = @Column(name = "bornIso2")),
+    @AttributeOverride(name = "name", column = @Column(name = "bornCountryName"))
+            })
+    Country bornIn;
+}
+
+ at Embeddable
+<emphasis role="bold">@AccessType("property")</emphasis> //override access type for all properties in Country
+public class Country implements Serializable {
+    private String iso2;
+    private String name;
+
+    public String getIso2() {
+        return iso2;
+    }
+
+    public void setIso2(String iso2) {
+        this.iso2 = iso2;
+    }
+
+    @Column(name = "countryName")
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+}
+</programlisting>
+      </sect3>
+
+      <sect3>
+        <title>Formula</title>
+
+        <para>Sometimes, you want the Database to do some computation for you
+        rather than in the JVM, you might also create some kind of virtual
+        column. You can use a SQL fragment (aka formula) instead of mapping a
+        property into a column. This kind of property is read only (its value
+        is calculated by your formula fragment).</para>
+
+        <programlisting>@Formula("obj_length * obj_height * obj_width")
+public long getObjectVolume()</programlisting>
+
+        <para>The SQL fragment can be as complex as you want avec even include
+        subselects.</para>
+      </sect3>
+
+      <sect3>
+        <title>Type</title>
+
+        <para><literal>@org.hibernate.annotations.Type</literal> overrides the
+        default hibernate type used: this is generally not necessary since the
+        type is correctly inferred by Hibernate. Please refer to the Hibernate
+        reference guide for more informations on the Hibernate types.</para>
+
+        <para><literal>@org.hibernate.annotations.TypeDef</literal> and
+        <literal>@org.hibernate.annotations.TypeDefs</literal> allows you to
+        declare type definitions. These annotations are placed at the class or
+        package level. Note that these definitions will be global for the
+        session factory (even at the class level) and that type definition has
+        to be defined before any usage.</para>
+
+        <programlisting>@TypeDefs(
+    {
+    @TypeDef(
+        name="caster",
+        typeClass = CasterStringType.class,
+        parameters = {
+            @Parameter(name="cast", value="lower")
+        }
+    )
+    }
+)
+package org.hibernate.test.annotations.entity;
+
+...
+public class Forest {
+    @Type(type="caster")
+    public String getSmallText() {
+    ...
+}
+         </programlisting>
+
+        <para>When using composite user type, you will have to express column
+        definitions. The <literal>@Columns</literal> has been introduced for
+        that purpose.</para>
+
+        <programlisting>@Type(type="org.hibernate.test.annotations.entity.MonetaryAmountUserType")
+ at Columns(columns = {
+    @Column(name="r_amount"),
+    @Column(name="r_currency")
+})
+public MonetaryAmount getAmount() {
+    return amount;
+}
+
+
+public class MonetaryAmount implements Serializable {
+    private BigDecimal amount;
+    private Currency currency;
+    ...
+}</programlisting>
+      </sect3>
+
+      <sect3>
+        <title>Index</title>
+
+        <para>You can define an index on a particular column using the
+        <literal>@Index</literal> annotation on a one column property, the
+        columnNames attribute will then be ignored</para>
+
+        <programlisting>@Column(secondaryTable="Cat1")
+ at Index(name="story1index")
+public String getStoryPart1() {
+    return storyPart1;
+}</programlisting>
+      </sect3>
+
+      <sect3>
+        <title>@Parent</title>
+
+        <para>When inside an embeddable object, you can define one of the
+        properties as a pointer back to the owner element.</para>
+
+        <programlisting>@Entity
+public class Person {
+    @Embeddable public Address address;
+    ...
+}
+
+ at Embeddable
+public class Address {
+    @Parent public Person owner;
+    ...
+}
+
+
+person == person.address.owner</programlisting>
+      </sect3>
+
+      <sect3>
+        <title>Generated properties</title>
+
+        <para>Some properties are generated at insert or update time by your
+        database. Hibernate can deal with such properties and triggers a
+        subsequent select to read these properties.</para>
+
+        <programlisting>@Entity
+public class Antenna {
+    @Id public Integer id;
+    @Generated(GenerationTime.ALWAYS) @Column(insertable = false, updatable = false)
+    public String longitude;
+
+    @Generated(GenerationTime.INSERT) @Column(insertable = false)
+    public String latitude;
+}</programlisting>
+
+        <para>Annotate your property as <literal>@Generated</literal> You have
+        to make sure your insertability or updatability does not conflict with
+        the generation strategy you have chosen. When GenerationTime.INSERT is
+        chosen, the property must not contains insertable columns, when
+        GenerationTime.ALWAYS is chosen, the property must not contains
+        insertable nor updatable columns.</para>
+
+        <para><literal>@Version</literal> properties cannot be
+        <literal>@Generated(INSERT)</literal> by design, it has to be either
+        <literal>NEVER</literal> or <literal>ALWAYS</literal>.</para>
+      </sect3>
+
+      <sect3>
+        <title>@Target</title>
+
+        <para>Sometimes, the type guessed by reflection is not the one you
+        want Hibernate to use. This is especially true on components when an
+        interface is used. You can use <literal>@Target</literal> to by pass
+        the reflection guessing mechanism (very much like the
+        <literal>targetEntity</literal> attribute available on
+        associations.</para>
+
+        <programlisting>    @Embedded
+    <emphasis role="bold">@Target(OwnerImpl.class)</emphasis>
+    public Owner getOwner() {
+        return owner;
+    }</programlisting>
+
+        <para></para>
+      </sect3>
+
+      <sect3>
+        <title>Optimistic lock</title>
+
+        <para>It is sometimes useful to avoid increasing the version number
+        even if a given property is dirty (particularly collections). You can
+        do that by annotating the property (or collection) with
+        <literal>@OptimisticLock(excluded=true)</literal>.</para>
+
+        <para>More formally, specifies that updates to this property do not
+        require acquisition of the optimistic lock.</para>
+      </sect3>
+    </sect2>
+
+    <sect2 id="entity-hibspec-inheritance" revision="3">
+      <title>Inheritance</title>
+
+      <para>SINGLE_TABLE is a very powerful strategy but sometimes, and
+      especially for legacy systems, you cannot add an additional
+      discriminator column. For that purpose Hibernate has introduced the
+      notion of discriminator formula:
+      <literal>@DiscriminatorFormula</literal> is a replacement of
+      <literal>@DiscriminatorColumn</literal> and use a SQL fragment as a
+      formula for discriminator resolution (no need to have a dedicated
+      column).</para>
+
+      <programlisting>@Entity
+<emphasis role="bold">@DiscriminatorFormula("case when forest_type is null then 0 else forest_type end")</emphasis>
+public class Forest { ... }</programlisting>
+
+      <para>By default, when querying the top entities, Hibernate does not put
+      a restriction clause on the discriminator column. This can be
+      inconvenient if this column contains values not mapped in your hierarchy
+      (through <literal>@DiscriminatorValue</literal>). To work around that
+      you can use <literal>@ForceDiscriminator</literal> (at the class level,
+      next to <literal>@DiscriminatorColumn</literal>). Hibernate will then
+      list the available values when loading the entities.</para>
+
+      <para>You can define the foreign key name generated by Hibernate for
+      subclass tables in the JOINED inheritance strategy.</para>
+
+      <programlisting>@Entity
+ at Inheritance(strategy = InheritanceType.JOINED)
+public abstract class File { ... }
+
+ at Entity
+ at ForeignKey(name = "FK_DOCU_FILE")
+public class Document extends File {</programlisting>
+
+      <para>The foreign key from the <literal>Document</literal> table to the
+      <literal>File</literal> table will be named
+      <literal>FK_DOCU_FILE</literal>.</para>
+    </sect2>
+
+    <sect2 id="entity-hibspec-singleassoc">
+      <title>Single Association related annotations</title>
+
+      <para>By default, when Hibernate cannot resolve the association because
+      the expected associated element is not in database (wrong id on the
+      association column), an exception is raised by Hibernate. This might be
+      inconvenient for lecacy and badly maintained schemas. You can ask
+      Hibernate to ignore such elements instead of raising an exception using
+      the <literal>@NotFound</literal> annotation. This annotation can be used
+      on a <literal>@OneToOne</literal> (with FK),
+      <literal>@ManyToOne</literal>, <literal>@OneToMany</literal> or
+      <literal>@ManyToMany</literal> association.</para>
+
+      <programlisting>@Entity
+public class Child {
+    ...
+    @ManyToOne
+    @NotFound(action=NotFoundAction.IGNORE)
+    public Parent getParent() { ... }
+    ...
+}</programlisting>
+
+      <para>Sometimes you want to delegate to your database the deletion of
+      cascade when a given entity is deleted.</para>
+
+      <programlisting>@Entity
+public class Child {
+    ...
+    @ManyToOne
+    @OnDelete(action=OnDeleteAction.CASCADE)
+    public Parent getParent() { ... }
+    ...
+}</programlisting>
+
+      <para>In this case Hibernate generates a cascade delete constraint at
+      the database level.</para>
+
+      <para>Foreign key constraints, while generated by Hibernate, have a
+      fairly unreadable name. You can override the constraint name by use
+      <literal>@ForeignKey</literal>.</para>
+
+      <programlisting>@Entity
+public class Child {
+    ...
+    @ManyToOne
+    <emphasis role="bold">@ForeignKey(name="FK_PARENT")</emphasis>
+    public Parent getParent() { ... }
+    ...
+}
+
+alter table Child add constraint FK_PARENT foreign key (parent_id) references Parent</programlisting>
+
+      <sect3 id="entity-hibspec-singleassoc-fetching"
+             label="Lazy options and fetching modes">
+        <title>Lazy options and fetching modes</title>
+
+        <para>EJB3 comes with the <literal>fetch</literal> option to define
+        lazy loading and fetching modes, however Hibernate has a much more
+        option set in this area. To fine tune the lazy loading and fetching
+        strategies, some additional annotations have been introduced:</para>
+
+        <itemizedlist>
+          <listitem>
+            <para><literal>@LazyToOne</literal>: defines the lazyness option
+            on <literal>@ManyToOne</literal> and <literal>@OneToOne</literal>
+            associations. <literal>LazyToOneOption</literal> can be
+            <literal>PROXY</literal> (ie use a proxy based lazy loading),
+            <literal>NO_PROXY</literal> (use a bytecode enhancement based lazy
+            loading - note that build time bytecode processing is necessary)
+            and <literal>FALSE</literal> (association not lazy)</para>
+          </listitem>
+
+          <listitem>
+            <para><literal>@LazyCollection</literal>: defines the lazyness
+            option on <literal>@ManyTo</literal>Many and
+            <literal>@OneToMany</literal> associations. LazyCollectionOption
+            can be <literal>TRUE</literal> (the collection is lazy and will be
+            loaded when its state is accessed), <literal>EXTRA</literal> (the
+            collection is lazy and all operations will try to avoid the
+            collection loading, this is especially useful for huge collections
+            when loading all the elements is not necessary) and FALSE
+            (association not lazy)</para>
+          </listitem>
+
+          <listitem>
+            <para><literal>@Fetch</literal>: defines the fetching strategy
+            used to load the association. <literal>FetchMode</literal> can be
+            <literal>SELECT</literal> (a select is triggered when the
+            association needs to be loaded), <literal>SUBSELECT</literal>
+            (only available for collections, use a subselect strategy - please
+            refers to the Hibernate Reference Documentation for more
+            information) or <literal>JOIN</literal> (use a SQL JOIN to load
+            the association while loading the owner entity).
+            <literal>JOIN</literal> overrides any lazy attribute (an
+            association loaded through a <literal>JOIN</literal> strategy
+            cannot be lazy).</para>
+          </listitem>
+        </itemizedlist>
+
+        <para>The Hibernate annotations overrides the EJB3 fetching
+        options.</para>
+
+        <table>
+          <title>Lazy and fetch options equivalent</title>
+
+          <tgroup cols="3">
+            <thead>
+              <row>
+                <entry>Annotations</entry>
+
+                <entry>Lazy</entry>
+
+                <entry>Fetch</entry>
+              </row>
+            </thead>
+
+            <tbody>
+              <row>
+                <entry>@[One|Many]ToOne](fetch=FetchType.LAZY)</entry>
+
+                <entry>@LazyToOne(PROXY)</entry>
+
+                <entry>@Fetch(SELECT)</entry>
+              </row>
+
+              <row>
+                <entry>@[One|Many]ToOne](fetch=FetchType.EAGER)</entry>
+
+                <entry>@LazyToOne(FALSE)</entry>
+
+                <entry>@Fetch(JOIN)</entry>
+              </row>
+
+              <row>
+                <entry>@ManyTo[One|Many](fetch=FetchType.LAZY)</entry>
+
+                <entry>@LazyCollection(TRUE)</entry>
+
+                <entry>@Fetch(SELECT)</entry>
+              </row>
+
+              <row>
+                <entry>@ManyTo[One|Many](fetch=FetchType.EAGER)</entry>
+
+                <entry>@LazyCollection(FALSE)</entry>
+
+                <entry>@Fetch(JOIN)</entry>
+              </row>
+            </tbody>
+          </tgroup>
+        </table>
+      </sect3>
+    </sect2>
+
+    <sect2 id="entity-hibspec-collection" revision="2">
+      <title>Collection related annotations</title>
+
+      <sect3 id="entity-hibspec-collection-enhance" revision="3">
+        <title>Enhance collection settings</title>
+
+        <para>It is possible to set <itemizedlist>
+            <listitem>
+               the batch size for collections using @BatchSize 
+            </listitem>
+
+            <listitem>
+               the where clause, using @Where (applied on the target entity) or @WhereJoinTable (applied on the association table) 
+            </listitem>
+
+            <listitem>
+               the check clause, using @Check 
+            </listitem>
+
+            <listitem>
+               the SQL order by clause, using @OrderBy 
+            </listitem>
+
+            <listitem>
+               the delete cascade strategy through @OnDelete(action=OnDeleteAction.CASCADE) 
+            </listitem>
+
+            <listitem>
+               the collection immutability using @Immutable: if set specifies that the elements of the collection never change (a minor performance optimization in some cases) 
+            </listitem>
+
+            <listitem>
+              <para>a custom collection persister (ie the persistence strategy
+              used) using <literal>@Persister</literal>: the class must
+              implement
+              <classname>org.hibernate.persister.collectionCollectionPersister</classname>
+              </para>
+            </listitem>
+          </itemizedlist></para>
+
+        <para>You can also declare a sort comparator. Use the
+        <literal>@Sort</literal> annotation. Expressing the comparator type
+        you want between unsorted, natural or custom comparator. If you want
+        to use your own comparator implementation, you'll also have to express
+        the implementation class using the <literal>comparator</literal>
+        attribute. Note that you need to use either a
+        <classname>SortedSet</classname> or a <classname>SortedMap</classname>
+        interface.</para>
+
+        <programlisting>    @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
+    @JoinColumn(name="CUST_ID")
+    @Sort(type = SortType.COMPARATOR, comparator = TicketComparator.class)
+    @Where(clause="1=1")
+    @OnDelete(action=OnDeleteAction.CASCADE)
+    public SortedSet&lt;Ticket&gt; getTickets() {
+        return tickets;
+    }</programlisting>
+
+        <para>Please refer to the previous descriptions of these annotations
+        for more informations.</para>
+
+        <para>Foreign key constraints, while generated by Hibernate, have a
+        fairly unreadable name. You can override the constraint name by use
+        <literal>@ForeignKey</literal>. Note that this annotation has to be
+        placed on the owning side of the relationship,
+        <literal>inverseName</literal> referencing to the other side
+        constraint.</para>
+
+        <programlisting>@Entity
+public class Woman {
+    ...
+    @ManyToMany(cascade = {CascadeType.ALL})
+    <emphasis role="bold">@ForeignKey(name = "TO_WOMAN_FK", inverseName = "TO_MAN_FK")</emphasis>
+    public Set&lt;Man&gt; getMens() {
+        return mens;
+    }
+}
+
+alter table Man_Woman add constraint TO_WOMAN_FK foreign key (woman_id) references Woman
+alter table Man_Woman add constraint TO_MAN_FK foreign key (man_id) references Man</programlisting>
+      </sect3>
+
+      <sect3 id="entity-hibspec-collection-extratype" revision="1">
+        <title>Extra collection types</title>
+
+        <sect4>
+          <title>List</title>
+
+          <para>Beyond EJB3, Hibernate Annotations supports true
+          <classname>List</classname> and <classname>Array</classname>. Map
+          your collection the same way as usual and add the
+          @<literal>IndexColumn</literal>. This annotation allows you to
+          describe the column that will hold the index. You can also declare
+          the index value in DB that represent the first element (aka as base
+          index). The usual value is <literal>0</literal> or
+          <literal>1</literal>.</para>
+
+          <programlisting>@OneToMany(cascade = CascadeType.ALL)
+ at IndexColumn(name = "drawer_position", base=1)
+public List&lt;Drawer&gt; getDrawers() {
+    return drawers;
+}</programlisting>
+
+          <note>
+            <para>If you forgot to set <literal>@IndexColumn</literal>, the
+            bag semantic is applied. If you want the bag semantic without the
+            limitations of it, consider using
+            <literal>@CollectionId</literal>.</para>
+          </note>
+        </sect4>
+
+        <sect4 id="entity-hibspec-collection-extratype-map" revision="1">
+          <title>Map</title>
+
+          <para>Hibernate Annotations also supports true Map mappings, if
+          <literal>@javax.persistence.MapKey</literal> is not set, hibernate
+          will map the key element or embeddable object in its/their own
+          columns. To overrides the default columns, you can use
+          <literal>@org.hibernate.annotations.MapKey</literal> if your key is
+          a basic type (defaulted to <literal>mapkey</literal>) or an
+          embeddable object, or you can use
+          <literal>@org.hibernate.annotations.MapKeyManyToMany</literal> if
+          your key is an entity.</para>
+
+          <para>Both <literal>@org.hibernate.annotations.MapKey</literal> and
+          <literal>@org.hibernate.annotations.MapKeyManyToMany</literal>
+          allows you to override the target element to be used. This is
+          especially useful if your collection does not use generics (or if
+          you use interfaces).</para>
+
+          <programlisting>    @CollectionOfElements(targetElement = SizeImpl.class)
+    @MapKeyManyToMany(<emphasis role="bold">targetEntity = LuggageImpl.class</emphasis>)
+    private Map&lt;Luggage, Size&gt; sizePerLuggage = new HashMap&lt;Luggage, Size&gt;();</programlisting>
+
+          <para></para>
+        </sect4>
+
+        <sect4 id="entity-hibspec-collection-extratype-indexbidir">
+          <title>Bidirectional association with indexed collections</title>
+
+          <para>A bidirectional association where one end is represented as a
+          <literal>@IndexColumn</literal> or
+          <literal>@org.hibernate.annotations.MapKey[ManyToMany]</literal>
+          requires special consideration. If there is a property of the child
+          class which maps to the index column, no problem, we can continue
+          using <literal>mappedBy</literal> on the collection mapping:</para>
+
+          <programlisting>@Entity
+public class Parent {
+    @OneToMany(mappedBy="parent")
+    @org.hibernate.annotations.MapKey(columns=@Column(name="name"))
+    private Map&lt;String, Child&gt; children;
+    ...
+}
+
+ at Entity
+public class Parent {
+    ...
+    @Basic
+    private String name;
+
+    @ManyToOne
+    @JoinColumn(name="parent_id", nullable=false)
+    private Parent parent;
+    ...
+}</programlisting>
+
+          <para>But, if there is no such property on the child class, we can't
+          think of the association as truly bidirectional (there is
+          information available at one end of the association that is not
+          available at the other end). In this case, we can't map the
+          collection <literal>mappedBy</literal>. Instead, we could use the
+          following mapping:</para>
+
+          <programlisting>@Entity
+public class Parent {
+    @OneToMany
+    @org.hibernate.annotations.MapKey(columns=@Column(name="name"))
+    @JoinColumn(name="parent_id", nullable=false)
+    private Map&lt;String, Child&gt; children;
+    ...
+}
+
+ at Entity
+public class Parent {
+    ...
+    @ManyToOne
+    @JoinColumn(name="parent_id", insertable=false, updatable=false, nullable=false)
+    private Parent parent;
+    ...
+}</programlisting>
+
+          <para>Note that in this mapping, the collection-valued end of the
+          association is responsible for updates to the foreign key.</para>
+        </sect4>
+
+        <sect4>
+          <title>Bag with primary key</title>
+
+          <para>Another interesting feature is the ability to define a
+          surrogate primary key to a bag collection. This remove pretty much
+          all of the drawbacks of bags: update and removal are efficient, more
+          than one <literal>EAGER</literal> bag per query or per entity. This
+          primary key will be contained in a additional column of your
+          collection table but will not be visible to the Java application.
+          @CollectionId is used to mark a collection as id bag, it also allow
+          to override the primary key column(s), the primary key type and the
+          generator strategy. The strategy can be <literal>identity</literal>,
+          or any defined generator name of your application.</para>
+
+          <programlisting>@Entity
+ at TableGenerator(name="ids_generator", table="IDS")
+public class Passport {
+    ...
+
+    @ManyToMany(cascade = CascadeType.ALL)
+    @JoinTable(name="PASSPORT_VISASTAMP")
+    <emphasis role="bold">@CollectionId(
+        columns = @Column(name="COLLECTION_ID"), 
+        type=@Type(type="long"), 
+        generator = "ids_generator"
+    )</emphasis>
+    private Collection&lt;Stamp&gt; visaStamp = new ArrayList();
+    ...
+}</programlisting>
+        </sect4>
+
+        <sect4>
+          <title>Collection of element or composite elements</title>
+
+          <para>Hibernate Annotations also supports collections of core types
+          (Integer, String, Enums, ...), collections of embeddable objects and
+          even arrays of primitive types. This is known as collection of
+          elements.</para>
+
+          <para>A collection of elements has to be annotated as
+          <literal>@CollectionOfElements</literal> (as a replacement of
+          <literal>@OneToMany</literal>) To define the collection table, the
+          <literal>@JoinTable</literal> annotation is used on the association
+          property, <literal>joinColumns</literal> defines the join columns
+          between the entity primary table and the collection table
+          (inverseJoincolumn is useless and should be left empty). For
+          collection of core types or array of primitive types, you can
+          override the element column definition using a
+          <literal>@Column</literal> on the association property. You can also
+          override the columns of a collection of embeddable object using
+          <literal>@AttributeOverride</literal>. To reach the collection
+          element, you need to append "element" to the attribute override name
+          (eg "element" for core types, or "element.serial" for the serial
+          property of an embeddable element). To reach the index/key of a
+          collection, append "key" instead.</para>
+
+          <programlisting>@Entity
+public class Boy {
+    private Integer id;
+    private Set&lt;String&gt; nickNames = new HashSet&lt;String&gt;();
+    private int[] favoriteNumbers;
+    private Set&lt;Toy&gt; favoriteToys = new HashSet&lt;Toy&gt;();
+    private Set&lt;Character&gt; characters = new HashSet&lt;Character&gt;();
+
+    @Id @GeneratedValue
+    public Integer getId() {
+        return id;
+    }
+
+    <emphasis role="bold">@CollectionOfElements
+    public Set&lt;String&gt;</emphasis> getNickNames() {
+        return nickNames;
+    }
+
+    <emphasis role="bold">@CollectionOfElements
+    @JoinTable(
+            table=@Table(name="BoyFavoriteNumbers"),
+            joinColumns = @JoinColumn(name="BoyId")
+    )
+    @Column(name="favoriteNumber", nullable=false)</emphasis>
+    @IndexColumn(name="nbr_index")
+    public int[] getFavoriteNumbers() {
+        return favoriteNumbers;
+    }
+
+    <emphasis role="bold">@CollectionOfElements
+    @AttributeOverride( name="element.serial", column=@Column(name="serial_nbr") )</emphasis>
+    public Set&lt;Toy&gt; getFavoriteToys() {
+        return favoriteToys;
+    }
+
+    <emphasis role="bold">@CollectionOfElements
+    public Set&lt;Character&gt;</emphasis> getCharacters() {
+        return characters;
+    }
+    ...
+}
+
+public enum Character {
+    GENTLE,
+    NORMAL,
+    AGGRESSIVE,
+    ATTENTIVE,
+    VIOLENT,
+    CRAFTY
+}
+
+ at Embeddable
+public class Toy {
+    public String name;
+    public String serial;
+    public Boy owner;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getSerial() {
+        return serial;
+    }
+
+    public void setSerial(String serial) {
+        this.serial = serial;
+    }
+
+    <emphasis role="bold">@Parent</emphasis>
+    public Boy getOwner() {
+        return owner;
+    }
+
+    public void setOwner(Boy owner) {
+        this.owner = owner;
+    }
+
+    public boolean equals(Object o) {
+        if ( this == o ) return true;
+        if ( o == null || getClass() != o.getClass() ) return false;
+
+        final Toy toy = (Toy) o;
+
+        if ( !name.equals( toy.name ) ) return false;
+        if ( !serial.equals( toy.serial ) ) return false;
+
+        return true;
+    }
+
+    public int hashCode() {
+        int result;
+        result = name.hashCode();
+        result = 29 * result + serial.hashCode();
+        return result;
+    }
+}</programlisting>
+
+          <para>On a collection of embeddable objects, the embeddable object
+          can have a property annotated with <literal>@Parent</literal>. This
+          property will then point back to the entity containing the
+          collection.</para>
+
+          <note>
+            <para>Previous versions of Hibernate Annotations used the
+            <literal>@OneToMany</literal> to mark a collection of elements.
+            Due to semantic inconsistencies, we've introduced the annotation
+            <literal>@CollectionOfElements</literal>. Marking collections of
+            elements the old way still work but is considered deprecated and
+            is going to be unsupported in future releases</para>
+          </note>
+        </sect4>
+      </sect3>
+    </sect2>
+
+    <sect2>
+      <title>Cache</title>
+
+      <para>In order to optimize your database accesses, you can activave the
+      so called second level cache of Hibernate. This cache is configurable on
+      a per entity and per collection basis.</para>
+
+      <para><literal>@org.hibernate.annotations.Cache</literal> defines the
+      caching strategy and region of a given second level cache. This
+      annotation can be applied on the root entity (not the sub entities), and
+      on the collections.</para>
+
+      <programlisting>@Entity
+ at Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
+public class Forest { ... }</programlisting>
+
+      <programlisting>    @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
+    @JoinColumn(name="CUST_ID")
+    @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
+    public SortedSet&lt;Ticket&gt; getTickets() {
+        return tickets;
+    }</programlisting>
+
+      <para></para>
+
+      <programlistingco>
+        <areaspec>
+          <area coords="2 55" id="hm1" />
+
+          <area coords="3 55" id="hm2" />
+
+          <area coords="4 55" id="hm3" />
+        </areaspec>
+
+        <programlisting>@Cache(
+    CacheConcurrencyStrategy usage();
+    String region() default "";
+    String include() default "all";
+)</programlisting>
+
+        <calloutlist>
+          <callout arearefs="hm1">
+            <para>usage: the given cache concurrency strategy (NONE,
+            READ_ONLY, NONSTRICT_READ_WRITE, READ_WRITE, TRANSACTIONAL)</para>
+          </callout>
+
+          <callout arearefs="hm2">
+            <para>region (optional): the cache region (default to the fqcn of
+            the class or the fq role name of the collection)</para>
+          </callout>
+
+          <callout arearefs="hm3">
+            <para><literal>include</literal> (optional): all to include all
+            properties, non-lazy to only include non lazy properties (default
+            all).</para>
+          </callout>
+        </calloutlist>
+      </programlistingco>
+    </sect2>
+
+    <sect2 id="entity-hibspec-filters">
+      <title>Filters</title>
+
+      <para>Hibernate has the ability to apply arbitrary filters on top of
+      your data. Those filters are applied at runtime on a given session.
+      First, you need to define them.</para>
+
+      <para><literal>@org.hibernate.annotations.FilterDef</literal> or
+      <literal>@FilterDefs</literal> define filter definition(s) used by
+      filter(s) using the same name. A filter definition has a name() and an
+      array of parameters(). A parameter will allow you to adjust the behavior
+      of the filter at runtime. Each parameter is defined by a
+      <literal>@ParamDef</literal> which has a name and a type. You can also
+      define a defaultCondition() parameter for a given
+      <literal>@FilterDef</literal> to set the default condition to use when
+      none are defined in each individual <literal>@Filter</literal>. A
+      <literal>@FilterDef</literal>(s) can be defined at the class or package
+      level.</para>
+
+      <para>We now need to define the SQL filter clause applied to either the
+      entity load or the collection load. <literal>@Filter</literal> is used
+      and placed either on the entity or the collection element</para>
+
+      <para><programlisting>@Entity
+ at FilterDef(name="minLength", parameters={ @ParamDef( name="minLength", type="integer" ) } )
+ at Filters( {
+    @Filter(name="betweenLength", condition=":minLength &lt;= length and :maxLength &gt;= length"),
+    @Filter(name="minLength", condition=":minLength &lt;= length")
+} )
+public class Forest { ... }</programlisting></para>
+
+      <para>When the collection use an association table as a relational
+      representation, you might want to apply the filter condition to the
+      association table itself or to the target entity table. To apply the
+      constraint on the target entity, use the regular
+      <literal>@Filter</literal> annotation. However, if you wan to target the
+      association table, use the <literal>@FilterJoinTable</literal>
+      annotation.</para>
+
+      <programlisting>    @OneToMany
+    @JoinTable
+    //filter on the target entity table
+    @Filter(name="betweenLength", condition=":minLength &lt;= length and :maxLength &gt;= length")
+    //filter on the association table
+    @FilterJoinTable(name="security", condition=":userlevel &gt;= requredLevel")
+    public Set&lt;Forest&gt; getForests() { ... }</programlisting>
+    </sect2>
+
+    <sect2 id="entity-hibspec-query">
+      <title>Queries</title>
+
+      <para>Since Hibernate has more features on named queries than the one
+      defined in the EJB3 specification,
+      <literal>@org.hibernate.annotations.NamedQuery</literal>,
+      <literal>@org.hibernate.annotations.NamedQueries</literal>,
+      <literal>@org.hibernate.annotations.NamedNativeQuery</literal> and
+      <literal>@org.hibernate.annotations.NamedNativeQueries</literal> have
+      been introduced. They add some attributes to the standard version and
+      can be used as a replacement:</para>
+
+      <itemizedlist>
+        <listitem>
+          <para>flushMode: define the query flush mode (Always, Auto, Commit
+          or Never)</para>
+        </listitem>
+
+        <listitem>
+          <para>cacheable: whether the query should be cached or not</para>
+        </listitem>
+
+        <listitem>
+          <para>cacheRegion: cache region used if the query is cached</para>
+        </listitem>
+
+        <listitem>
+          <para>fetchSize: JDBC statement fetch size for this query</para>
+        </listitem>
+
+        <listitem>
+          <para>timeout: query time out</para>
+        </listitem>
+
+        <listitem>
+          <para>callable: for native queries only, to be set to true for
+          stored procedures</para>
+        </listitem>
+
+        <listitem>
+          <para>comment: if comments are activated, the comment seen when the
+          query is sent to the database.</para>
+        </listitem>
+
+        <listitem>
+          <para>cacheMode: Cache interaction mode (get, ignore, normal, put or
+          refresh)</para>
+        </listitem>
+
+        <listitem>
+          <para>readOnly: whether or not the elements retrievent from the
+          query are in read only mode.</para>
+        </listitem>
+      </itemizedlist>
+
+      <para>Those hints can be set in a standard
+      <literal>@javax.persistence.NamedQuery</literal> annotations through the
+      detyped <literal>@QueryHint</literal>. Another key advantage is the
+      ability to set those annotations at a package level.</para>
+    </sect2>
+
+    <sect2 id="entity-hibspec-customsql" revision="1">
+      <title>Custom SQL for CRUD operations</title>
+
+      <para>Hibernate gives you the avility to override every single SQL
+      statement generated. We have seen native SQL query usage already, but
+      you can also override the SQL statement used to load or change the state
+      of entities.</para>
+
+      <programlisting>@Entity
+ at Table(name="CHAOS")
+<emphasis role="bold">@SQLInsert( sql="INSERT INTO CHAOS(size, name, nickname, id) VALUES(?,upper(?),?,?)")
+ at SQLUpdate( sql="UPDATE CHAOS SET size = ?, name = upper(?), nickname = ? WHERE id = ?")
+ at SQLDelete( sql="DELETE CHAOS WHERE id = ?")
+ at SQLDeleteAll( sql="DELETE CHAOS")
+</emphasis><emphasis role="bold">@Loader(namedQuery = "chaos")</emphasis>
+ at NamedNativeQuery(name="chaos", query="select id, size, name, lower( nickname ) as nickname from CHAOS where id= ?", resultClass = Chaos.class)
+public class Chaos {
+    @Id
+    private Long id;
+    private Long size;
+    private String name;
+    private String nickname;</programlisting>
+
+      <para><literal>@SQLInsert</literal>, <literal>@SQLUpdate</literal>,
+      <literal>@SQLDelete</literal>, <literal>@SQLDeleteAll</literal>
+      respectively override the INSERT statement, UPDATE statement, DELETE
+      statement, DELETE statement to remove all entities.</para>
+
+      <para>If you expect to call a store procedure, be sure to set the
+      <literal>callable</literal> attribute to true
+      (<literal>@SQLInsert(callable=true, ...)</literal>).</para>
+
+      <para>To check that the execution happens correctly, Hibernate allows
+      you to define one of those three strategies:</para>
+
+      <itemizedlist>
+        <listitem>
+          <para>NONE: no check is performed: the store procedure is expected
+          to fail upon issues</para>
+        </listitem>
+
+        <listitem>
+          <para>COUNT: use of rowcount to check that the update is
+          successful</para>
+        </listitem>
+
+        <listitem>
+          <para>PARAM: like COUNT but using an output parameter rather that
+          the standard mechanism</para>
+        </listitem>
+      </itemizedlist>
+
+      <para>To define the result check style, use the <literal>check</literal>
+      parameter (<literal>@SQLUpdate(check=ResultCheckStyle.COUNT,
+      ...)</literal>).</para>
+
+      <para>You can also override the SQL load statement by a native SQL query
+      or a HQL query. You just have to refer to a named query with the
+      <literal><literal>@Loader</literal></literal> annotation.</para>
+
+      <para>You can use the exact same set of annotations to override the
+      collection related statements.</para>
+
+      <programlisting>@OneToMany
+ at JoinColumn(name="chaos_fk")
+<emphasis role="bold">@SQLInsert( sql="UPDATE CASIMIR_PARTICULE SET chaos_fk = ? where id = ?")
+ at SQLDelete( sql="UPDATE CASIMIR_PARTICULE SET chaos_fk = null where id = ?")</emphasis>
+private Set&lt;CasimirParticle&gt; particles = new HashSet&lt;CasimirParticle&gt;();</programlisting>
+
+      <para>The parameters order is important and is defined by the order
+      Hibernate handle properties. You can see the expected order by enabling
+      debug logging for the <literal>org.hibernate.persister.entity</literal>
+      level. With this level enabled Hibernate will print out the static SQL
+      that is used to create, update, delete etc. entities. (To see the
+      expected sequence, remember to not include your custom SQL through
+      annotations as that will override the Hibernate generated static
+      sql.)</para>
+
+      <para>Overriding SQL statements for secondary tables is also possible
+      using <literal>@org.hibernate.annotations.Table</literal> and either (or
+      all) attributes <literal>sqlInsert</literal>,
+      <literal>sqlUpdate</literal>, <literal>sqlDelete</literal>:</para>
+
+      <programlisting>@Entity
+ at SecondaryTables({
+    @SecondaryTable(name = "`Cat nbr1`"),
+    @SecondaryTable(name = "Cat2"})
+ at org.hibernate.annotations.Tables( {
+    @Table(appliesTo = "Cat", comment = "My cat table" ),
+    @Table(appliesTo = "Cat2", foreignKey = @ForeignKey(name="FK_CAT2_CAT"), fetch = FetchMode.SELECT,
+        <emphasis role="bold">sqlInsert=@SQLInsert(sql="insert into Cat2(storyPart2, id) values(upper(?), ?)") )</emphasis>
+} )
+public class Cat implements Serializable {</programlisting>
+
+      <para>The previous example also show that you can give a comment to a
+      given table (promary or secondary): This comment will be used for DDL
+      generation.</para>
+    </sect2>
+
+    <sect2>
+      <title>Tuplizer</title>
+
+      <para><classname>org.hibernate.tuple.Tuplizer</classname>, and its
+      sub-interfaces, are responsible for managing a particular representation
+      of a piece of data, given that representation's
+      <literal>org.hibernate.EntityMode</literal>. If a given piece of data is
+      thought of as a data structure, then a tuplizer is the thing which knows
+      how to create such a data structure and how to extract values from and
+      inject values into such a data structure. For example, for the POJO
+      entity mode, the correpsonding tuplizer knows how create the POJO
+      through its constructor and how to access the POJO properties using the
+      defined property accessors. There are two high-level types of Tuplizers,
+      represented by the
+      <classname>org.hibernate.tuple.EntityTuplizer</classname> and
+      <classname>org.hibernate.tuple.ComponentTuplizer</classname> interfaces.
+      EntityTuplizers are responsible for managing the above mentioned
+      contracts in regards to entities, while
+      <classname>ComponentTuplizers</classname> do the same for components.
+      Check the Hibernate reference documentation for more information.</para>
+
+      <para>To define tuplixer in annotations, simply use the
+      <literal>@Tuplizer</literal> annotation on the according element</para>
+
+      <programlisting>@Entity
+<emphasis role="bold">@Tuplizer(impl = DynamicEntityTuplizer.class)</emphasis>
+public interface Cuisine {
+    @Id
+    @GeneratedValue
+    public Long getId();
+    public void setId(Long id);
+
+    public String getName();
+    public void setName(String name);
+
+    <emphasis role="bold">@Tuplizer(impl = DynamicComponentTuplizer.class)</emphasis>
+    public Country getCountry();
+    public void setCountry(Country country);
+
+
+}</programlisting>
+    </sect2>
+  </sect1>
+</chapter>
\ No newline at end of file

Deleted: trunk/HibernateExt/annotations/doc/reference/en/modules/setup.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/doc/reference/en/modules/setup.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/doc/reference/en/modules/setup.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,194 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<chapter>
-  <title id="setup" revision="1">Setting up an annotations project</title>
-
-  <section id="setup-requirements" revision="1">
-    <title>Requirements</title>
-
-    <itemizedlist>
-      <listitem>
-        <para>Download and unpack the Hibernate Annotations distribution from
-        the Hibernate website.</para>
-      </listitem>
-
-      <listitem>
-        <para><emphasis>This release requires Hibernate 3.2.0.GA and above. Do
-        not use this release of Hibernate Annotations with an older version of
-        Hibernate 3.x!</emphasis></para>
-      </listitem>
-
-      <listitem>
-        <para>This release is known to work on Hibernate core 3.2.0.CR5 and
-        3.2.x.GA</para>
-      </listitem>
-
-      <listitem>
-        <para>Make sure you have JDK 5.0 installed or above. You can of course
-        continue using XDoclet and get some of the benefits of
-        annotation-based metadata with older JDK versions. Note that this
-        document only describes JDK 5.0 annotations and you have to refer to
-        the XDoclet documentation for more information.</para>
-      </listitem>
-    </itemizedlist>
-  </section>
-
-  <section id="setup-configuration" revision="1">
-    <title>Configuration</title>
-
-    <para>First, set up your classpath (after you have created a new project
-    in your favorite IDE): <itemizedlist>
-        <listitem>
-          <para>Copy all Hibernate3 core and required 3rd party library files
-          (see lib/README.txt in Hibernate).</para>
-        </listitem>
-
-        <listitem>
-          <para>Copy <filename>hibernate-annotations.jar</filename>,
-          <filename>lib/hibernate-comons-annotations.jar</filename> and
-          <filename>lib/ejb3-persistence.jar</filename> from the Hibernate
-          Annotations distribution to your classpath as well.</para>
-        </listitem>
-      </itemizedlist></para>
-
-    <para>If you wish to use Hibernate Validator (TODO make a link to HV doc),
-    download it from the Hibernate website and add
-    <filename>hibernate-validator.jar</filename> in your classpath.</para>
-
-    <para>If you wish to use Hibernate Search (TODO make a link to HSearch
-    doc), download it from the Hibernate website and add
-    <filename>hibernate-search.jar</filename> and
-    <filename>lucene-core-x.y.z.jar</filename> in your classpath.</para>
-
-    <para>We also recommend a small wrapper class to startup Hibernate in a
-    static initializer block, known as <classname>HibernateUtil</classname>.
-    You might have seen this class in various forms in other areas of the
-    Hibernate documentation. For Annotation support you have to enhance this
-    helper class as follows: <programlisting>package hello;
-
-import org.hibernate.*;
-import org.hibernate.cfg.*;
-import test.*;
-import test.animals.Dog;
-
-public class HibernateUtil {
-
-private static final SessionFactory sessionFactory;
-
-    static {
-        try {
-
-            sessionFactory = new <emphasis role="bold">AnnotationConfiguration()</emphasis>.buildSessionFactory();
-        } catch (Throwable ex) {
-            // Log exception!
-            throw new ExceptionInInitializerError(ex);
-        }
-    }
-
-    public static Session getSession()
-            throws HibernateException {
-        return sessionFactory.openSession();
-    }
-}
-            </programlisting></para>
-
-    <para>Interesting here is the use of
-    <classname>AnnotationConfiguration</classname>. The packages and annotated
-    classes are declared in your regular XML configuration file (usually
-    <filename>hibernate.cfg.xml</filename>). Here is the equivalent of the
-    above declaration:</para>
-
-    <programlisting>&lt;!DOCTYPE hibernate-configuration PUBLIC
-    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
-    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"&gt;
-
-        &lt;hibernate-configuration&gt;
-          &lt;session-factory&gt;
-            <emphasis role="bold">&lt;mapping package="test.animals"/&gt;
-            &lt;mapping class="test.Flight"/&gt;
-            &lt;mapping class="test.Sky"/&gt;
-            &lt;mapping class="test.Person"/&gt;
-            &lt;mapping class="test.animals.Dog"/&gt;</emphasis>
-<emphasis role="bold">            &lt;mapping resource="test/animals/orm.xml"/&gt;</emphasis>
-          &lt;/session-factory&gt;
-        &lt;/hibernate-configuration&gt;
-        </programlisting>
-
-    <para>Note that you can mix the hbm.xml use and the new annotation one.
-    The resource element can be either an hbm file or an EJB3 XML deployment
-    descriptor. The distinction is transparent for your configuration
-    process.</para>
-
-    <para>Alternatively, you can define the annotated classes and packages
-    using the programmatic API</para>
-
-    <programlisting>            sessionFactory = new <emphasis role="bold">AnnotationConfiguration()
-                    .addPackage("test.animals") //the fully qualified package name
-                    .addAnnotatedClass(Flight.class)
-                    .addAnnotatedClass(Sky.class)
-                    .addAnnotatedClass(Person.class)
-                    .addAnnotatedClass(Dog.class)</emphasis>
-<emphasis role="bold">                    .addResource("test/animals/orm.xml")</emphasis>
-                    .buildSessionFactory();</programlisting>
-
-    <para>You can also use the Hibernate EntityManager which has its own
-    configuration mechanism. Please refer to this project documentation for
-    more details.</para>
-
-    <para>There is no other difference in the way you use Hibernate APIs with
-    annotations, except for this startup routine change or in the
-    configuration file. You can use your favorite configuration method for
-    other properties ( <filename>hibernate.properties</filename>,
-    <filename>hibernate.cfg.xml</filename>, programmatic APIs, etc). You can
-    even mix annotated persistent classes and classic
-    <filename>hbm.cfg.xml</filename> declarations with the same
-    <classname>SessionFactory</classname>. You can however not declare a class
-    several times (whether annotated or through hbm.xml). You cannot mix
-    configuration strategies (hbm vs annotations) in a mapped entity hierarchy
-    either.</para>
-
-    <para>To ease the migration process from hbm files to annotations, the
-    configuration mechanism detects the mapping duplication between
-    annotations and hbm files. HBM files are then prioritized over annotated
-    metadata on a class to class basis. You can change the priority using
-    <literal>hibernate.mapping.precedence</literal> property. The default is
-    <literal>hbm, class</literal>, changing it to <literal>class,
-    hbm</literal> will prioritize the annotated classes over hbm files when a
-    conflict occurs.</para>
-  </section>
-
-  <section>
-    <title id="setup-properties">Properties</title>
-
-    <para>Asides from the Hibernate core properties, Hibernate Annotations
-    reacts to the following one</para>
-
-    <table>
-      <title>List of properties</title>
-
-      <tgroup cols="2">
-        <thead>
-          <row>
-            <entry align="center">Property</entry>
-
-            <entry align="center">Definition</entry>
-          </row>
-        </thead>
-
-        <tbody>
-          <row>
-            <entry>hibernate.validator.apply_to_ddl</entry>
-
-            <entry>Use Hibernate Validator annotations to refine the database
-            schema generation. Default to true.</entry>
-          </row>
-
-          <row>
-            <entry></entry>
-
-            <entry></entry>
-          </row>
-        </tbody>
-      </tgroup>
-    </table>
-  </section>
-</chapter>
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/doc/reference/en/modules/setup.xml (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/doc/reference/en/modules/setup.xml)
===================================================================
--- trunk/HibernateExt/annotations/doc/reference/en/modules/setup.xml	                        (rev 0)
+++ trunk/HibernateExt/annotations/doc/reference/en/modules/setup.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,194 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<chapter>
+  <title id="setup" revision="1">Setting up an annotations project</title>
+
+  <section id="setup-requirements" revision="1">
+    <title>Requirements</title>
+
+    <itemizedlist>
+      <listitem>
+        <para>Download and unpack the Hibernate Annotations distribution from
+        the Hibernate website.</para>
+      </listitem>
+
+      <listitem>
+        <para><emphasis>This release requires Hibernate 3.2.0.GA and above. Do
+        not use this release of Hibernate Annotations with an older version of
+        Hibernate 3.x!</emphasis></para>
+      </listitem>
+
+      <listitem>
+        <para>This release is known to work on Hibernate core 3.2.0.CR5 and
+        3.2.x.GA</para>
+      </listitem>
+
+      <listitem>
+        <para>Make sure you have JDK 5.0 installed or above. You can of course
+        continue using XDoclet and get some of the benefits of
+        annotation-based metadata with older JDK versions. Note that this
+        document only describes JDK 5.0 annotations and you have to refer to
+        the XDoclet documentation for more information.</para>
+      </listitem>
+    </itemizedlist>
+  </section>
+
+  <section id="setup-configuration" revision="1">
+    <title>Configuration</title>
+
+    <para>First, set up your classpath (after you have created a new project
+    in your favorite IDE): <itemizedlist>
+        <listitem>
+          <para>Copy all Hibernate3 core and required 3rd party library files
+          (see lib/README.txt in Hibernate).</para>
+        </listitem>
+
+        <listitem>
+          <para>Copy <filename>hibernate-annotations.jar</filename>,
+          <filename>lib/hibernate-comons-annotations.jar</filename> and
+          <filename>lib/ejb3-persistence.jar</filename> from the Hibernate
+          Annotations distribution to your classpath as well.</para>
+        </listitem>
+      </itemizedlist></para>
+
+    <para>If you wish to use Hibernate Validator (TODO make a link to HV doc),
+    download it from the Hibernate website and add
+    <filename>hibernate-validator.jar</filename> in your classpath.</para>
+
+    <para>If you wish to use Hibernate Search (TODO make a link to HSearch
+    doc), download it from the Hibernate website and add
+    <filename>hibernate-search.jar</filename> and
+    <filename>lucene-core-x.y.z.jar</filename> in your classpath.</para>
+
+    <para>We also recommend a small wrapper class to startup Hibernate in a
+    static initializer block, known as <classname>HibernateUtil</classname>.
+    You might have seen this class in various forms in other areas of the
+    Hibernate documentation. For Annotation support you have to enhance this
+    helper class as follows: <programlisting>package hello;
+
+import org.hibernate.*;
+import org.hibernate.cfg.*;
+import test.*;
+import test.animals.Dog;
+
+public class HibernateUtil {
+
+private static final SessionFactory sessionFactory;
+
+    static {
+        try {
+
+            sessionFactory = new <emphasis role="bold">AnnotationConfiguration()</emphasis>.buildSessionFactory();
+        } catch (Throwable ex) {
+            // Log exception!
+            throw new ExceptionInInitializerError(ex);
+        }
+    }
+
+    public static Session getSession()
+            throws HibernateException {
+        return sessionFactory.openSession();
+    }
+}
+            </programlisting></para>
+
+    <para>Interesting here is the use of
+    <classname>AnnotationConfiguration</classname>. The packages and annotated
+    classes are declared in your regular XML configuration file (usually
+    <filename>hibernate.cfg.xml</filename>). Here is the equivalent of the
+    above declaration:</para>
+
+    <programlisting>&lt;!DOCTYPE hibernate-configuration PUBLIC
+    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
+    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"&gt;
+
+        &lt;hibernate-configuration&gt;
+          &lt;session-factory&gt;
+            <emphasis role="bold">&lt;mapping package="test.animals"/&gt;
+            &lt;mapping class="test.Flight"/&gt;
+            &lt;mapping class="test.Sky"/&gt;
+            &lt;mapping class="test.Person"/&gt;
+            &lt;mapping class="test.animals.Dog"/&gt;</emphasis>
+<emphasis role="bold">            &lt;mapping resource="test/animals/orm.xml"/&gt;</emphasis>
+          &lt;/session-factory&gt;
+        &lt;/hibernate-configuration&gt;
+        </programlisting>
+
+    <para>Note that you can mix the hbm.xml use and the new annotation one.
+    The resource element can be either an hbm file or an EJB3 XML deployment
+    descriptor. The distinction is transparent for your configuration
+    process.</para>
+
+    <para>Alternatively, you can define the annotated classes and packages
+    using the programmatic API</para>
+
+    <programlisting>            sessionFactory = new <emphasis role="bold">AnnotationConfiguration()
+                    .addPackage("test.animals") //the fully qualified package name
+                    .addAnnotatedClass(Flight.class)
+                    .addAnnotatedClass(Sky.class)
+                    .addAnnotatedClass(Person.class)
+                    .addAnnotatedClass(Dog.class)</emphasis>
+<emphasis role="bold">                    .addResource("test/animals/orm.xml")</emphasis>
+                    .buildSessionFactory();</programlisting>
+
+    <para>You can also use the Hibernate EntityManager which has its own
+    configuration mechanism. Please refer to this project documentation for
+    more details.</para>
+
+    <para>There is no other difference in the way you use Hibernate APIs with
+    annotations, except for this startup routine change or in the
+    configuration file. You can use your favorite configuration method for
+    other properties ( <filename>hibernate.properties</filename>,
+    <filename>hibernate.cfg.xml</filename>, programmatic APIs, etc). You can
+    even mix annotated persistent classes and classic
+    <filename>hbm.cfg.xml</filename> declarations with the same
+    <classname>SessionFactory</classname>. You can however not declare a class
+    several times (whether annotated or through hbm.xml). You cannot mix
+    configuration strategies (hbm vs annotations) in a mapped entity hierarchy
+    either.</para>
+
+    <para>To ease the migration process from hbm files to annotations, the
+    configuration mechanism detects the mapping duplication between
+    annotations and hbm files. HBM files are then prioritized over annotated
+    metadata on a class to class basis. You can change the priority using
+    <literal>hibernate.mapping.precedence</literal> property. The default is
+    <literal>hbm, class</literal>, changing it to <literal>class,
+    hbm</literal> will prioritize the annotated classes over hbm files when a
+    conflict occurs.</para>
+  </section>
+
+  <section>
+    <title id="setup-properties">Properties</title>
+
+    <para>Asides from the Hibernate core properties, Hibernate Annotations
+    reacts to the following one</para>
+
+    <table>
+      <title>List of properties</title>
+
+      <tgroup cols="2">
+        <thead>
+          <row>
+            <entry align="center">Property</entry>
+
+            <entry align="center">Definition</entry>
+          </row>
+        </thead>
+
+        <tbody>
+          <row>
+            <entry>hibernate.validator.apply_to_ddl</entry>
+
+            <entry>Use Hibernate Validator annotations to refine the database
+            schema generation. Default to true.</entry>
+          </row>
+
+          <row>
+            <entry></entry>
+
+            <entry></entry>
+          </row>
+        </tbody>
+      </tgroup>
+    </table>
+  </section>
+</chapter>
\ No newline at end of file

Deleted: trunk/HibernateExt/annotations/doc/reference/en/modules/xml-overriding.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/doc/reference/en/modules/xml-overriding.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/doc/reference/en/modules/xml-overriding.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,402 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<chapter id="xml-overriding" label="Overriding metadata through XML">
-  <title>Overriding metadata through XML</title>
-
-  <para>The primary target for metadata in EJB3 is annotations, but the EJB3
-  specification provides a way to override or replace the annotation defined
-  metadata through an XML deployment descriptor. In the current release only
-  pure EJB3 annotations overriding are supported. If you wish to use Hibernate
-  specific features in some entities, you'll have to either use annotations or
-  fallback to hbm files. You can of course mix and match annotated entities
-  and entities describes in hbm files.</para>
-
-  <para>The unit test suite shows some additional XML file samples.</para>
-
-  <section id="xml-overriding-principles">
-    <title>Principles</title>
-
-    <para>The XML deployment descriptor structure has been designed to reflect
-    the annotations one. So if you know the annotations structure, using the
-    XML schema will be straightforward for you.</para>
-
-    <para>You can define one ot more XML files describing your metadata, these
-    files will be merged by the overriding engine.</para>
-
-    <section>
-      <title>Global level metadata</title>
-
-      <para>You can define global level metadata available for all XML files.
-      You must not define these metadata more than once per deployment.</para>
-
-      <programlisting>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
-
-&lt;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 orm_1_0.xsd"
-  version="1.0"&gt;
-
-    &lt;persistence-unit-metadata&gt;
-        &lt;xml-mapping-metadata-complete/&gt;
-        &lt;persistence-unit-defaults&gt;
-            &lt;schema&gt;myschema&lt;/schema&gt;
-            &lt;catalog&gt;mycatalog&lt;/catalog&gt;
-            &lt;cascade-persist/&gt;
-        &lt;/persistence-unit-defaults&gt;
-    &lt;/persistence-unit-metadata&gt;</programlisting>
-
-      <para><literal>xml-mapping-metadata-complete</literal> means that all
-      entity, mapped-superclasses and embeddable metadata should be picked up
-      from XML (ie ignore annotations).</para>
-
-      <para><literal>schema / catalog</literal> will override all default
-      definitions of schema and catalog in the metadata (both XML and
-      annotations).</para>
-
-      <para><literal>cascade-persist</literal> means that all associations
-      have PERSIST as a cascade type. We recommend you to not use this
-      feature.</para>
-    </section>
-
-    <section id="xml-overriding-principles-entity" revision="1">
-      <title>Entity level metadata</title>
-
-      <para>You can either define or override metadata informations on a given
-      entity.</para>
-
-      <programlistingco>
-        <areaspec>
-          <area coords="3 85" id="aa1" />
-
-          <area coords="9 85" id="aa2" />
-
-          <area coords="10 85" id="aa3" />
-
-          <area coords="11 85" id="aa4" />
-
-          <area coords="17 85" id="aa5" />
-
-          <area coords="23 85" id="aa6" />
-
-          <area coords="24 85" id="aa7" />
-
-          <area coords="25 85" id="aa8" />
-
-          <area coords="26 85" id="aa9" />
-
-          <area coords="31 85" id="aa10" />
-        </areaspec>
-
-        <programlisting>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
-
-&lt;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 orm_1_0.xsd"
-  version="1.0"&gt;
-
-    &lt;package&gt;org.hibernate.test.annotations.reflection&lt;/package&gt;
-    &lt;entity class="Administration" access="PROPERTY" metadata-complete="true"&gt;
-        &lt;table name="tbl_admin"&gt;
-            &lt;unique-constraint&gt;
-                &lt;column-name&gt;firstname&lt;/column-name&gt;
-                &lt;column-name&gt;lastname&lt;/column-name&gt;
-            &lt;/unique-constraint&gt;
-        &lt;/table&gt;
-        &lt;secondary-table name="admin2"&gt;
-            &lt;primary-key-join-column name="admin_id" referenced-column-name="id"/&gt;
-            &lt;unique-constraint&gt;
-                &lt;column-name&gt;address&lt;/column-name&gt;
-            &lt;/unique-constraint&gt;
-        &lt;/secondary-table&gt;
-        &lt;id-class class="SocialSecurityNumber"/&gt;
-        &lt;inheritance strategy="JOINED"/&gt;
-        &lt;sequence-generator name="seqhilo" sequence-name="seqhilo"/&gt;
-        &lt;table-generator name="table" table="tablehilo"/&gt;
-        ...
-    &lt;/entity&gt;
-
-    &lt;entity class="PostalAdministration"&gt;
-        &lt;primary-key-join-column name="id"/&gt;
-        ...
-    &lt;/entity&gt;
-&lt;/entity-mappings&gt;</programlisting>
-
-        <calloutlist>
-          <callout arearefs="aa1">
-            <para><literal>entity-mappings</literal>: entity-mappings is the
-            root element for all XML files. You must declare the xml schema,
-            the schema file is included in the hibernate-annotations.jar file,
-            no internet access will be processed by Hibernate
-            Annotations.</para>
-          </callout>
-
-          <callout arearefs="aa2">
-            <para><literal>package</literal> (optional): default package used
-            for all non qualified class names in the given deployment
-            descriptor file.</para>
-          </callout>
-
-          <callout arearefs="aa3">
-            <para><literal>entity</literal>: desribes an entity.</para>
-
-            <para><literal>metadata-complete</literal> defines whether the
-            metadata description for this element is complete or not (in other
-            words, if annotations present at the class level should be
-            considered or not).</para>
-
-            <para>An entity has to have a <literal>class</literal> attribute
-            refering the java class the metadata applies on.</para>
-
-            <para>You can overrides entity name through the
-            <literal>name</literal> attribute, if none is defined and if an
-            <literal>@Entity.name</literal> is present, then it is used
-            (provided that metadata complete is not set).</para>
-
-            <para>For netadata complete (see below) element, you can define an
-            <literal>access</literal> (either <literal>FIELD</literal> or
-            <literal>PROPERTY</literal> (default)). For non medatada complete
-            element, if <literal>access</literal> is not defined, the @Id
-            position will lead position, if <literal>access</literal> is
-            defined, the value is used.</para>
-          </callout>
-
-          <callout arearefs="aa4">
-            <para><literal>table</literal>: you can declare table properties
-            (name, schema, catalog), if none is defined, the java annotation
-            is used.</para>
-
-            <para>You can define one or several unique constraints as seen in
-            the example</para>
-          </callout>
-
-          <callout arearefs="aa5">
-            <para><literal>secondary-table</literal>: defines a secondary
-            table very much like a regular table except that you can define
-            the primary key / foreign key column(s) through the
-            <literal>primary-key-join-column</literal> element. On non
-            metadata complete, annotation secondary tables are used only if
-            there is no <literal>secondary-table</literal> definition,
-            annotations are ignored otherwise.</para>
-          </callout>
-
-          <callout arearefs="aa6">
-            <para><literal>id-class</literal>: defines the id class in a
-            similar way <literal>@IdClass</literal> does</para>
-          </callout>
-
-          <callout arearefs="aa7">
-            <para><literal>inheritance</literal>: defines the inheritance
-            strategy (<literal>JOINED</literal>,
-            <literal>TABLE_PER_CLASS</literal>,
-            <literal>SINGLE_TABLE</literal>), Available only at the root
-            entity level</para>
-          </callout>
-
-          <callout arearefs="aa8">
-            <para><literal>sequence-generator</literal>: defines a sequence
-            generator</para>
-          </callout>
-
-          <callout arearefs="aa9">
-            <para><literal>table-generator</literal>: defines a table
-            generator</para>
-          </callout>
-
-          <callout arearefs="aa10">
-            <para><literal><literal>primary-key-join-column</literal></literal>:
-            defines the primary key join column for sub entities when JOINED
-            inheritance strategy is used</para>
-          </callout>
-        </calloutlist>
-      </programlistingco>
-
-      <programlistingco>
-        <areaspec>
-          <area coords="11 85" id="ab1" />
-
-          <area coords="18 85" id="ab2" />
-
-          <area coords="22  85" id="ab3" />
-
-          <area coords="28 85" id="ab4" />
-
-          <area coords="34 85" id="ab5" />
-        </areaspec>
-
-        <programlisting>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
-
-&lt;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 orm_1_0.xsd"
-  version="1.0"&gt;
-
-    &lt;package&gt;org.hibernate.test.annotations.reflection&lt;/package&gt;
-    &lt;entity class="Music" access="PROPERTY" metadata-complete="true"&gt;
-        &lt;discriminator-value&gt;Generic&lt;/discriminator-value&gt;
-        &lt;discriminator-column length="34"/&gt;
-        ...
-    &lt;/entity&gt;
-
-    &lt;entity class="PostalAdministration"&gt;
-        &lt;primary-key-join-column name="id"/&gt;
-        &lt;named-query name="adminById"&gt;
-            &lt;query&gt;select m from Administration m where m.id = :id&lt;/query&gt;
-            &lt;hint name="org.hibernate.timeout" value="200"/&gt;
-        &lt;/named-query&gt;
-        &lt;named-native-query name="allAdmin" result-set-mapping="adminrs"&gt;
-            &lt;query&gt;select *, count(taxpayer_id) as taxPayerNumber 
-            from Administration, TaxPayer
-            where taxpayer_admin_id = admin_id group by ...&lt;/query&gt;
-            &lt;hint name="org.hibernate.timeout" value="200"/&gt;
-        &lt;/named-native-query&gt;
-        &lt;sql-result-set-mapping name="adminrs"&gt;
-            &lt;entity-result entity-class="Administration"&gt;
-                &lt;field-result name="name" column="fld_name"/&gt;
-            &lt;/entity-result&gt;
-            &lt;column-result name="taxPayerNumber"/&gt;
-        &lt;/sql-result-set-mapping&gt;
-        &lt;attribute-override name="ground"&gt;
-            &lt;column name="fld_ground" unique="true" scale="2"/&gt;
-        &lt;/attribute-override&gt;
-        &lt;association-override name="referer"&gt;
-            &lt;join-column name="referer_id" referenced-column-name="id"/&gt;
-        &lt;/association-override&gt;
-        ...
-    &lt;/entity&gt;
-&lt;/entity-mappings&gt;</programlisting>
-
-        <calloutlist>
-          <callout arearefs="ab1">
-            <para><literal>discriminator-value /
-            discriminator-column</literal>: defines the discriminator value
-            and the column holding it when the SINGLE_TABLE inheritance
-            strategy is chosen</para>
-          </callout>
-
-          <callout arearefs="ab2">
-            <para><literal>named-query</literal>: defines named queries and
-            possibly the hints associated to them. Those definitions are
-            additive to the one defined in annotations, if two definitions
-            have the same name, the XML one has priority.</para>
-          </callout>
-
-          <callout arearefs="ab3">
-            <para><literal>named-native-query</literal>: defines an named
-            native query and its sql result set mapping. Alternatively, you
-            can define the <literal>result-class</literal>. Those definitions
-            are additive to the one defined in annotations, if two definitions
-            have the same name, the XML one has priority.</para>
-          </callout>
-
-          <callout arearefs="ab4">
-            <para><literal>sql-result-set-mapping</literal>: describes the
-            result set mapping structure. You can define both entity and
-            column mappings. Those definitions are additive to the one defined
-            in annotations, if two definitions have the same name, the XML one
-            has priority</para>
-          </callout>
-
-          <callout arearefs="ab5">
-            <para><literal>attribute-override /
-            association-override</literal>: defines a column or join column
-            overriding. This overriding is additive to the one defined in
-            annotations</para>
-          </callout>
-        </calloutlist>
-      </programlistingco>
-
-      <para>Same applies for <literal>&lt;embeddable&gt;</literal> and
-      <literal>&lt;mapped-superclass&gt;</literal>.</para>
-    </section>
-
-    <section>
-      <title>Property level metadata</title>
-
-      <para>You can of course defines XML overriding for properties. If
-      metadata complete is defined, then additional properties (ie at the Java
-      level) will be ignored. Otherwise, once you start overriding a property,
-      all annotations on the given property are ignored. All property level
-      metadata behave in <literal>entity/attributes</literal>,
-      <literal>mapped-superclass/attributes</literal> or
-      <literal>embeddable/attributes</literal>.</para>
-
-      <programlisting>    &lt;attributes&gt;
-        &lt;id name="id"&gt;
-            &lt;column name="fld_id"/&gt;
-            &lt;generated-value generator="generator" strategy="SEQUENCE"/&gt;
-            &lt;temporal&gt;DATE&lt;/temporal&gt;
-            &lt;sequence-generator name="generator" sequence-name="seq"/&gt;
-        &lt;/id&gt;
-        &lt;version name="version"/&gt;
-        &lt;embedded name="embeddedObject"&gt;
-            &lt;attribute-override name"subproperty"&gt;
-                &lt;column name="my_column"/&gt;
-            &lt;/attribute-override&gt;
-        &lt;/embedded&gt;
-        &lt;basic name="status" optional="false"&gt;
-            &lt;enumerated&gt;STRING&lt;/enumerated&gt;
-        &lt;/basic&gt;
-        &lt;basic name="serial" optional="true"&gt;
-            &lt;column name="serialbytes"/&gt;
-            &lt;lob/&gt;
-        &lt;/basic&gt;
-        &lt;basic name="terminusTime" fetch="LAZY"&gt;
-            &lt;temporal&gt;TIMESTAMP&lt;/temporal&gt;
-        &lt;/basic&gt;
-    &lt;/attributes&gt;</programlisting>
-
-      <para>You can override a property through <literal>id</literal>,
-      <literal>embedded-id</literal>, <literal>version</literal>,
-      <literal>embedded</literal> and <literal>basic</literal>. Each of these
-      elements can have subelements accordingly: <literal>lob</literal>,
-      <literal>temporal</literal>, <literal>enumerated</literal>,
-      <literal>column</literal>.</para>
-    </section>
-
-    <section>
-      <title>Association level metadata</title>
-
-      <para>You can define XML overriding for associations. All association
-      level metadata behave in <literal>entity/attributes</literal>,
-      <literal>mapped-superclass/attributes</literal> or
-      <literal>embeddable/attributes</literal>.</para>
-
-      <programlisting>    &lt;attributes&gt;
-        &lt;one-to-many name="players" fetch="EAGER"&gt;
-            &lt;map-key name="name"/&gt;
-            &lt;join-column name="driver"/&gt;
-            &lt;join-column name="number"/&gt;
-        &lt;/one-to-many&gt;
-        &lt;many-to-many name="roads" target-entity="Administration"&gt;
-            &lt;order-by&gt;maxSpeed&lt;/order-by&gt;
-            &lt;join-table name="bus_road"&gt;
-                &lt;join-column name="driver"/&gt;
-                &lt;join-column name="number"/&gt;
-                &lt;inverse-join-column name="road_id"/&gt;
-                &lt;unique-constraint&gt;
-                    &lt;column-name&gt;driver&lt;/column-name&gt;
-                    &lt;column-name&gt;number&lt;/column-name&gt;
-                &lt;/unique-constraint&gt;
-            &lt;/join-table&gt;
-        &lt;/many-to-many&gt;
-        &lt;many-to-many name="allTimeDrivers" mapped-by="drivenBuses"&gt;
-    &lt;/attributes&gt;</programlisting>
-
-      <para>You can override an association through
-      <literal>one-to-many</literal>, <literal>one-to-one</literal>,
-      <literal>many-to-one</literal>, and <literal>many-to-many</literal>.
-      Each of these elements can have subelements accordingly:
-      <literal>join-table</literal> (which can have
-      <literal>join-column</literal>s and
-      <literal>inverse-join-column</literal>s),
-      <literal><literal>join-column</literal>s</literal>,
-      <literal>map-key</literal>, and <literal>order-by</literal>.
-      <literal>mapped-by</literal> and <literal>target-entity</literal> can be
-      defined as attributes when it makes sense. Once again the structure is
-      reflects the annotations structure. You can find all semantic
-      informations in the chapter describing annotations.</para>
-    </section>
-  </section>
-</chapter>
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/doc/reference/en/modules/xml-overriding.xml (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/doc/reference/en/modules/xml-overriding.xml)
===================================================================
--- trunk/HibernateExt/annotations/doc/reference/en/modules/xml-overriding.xml	                        (rev 0)
+++ trunk/HibernateExt/annotations/doc/reference/en/modules/xml-overriding.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,402 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<chapter id="xml-overriding" label="Overriding metadata through XML">
+  <title>Overriding metadata through XML</title>
+
+  <para>The primary target for metadata in EJB3 is annotations, but the EJB3
+  specification provides a way to override or replace the annotation defined
+  metadata through an XML deployment descriptor. In the current release only
+  pure EJB3 annotations overriding are supported. If you wish to use Hibernate
+  specific features in some entities, you'll have to either use annotations or
+  fallback to hbm files. You can of course mix and match annotated entities
+  and entities describes in hbm files.</para>
+
+  <para>The unit test suite shows some additional XML file samples.</para>
+
+  <section id="xml-overriding-principles">
+    <title>Principles</title>
+
+    <para>The XML deployment descriptor structure has been designed to reflect
+    the annotations one. So if you know the annotations structure, using the
+    XML schema will be straightforward for you.</para>
+
+    <para>You can define one ot more XML files describing your metadata, these
+    files will be merged by the overriding engine.</para>
+
+    <section>
+      <title>Global level metadata</title>
+
+      <para>You can define global level metadata available for all XML files.
+      You must not define these metadata more than once per deployment.</para>
+
+      <programlisting>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+
+&lt;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 orm_1_0.xsd"
+  version="1.0"&gt;
+
+    &lt;persistence-unit-metadata&gt;
+        &lt;xml-mapping-metadata-complete/&gt;
+        &lt;persistence-unit-defaults&gt;
+            &lt;schema&gt;myschema&lt;/schema&gt;
+            &lt;catalog&gt;mycatalog&lt;/catalog&gt;
+            &lt;cascade-persist/&gt;
+        &lt;/persistence-unit-defaults&gt;
+    &lt;/persistence-unit-metadata&gt;</programlisting>
+
+      <para><literal>xml-mapping-metadata-complete</literal> means that all
+      entity, mapped-superclasses and embeddable metadata should be picked up
+      from XML (ie ignore annotations).</para>
+
+      <para><literal>schema / catalog</literal> will override all default
+      definitions of schema and catalog in the metadata (both XML and
+      annotations).</para>
+
+      <para><literal>cascade-persist</literal> means that all associations
+      have PERSIST as a cascade type. We recommend you to not use this
+      feature.</para>
+    </section>
+
+    <section id="xml-overriding-principles-entity" revision="1">
+      <title>Entity level metadata</title>
+
+      <para>You can either define or override metadata informations on a given
+      entity.</para>
+
+      <programlistingco>
+        <areaspec>
+          <area coords="3 85" id="aa1" />
+
+          <area coords="9 85" id="aa2" />
+
+          <area coords="10 85" id="aa3" />
+
+          <area coords="11 85" id="aa4" />
+
+          <area coords="17 85" id="aa5" />
+
+          <area coords="23 85" id="aa6" />
+
+          <area coords="24 85" id="aa7" />
+
+          <area coords="25 85" id="aa8" />
+
+          <area coords="26 85" id="aa9" />
+
+          <area coords="31 85" id="aa10" />
+        </areaspec>
+
+        <programlisting>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+
+&lt;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 orm_1_0.xsd"
+  version="1.0"&gt;
+
+    &lt;package&gt;org.hibernate.test.annotations.reflection&lt;/package&gt;
+    &lt;entity class="Administration" access="PROPERTY" metadata-complete="true"&gt;
+        &lt;table name="tbl_admin"&gt;
+            &lt;unique-constraint&gt;
+                &lt;column-name&gt;firstname&lt;/column-name&gt;
+                &lt;column-name&gt;lastname&lt;/column-name&gt;
+            &lt;/unique-constraint&gt;
+        &lt;/table&gt;
+        &lt;secondary-table name="admin2"&gt;
+            &lt;primary-key-join-column name="admin_id" referenced-column-name="id"/&gt;
+            &lt;unique-constraint&gt;
+                &lt;column-name&gt;address&lt;/column-name&gt;
+            &lt;/unique-constraint&gt;
+        &lt;/secondary-table&gt;
+        &lt;id-class class="SocialSecurityNumber"/&gt;
+        &lt;inheritance strategy="JOINED"/&gt;
+        &lt;sequence-generator name="seqhilo" sequence-name="seqhilo"/&gt;
+        &lt;table-generator name="table" table="tablehilo"/&gt;
+        ...
+    &lt;/entity&gt;
+
+    &lt;entity class="PostalAdministration"&gt;
+        &lt;primary-key-join-column name="id"/&gt;
+        ...
+    &lt;/entity&gt;
+&lt;/entity-mappings&gt;</programlisting>
+
+        <calloutlist>
+          <callout arearefs="aa1">
+            <para><literal>entity-mappings</literal>: entity-mappings is the
+            root element for all XML files. You must declare the xml schema,
+            the schema file is included in the hibernate-annotations.jar file,
+            no internet access will be processed by Hibernate
+            Annotations.</para>
+          </callout>
+
+          <callout arearefs="aa2">
+            <para><literal>package</literal> (optional): default package used
+            for all non qualified class names in the given deployment
+            descriptor file.</para>
+          </callout>
+
+          <callout arearefs="aa3">
+            <para><literal>entity</literal>: desribes an entity.</para>
+
+            <para><literal>metadata-complete</literal> defines whether the
+            metadata description for this element is complete or not (in other
+            words, if annotations present at the class level should be
+            considered or not).</para>
+
+            <para>An entity has to have a <literal>class</literal> attribute
+            refering the java class the metadata applies on.</para>
+
+            <para>You can overrides entity name through the
+            <literal>name</literal> attribute, if none is defined and if an
+            <literal>@Entity.name</literal> is present, then it is used
+            (provided that metadata complete is not set).</para>
+
+            <para>For netadata complete (see below) element, you can define an
+            <literal>access</literal> (either <literal>FIELD</literal> or
+            <literal>PROPERTY</literal> (default)). For non medatada complete
+            element, if <literal>access</literal> is not defined, the @Id
+            position will lead position, if <literal>access</literal> is
+            defined, the value is used.</para>
+          </callout>
+
+          <callout arearefs="aa4">
+            <para><literal>table</literal>: you can declare table properties
+            (name, schema, catalog), if none is defined, the java annotation
+            is used.</para>
+
+            <para>You can define one or several unique constraints as seen in
+            the example</para>
+          </callout>
+
+          <callout arearefs="aa5">
+            <para><literal>secondary-table</literal>: defines a secondary
+            table very much like a regular table except that you can define
+            the primary key / foreign key column(s) through the
+            <literal>primary-key-join-column</literal> element. On non
+            metadata complete, annotation secondary tables are used only if
+            there is no <literal>secondary-table</literal> definition,
+            annotations are ignored otherwise.</para>
+          </callout>
+
+          <callout arearefs="aa6">
+            <para><literal>id-class</literal>: defines the id class in a
+            similar way <literal>@IdClass</literal> does</para>
+          </callout>
+
+          <callout arearefs="aa7">
+            <para><literal>inheritance</literal>: defines the inheritance
+            strategy (<literal>JOINED</literal>,
+            <literal>TABLE_PER_CLASS</literal>,
+            <literal>SINGLE_TABLE</literal>), Available only at the root
+            entity level</para>
+          </callout>
+
+          <callout arearefs="aa8">
+            <para><literal>sequence-generator</literal>: defines a sequence
+            generator</para>
+          </callout>
+
+          <callout arearefs="aa9">
+            <para><literal>table-generator</literal>: defines a table
+            generator</para>
+          </callout>
+
+          <callout arearefs="aa10">
+            <para><literal><literal>primary-key-join-column</literal></literal>:
+            defines the primary key join column for sub entities when JOINED
+            inheritance strategy is used</para>
+          </callout>
+        </calloutlist>
+      </programlistingco>
+
+      <programlistingco>
+        <areaspec>
+          <area coords="11 85" id="ab1" />
+
+          <area coords="18 85" id="ab2" />
+
+          <area coords="22  85" id="ab3" />
+
+          <area coords="28 85" id="ab4" />
+
+          <area coords="34 85" id="ab5" />
+        </areaspec>
+
+        <programlisting>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+
+&lt;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 orm_1_0.xsd"
+  version="1.0"&gt;
+
+    &lt;package&gt;org.hibernate.test.annotations.reflection&lt;/package&gt;
+    &lt;entity class="Music" access="PROPERTY" metadata-complete="true"&gt;
+        &lt;discriminator-value&gt;Generic&lt;/discriminator-value&gt;
+        &lt;discriminator-column length="34"/&gt;
+        ...
+    &lt;/entity&gt;
+
+    &lt;entity class="PostalAdministration"&gt;
+        &lt;primary-key-join-column name="id"/&gt;
+        &lt;named-query name="adminById"&gt;
+            &lt;query&gt;select m from Administration m where m.id = :id&lt;/query&gt;
+            &lt;hint name="org.hibernate.timeout" value="200"/&gt;
+        &lt;/named-query&gt;
+        &lt;named-native-query name="allAdmin" result-set-mapping="adminrs"&gt;
+            &lt;query&gt;select *, count(taxpayer_id) as taxPayerNumber 
+            from Administration, TaxPayer
+            where taxpayer_admin_id = admin_id group by ...&lt;/query&gt;
+            &lt;hint name="org.hibernate.timeout" value="200"/&gt;
+        &lt;/named-native-query&gt;
+        &lt;sql-result-set-mapping name="adminrs"&gt;
+            &lt;entity-result entity-class="Administration"&gt;
+                &lt;field-result name="name" column="fld_name"/&gt;
+            &lt;/entity-result&gt;
+            &lt;column-result name="taxPayerNumber"/&gt;
+        &lt;/sql-result-set-mapping&gt;
+        &lt;attribute-override name="ground"&gt;
+            &lt;column name="fld_ground" unique="true" scale="2"/&gt;
+        &lt;/attribute-override&gt;
+        &lt;association-override name="referer"&gt;
+            &lt;join-column name="referer_id" referenced-column-name="id"/&gt;
+        &lt;/association-override&gt;
+        ...
+    &lt;/entity&gt;
+&lt;/entity-mappings&gt;</programlisting>
+
+        <calloutlist>
+          <callout arearefs="ab1">
+            <para><literal>discriminator-value /
+            discriminator-column</literal>: defines the discriminator value
+            and the column holding it when the SINGLE_TABLE inheritance
+            strategy is chosen</para>
+          </callout>
+
+          <callout arearefs="ab2">
+            <para><literal>named-query</literal>: defines named queries and
+            possibly the hints associated to them. Those definitions are
+            additive to the one defined in annotations, if two definitions
+            have the same name, the XML one has priority.</para>
+          </callout>
+
+          <callout arearefs="ab3">
+            <para><literal>named-native-query</literal>: defines an named
+            native query and its sql result set mapping. Alternatively, you
+            can define the <literal>result-class</literal>. Those definitions
+            are additive to the one defined in annotations, if two definitions
+            have the same name, the XML one has priority.</para>
+          </callout>
+
+          <callout arearefs="ab4">
+            <para><literal>sql-result-set-mapping</literal>: describes the
+            result set mapping structure. You can define both entity and
+            column mappings. Those definitions are additive to the one defined
+            in annotations, if two definitions have the same name, the XML one
+            has priority</para>
+          </callout>
+
+          <callout arearefs="ab5">
+            <para><literal>attribute-override /
+            association-override</literal>: defines a column or join column
+            overriding. This overriding is additive to the one defined in
+            annotations</para>
+          </callout>
+        </calloutlist>
+      </programlistingco>
+
+      <para>Same applies for <literal>&lt;embeddable&gt;</literal> and
+      <literal>&lt;mapped-superclass&gt;</literal>.</para>
+    </section>
+
+    <section>
+      <title>Property level metadata</title>
+
+      <para>You can of course defines XML overriding for properties. If
+      metadata complete is defined, then additional properties (ie at the Java
+      level) will be ignored. Otherwise, once you start overriding a property,
+      all annotations on the given property are ignored. All property level
+      metadata behave in <literal>entity/attributes</literal>,
+      <literal>mapped-superclass/attributes</literal> or
+      <literal>embeddable/attributes</literal>.</para>
+
+      <programlisting>    &lt;attributes&gt;
+        &lt;id name="id"&gt;
+            &lt;column name="fld_id"/&gt;
+            &lt;generated-value generator="generator" strategy="SEQUENCE"/&gt;
+            &lt;temporal&gt;DATE&lt;/temporal&gt;
+            &lt;sequence-generator name="generator" sequence-name="seq"/&gt;
+        &lt;/id&gt;
+        &lt;version name="version"/&gt;
+        &lt;embedded name="embeddedObject"&gt;
+            &lt;attribute-override name"subproperty"&gt;
+                &lt;column name="my_column"/&gt;
+            &lt;/attribute-override&gt;
+        &lt;/embedded&gt;
+        &lt;basic name="status" optional="false"&gt;
+            &lt;enumerated&gt;STRING&lt;/enumerated&gt;
+        &lt;/basic&gt;
+        &lt;basic name="serial" optional="true"&gt;
+            &lt;column name="serialbytes"/&gt;
+            &lt;lob/&gt;
+        &lt;/basic&gt;
+        &lt;basic name="terminusTime" fetch="LAZY"&gt;
+            &lt;temporal&gt;TIMESTAMP&lt;/temporal&gt;
+        &lt;/basic&gt;
+    &lt;/attributes&gt;</programlisting>
+
+      <para>You can override a property through <literal>id</literal>,
+      <literal>embedded-id</literal>, <literal>version</literal>,
+      <literal>embedded</literal> and <literal>basic</literal>. Each of these
+      elements can have subelements accordingly: <literal>lob</literal>,
+      <literal>temporal</literal>, <literal>enumerated</literal>,
+      <literal>column</literal>.</para>
+    </section>
+
+    <section>
+      <title>Association level metadata</title>
+
+      <para>You can define XML overriding for associations. All association
+      level metadata behave in <literal>entity/attributes</literal>,
+      <literal>mapped-superclass/attributes</literal> or
+      <literal>embeddable/attributes</literal>.</para>
+
+      <programlisting>    &lt;attributes&gt;
+        &lt;one-to-many name="players" fetch="EAGER"&gt;
+            &lt;map-key name="name"/&gt;
+            &lt;join-column name="driver"/&gt;
+            &lt;join-column name="number"/&gt;
+        &lt;/one-to-many&gt;
+        &lt;many-to-many name="roads" target-entity="Administration"&gt;
+            &lt;order-by&gt;maxSpeed&lt;/order-by&gt;
+            &lt;join-table name="bus_road"&gt;
+                &lt;join-column name="driver"/&gt;
+                &lt;join-column name="number"/&gt;
+                &lt;inverse-join-column name="road_id"/&gt;
+                &lt;unique-constraint&gt;
+                    &lt;column-name&gt;driver&lt;/column-name&gt;
+                    &lt;column-name&gt;number&lt;/column-name&gt;
+                &lt;/unique-constraint&gt;
+            &lt;/join-table&gt;
+        &lt;/many-to-many&gt;
+        &lt;many-to-many name="allTimeDrivers" mapped-by="drivenBuses"&gt;
+    &lt;/attributes&gt;</programlisting>
+
+      <para>You can override an association through
+      <literal>one-to-many</literal>, <literal>one-to-one</literal>,
+      <literal>many-to-one</literal>, and <literal>many-to-many</literal>.
+      Each of these elements can have subelements accordingly:
+      <literal>join-table</literal> (which can have
+      <literal>join-column</literal>s and
+      <literal>inverse-join-column</literal>s),
+      <literal><literal>join-column</literal>s</literal>,
+      <literal>map-key</literal>, and <literal>order-by</literal>.
+      <literal>mapped-by</literal> and <literal>target-entity</literal> can be
+      defined as attributes when it makes sense. Once again the structure is
+      reflects the annotations structure. You can find all semantic
+      informations in the chapter describing annotations.</para>
+    </section>
+  </section>
+</chapter>
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/doc/reference/en/styles (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/doc/reference/en/styles)

Deleted: trunk/HibernateExt/annotations/doc/reference/en/styles/fopdf.xsl
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/doc/reference/en/styles/fopdf.xsl	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/doc/reference/en/styles/fopdf.xsl	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,519 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
-
-    This is the XSL FO configuration file for the Hibernate
-    Reference Documentation. It defines a custom titlepage and
-    the parameters for the A4 sized PDF printable output.
-
-    It took me days to figure out this stuff and fix most of
-    the obvious bugs in the DocBook XSL distribution. Some of
-    the workarounds might not be appropriate with a newer version
-    of DocBook XSL. This file is released as part of Hibernate,
-    hence LGPL licensed.
-
-    christian at hibernate.org
-
--->
-
-<!DOCTYPE xsl:stylesheet [
-    <!ENTITY db_xsl_path        "../../../../../../Hibernate3/doc/reference/support/docbook-xsl/">
-]>
-
-<xsl:stylesheet
-    version="1.0"
-    xmlns="http://www.w3.org/TR/xhtml1/transitional"
-    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-    xmlns:fo="http://www.w3.org/1999/XSL/Format"
-    exclude-result-prefixes="#default">
-
-    <xsl:import href="&db_xsl_path;/fo/docbook.xsl"/>
-
-    <!--###################################################
-                       Custom Title Page
-        ################################################### -->
-
-    <xsl:template name="book.titlepage.recto">
-        <fo:block>
-            <fo:table table-layout="fixed" width="175mm">
-                <fo:table-column column-width="175mm"/>
-                <fo:table-body>
-                    <fo:table-row>
-                        <fo:table-cell text-align="center">
-                            <fo:block>
-                                <fo:external-graphic src="file:images/hibernate_logo_a.png"/>
-                            </fo:block>
-                            <fo:block font-family="Helvetica" font-size="22pt" padding-before="10mm">
-                                <xsl:value-of select="bookinfo/title"/>
-                            </fo:block>
-                            <fo:block font-family="Helvetica" font-size="18pt" padding-before="10mm">
-                                <xsl:value-of select="bookinfo/subtitle"/>
-                            </fo:block>
-                            <fo:block font-family="Helvetica" font-size="12pt" padding="10mm">
-                                Version:
-                                <xsl:value-of select="bookinfo/releaseinfo"/>
-                            </fo:block>
-                        </fo:table-cell>
-                    </fo:table-row>
-                </fo:table-body>
-            </fo:table>
-        </fo:block>
-    </xsl:template>
-
-    <!-- Prevent blank pages in output -->
-    <xsl:template name="book.titlepage.before.verso">
-    </xsl:template>
-    <xsl:template name="book.titlepage.verso">
-    </xsl:template>
-    <xsl:template name="book.titlepage.separator">
-    </xsl:template>
-
-    <!--###################################################
-                          Header
-        ################################################### -->
-
-    <!-- More space in the center header for long text -->
-    <xsl:attribute-set name="header.content.properties">
-        <xsl:attribute name="font-family">
-            <xsl:value-of select="$body.font.family"/>
-        </xsl:attribute>
-        <xsl:attribute name="margin-left">-5em</xsl:attribute>
-        <xsl:attribute name="margin-right">-5em</xsl:attribute>
-    </xsl:attribute-set>
-
-    <!--###################################################
-                          Custom Footer
-        ################################################### -->
-
-    <!-- This footer prints the Hibernate version number on the left side -->
-    <xsl:template name="footer.content">
-        <xsl:param name="pageclass" select="''"/>
-        <xsl:param name="sequence" select="''"/>
-        <xsl:param name="position" select="''"/>
-        <xsl:param name="gentext-key" select="''"/>
-
-        <xsl:variable name="Version">
-            <xsl:choose>
-                <xsl:when test="//releaseinfo">
-                    <xsl:text>Hibernate </xsl:text>
-                    <xsl:value-of select="//releaseinfo"/>
-                </xsl:when>
-                <xsl:otherwise>
-                    <!-- nop -->
-                </xsl:otherwise>
-            </xsl:choose>
-        </xsl:variable>
-
-        <xsl:choose>
-            <xsl:when test="$sequence='blank'">
-                <xsl:choose>
-                    <xsl:when test="$double.sided != 0 and $position = 'left'">
-                        <xsl:value-of select="$Version"/>
-                    </xsl:when>
-
-                    <xsl:when test="$double.sided = 0 and $position = 'center'">
-                        <!-- nop -->
-                    </xsl:when>
-
-                    <xsl:otherwise>
-                        <fo:page-number/>
-                    </xsl:otherwise>
-                </xsl:choose>
-            </xsl:when>
-
-            <xsl:when test="$pageclass='titlepage'">
-                <!-- nop: other titlepage sequences have no footer -->
-            </xsl:when>
-
-            <xsl:when test="$double.sided != 0 and $sequence = 'even' and $position='left'">
-                <fo:page-number/>
-            </xsl:when>
-
-            <xsl:when test="$double.sided != 0 and $sequence = 'odd' and $position='right'">
-                <fo:page-number/>
-            </xsl:when>
-
-            <xsl:when test="$double.sided = 0 and $position='right'">
-                <fo:page-number/>
-            </xsl:when>
-
-            <xsl:when test="$double.sided != 0 and $sequence = 'odd' and $position='left'">
-                <xsl:value-of select="$Version"/>
-            </xsl:when>
-
-            <xsl:when test="$double.sided != 0 and $sequence = 'even' and $position='right'">
-                <xsl:value-of select="$Version"/>
-            </xsl:when>
-
-            <xsl:when test="$double.sided = 0 and $position='left'">
-                <xsl:value-of select="$Version"/>
-            </xsl:when>
-
-            <xsl:otherwise>
-                <!-- nop -->
-            </xsl:otherwise>
-        </xsl:choose>
-    </xsl:template>
-
-    <!--###################################################
-                       Custom Toc Line
-        ################################################### -->
-    
-    <!-- Improve the TOC. -->
-    <xsl:template name="toc.line">
-        <xsl:variable name="id">
-            <xsl:call-template name="object.id"/>
-        </xsl:variable>
-
-        <xsl:variable name="label">
-            <xsl:apply-templates select="." mode="label.markup"/>
-        </xsl:variable>
-
-        <fo:block text-align-last="justify"
-            end-indent="{$toc.indent.width}pt"
-            last-line-end-indent="-{$toc.indent.width}pt">
-            <fo:inline keep-with-next.within-line="always">
-                <fo:basic-link internal-destination="{$id}">
-
-                    <!-- Chapter titles should be bold. -->
-                    <xsl:choose>
-                        <xsl:when test="local-name(.) = 'chapter'">
-                            <xsl:attribute name="font-weight">bold</xsl:attribute>
-                        </xsl:when>
-                    </xsl:choose>
-
-                    <xsl:if test="$label != ''">
-                        <xsl:copy-of select="$label"/>
-                        <xsl:value-of select="$autotoc.label.separator"/>
-                    </xsl:if>
-                    <xsl:apply-templates select="." mode="titleabbrev.markup"/>
-                </fo:basic-link>
-            </fo:inline>
-            <fo:inline keep-together.within-line="always">
-                <xsl:text> </xsl:text>
-                <fo:leader leader-pattern="dots"
-                    leader-pattern-width="3pt"
-                    leader-alignment="reference-area"
-                    keep-with-next.within-line="always"/>
-                <xsl:text> </xsl:text>
-                <fo:basic-link internal-destination="{$id}">
-                    <fo:page-number-citation ref-id="{$id}"/>
-                </fo:basic-link>
-            </fo:inline>
-        </fo:block>
-    </xsl:template>
-
-    <!--###################################################
-                          Extensions
-        ################################################### -->
-
-    <!-- These extensions are required for table printing and other stuff -->
-    <xsl:param name="use.extensions">1</xsl:param>
-    <xsl:param name="tablecolumns.extension">0</xsl:param>
-    <!-- FOP provide only PDF Bookmarks at the moment -->
-    <xsl:param name="fop.extensions">1</xsl:param>
-
-    <!--###################################################
-                          Table Of Contents
-        ################################################### -->
-
-    <!-- Generate the TOCs for named components only -->
-    <xsl:param name="generate.toc">
-        book   toc
-    </xsl:param>
-    
-    <!-- Show only Sections up to level 3 in the TOCs -->
-    <xsl:param name="toc.section.depth">3</xsl:param>
-    
-    <!-- Dot and Whitespace as separator in TOC between Label and Title-->
-    <xsl:param name="autotoc.label.separator" select="'.  '"/>
-
-
-    <!--###################################################
-                       Paper & Page Size
-        ################################################### -->
-    
-    <!-- Paper type, no headers on blank pages, no double sided printing -->
-    <xsl:param name="paper.type" select="'A4'"/>
-    <xsl:param name="double.sided">0</xsl:param>
-    <xsl:param name="headers.on.blank.pages">0</xsl:param>
-    <xsl:param name="footers.on.blank.pages">0</xsl:param>
-
-    <!-- Space between paper border and content (chaotic stuff, don't touch) -->
-    <xsl:param name="page.margin.top">5mm</xsl:param>
-    <xsl:param name="region.before.extent">10mm</xsl:param>
-    <xsl:param name="body.margin.top">10mm</xsl:param>
-
-    <xsl:param name="body.margin.bottom">15mm</xsl:param>
-    <xsl:param name="region.after.extent">10mm</xsl:param>
-    <xsl:param name="page.margin.bottom">0mm</xsl:param>
-
-    <xsl:param name="page.margin.outer">18mm</xsl:param>
-    <xsl:param name="page.margin.inner">18mm</xsl:param>
-
-    <!-- No intendation of Titles -->
-    <xsl:param name="title.margin.left">0pc</xsl:param>
-
-    <!--###################################################
-                       Fonts & Styles
-        ################################################### -->
-
-    <!-- Default Font size -->
-    <xsl:param name="body.font.master">11</xsl:param>
-
-    <!-- Line height in body text -->
-    <xsl:param name="line-height">1.4</xsl:param>
-
-    <!-- Monospaced fonts are smaller than regular text -->
-    <xsl:attribute-set name="monospace.properties">
-        <xsl:attribute name="font-family">
-            <xsl:value-of select="$monospace.font.family"/>
-        </xsl:attribute>
-        <xsl:attribute name="font-size">0.8em</xsl:attribute>
-    </xsl:attribute-set>
-
-    <!--###################################################
-                       Tables
-        ################################################### -->
-
-    <!-- The table width should be adapted to the paper size -->
-    <xsl:param name="default.table.width">17.4cm</xsl:param>
-
-    <!-- Some padding inside tables -->
-    <xsl:attribute-set name="table.cell.padding">
-        <xsl:attribute name="padding-left">4pt</xsl:attribute>
-        <xsl:attribute name="padding-right">4pt</xsl:attribute>
-        <xsl:attribute name="padding-top">4pt</xsl:attribute>
-        <xsl:attribute name="padding-bottom">4pt</xsl:attribute>
-    </xsl:attribute-set>
-    
-    <!-- Only hairlines as frame and cell borders in tables -->
-    <xsl:param name="table.frame.border.thickness">0.1pt</xsl:param>
-    <xsl:param name="table.cell.border.thickness">0.1pt</xsl:param>
-
-    <!--###################################################
-                             Labels
-        ################################################### -->
-
-    <!-- Label Chapters and Sections (numbering) -->
-    <xsl:param name="chapter.autolabel">1</xsl:param>
-    <xsl:param name="section.autolabel" select="1"/>
-    <xsl:param name="section.label.includes.component.label" select="1"/>
-
-    <!-- Label only Sections up to level 2 -->
-    <xsl:param name="local.l10n.xml" select="document('')"/>
-    <l:i18n xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0">
-        <l:l10n language="en">
-            <l:context name="title-numbered">
-                <l:template name="sect3" text="%t"/>
-                <l:template name="sect4" text="%t"/>
-                <l:template name="sect5" text="%t"/>
-            </l:context>
-            <l:context name="section-xref-numbered">
-                <l:template name="sect3" text="the section called %t"/>
-                <l:template name="sect4" text="the section called %t"/>
-                <l:template name="sect5" text="the section called %t"/>
-            </l:context>
-        </l:l10n>
-    </l:i18n>
-    
-    <!--###################################################
-                             Titles
-        ################################################### -->
-    
-    <!-- Chapter title size -->
-    <xsl:attribute-set name="chapter.titlepage.recto.style">
-        <xsl:attribute name="text-align">left</xsl:attribute>
-        <xsl:attribute name="font-weight">bold</xsl:attribute>
-        <xsl:attribute name="font-size">
-            <xsl:value-of select="$body.font.master * 1.8"/>
-            <xsl:text>pt</xsl:text>
-        </xsl:attribute>
-    </xsl:attribute-set>
-
-    <!-- Why is the font-size for chapters hardcoded in the XSL FO templates? 
-        Let's remove it, so this sucker can use our attribute-set only... -->
-    <xsl:template match="title" mode="chapter.titlepage.recto.auto.mode">
-        <fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format"
-            xsl:use-attribute-sets="chapter.titlepage.recto.style">
-            <xsl:call-template name="component.title">
-                <xsl:with-param name="node" select="ancestor-or-self::chapter[1]"/>
-            </xsl:call-template>
-        </fo:block>
-    </xsl:template>
-    
-    <!-- Sections 1, 2 and 3 titles have a small bump factor and padding -->
-    <xsl:attribute-set name="section.title.level1.properties">
-        <xsl:attribute name="space-before.optimum">0.8em</xsl:attribute>
-        <xsl:attribute name="space-before.minimum">0.8em</xsl:attribute>
-        <xsl:attribute name="space-before.maximum">0.8em</xsl:attribute>
-        <xsl:attribute name="font-size">
-            <xsl:value-of select="$body.font.master * 1.5"/>
-            <xsl:text>pt</xsl:text>
-        </xsl:attribute>
-        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
-    </xsl:attribute-set>
-    <xsl:attribute-set name="section.title.level2.properties">
-        <xsl:attribute name="space-before.optimum">0.6em</xsl:attribute>
-        <xsl:attribute name="space-before.minimum">0.6em</xsl:attribute>
-        <xsl:attribute name="space-before.maximum">0.6em</xsl:attribute>
-        <xsl:attribute name="font-size">
-            <xsl:value-of select="$body.font.master * 1.25"/>
-            <xsl:text>pt</xsl:text>
-        </xsl:attribute>
-        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
-    </xsl:attribute-set>
-    <xsl:attribute-set name="section.title.level3.properties">
-        <xsl:attribute name="space-before.optimum">0.4em</xsl:attribute>
-        <xsl:attribute name="space-before.minimum">0.4em</xsl:attribute>
-        <xsl:attribute name="space-before.maximum">0.4em</xsl:attribute>
-        <xsl:attribute name="font-size">
-            <xsl:value-of select="$body.font.master * 1.0"/>
-            <xsl:text>pt</xsl:text>
-        </xsl:attribute>
-        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
-    </xsl:attribute-set>
-
-    <!-- Titles of formal objects (tables, examples, ...) -->
-    <xsl:attribute-set name="formal.title.properties" use-attribute-sets="normal.para.spacing">
-        <xsl:attribute name="font-weight">bold</xsl:attribute>
-        <xsl:attribute name="font-size">
-            <xsl:value-of select="$body.font.master"/>
-            <xsl:text>pt</xsl:text>
-        </xsl:attribute>
-        <xsl:attribute name="hyphenate">false</xsl:attribute>
-        <xsl:attribute name="space-after.minimum">0.4em</xsl:attribute>
-        <xsl:attribute name="space-after.optimum">0.6em</xsl:attribute>
-        <xsl:attribute name="space-after.maximum">0.8em</xsl:attribute>
-    </xsl:attribute-set>
-
-    <!--###################################################
-                          Programlistings
-        ################################################### -->
-    
-    <!-- Verbatim text formatting (programlistings) -->
-    <xsl:attribute-set name="verbatim.properties">
-        <xsl:attribute name="space-before.minimum">1em</xsl:attribute>
-        <xsl:attribute name="space-before.optimum">1em</xsl:attribute>
-        <xsl:attribute name="space-before.maximum">1em</xsl:attribute>
-        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
-        <xsl:attribute name="border-color">#444444</xsl:attribute>
-        <xsl:attribute name="border-style">solid</xsl:attribute>
-        <xsl:attribute name="border-width">0.1pt</xsl:attribute>
-        <xsl:attribute name="padding-top">0.5em</xsl:attribute>
-        <xsl:attribute name="padding-left">0.5em</xsl:attribute>
-        <xsl:attribute name="padding-right">0.5em</xsl:attribute>
-        <xsl:attribute name="padding-bottom">0.5em</xsl:attribute>
-        <xsl:attribute name="margin-left">0.5em</xsl:attribute>
-        <xsl:attribute name="margin-right">0.5em</xsl:attribute>
-    </xsl:attribute-set>
-
-    <!-- Shade (background) programlistings -->
-    <xsl:param name="shade.verbatim">1</xsl:param>
-    <xsl:attribute-set name="shade.verbatim.style">
-        <xsl:attribute name="background-color">#F0F0F0</xsl:attribute>
-    </xsl:attribute-set>
-
-    <!--###################################################
-                             Callouts
-        ################################################### -->
-
-    <!-- We want to use callouts... -->
-    <xsl:param name="callout.extensions">1</xsl:param>
-
-    <!-- Place callout bullets at this column in programmlisting.-->
-    <xsl:param name="callout.defaultcolumn">90</xsl:param>
-
-    <!--
-        No, don't use crappy graphics for the callout bullets. This setting
-        enables some weird Unicode rendering for some fancy bullet points
-        in callouts. By default, this can only count to 10 and produces
-        strange results if you ever have more than 10 callouts for one
-        programlisting. We will fix that next.
-    -->
-    <xsl:param name="callout.graphics">0</xsl:param>
-
-    <!--
-        Again, fun with DocBook XSL: The callout bullets are rendered in
-        two places: In the programlisting itself and in the list below
-        the listing, with the actual callout text. The rendering in the
-        programlisting is some XSL transformer extension (e.g. a Saxon
-        extension), so we can't change that without messing with the
-        extensions. We only can turn it off by setting this limit to
-        zero, then, a simple bracket style like "(3)" and "(4)" will
-        be used in the programlisting.
-    -->
-    <xsl:param name="callout.unicode.number.limit" select="'0'"></xsl:param>
-
-    <!--
-        The callout bullets in the actual callout list will be rendered
-        with an XSL FO template. The default template is broken: limited to 10
-        nice looking Unicode bullet points and then it doesn't print anything,
-        the fallback doesn't work. We implement our own template, which is not
-        as complicated, more ugly, but works. As always, function is more
-        important than form.
-    -->
-    <xsl:template name="callout-bug">
-        <xsl:param name="conum" select='1'/>
-        <fo:inline
-            color="black"
-            padding-top="0.1em"
-            padding-bottom="0.1em"
-            padding-start="0.2em"
-            padding-end="0.2em"
-            baseline-shift="0.1em"
-            font-family="{$monospace.font.family}"
-            font-weight="bold"
-            font-size="75%">
-            <xsl:text>(</xsl:text>
-            <xsl:value-of select="$conum"/>
-            <xsl:text>)</xsl:text>
-        </fo:inline>
-
-    </xsl:template>
-
-    <!--###################################################
-                              Misc
-        ################################################### -->
-
-    <!-- Correct placement of titles for figures and examples. -->
-    <xsl:param name="formal.title.placement">
-        figure after
-        example before
-        equation before
-        table before
-        procedure before
-    </xsl:param>
-    
-    <!-- Format Variable Lists as Blocks (prevents horizontal overflow). -->
-    <xsl:param name="variablelist.as.blocks">1</xsl:param>
-
-    <!-- The horrible list spacing problems, this is much better. -->
-    <xsl:attribute-set name="list.block.spacing">
-        <xsl:attribute name="space-before.optimum">0.8em</xsl:attribute>
-        <xsl:attribute name="space-before.minimum">0.8em</xsl:attribute>
-        <xsl:attribute name="space-before.maximum">0.8em</xsl:attribute>
-        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
-    </xsl:attribute-set>
-
-    <!-- Newer DocBook XSL apparently thinks that some sections are by
-         default "draft" status, and this idiotic thing is by default
-         also set to "maybe", so it spits out a lot of errors with the
-         latest FOP as the XSL/FO styles have references to some draft
-         watermarks, which you actually don't want in the first place.
-         Turn this crap off. If you have to work with the "status"
-         attribute, don't.
-    -->
-    <xsl:param name="draft.mode" select="'no'"/>
-
-</xsl:stylesheet>

Copied: trunk/HibernateExt/annotations/doc/reference/en/styles/fopdf.xsl (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/doc/reference/en/styles/fopdf.xsl)
===================================================================
--- trunk/HibernateExt/annotations/doc/reference/en/styles/fopdf.xsl	                        (rev 0)
+++ trunk/HibernateExt/annotations/doc/reference/en/styles/fopdf.xsl	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,519 @@
+<?xml version="1.0"?>
+
+<!--
+
+    This is the XSL FO configuration file for the Hibernate
+    Reference Documentation. It defines a custom titlepage and
+    the parameters for the A4 sized PDF printable output.
+
+    It took me days to figure out this stuff and fix most of
+    the obvious bugs in the DocBook XSL distribution. Some of
+    the workarounds might not be appropriate with a newer version
+    of DocBook XSL. This file is released as part of Hibernate,
+    hence LGPL licensed.
+
+    christian at hibernate.org
+
+-->
+
+<!DOCTYPE xsl:stylesheet [
+    <!ENTITY db_xsl_path        "../../../../../../Hibernate3/doc/reference/support/docbook-xsl/">
+]>
+
+<xsl:stylesheet
+    version="1.0"
+    xmlns="http://www.w3.org/TR/xhtml1/transitional"
+    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+    xmlns:fo="http://www.w3.org/1999/XSL/Format"
+    exclude-result-prefixes="#default">
+
+    <xsl:import href="&db_xsl_path;/fo/docbook.xsl"/>
+
+    <!--###################################################
+                       Custom Title Page
+        ################################################### -->
+
+    <xsl:template name="book.titlepage.recto">
+        <fo:block>
+            <fo:table table-layout="fixed" width="175mm">
+                <fo:table-column column-width="175mm"/>
+                <fo:table-body>
+                    <fo:table-row>
+                        <fo:table-cell text-align="center">
+                            <fo:block>
+                                <fo:external-graphic src="file:images/hibernate_logo_a.png"/>
+                            </fo:block>
+                            <fo:block font-family="Helvetica" font-size="22pt" padding-before="10mm">
+                                <xsl:value-of select="bookinfo/title"/>
+                            </fo:block>
+                            <fo:block font-family="Helvetica" font-size="18pt" padding-before="10mm">
+                                <xsl:value-of select="bookinfo/subtitle"/>
+                            </fo:block>
+                            <fo:block font-family="Helvetica" font-size="12pt" padding="10mm">
+                                Version:
+                                <xsl:value-of select="bookinfo/releaseinfo"/>
+                            </fo:block>
+                        </fo:table-cell>
+                    </fo:table-row>
+                </fo:table-body>
+            </fo:table>
+        </fo:block>
+    </xsl:template>
+
+    <!-- Prevent blank pages in output -->
+    <xsl:template name="book.titlepage.before.verso">
+    </xsl:template>
+    <xsl:template name="book.titlepage.verso">
+    </xsl:template>
+    <xsl:template name="book.titlepage.separator">
+    </xsl:template>
+
+    <!--###################################################
+                          Header
+        ################################################### -->
+
+    <!-- More space in the center header for long text -->
+    <xsl:attribute-set name="header.content.properties">
+        <xsl:attribute name="font-family">
+            <xsl:value-of select="$body.font.family"/>
+        </xsl:attribute>
+        <xsl:attribute name="margin-left">-5em</xsl:attribute>
+        <xsl:attribute name="margin-right">-5em</xsl:attribute>
+    </xsl:attribute-set>
+
+    <!--###################################################
+                          Custom Footer
+        ################################################### -->
+
+    <!-- This footer prints the Hibernate version number on the left side -->
+    <xsl:template name="footer.content">
+        <xsl:param name="pageclass" select="''"/>
+        <xsl:param name="sequence" select="''"/>
+        <xsl:param name="position" select="''"/>
+        <xsl:param name="gentext-key" select="''"/>
+
+        <xsl:variable name="Version">
+            <xsl:choose>
+                <xsl:when test="//releaseinfo">
+                    <xsl:text>Hibernate </xsl:text>
+                    <xsl:value-of select="//releaseinfo"/>
+                </xsl:when>
+                <xsl:otherwise>
+                    <!-- nop -->
+                </xsl:otherwise>
+            </xsl:choose>
+        </xsl:variable>
+
+        <xsl:choose>
+            <xsl:when test="$sequence='blank'">
+                <xsl:choose>
+                    <xsl:when test="$double.sided != 0 and $position = 'left'">
+                        <xsl:value-of select="$Version"/>
+                    </xsl:when>
+
+                    <xsl:when test="$double.sided = 0 and $position = 'center'">
+                        <!-- nop -->
+                    </xsl:when>
+
+                    <xsl:otherwise>
+                        <fo:page-number/>
+                    </xsl:otherwise>
+                </xsl:choose>
+            </xsl:when>
+
+            <xsl:when test="$pageclass='titlepage'">
+                <!-- nop: other titlepage sequences have no footer -->
+            </xsl:when>
+
+            <xsl:when test="$double.sided != 0 and $sequence = 'even' and $position='left'">
+                <fo:page-number/>
+            </xsl:when>
+
+            <xsl:when test="$double.sided != 0 and $sequence = 'odd' and $position='right'">
+                <fo:page-number/>
+            </xsl:when>
+
+            <xsl:when test="$double.sided = 0 and $position='right'">
+                <fo:page-number/>
+            </xsl:when>
+
+            <xsl:when test="$double.sided != 0 and $sequence = 'odd' and $position='left'">
+                <xsl:value-of select="$Version"/>
+            </xsl:when>
+
+            <xsl:when test="$double.sided != 0 and $sequence = 'even' and $position='right'">
+                <xsl:value-of select="$Version"/>
+            </xsl:when>
+
+            <xsl:when test="$double.sided = 0 and $position='left'">
+                <xsl:value-of select="$Version"/>
+            </xsl:when>
+
+            <xsl:otherwise>
+                <!-- nop -->
+            </xsl:otherwise>
+        </xsl:choose>
+    </xsl:template>
+
+    <!--###################################################
+                       Custom Toc Line
+        ################################################### -->
+    
+    <!-- Improve the TOC. -->
+    <xsl:template name="toc.line">
+        <xsl:variable name="id">
+            <xsl:call-template name="object.id"/>
+        </xsl:variable>
+
+        <xsl:variable name="label">
+            <xsl:apply-templates select="." mode="label.markup"/>
+        </xsl:variable>
+
+        <fo:block text-align-last="justify"
+            end-indent="{$toc.indent.width}pt"
+            last-line-end-indent="-{$toc.indent.width}pt">
+            <fo:inline keep-with-next.within-line="always">
+                <fo:basic-link internal-destination="{$id}">
+
+                    <!-- Chapter titles should be bold. -->
+                    <xsl:choose>
+                        <xsl:when test="local-name(.) = 'chapter'">
+                            <xsl:attribute name="font-weight">bold</xsl:attribute>
+                        </xsl:when>
+                    </xsl:choose>
+
+                    <xsl:if test="$label != ''">
+                        <xsl:copy-of select="$label"/>
+                        <xsl:value-of select="$autotoc.label.separator"/>
+                    </xsl:if>
+                    <xsl:apply-templates select="." mode="titleabbrev.markup"/>
+                </fo:basic-link>
+            </fo:inline>
+            <fo:inline keep-together.within-line="always">
+                <xsl:text> </xsl:text>
+                <fo:leader leader-pattern="dots"
+                    leader-pattern-width="3pt"
+                    leader-alignment="reference-area"
+                    keep-with-next.within-line="always"/>
+                <xsl:text> </xsl:text>
+                <fo:basic-link internal-destination="{$id}">
+                    <fo:page-number-citation ref-id="{$id}"/>
+                </fo:basic-link>
+            </fo:inline>
+        </fo:block>
+    </xsl:template>
+
+    <!--###################################################
+                          Extensions
+        ################################################### -->
+
+    <!-- These extensions are required for table printing and other stuff -->
+    <xsl:param name="use.extensions">1</xsl:param>
+    <xsl:param name="tablecolumns.extension">0</xsl:param>
+    <!-- FOP provide only PDF Bookmarks at the moment -->
+    <xsl:param name="fop.extensions">1</xsl:param>
+
+    <!--###################################################
+                          Table Of Contents
+        ################################################### -->
+
+    <!-- Generate the TOCs for named components only -->
+    <xsl:param name="generate.toc">
+        book   toc
+    </xsl:param>
+    
+    <!-- Show only Sections up to level 3 in the TOCs -->
+    <xsl:param name="toc.section.depth">3</xsl:param>
+    
+    <!-- Dot and Whitespace as separator in TOC between Label and Title-->
+    <xsl:param name="autotoc.label.separator" select="'.  '"/>
+
+
+    <!--###################################################
+                       Paper & Page Size
+        ################################################### -->
+    
+    <!-- Paper type, no headers on blank pages, no double sided printing -->
+    <xsl:param name="paper.type" select="'A4'"/>
+    <xsl:param name="double.sided">0</xsl:param>
+    <xsl:param name="headers.on.blank.pages">0</xsl:param>
+    <xsl:param name="footers.on.blank.pages">0</xsl:param>
+
+    <!-- Space between paper border and content (chaotic stuff, don't touch) -->
+    <xsl:param name="page.margin.top">5mm</xsl:param>
+    <xsl:param name="region.before.extent">10mm</xsl:param>
+    <xsl:param name="body.margin.top">10mm</xsl:param>
+
+    <xsl:param name="body.margin.bottom">15mm</xsl:param>
+    <xsl:param name="region.after.extent">10mm</xsl:param>
+    <xsl:param name="page.margin.bottom">0mm</xsl:param>
+
+    <xsl:param name="page.margin.outer">18mm</xsl:param>
+    <xsl:param name="page.margin.inner">18mm</xsl:param>
+
+    <!-- No intendation of Titles -->
+    <xsl:param name="title.margin.left">0pc</xsl:param>
+
+    <!--###################################################
+                       Fonts & Styles
+        ################################################### -->
+
+    <!-- Default Font size -->
+    <xsl:param name="body.font.master">11</xsl:param>
+
+    <!-- Line height in body text -->
+    <xsl:param name="line-height">1.4</xsl:param>
+
+    <!-- Monospaced fonts are smaller than regular text -->
+    <xsl:attribute-set name="monospace.properties">
+        <xsl:attribute name="font-family">
+            <xsl:value-of select="$monospace.font.family"/>
+        </xsl:attribute>
+        <xsl:attribute name="font-size">0.8em</xsl:attribute>
+    </xsl:attribute-set>
+
+    <!--###################################################
+                       Tables
+        ################################################### -->
+
+    <!-- The table width should be adapted to the paper size -->
+    <xsl:param name="default.table.width">17.4cm</xsl:param>
+
+    <!-- Some padding inside tables -->
+    <xsl:attribute-set name="table.cell.padding">
+        <xsl:attribute name="padding-left">4pt</xsl:attribute>
+        <xsl:attribute name="padding-right">4pt</xsl:attribute>
+        <xsl:attribute name="padding-top">4pt</xsl:attribute>
+        <xsl:attribute name="padding-bottom">4pt</xsl:attribute>
+    </xsl:attribute-set>
+    
+    <!-- Only hairlines as frame and cell borders in tables -->
+    <xsl:param name="table.frame.border.thickness">0.1pt</xsl:param>
+    <xsl:param name="table.cell.border.thickness">0.1pt</xsl:param>
+
+    <!--###################################################
+                             Labels
+        ################################################### -->
+
+    <!-- Label Chapters and Sections (numbering) -->
+    <xsl:param name="chapter.autolabel">1</xsl:param>
+    <xsl:param name="section.autolabel" select="1"/>
+    <xsl:param name="section.label.includes.component.label" select="1"/>
+
+    <!-- Label only Sections up to level 2 -->
+    <xsl:param name="local.l10n.xml" select="document('')"/>
+    <l:i18n xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0">
+        <l:l10n language="en">
+            <l:context name="title-numbered">
+                <l:template name="sect3" text="%t"/>
+                <l:template name="sect4" text="%t"/>
+                <l:template name="sect5" text="%t"/>
+            </l:context>
+            <l:context name="section-xref-numbered">
+                <l:template name="sect3" text="the section called %t"/>
+                <l:template name="sect4" text="the section called %t"/>
+                <l:template name="sect5" text="the section called %t"/>
+            </l:context>
+        </l:l10n>
+    </l:i18n>
+    
+    <!--###################################################
+                             Titles
+        ################################################### -->
+    
+    <!-- Chapter title size -->
+    <xsl:attribute-set name="chapter.titlepage.recto.style">
+        <xsl:attribute name="text-align">left</xsl:attribute>
+        <xsl:attribute name="font-weight">bold</xsl:attribute>
+        <xsl:attribute name="font-size">
+            <xsl:value-of select="$body.font.master * 1.8"/>
+            <xsl:text>pt</xsl:text>
+        </xsl:attribute>
+    </xsl:attribute-set>
+
+    <!-- Why is the font-size for chapters hardcoded in the XSL FO templates? 
+        Let's remove it, so this sucker can use our attribute-set only... -->
+    <xsl:template match="title" mode="chapter.titlepage.recto.auto.mode">
+        <fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format"
+            xsl:use-attribute-sets="chapter.titlepage.recto.style">
+            <xsl:call-template name="component.title">
+                <xsl:with-param name="node" select="ancestor-or-self::chapter[1]"/>
+            </xsl:call-template>
+        </fo:block>
+    </xsl:template>
+    
+    <!-- Sections 1, 2 and 3 titles have a small bump factor and padding -->
+    <xsl:attribute-set name="section.title.level1.properties">
+        <xsl:attribute name="space-before.optimum">0.8em</xsl:attribute>
+        <xsl:attribute name="space-before.minimum">0.8em</xsl:attribute>
+        <xsl:attribute name="space-before.maximum">0.8em</xsl:attribute>
+        <xsl:attribute name="font-size">
+            <xsl:value-of select="$body.font.master * 1.5"/>
+            <xsl:text>pt</xsl:text>
+        </xsl:attribute>
+        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
+    </xsl:attribute-set>
+    <xsl:attribute-set name="section.title.level2.properties">
+        <xsl:attribute name="space-before.optimum">0.6em</xsl:attribute>
+        <xsl:attribute name="space-before.minimum">0.6em</xsl:attribute>
+        <xsl:attribute name="space-before.maximum">0.6em</xsl:attribute>
+        <xsl:attribute name="font-size">
+            <xsl:value-of select="$body.font.master * 1.25"/>
+            <xsl:text>pt</xsl:text>
+        </xsl:attribute>
+        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
+    </xsl:attribute-set>
+    <xsl:attribute-set name="section.title.level3.properties">
+        <xsl:attribute name="space-before.optimum">0.4em</xsl:attribute>
+        <xsl:attribute name="space-before.minimum">0.4em</xsl:attribute>
+        <xsl:attribute name="space-before.maximum">0.4em</xsl:attribute>
+        <xsl:attribute name="font-size">
+            <xsl:value-of select="$body.font.master * 1.0"/>
+            <xsl:text>pt</xsl:text>
+        </xsl:attribute>
+        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
+    </xsl:attribute-set>
+
+    <!-- Titles of formal objects (tables, examples, ...) -->
+    <xsl:attribute-set name="formal.title.properties" use-attribute-sets="normal.para.spacing">
+        <xsl:attribute name="font-weight">bold</xsl:attribute>
+        <xsl:attribute name="font-size">
+            <xsl:value-of select="$body.font.master"/>
+            <xsl:text>pt</xsl:text>
+        </xsl:attribute>
+        <xsl:attribute name="hyphenate">false</xsl:attribute>
+        <xsl:attribute name="space-after.minimum">0.4em</xsl:attribute>
+        <xsl:attribute name="space-after.optimum">0.6em</xsl:attribute>
+        <xsl:attribute name="space-after.maximum">0.8em</xsl:attribute>
+    </xsl:attribute-set>
+
+    <!--###################################################
+                          Programlistings
+        ################################################### -->
+    
+    <!-- Verbatim text formatting (programlistings) -->
+    <xsl:attribute-set name="verbatim.properties">
+        <xsl:attribute name="space-before.minimum">1em</xsl:attribute>
+        <xsl:attribute name="space-before.optimum">1em</xsl:attribute>
+        <xsl:attribute name="space-before.maximum">1em</xsl:attribute>
+        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
+        <xsl:attribute name="border-color">#444444</xsl:attribute>
+        <xsl:attribute name="border-style">solid</xsl:attribute>
+        <xsl:attribute name="border-width">0.1pt</xsl:attribute>
+        <xsl:attribute name="padding-top">0.5em</xsl:attribute>
+        <xsl:attribute name="padding-left">0.5em</xsl:attribute>
+        <xsl:attribute name="padding-right">0.5em</xsl:attribute>
+        <xsl:attribute name="padding-bottom">0.5em</xsl:attribute>
+        <xsl:attribute name="margin-left">0.5em</xsl:attribute>
+        <xsl:attribute name="margin-right">0.5em</xsl:attribute>
+    </xsl:attribute-set>
+
+    <!-- Shade (background) programlistings -->
+    <xsl:param name="shade.verbatim">1</xsl:param>
+    <xsl:attribute-set name="shade.verbatim.style">
+        <xsl:attribute name="background-color">#F0F0F0</xsl:attribute>
+    </xsl:attribute-set>
+
+    <!--###################################################
+                             Callouts
+        ################################################### -->
+
+    <!-- We want to use callouts... -->
+    <xsl:param name="callout.extensions">1</xsl:param>
+
+    <!-- Place callout bullets at this column in programmlisting.-->
+    <xsl:param name="callout.defaultcolumn">90</xsl:param>
+
+    <!--
+        No, don't use crappy graphics for the callout bullets. This setting
+        enables some weird Unicode rendering for some fancy bullet points
+        in callouts. By default, this can only count to 10 and produces
+        strange results if you ever have more than 10 callouts for one
+        programlisting. We will fix that next.
+    -->
+    <xsl:param name="callout.graphics">0</xsl:param>
+
+    <!--
+        Again, fun with DocBook XSL: The callout bullets are rendered in
+        two places: In the programlisting itself and in the list below
+        the listing, with the actual callout text. The rendering in the
+        programlisting is some XSL transformer extension (e.g. a Saxon
+        extension), so we can't change that without messing with the
+        extensions. We only can turn it off by setting this limit to
+        zero, then, a simple bracket style like "(3)" and "(4)" will
+        be used in the programlisting.
+    -->
+    <xsl:param name="callout.unicode.number.limit" select="'0'"></xsl:param>
+
+    <!--
+        The callout bullets in the actual callout list will be rendered
+        with an XSL FO template. The default template is broken: limited to 10
+        nice looking Unicode bullet points and then it doesn't print anything,
+        the fallback doesn't work. We implement our own template, which is not
+        as complicated, more ugly, but works. As always, function is more
+        important than form.
+    -->
+    <xsl:template name="callout-bug">
+        <xsl:param name="conum" select='1'/>
+        <fo:inline
+            color="black"
+            padding-top="0.1em"
+            padding-bottom="0.1em"
+            padding-start="0.2em"
+            padding-end="0.2em"
+            baseline-shift="0.1em"
+            font-family="{$monospace.font.family}"
+            font-weight="bold"
+            font-size="75%">
+            <xsl:text>(</xsl:text>
+            <xsl:value-of select="$conum"/>
+            <xsl:text>)</xsl:text>
+        </fo:inline>
+
+    </xsl:template>
+
+    <!--###################################################
+                              Misc
+        ################################################### -->
+
+    <!-- Correct placement of titles for figures and examples. -->
+    <xsl:param name="formal.title.placement">
+        figure after
+        example before
+        equation before
+        table before
+        procedure before
+    </xsl:param>
+    
+    <!-- Format Variable Lists as Blocks (prevents horizontal overflow). -->
+    <xsl:param name="variablelist.as.blocks">1</xsl:param>
+
+    <!-- The horrible list spacing problems, this is much better. -->
+    <xsl:attribute-set name="list.block.spacing">
+        <xsl:attribute name="space-before.optimum">0.8em</xsl:attribute>
+        <xsl:attribute name="space-before.minimum">0.8em</xsl:attribute>
+        <xsl:attribute name="space-before.maximum">0.8em</xsl:attribute>
+        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
+    </xsl:attribute-set>
+
+    <!-- Newer DocBook XSL apparently thinks that some sections are by
+         default "draft" status, and this idiotic thing is by default
+         also set to "maybe", so it spits out a lot of errors with the
+         latest FOP as the XSL/FO styles have references to some draft
+         watermarks, which you actually don't want in the first place.
+         Turn this crap off. If you have to work with the "status"
+         attribute, don't.
+    -->
+    <xsl:param name="draft.mode" select="'no'"/>
+
+</xsl:stylesheet>

Deleted: trunk/HibernateExt/annotations/doc/reference/en/styles/html.css
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/doc/reference/en/styles/html.css	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/doc/reference/en/styles/html.css	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,97 +0,0 @@
-A {
-    color: #003399;
-}
-
-A:active {
-    color: #003399;
-}
-
-A:visited {
-    color: #888888;
-}
-
-P, OL, UL, LI, DL, DT, DD, BLOCKQUOTE {
-    color: #000000;
-}
-
-TD, TH, SPAN {
-    color: #000000;
-}
-
-BLOCKQUOTE {
-    margin-right: 0px;
-}
-
-
-H1, H2, H3, H4, H5, H6    {
-    color: #000000;
-    font-weight:500;
-    margin-top:10px;
-    padding-top:15px;
-}
-
-TABLE  {
-    border-collapse: collapse;
-    border-spacing:0;
-    border: 1px thin black;
-    empty-cells: hide;
-}
-
-TD  {
-    padding: 4pt;
-}
-
-H1 { font-size: 150%; }
-H2 { font-size: 140%; }
-H3 { font-size: 110%; font-weight: bold; }
-H4 { font-size: 110%; font-weight: bold;}
-H5 { font-size: 100%; font-style: italic; }
-H6 { font-size: 100%; font-style: italic; }
-
-TT {
-font-size: 90%;
-    font-family: "Courier New", Courier, monospace;
-    color: #000000;
-}
-
-PRE {
-font-size: 100%;
-    padding: 5px;
-    border-style: solid;
-    border-width: 1px;
-    border-color: #CCCCCC;
-    background-color: #F4F4F4;
-}
-
-UL, OL, LI {
-    list-style: disc;
-}
-
-HR  {
-    width: 100%;
-    height: 1px;
-    background-color: #CCCCCC;
-    border-width: 0px;
-    padding: 0px;
-    color: #CCCCCC;
-}
-
-.variablelist { 
-    padding-top: 10; 
-    padding-bottom:10; 
-    margin:0;
-}
-
-.itemizedlist, UL { 
-    padding-top: 0; 
-    padding-bottom:0; 
-    margin:0; 
-}
-
-.term { 
-    font-weight:bold;
-}
-
-
-
-    

Copied: trunk/HibernateExt/annotations/doc/reference/en/styles/html.css (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/doc/reference/en/styles/html.css)
===================================================================
--- trunk/HibernateExt/annotations/doc/reference/en/styles/html.css	                        (rev 0)
+++ trunk/HibernateExt/annotations/doc/reference/en/styles/html.css	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,97 @@
+A {
+    color: #003399;
+}
+
+A:active {
+    color: #003399;
+}
+
+A:visited {
+    color: #888888;
+}
+
+P, OL, UL, LI, DL, DT, DD, BLOCKQUOTE {
+    color: #000000;
+}
+
+TD, TH, SPAN {
+    color: #000000;
+}
+
+BLOCKQUOTE {
+    margin-right: 0px;
+}
+
+
+H1, H2, H3, H4, H5, H6    {
+    color: #000000;
+    font-weight:500;
+    margin-top:10px;
+    padding-top:15px;
+}
+
+TABLE  {
+    border-collapse: collapse;
+    border-spacing:0;
+    border: 1px thin black;
+    empty-cells: hide;
+}
+
+TD  {
+    padding: 4pt;
+}
+
+H1 { font-size: 150%; }
+H2 { font-size: 140%; }
+H3 { font-size: 110%; font-weight: bold; }
+H4 { font-size: 110%; font-weight: bold;}
+H5 { font-size: 100%; font-style: italic; }
+H6 { font-size: 100%; font-style: italic; }
+
+TT {
+font-size: 90%;
+    font-family: "Courier New", Courier, monospace;
+    color: #000000;
+}
+
+PRE {
+font-size: 100%;
+    padding: 5px;
+    border-style: solid;
+    border-width: 1px;
+    border-color: #CCCCCC;
+    background-color: #F4F4F4;
+}
+
+UL, OL, LI {
+    list-style: disc;
+}
+
+HR  {
+    width: 100%;
+    height: 1px;
+    background-color: #CCCCCC;
+    border-width: 0px;
+    padding: 0px;
+    color: #CCCCCC;
+}
+
+.variablelist { 
+    padding-top: 10; 
+    padding-bottom:10; 
+    margin:0;
+}
+
+.itemizedlist, UL { 
+    padding-top: 0; 
+    padding-bottom:0; 
+    margin:0; 
+}
+
+.term { 
+    font-weight:bold;
+}
+
+
+
+    

Deleted: trunk/HibernateExt/annotations/doc/reference/en/styles/html.xsl
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/doc/reference/en/styles/html.xsl	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/doc/reference/en/styles/html.xsl	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,84 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
-
-    This is the XSL HTML configuration file for the Hibernate
-    Reference Documentation.
-
-    It took me days to figure out this stuff and fix most of
-    the obvious bugs in the DocBook XSL distribution. Some of
-    the workarounds might not be appropriate with a newer version
-    of DocBook XSL. This file is released as part of Hibernate,
-    hence LGPL licensed.
-
-    christian at hibernate.org
--->
-
-<!DOCTYPE xsl:stylesheet [
-    <!ENTITY db_xsl_path        "../../../../../../Hibernate3/doc/reference/support/docbook-xsl/">
-]>
-
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                version="1.0"
-                xmlns="http://www.w3.org/TR/xhtml1/transitional"
-                exclude-result-prefixes="#default">
-                
-<xsl:import href="&db_xsl_path;/html/docbook.xsl"/>
-
-<!--###################################################
-                     HTML Settings
-    ################################################### -->   
-
-    <xsl:param name="html.stylesheet">../shared/css/html.css</xsl:param>
-
-    <!-- These extensions are required for table printing and other stuff -->
-    <xsl:param name="use.extensions">1</xsl:param>
-    <xsl:param name="tablecolumns.extension">0</xsl:param>
-    <xsl:param name="callout.extensions">1</xsl:param>
-    <xsl:param name="graphicsize.extension">0</xsl:param>
-
-<!--###################################################
-                      Table Of Contents
-    ################################################### -->   
-
-    <!-- Generate the TOCs for named components only -->
-    <xsl:param name="generate.toc">
-        book   toc
-    </xsl:param>
-    
-    <!-- Show only Sections up to level 3 in the TOCs -->
-    <xsl:param name="toc.section.depth">3</xsl:param>
-    
-<!--###################################################
-                         Labels
-    ################################################### -->   
-
-    <!-- Label Chapters and Sections (numbering) -->
-    <xsl:param name="chapter.autolabel">1</xsl:param>
-    <xsl:param name="section.autolabel" select="1"/>
-    <xsl:param name="section.label.includes.component.label" select="1"/>
-
-<!--###################################################
-                         Callouts
-    ################################################### -->
-
-    <!-- Don't use graphics, use a simple number style -->
-    <xsl:param name="callout.graphics">0</xsl:param>
-
-    <!-- Place callout marks at this column in annotated areas -->
-    <xsl:param name="callout.defaultcolumn">90</xsl:param>
-
-<!--###################################################
-                          Misc
-    ################################################### -->   
-
-    <!-- Placement of titles -->
-    <xsl:param name="formal.title.placement">
-        figure after
-        example before
-        equation before
-        table before
-        procedure before
-    </xsl:param>    
-    
-</xsl:stylesheet>

Copied: trunk/HibernateExt/annotations/doc/reference/en/styles/html.xsl (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/doc/reference/en/styles/html.xsl)
===================================================================
--- trunk/HibernateExt/annotations/doc/reference/en/styles/html.xsl	                        (rev 0)
+++ trunk/HibernateExt/annotations/doc/reference/en/styles/html.xsl	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,84 @@
+<?xml version="1.0"?>
+
+<!--
+
+    This is the XSL HTML configuration file for the Hibernate
+    Reference Documentation.
+
+    It took me days to figure out this stuff and fix most of
+    the obvious bugs in the DocBook XSL distribution. Some of
+    the workarounds might not be appropriate with a newer version
+    of DocBook XSL. This file is released as part of Hibernate,
+    hence LGPL licensed.
+
+    christian at hibernate.org
+-->
+
+<!DOCTYPE xsl:stylesheet [
+    <!ENTITY db_xsl_path        "../../../../../../Hibernate3/doc/reference/support/docbook-xsl/">
+]>
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+                version="1.0"
+                xmlns="http://www.w3.org/TR/xhtml1/transitional"
+                exclude-result-prefixes="#default">
+                
+<xsl:import href="&db_xsl_path;/html/docbook.xsl"/>
+
+<!--###################################################
+                     HTML Settings
+    ################################################### -->   
+
+    <xsl:param name="html.stylesheet">../shared/css/html.css</xsl:param>
+
+    <!-- These extensions are required for table printing and other stuff -->
+    <xsl:param name="use.extensions">1</xsl:param>
+    <xsl:param name="tablecolumns.extension">0</xsl:param>
+    <xsl:param name="callout.extensions">1</xsl:param>
+    <xsl:param name="graphicsize.extension">0</xsl:param>
+
+<!--###################################################
+                      Table Of Contents
+    ################################################### -->   
+
+    <!-- Generate the TOCs for named components only -->
+    <xsl:param name="generate.toc">
+        book   toc
+    </xsl:param>
+    
+    <!-- Show only Sections up to level 3 in the TOCs -->
+    <xsl:param name="toc.section.depth">3</xsl:param>
+    
+<!--###################################################
+                         Labels
+    ################################################### -->   
+
+    <!-- Label Chapters and Sections (numbering) -->
+    <xsl:param name="chapter.autolabel">1</xsl:param>
+    <xsl:param name="section.autolabel" select="1"/>
+    <xsl:param name="section.label.includes.component.label" select="1"/>
+
+<!--###################################################
+                         Callouts
+    ################################################### -->
+
+    <!-- Don't use graphics, use a simple number style -->
+    <xsl:param name="callout.graphics">0</xsl:param>
+
+    <!-- Place callout marks at this column in annotated areas -->
+    <xsl:param name="callout.defaultcolumn">90</xsl:param>
+
+<!--###################################################
+                          Misc
+    ################################################### -->   
+
+    <!-- Placement of titles -->
+    <xsl:param name="formal.title.placement">
+        figure after
+        example before
+        equation before
+        table before
+        procedure before
+    </xsl:param>    
+    
+</xsl:stylesheet>

Deleted: trunk/HibernateExt/annotations/doc/reference/en/styles/html_chunk.xsl
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/doc/reference/en/styles/html_chunk.xsl	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/doc/reference/en/styles/html_chunk.xsl	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,86 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
-
-    This is the XSL HTML configuration file for the Hibernate
-    Reference Documentation.
-
-    It took me days to figure out this stuff and fix most of
-    the obvious bugs in the DocBook XSL distribution. Some of
-    the workarounds might not be appropriate with a newer version
-    of DocBook XSL. This file is released as part of Hibernate,
-    hence LGPL licensed.
-
-    christian at hibernate.org
--->
-
-<!DOCTYPE xsl:stylesheet [
-    <!ENTITY db_xsl_path        "../../../../../../Hibernate3/doc/reference/support/docbook-xsl/">
-]>
-
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                version="1.0"
-                xmlns="http://www.w3.org/TR/xhtml1/transitional"
-                exclude-result-prefixes="#default">
-                
-<xsl:import href="&db_xsl_path;/html/chunk.xsl"/>
-
-<!--###################################################
-                     HTML Settings
-    ################################################### -->   
-
-    <xsl:param name="chunk.section.depth">'5'</xsl:param>
-    <xsl:param name="use.id.as.filename">'1'</xsl:param>
-    <xsl:param name="html.stylesheet">../shared/css/html.css</xsl:param>
-
-    <!-- These extensions are required for table printing and other stuff -->
-    <xsl:param name="use.extensions">1</xsl:param>
-    <xsl:param name="tablecolumns.extension">0</xsl:param>
-    <xsl:param name="callout.extensions">1</xsl:param>
-    <xsl:param name="graphicsize.extension">0</xsl:param>
-    
-<!--###################################################
-                      Table Of Contents
-    ################################################### -->   
-
-    <!-- Generate the TOCs for named components only -->
-    <xsl:param name="generate.toc">
-        book   toc
-    </xsl:param>
-    
-    <!-- Show only Sections up to level 3 in the TOCs -->
-    <xsl:param name="toc.section.depth">3</xsl:param>
-
-<!--###################################################
-                         Labels
-    ################################################### -->   
-
-    <!-- Label Chapters and Sections (numbering) -->
-    <xsl:param name="chapter.autolabel">1</xsl:param>
-    <xsl:param name="section.autolabel" select="1"/>
-    <xsl:param name="section.label.includes.component.label" select="1"/>
-                
-<!--###################################################
-                         Callouts
-    ################################################### -->   
-
-    <!-- Don't use graphics, use a simple number style -->
-    <xsl:param name="callout.graphics">0</xsl:param>
-
-    <!-- Place callout marks at this column in annotated areas -->
-    <xsl:param name="callout.defaultcolumn">90</xsl:param>
-
-<!--###################################################
-                          Misc
-    ################################################### -->   
-
-    <!-- Placement of titles -->
-    <xsl:param name="formal.title.placement">
-        figure after
-        example before
-        equation before
-        table before
-        procedure before
-    </xsl:param>    
-    
-</xsl:stylesheet>

Copied: trunk/HibernateExt/annotations/doc/reference/en/styles/html_chunk.xsl (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/doc/reference/en/styles/html_chunk.xsl)
===================================================================
--- trunk/HibernateExt/annotations/doc/reference/en/styles/html_chunk.xsl	                        (rev 0)
+++ trunk/HibernateExt/annotations/doc/reference/en/styles/html_chunk.xsl	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,86 @@
+<?xml version="1.0"?>
+
+<!--
+
+    This is the XSL HTML configuration file for the Hibernate
+    Reference Documentation.
+
+    It took me days to figure out this stuff and fix most of
+    the obvious bugs in the DocBook XSL distribution. Some of
+    the workarounds might not be appropriate with a newer version
+    of DocBook XSL. This file is released as part of Hibernate,
+    hence LGPL licensed.
+
+    christian at hibernate.org
+-->
+
+<!DOCTYPE xsl:stylesheet [
+    <!ENTITY db_xsl_path        "../../../../../../Hibernate3/doc/reference/support/docbook-xsl/">
+]>
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+                version="1.0"
+                xmlns="http://www.w3.org/TR/xhtml1/transitional"
+                exclude-result-prefixes="#default">
+                
+<xsl:import href="&db_xsl_path;/html/chunk.xsl"/>
+
+<!--###################################################
+                     HTML Settings
+    ################################################### -->   
+
+    <xsl:param name="chunk.section.depth">'5'</xsl:param>
+    <xsl:param name="use.id.as.filename">'1'</xsl:param>
+    <xsl:param name="html.stylesheet">../shared/css/html.css</xsl:param>
+
+    <!-- These extensions are required for table printing and other stuff -->
+    <xsl:param name="use.extensions">1</xsl:param>
+    <xsl:param name="tablecolumns.extension">0</xsl:param>
+    <xsl:param name="callout.extensions">1</xsl:param>
+    <xsl:param name="graphicsize.extension">0</xsl:param>
+    
+<!--###################################################
+                      Table Of Contents
+    ################################################### -->   
+
+    <!-- Generate the TOCs for named components only -->
+    <xsl:param name="generate.toc">
+        book   toc
+    </xsl:param>
+    
+    <!-- Show only Sections up to level 3 in the TOCs -->
+    <xsl:param name="toc.section.depth">3</xsl:param>
+
+<!--###################################################
+                         Labels
+    ################################################### -->   
+
+    <!-- Label Chapters and Sections (numbering) -->
+    <xsl:param name="chapter.autolabel">1</xsl:param>
+    <xsl:param name="section.autolabel" select="1"/>
+    <xsl:param name="section.label.includes.component.label" select="1"/>
+                
+<!--###################################################
+                         Callouts
+    ################################################### -->   
+
+    <!-- Don't use graphics, use a simple number style -->
+    <xsl:param name="callout.graphics">0</xsl:param>
+
+    <!-- Place callout marks at this column in annotated areas -->
+    <xsl:param name="callout.defaultcolumn">90</xsl:param>
+
+<!--###################################################
+                          Misc
+    ################################################### -->   
+
+    <!-- Placement of titles -->
+    <xsl:param name="formal.title.placement">
+        figure after
+        example before
+        equation before
+        table before
+        procedure before
+    </xsl:param>    
+    
+</xsl:stylesheet>

Copied: trunk/HibernateExt/annotations/doc/reference/fr (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/doc/reference/fr)

Copied: trunk/HibernateExt/annotations/doc/reference/fr/images (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/doc/reference/fr/images)

Deleted: trunk/HibernateExt/annotations/doc/reference/fr/images/hibernate_logo_a.png
===================================================================
(Binary files differ)

Copied: trunk/HibernateExt/annotations/doc/reference/fr/images/hibernate_logo_a.png (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/doc/reference/fr/images/hibernate_logo_a.png)
===================================================================
(Binary files differ)

Deleted: trunk/HibernateExt/annotations/doc/reference/fr/master.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/doc/reference/fr/master.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/doc/reference/fr/master.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,82 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3CR3//EN"
-"../../../../../Hibernate3/doc/reference/support/docbook-dtd/docbookx.dtd" [
-<!ENTITY setup SYSTEM "modules/setup.xml">
-<!ENTITY entity SYSTEM "modules/entity.xml">
-<!ENTITY xml-overriding SYSTEM "modules/xml-overriding.xml">
-<!ENTITY validator SYSTEM "modules/validator.xml">
-<!ENTITY lucene SYSTEM "modules/lucene.xml">
-]>
-<book lang="fr">
-  <bookinfo>
-    <title>Hibernate Annotations</title>
-
-    <subtitle>Guide de référence</subtitle>
-
-    <releaseinfo>3.2.0.GA</releaseinfo>
-
-    <mediaobject>
-      <imageobject>
-        <imagedata fileref="images/hibernate_logo_a.png" format="png" />
-      </imageobject>
-    </mediaobject>
-  </bookinfo>
-
-  <toc></toc>
-
-  <preface id="preface" revision="1">
-    <title>Préface</title>
-	<para>Traducteur(s): Vincent Ricard</para>
-
-    <para>Hibernate, comme tous les autres outils de mapping objet/relationnel,
-    nécessite des méta-données qui régissent la transformation des données
-    d'une représentation vers l'autre (et vice versa). Dans Hibernate 2.x, les
-    méta-données de mapping sont la plupart du temps déclarées dans des fichiers
-    XML. Une autre option est XDoclet, qui utilise les annotations du code source
-    Javadoc et un préprocesseur au moment de la compilation. Le même genre
-    d'annotation est maintenant disponible avec le JDK standard, quoique plus
-    puissant et mieux pris en charge par les outils. IntelliJ IDEA et Eclipse,
-    par exemple, prennent en charge la complétion automatique et la coloration
-    syntaxique des annotations du JDK 5.0. Les annotations sont compilées en
-    bytecode et lues au moment de l'exécution (dans le cas d'Hibernate, au
-    démarrage) en utilisant la réflexion, donc pas besoin de fichiers XML
-    externes.</para>
-
-    <para>La spécification EJB3 reconnaît l'intérêt et le succès du paradigme
-    du mapping objet/relationnel transparent. La spécification EJB3 standardise
-    les APIs de base et les méta-données requises par n'importe quel mécanisme
-    de persistance objet/relationnel. <emphasis>Hibernate EntityManager</emphasis>
-    implémente les interfaces de programmation et les règles de cycle de vie
-    telles que définies par la spécification de persistance EJB3. Avec
-    <emphasis>Hibernate Annotations</emphasis>, ce wrapper implémente une
-    solution de persistance EJB3 complète (et autonome) au-dessus du noyau
-    mature d'Hibernate. Vous pouvez utiliser soit les trois ensembles, soit les
-    annotations sans le cycle de vie et les interfaces de programmations EJB3,
-    ou même Hibernate tout seul, selon les besoins techniques et fonctionnels
-    de votre projet. Vous pouvez à tout moment recourir aux APIs natives
-    d'Hibernate ou même, si besoin est, à celles de JDBC et au SQL.</para>
-
-    <para>Cette version est basée sur la dernière version de la spécification
-    EJB 3.0 / JPA (alias JSP-220) et prend en charge toutes les fonctionnalités
-    de la spécification (dont certaines optionnelles). La plupart des
-    fonctionnalités d'Hibernate et des extensions sont aussi disponibles à
-    travers des annotations spécifiques à Hibernate. Bien que la couverture
-    d'Hibernate en termes de fonctionnalités soit maintenant très grande,
-    certaines sont encore manquantes. Le but ultime est de tout couvrir. Voir la
-    section JIRA "road map" pour plus d'informations.</para>
-
-    <para>Si vous utilisiez une version précédente d'Hibernate Annotations,
-    veuillez regarder <uri>http://www.hibernate.org/371.html</uri> pour un guide
-    de migration.</para>
-  </preface>
-
-  &setup;
-
-  &entity;
-
-  &xml-overriding;
-
-  &validator;
-
-  &lucene;
-</book>
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/doc/reference/fr/master.xml (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/doc/reference/fr/master.xml)
===================================================================
--- trunk/HibernateExt/annotations/doc/reference/fr/master.xml	                        (rev 0)
+++ trunk/HibernateExt/annotations/doc/reference/fr/master.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3CR3//EN"
+"../../../../../Hibernate3/doc/reference/support/docbook-dtd/docbookx.dtd" [
+<!ENTITY setup SYSTEM "modules/setup.xml">
+<!ENTITY entity SYSTEM "modules/entity.xml">
+<!ENTITY xml-overriding SYSTEM "modules/xml-overriding.xml">
+<!ENTITY validator SYSTEM "modules/validator.xml">
+<!ENTITY lucene SYSTEM "modules/lucene.xml">
+]>
+<book lang="fr">
+  <bookinfo>
+    <title>Hibernate Annotations</title>
+
+    <subtitle>Guide de référence</subtitle>
+
+    <releaseinfo>3.2.0.GA</releaseinfo>
+
+    <mediaobject>
+      <imageobject>
+        <imagedata fileref="images/hibernate_logo_a.png" format="png" />
+      </imageobject>
+    </mediaobject>
+  </bookinfo>
+
+  <toc></toc>
+
+  <preface id="preface" revision="1">
+    <title>Préface</title>
+	<para>Traducteur(s): Vincent Ricard</para>
+
+    <para>Hibernate, comme tous les autres outils de mapping objet/relationnel,
+    nécessite des méta-données qui régissent la transformation des données
+    d'une représentation vers l'autre (et vice versa). Dans Hibernate 2.x, les
+    méta-données de mapping sont la plupart du temps déclarées dans des fichiers
+    XML. Une autre option est XDoclet, qui utilise les annotations du code source
+    Javadoc et un préprocesseur au moment de la compilation. Le même genre
+    d'annotation est maintenant disponible avec le JDK standard, quoique plus
+    puissant et mieux pris en charge par les outils. IntelliJ IDEA et Eclipse,
+    par exemple, prennent en charge la complétion automatique et la coloration
+    syntaxique des annotations du JDK 5.0. Les annotations sont compilées en
+    bytecode et lues au moment de l'exécution (dans le cas d'Hibernate, au
+    démarrage) en utilisant la réflexion, donc pas besoin de fichiers XML
+    externes.</para>
+
+    <para>La spécification EJB3 reconnaît l'intérêt et le succès du paradigme
+    du mapping objet/relationnel transparent. La spécification EJB3 standardise
+    les APIs de base et les méta-données requises par n'importe quel mécanisme
+    de persistance objet/relationnel. <emphasis>Hibernate EntityManager</emphasis>
+    implémente les interfaces de programmation et les règles de cycle de vie
+    telles que définies par la spécification de persistance EJB3. Avec
+    <emphasis>Hibernate Annotations</emphasis>, ce wrapper implémente une
+    solution de persistance EJB3 complète (et autonome) au-dessus du noyau
+    mature d'Hibernate. Vous pouvez utiliser soit les trois ensembles, soit les
+    annotations sans le cycle de vie et les interfaces de programmations EJB3,
+    ou même Hibernate tout seul, selon les besoins techniques et fonctionnels
+    de votre projet. Vous pouvez à tout moment recourir aux APIs natives
+    d'Hibernate ou même, si besoin est, à celles de JDBC et au SQL.</para>
+
+    <para>Cette version est basée sur la dernière version de la spécification
+    EJB 3.0 / JPA (alias JSP-220) et prend en charge toutes les fonctionnalités
+    de la spécification (dont certaines optionnelles). La plupart des
+    fonctionnalités d'Hibernate et des extensions sont aussi disponibles à
+    travers des annotations spécifiques à Hibernate. Bien que la couverture
+    d'Hibernate en termes de fonctionnalités soit maintenant très grande,
+    certaines sont encore manquantes. Le but ultime est de tout couvrir. Voir la
+    section JIRA "road map" pour plus d'informations.</para>
+
+    <para>Si vous utilisiez une version précédente d'Hibernate Annotations,
+    veuillez regarder <uri>http://www.hibernate.org/371.html</uri> pour un guide
+    de migration.</para>
+  </preface>
+
+  &setup;
+
+  &entity;
+
+  &xml-overriding;
+
+  &validator;
+
+  &lucene;
+</book>
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/doc/reference/fr/modules (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/doc/reference/fr/modules)

Deleted: trunk/HibernateExt/annotations/doc/reference/fr/modules/entity.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/doc/reference/fr/modules/entity.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/doc/reference/fr/modules/entity.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,3458 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<chapter id="entity">
-  <title>Entity Beans</title>
-
-  <sect1 id="entity-overview" revision="1">
-    <title>Introduction</title>
-
-    <para>Cette section couvre les annotations entity bean EJB 3.0 (alias JPA)
-    et les extensions spécifiques à Hibernate.</para>
-  </sect1>
-
-  <sect1 id="entity-mapping" revision="2">
-    <title>Mapping avec les annotations EJB3/JPA</title>
-
-    <para>Les entités EJB3 sont des POJOs ordinaires. En fait, ils
-    représentent exactement le même concept que les entités de persistance
-    Hibernate. Leur mapping est défini à travers les annotations du JDK 5.0
-    (une syntaxe de descripteur XML pour la surcharge est définie dans la
-    spécification EJB3). Les annotations peuvent être divisées en deux
-    catégories, les annotations de mapping logique (vous permettant de décrire
-    le modèle objet, les associations de classe, etc) et les annotations de
-    mapping physique (décrivant le schéma physique, les tables, les colonnes,
-    les index, etc). Nous mélangerons les annotations des deux catégories dans
-    les exemples de code.</para>
-
-    <para>Les annotations EJB3 sont dans le package
-    <literal>javax.persistence.*</literal>. La plupart des IDE compatibles JDK 5
-    (comme Eclipse, IntelliJ IDEA et Netbeans) peuvent auto-compléter les
-    interfaces et les attributes d'annotation pour vous (même sans module "EJB3"
-    spécifique, puisque les annotations EJB3 sont des annotations ordinaires de
-    JDK 5).</para>
-
-    <para>Pour plus d'exemples concrets, lisez le tutorial EJB 3.0 de JBoss ou
-    parcourez la suite de tests d'Hibernate Annotations. La plupart des tests
-    unitaires ont été conçus pour représenter un exemple concret et être une
-    source d'inspiration.</para>
-
-    <sect2>
-      <title>Déclarer un entity bean</title>
-
-      <para>Chaque classe POJO persistante liée est un entity bean et est
-      déclarée en utilisant l'annotation <literal>@Entity</literal> (au niveau
-      de la classe) :</para>
-
-      <programlisting>
- at Entity
-public class Flight implements Serializable {
-    Long id;
-
-    @Id
-    public Long getId() { return id; }
-
-    public void setId(Long id) { this.id = id; }
-}
-</programlisting>
-
-      <para><literal>@Entity</literal> déclare la classe comme un entity bean
-      (ie une classe POJO persistante), <literal>@Id</literal> déclare la
-      propriété identifiante de cet entity bean. Les autres déclarations de
-      mapping sont implicites. Ce concept de déclaration par exception est
-      un composant essentiel de la nouvelle spécification EJB3 et une
-      amélioration majeure. La classe Flight est mappée sur la table Flight, en
-      utilisant la colonne id comme colonne de la clef primaire.</para>
-
-      <para>Selon que vous annotez des champs ou des méthodes, le type d'accès
-      utilisé par Hibernate sera <literal>field</literal> ou
-      <literal>property</literal>. La spécification EJB3 exige que vous
-      déclariez les annotations sur le type d'élément qui sera accédé,
-      c'est-à-dire le getter si vous utilisez l'accès
-      <literal>property</literal>, le champ si vous utilisez l'accès
-      <literal>field</literal>. Mélanger des EJB3 annotations dans les champs et
-      les méthodes devrait être évité. Hibernate devinera le type d'accès de
-      l'identifiant à partir de la position d'<literal>@Id</literal> ou
-      d'<literal>@EmbeddedId</literal>.</para>
-
-      <sect3>
-        <title>Définir la table</title>
-
-        <para><literal>@Table</literal> est positionnée au niveau de la classe ;
-        cela vous permet de définir le nom de la table, du catalogue et du
-        schéma pour le mapping de votre entity bean. Si aucune
-        <literal>@Table</literal> n'est définie les valeurs par défaut sont
-        utilisées : le nom de la classe de l'entité (sans le nom de
-        package).</para>
-
-        <programlisting>
- at Entity
- at Table(name="tbl_sky")
-public class Sky implements Serializable {
-...
-            </programlisting>
-
-        <para>L'élément <literal>@Table</literal> contient aussi un attribut
-        <literal>schema</literal> et un attribut <literal>catalog</literal>,
-        si vous avez besoin de les définir. Vous pouvez aussi définir des
-        contraintes d'unicité sur la table en utilisant l'annotation
-        <literal>@UniqueConstraint</literal> en conjonction avec
-        <literal>@Table</literal> (pour une contrainte d'unicité n'impliquant
-        qu'une seule colonne, référez-vous à <literal>@Column</literal>).</para>
-
-        <programlisting>@Table(name="tbl_sky",
-    <emphasis role="bold">uniqueConstraints = {@UniqueConstraint(columnNames={"month", "day"})}</emphasis>
-)</programlisting>
-
-        <para>Une contrainte d'unicité est appliquée au tuple {month, day}.
-        Notez que le tableau <literal>columnNames</literal> fait référence aux
-        noms logiques des colonnes.</para>
-
-        <remark>Le nom logique d'une colonne est défini par l'implémentation
-        de NamingStrategy d'Hibernate. La stratégie de nommage EJB3 par défaut
-        utilise le nom de colonne physique comme nom de colonne logique. Notez
-        qu'il peut être différent du nom de la propriété (si le nom de colonne
-        est explicite). A moins que vous surchargiez la stratégie de nommage,
-        vous ne devriez pas vous soucier de ça.</remark>
-      </sect3>
-
-      <sect3>
-        <title>Versionner pour un contrôle de concurrence optimiste</title>
-
-        <para>Vous pouvez ajouter un contrôle de concurrence optimiste à un
-        entity bean en utilisant l'annotation
-        <literal>@Version</literal> :</para>
-
-        <programlisting>
- at Entity
-public class Flight implements Serializable {
-...
-    @Version
-    @Column(name="OPTLOCK")
-    public Integer getVersion() { ... }
-}           </programlisting>
-
-        <para>La propriété de version sera mappée sur la colonne
-        <literal>OPTLOCK</literal>, et le gestionnaire d'entités l'utilisera
-        pour détecter des conflits lors des mises à jour (prévenant des pertes
-        de données lors de mises à jours que vous pourriez voir avec la
-        stratégie du last-commit-wins).</para>
-
-        <para>La colonne de version peut être un numérique (solution
-        recommandée) ou un timestamp comme pour la spécification EJB3. Hibernate
-        prend en charge n'importe quel type fourni que vous définissez et
-        implémentez avec la classe <classname>UserVersionType</classname>
-        appropriée.</para>
-      </sect3>
-    </sect2>
-
-    <sect2>
-      <title>Mapping de simples propriétés</title>
-
-      <sect3>
-        <title>Déclarer des mappings de propriétés élémentaires</title>
-
-        <para>Chaque propriété (champ ou méthode) non statique non transient
-        d'un entity bean est considérée persistante, à moins que vous l'annotiez
-        comme <literal>@Transient</literal>. Ne pas avoir d'annotation pour
-        votre propriété est équivalent à l'annotation <literal>@Basic</literal>.
-        L'annotation <literal>@Basic</literal> vous permet de déclarer la
-        stratégie de récupération pour une propriété :</para>
-
-        <programlisting>public transient int counter; // propriété transient
-
-private String firstname; // propriété persistante
-
- at Transient
-String getLengthInMeter() { ... } // propriété transient
-
-String getName() {... } // propriété persistante
-
- at Basic
-int getLength() { ... } // propriété persistante
-
- at Basic(fetch = FetchType.LAZY)
-String getDetailedComment() { ... } // propriété persistante
-
- at Temporal(TemporalType.TIME)
-java.util.Date getDepartureTime() { ... } // propriété persistante
-
- at Enumerated(STRING)
-Starred getNote() { ... } // enum persistée en tant que String dans la base de données</programlisting>
-
-        <para><literal>counter</literal>, un champ transient, et
-        <literal>lengthInMeter</literal>, une méthode annotée comme
-        <literal>@Transient</literal>, seront ignorés par le gestionnaire
-        d'entités. Les propriétés <literal>name</literal>,
-        <literal>length</literal>, et <literal>firstname</literal> sont mappées
-        comme persistantes et à charger immédiatement (ce sont les valeurs
-        par défaut pour les propriétés simples). La valeur de la propriété
-        <literal>detailedComment</literal> sera chargée à partir de la base de
-        données dès que la propriété de l'entité sera accédée pour la première
-        fois. En général vous n'avez pas besoin de marquer de simples propriétés
-        comme "à charger à la demande" (NdT: lazy) (à ne pas confondre avec la
-        récupération d'association "lazy").</para>
-
-        <note>
-          <para>Pour activer la récupération à la demande au niveau de la
-          propriété, vos classes doivent être instrumentées : du bytecode est
-          ajouté au code original pour activer cette fonctionnalité, veuillez
-          vous référer à la documentation de référence d'Hibernate. Si vos
-          classes ne sont pas instrumentées, le chargement à la demande au
-          niveau de la propriété est silencieusement ignoré.</para>
-        </note>
-
-        <para>L'alternative recommandée est d'utiliser la capacité de projection
-        de JPA-QL ou des requêtes Criteria.</para>
-
-        <para>EJB3 prend en charge le mapping de propriété de tous les types
-        élémentaires pris en charge par Hibernate (tous les types de base Java,
-        leur wrapper respectif et les classes sérialisables). Hibernate
-        Annotations prend en charge le mapping des types Enum soit vers une
-        colonne ordinale (en stockant le numéro ordinal de l'enum), soit vers
-        une colonne de type chaîne de caractères (en stockant la chaîne de
-        caractères représentant l'enum) : la représentation de la persistance,
-        par défaut ordinale, peut être surchargée grâce à l'annotation
-        <literal>@Enumerated</literal> comme montré avec la propriété
-        <literal>note</literal> de l'exemple.</para>
-
-        <para>Dans les APIs core de Java, la précision temporelle n'est pas
-        définie. Lors du traitement de données temporelles vous pourriez vouloir
-        décrire la précision attendue dans la base de données. Les données
-        temporelles peuvent avoir une précision de type <literal>DATE</literal>,
-        <literal>TIME</literal>, ou <literal>TIMESTAMP</literal> (c'est-à-dire
-        seulement la date, seulement l'heure, ou les deux). Utilisez
-        l'annotation <literal>@Temporal</literal> pour ajuster cela.</para>
-
-        <para><literal>@Lob</literal> indique que la propriété devrait être
-        persistée dans un Blob ou un Clob selon son type :
-        <classname>java.sql.Clob</classname>,
-        <classname>Character[]</classname>, <classname>char[]</classname> et
-        java.lang.<classname>String</classname> seront persistés dans un Clob.
-        <classname>java.sql.Blob</classname>, <classname>Byte[]</classname>,
-        <classname>byte[] </classname> et les types sérialisables seront
-        persistés dans un Blob.</para>
-
-        <programlisting>
- at Lob
-public String getFullText() {
-    return fullText;
-}
-
- at Lob
-public byte[] getFullCode() {
-    return fullCode;
-}
- </programlisting>
-
-        <para>Si le type de la propriété implémente
-        <classname>java.io.Serializable</classname> et n'est pas un type de
-        base, et si la propriété n'est pas annotée avec <literal>@Lob</literal>,
-        alors le type Hibernate <literal>serializable</literal> est
-        utilisé.</para>
-      </sect3>
-
-      <sect3>
-        <title>Déclarer des attributs de colonne</title>
-
-        <para>La(les) colonne(s) utilisée(s) pour mapper une propriété peuvent
-        être définies en utilisant l'annotation <literal>@Column</literal>.
-        Utilisez-la pour surcharger les valeurs par défaut (voir la
-        spécification EJB3 pour plus d'informations sur les valeurs par défaut).
-        Vous pouvez utilisez cette annotation au niveau de la propriété pour
-        celles qui sont :</para>
-
-        <itemizedlist>
-          <listitem>
-            <para>pas du tout annotées</para>
-          </listitem>
-
-          <listitem>
-            <para>annotées avec <literal>@Basic</literal></para>
-          </listitem>
-
-          <listitem>
-            <para>annotées avec <literal>@Version</literal></para>
-          </listitem>
-
-          <listitem>
-            <para>annotées avec <literal>@Lob</literal></para>
-          </listitem>
-
-          <listitem>
-            <para>annotées avec <literal>@Temporal</literal></para>
-          </listitem>
-
-          <listitem>
-            <para>annotées avec
-            <literal>@org.hibernate.annotations.CollectionOfElements</literal>
-            (pour Hibernate uniquement)</para>
-          </listitem>
-        </itemizedlist>
-
-        <programlisting>
- at Entity
-public class Flight implements Serializable {
-...
- at Column(updatable = false, name = "flight_name", nullable = false, length=50)
-public String getName() { ... }
-            </programlisting>
-
-        <para>La propriété <literal>name</literal> est mappée sur la colonne
-        <literal>flight_name</literal>, laquelle ne peut pas avoir de valeur
-        nulle, a une longueur de 50 et ne peut pas être mise à jour (rendant
-        la propriété immuable).</para>
-
-        <para>Cette annotation peut être appliquée aux propriétés habituelles
-        ainsi qu'aux propriétés <literal>@Id</literal> ou
-        <literal>@Version</literal>.</para>
-
-        <programlistingco>
-          <areaspec>
-            <area coords="2 55" id="hm1" />
-
-            <area coords="3 55" id="hm2" />
-
-            <area coords="4 55" id="hm3" />
-
-            <area coords="5 55" id="hm4" />
-
-            <area coords="6 55" id="hm5" />
-
-            <area coords="7 55" id="hm6" />
-
-            <area coords="8 55" id="hm7" />
-
-            <area coords="9 55" id="hm8" />
-
-            <area coords="10 55" id="hm9" />
-
-            <area coords="11 55" id="hm10" />
-          </areaspec>
-
-          <programlisting>@Column(
-    name="columnName";
-    boolean unique() default false;
-    boolean nullable() default true;
-    boolean insertable() default true;
-    boolean updatable() default true;
-    String columnDefinition() default "";
-    String table() default "";
-    int length() default 255;
-    int precision() default 0; // decimal precision
-    int scale() default 0; // decimal scale</programlisting>
-
-          <calloutlist>
-            <callout arearefs="hm1">
-              <para><literal>name</literal> (optionnel) : le nom de la colonne
-              (par défaut le nom de la propriété)</para>
-            </callout>
-
-            <callout arearefs="hm2">
-              <para><literal>unique</literal> (optionnel) : indique si la colonne
-              fait partie d'une contrainte d'unicité ou non (par défaut
-              false)</para>
-            </callout>
-
-            <callout arearefs="hm3">
-              <para><literal>nullable</literal> (optionnel) : indique si la
-              colonne peut avoir une valeur nulle (par défaut false).</para>
-            </callout>
-
-            <callout arearefs="hm4">
-              <para><literal>insertable</literal> (optionnel) : indique si la
-              colonne fera partie de la commande insert (par défaut true)</para>
-            </callout>
-
-            <callout arearefs="hm5">
-              <para><literal>updatable</literal> (optionnel) : indique si la
-              colonne fera partie de la commande update (par défaut true)</para>
-            </callout>
-
-            <callout arearefs="hm6">
-              <para><literal>columnDefinition</literal> (optionnel) : surcharge
-              le fragment DDL sql pour cette colonne en particulier (non
-              portable)</para>
-            </callout>
-
-            <callout arearefs="hm7">
-              <para><literal>table</literal> (optionnel) : définit la table
-              cible (par défaut la table principale)</para>
-            </callout>
-
-            <callout arearefs="hm8">
-              <para><literal><literal>length</literal></literal> (optionnel) :
-              longueur de la colonne (par défaut 255)</para>
-            </callout>
-
-            <callout arearefs="hm8">
-              <para><literal><literal>precision</literal></literal>
-              (optionnel) : précision décimale de la colonne (par défaut
-              0)</para>
-            </callout>
-
-            <callout arearefs="hm10">
-              <para><literal><literal>scale</literal></literal> (optionnel) :
-              échelle décimale de la colonne si nécessaire (par défaut 0)</para>
-            </callout>
-          </calloutlist>
-        </programlistingco>
-      </sect3>
-
-      <sect3>
-        <title>Objets embarqués (alias composants)</title>
-
-        <para>Il est possible de déclarer un composant embarqué à l'intérieur
-        d'une entité et même de surcharger le mapping de ses colonnes. Les
-        classes de composant doivent être annotées au niveau de la classe avec
-        l'annotation <literal>@Embeddable</literal>. Il est possible de
-        surcharger le mapping de colonne d'un objet embarqué pour une entité
-        particulière en utilisant les annotations
-        <literal>@Embedded</literal> et <literal>@AttributeOverride</literal>
-        sur la propriété associée :</para>
-
-        <programlisting>
- at Entity
-public class Person implements Serializable {
-
-    // Composant persistant utilisant les valeurs par défaut
-    Address homeAddress;
-
-    @Embedded
-    @AttributeOverrides( {
-            @AttributeOverride(name="iso2", column = @Column(name="bornIso2") ),
-            @AttributeOverride(name="name", column = @Column(name="bornCountryName") )
-    } )
-    Country bornIn;
-    ...
-}
-            </programlisting>
-
-        <programlisting>
- at Embeddable
-public class Address implements Serializable {
-    String city;
-    Country nationality; // par de surcharge ici
-}
-            </programlisting>
-
-        <programlisting>
- at Embeddable
-public class Country implements Serializable {
-    private String iso2;
-    @Column(name="countryName") private String name;
-
-    public String getIso2() { return iso2; }
-    public void setIso2(String iso2) { this.iso2 = iso2; }
-
-
-    public String getName() { return name; }
-    public void setName(String name) { this.name = name; }
-    ...
-}
-            </programlisting>
-
-        <para>Un objet embarquable hérite du type d'accès de son entité
-        d'appartenance (notez que vous pouvez surcharger cela en utilisant les
-        annotations spécifiques à Hibernate <literal>@AccessType</literal>,
-        voir <xref linkend="entity-hibspec" />).</para>
-
-        <para>L'entity bean <literal>Person</literal> a deux propriétés
-        composant, <literal>homeAddress</literal> et
-        <literal>bornIn</literal>. La propriété <literal>homeAddress</literal>
-        n'a pas été annotée, mais Hibernate devinera que c'est un composant
-        persistant en cherchant l'annotation <literal>@Embeddable</literal>
-        dans la classe Address. Nous surchargeons aussi le mapping d'un nom de
-        colonne (pour <literal>bornCountryName</literal>) avec les annotations
-        <literal>@Embedded</literal> et <literal>@AttributeOverride</literal>
-        pour chaque attribut mappé de <literal>Country</literal>. Comme vous
-        pouvez le voir, <literal>Country</literal> est aussi un composant
-        imbriqué de <literal>Address</literal>, utilisant de nouveau la
-        détection automatique d'Hibernate et les valeurs par défaut EJB3.
-        Surcharger des colonnes d'objets embarqués d'objets (eux-mêmes)
-        embarqués n'est actuellement pas pris en charge par la spécification
-        EJB3, cependant, Hibernate Annotations le prend en charge à travers des
-        expressions séparées par des points.</para>
-
-        <para><programlisting>    @Embedded
-    @AttributeOverrides( {
-            @AttributeOverride(name="city", column = @Column(name="fld_city") )
-            @AttributeOverride(name="<emphasis role="bold">nationality.iso2</emphasis>", column = @Column(name="nat_Iso2") ),
-            @AttributeOverride(name="<emphasis role="bold">nationality.name</emphasis>", column = @Column(name="nat_CountryName") )
-            // les colonnes de nationality dans homeAddress sont surchargées
-    } )
-    Address homeAddress;</programlisting>Hibernate Annotations prend en charge
-        une fonctionnalité de plus qui n'est pas explicitement prise en charge
-        par la spécification EJB3. Vous pouvez annoter un objet embarqué avec
-        l'annotation
-        <literal>@MappedSuperclass</literal> pour rendre les propriétés de la
-        classe parente persistantes (voir <literal>@MappedSuperclass</literal>
-        pour plus d'informations).</para>
-
-        <para>Alors que ce n'est pas pris en charge par la spécification EJB3,
-        Hibernate Annotations vous permet d'utiliser les annotations
-        d'association dans un objet embarquable (ie <literal>@*ToOne</literal>
-        ou <literal>@*ToMany</literal>). Pour surcharger les colonnes de
-        l'association vous pouvez utiliser
-        <literal>@AssociationOverride</literal>.</para>
-
-        <para>Si vous voulez avoir le même type d'objet embarquable deux fois
-        dans la même entité, le nom de colonne par défaut ne fonctionnera pas :
-        au moins une des colonnes devra être explicitée. Hibernate va au-delà
-        de la spécification EJB3 et vous permet d'améliorer le mécanisme par
-        défaut avec <classname>NamingStrategy</classname>.
-        <classname>DefaultComponentSafeNamingStrategy</classname> est une petite
-        amélioration par rapport à la stratégie par défaut
-        <classname>EJB3NamingStrategy</classname> qui permet aux objets
-        embarqués de fonctionner avec leur valeur par défaut même s'ils sont
-        utilisés deux fois dans la même entité.</para>
-      </sect3>
-
-      <sect3>
-        <title>Valeurs par défaut des propriétés non annotées</title>
-
-        <para>Si une propriété n'est pas annotée, les règles suivantes
-        s'appliquent :</para>
-
-        <itemizedlist>
-          <listitem>
-            Si la propriété est de type simple, elle est mappée comme @Basic
-          </listitem>
-
-          <listitem>
-            Sinon, si le type de la propriété est annoté comme @Embeddable,
-            elle est mappée comme @Embedded
-          </listitem>
-
-          <listitem>
-            Sinon, si le type de la propriété est Serializable, elle est mappée
-            comme @Basic vers une colonne contenant l'objet sous sa forme
-            sérialisée
-          </listitem>
-
-          <listitem>
-              Sinon, si le type de la propriété est java.sql.Clob ou
-              java.sql.Blob, elle est mappée comme @Lob avec le LobType
-              approprié
-          </listitem>
-        </itemizedlist>
-      </sect3>
-    </sect2>
-
-    <sect2 id="entity-mapping-identifier"
-           xreflabel="Mapper des propriétés identifiantes">
-      <title>Mapper des propriétés identifiantes</title>
-
-      <para>L'annotation <literal>@Id</literal> vous permet de définir quelle
-      propriété identifie votre entity bean. Cette propriété peut être
-      positionnée par l'application elle-même ou générée par Hibernate
-      (préféré). Vous pouvez définir la stratégie de génération de l'identifiant
-      grâce à l'annotation <literal>@GeneratedValue</literal> :</para>
-
-      <itemizedlist>
-        <listitem>
-           AUTO - soit la colonne identity, soit la séquence, soit la table
-           selon la base de données sous-jacente
-        </listitem>
-
-        <listitem>
-           TABLE - table contenant l'id
-        </listitem>
-
-        <listitem>
-           IDENTITY - colonne identity
-        </listitem>
-
-        <listitem>
-           SEQUENCE - séquence
-        </listitem>
-      </itemizedlist>
-
-      <para>Hibernate fournit plus de générateurs d'identifiant que les simples
-      générateurs EJB3. Vérifiez <xref linkend="entity-hibspec" /> pour plus
-      d'informations.</para>
-
-      <para>L'exemple suivant montre un générateur par séquence utilisant la
-      configuration SEQ_STORE (voir plus bas) :</para>
-
-      <programlisting>
- at Id @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQ_STORE")
-public Integer getId() { ... }
-         </programlisting>
-
-      <para>L'exemple suivant utilise le générateur identity :</para>
-
-      <programlisting>
- at Id @GeneratedValue(strategy=GenerationType.IDENTITY)
-public Long getId() { ... }
-         </programlisting>
-
-      <para>Le générateur <literal>AUTO</literal> est le type préféré pour les
-      applications portables (vers différentes base de données). La
-      configuration de la génération d'identifiant peut être partagée par
-      différents mappings <literal>@Id</literal> avec l'attribut du générateur.
-      Il y a différentes configurations disponibles avec
-      <literal>@SequenceGenerator</literal> et
-      <literal>@TableGenerator</literal>. La portée d'un générateur peut être
-      l'application ou la classe. Les générateurs définis dans les classes ne
-      sont pas visibles à l'extérieur de la classe et peuvent surcharger les
-      générateurs de niveau applicatif. Les générateurs de niveau applicatif
-      sont définis au niveau XML (voir
-      <xref linkend="xml-overriding" />) :</para>
-
-      <programlisting>&lt;table-generator name="EMP_GEN"
-            table="GENERATOR_TABLE"
-            pk-column-name="key"
-            value-column-name="hi"
-            pk-column-value="EMP"
-            allocation-size="20"/&gt;
-
-// et l'annotation équivalente
-
- at javax.persistence.TableGenerator(
-    name="EMP_GEN",
-    table="GENERATOR_TABLE",
-    pkColumnName = "key",
-    valueColumnName = "hi"
-    pkColumnValue="EMP",
-    allocationSize=20
-)
-
-&lt;sequence-generator name="SEQ_GEN"
-    sequence-name="my_sequence"
-    allocation-size="20"/&gt;
-
-// et l'annotation équivalente
-
- at javax.persistence.SequenceGenerator(
-    name="SEQ_GEN",
-    sequenceName="my_sequence",
-    allocationSize=20
-)
-         </programlisting>
-
-      <para>Si JPA XML (comme <filename>META-INF/orm.xml</filename>) est utilisé
-      pour définir les générateurs, <literal>EMP_GEN</literal> et
-      <literal>SEQ_GEN</literal> sont des générateurs de niveau applicatif.
-      <literal>EMP_GEN</literal> définit un générateur d'identifiant basé sur
-      une table utilisant l'algorithme hilo avec un <literal>max_lo</literal> de
-      20. La valeur haute est conservée dans une <literal>table</literal>
-      "<literal>GENERATOR_TABLE</literal>". L'information est gardée dans une
-      ligne où la colonne <literal>pkColumnName</literal> ("clef") est égale à
-      <literal>pkColumnValue</literal> "<literal>EMP</literal>" et une colonne
-      <literal>valueColumnName</literal> "<literal>hi</literal>" contient la
-      prochaine valeur haute utilisée.</para>
-
-      <para><literal>SEQ_GEN</literal> définit un générateur par séquence
-      utilisant une séquence nommée <literal>my_sequence</literal>. La taille
-      d'allocation utilisée pour cet algorithme hilo basé sur une séquence est
-      20. Notez que cette version d'Hibernate Annotations ne gère pas
-      <literal>initialValue</literal> dans le générateur par séquence.
-      La taille par défaut de l'allocation est 50, donc si vous voulez utiliser
-      une séquence et récupérer la valeur chaque fois, vous devez positionner
-      la taille de l'allocation à 1.</para>
-
-      <note>
-        <para>La définition au niveau package n'est plus prise en charge par la
-        spécification EJB 3.0. Vous pouvez cependant utiliser
-        <literal>@GenericGenerator</literal> au niveau du package (voir <xref
-        linkend="entity-hibspec-identifier" />).</para>
-      </note>
-
-      <para>Le prochain exemple montre la définition d'un générateur par
-      séquence dans la portée d'une classe :</para>
-
-      <programlisting>
- at Entity
- at javax.persistence.SequenceGenerator(
-    name="SEQ_STORE",
-    sequenceName="my_sequence"
-)
-public class Store implements Serializable {
-    private Long id;
-
-    @Id @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQ_STORE")
-    public Long getId() { return id; }
-}
-         </programlisting>
-
-      <para>Cette classe utilisera une séquence nommée my_sequence et le
-      générateur SEQ_STORE n'est pas visible dans les autres classes. Notez que
-      vous pouvez regarder les tests unitaires d'Hibernate Annotations dans le
-      package org.hibernate.test.metadata.id pour plus d'exemples.</para>
-
-      <para>Vous pouvez définir une clef primaire composée à travers différentes
-      syntaxes :</para>
-
-      <itemizedlist>
-        <listitem>
-           annote la propriété du composant comme @Id et rend la classe du
-           composant @Embeddable
-        </listitem>
-
-        <listitem>
-           annote la propriété du composant comme @EmbeddedId
-        </listitem>
-
-        <listitem>
-           annote la classe comme @IdClass et annote chaque propriété de
-           l'entité impliquée dans la clef primaire avec @Id
-        </listitem>
-      </itemizedlist>
-
-      <para>Bien qu'assez commun pour le développeur EJB2,
-      <literal>@IdClass</literal> est probablement nouveau pour les utilisateurs
-      d'Hibernate. La classe de la clef primaire composée correspond aux
-      multiples champs ou propriétés de l'entité ; de plus, les noms des champs
-      ou propriétés de la clef primaire et ceux de l'entité doivent
-      correspondre ; et enfin, leur type doit être le même. Regardons un
-      exemple :</para>
-
-      <programlisting>@Entity
-<emphasis role="bold">@IdClass(FootballerPk.class)</emphasis>
-public class Footballer {
-    // partie de la clef
-    <emphasis role="bold">@Id</emphasis> public String getFirstname() {
-        return firstname;
-    }
-
-    public void setFirstname(String firstname) {
-        this.firstname = firstname;
-    }
-
-    // partie de la clef
-    <emphasis role="bold">@Id</emphasis> public String getLastname() {
-        return lastname;
-    }
-
-    public void setLastname(String lastname) {
-        this.lastname = lastname;
-    }
-
-    public String getClub() {
-        return club;
-    }
-
-    public void setClub(String club) {
-        this.club = club;
-    }
-
-    // implémentation appropriée de equals() et hashCode()
-}
-
- at Embeddable
-public class FootballerPk implements Serializable {
-    // même nom et même type que dans Footballer
-    public String getFirstname() {
-        return firstname;
-    }
-
-    public void setFirstname(String firstname) {
-        this.firstname = firstname;
-    }
-
-    // même nom et même type que dans Footballer
-    public String getLastname() {
-        return lastname;
-    }
-
-    public void setLastname(String lastname) {
-        this.lastname = lastname;
-    }
-
-    // implémentation appropriée de equals() et hashCode()
-}
-</programlisting>
-
-      <para>Comme vous pouvez le voir, <literal>@IdClass</literal> pointe vers
-      la classe de la clef primaire correspondante.</para>
-
-      <para>Bien que ce ne soit pas pris en charge par la spécification EJB3,
-      Hibernate vous permet de définir des associations à l'intérieur d'un
-      identifiant composé. Pour cela, utilisez simplement les annotations
-      habituelles.</para>
-
-      <programlisting>@Entity
- at AssociationOverride( name="id.channel", joinColumns = @JoinColumn(name="chan_id") )
-public class TvMagazin {
-    @EmbeddedId public TvMagazinPk id;
-    @Temporal(TemporalType.TIME) Date time;
-}
-
- at Embeddable
-public class TvMagazinPk implements Serializable {
-    @ManyToOne
-    public Channel channel;
-    public String name;
-    @ManyToOne
-    public Presenter presenter;
-}
-</programlisting>
-    </sect2>
-
-    <sect2>
-      <title>Mapper l'héritage</title>
-
-      <para>EJB3 prend en charge les trois types d'héritage :</para>
-
-      <itemizedlist>
-        <listitem>
-           Stratégie d'une table par classe concrète : l'élément
-           &lt;union-class&gt; dans Hibernate
-        </listitem>
-
-        <listitem>
-            Stratégie d'une seule table par hiérarchie de classe : l'élément
-            &lt;subclass&gt; dans Hibernate
-        </listitem>
-
-        <listitem>
-           Stratégie d'une table par classe fille : l'élément
-           &lt;joined-subclass&gt; dans Hibernate
-        </listitem>
-      </itemizedlist>
-
-      <para>La stratégie choisie est déclarée au niveau de la classe de l'entité
-      la plus haute dans la hiérarhie en utilisant l'annotation
-      <literal>@Inheritance</literal>.</para>
-
-      <note>
-        <para>Annoter des interfaces n'est pour le moment pas pris en
-        charge.</para>
-      </note>
-
-      <sect3>
-        <title>Une table par classe concrète</title>
-
-        <para>Cette stratégie a beaucoup d'inconvénients (surtout avec les
-        requêtes polymorphiques et les associations) expliqués dans la
-        spécification EJB3, la documentation de référence d'Hibernate, Hibernate
-        in Action, et plusieurs autres endroits. Hibernate en contourne la
-        plupart en implémentant cette stratégie en utilisant des requêtes
-        <literal>SQL UNION</literal>. Elle est habituellement utilisée pour le
-        niveau le plus haut d'une hiérarchie d'héritage :</para>
-
-        <programlisting>
- at Entity
- at Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
-public class Flight implements Serializable {
-            </programlisting>
-
-        <para>Cette stratégie prend en charge les associations de un vers
-        plusieurs bidirectionnelles. Cette stratégie ne prend pas en charge
-        la stratégie de générateur <literal>IDENTITY</literal> : l'identifiant
-        doit être partagé par plusieurs tables. Par conséquent, lors de
-        l'utilisation de cette stratégie, vous ne devriez pas utilisez
-        <literal>AUTO</literal> ni <literal>IDENTITY</literal>.</para>
-      </sect3>
-
-      <sect3>
-        <title>Une seule table par hiérarchie de classe</title>
-
-        <para>Toutes les propriétés de toutes les classes parentes et classes
-        filles sont mappées dans la même table, les instances sont différenciées
-        par une colonne spéciale discriminante :</para>
-
-        <programlisting>
- at Entity
- at Inheritance(strategy=InheritanceType.SINGLE_TABLE)
- at DiscriminatorColumn(
-    name="planetype",
-    discriminatorType=DiscriminatorType.STRING
-)
- at DiscriminatorValue("Plane")
-public class Plane { ... }
-
- at Entity
- at DiscriminatorValue("A320")
-public class A320 extends Plane { ... }
-            </programlisting>
-
-        <para><classname>Plane</classname> est la classe parente, elle définit
-        la stratégie d'héritage <literal>InheritanceType.SINGLE_TABLE</literal>.
-        Elle définit aussi la colonne discriminante avec l'annotation
-        <literal>@DiscriminatorColumn</literal>, une colonne discriminante peut
-        aussi définir le type du discriminant. Finalement, l'annotation
-        <literal>@DiscriminatorValue</literal> définit la valeur utilisée pour
-        différencier une classe dans la hiérarchie. Tous ces attributs ont des
-        valeurs par défaut sensées. Le nom par défaut de la colonne
-        discriminante est <literal>DTYPE</literal>. La valeur discriminante par
-        défaut est le nom de l'entité (comme défini dans
-        <literal>@Entity.name</literal>) avec le type
-        <literal>DiscriminatorType.STRING</literal>. <classname>A320</classname>
-        est une classe fille ; vous devez seulement définir la valeur
-        discriminante si vous ne voulez pas utiliser la valeur par défaut. La
-        stratégie et le type du discriminant sont implicites.</para>
-
-        <para><literal>@Inheritance</literal> et
-        <literal>@DiscriminatorColumn</literal> devraient seulement être
-        définies sur l'entité la plus haute de la hiérarchie.</para>
-      </sect3>
-
-      <sect3>
-        <title>Une table par classe fille</title>
-
-        <para>Les annotations <literal> @PrimaryKeyJoinColumn</literal> et
-        <literal>@PrimaryKeyJoinColumns</literal> définissent la (les) clef(s)
-        primaire(s) de la table de la classe fille jointe :</para>
-
-        <programlisting>
- at Entity
- at Inheritance(strategy=InheritanceType.JOINED)
-public class Boat implements Serializable { ... }
-
- at Entity
-public class Ferry extends Boat { ... }
-
- at Entity
- at PrimaryKeyJoinColumn(name="BOAT_ID")
-public class AmericaCupClass  extends Boat { ... }
-            </programlisting>
-
-        <para>Toutes les entités ci-dessus utilisent la stratégie
-        <literal>JOINED</literal>, la table <literal>Ferry</literal> est jointe
-        avec la table <literal>Boat</literal> en utilisant les mêmes noms de
-        clef primaire. La table <literal>AmericaCupClass</literal> est jointe
-        avec <literal>Boat</literal> en utilisant la condition de jointure
-        <code>Boat.id = AmericaCupClass.BOAT_ID</code>.</para>
-      </sect3>
-
-      <sect3>
-        <title>Héritage de propriétés des classes parentes</title>
-
-        <para>Il est parfois utile de partager des propriétés communes à travers
-        une classe technique ou métier sans l'inclure comme une entité
-        habituelle (c'est-à-dire aucune table spécifique pour cette entité).
-        Pour cela, vous pouvez les mapper comme
-        <literal>@MappedSuperclass</literal>.</para>
-
-        <programlisting>@MappedSuperclass
-public class BaseEntity {
-    @Basic
-    @Temporal(TemporalType.TIMESTAMP)
-    public Date getLastUpdate() { ... }
-    public String getLastUpdater() { ... }
-    ...
-}
-
- at Entity class Order extends BaseEntity {
-    @Id public Integer getId() { ... }
-    ...
-}</programlisting>
-
-        <para>En base de données, cette hiérarchie sera représentée comme une
-        table <literal>Order</literal> ayant les colonnes <literal>id</literal>,
-        <literal>lastUpdate</literal> et <literal>lastUpdater</literal>.
-        Les mappings de propriété de la classe parente embarquée sont copiés
-        dans les classes filles de l'entité. Souvenez-vous que la classe parente
-        embarquable n'est cependant pas la racine de la hiérarchie.</para>
-
-        <note>
-          <para>Les propriétés des classes parentes non mappées comme
-          <literal>@MappedSuperclass</literal> sont ignorées.</para>
-        </note>
-
-        <note>
-          <para>Le type d'accès (champ ou méthode) est hérité de l'entité
-          racine, à moins que vous utilisiez l'annotation Hibernate
-          <literal>@AccessType</literal>.</para>
-        </note>
-
-        <note>
-          <para>La même notion peut être appliquée aux objets
-          <literal>@Embeddable</literal> pour persister des propriétés de leurs
-          classes parentes. Vous avez aussi besoin d'utiliser
-          <literal>@MappedSuperclass</literal> pour faire ça (cependant cela ne
-          devrait pas être considéré comme une fonctionnalité EJB3
-          standard).</para>
-        </note>
-
-        <note>
-          <para>Il est permis de marquer une classe comme
-          <literal>@MappedSuperclass</literal> dans le milieu d'une hiérarchie
-          d'héritage mappée.</para>
-        </note>
-
-        <note>
-          <para>Toute classe de la hiérarchie non annotée avec
-          <literal>@MappedSuperclass</literal> ou <literal>@Entity</literal>
-          sera ignorée.</para>
-        </note>
-
-        <para>Vous pouvez surcharger des colonnes définies dans des entités
-        parentes au niveau de l'entité racine en utilisant l'annotation
-        <literal>@AttributeOverride</literal>.</para>
-
-        <programlisting>@MappedSuperclass
-public class FlyingObject implements Serializable {
-
-    public int getAltitude() {
-        return altitude;
-    }
-
-    @Transient
-    public int getMetricAltitude() {
-        return metricAltitude;
-    }
-
-    @ManyToOne
-    public PropulsionType getPropulsion() {
-        return metricAltitude;
-    }
-    ...
-}
-
- at Entity
- at AttributeOverride( name="altitude", column = @Column(name="fld_altitude") )
- at AssociationOverride( name="propulsion", joinColumns = @JoinColumn(name="fld_propulsion_fk") )
-public class Plane extends FlyingObject {
-    ...
-}</programlisting>
-
-        <para>La propriété <literal>altitude</literal> sera persistée dans la
-        colonne <literal>fld_altitude</literal> de la table
-        <literal>Plane</literal> et l'association <literal>propulsion</literal>
-        sera matérialisée dans la colonne de clef étrangère
-        <literal>fld_propulsion_fk</literal>.</para>
-
-        <para>Vous pouvez définir <literal>@AttributeOverride</literal>(s) et
-        <literal>@AssociationOverride</literal>(s) sur des classes
-        <literal>@Entity</literal>, des classes
-        <literal>@MappedSuperclass</literal> et des propriétés pointant vers un
-        objet <literal>@Embeddable</literal>.</para>
-      </sect3>
-    </sect2>
-
-    <sect2 id="entity-mapping-association">
-      <title>Mapper des associations/relations d'entity beans</title>
-
-      <sect3>
-        <title>One-to-one</title>
-
-        <para>Vous pouvez associer des entity beans avec une relation one-to-one
-        en utilisant <literal>@OneToOne</literal>. Il y a trois cas pour les
-        associations one-to-one : soit les entités associées partagent les mêmes
-        valeurs de clef primaire, soit une clef étrangère est détenue par une
-        des entités (notez que cette colonne de clef étrangère dans la base de
-        données devrait être avoir une contrainte d'unicité pour simuler la
-        cardinalité one-to-one), soit une table d'association est utilisée pour
-        stocker le lien entre les 2 entités (une contrainte d'unicité doit être
-        définie sur chaque clef étrangère pour assurer la cardinalité un à
-        un).</para>
-
-        <para>Tout d'abord, nous mappons une véritable association one-to-one en
-        utilisant des clefs primaires partagées :</para>
-
-        <programlisting>
- at Entity
-public class Body {
-    @Id
-    public Long getId() { return id; }
-
-    @OneToOne(cascade = CascadeType.ALL)
-    @PrimaryKeyJoinColumn
-    public Heart getHeart() {
-        return heart;
-    }
-    ...
-}
-            </programlisting>
-
-        <programlisting>
- at Entity
-public class Heart {
-    @Id
-    public Long getId() { ...}
-}
-            </programlisting>
-
-        <para>L'association un à un est activée en utilisant l'annotation
-        <literal>@PrimaryKeyJoinColumn</literal>.</para>
-
-        <para>Dans l'exemple suivant, les entités associées sont liées à travers
-        une clef étrangère :</para>
-
-        <programlisting>
- at Entity
-public class Customer implements Serializable {
-    @OneToOne(cascade = CascadeType.ALL)
-    <emphasis role="bold">@JoinColumn(name="passport_fk")</emphasis>
-    public Passport getPassport() {
-        ...
-    }
-
- at Entity
-public class Passport implements Serializable {
-    @OneToOne(<emphasis role="bold">mappedBy = "passport"</emphasis>)
-    public Customer getOwner() {
-    ...
-}
-            </programlisting>
-
-        <para>Un <classname>Customer</classname> est lié à un
-        <classname>Passport</classname>, avec une colonne de clef étrangère
-        nommée <literal>passport_fk</literal> dans la table
-        <literal>Customer</literal>. La colonne de jointure est déclarée avec
-        l'annotation <literal>@JoinColumn</literal> qui ressemble à l'annotation
-        <literal>@Column</literal>. Elle a un paramètre de plus nommé
-        <literal>referencedColumnName</literal>. Ce paramètre déclare la colonne
-        dans l'entité cible qui sera utilisée pour la jointure. Notez que lors
-        de l'utilisation de <literal>referencedColumnName</literal> vers une
-        colonne qui ne fait pas partie de la clef primaire, la classe associée
-        doit être <classname>Serializable</classname>. Notez aussi que
-        <literal>referencedColumnName</literal> doit être mappé sur une
-        propriété ayant une seule colonne lorsqu'elle pointe vers une colonne
-        qui ne fait pas partie de la clef primaire (d'autres cas pourraient ne
-        pas fonctionnner).</para>
-
-        <para>L'association peut être bidirectionnelle. Dans une relation
-        bidirectionnelle, une des extrémités (et seulement une) doit être la
-        propriétaire : la propriétaire est responsable de la mise à jour des
-        colonnes de l'association. Pour déclarer une extrémité comme
-        <emphasis>non</emphasis> responsable de la relation, l'attribut
-        <literal>mappedBy</literal> est utilisé.
-        <literal>mappedBy</literal> référence le nom de la propriété de
-        l'association du côté du propriétaire. Dans notre cas, c'est
-        <literal>passport</literal>. Comme vous pouvez le voir, vous ne devez
-        (absolument) pas déclarer la colonne de jointure puisqu'elle a déjà été
-        déclarée du côté du propriétaire.</para>
-
-        <para>Si aucune <literal>@JoinColumn</literal> n'est déclarée du côté du
-        propriétaire, les valeurs par défaut s'appliquent. Une(des) colonne(s)
-        de jointure sera(ont) créée(s) dans la table propriétaire, et son(leur)
-        nom sera la concaténation du nom de la relation du côté propriétaire,
-        <keycap>_</keycap> (underscore), et le nom de la (des) colonne(s) de la
-        clef primaire du propriétaire. Dans cet exemple
-        <literal>passport_id</literal> parce que le nom de la propriété est
-        <literal>passport</literal> et la colonne identifiante de
-        <literal>Passport</literal> est <literal>id</literal>.</para>
-
-        <para>La troisième possibilité (utilisant une table d'association) est
-        très exotique.</para>
-
-        <programlisting>
- at Entity
-public class Customer implements Serializable {
-    @OneToOne(cascade = CascadeType.ALL)
-    <emphasis role="bold">@JoinTable(name = "CustomerPassports"
-        joinColumns = @JoinColumn(name="customer_fk"),
-        inverseJoinColumns = @JoinColumns(name="passport_fk")</emphasis>
-    )
-    public Passport getPassport() {
-        ...
-    }
-
- at Entity
-public class Passport implements Serializable {
-    @OneToOne(<emphasis role="bold">mappedBy = "passport"</emphasis>)
-    public Customer getOwner() {
-    ...
-}
-            </programlisting>
-
-        <para>Un <classname>Customer</classname> est lié à un
-        <classname>Passport</classname> à travers une table d'association
-        nommée <literal>CustomerPassports</literal> ; cette table d'association
-        a une colonne de clef étrangère nommée <literal>passport_fk</literal>
-        pointant vers la table <literal>Passport</literal> (matérialisée par
-        l'attribut <literal>inverseJoinColumn</literal>), et une colonne de clef
-        étrangère nommée <literal>customer_fk</literal> pointant vers la table
-        <literal>Customer</literal> (matérialisée par l'attribut
-        <literal>joinColumns</literal>).</para>
-
-        <para>Vous devez déclarer le nom de la table de jointure et les colonnes
-        de jointure explicitement dans un tel mapping.</para>
-      </sect3>
-
-      <sect3>
-        <title>Many-to-one</title>
-
-        <para>Les associations Many-to-one sont déclarées au niveau de la
-        propriété avec l'annotation <literal>@ManyToOne</literal> :</para>
-
-        <programlisting>
- at Entity()
-public class Flight implements Serializable {
-    <emphasis role="bold">@ManyToOne</emphasis>( cascade = {CascadeType.PERSIST, CascadeType.MERGE} )
-    @JoinColumn(name="COMP_ID")
-    public Company getCompany() {
-        return company;
-    }
-    ...
-}
-            </programlisting>
-
-        <para>L'attribut <literal>@JoinColumn</literal> est optionnel, la valeur
-        par défaut est comme l'association un à un, la concaténation du nom
-        de la relation du côté propriétaire, <keycap>_</keycap>
-        (underscore), et le nom de la colonne de la clef primaire du côté
-        propriétaire. Dans cet exemple, <literal>company_id</literal> parce que
-        le nom de la propriété est <literal>company</literal> et la colonne
-        identifiante de Company est <literal>id</literal>.</para>
-
-        <para><literal>@ManyToOne</literal> a un paramètre nommé
-        <literal>targetEntity</literal> qui décrit le nom de l'entité cible.
-        Généralement, vous ne devriez pas avoir besoin de ce paramètre puisque
-        la valeur par défaut (le type de la propriété qui stocke l'association)
-        est correcte dans la plupart des cas. Il est cependant utile lorsque
-        vous souhaitez retourner une interface plutôt qu'une entité
-        normale.</para>
-
-        <programlisting>
- at Entity()
-public class Flight implements Serializable {
-    @ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE}, <emphasis
-            role="bold">targetEntity=CompanyImpl.class</emphasis> )
-    @JoinColumn(name="COMP_ID")
-    public Company getCompany() {
-        return company;
-    }
-    ...
-}
-
-public interface Company {
-    ...
-            </programlisting>
-
-        <para>Vous pouvez sinon mapper une association plusieurs à un avec une
-        table d'association. Cette association décrite par l'annotation
-        <literal>@JoinTable</literal> contiendra une clef étrangère référençant
-        la table de l'entité (avec
-        <literal>@JoinTable.joinColumns</literal>) et une clef étrangère
-        référençant la table de l'entité cible (avec
-        <literal>@JoinTable.inverseJoinColumns</literal>).</para>
-
-        <programlisting>
- at Entity()
-public class Flight implements Serializable {
-    @ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE} )
-    <emphasis role="bold">@JoinTable(name="Flight_Company",
-        joinColumns = @JoinColumn(name="FLIGHT_ID"),
-        inverseJoinColumns = @JoinColumns(name="COMP_ID")
-    )</emphasis>
-    public Company getCompany() {
-        return company;
-    }
-    ...
-}
-            </programlisting>
-      </sect3>
-
-      <sect3 id="entity-mapping-association-collections">
-        <title>Collections</title>
-
-        <sect4 id="entity-mapping-association-collections-overview"
-               revision="1">
-          <title>Vue d'ensemble</title>
-
-          <para>Vous pouvez mapper des <classname>Collection</classname>s, des
-          <literal>List</literal>s (ie des listes ordonnées, pas des listes
-          indexées), des <literal>Map</literal>s et des
-          <classname>Set</classname>s. La spécification EJB3 décrit comment
-          mapper une liste ordonnée (ie une liste ordonnée au chargement) en
-          utilisant l'annotation <literal>@javax.persistence.OrderBy</literal> :
-          pour ordonner la collection, cette annotation prend en paramètre une
-          liste de propriétés (de l'entité cible) séparées par des virgules
-          (p. ex. <code>firstname asc, age desc</code>) ; si la chaîne de
-          caractères est vide, la collection sera ordonnée par les identifiants.
-          Pour le moment <literal>@OrderBy</literal> fonctionne seulement sur
-          des collections n'ayant pas de table d'association. Pour les
-          véritables collections indexées, veuillez vous référer à
-          <xref linkend="entity-hibspec" />. EJB3 vous permet de mapper des
-          <literal>Map</literal>s en utilisant comme clef une des propriétés de
-          l'entité cible avec <literal>@MapKey(name="myProperty")</literal>
-          (myProperty est un nom de propriété de l'entité cible). Lorsque vous
-          utilisez <literal>@MapKey</literal> sans nom de propriété, la clef
-          primaire de l'entité cible est utilisée. La clef de la map utilise la
-          même colonne que celle pointée par la propriété : il n'y a pas de
-          colonne supplémentaire définie pour la clef de la map, et c'est normal
-          puisque la clef de la map représente en fait un propriété de la cible.
-          Faites attention qu'une fois chargée, la clef n'est plus synchronisée
-          avec la propriété, en d'autres mots, si vous modifiez la valeur de la
-          propriété, la clef ne sera pas changée automatiquement dans votre
-          modèle Java (pour une véritable prise en charge des maps veuillez vous
-          référer à <xref linkend="entity-hibspec" />). Beaucoup de gens
-          confondent les capacités de <literal>&lt;map&gt;</literal> et celles
-          de <literal>@MapKey</literal>. Ce sont deux fonctionnalités
-          différentes. <literal>@MapKey</literal> a encore quelques limitations,
-          veuillez vous référer au forum ou au système de suivi de bogues JIRA
-          pour plus d'informations.</para>
-
-          <para>Hibernate a plusieurs notions de collections.</para>
-
-          <para></para>
-
-          <table>
-            <title>Sémantique des collections</title>
-
-            <tgroup cols="3">
-              <colspec colname="c1" />
-
-              <colspec colname="c2" />
-
-              <colspec colname="c3" colnum="2" />
-
-              <thead>
-                <row>
-                  <entry>Sémantique</entry>
-
-                  <entry>Représentation Java</entry>
-
-                  <entry>Annotations</entry>
-                </row>
-              </thead>
-
-              <tbody>
-                <row>
-                  <entry>Sémantique de Bag</entry>
-
-                  <entry>java.util.List, java.util.Collection</entry>
-
-                  <entry>@org.hibernate.annotations.CollectionOfElements ou
-                  @OneToMany ou @ManyToMany</entry>
-                </row>
-
-                <row>
-                  <entry>Sémantique de Bag avec une clef primaire (sans les
-                  limitations de la sémantique de Bag)</entry>
-
-                  <entry>java.util.List, java.util.Collection</entry>
-
-                  <entry>(@org.hibernate.annotations.CollectionOfElements ou
-                  @OneToMany ou @ManyToMany) et @CollectionId</entry>
-                </row>
-
-                <row>
-                  <entry>Sémantique de List</entry>
-
-                  <entry>java.util.List</entry>
-
-                  <entry>(@org.hibernate.annotations.CollectionOfElements ou
-                  @OneToMany ou @ManyToMany) et
-                  @org.hibernate.annotations.IndexColumn</entry>
-                </row>
-
-                <row>
-                  <entry>Sémantique de Set</entry>
-
-                  <entry>java.util.Set</entry>
-
-                  <entry>@org.hibernate.annotations.CollectionOfElements ou
-                  @OneToMany ou @ManyToMany</entry>
-                </row>
-
-                <row>
-                  <entry>Sémantique de Map</entry>
-
-                  <entry>java.util.Map</entry>
-
-                  <entry>(@org.hibernate.annotations.CollectionOfElements ou
-                  @OneToMany ou @ManyToMany) et (rien ou
-                  @org.hibernate.annotations.MapKey/MapKeyManyToMany pour une
-                  véritable prise en charge des maps, ou
-                  @javax.persistence.MapKey</entry>
-                </row>
-              </tbody>
-            </tgroup>
-          </table>
-
-          <remark>Donc spécifiquement, les collections java.util.List sans
-          @org.hibernate.annotations.IndexColumn vont être considérées commes
-          des bags.</remark>
-
-          <para>Les collections de types primitifs, de types core ou d'objets
-          embarqués ne sont pas prises en charge par la spécification EJB3.
-          Cependant Hibernate Annotations les autorise
-          (voir <xref linkend="entity-hibspec" />).</para>
-
-          <programlisting>@Entity public class City {
-    @OneToMany(mappedBy="city")
-    <emphasis role="bold">@OrderBy("streetName")</emphasis>
-    public List&lt;Street&gt; getStreets() {
-        return streets;
-    }
-...
-}
-
- at Entity public class Street {
-    <emphasis role="bold">public String getStreetName()</emphasis> {
-        return streetName;
-    }
-
-    @ManyToOne
-    public City getCity() {
-        return city;
-    }
-    ...
-}
-
-
- at Entity
-public class Software {
-    @OneToMany(mappedBy="software")
-    <emphasis role="bold">@MapKey(name="codeName")</emphasis>
-    public Map&lt;String, Version&gt; getVersions() {
-        return versions;
-    }
-...
-}
-
- at Entity
- at Table(name="tbl_version")
-public class Version {
-    <emphasis role="bold">public String getCodeName()</emphasis> {...}
-
-    @ManyToOne
-    public Software getSoftware() { ... }
-...
-}</programlisting>
-
-          <para>Donc <literal>City</literal> a une collection de
-          <literal>Street</literal>s qui sont ordonnées par
-          <literal>streetName</literal> (de <literal>Street</literal>) lorsque
-          la collection est chargée. <literal>Software</literal> a une map de
-          <literal>Version</literal>s dont la clef est
-          <literal>codeName</literal> de <literal>Version</literal>.</para>
-
-          <para>A moins que la collection soit une "generic", vous devrez
-          définir <literal>targetEntity</literal>. C'est un attribut de
-          l'annotation qui prend comme valeur la classe de l'entité
-          cible.</para>
-        </sect4>
-
-        <sect4 id="entity-mapping-association-collection-onetomany"
-               revision="2">
-          <title>One-to-many</title>
-
-          <para>Les associations one-to-many sont déclarées au niveau propriété
-          avec l'annotation <literal>@OneToMany</literal>. Les associations un
-          à plusieurs peuvent être bidirectionnelles.</para>
-
-          <sect5>
-            <title>Relation bidirectionnelle</title>
-
-            <para>Puisque les associations plusieurs à un sont (presque)
-            toujours l'extrémité propriétaire de la relation bidirectionnelle
-            dans la spécification EJB3, l'association un à plusieurs est
-            annotée par <literal>@OneToMany(mappedBy=...)</literal>.</para>
-
-            <programlisting>@Entity
-public class Troop {
-    @OneToMany(mappedBy="troop")
-    public Set&lt;Soldier&gt; getSoldiers() {
-    ...
-}
-
- at Entity
-public class Soldier {
-    @ManyToOne
-    @JoinColumn(name="troop_fk")
-    public Troop getTroop() {
-    ...
-}              </programlisting>
-
-            <para><classname>Troop</classname> a une relation bidirectionnelle
-            un à plusieurs avec <literal>Soldier</literal> à travers la
-            propriété <literal>troop</literal>. Vous ne devez pas définir
-            de mapping physique à l'extrémité de
-            <literal>mappedBy</literal>.</para>
-
-            <para>Pour mapper une relation bidirectionnelle un à plusieurs, avec
-            l'extrémité one-to-many comme extrémité propriétaire, vous devez
-            enlever l'élément <literal>mappedBy</literal> et marquer
-            l'annotation <literal>@JoinColumn</literal> de l'extrémité plusieurs
-            à un comme ne pouvant pas être insérée et ni mise à jour. Cette
-            solution n'est certainement pas optimisée et produira quelques
-            commandes UPDATE supplémentaires.</para>
-
-            <programlisting>@Entity
-public class Troop {
-    @OneToMany
-    @JoinColumn(name="troop_fk") // nous avons besoin de dupliquer l'information physique
-    public Set&lt;Soldier&gt; getSoldiers() {
-    ...
-}
-
- at Entity
-public class Soldier {
-    @ManyToOne
-    @JoinColumn(name="troop_fk", insertable=false, updatable=false)
-    public Troop getTroop() {
-    ...
-}</programlisting>
-          </sect5>
-
-          <sect5>
-            <title>Relation unidirectionnelle</title>
-
-            <para>Une relation un à plusieurs unidirectionnelle utilisant une
-            colonne de clef étrangère de l'entité propriétaire n'est pas si
-            commune, réellement recommandée. Nous vous conseillons
-            fortement d'utiliser une table de jointure pour cette sorte
-            d'association (comme expliqué dans la prochaine section). Cette
-            sorte d'association est décrite à travers
-            <literal>@JoinColumn</literal>.</para>
-
-            <programlisting>
- at Entity
-public class Customer implements Serializable {
-    @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
-    @JoinColumn(name="CUST_ID")
-    public Set&lt;Ticket&gt; getTickets() {
-    ...
-}
-
- at Entity
-public class Ticket implements Serializable {
-    ... // pas de relation bidirectionnelle
-}
-               </programlisting>
-
-            <para><literal>Customer</literal> décrit une relation
-            unidirectionnelle avec <literal>Ticket</literal> en utilisant la
-            colonne de jointure <literal>CUST_ID</literal>.</para>
-          </sect5>
-
-          <sect5>
-            <title>Relation unidirectionnel avec une table de jointure</title>
-
-            <para>Une relation unidirectionnelle un à plusieurs avec une table
-            de jointure est largement préférée. Cette association est décrite
-            à travers l'annotation <literal>@JoinTable</literal>.</para>
-
-            <programlisting>
- at Entity
-public class Trainer {
-    @OneToMany
-    @JoinTable(
-            name="TrainedMonkeys",
-            joinColumns = { @JoinColumn( name="trainer_id") },
-            inverseJoinColumns = @JoinColumn( name="monkey_id")
-    )
-    public Set&lt;Monkey&gt; getTrainedMonkeys() {
-    ...
-}
-
- at Entity
-public class Monkey {
-    ... // pas de relation bidirectionnelle
-}
-               </programlisting>
-
-            <para><literal>Trainer</literal> décrit une relation
-            unidirectionelle avec <classname>Monkey</classname> en utilisant la
-            table de jointure <classname>TrainedMonkeys</classname>, avec une
-            clef étrangère <literal>trainer_id</literal> vers
-            <literal>Trainer</literal> (<literal>joinColumns</literal>) et une
-            clef étrangère <literal>monkey_id</literal> vers
-            <literal>Monkey</literal>
-            (<literal>inversejoinColumns</literal>).</para>
-          </sect5>
-
-          <sect5 id="entity-mapping-association-collection-manytomany-default"
-                 revision="1">
-            <title>Valeurs par défaut</title>
-
-            <para>Si aucun mapping physique n'est déclaré, une relation
-            unidirectionnelle un vers plusieurs utilise une table de jointure.
-            Le nom de la table est la concaténation du nom de la table
-            propriétaire, <keycap>_</keycap>, et le nom de la table de l'autre
-            extrémité. Le nom des colonnes de la clef étrangère référençant la
-            table propriétaire est la concaténation de la table propriétaire,
-            <keycap>_</keycap>, et le nom des colonnes de la clef primaire. Le
-            nom des colonnes de la clef étrangère référençant l'autre extrémité
-            est la concaténation du nom de la propriété du propriétaire,
-            <keycap>_</keycap>, et le nom des colonnes de la clef primaire de
-            l'autre extrémité. Une contrainte d'unicité est ajoutée sur la
-            clef étrangère référençant la table de l'autre extrémité pour
-            réfléter le un à plusieurs.</para>
-
-            <programlisting>
- at Entity
-public class Trainer {
-    @OneToMany
-    public Set&lt;Tiger&gt; getTrainedTigers() {
-    ...
-}
-
- at Entity
-public class Tiger {
-    ... // non bidirectionnelle
-}
-               </programlisting>
-
-            <para><classname>Trainer</classname> décrit une relation
-            unidirectionnelle avec <classname>Tiger</classname> utilisant la
-            table de jointure <literal>Trainer_Tiger</literal>, avec une clef
-            étrangère <literal>trainer_id</literal> vers
-            <literal>Trainer</literal> (nom de la table, <keycap>_</keycap>,
-            identifiant de trainer) et une clef étrangère
-            <literal>trainedTigers_id</literal> vers <literal>Monkey</literal>
-            (nom de la propriété, <keycap>_</keycap>, colonne de la clef
-            primaire de Tiger).</para>
-          </sect5>
-        </sect4>
-
-        <sect4 id="eentity-mapping-association-collection-manytomany"
-               revision="">
-          <title>Many-to-many</title>
-
-          <sect5>
-            <title>Définition</title>
-
-            <para>Une association many-to-many est définie logiquement en
-            utilisant l'annotation <literal>@ManyToMany</literal>. Vous devez
-            aussi décrire la table d'association et les conditions de jointure
-            en utilisant l'annotation <literal>@JoinTable</literal>. Si
-            l'association est bidirectionnelle, une extrémité doit être la
-            propriétaire et l'autre doit être marquée comme "inverse" (ie
-            qu'elle sera ignorée lors de la mise à jour des valeurs de la
-            relation dans la table d'association) :</para>
-
-            <programlisting>
- at Entity
-public class Employer implements Serializable {
-    @ManyToMany(
-        targetEntity=org.hibernate.test.metadata.manytomany.Employee.class,
-        cascade={CascadeType.PERSIST, CascadeType.MERGE}
-    )
-    @JoinTable(
-        name="EMPLOYER_EMPLOYEE",
-        joinColumns={@JoinColumn(name="EMPER_ID")},
-        inverseJoinColumns={@JoinColumn(name="EMPEE_ID")}
-    )
-    public Collection getEmployees() {
-        return employees;
-    }
-    ...
-}
-               </programlisting>
-
-            <programlisting>
- at Entity
-public class Employee implements Serializable {
-    @ManyToMany(
-        cascade={CascadeType.PERSIST, CascadeType.MERGE},
-        mappedBy="employees"
-        targetEntity=Employer.class
-    )
-    public Collection getEmployers() {
-        return employers;
-    }
-}
-               </programlisting>
-
-            <para>Nous avons déjà montré les déclarations des relations
-            "many" et détaillé les attributs de ces associations. Allons
-            plus en profondeur dans la description de
-            <literal>@JoinTable</literal> ; elle définit un
-            <literal>name</literal>, un tableau de colonnes de jointure (un
-            tableau dans une annotation est défini par {A, B, C}), et un tableau
-            de colonnes de jointure inverse. Ces dernières sont les colonnes
-            de la table d'association qui référencent la clef primaire de
-            <classname>Employee</classname> ("l'autre extrémité").</para>
-
-            <para>Comme vu précédemment, l'autre extrémité ne doit pas décrire
-            le mapping physique : un simple argument
-            <literal>mappedBy</literal> contenant le nom de la propriété de
-            l'extrémité propriétaire suffit à relier les deux.</para>
-          </sect5>
-
-          <sect5>
-            <title>Valeurs par défaut</title>
-
-            <para>Comme d'autres annotations, la plupart des valeurs d'une
-            relation plusieurs à plusieurs sont inférées. Si aucun mapping
-            physique n'est décrit dans une relation plusieurs à plusieurs
-            unidirectionnelle, alors les règles suivantes s'appliquent. Le nom
-            de la table est la concaténation du nom de la table propriétaire,
-            <keycap>_</keycap> et le nom de la table de l'autre extrémité. Le
-            nom des colonnes de la clef étrangère référençant la table
-            propriétaire est la concaténation du nom de la table propriétaire,
-            <keycap>_</keycap> et le nom des colonnes de la clef primaire
-            de cette table. Le nom des colonnes de la clef étrangère référençant
-            l'autre extrémité est la concaténation du nom de la propriété du
-            propriétaire, <keycap>_</keycap> et le nom des colonnes de la
-            clef primaire de l'autre extrémité. Ce sont les mêmes règles que
-            celles utilisées pour une relation un à plusieurs
-            unidirectionnelle.</para>
-
-            <programlisting>
- at Entity
-public class Store {
-    @ManyToMany(cascade = CascadeType.PERSIST)
-    public Set&lt;City&gt; getImplantedIn() {
-        ...
-    }
-}
-
- at Entity
-public class City {
-    ... // pas de relation bidirectionnelle
-}
-               </programlisting>
-
-            <para>La table <literal>Store_City</literal> est utilisée comme
-            table de jointure. La colonne <literal>Store_id</literal> est
-            une clef étrangère vers la table <literal>Store</literal>. La
-            colonne <literal>implantedIn_id</literal> est une clef étrangère
-            vers la table <literal>City</literal>.</para>
-
-            <para>Si aucun mapping physique n'est décrit dans une relation
-            plusieurs à plusieurs bidirectionnelle, alors les règles suivantes
-            s'appliquent. Le nom de la table est la concaténation du nom de la
-            table propriétaire, <keycap>_</keycap> et le nom de la table de
-            l'autre extrémité. Le nom des colonnes de la clef étrangère
-            référençant la table propriétaire est la concaténation du nom de la
-            propriété de l'autre extrémité, <keycap>_</keycap> et le nom des
-            colonnes de la clef primaire du propriétaire. Le nom des colonnes de
-            la clef étrangère référençant l'autre extrémité est la concaténation
-            du nom de la propriété du propriétaire, <keycap>_</keycap> et le nom
-            des colonnes de la clef primaire de l'autre extrémité. Ce sont les
-            mêmes règles que celles utilisées pour une relation un à plusieurs
-            unidirectionnelle.</para>
-
-            <programlisting>
- at Entity
-public class Store {
-    @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
-    public Set&lt;Customer&gt; getCustomers() {
-        ...
-    }
-}
-
- at Entity
-public class Customer {
-    @ManyToMany(mappedBy="customers")
-    public Set&lt;Store&gt; getStores() {
-        ...
-    }
-}
-               </programlisting>
-
-            <para>La table <literal>Store_Customer</literal> est utilisée comme
-            table de jointure. La colonne <literal>stores_id</literal> est une
-            clef étrangère vers la table <literal>Store</literal>. La colonne
-            <literal>customers_id</literal> est une clef étrangère vers la table
-            <literal>Customer</literal>.</para>
-          </sect5>
-        </sect4>
-      </sect3>
-
-      <sect3>
-        <title>Persistance transitive avec les opérations en cascade</title>
-
-        <para>Vous avez probablement remarqué l'attribut
-        <literal>cascade</literal> prenant comme valeur un tableau de
-        <classname>CascadeType</classname>s. Le concept de cascade dans EJB3 est
-        similaire à la persistance transitive et les opérations en cascade dans
-        Hibernate, mais avec une sémantique légèrement différente et les types
-        de cascade suivants :</para>
-
-        <itemizedlist>
-          <listitem>
-             CascadeType.PERSIST : effectue en cascade l'opération de
-             persistance (création) sur les entités associées si persist() est
-             appelée ou si l'entité est supervisée (par le gestionnaire
-             d'entités)
-          </listitem>
-
-          <listitem>
-             CascadeType.MERGE : effectue en cascade l'opération de fusion sur
-             les entités associées si merge() est appélée ou si l'entité est
-             supervisée
-          </listitem>
-
-          <listitem>
-             CascadeType.REMOVE : effectue en cascade l'opération de
-             suppression sur les entités associées si delete() est appelée
-          </listitem>
-
-          <listitem>
-             CascadeType.REFRESH : effectue en cascade l'opération de
-             rafraîchissement sur les entités associées si refresh() est appelée
-          </listitem>
-
-          <listitem>
-             CascadeType.ALL : tous ceux du dessus
-          </listitem>
-        </itemizedlist>
-
-        <para>Veullez vous référer au chapitre 6.3 de la spécification EJB3 pour
-        plus d'informations sur les opérations en cascade et la sémantique des
-        opérations de création/fusion.</para>
-      </sect3>
-
-      <sect3>
-        <title>Récupération d'associations</title>
-
-        <para>Vous avez la possibilité de récupérer les entités associées soit
-        immédiatement ("eager"), soit à la demande ("lazy"). Le paramètre
-        <literal>fetch</literal> peut être positionné à
-        <literal>FetchType.LAZY</literal> ou à
-        <literal>FetchType.EAGER</literal>. <literal>EAGER</literal> essaiera
-        d'utiliser une jointure externe pour rappatrier l'objet associé,
-        alors que <literal>LAZY</literal> est la valeur par défaut et rapportera
-        les données lorsque l'objet associé sera accédé pour la première fois.
-        JPA-QL a aussi un mot clef <literal>fetch</literal> qui vous permet de
-        surcharger le type de récupération pour une requête particulière. C'est
-        très utile pour améliorer les performances et décider au cas par
-        cas.</para>
-      </sect3>
-    </sect2>
-
-    <sect2>
-      <title>Mapper des clefs primaires et étrangères composées</title>
-
-      <para>Les clefs primaires composées utilisent une classe embarquée comme
-      représentation de la clef primaire, donc vous devriez utiliser les
-      annotations <literal>@Id</literal> et <literal>@Embeddable</literal>.
-      Alternativement, vous pouvez utiliser l'annotation
-      <literal>@EmbeddedId</literal>. Notez que la classe dépendante doit être
-      sérialisable et implementer
-      <methodname>equals()</methodname>/<methodname>hashCode()</methodname>.
-      Vous pouvez aussi utiliser <literal>@IdClass</literal> comme décrit dans
-      <xref linkend="entity-mapping-identifier" />.</para>
-
-      <programlisting>
- at Entity
-public class RegionalArticle implements Serializable {
-
-    @Id
-    public RegionalArticlePk getPk() { ... }
-}
-
- at Embeddable
-public class RegionalArticlePk implements Serializable { ... }
-         </programlisting>
-
-      <para>ou alternativement</para>
-
-      <programlisting>
- at Entity
-public class RegionalArticle implements Serializable {
-
-    @EmbeddedId
-    public RegionalArticlePk getPk() { ... }
-}
-
-public class RegionalArticlePk implements Serializable { ... }
-         </programlisting>
-
-      <para><literal>@Embeddable</literal> hérite le type d'accès de son entité
-      d'appartenance à moins que l'annotation spécifique Hibernate
-      <literal>@AccessType</literal> soit utilisée. Les clefs étrangères
-      composées (si les valeurs par défaut ne sont pas utilisées) sont définies
-      sur les associations en utilisant l'élément
-      <literal>@JoinColumns</literal>, lequel est simplement un tableau de
-      <literal>@JoinColumn</literal>s. Il est considéré comme une bonne pratique
-      d'exprimer <literal>referencedColumnNames</literal> explicitement. Sinon,
-      Hibernate supposera que vous utilisez le même ordre de colonnes que dans
-      la déclaration de la clef primaire.</para>
-
-      <programlisting>
- at Entity
-public class Parent implements Serializable {
-    @Id
-    public ParentPk id;
-    public int age;
-
-    @OneToMany(cascade=CascadeType.ALL)
-    @JoinColumns ({
-        @JoinColumn(name="parentCivility", referencedColumnName = "isMale"),
-        @JoinColumn(name="parentLastName", referencedColumnName = "lastName"),
-        @JoinColumn(name="parentFirstName", referencedColumnName = "firstName")
-    })
-    public Set&lt;Child&gt; children; //unidirectionnelle
-    ...
-}
-         </programlisting>
-
-      <programlisting>
- at Entity
-public class Child implements Serializable {
-    @Id @GeneratedValue
-    public Integer id;
-
-    @ManyToOne
-    @JoinColumns ({
-        @JoinColumn(name="parentCivility", referencedColumnName = "isMale"),
-        @JoinColumn(name="parentLastName", referencedColumnName = "lastName"),
-        @JoinColumn(name="parentFirstName", referencedColumnName = "firstName")
-    })
-    public Parent parent; // unidirectionnelle
-}
-         </programlisting>
-
-      <programlisting>
- at Embeddable
-public class ParentPk implements Serializable {
-    String firstName;
-    String lastName;
-    ...
-}
-         </programlisting>
-
-      <para>Notez l'usage explicite de
-      <literal>referencedColumnName</literal>.</para>
-    </sect2>
-
-    <sect2>
-      <title>Mapper des tables secondaires</title>
-
-      <para>Vous pouvez mapper un simple entity bean vers plusieurs tables en
-      utilisant les annotations de niveau classe
-      <literal>@SecondaryTable</literal> ou
-      <literal>@SecondaryTables</literal>. Pour dire qu'une colonne est dans
-      une table particulière, utlisez le paramètre <literal>table</literal> de
-      <literal>@Column</literal> ou <literal>@JoinColumn</literal>.</para>
-
-      <programlisting>
- at Entity
- at Table(name="MainCat")
-<emphasis role="bold">@SecondaryTables({
-    @SecondaryTable(name="Cat1", pkJoinColumns={
-        @PrimaryKeyJoinColumn(name="cat_id", referencedColumnName="id")
-    ),
-    @SecondaryTable(name="Cat2", uniqueConstraints={@UniqueConstraint(columnNames={"storyPart2"})})
-})</emphasis>
-public class Cat implements Serializable {
-
-    private Integer id;
-    private String name;
-    private String storyPart1;
-    private String storyPart2;
-
-    @Id @GeneratedValue
-    public Integer getId() {
-        return id;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    <emphasis role="bold">@Column(table="Cat1")</emphasis>
-    public String getStoryPart1() {
-        return storyPart1;
-    }
-
-    <emphasis role="bold">@Column(table="Cat2")</emphasis>
-    public String getStoryPart2() {
-        return storyPart2;
-    }
-</programlisting>
-
-      <para>Dans cet exemple, <literal>name</literal> sera dans
-      <literal>MainCat</literal>. <literal>storyPart1</literal> sera dans
-      <literal>Cat1</literal> et <literal>storyPart2</literal> sera dans
-      <literal>Cat2</literal>. <literal>Cat1</literal> sera joint à
-      <literal>MainCat</literal> avec <literal>cat_id</literal> comme clef
-      étrangère, et <literal>Cat2</literal> avec <literal>id</literal> (ie
-      le même nom de colonne que la colonne identifiante de
-      <literal>MainCat</literal>). De plus, une contrainte d'unicité sur
-      <literal>storyPart2</literal> a été renseignée.</para>
-
-      <para>Regardez le tutoriel EJB3 de JBoss ou la suite de tests
-      unitaires d'Hibernate Annotations pour plus d'exemples.</para>
-    </sect2>
-  </sect1>
-
-  <sect1 id="entity-mapping-query">
-    <title>Mapper des requêtes</title>
-
-    <sect2 id="entity-mapping-query-hql"
-           revision="1">
-      <title>Mapper des requêtes JPAQL/HQL</title>
-
-      <para>Vous pouvez mapper des requêtes JPA-QL/HQL en utilisant les
-      annotations. <literal>@NamedQuery</literal> et
-      <literal>@NamedQueries</literal> peuvent être définies au niveau de la
-      classe ou dans un fichier JPA XML. Cependant, leurs définitions sont
-      globales au scope de la session factory/entity manager factory. Une
-      requête nommée est définie par son nom et la chaîne de caractères de la
-      requête réelle.</para>
-
-      <programlisting>&lt;entity-mappings&gt;
-    &lt;named-query name="plane.getAll"&gt;
-        &lt;query&gt;select p from Plane p&lt;/query&gt;
-    &lt;/named-query&gt;
-    ...
-&lt;/entity-mappings&gt;
-...
-
- at Entity
- at NamedQuery(name="night.moreRecentThan", query="select n from Night n where n.date &gt;= :date")
-public class Night {
-    ...
-}
-
-public class MyDao {
-    doStuff() {
-        Query q = s.getNamedQuery("night.moreRecentThan");
-        q.setDate( "date", aMonthAgo );
-        List results = q.list();
-        ...
-    }
-    ...
-}
-        </programlisting>
-
-      <para>Vous pouvez aussi fournir des indications de fonctionnement à une
-      requête à travers un tableau de <literal>QueryHint</literal>s avec
-      l'attribut <literal>hints</literal>.</para>
-
-      <para>Les indications de fonctionnement Hibernate disponibles
-      sont :</para>
-
-      <para></para>
-
-      <table>
-        <title>Indications de fonctionnement d'une requête</title>
-
-        <tgroup cols="2">
-          <thead>
-            <colspec colname="c1" />
-
-            <colspec colname="c2" colnum="2" />
-
-            <row>
-              <entry>Indication</entry>
-
-              <entry colname="c2">description</entry>
-            </row>
-          </thead>
-
-          <tbody>
-            <row>
-              <entry>org.hibernate.cacheable</entry>
-
-              <entry>Indique si la requête devrait interagir avec le cache de
-              second niveau (par défaut à false)</entry>
-            </row>
-
-            <row>
-              <entry>org.hibernate.cacheRegion</entry>
-
-              <entry>Nom de la région du cache (si indéfinie, la valeur par
-              défaut est utilisée)</entry>
-            </row>
-
-            <row>
-              <entry>org.hibernate.timeout</entry>
-
-              <entry>Timeout des requêtes</entry>
-            </row>
-
-            <row>
-              <entry>org.hibernate.fetchSize</entry>
-
-              <entry>Taille des result sets par fetch</entry>
-            </row>
-
-            <row>
-              <entry>org.hibernate.flushMode</entry>
-
-              <entry>Mode de flush utilisé pour cette requête</entry>
-            </row>
-
-            <row>
-              <entry>org.hibernate.cacheMode</entry>
-
-              <entry>Mode de cache utilisé pour cette requête</entry>
-            </row>
-
-            <row>
-              <entry>org.hibernate.readOnly</entry>
-
-              <entry>Indique si les entités chargées par cette requête devraient
-              être en lecture seule ou pas (par défaut à false)</entry>
-            </row>
-
-            <row>
-              <entry>org.hibernate.comment</entry>
-
-              <entry>Commentaire de la requête, ajouté au SQL généré</entry>
-            </row>
-          </tbody>
-        </tgroup>
-      </table>
-    </sect2>
-
-    <sect2 id="entity-mapping-query-native" revision="2">
-      <title>Mapper des requêtes natives</title>
-
-      <para>Vous pouvez aussi mapper une requête native (ie une requête SQL).
-      Pour ce faire, vous devez décrire la structure de l'ensemble de résultat
-      SQL en utilisant <literal>@SqlResultSetMapping</literal> (ou
-      <literal>@SqlResultSetMappings</literal> si vous prévoyez de définir
-      plusieurs mappings de résultats). Comme <literal>@NamedQuery</literal>, un
-      <literal>@SqlResultSetMapping</literal> peut être défini au niveau de la
-      classe ou dans un fichier XML JPA. Cependant sa portée est globale à
-      l'application.</para>
-
-      <para>Comme vous le verrez, un paramètre de
-      <literal>resultSetMapping</literal> est défini dans
-      <literal>@NamedNativeQuery</literal>, il représente le nom du
-      <literal>@SqlResultSetMapping</literal> défini. Le mapping de l'ensemble
-      des résultats déclare les entités récupérées par cette requête native.
-      Chaque champ de l'entité est lié à un alias SQL (nom de colonne). Tous les
-      champs de l'entité (dont ceux des classes filles) et les colonnes des
-      clefs étrangères relatives aux entités doivent être présents dans la
-      requête SQL. Les définitions des champs sont optionnelles, si elles ne
-      sont pas fournies, elles mappent le même nom de colonne que celui déclaré
-      sur la propriété de la classe.</para>
-
-      <para><programlisting>@NamedNativeQuery(name="night&amp;area", query="select night.id nid, night.night_duration, "
-    + " night.night_date, area.id aid, night.area_id, area.name "
-    + "from Night night, Area area where night.area_id = area.id", <emphasis
-            role="bold">resultSetMapping="joinMapping"</emphasis>)
- at SqlResultSetMapping(name="joinMapping", entities={
-    @EntityResult(entityClass=org.hibernate.test.annotations.query.Night.class, fields = {
-        @FieldResult(name="id", column="nid"),
-        @FieldResult(name="duration", column="night_duration"),
-        @FieldResult(name="date", column="night_date"),
-        @FieldResult(name="area", column="area_id"),
-        discriminatorColumn="disc"
-    }),
-    @EntityResult(entityClass=org.hibernate.test.annotations.query.Area.class, fields = {
-        @FieldResult(name="id", column="aid"),
-        @FieldResult(name="name", column="name")
-    })
-    }
-)</programlisting></para>
-
-      <para>Dans l'exemple ci-dessus, la requête nommée
-      <literal>night&amp;area</literal> utilise le mapping de résultats
-      <literal>joinMapping</literal>. Ce mapping retourne 2 entités,
-      <literal>Night</literal> et <literal>Area</literal>, chaque propriété est
-      déclarée et associée à un nom de colonne, en fait le nom de colonne
-      récupéré par la requête. Voyons maintenant une déclaration implicite de
-      mapping propriété/colonne.</para>
-
-      <programlisting>@Entity
-<emphasis role="bold">@SqlResultSetMapping(name="implicit", entities=@EntityResult(entityClass=org.hibernate.test.annotations.query.SpaceShip.class))
- at NamedNativeQuery(name="implicitSample", query="select * from SpaceShip", resultSetMapping="implicit")</emphasis>
-public class SpaceShip {
-    private String name;
-    private String model;
-    private double speed;
-
-    @Id
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    @Column(name="model_txt")
-    public String getModel() {
-        return model;
-    }
-
-    public void setModel(String model) {
-        this.model = model;
-    }
-
-    public double getSpeed() {
-        return speed;
-    }
-
-    public void setSpeed(double speed) {
-        this.speed = speed;
-    }
-}</programlisting>
-
-      <para>Dans cet exemple, nous décrivons seulement le membre de l'entité du
-      mapping de résultats. Le mapping de propriété/colonne est fait en
-      utilisant les valeurs de mapping de l'entité. Dans ce cas, la propriété
-      <literal>model</literal> est liée à la colonne
-      <literal>model_txt</literal>. Si l'association à une entité concernée
-      implique une clef primaire composée, un élément
-      <literal>@FieldResult</literal> devrait être utilisé pour chaque colonne
-      de la clef étrangère. Le nom de <literal>@FieldResult</literal> est
-      composé du nom de la propriété pour la relation, suivi par un point ("."),
-      suivi par le nom ou le champ ou la propriété de la clef primaire.</para>
-
-      <programlisting>@Entity
- at SqlResultSetMapping(name="compositekey",
-        entities=@EntityResult(entityClass=org.hibernate.test.annotations.query.SpaceShip.class,
-            fields = {
-                    @FieldResult(name="name", column = "name"),
-                    @FieldResult(name="model", column = "model"),
-                    @FieldResult(name="speed", column = "speed"),
-<emphasis role="bold">                    @FieldResult(name="captain.firstname", column = "firstn"),
-                    @FieldResult(name="captain.lastname", column = "lastn"),</emphasis>
-                    @FieldResult(name="dimensions.length", column = "length"),
-                    @FieldResult(name="dimensions.width", column = "width")
-                    }),
-        columns = { @ColumnResult(name = "surface"),
-                    @ColumnResult(name = "volume") } )
-
- at NamedNativeQuery(name="compositekey",
-    query="select name, model, speed, lname as lastn, fname as firstn, length, width, length * width as surface from SpaceShip",
-    resultSetMapping="compositekey")
-} )
-public class SpaceShip {
-    private String name;
-    private String model;
-    private double speed;
-    private Captain captain;
-    private Dimensions dimensions;
-
-    @Id
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    @ManyToOne(fetch= FetchType.LAZY)
-    @JoinColumns( {
-            @JoinColumn(name="fname", referencedColumnName = "firstname"),
-            @JoinColumn(name="lname", referencedColumnName = "lastname")
-            } )
-    public Captain getCaptain() {
-        return captain;
-    }
-
-    public void setCaptain(Captain captain) {
-        this.captain = captain;
-    }
-
-    public String getModel() {
-        return model;
-    }
-
-    public void setModel(String model) {
-        this.model = model;
-    }
-
-    public double getSpeed() {
-        return speed;
-    }
-
-    public void setSpeed(double speed) {
-        this.speed = speed;
-    }
-
-    public Dimensions getDimensions() {
-        return dimensions;
-    }
-
-    public void setDimensions(Dimensions dimensions) {
-        this.dimensions = dimensions;
-    }
-}
-
- at Entity
- at IdClass(Identity.class)
-public class Captain implements Serializable {
-    private String firstname;
-    private String lastname;
-
-    @Id
-    public String getFirstname() {
-        return firstname;
-    }
-
-    public void setFirstname(String firstname) {
-        this.firstname = firstname;
-    }
-
-    @Id
-    public String getLastname() {
-        return lastname;
-    }
-
-    public void setLastname(String lastname) {
-        this.lastname = lastname;
-    }
-}
-</programlisting>
-
-      <note>
-        <para>Si vous regardez la propriété dimension, vous verrez qu'Hibernate
-        prend en charge la notation avec les points pour les objets embarqués
-        (vous pouvez même avoir des objets embarqués imbriqués). Les
-        implémentations EJB3 n'ont pas à prendre en charge cette fonctionnalité,
-        mais nous le faisons :-)</para>
-      </note>
-
-      <para>Si vous récupérez une simple entité et si vous utilisez le mapping
-      par défaut, vous pouvez utiliser l'attribut <literal>resultClass</literal>
-      à la place de <literal>resultSetMapping</literal> :</para>
-
-      <programlisting><emphasis role="bold">@NamedNativeQuery(name="implicitSample", query="select * from SpaceShip",
-    resultClass=SpaceShip.class)</emphasis>
-public class SpaceShip {</programlisting>
-
-      <para>Dans certaines de vos requêtes natives, vous devrez retourner des
-      valeurs scalaires, par exemple lors de la construction de requêtes de
-      rapport. Vous pouvez les mapper dans
-      <literal>@SqlResultsetMapping</literal> avec
-      <literal>@ColumnResult</literal>. En fait, vous pouvez même mélanger des
-      retours d'entités et de valeurs scalaires dans la même requête native (ce
-      n'est cependant probablement pas commun).</para>
-
-      <programlisting><emphasis role="bold">@SqlResultSetMapping(name="scalar", columns=@ColumnResult(name="dimension"))
- at NamedNativeQuery(name="scalar", query="select length*width as dimension from SpaceShip", resultSetMapping="scalar")</emphasis></programlisting>
-
-      <para>Une autre indication de fonctionnement spécifique aux requêtes
-      natives a été présentée : <literal>org.hibernate.callable</literal>
-      laquelle peut être à true ou à false fausse selon que la requête est une
-      procédure stockée ou pas.</para>
-    </sect2>
-  </sect1>
-
-  <sect1 id="entity-hibspec" xreflabel="Extensions d'Hibernate Annotation">
-    <title>Extensions d'Hibernate Annotation</title>
-
-    <para>Hibernate 3.1 offre une variété d'annotations supplémentaires que vous
-    pouvez mélanger/faire correspondre avec des entités EJB3. Elles ont été
-    conçues comme une extension naturelle aux annotations EJB3.</para>
-
-    <para>Pour aller plus loin que les capacités d'EJB3, Hibernate fournit des
-    annotations spécifiques qui correspondent aux fonctionnalités d'Hibernate.
-    Le package <classname>org.hibernate.annotations</classname> contient toutes
-    ces extensions d'annotations.</para>
-
-    <sect2 id="entity-hibspec-entity" revision="2">
-      <title>Entité</title>
-
-      <para>Vous pouvez finement paramétrer certaines des actions faites par
-      Hibernate sur les entités au-delà de ce qu'offre la spécification
-      EJB3.</para>
-
-      <para><classname>@org.hibernate.annotations.Entity</classname> ajoute des
-      méta-données supplémentaires qui peuvent être nécessaires au-delà de ce
-      qui est défini dans l'annotation <literal>@Entity</literal>
-      standard :<itemizedlist>
-          <listitem>
-             mutable : indique si l'entité est modifiable ou non
-          </listitem>
-
-          <listitem>
-             dynamicInsert : autorise le SQL dynamique pour les insertions
-          </listitem>
-
-          <listitem>
-             dynamicUpdate : autorise le SQL dynamique pour les mise à jour
-          </listitem>
-
-          <listitem>
-             selectBeforeUpdate : spécifie qu'Hibernate ne devrait jamais
-             exécuter un UPDATE SQL à moins qu'il ne soit certain qu'un objet
-             est réellement modifié
-          </listitem>
-
-          <listitem>
-             polymorphism : indique si le polymorphisme d'entité est de type
-             PolymorphismType.IMPLICIT (valeur par défaut) ou
-             PolymorphismType.EXPLICIT
-          </listitem>
-
-          <listitem>
-             persister : autorise la surcharge de l'implémentation de
-             persistance fournie par défaut
-          </listitem>
-
-          <listitem>
-             optimisticLock : stratégie de verrouillage optmiste
-             (OptimisticLockType.VERSION,
-             OptimisticLockType.NONE, OptimisticLockType.DIRTY ou
-             OptimisticLockType.ALL)
-          </listitem>
-        </itemizedlist></para>
-
-      <para><note>
-          <para>@javax.persistence.Entity est encore obligatoire,
-          @org.hibernate.annotations.Entity ne la remplace pas.</para>
-        </note></para>
-
-      <para>Voici quelques extensions d'annotations Hibernate
-      supplémentaires.</para>
-
-      <para><literal>@org.hibernate.annotations.BatchSize</literal> vous permet
-      de définir la taille du batch lors de la récupération d'instances de
-      cette entité (p. ex. <literal>@BatchSize(size=4)</literal>). Lors du
-      chargement d'une entité donnée, Hibernate chargera alors toutes les
-      entités non initialisées du même type dans le contexte de la persistance
-      jusqu'à la taille du batch.</para>
-
-      <para><literal>@org.hibernate.annotations.Proxy</literal> définit les
-      attributs de chargement de l'entité. lazy (valeur par défaut) définit si
-      la classe est chargée à la demande ou non. proxyClassName est l'interface
-      utilisée pour générer le proxy (par défaut, la classe elle-même).</para>
-
-      <para><literal>@org.hibernate.annotations.Where</literal> définit une
-      clause WHERE SQL optionnelle utilisée lorsque des instances de cette
-      classe sont récupérées.</para>
-
-      <para><literal>@org.hibernate.annotations.Check</literal> déclare une
-      contrainte de vérification optionnelle définie dans l'expression
-      DDL.</para>
-
-      <para><literal>@OnDelete(action=OnDeleteAction.CASCADE)</literal> sur des
-      classes filles jointes : utilise une commande SQL DELETE en cascade lors
-      de la suppression plutôt que le mécanisme habituel d'Hibernate.</para>
-
-      <para><literal>@Table(appliesTo="tableName", indexes = {
-      @Index(name="index1", columnNames={"column1", "column2"} ) } )</literal>
-      crée les index définis sur les colonnes de la table
-      <literal>tableName</literal>. Cela peut s'appliquer sur une table primaire
-      ou une table secondaire. L'annotation <literal>@Tables</literal> vous
-      permet d'avoir des index sur des tables différentes. Cette annotation est
-      attendue là où <literal>@javax.persistence.Table</literal> ou
-      <literal>@javax.persistence.SecondaryTable</literal>(s) sont
-      déclarées.</para>
-
-      <note>
-        <para><literal>@org.hibernate.annotations.Table</literal> est un
-        complément, pas un remplacement de
-        <literal>@javax.persistence.Table</literal>. Surtout, si vous souhaitez
-        changer le nom par défaut d'une table, vous devez utiliser
-        <literal>@javax.persistence.Table</literal>, pas
-        <literal>@org.hibernate.annotations.Table</literal>.</para>
-      </note>
-
-      <para><programlisting>@Entity
- at BatchSize(size=5)
- at org.hibernate.annotations.Entity(
-        selectBeforeUpdate = true,
-        dynamicInsert = true, dynamicUpdate = true,
-        optimisticLock = OptimisticLockType.ALL,
-        polymorphism = PolymorphismType.EXPLICIT)
- at Where(clause="1=1")
- at org.hibernate.annotations.Table(name="Forest", indexes = { @Index(name="idx", columnNames = { "name", "length" } ) } )
-public class Forest { ... }</programlisting><programlisting>@Entity
- at Inheritance(
-    strategy=InheritanceType.JOINED
-)
-public class Vegetable { ... }
-
- at Entity
- at OnDelete(action=OnDeleteAction.CASCADE)
-public class Carrot extends Vegetable { ... }</programlisting></para>
-    </sect2>
-
-    <sect2 id="entity-hibspec-identifier" revision="1">
-      <title>Identifiant</title>
-
-      <para><literal>@org.hibernate.annotations.GenericGenerator</literal> vous
-      permet de définir un générateur d'identifiants Hibernate
-      spécifique.</para>
-
-      <para><programlisting>@Id @GeneratedValue(generator="system-uuid")
- at GenericGenerator(name="system-uuid", strategy = "uuid")
-public String getId() {
-
- at Id @GeneratedValue(generator="hibseq")
- at GenericGenerator(name="hibseq", strategy = "seqhilo",
-    parameters = {
-        @Parameter(name="max_lo", value = "5"),
-        @Parameter(name="sequence", value="heybabyhey")
-    }
-)
-public Integer getId() {</programlisting></para>
-
-      <para><literal>strategy</literal> est le nom court de la stratégie du
-      générateur Hibernate3 ou le nom pleinement qualifié de la classe d'une
-      implémentation de <classname>IdentifierGenerator</classname>. Vous pouvez
-      ajouter des paramètres avec l'attribut
-      <literal>parameters</literal>.</para>
-
-      <para>Contrairement à son pendant standard,
-      <literal>@GenericGenerator</literal> peut ête utilisée dans les
-      annotations au niveau du package, en faisant ainsi un générateur de niveau
-      applicatif (comme s'il était dans un fichier JPA XML).</para>
-
-      <programlisting>@GenericGenerator(name="hibseq", strategy = "seqhilo",
-    parameters = {
-        @Parameter(name="max_lo", value = "5"),
-        @Parameter(name="sequence", value="heybabyhey")
-    }
-)
-package org.hibernate.test.model</programlisting>
-    </sect2>
-
-    <sect2 id="entity-hibspec-property" revision="2">
-      <title>Propriété</title>
-
-      <sect3>
-        <title>Type d'accès</title>
-
-        <para>Le type d'accès est déduit de la position de
-        <literal>@Id</literal> ou de <literal>@EmbeddedId</literal> dans la
-        hiérarchie de l'entité. Les entités filles, les objets embarqués et les
-        entités parentes mappés héritent du type d'accès de l'entité
-        racine.</para>
-
-        <para>Dans Hibernate, vous pouvez surcharger le type d'accès
-        pour :</para>
-
-        <itemizedlist>
-          <listitem>
-            <para>utiliser une stratégie d'accès personnalisée</para>
-          </listitem>
-
-          <listitem>
-            <para>paramétrer finement le type d'accès au niveau de la classe ou
-            au niveau de la propriété</para>
-          </listitem>
-        </itemizedlist>
-
-        <para>Une annocation @AccessType a été présentée pour prendre en charge
-        ce comportement. Vous pouvez définir le type d'accès sur :</para>
-
-        <itemizedlist>
-          <listitem>
-            <para>une entité</para>
-          </listitem>
-
-          <listitem>
-            <para>une classe parente</para>
-          </listitem>
-
-          <listitem>
-            <para>un objet embarqué</para>
-          </listitem>
-
-          <listitem>
-            <para>une propriété</para>
-          </listitem>
-        </itemizedlist>
-
-        <para>Le type d'accès est surchargé pour l'élément annoté, si surchargé
-        sur une classe, toutes les propriétés de la classe donnée héritent du
-        type d'accès. Pour les entités racines, le type d'accès est considéré
-        par défaut comme celui de la hiérarchie entière (surchargeable au niveau
-        de la classe ou de la propriété).</para>
-
-        <para>Si le type d'accès est marqué comme "propriété", les getters sont
-        parcourus pour examiner les annotations, si le type d'accès est marqué
-        comme "champ", ce sont les champs qui sont parcourus pour les
-        annotations. Sinon les éléments marqués avec @Id ou @embeddedId sont
-        scannés.</para>
-
-        <para>Vous pouvez surcharger une type d'accès pour une propriété, mais
-        l'élément annoté ne sera pas influencé : par exemple, une entité ayant
-        un type d'accès <literal>field</literal>, peut annoter un champ avec
-        <literal>@AccessType("property")</literal>, le type d'accès sera alors
-        "property" pour cet attribut, des annotations devront encore être
-        portées sur les champs.</para>
-
-        <para>Si une classe parente ou un objet embarquable n'est pas annoté, le
-        type d'accès de l'entité racine est utilisé (même si un type d'accès a
-        été défini sur une classe parente ou un objet embarquable
-        intermédiaire). Le principe de la poupée russe ne s'applique pas.</para>
-
-        <programlisting>@Entity
-public class Person implements Serializable {
-    @Id  @GeneratedValue // type d'accès "champ"
-    Integer id;
-
-    @Embedded
-    @AttributeOverrides({
-    @AttributeOverride(name = "iso2", column = @Column(name = "bornIso2")),
-    @AttributeOverride(name = "name", column = @Column(name = "bornCountryName"))
-            })
-    Country bornIn;
-}
-
- at Embeddable
-<emphasis role="bold">@AccessType("property")</emphasis> // surcharge le type d'accès pour toutes les propriétés dans Country
-public class Country implements Serializable {
-    private String iso2;
-    private String name;
-
-    public String getIso2() {
-        return iso2;
-    }
-
-    public void setIso2(String iso2) {
-        this.iso2 = iso2;
-    }
-
-    @Column(name = "countryName")
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-}
-</programlisting>
-      </sect3>
-
-      <sect3>
-        <title>Formule</title>
-
-        <para>Parfois, vous voulez effectuer certains calculs par la base de
-        données plutôt que par la JVM, ou vous pourriez aussi vouloir créer une
-        sorte de colonne virtuelle. Vous pouvez utilisez un fragment SQL (alias
-        une formule) plutôt que de mapper un propriété sur une colonne. Cette
-        sorte de propriété est en lecture seule (sa valeur est calculée par
-        votre formule).</para>
-
-        <programlisting>@Formula("obj_length * obj_height * obj_width")
-public long getObjectVolume()</programlisting>
-
-        <para>Le fragment SQL peut être aussi complexe que vous le souhaitez,
-        même avec des sous-selects inclus.</para>
-      </sect3>
-
-      <sect3>
-        <title>Type</title>
-
-        <para><literal>@org.hibernate.annotations.Type</literal> surcharge le
-        type Hibernate utilisé par défaut : ce n'est généralement pas nécessaire
-        puisque le type est correctement inféré par Hibernate. Veuillez vous
-        référer au guide de référence Hibernate pour plus d'informations sur les
-        types Hibernate.</para>
-
-        <para><literal>@org.hibernate.annotations.TypeDef</literal> et
-        <literal>@org.hibernate.annotations.TypeDefs</literal> vous permettent
-        de déclarer des définitions de type. Ces annotations sont placées au
-        niveau de la classe ou du package. Notez que ces définitions seront
-        globales pour la session factory (même au niveau de la classe) et que la
-        définition du type doit être définie avant n'importe quelle
-        utilisation.</para>
-
-        <programlisting>@TypeDefs(
-    {
-    @TypeDef(
-        name="caster",
-        typeClass = CasterStringType.class,
-        parameters = {
-            @Parameter(name="cast", value="lower")
-        }
-    )
-    }
-)
-package org.hibernate.test.annotations.entity;
-
-...
-public class Forest {
-    @Type(type="caster")
-    public String getSmallText() {
-    ...
-}
-         </programlisting>
-
-        <para>Lors de l'utilisation d'un type utilisateur composé, vous devrez
-        exprimer les définitions des colonnes. L'annotation
-        <literal>@Columns</literal> a été mise en place dans ce but.</para>
-
-        <programlisting>@Type(type="org.hibernate.test.annotations.entity.MonetaryAmountUserType")
- at Columns(columns = {
-    @Column(name="r_amount"),
-    @Column(name="r_currency")
-})
-public MonetaryAmount getAmount() {
-    return amount;
-}
-
-
-public class MonetaryAmount implements Serializable {
-    private BigDecimal amount;
-    private Currency currency;
-    ...
-}</programlisting>
-      </sect3>
-
-      <sect3>
-        <title>Index</title>
-
-        <para>Vous pouvez définir un index sur une colonne particulière en
-        utilisant l'annotation <literal>@Index</literal> sur une propriété d'une
-        colonne, l'attribut columnNames sera ignoré.</para>
-
-        <programlisting>@Column(secondaryTable="Cat1")
- at Index(name="story1index")
-public String getStoryPart1() {
-    return storyPart1;
-}</programlisting>
-      </sect3>
-
-      <sect3>
-        <title>@Parent</title>
-
-        <para>A l'intérieur d'un objet embarquable, vous pouvez définir
-        une des propriétés comme un pointeur vers l'élément
-        propriétaire.</para>
-
-        <programlisting>@Entity
-public class Person {
-    @Embeddable public Address address;
-    ...
-}
-
- at Embeddable
-public class Address {
-    @Parent public Person owner;
-    ...
-}
-
-
-person == person.address.owner</programlisting>
-      </sect3>
-
-      <sect3>
-        <title>Propriétés générées</title>
-
-        <para>Certaines propriétés sont générées au moment de l'insertion ou de
-        la mise à jour par votre base de données. Hibernate peut traiter de
-        telles propriétés et déclencher un select subséquent pour lire ces
-        propriétés.</para>
-
-        <programlisting>@Entity
-public class Antenna {
-    @Id public Integer id;
-    @Generated(GenerationTime.ALWAYS) @Column(insertable = false, updatable = false)
-    public String longitude;
-
-    @Generated(GenerationTime.INSERT) @Column(insertable = false)
-    public String latitude;
-}</programlisting>
-
-        <para>Quand vous annotez votre propriété avec
-        <literal>@Generated</literal>, vous devez vous assurer que l'insertion
-        et la mise à jour n'entreront pas en conflit avec la stratégie de
-        génération que vous avez choisie. Lorsque GenerationTime.INSERT est
-        choisi, la propriété ne doit pas contenir de colonnes insérables ;
-        lorsque GenerationTime.ALWAYS est choisi, la propriété ne doit pas
-        contenir de colonnes qui puissent être insérées ou mises à jour.</para>
-
-        <para>Les propriétés <literal>@Version</literal> ne peuvent pas (par
-        conception) être <literal>@Generated(INSERT)</literal>, elles doivent
-        être <literal>NEVER</literal> ou <literal>ALWAYS</literal>.</para>
-      </sect3>
-    </sect2>
-
-    <sect2 id="entity-hibspec-inheritance" revision="1">
-      <title>Héritage</title>
-
-      <para>SINGLE_TABLE est une stratégie très puissante mais parfois, et
-      surtout pour des systèmes pré-existants, vous ne pouvez pas ajouter une
-      colonne discriminante supplémentaire. Pour cela Hibernate a mis en place
-      la notion de formule discriminante :
-      <literal>@DiscriminatorFormula</literal> est une remplaçcant de
-      <literal>@DiscriminatorColumn</literal> et utilise un fragment SQL en tant
-      que formule pour la résolution du discriminant (pas besoin d'avoir une
-      colonne dédiée).</para>
-
-      <programlisting>@Entity
- at DiscriminatorForumla("case when forest_type is null then 0 else forest_type end")
-public class Forest { ... }</programlisting>
-
-      <para>Par défaut, lors du requêtage sur les entités les plus hautes,
-      Hibernate ne met pas de restriction sur la colonne discriminante. Ceci
-      peut être un inconvénient si cette colonne contient des valeurs qui ne sont
-      pas mappées dans votre hiérarchie (avec
-      <literal>@DiscriminatorValue</literal>). Pour contourner ca, vous pouvez
-      utilser <literal>@ForceDiscriminator</literal> (au niveau de la classe,
-      à côté de <literal>@DiscriminatorColumn</literal>). Hibernate listera
-      alors les valeurs disponibles lors du chargement des entités.</para>
-    </sect2>
-
-    <sect2 id="entity-hibspec-singleassoc">
-      <title>Annotations concernant les simples associations</title>
-
-      <para>Par défaut, lorsqu'Hibernate ne peut pas résoudre l'association
-      parce que l'élément associé attendu n'est pas dans la base de données
-      (mauvais identifiant sur la colonne de l'association), une exception est
-      levée par Hibernate. Cela pourrait être un inconvénient pour des schémas
-      pré-existants et mal maintenus. Vous pouvez demander à Hibernate d'ignorer
-      de tels éléments plutôt que de lever une exception en utilisant
-      l'annotation <literal>@NotFound</literal>. Cette annotation peut être
-      utilisée sur une association <literal>@OneToOne</literal> (avec une clef
-      étrangère), <literal>@ManyToOne</literal>, <literal>@OneToMany</literal>
-      ou <literal>@ManyToMany</literal>.</para>
-
-      <programlisting>@Entity
-public class Child {
-    ...
-    @ManyToOne
-    @NotFound(action=NotFoundAction.IGNORE)
-    public Parent getParent() { ... }
-    ...
-}</programlisting>
-
-      <para>Parfois vous voulez déléguer à votre base de données la suppression
-      en cascade lorsqu'une entité donnée est supprimée.</para>
-
-      <programlisting>@Entity
-public class Child {
-    ...
-    @ManyToOne
-    @OnDelete(action=OnDeleteAction.CASCADE)
-    public Parent getParent() { ... }
-    ...
-}</programlisting>
-
-      <para>Dans ce cas, Hibernate génère une contrainte de suppression en
-      cascade au niveau de la base de données.</para>
-
-      <para>Les contraintes de clef étrangère, bien que générées par Hibernate,
-      ont un nom justement illisible. Vous pouvez surcharger le nom de la
-      contrainte par l'utilisation de <literal>@ForeignKey</literal>.</para>
-
-      <programlisting>@Entity
-public class Child {
-    ...
-    @ManyToOne
-    <emphasis role="bold">@ForeignKey(name="FK_PARENT")</emphasis>
-    public Parent getParent() { ... }
-    ...
-}
-
-alter table Child add constraint FK_PARENT foreign key (parent_id) references Parent</programlisting>
-
-      <sect3>
-        <title>Options de chargement et modes de récupération</title>
-
-        <para>EJB3 arrive avec l'option <literal>fetch</literal> pour définir
-        le chargement à la demande et les modes de récupération, cependant
-        Hibernate a beaucoup plus d'options dans ce domaine. Pour finement
-        paramétrer le chargement à la demande et les stratégies de récupération,
-        quelques annotations supplémentaires ont été mises en place :</para>
-
-        <itemizedlist>
-          <listitem>
-            <para><literal>@LazyToOne</literal> : définit l'option de chargement
-            à la demande sur les associations <literal>@ManyToOne</literal> et
-            <literal>@OneToOne</literal>. <literal>LazyToOneOption</literal>
-            peut être <literal>PROXY</literal> (ie utiliser un chargement à la
-            demande basé sur un proxy), <literal>NO_PROXY</literal> (utilise
-            un chargement à la demande sur l'ajout de bytecode - notez qu'un
-            temps de construction du bytecode est nécessaire) et
-            <literal>FALSE</literal> (association sans chargement à la
-            demande) ;</para>
-          </listitem>
-
-          <listitem>
-            <para><literal>@LazyCollection</literal> : définit l'option de
-            chargement à la demande sur les associations
-            <literal>@ManyToMany</literal> et <literal>@OneToMany</literal>.
-            LazyCollectionOption peut être <literal>TRUE</literal> (la
-            collection est chargée à la demande lorsque son état est accédé),
-            <literal>EXTRA</literal> (la collection est chargée à la demande et
-            toutes les opérations essaieront d'éviter le chargement de la
-            collection, c'est surtout utile pour de grosses collections lorsque
-            le chargement de tous les éléments n'est pas nécessaire) et
-            <literal>FALSE</literal> (association sans chargement à la
-            demande) ;</para>
-          </listitem>
-
-          <listitem>
-            <para><literal>@Fetch</literal> : définit une stratégie de
-            récupération utilisée pour charger l'association.
-            <literal>FetchMode</literal> peut être
-            <literal>SELECT</literal> (un select est déclenché lorsque
-            l'association a besoin d'être chargée), <literal>SUBSELECT</literal>
-            (disponible uniquement pour des collections, utilise une stratégie
-            de sous select - veuillez vous référer à la documentation de
-            référence d'Hibernate pour plus d'informations) ou
-            <literal>JOIN</literal> (utilise un JOIN SQL pour charger
-            l'association lors du chargement de l'entité propriétaire).
-            <literal>JOIN</literal> surcharge n'importe quel attribut de
-            chargement à la demande (une association chargée avec la stratégie
-            <literal>JOIN</literal> ne peut pas être chargée à la
-            demande).</para>
-          </listitem>
-        </itemizedlist>
-
-        <para>Les annotations Hibernate surchargent les options de récupération
-        EJB3.</para>
-
-        <table>
-          <title>Chargement à la demande et options de récupération
-          équivalentes</title>
-
-          <tgroup cols="3">
-            <thead>
-              <row>
-                <entry>Annotations</entry>
-
-                <entry>Chargement à la demande</entry>
-
-                <entry>Récupération</entry>
-              </row>
-            </thead>
-
-            <tbody>
-              <row>
-                <entry>@[One|Many]ToOne](fetch=FetchType.LAZY)</entry>
-
-                <entry>@LazyToOne(PROXY)</entry>
-
-                <entry>@Fetch(SELECT)</entry>
-              </row>
-
-              <row>
-                <entry>@[One|Many]ToOne](fetch=FetchType.EAGER)</entry>
-
-                <entry>@LazyToOne(FALSE)</entry>
-
-                <entry>@Fetch(JOIN)</entry>
-              </row>
-
-              <row>
-                <entry>@ManyTo[One|Many](fetch=FetchType.LAZY)</entry>
-
-                <entry>@LazyCollection(TRUE)</entry>
-
-                <entry>@Fetch(SELECT)</entry>
-              </row>
-
-              <row>
-                <entry>@ManyTo[One|Many](fetch=FetchType.EAGER)</entry>
-
-                <entry>@LazyCollection(FALSE)</entry>
-
-                <entry>@Fetch(JOIN)</entry>
-              </row>
-            </tbody>
-          </tgroup>
-        </table>
-      </sect3>
-    </sect2>
-
-    <sect2 id="entity-hibspec-collection" revision="2">
-      <title>Annotations concernant les collections</title>
-
-      <sect3 id="entity-hibspec-collection-enhance" revision="2">
-        <title>Améliorer les configurations des collections</title>
-
-        <para>Il est possible de configurer :<itemizedlist>
-            <listitem>
-               la taille des batchs pour les collections en utilisant @BatchSize
-            </listitem>
-
-            <listitem>
-               la clause where, en utilisant @Where (appliquée à l'entité cible)
-               ou @WhereJoinTable (appliquée à la table de l'association)
-            </listitem>
-
-            <listitem>
-               la clause de vérification, en utilsant @Check
-            </listitem>
-
-            <listitem>
-               la clause SQL order by, en utilisant @OrderBy
-            </listitem>
-
-            <listitem>
-               la stratégie de suppression en cascade avec
-               @OnDelete(action=OnDeleteAction.CASCADE)
-            </listitem>
-          </itemizedlist></para>
-
-        <para>Vous pouvez aussi déclarer un comparateur de tri, utilisez
-        l'annotation <literal>@Sort</literal>. Exprimez le type de comparateur
-        que vous voulez entre "non trié" (NdT : unsorted), "ordre naturel"
-        (NdT : natural) ou un comparateur personnalisé. Si vous voulez utilisez
-        votre propre implémentation de comparateur, vous devrez indiquer la
-        classe d'implémentation en utilisant l'attribut
-        <literal>comparator</literal>. Notez que vous avez besoin d'utiliser
-        l'interface <classname>SortedSet</classname> ou
-        <classname>SortedMap</classname>.</para>
-
-        <programlisting>    @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
-    @JoinColumn(name="CUST_ID")
-    @Sort(type = SortType.COMPARATOR, comparator = TicketComparator.class)
-    @Where(clause="1=1")
-    @OnDelete(action=OnDeleteAction.CASCADE)
-    public SortedSet&lt;Ticket&gt; getTickets() {
-        return tickets;
-    }</programlisting>
-
-        <para>Veuillez vous référer aux descriptions précédentes de ces
-        annotations pour plus d'informations.</para>
-
-        <para>Les contraintes de clef étrangère, bien que générées par
-        Hibernate, ont un nom illisible. Vous pouvez surcharger le nom de la
-        contrainte en utilisant <literal>@ForeignKey</literal>. Notez que cette
-        annotation doit être placée du côté possédant la relation,
-        <literal>inverseName</literal> référençant la contrainte de l'autre
-        côté.</para>
-
-        <programlisting>@Entity
-public class Woman {
-    ...
-    @ManyToMany(cascade = {CascadeType.ALL})
-    <emphasis role="bold">@ForeignKey(name = "TO_WOMAN_FK", inverseName = "TO_MAN_FK")</emphasis>
-    public Set&lt;Man&gt; getMens() {
-        return mens;
-    }
-}
-
-alter table Man_Woman add constraint TO_WOMAN_FK foreign key (woman_id) references Woman
-alter table Man_Woman add constraint TO_MAN_FK foreign key (man_id) references Man</programlisting>
-      </sect3>
-
-      <sect3 id="entity-hibspec-collection-extratype" revision="1">
-        <title>Types de collection extra</title>
-
-        <sect4>
-          <title>List</title>
-
-          <para>Outre EJB3, Hibernate Annotations prend en charge les véritables
-          <classname>List</classname> et <classname>Array</classname>. Mappez
-          votre collection de la même manière que d'habitude et ajoutez
-          l'annotation @<literal>IndexColumn</literal>. Cette annotation vous
-          permet de décrire la colonne qui contiendra l'index. Vous pouvez aussi
-          déclarer la valeur de l'index en base de données qui représente le
-          premier élément (alias index de base). La valeur habituelle est
-          <literal>0</literal> ou <literal>1</literal>.</para>
-
-          <programlisting>@OneToMany(cascade = CascadeType.ALL)
- at IndexColumn(name = "drawer_position", base=1)
-public List&lt;Drawer&gt; getDrawers() {
-    return drawers;
-}</programlisting>
-
-          <note>
-            <para>Si vous oubliez de positionner
-            <literal>@IndexColumn</literal>, la sémantique du bag est appliquée.
-            Si vous voulez la sémantique du bag sans ses limitations, considérez
-            l'utilisation de <literal>@CollectionId</literal>.</para>
-          </note>
-        </sect4>
-
-        <sect4>
-          <title>Map</title>
-
-          <para>Hibernate Annotations prend aussi en charge le mapping de
-          véritables Maps, si <literal>@javax.persistence.MapKey</literal> n'est
-          pas positionnée, Hibernate mappera l'élément clef ou l'objet
-          embarquable dans ses propres colonnes. Pour surcharger les colonnes
-          par défaut, vous pouvez utiliser
-          <literal>@org.hibernate.annotations.MapKey</literal> si votre clef est
-          un type de base (par défaut à <literal>mapkey</literal>) ou un objet
-          embarquable, ou vous pouvez utiliser
-          <literal>@org.hibernate.annotations.MapKeyManyToMany</literal> si
-          votre clef est une entité.</para>
-        </sect4>
-
-        <sect4 id="entity-hibspec-collection-extratype-indexbidir">
-          <title>Associations bidirectionnelle avec des collections indexées</title>
-
-          <para>Une association bidirectionnelle où une extrémité est
-          représentée comme une <literal>@IndexColumn</literal> ou une
-          <literal>@org.hibernate.annotations.MapKey[ManyToMany]</literal>
-          requiert une considération spéciale. S'il y a une propriété de la
-          classe enfante qui mappe la colonne de l'index, pas de problème, nous
-          pouvons continuer en utilisant <literal>mappedBy</literal> sur le
-          mapping de la collection :</para>
-
-          <programlisting>@Entity
-public class Parent {
-    @OneToMany(mappedBy="parent")
-    @org.hibernate.annotations.MapKey(columns=@Column(name="name"))
-    private Map&lt;String, Child&gt; children;
-    ...
-}
-
- at Entity
-public class Parent {
-    ...
-    @Basic
-    private String name;
-
-    @ManyToOne
-    @JoinColumn(name="parent_id", nullable=false)
-    private Parent parent;
-    ...
-}</programlisting>
-
-          <para>Mais s'il n'y a pas de telle propriété sur la classe enfante,
-          nous ne pouvons pas penser que l'association est vraiment
-          bidirectionnelle (il y a des informations disponibles à une extrémité
-          qui ne sont pas disponibles à l'autre). Dans ce cas, nous ne pouvons
-          pas mapper la collection avec <literal>mappedBy</literal>. A la place,
-          nous pourrions utiliser le mapping suivant :</para>
-
-          <programlisting>@Entity
-public class Parent {
-    @OneToMany
-    @org.hibernate.annotations.MapKey(columns=@Column(name="name"))
-    @JoinColumn(name="parent_id", nullable=false)
-    private Map&lt;String, Child&gt; children;
-    ...
-}
-
- at Entity
-public class Parent {
-    ...
-    @ManyToOne
-    @JoinColumn(name="parent_id", insertable=false, updatable=false, nullable=false)
-    private Parent parent;
-    ...
-}</programlisting>
-
-          <para>Notez que dans ce mapping, l'extrémité de l'association dont la
-          valeur est une collection est responsable des mises à jour pour la
-          clef étrangère.</para>
-        </sect4>
-
-        <sect4>
-          <title>Bag avec une clef primaire</title>
-
-          <para>Une autre fonctionnalité intéressante est la possibilité de
-          définir une clef primaire subrogée à une collection bag. Ceci enlève
-          pas mal d'inconvénients des bags : mise à jour et suppression
-          sont efficaces, plus d'un bag <literal>EAGER</literal> par requête ou
-          par entité. Cette clef primaire sera contenue dans une colonne
-          supplémentaire de votre table de collection mais ne sea pas visible
-          par l'application Java. @CollectionId est utilisée pour marquer une
-          collection comme "id bag", ca permet aussi de surcharger les colonnes
-          de la clef primaire, le type de la clef primaire et la stratégie du
-          générateur. La stratégie peut être <literal>identity</literal>, ou
-          n'importe quel nom de générateur défini de votre application.</para>
-
-          <programlisting>@Entity
- at TableGenerator(name="ids_generator", table="IDS")
-public class Passport {
-    ...
-
-    @ManyToMany(cascade = CascadeType.ALL)
-    @JoinTable(name="PASSPORT_VISASTAMP")
-    <emphasis role="bold">@CollectionId(
-        columns = @Column(name="COLLECTION_ID"),
-        type=@Type(type="long"),
-        generator = "ids_generator"
-    )</emphasis>
-    private Collection&lt;Stamp&gt; visaStamp = new ArrayList();
-    ...
-}</programlisting>
-        </sect4>
-
-        <sect4>
-          <title>Collection d'éléments ou d'éléments composés</title>
-
-          <para>Hibernate Annotations prend aussi en charge les collections de
-          types core (Integer, String, Enums, ...), les collections d'objets
-          embarquables et même les tableaux de types primitifs. Ce sont des
-          collections d'éléments.</para>
-
-          <para>Une collection d'éléments doit être annotée comme
-          <literal>@CollectionOfElements</literal> (en tant que remplaçant de
-          <literal>@OneToMany</literal>). Pour définir la table de la
-          collection, l'annotation <literal>@JoinTable</literal> est utilisée
-          sur la propriété de l'association, <literal>joinColumns</literal>
-          définit les colonnes de jointure entre la table de l'entité primaire
-          et la table de la collection (inverseJoincolumn est inutile et
-          devrait être laissé à vide). Pour une collection de types core ou un
-          tableau de types primitifs, vous pouvez surcharger la définition de la
-          colonne de l'élément en utilisant <literal>@Column</literal> sur la
-          propriété de l'association. Vous pouvez aussi surcharger les colonnes
-          d'une collection d'objets embarquables en utilisant
-          <literal>@AttributeOverride</literal>. Pour atteindre l'élément de la
-          collection, vous avez besoin d'ajouter "element" au nom de l'attribut
-          surchargé (p. ex. "element" pour les types core, ou "element.serial"
-          pour la propriété serial d'un élément embarqué). Pour atteindre
-          l'index/clef d'une collection, ajoutez "key" à la place.</para>
-
-          <programlisting>@Entity
-public class Boy {
-    private Integer id;
-    private Set&lt;String&gt; nickNames = new HashSet&lt;String&gt;();
-    private int[] favoriteNumbers;
-    private Set&lt;Toy&gt; favoriteToys = new HashSet&lt;Toy&gt;();
-    private Set&lt;Character&gt; characters = new HashSet&lt;Character&gt;();
-
-    @Id @GeneratedValue
-    public Integer getId() {
-        return id;
-    }
-
-    <emphasis role="bold">@CollectionOfElements
-    public Set&lt;String&gt;</emphasis> getNickNames() {
-        return nickNames;
-    }
-
-    <emphasis role="bold">@CollectionOfElements
-    @JoinTable(
-            table=@Table(name="BoyFavoriteNumbers"),
-            joinColumns = @JoinColumn(name="BoyId")
-    )
-    @Column(name="favoriteNumber", nullable=false)</emphasis>
-    @IndexColumn(name="nbr_index")
-    public int[] getFavoriteNumbers() {
-        return favoriteNumbers;
-    }
-
-    <emphasis role="bold">@CollectionOfElements
-    @AttributeOverride( name="element.serial", column=@Column(name="serial_nbr") )</emphasis>
-    public Set&lt;Toy&gt; getFavoriteToys() {
-        return favoriteToys;
-    }
-
-    <emphasis role="bold">@CollectionOfElements
-    public Set&lt;Character&gt;</emphasis> getCharacters() {
-        return characters;
-    }
-    ...
-}
-
-public enum Character {
-    GENTLE,
-    NORMAL,
-    AGGRESSIVE,
-    ATTENTIVE,
-    VIOLENT,
-    CRAFTY
-}
-
- at Embeddable
-public class Toy {
-    public String name;
-    public String serial;
-    public Boy owner;
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getSerial() {
-        return serial;
-    }
-
-    public void setSerial(String serial) {
-        this.serial = serial;
-    }
-
-    <emphasis role="bold">@Parent</emphasis>
-    public Boy getOwner() {
-        return owner;
-    }
-
-    public void setOwner(Boy owner) {
-        this.owner = owner;
-    }
-
-    public boolean equals(Object o) {
-        if ( this == o ) return true;
-        if ( o == null || getClass() != o.getClass() ) return false;
-
-        final Toy toy = (Toy) o;
-
-        if ( !name.equals( toy.name ) ) return false;
-        if ( !serial.equals( toy.serial ) ) return false;
-
-        return true;
-    }
-
-    public int hashCode() {
-        int result;
-        result = name.hashCode();
-        result = 29 * result + serial.hashCode();
-        return result;
-    }
-}</programlisting>
-
-          <para>Sur une collection d'objets embarquables, l'objet embarquable
-          peut avoir une propriété annotée avec <literal>@Parent</literal>.
-          Cette propriété pointera alors vers l'entité contenant la
-          collection.</para>
-
-          <note>
-            <para>Les versions précédentes d'Hibernate Annotations utilisaient
-            <literal>@OneToMany</literal> pour marquer une collection
-            d'éléments. Suite à des incohérences sémantiques, nous avons mis en
-            place l'annotation <literal>@CollectionOfElements</literal>. Pour
-            marquer des collections d'éléments, l'ancienne façon fonctionne
-            encore mais elle est considérée comme "deprecated" et ne sera plus
-            prise en charge dans les futures versions.</para>
-          </note>
-        </sect4>
-      </sect3>
-    </sect2>
-
-    <sect2>
-      <title>Cache</title>
-
-      <para>Pour optimiser vos accès à la base de données, vous pouvez activer
-      le cache de second niveau d'Hibernate. Ce cache est configurable par
-      entité et par collection.</para>
-
-      <para><literal>@org.hibernate.annotations.Cache</literal> définit la
-      stratégie de cache et la région du cache de second niveau donné. Cette
-      annotation peut être appliquée à une entité racine (pas les entités
-      filles), et sur les collections.</para>
-
-      <programlisting>@Entity
- at Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
-public class Forest { ... }</programlisting>
-
-      <programlisting>    @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
-    @JoinColumn(name="CUST_ID")
-    @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
-    public SortedSet&lt;Ticket&gt; getTickets() {
-        return tickets;
-    }</programlisting>
-
-      <para></para>
-
-      <programlistingco>
-        <areaspec>
-          <area coords="2 55" id="hm1" />
-
-          <area coords="3 55" id="hm2" />
-
-          <area coords="4 55" id="hm3" />
-        </areaspec>
-
-        <programlisting>@Cache(
-    CacheConcurrencyStrategy usage();
-    String region() default "";
-    String include() default "all";
-)</programlisting>
-
-        <calloutlist>
-          <callout arearefs="hm1">
-            <para>usage : la stratégie de concurrence du cache donné (NONE,
-            READ_ONLY, NONSTRICT_READ_WRITE, READ_WRITE, TRANSACTIONAL) ;</para>
-          </callout>
-
-          <callout arearefs="hm2">
-            <para>region (optionnel) : la région du cache (par défaut le nom
-            complet de la classe avec le nom du package, ou le nom complet du
-            rôle de la collection) ;</para>
-          </callout>
-
-          <callout arearefs="hm3">
-            <para><literal>include</literal> (optionnel) : "all" pour inclure
-            toutes les propriétés, "non-lazy" pour inclure seulement les
-            propriétés qui ne sont pas chargées à la demande (valeur par
-            défaut : all).</para>
-          </callout>
-        </calloutlist>
-      </programlistingco>
-    </sect2>
-
-    <sect2 id="entity-hibspec-filters">
-      <title>Filtres</title>
-
-      <para>Hibernate a la capacité d'appliquer des filtres arbitraires à la
-      partie supérieure de vos données. Ces filtres sont appliqués au moment de
-      l'exécution sur une session donnée. Vous avez tout d'abord besoin de les
-      définir.</para>
-
-      <para><literal>@org.hibernate.annotations.FilterDef</literal> ou
-      <literal>@FilterDefs</literal> déclarent des définitions de filtre
-      utilisées par les filtres ayant le même nom. Une définition de filtre a
-      un name() et un tableau de parameters(). Un paramètre vous permettra
-      d'ajuster le comportement du filtre au moment de l'exécution. Chaque
-      paramètre est défini par une <literal>@ParamDef</literal> qui a un nom et
-      un type. Vous pouvez aussi définir un paramètre defaultCondition() pour
-      une <literal>@ParamDef</literal> donnée pour positionner la condition par
-      défaut à utiliser lorsqu'aucune n'est définie dans chaque
-      <literal>@Filter</literal> individuelle. Une <literal>@FilterDef</literal>
-      peut être définie au niveau de la classe ou du package.</para>
-
-      <para>Nous avons besoin de définir la clause du filtre SQL appliqué au
-      chargement de l'entité ou au chargement de la collection.
-      <literal>@Filter</literal> est utilisée et placée sur l'entité ou
-      l'élément de la collection.</para>
-
-      <para><programlisting>@Entity
- at FilterDef(name="minLength", parameters={ @ParamDef( name="minLength", type="integer" ) } )
- at Filters( {
-    @Filter(name="betweenLength", condition=":minLength &lt;= length and :maxLength &gt;= length"),
-    @Filter(name="minLength", condition=":minLength &lt;= length")
-} )
-public class Forest { ... }</programlisting></para>
-
-      <para>Lorsque la collection utilise une table d'association comme
-      représentation relationnelle, vous pourriez vouloir appliquer la condition
-      du filtre à la table de l'association elle-même ou à la table de l'entité
-      cible. Pour appliquer la contrainte sur l'entité cible, utilisez
-      l'annotation habituelle <literal>@Filter</literal>. Cependant, si vous
-      voulez ciblez la table d'association, utilisez l'annotation
-      <literal>@FilterJoinTable</literal>.</para>
-
-      <programlisting>    @OneToMany
-    @JoinTable
-    // filtre sur la table de l'entité cible
-    @Filter(name="betweenLength", condition=":minLength &lt;= length and :maxLength &gt;= length")
-    // filtre sur la table d'association
-    @FilterJoinTable(name="security", condition=":userlevel &gt;= requredLevel")
-    public Set&lt;Forest&gt; getForests() { ... }</programlisting>
-    </sect2>
-
-    <sect2 id="entity-hibspec-query">
-      <title>Requête</title>
-
-      <para>Puisqu'Hibernate a plus de fonctionnalités sur les requêtes nommées
-      que définies dans la spécification EJB3,
-      <literal>@org.hibernate.annotations.NamedQuery</literal>,
-      <literal>@org.hibernate.annotations.NamedQueries</literal>,
-      <literal>@org.hibernate.annotations.NamedNativeQuery</literal> et
-      <literal>@org.hibernate.annotations.NamedNativeQueries</literal> ont été
-      mis en place. Elles ajoutent des attributs à la version standard et
-      peuvent être utilisées comme remplaçant :</para>
-
-      <itemizedlist>
-        <listitem>
-          <para>flushMode : définit le mode de flush de la requête (Always,
-          Auto, Commit ou Never)</para>
-        </listitem>
-
-        <listitem>
-          <para>cacheable : indique si la requête devrait être cachée ou
-          non</para>
-        </listitem>
-
-        <listitem>
-          <para>cacheRegion : région du cache utilisée si la requête est
-          cachée</para>
-        </listitem>
-
-        <listitem>
-          <para>fetchSize : taille de l'expression de récupération JDBC pour
-          cette requête</para>
-        </listitem>
-
-        <listitem>
-          <para>timeout : timeout de la requête</para>
-        </listitem>
-
-        <listitem>
-          <para>callable : pour les requêtes natives seulement, mettre à true
-          pour les procédures stockées</para>
-        </listitem>
-
-        <listitem>
-          <para>comment : si les commentaires sont activés, le commentaire vu
-          lorsque la requête est envoyée vers la base de données</para>
-        </listitem>
-
-        <listitem>
-          <para>cacheMode : mode d'intéraction du cache (get, ignore, normal,
-          put ou refresh)</para>
-        </listitem>
-
-        <listitem>
-          <para>readOnly : indique si les éléments récupérés à partir de la
-          requête sont en lecture seule ou pas</para>
-        </listitem>
-      </itemizedlist>
-
-      <para>Ces indications de fonctionnement peuvent être positionnées sur
-      les annotations standards <literal>@javax.persistence.NamedQuery</literal>
-      avec l'annotation <literal>@QueryHint</literal>. Un autre avantage clef
-      est la possibilité de positionner ces annotations au niveau du
-      package.</para>
-    </sect2>
-  </sect1>
-</chapter>

Copied: trunk/HibernateExt/annotations/doc/reference/fr/modules/entity.xml (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/doc/reference/fr/modules/entity.xml)
===================================================================
--- trunk/HibernateExt/annotations/doc/reference/fr/modules/entity.xml	                        (rev 0)
+++ trunk/HibernateExt/annotations/doc/reference/fr/modules/entity.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,3458 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<chapter id="entity">
+  <title>Entity Beans</title>
+
+  <sect1 id="entity-overview" revision="1">
+    <title>Introduction</title>
+
+    <para>Cette section couvre les annotations entity bean EJB 3.0 (alias JPA)
+    et les extensions spécifiques à Hibernate.</para>
+  </sect1>
+
+  <sect1 id="entity-mapping" revision="2">
+    <title>Mapping avec les annotations EJB3/JPA</title>
+
+    <para>Les entités EJB3 sont des POJOs ordinaires. En fait, ils
+    représentent exactement le même concept que les entités de persistance
+    Hibernate. Leur mapping est défini à travers les annotations du JDK 5.0
+    (une syntaxe de descripteur XML pour la surcharge est définie dans la
+    spécification EJB3). Les annotations peuvent être divisées en deux
+    catégories, les annotations de mapping logique (vous permettant de décrire
+    le modèle objet, les associations de classe, etc) et les annotations de
+    mapping physique (décrivant le schéma physique, les tables, les colonnes,
+    les index, etc). Nous mélangerons les annotations des deux catégories dans
+    les exemples de code.</para>
+
+    <para>Les annotations EJB3 sont dans le package
+    <literal>javax.persistence.*</literal>. La plupart des IDE compatibles JDK 5
+    (comme Eclipse, IntelliJ IDEA et Netbeans) peuvent auto-compléter les
+    interfaces et les attributes d'annotation pour vous (même sans module "EJB3"
+    spécifique, puisque les annotations EJB3 sont des annotations ordinaires de
+    JDK 5).</para>
+
+    <para>Pour plus d'exemples concrets, lisez le tutorial EJB 3.0 de JBoss ou
+    parcourez la suite de tests d'Hibernate Annotations. La plupart des tests
+    unitaires ont été conçus pour représenter un exemple concret et être une
+    source d'inspiration.</para>
+
+    <sect2>
+      <title>Déclarer un entity bean</title>
+
+      <para>Chaque classe POJO persistante liée est un entity bean et est
+      déclarée en utilisant l'annotation <literal>@Entity</literal> (au niveau
+      de la classe) :</para>
+
+      <programlisting>
+ at Entity
+public class Flight implements Serializable {
+    Long id;
+
+    @Id
+    public Long getId() { return id; }
+
+    public void setId(Long id) { this.id = id; }
+}
+</programlisting>
+
+      <para><literal>@Entity</literal> déclare la classe comme un entity bean
+      (ie une classe POJO persistante), <literal>@Id</literal> déclare la
+      propriété identifiante de cet entity bean. Les autres déclarations de
+      mapping sont implicites. Ce concept de déclaration par exception est
+      un composant essentiel de la nouvelle spécification EJB3 et une
+      amélioration majeure. La classe Flight est mappée sur la table Flight, en
+      utilisant la colonne id comme colonne de la clef primaire.</para>
+
+      <para>Selon que vous annotez des champs ou des méthodes, le type d'accès
+      utilisé par Hibernate sera <literal>field</literal> ou
+      <literal>property</literal>. La spécification EJB3 exige que vous
+      déclariez les annotations sur le type d'élément qui sera accédé,
+      c'est-à-dire le getter si vous utilisez l'accès
+      <literal>property</literal>, le champ si vous utilisez l'accès
+      <literal>field</literal>. Mélanger des EJB3 annotations dans les champs et
+      les méthodes devrait être évité. Hibernate devinera le type d'accès de
+      l'identifiant à partir de la position d'<literal>@Id</literal> ou
+      d'<literal>@EmbeddedId</literal>.</para>
+
+      <sect3>
+        <title>Définir la table</title>
+
+        <para><literal>@Table</literal> est positionnée au niveau de la classe ;
+        cela vous permet de définir le nom de la table, du catalogue et du
+        schéma pour le mapping de votre entity bean. Si aucune
+        <literal>@Table</literal> n'est définie les valeurs par défaut sont
+        utilisées : le nom de la classe de l'entité (sans le nom de
+        package).</para>
+
+        <programlisting>
+ at Entity
+ at Table(name="tbl_sky")
+public class Sky implements Serializable {
+...
+            </programlisting>
+
+        <para>L'élément <literal>@Table</literal> contient aussi un attribut
+        <literal>schema</literal> et un attribut <literal>catalog</literal>,
+        si vous avez besoin de les définir. Vous pouvez aussi définir des
+        contraintes d'unicité sur la table en utilisant l'annotation
+        <literal>@UniqueConstraint</literal> en conjonction avec
+        <literal>@Table</literal> (pour une contrainte d'unicité n'impliquant
+        qu'une seule colonne, référez-vous à <literal>@Column</literal>).</para>
+
+        <programlisting>@Table(name="tbl_sky",
+    <emphasis role="bold">uniqueConstraints = {@UniqueConstraint(columnNames={"month", "day"})}</emphasis>
+)</programlisting>
+
+        <para>Une contrainte d'unicité est appliquée au tuple {month, day}.
+        Notez que le tableau <literal>columnNames</literal> fait référence aux
+        noms logiques des colonnes.</para>
+
+        <remark>Le nom logique d'une colonne est défini par l'implémentation
+        de NamingStrategy d'Hibernate. La stratégie de nommage EJB3 par défaut
+        utilise le nom de colonne physique comme nom de colonne logique. Notez
+        qu'il peut être différent du nom de la propriété (si le nom de colonne
+        est explicite). A moins que vous surchargiez la stratégie de nommage,
+        vous ne devriez pas vous soucier de ça.</remark>
+      </sect3>
+
+      <sect3>
+        <title>Versionner pour un contrôle de concurrence optimiste</title>
+
+        <para>Vous pouvez ajouter un contrôle de concurrence optimiste à un
+        entity bean en utilisant l'annotation
+        <literal>@Version</literal> :</para>
+
+        <programlisting>
+ at Entity
+public class Flight implements Serializable {
+...
+    @Version
+    @Column(name="OPTLOCK")
+    public Integer getVersion() { ... }
+}           </programlisting>
+
+        <para>La propriété de version sera mappée sur la colonne
+        <literal>OPTLOCK</literal>, et le gestionnaire d'entités l'utilisera
+        pour détecter des conflits lors des mises à jour (prévenant des pertes
+        de données lors de mises à jours que vous pourriez voir avec la
+        stratégie du last-commit-wins).</para>
+
+        <para>La colonne de version peut être un numérique (solution
+        recommandée) ou un timestamp comme pour la spécification EJB3. Hibernate
+        prend en charge n'importe quel type fourni que vous définissez et
+        implémentez avec la classe <classname>UserVersionType</classname>
+        appropriée.</para>
+      </sect3>
+    </sect2>
+
+    <sect2>
+      <title>Mapping de simples propriétés</title>
+
+      <sect3>
+        <title>Déclarer des mappings de propriétés élémentaires</title>
+
+        <para>Chaque propriété (champ ou méthode) non statique non transient
+        d'un entity bean est considérée persistante, à moins que vous l'annotiez
+        comme <literal>@Transient</literal>. Ne pas avoir d'annotation pour
+        votre propriété est équivalent à l'annotation <literal>@Basic</literal>.
+        L'annotation <literal>@Basic</literal> vous permet de déclarer la
+        stratégie de récupération pour une propriété :</para>
+
+        <programlisting>public transient int counter; // propriété transient
+
+private String firstname; // propriété persistante
+
+ at Transient
+String getLengthInMeter() { ... } // propriété transient
+
+String getName() {... } // propriété persistante
+
+ at Basic
+int getLength() { ... } // propriété persistante
+
+ at Basic(fetch = FetchType.LAZY)
+String getDetailedComment() { ... } // propriété persistante
+
+ at Temporal(TemporalType.TIME)
+java.util.Date getDepartureTime() { ... } // propriété persistante
+
+ at Enumerated(STRING)
+Starred getNote() { ... } // enum persistée en tant que String dans la base de données</programlisting>
+
+        <para><literal>counter</literal>, un champ transient, et
+        <literal>lengthInMeter</literal>, une méthode annotée comme
+        <literal>@Transient</literal>, seront ignorés par le gestionnaire
+        d'entités. Les propriétés <literal>name</literal>,
+        <literal>length</literal>, et <literal>firstname</literal> sont mappées
+        comme persistantes et à charger immédiatement (ce sont les valeurs
+        par défaut pour les propriétés simples). La valeur de la propriété
+        <literal>detailedComment</literal> sera chargée à partir de la base de
+        données dès que la propriété de l'entité sera accédée pour la première
+        fois. En général vous n'avez pas besoin de marquer de simples propriétés
+        comme "à charger à la demande" (NdT: lazy) (à ne pas confondre avec la
+        récupération d'association "lazy").</para>
+
+        <note>
+          <para>Pour activer la récupération à la demande au niveau de la
+          propriété, vos classes doivent être instrumentées : du bytecode est
+          ajouté au code original pour activer cette fonctionnalité, veuillez
+          vous référer à la documentation de référence d'Hibernate. Si vos
+          classes ne sont pas instrumentées, le chargement à la demande au
+          niveau de la propriété est silencieusement ignoré.</para>
+        </note>
+
+        <para>L'alternative recommandée est d'utiliser la capacité de projection
+        de JPA-QL ou des requêtes Criteria.</para>
+
+        <para>EJB3 prend en charge le mapping de propriété de tous les types
+        élémentaires pris en charge par Hibernate (tous les types de base Java,
+        leur wrapper respectif et les classes sérialisables). Hibernate
+        Annotations prend en charge le mapping des types Enum soit vers une
+        colonne ordinale (en stockant le numéro ordinal de l'enum), soit vers
+        une colonne de type chaîne de caractères (en stockant la chaîne de
+        caractères représentant l'enum) : la représentation de la persistance,
+        par défaut ordinale, peut être surchargée grâce à l'annotation
+        <literal>@Enumerated</literal> comme montré avec la propriété
+        <literal>note</literal> de l'exemple.</para>
+
+        <para>Dans les APIs core de Java, la précision temporelle n'est pas
+        définie. Lors du traitement de données temporelles vous pourriez vouloir
+        décrire la précision attendue dans la base de données. Les données
+        temporelles peuvent avoir une précision de type <literal>DATE</literal>,
+        <literal>TIME</literal>, ou <literal>TIMESTAMP</literal> (c'est-à-dire
+        seulement la date, seulement l'heure, ou les deux). Utilisez
+        l'annotation <literal>@Temporal</literal> pour ajuster cela.</para>
+
+        <para><literal>@Lob</literal> indique que la propriété devrait être
+        persistée dans un Blob ou un Clob selon son type :
+        <classname>java.sql.Clob</classname>,
+        <classname>Character[]</classname>, <classname>char[]</classname> et
+        java.lang.<classname>String</classname> seront persistés dans un Clob.
+        <classname>java.sql.Blob</classname>, <classname>Byte[]</classname>,
+        <classname>byte[] </classname> et les types sérialisables seront
+        persistés dans un Blob.</para>
+
+        <programlisting>
+ at Lob
+public String getFullText() {
+    return fullText;
+}
+
+ at Lob
+public byte[] getFullCode() {
+    return fullCode;
+}
+ </programlisting>
+
+        <para>Si le type de la propriété implémente
+        <classname>java.io.Serializable</classname> et n'est pas un type de
+        base, et si la propriété n'est pas annotée avec <literal>@Lob</literal>,
+        alors le type Hibernate <literal>serializable</literal> est
+        utilisé.</para>
+      </sect3>
+
+      <sect3>
+        <title>Déclarer des attributs de colonne</title>
+
+        <para>La(les) colonne(s) utilisée(s) pour mapper une propriété peuvent
+        être définies en utilisant l'annotation <literal>@Column</literal>.
+        Utilisez-la pour surcharger les valeurs par défaut (voir la
+        spécification EJB3 pour plus d'informations sur les valeurs par défaut).
+        Vous pouvez utilisez cette annotation au niveau de la propriété pour
+        celles qui sont :</para>
+
+        <itemizedlist>
+          <listitem>
+            <para>pas du tout annotées</para>
+          </listitem>
+
+          <listitem>
+            <para>annotées avec <literal>@Basic</literal></para>
+          </listitem>
+
+          <listitem>
+            <para>annotées avec <literal>@Version</literal></para>
+          </listitem>
+
+          <listitem>
+            <para>annotées avec <literal>@Lob</literal></para>
+          </listitem>
+
+          <listitem>
+            <para>annotées avec <literal>@Temporal</literal></para>
+          </listitem>
+
+          <listitem>
+            <para>annotées avec
+            <literal>@org.hibernate.annotations.CollectionOfElements</literal>
+            (pour Hibernate uniquement)</para>
+          </listitem>
+        </itemizedlist>
+
+        <programlisting>
+ at Entity
+public class Flight implements Serializable {
+...
+ at Column(updatable = false, name = "flight_name", nullable = false, length=50)
+public String getName() { ... }
+            </programlisting>
+
+        <para>La propriété <literal>name</literal> est mappée sur la colonne
+        <literal>flight_name</literal>, laquelle ne peut pas avoir de valeur
+        nulle, a une longueur de 50 et ne peut pas être mise à jour (rendant
+        la propriété immuable).</para>
+
+        <para>Cette annotation peut être appliquée aux propriétés habituelles
+        ainsi qu'aux propriétés <literal>@Id</literal> ou
+        <literal>@Version</literal>.</para>
+
+        <programlistingco>
+          <areaspec>
+            <area coords="2 55" id="hm1" />
+
+            <area coords="3 55" id="hm2" />
+
+            <area coords="4 55" id="hm3" />
+
+            <area coords="5 55" id="hm4" />
+
+            <area coords="6 55" id="hm5" />
+
+            <area coords="7 55" id="hm6" />
+
+            <area coords="8 55" id="hm7" />
+
+            <area coords="9 55" id="hm8" />
+
+            <area coords="10 55" id="hm9" />
+
+            <area coords="11 55" id="hm10" />
+          </areaspec>
+
+          <programlisting>@Column(
+    name="columnName";
+    boolean unique() default false;
+    boolean nullable() default true;
+    boolean insertable() default true;
+    boolean updatable() default true;
+    String columnDefinition() default "";
+    String table() default "";
+    int length() default 255;
+    int precision() default 0; // decimal precision
+    int scale() default 0; // decimal scale</programlisting>
+
+          <calloutlist>
+            <callout arearefs="hm1">
+              <para><literal>name</literal> (optionnel) : le nom de la colonne
+              (par défaut le nom de la propriété)</para>
+            </callout>
+
+            <callout arearefs="hm2">
+              <para><literal>unique</literal> (optionnel) : indique si la colonne
+              fait partie d'une contrainte d'unicité ou non (par défaut
+              false)</para>
+            </callout>
+
+            <callout arearefs="hm3">
+              <para><literal>nullable</literal> (optionnel) : indique si la
+              colonne peut avoir une valeur nulle (par défaut false).</para>
+            </callout>
+
+            <callout arearefs="hm4">
+              <para><literal>insertable</literal> (optionnel) : indique si la
+              colonne fera partie de la commande insert (par défaut true)</para>
+            </callout>
+
+            <callout arearefs="hm5">
+              <para><literal>updatable</literal> (optionnel) : indique si la
+              colonne fera partie de la commande update (par défaut true)</para>
+            </callout>
+
+            <callout arearefs="hm6">
+              <para><literal>columnDefinition</literal> (optionnel) : surcharge
+              le fragment DDL sql pour cette colonne en particulier (non
+              portable)</para>
+            </callout>
+
+            <callout arearefs="hm7">
+              <para><literal>table</literal> (optionnel) : définit la table
+              cible (par défaut la table principale)</para>
+            </callout>
+
+            <callout arearefs="hm8">
+              <para><literal><literal>length</literal></literal> (optionnel) :
+              longueur de la colonne (par défaut 255)</para>
+            </callout>
+
+            <callout arearefs="hm8">
+              <para><literal><literal>precision</literal></literal>
+              (optionnel) : précision décimale de la colonne (par défaut
+              0)</para>
+            </callout>
+
+            <callout arearefs="hm10">
+              <para><literal><literal>scale</literal></literal> (optionnel) :
+              échelle décimale de la colonne si nécessaire (par défaut 0)</para>
+            </callout>
+          </calloutlist>
+        </programlistingco>
+      </sect3>
+
+      <sect3>
+        <title>Objets embarqués (alias composants)</title>
+
+        <para>Il est possible de déclarer un composant embarqué à l'intérieur
+        d'une entité et même de surcharger le mapping de ses colonnes. Les
+        classes de composant doivent être annotées au niveau de la classe avec
+        l'annotation <literal>@Embeddable</literal>. Il est possible de
+        surcharger le mapping de colonne d'un objet embarqué pour une entité
+        particulière en utilisant les annotations
+        <literal>@Embedded</literal> et <literal>@AttributeOverride</literal>
+        sur la propriété associée :</para>
+
+        <programlisting>
+ at Entity
+public class Person implements Serializable {
+
+    // Composant persistant utilisant les valeurs par défaut
+    Address homeAddress;
+
+    @Embedded
+    @AttributeOverrides( {
+            @AttributeOverride(name="iso2", column = @Column(name="bornIso2") ),
+            @AttributeOverride(name="name", column = @Column(name="bornCountryName") )
+    } )
+    Country bornIn;
+    ...
+}
+            </programlisting>
+
+        <programlisting>
+ at Embeddable
+public class Address implements Serializable {
+    String city;
+    Country nationality; // par de surcharge ici
+}
+            </programlisting>
+
+        <programlisting>
+ at Embeddable
+public class Country implements Serializable {
+    private String iso2;
+    @Column(name="countryName") private String name;
+
+    public String getIso2() { return iso2; }
+    public void setIso2(String iso2) { this.iso2 = iso2; }
+
+
+    public String getName() { return name; }
+    public void setName(String name) { this.name = name; }
+    ...
+}
+            </programlisting>
+
+        <para>Un objet embarquable hérite du type d'accès de son entité
+        d'appartenance (notez que vous pouvez surcharger cela en utilisant les
+        annotations spécifiques à Hibernate <literal>@AccessType</literal>,
+        voir <xref linkend="entity-hibspec" />).</para>
+
+        <para>L'entity bean <literal>Person</literal> a deux propriétés
+        composant, <literal>homeAddress</literal> et
+        <literal>bornIn</literal>. La propriété <literal>homeAddress</literal>
+        n'a pas été annotée, mais Hibernate devinera que c'est un composant
+        persistant en cherchant l'annotation <literal>@Embeddable</literal>
+        dans la classe Address. Nous surchargeons aussi le mapping d'un nom de
+        colonne (pour <literal>bornCountryName</literal>) avec les annotations
+        <literal>@Embedded</literal> et <literal>@AttributeOverride</literal>
+        pour chaque attribut mappé de <literal>Country</literal>. Comme vous
+        pouvez le voir, <literal>Country</literal> est aussi un composant
+        imbriqué de <literal>Address</literal>, utilisant de nouveau la
+        détection automatique d'Hibernate et les valeurs par défaut EJB3.
+        Surcharger des colonnes d'objets embarqués d'objets (eux-mêmes)
+        embarqués n'est actuellement pas pris en charge par la spécification
+        EJB3, cependant, Hibernate Annotations le prend en charge à travers des
+        expressions séparées par des points.</para>
+
+        <para><programlisting>    @Embedded
+    @AttributeOverrides( {
+            @AttributeOverride(name="city", column = @Column(name="fld_city") )
+            @AttributeOverride(name="<emphasis role="bold">nationality.iso2</emphasis>", column = @Column(name="nat_Iso2") ),
+            @AttributeOverride(name="<emphasis role="bold">nationality.name</emphasis>", column = @Column(name="nat_CountryName") )
+            // les colonnes de nationality dans homeAddress sont surchargées
+    } )
+    Address homeAddress;</programlisting>Hibernate Annotations prend en charge
+        une fonctionnalité de plus qui n'est pas explicitement prise en charge
+        par la spécification EJB3. Vous pouvez annoter un objet embarqué avec
+        l'annotation
+        <literal>@MappedSuperclass</literal> pour rendre les propriétés de la
+        classe parente persistantes (voir <literal>@MappedSuperclass</literal>
+        pour plus d'informations).</para>
+
+        <para>Alors que ce n'est pas pris en charge par la spécification EJB3,
+        Hibernate Annotations vous permet d'utiliser les annotations
+        d'association dans un objet embarquable (ie <literal>@*ToOne</literal>
+        ou <literal>@*ToMany</literal>). Pour surcharger les colonnes de
+        l'association vous pouvez utiliser
+        <literal>@AssociationOverride</literal>.</para>
+
+        <para>Si vous voulez avoir le même type d'objet embarquable deux fois
+        dans la même entité, le nom de colonne par défaut ne fonctionnera pas :
+        au moins une des colonnes devra être explicitée. Hibernate va au-delà
+        de la spécification EJB3 et vous permet d'améliorer le mécanisme par
+        défaut avec <classname>NamingStrategy</classname>.
+        <classname>DefaultComponentSafeNamingStrategy</classname> est une petite
+        amélioration par rapport à la stratégie par défaut
+        <classname>EJB3NamingStrategy</classname> qui permet aux objets
+        embarqués de fonctionner avec leur valeur par défaut même s'ils sont
+        utilisés deux fois dans la même entité.</para>
+      </sect3>
+
+      <sect3>
+        <title>Valeurs par défaut des propriétés non annotées</title>
+
+        <para>Si une propriété n'est pas annotée, les règles suivantes
+        s'appliquent :</para>
+
+        <itemizedlist>
+          <listitem>
+            Si la propriété est de type simple, elle est mappée comme @Basic
+          </listitem>
+
+          <listitem>
+            Sinon, si le type de la propriété est annoté comme @Embeddable,
+            elle est mappée comme @Embedded
+          </listitem>
+
+          <listitem>
+            Sinon, si le type de la propriété est Serializable, elle est mappée
+            comme @Basic vers une colonne contenant l'objet sous sa forme
+            sérialisée
+          </listitem>
+
+          <listitem>
+              Sinon, si le type de la propriété est java.sql.Clob ou
+              java.sql.Blob, elle est mappée comme @Lob avec le LobType
+              approprié
+          </listitem>
+        </itemizedlist>
+      </sect3>
+    </sect2>
+
+    <sect2 id="entity-mapping-identifier"
+           xreflabel="Mapper des propriétés identifiantes">
+      <title>Mapper des propriétés identifiantes</title>
+
+      <para>L'annotation <literal>@Id</literal> vous permet de définir quelle
+      propriété identifie votre entity bean. Cette propriété peut être
+      positionnée par l'application elle-même ou générée par Hibernate
+      (préféré). Vous pouvez définir la stratégie de génération de l'identifiant
+      grâce à l'annotation <literal>@GeneratedValue</literal> :</para>
+
+      <itemizedlist>
+        <listitem>
+           AUTO - soit la colonne identity, soit la séquence, soit la table
+           selon la base de données sous-jacente
+        </listitem>
+
+        <listitem>
+           TABLE - table contenant l'id
+        </listitem>
+
+        <listitem>
+           IDENTITY - colonne identity
+        </listitem>
+
+        <listitem>
+           SEQUENCE - séquence
+        </listitem>
+      </itemizedlist>
+
+      <para>Hibernate fournit plus de générateurs d'identifiant que les simples
+      générateurs EJB3. Vérifiez <xref linkend="entity-hibspec" /> pour plus
+      d'informations.</para>
+
+      <para>L'exemple suivant montre un générateur par séquence utilisant la
+      configuration SEQ_STORE (voir plus bas) :</para>
+
+      <programlisting>
+ at Id @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQ_STORE")
+public Integer getId() { ... }
+         </programlisting>
+
+      <para>L'exemple suivant utilise le générateur identity :</para>
+
+      <programlisting>
+ at Id @GeneratedValue(strategy=GenerationType.IDENTITY)
+public Long getId() { ... }
+         </programlisting>
+
+      <para>Le générateur <literal>AUTO</literal> est le type préféré pour les
+      applications portables (vers différentes base de données). La
+      configuration de la génération d'identifiant peut être partagée par
+      différents mappings <literal>@Id</literal> avec l'attribut du générateur.
+      Il y a différentes configurations disponibles avec
+      <literal>@SequenceGenerator</literal> et
+      <literal>@TableGenerator</literal>. La portée d'un générateur peut être
+      l'application ou la classe. Les générateurs définis dans les classes ne
+      sont pas visibles à l'extérieur de la classe et peuvent surcharger les
+      générateurs de niveau applicatif. Les générateurs de niveau applicatif
+      sont définis au niveau XML (voir
+      <xref linkend="xml-overriding" />) :</para>
+
+      <programlisting>&lt;table-generator name="EMP_GEN"
+            table="GENERATOR_TABLE"
+            pk-column-name="key"
+            value-column-name="hi"
+            pk-column-value="EMP"
+            allocation-size="20"/&gt;
+
+// et l'annotation équivalente
+
+ at javax.persistence.TableGenerator(
+    name="EMP_GEN",
+    table="GENERATOR_TABLE",
+    pkColumnName = "key",
+    valueColumnName = "hi"
+    pkColumnValue="EMP",
+    allocationSize=20
+)
+
+&lt;sequence-generator name="SEQ_GEN"
+    sequence-name="my_sequence"
+    allocation-size="20"/&gt;
+
+// et l'annotation équivalente
+
+ at javax.persistence.SequenceGenerator(
+    name="SEQ_GEN",
+    sequenceName="my_sequence",
+    allocationSize=20
+)
+         </programlisting>
+
+      <para>Si JPA XML (comme <filename>META-INF/orm.xml</filename>) est utilisé
+      pour définir les générateurs, <literal>EMP_GEN</literal> et
+      <literal>SEQ_GEN</literal> sont des générateurs de niveau applicatif.
+      <literal>EMP_GEN</literal> définit un générateur d'identifiant basé sur
+      une table utilisant l'algorithme hilo avec un <literal>max_lo</literal> de
+      20. La valeur haute est conservée dans une <literal>table</literal>
+      "<literal>GENERATOR_TABLE</literal>". L'information est gardée dans une
+      ligne où la colonne <literal>pkColumnName</literal> ("clef") est égale à
+      <literal>pkColumnValue</literal> "<literal>EMP</literal>" et une colonne
+      <literal>valueColumnName</literal> "<literal>hi</literal>" contient la
+      prochaine valeur haute utilisée.</para>
+
+      <para><literal>SEQ_GEN</literal> définit un générateur par séquence
+      utilisant une séquence nommée <literal>my_sequence</literal>. La taille
+      d'allocation utilisée pour cet algorithme hilo basé sur une séquence est
+      20. Notez que cette version d'Hibernate Annotations ne gère pas
+      <literal>initialValue</literal> dans le générateur par séquence.
+      La taille par défaut de l'allocation est 50, donc si vous voulez utiliser
+      une séquence et récupérer la valeur chaque fois, vous devez positionner
+      la taille de l'allocation à 1.</para>
+
+      <note>
+        <para>La définition au niveau package n'est plus prise en charge par la
+        spécification EJB 3.0. Vous pouvez cependant utiliser
+        <literal>@GenericGenerator</literal> au niveau du package (voir <xref
+        linkend="entity-hibspec-identifier" />).</para>
+      </note>
+
+      <para>Le prochain exemple montre la définition d'un générateur par
+      séquence dans la portée d'une classe :</para>
+
+      <programlisting>
+ at Entity
+ at javax.persistence.SequenceGenerator(
+    name="SEQ_STORE",
+    sequenceName="my_sequence"
+)
+public class Store implements Serializable {
+    private Long id;
+
+    @Id @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQ_STORE")
+    public Long getId() { return id; }
+}
+         </programlisting>
+
+      <para>Cette classe utilisera une séquence nommée my_sequence et le
+      générateur SEQ_STORE n'est pas visible dans les autres classes. Notez que
+      vous pouvez regarder les tests unitaires d'Hibernate Annotations dans le
+      package org.hibernate.test.metadata.id pour plus d'exemples.</para>
+
+      <para>Vous pouvez définir une clef primaire composée à travers différentes
+      syntaxes :</para>
+
+      <itemizedlist>
+        <listitem>
+           annote la propriété du composant comme @Id et rend la classe du
+           composant @Embeddable
+        </listitem>
+
+        <listitem>
+           annote la propriété du composant comme @EmbeddedId
+        </listitem>
+
+        <listitem>
+           annote la classe comme @IdClass et annote chaque propriété de
+           l'entité impliquée dans la clef primaire avec @Id
+        </listitem>
+      </itemizedlist>
+
+      <para>Bien qu'assez commun pour le développeur EJB2,
+      <literal>@IdClass</literal> est probablement nouveau pour les utilisateurs
+      d'Hibernate. La classe de la clef primaire composée correspond aux
+      multiples champs ou propriétés de l'entité ; de plus, les noms des champs
+      ou propriétés de la clef primaire et ceux de l'entité doivent
+      correspondre ; et enfin, leur type doit être le même. Regardons un
+      exemple :</para>
+
+      <programlisting>@Entity
+<emphasis role="bold">@IdClass(FootballerPk.class)</emphasis>
+public class Footballer {
+    // partie de la clef
+    <emphasis role="bold">@Id</emphasis> public String getFirstname() {
+        return firstname;
+    }
+
+    public void setFirstname(String firstname) {
+        this.firstname = firstname;
+    }
+
+    // partie de la clef
+    <emphasis role="bold">@Id</emphasis> public String getLastname() {
+        return lastname;
+    }
+
+    public void setLastname(String lastname) {
+        this.lastname = lastname;
+    }
+
+    public String getClub() {
+        return club;
+    }
+
+    public void setClub(String club) {
+        this.club = club;
+    }
+
+    // implémentation appropriée de equals() et hashCode()
+}
+
+ at Embeddable
+public class FootballerPk implements Serializable {
+    // même nom et même type que dans Footballer
+    public String getFirstname() {
+        return firstname;
+    }
+
+    public void setFirstname(String firstname) {
+        this.firstname = firstname;
+    }
+
+    // même nom et même type que dans Footballer
+    public String getLastname() {
+        return lastname;
+    }
+
+    public void setLastname(String lastname) {
+        this.lastname = lastname;
+    }
+
+    // implémentation appropriée de equals() et hashCode()
+}
+</programlisting>
+
+      <para>Comme vous pouvez le voir, <literal>@IdClass</literal> pointe vers
+      la classe de la clef primaire correspondante.</para>
+
+      <para>Bien que ce ne soit pas pris en charge par la spécification EJB3,
+      Hibernate vous permet de définir des associations à l'intérieur d'un
+      identifiant composé. Pour cela, utilisez simplement les annotations
+      habituelles.</para>
+
+      <programlisting>@Entity
+ at AssociationOverride( name="id.channel", joinColumns = @JoinColumn(name="chan_id") )
+public class TvMagazin {
+    @EmbeddedId public TvMagazinPk id;
+    @Temporal(TemporalType.TIME) Date time;
+}
+
+ at Embeddable
+public class TvMagazinPk implements Serializable {
+    @ManyToOne
+    public Channel channel;
+    public String name;
+    @ManyToOne
+    public Presenter presenter;
+}
+</programlisting>
+    </sect2>
+
+    <sect2>
+      <title>Mapper l'héritage</title>
+
+      <para>EJB3 prend en charge les trois types d'héritage :</para>
+
+      <itemizedlist>
+        <listitem>
+           Stratégie d'une table par classe concrète : l'élément
+           &lt;union-class&gt; dans Hibernate
+        </listitem>
+
+        <listitem>
+            Stratégie d'une seule table par hiérarchie de classe : l'élément
+            &lt;subclass&gt; dans Hibernate
+        </listitem>
+
+        <listitem>
+           Stratégie d'une table par classe fille : l'élément
+           &lt;joined-subclass&gt; dans Hibernate
+        </listitem>
+      </itemizedlist>
+
+      <para>La stratégie choisie est déclarée au niveau de la classe de l'entité
+      la plus haute dans la hiérarhie en utilisant l'annotation
+      <literal>@Inheritance</literal>.</para>
+
+      <note>
+        <para>Annoter des interfaces n'est pour le moment pas pris en
+        charge.</para>
+      </note>
+
+      <sect3>
+        <title>Une table par classe concrète</title>
+
+        <para>Cette stratégie a beaucoup d'inconvénients (surtout avec les
+        requêtes polymorphiques et les associations) expliqués dans la
+        spécification EJB3, la documentation de référence d'Hibernate, Hibernate
+        in Action, et plusieurs autres endroits. Hibernate en contourne la
+        plupart en implémentant cette stratégie en utilisant des requêtes
+        <literal>SQL UNION</literal>. Elle est habituellement utilisée pour le
+        niveau le plus haut d'une hiérarchie d'héritage :</para>
+
+        <programlisting>
+ at Entity
+ at Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
+public class Flight implements Serializable {
+            </programlisting>
+
+        <para>Cette stratégie prend en charge les associations de un vers
+        plusieurs bidirectionnelles. Cette stratégie ne prend pas en charge
+        la stratégie de générateur <literal>IDENTITY</literal> : l'identifiant
+        doit être partagé par plusieurs tables. Par conséquent, lors de
+        l'utilisation de cette stratégie, vous ne devriez pas utilisez
+        <literal>AUTO</literal> ni <literal>IDENTITY</literal>.</para>
+      </sect3>
+
+      <sect3>
+        <title>Une seule table par hiérarchie de classe</title>
+
+        <para>Toutes les propriétés de toutes les classes parentes et classes
+        filles sont mappées dans la même table, les instances sont différenciées
+        par une colonne spéciale discriminante :</para>
+
+        <programlisting>
+ at Entity
+ at Inheritance(strategy=InheritanceType.SINGLE_TABLE)
+ at DiscriminatorColumn(
+    name="planetype",
+    discriminatorType=DiscriminatorType.STRING
+)
+ at DiscriminatorValue("Plane")
+public class Plane { ... }
+
+ at Entity
+ at DiscriminatorValue("A320")
+public class A320 extends Plane { ... }
+            </programlisting>
+
+        <para><classname>Plane</classname> est la classe parente, elle définit
+        la stratégie d'héritage <literal>InheritanceType.SINGLE_TABLE</literal>.
+        Elle définit aussi la colonne discriminante avec l'annotation
+        <literal>@DiscriminatorColumn</literal>, une colonne discriminante peut
+        aussi définir le type du discriminant. Finalement, l'annotation
+        <literal>@DiscriminatorValue</literal> définit la valeur utilisée pour
+        différencier une classe dans la hiérarchie. Tous ces attributs ont des
+        valeurs par défaut sensées. Le nom par défaut de la colonne
+        discriminante est <literal>DTYPE</literal>. La valeur discriminante par
+        défaut est le nom de l'entité (comme défini dans
+        <literal>@Entity.name</literal>) avec le type
+        <literal>DiscriminatorType.STRING</literal>. <classname>A320</classname>
+        est une classe fille ; vous devez seulement définir la valeur
+        discriminante si vous ne voulez pas utiliser la valeur par défaut. La
+        stratégie et le type du discriminant sont implicites.</para>
+
+        <para><literal>@Inheritance</literal> et
+        <literal>@DiscriminatorColumn</literal> devraient seulement être
+        définies sur l'entité la plus haute de la hiérarchie.</para>
+      </sect3>
+
+      <sect3>
+        <title>Une table par classe fille</title>
+
+        <para>Les annotations <literal> @PrimaryKeyJoinColumn</literal> et
+        <literal>@PrimaryKeyJoinColumns</literal> définissent la (les) clef(s)
+        primaire(s) de la table de la classe fille jointe :</para>
+
+        <programlisting>
+ at Entity
+ at Inheritance(strategy=InheritanceType.JOINED)
+public class Boat implements Serializable { ... }
+
+ at Entity
+public class Ferry extends Boat { ... }
+
+ at Entity
+ at PrimaryKeyJoinColumn(name="BOAT_ID")
+public class AmericaCupClass  extends Boat { ... }
+            </programlisting>
+
+        <para>Toutes les entités ci-dessus utilisent la stratégie
+        <literal>JOINED</literal>, la table <literal>Ferry</literal> est jointe
+        avec la table <literal>Boat</literal> en utilisant les mêmes noms de
+        clef primaire. La table <literal>AmericaCupClass</literal> est jointe
+        avec <literal>Boat</literal> en utilisant la condition de jointure
+        <code>Boat.id = AmericaCupClass.BOAT_ID</code>.</para>
+      </sect3>
+
+      <sect3>
+        <title>Héritage de propriétés des classes parentes</title>
+
+        <para>Il est parfois utile de partager des propriétés communes à travers
+        une classe technique ou métier sans l'inclure comme une entité
+        habituelle (c'est-à-dire aucune table spécifique pour cette entité).
+        Pour cela, vous pouvez les mapper comme
+        <literal>@MappedSuperclass</literal>.</para>
+
+        <programlisting>@MappedSuperclass
+public class BaseEntity {
+    @Basic
+    @Temporal(TemporalType.TIMESTAMP)
+    public Date getLastUpdate() { ... }
+    public String getLastUpdater() { ... }
+    ...
+}
+
+ at Entity class Order extends BaseEntity {
+    @Id public Integer getId() { ... }
+    ...
+}</programlisting>
+
+        <para>En base de données, cette hiérarchie sera représentée comme une
+        table <literal>Order</literal> ayant les colonnes <literal>id</literal>,
+        <literal>lastUpdate</literal> et <literal>lastUpdater</literal>.
+        Les mappings de propriété de la classe parente embarquée sont copiés
+        dans les classes filles de l'entité. Souvenez-vous que la classe parente
+        embarquable n'est cependant pas la racine de la hiérarchie.</para>
+
+        <note>
+          <para>Les propriétés des classes parentes non mappées comme
+          <literal>@MappedSuperclass</literal> sont ignorées.</para>
+        </note>
+
+        <note>
+          <para>Le type d'accès (champ ou méthode) est hérité de l'entité
+          racine, à moins que vous utilisiez l'annotation Hibernate
+          <literal>@AccessType</literal>.</para>
+        </note>
+
+        <note>
+          <para>La même notion peut être appliquée aux objets
+          <literal>@Embeddable</literal> pour persister des propriétés de leurs
+          classes parentes. Vous avez aussi besoin d'utiliser
+          <literal>@MappedSuperclass</literal> pour faire ça (cependant cela ne
+          devrait pas être considéré comme une fonctionnalité EJB3
+          standard).</para>
+        </note>
+
+        <note>
+          <para>Il est permis de marquer une classe comme
+          <literal>@MappedSuperclass</literal> dans le milieu d'une hiérarchie
+          d'héritage mappée.</para>
+        </note>
+
+        <note>
+          <para>Toute classe de la hiérarchie non annotée avec
+          <literal>@MappedSuperclass</literal> ou <literal>@Entity</literal>
+          sera ignorée.</para>
+        </note>
+
+        <para>Vous pouvez surcharger des colonnes définies dans des entités
+        parentes au niveau de l'entité racine en utilisant l'annotation
+        <literal>@AttributeOverride</literal>.</para>
+
+        <programlisting>@MappedSuperclass
+public class FlyingObject implements Serializable {
+
+    public int getAltitude() {
+        return altitude;
+    }
+
+    @Transient
+    public int getMetricAltitude() {
+        return metricAltitude;
+    }
+
+    @ManyToOne
+    public PropulsionType getPropulsion() {
+        return metricAltitude;
+    }
+    ...
+}
+
+ at Entity
+ at AttributeOverride( name="altitude", column = @Column(name="fld_altitude") )
+ at AssociationOverride( name="propulsion", joinColumns = @JoinColumn(name="fld_propulsion_fk") )
+public class Plane extends FlyingObject {
+    ...
+}</programlisting>
+
+        <para>La propriété <literal>altitude</literal> sera persistée dans la
+        colonne <literal>fld_altitude</literal> de la table
+        <literal>Plane</literal> et l'association <literal>propulsion</literal>
+        sera matérialisée dans la colonne de clef étrangère
+        <literal>fld_propulsion_fk</literal>.</para>
+
+        <para>Vous pouvez définir <literal>@AttributeOverride</literal>(s) et
+        <literal>@AssociationOverride</literal>(s) sur des classes
+        <literal>@Entity</literal>, des classes
+        <literal>@MappedSuperclass</literal> et des propriétés pointant vers un
+        objet <literal>@Embeddable</literal>.</para>
+      </sect3>
+    </sect2>
+
+    <sect2 id="entity-mapping-association">
+      <title>Mapper des associations/relations d'entity beans</title>
+
+      <sect3>
+        <title>One-to-one</title>
+
+        <para>Vous pouvez associer des entity beans avec une relation one-to-one
+        en utilisant <literal>@OneToOne</literal>. Il y a trois cas pour les
+        associations one-to-one : soit les entités associées partagent les mêmes
+        valeurs de clef primaire, soit une clef étrangère est détenue par une
+        des entités (notez que cette colonne de clef étrangère dans la base de
+        données devrait être avoir une contrainte d'unicité pour simuler la
+        cardinalité one-to-one), soit une table d'association est utilisée pour
+        stocker le lien entre les 2 entités (une contrainte d'unicité doit être
+        définie sur chaque clef étrangère pour assurer la cardinalité un à
+        un).</para>
+
+        <para>Tout d'abord, nous mappons une véritable association one-to-one en
+        utilisant des clefs primaires partagées :</para>
+
+        <programlisting>
+ at Entity
+public class Body {
+    @Id
+    public Long getId() { return id; }
+
+    @OneToOne(cascade = CascadeType.ALL)
+    @PrimaryKeyJoinColumn
+    public Heart getHeart() {
+        return heart;
+    }
+    ...
+}
+            </programlisting>
+
+        <programlisting>
+ at Entity
+public class Heart {
+    @Id
+    public Long getId() { ...}
+}
+            </programlisting>
+
+        <para>L'association un à un est activée en utilisant l'annotation
+        <literal>@PrimaryKeyJoinColumn</literal>.</para>
+
+        <para>Dans l'exemple suivant, les entités associées sont liées à travers
+        une clef étrangère :</para>
+
+        <programlisting>
+ at Entity
+public class Customer implements Serializable {
+    @OneToOne(cascade = CascadeType.ALL)
+    <emphasis role="bold">@JoinColumn(name="passport_fk")</emphasis>
+    public Passport getPassport() {
+        ...
+    }
+
+ at Entity
+public class Passport implements Serializable {
+    @OneToOne(<emphasis role="bold">mappedBy = "passport"</emphasis>)
+    public Customer getOwner() {
+    ...
+}
+            </programlisting>
+
+        <para>Un <classname>Customer</classname> est lié à un
+        <classname>Passport</classname>, avec une colonne de clef étrangère
+        nommée <literal>passport_fk</literal> dans la table
+        <literal>Customer</literal>. La colonne de jointure est déclarée avec
+        l'annotation <literal>@JoinColumn</literal> qui ressemble à l'annotation
+        <literal>@Column</literal>. Elle a un paramètre de plus nommé
+        <literal>referencedColumnName</literal>. Ce paramètre déclare la colonne
+        dans l'entité cible qui sera utilisée pour la jointure. Notez que lors
+        de l'utilisation de <literal>referencedColumnName</literal> vers une
+        colonne qui ne fait pas partie de la clef primaire, la classe associée
+        doit être <classname>Serializable</classname>. Notez aussi que
+        <literal>referencedColumnName</literal> doit être mappé sur une
+        propriété ayant une seule colonne lorsqu'elle pointe vers une colonne
+        qui ne fait pas partie de la clef primaire (d'autres cas pourraient ne
+        pas fonctionnner).</para>
+
+        <para>L'association peut être bidirectionnelle. Dans une relation
+        bidirectionnelle, une des extrémités (et seulement une) doit être la
+        propriétaire : la propriétaire est responsable de la mise à jour des
+        colonnes de l'association. Pour déclarer une extrémité comme
+        <emphasis>non</emphasis> responsable de la relation, l'attribut
+        <literal>mappedBy</literal> est utilisé.
+        <literal>mappedBy</literal> référence le nom de la propriété de
+        l'association du côté du propriétaire. Dans notre cas, c'est
+        <literal>passport</literal>. Comme vous pouvez le voir, vous ne devez
+        (absolument) pas déclarer la colonne de jointure puisqu'elle a déjà été
+        déclarée du côté du propriétaire.</para>
+
+        <para>Si aucune <literal>@JoinColumn</literal> n'est déclarée du côté du
+        propriétaire, les valeurs par défaut s'appliquent. Une(des) colonne(s)
+        de jointure sera(ont) créée(s) dans la table propriétaire, et son(leur)
+        nom sera la concaténation du nom de la relation du côté propriétaire,
+        <keycap>_</keycap> (underscore), et le nom de la (des) colonne(s) de la
+        clef primaire du propriétaire. Dans cet exemple
+        <literal>passport_id</literal> parce que le nom de la propriété est
+        <literal>passport</literal> et la colonne identifiante de
+        <literal>Passport</literal> est <literal>id</literal>.</para>
+
+        <para>La troisième possibilité (utilisant une table d'association) est
+        très exotique.</para>
+
+        <programlisting>
+ at Entity
+public class Customer implements Serializable {
+    @OneToOne(cascade = CascadeType.ALL)
+    <emphasis role="bold">@JoinTable(name = "CustomerPassports"
+        joinColumns = @JoinColumn(name="customer_fk"),
+        inverseJoinColumns = @JoinColumns(name="passport_fk")</emphasis>
+    )
+    public Passport getPassport() {
+        ...
+    }
+
+ at Entity
+public class Passport implements Serializable {
+    @OneToOne(<emphasis role="bold">mappedBy = "passport"</emphasis>)
+    public Customer getOwner() {
+    ...
+}
+            </programlisting>
+
+        <para>Un <classname>Customer</classname> est lié à un
+        <classname>Passport</classname> à travers une table d'association
+        nommée <literal>CustomerPassports</literal> ; cette table d'association
+        a une colonne de clef étrangère nommée <literal>passport_fk</literal>
+        pointant vers la table <literal>Passport</literal> (matérialisée par
+        l'attribut <literal>inverseJoinColumn</literal>), et une colonne de clef
+        étrangère nommée <literal>customer_fk</literal> pointant vers la table
+        <literal>Customer</literal> (matérialisée par l'attribut
+        <literal>joinColumns</literal>).</para>
+
+        <para>Vous devez déclarer le nom de la table de jointure et les colonnes
+        de jointure explicitement dans un tel mapping.</para>
+      </sect3>
+
+      <sect3>
+        <title>Many-to-one</title>
+
+        <para>Les associations Many-to-one sont déclarées au niveau de la
+        propriété avec l'annotation <literal>@ManyToOne</literal> :</para>
+
+        <programlisting>
+ at Entity()
+public class Flight implements Serializable {
+    <emphasis role="bold">@ManyToOne</emphasis>( cascade = {CascadeType.PERSIST, CascadeType.MERGE} )
+    @JoinColumn(name="COMP_ID")
+    public Company getCompany() {
+        return company;
+    }
+    ...
+}
+            </programlisting>
+
+        <para>L'attribut <literal>@JoinColumn</literal> est optionnel, la valeur
+        par défaut est comme l'association un à un, la concaténation du nom
+        de la relation du côté propriétaire, <keycap>_</keycap>
+        (underscore), et le nom de la colonne de la clef primaire du côté
+        propriétaire. Dans cet exemple, <literal>company_id</literal> parce que
+        le nom de la propriété est <literal>company</literal> et la colonne
+        identifiante de Company est <literal>id</literal>.</para>
+
+        <para><literal>@ManyToOne</literal> a un paramètre nommé
+        <literal>targetEntity</literal> qui décrit le nom de l'entité cible.
+        Généralement, vous ne devriez pas avoir besoin de ce paramètre puisque
+        la valeur par défaut (le type de la propriété qui stocke l'association)
+        est correcte dans la plupart des cas. Il est cependant utile lorsque
+        vous souhaitez retourner une interface plutôt qu'une entité
+        normale.</para>
+
+        <programlisting>
+ at Entity()
+public class Flight implements Serializable {
+    @ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE}, <emphasis
+            role="bold">targetEntity=CompanyImpl.class</emphasis> )
+    @JoinColumn(name="COMP_ID")
+    public Company getCompany() {
+        return company;
+    }
+    ...
+}
+
+public interface Company {
+    ...
+            </programlisting>
+
+        <para>Vous pouvez sinon mapper une association plusieurs à un avec une
+        table d'association. Cette association décrite par l'annotation
+        <literal>@JoinTable</literal> contiendra une clef étrangère référençant
+        la table de l'entité (avec
+        <literal>@JoinTable.joinColumns</literal>) et une clef étrangère
+        référençant la table de l'entité cible (avec
+        <literal>@JoinTable.inverseJoinColumns</literal>).</para>
+
+        <programlisting>
+ at Entity()
+public class Flight implements Serializable {
+    @ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE} )
+    <emphasis role="bold">@JoinTable(name="Flight_Company",
+        joinColumns = @JoinColumn(name="FLIGHT_ID"),
+        inverseJoinColumns = @JoinColumns(name="COMP_ID")
+    )</emphasis>
+    public Company getCompany() {
+        return company;
+    }
+    ...
+}
+            </programlisting>
+      </sect3>
+
+      <sect3 id="entity-mapping-association-collections">
+        <title>Collections</title>
+
+        <sect4 id="entity-mapping-association-collections-overview"
+               revision="1">
+          <title>Vue d'ensemble</title>
+
+          <para>Vous pouvez mapper des <classname>Collection</classname>s, des
+          <literal>List</literal>s (ie des listes ordonnées, pas des listes
+          indexées), des <literal>Map</literal>s et des
+          <classname>Set</classname>s. La spécification EJB3 décrit comment
+          mapper une liste ordonnée (ie une liste ordonnée au chargement) en
+          utilisant l'annotation <literal>@javax.persistence.OrderBy</literal> :
+          pour ordonner la collection, cette annotation prend en paramètre une
+          liste de propriétés (de l'entité cible) séparées par des virgules
+          (p. ex. <code>firstname asc, age desc</code>) ; si la chaîne de
+          caractères est vide, la collection sera ordonnée par les identifiants.
+          Pour le moment <literal>@OrderBy</literal> fonctionne seulement sur
+          des collections n'ayant pas de table d'association. Pour les
+          véritables collections indexées, veuillez vous référer à
+          <xref linkend="entity-hibspec" />. EJB3 vous permet de mapper des
+          <literal>Map</literal>s en utilisant comme clef une des propriétés de
+          l'entité cible avec <literal>@MapKey(name="myProperty")</literal>
+          (myProperty est un nom de propriété de l'entité cible). Lorsque vous
+          utilisez <literal>@MapKey</literal> sans nom de propriété, la clef
+          primaire de l'entité cible est utilisée. La clef de la map utilise la
+          même colonne que celle pointée par la propriété : il n'y a pas de
+          colonne supplémentaire définie pour la clef de la map, et c'est normal
+          puisque la clef de la map représente en fait un propriété de la cible.
+          Faites attention qu'une fois chargée, la clef n'est plus synchronisée
+          avec la propriété, en d'autres mots, si vous modifiez la valeur de la
+          propriété, la clef ne sera pas changée automatiquement dans votre
+          modèle Java (pour une véritable prise en charge des maps veuillez vous
+          référer à <xref linkend="entity-hibspec" />). Beaucoup de gens
+          confondent les capacités de <literal>&lt;map&gt;</literal> et celles
+          de <literal>@MapKey</literal>. Ce sont deux fonctionnalités
+          différentes. <literal>@MapKey</literal> a encore quelques limitations,
+          veuillez vous référer au forum ou au système de suivi de bogues JIRA
+          pour plus d'informations.</para>
+
+          <para>Hibernate a plusieurs notions de collections.</para>
+
+          <para></para>
+
+          <table>
+            <title>Sémantique des collections</title>
+
+            <tgroup cols="3">
+              <colspec colname="c1" />
+
+              <colspec colname="c2" />
+
+              <colspec colname="c3" colnum="2" />
+
+              <thead>
+                <row>
+                  <entry>Sémantique</entry>
+
+                  <entry>Représentation Java</entry>
+
+                  <entry>Annotations</entry>
+                </row>
+              </thead>
+
+              <tbody>
+                <row>
+                  <entry>Sémantique de Bag</entry>
+
+                  <entry>java.util.List, java.util.Collection</entry>
+
+                  <entry>@org.hibernate.annotations.CollectionOfElements ou
+                  @OneToMany ou @ManyToMany</entry>
+                </row>
+
+                <row>
+                  <entry>Sémantique de Bag avec une clef primaire (sans les
+                  limitations de la sémantique de Bag)</entry>
+
+                  <entry>java.util.List, java.util.Collection</entry>
+
+                  <entry>(@org.hibernate.annotations.CollectionOfElements ou
+                  @OneToMany ou @ManyToMany) et @CollectionId</entry>
+                </row>
+
+                <row>
+                  <entry>Sémantique de List</entry>
+
+                  <entry>java.util.List</entry>
+
+                  <entry>(@org.hibernate.annotations.CollectionOfElements ou
+                  @OneToMany ou @ManyToMany) et
+                  @org.hibernate.annotations.IndexColumn</entry>
+                </row>
+
+                <row>
+                  <entry>Sémantique de Set</entry>
+
+                  <entry>java.util.Set</entry>
+
+                  <entry>@org.hibernate.annotations.CollectionOfElements ou
+                  @OneToMany ou @ManyToMany</entry>
+                </row>
+
+                <row>
+                  <entry>Sémantique de Map</entry>
+
+                  <entry>java.util.Map</entry>
+
+                  <entry>(@org.hibernate.annotations.CollectionOfElements ou
+                  @OneToMany ou @ManyToMany) et (rien ou
+                  @org.hibernate.annotations.MapKey/MapKeyManyToMany pour une
+                  véritable prise en charge des maps, ou
+                  @javax.persistence.MapKey</entry>
+                </row>
+              </tbody>
+            </tgroup>
+          </table>
+
+          <remark>Donc spécifiquement, les collections java.util.List sans
+          @org.hibernate.annotations.IndexColumn vont être considérées commes
+          des bags.</remark>
+
+          <para>Les collections de types primitifs, de types core ou d'objets
+          embarqués ne sont pas prises en charge par la spécification EJB3.
+          Cependant Hibernate Annotations les autorise
+          (voir <xref linkend="entity-hibspec" />).</para>
+
+          <programlisting>@Entity public class City {
+    @OneToMany(mappedBy="city")
+    <emphasis role="bold">@OrderBy("streetName")</emphasis>
+    public List&lt;Street&gt; getStreets() {
+        return streets;
+    }
+...
+}
+
+ at Entity public class Street {
+    <emphasis role="bold">public String getStreetName()</emphasis> {
+        return streetName;
+    }
+
+    @ManyToOne
+    public City getCity() {
+        return city;
+    }
+    ...
+}
+
+
+ at Entity
+public class Software {
+    @OneToMany(mappedBy="software")
+    <emphasis role="bold">@MapKey(name="codeName")</emphasis>
+    public Map&lt;String, Version&gt; getVersions() {
+        return versions;
+    }
+...
+}
+
+ at Entity
+ at Table(name="tbl_version")
+public class Version {
+    <emphasis role="bold">public String getCodeName()</emphasis> {...}
+
+    @ManyToOne
+    public Software getSoftware() { ... }
+...
+}</programlisting>
+
+          <para>Donc <literal>City</literal> a une collection de
+          <literal>Street</literal>s qui sont ordonnées par
+          <literal>streetName</literal> (de <literal>Street</literal>) lorsque
+          la collection est chargée. <literal>Software</literal> a une map de
+          <literal>Version</literal>s dont la clef est
+          <literal>codeName</literal> de <literal>Version</literal>.</para>
+
+          <para>A moins que la collection soit une "generic", vous devrez
+          définir <literal>targetEntity</literal>. C'est un attribut de
+          l'annotation qui prend comme valeur la classe de l'entité
+          cible.</para>
+        </sect4>
+
+        <sect4 id="entity-mapping-association-collection-onetomany"
+               revision="2">
+          <title>One-to-many</title>
+
+          <para>Les associations one-to-many sont déclarées au niveau propriété
+          avec l'annotation <literal>@OneToMany</literal>. Les associations un
+          à plusieurs peuvent être bidirectionnelles.</para>
+
+          <sect5>
+            <title>Relation bidirectionnelle</title>
+
+            <para>Puisque les associations plusieurs à un sont (presque)
+            toujours l'extrémité propriétaire de la relation bidirectionnelle
+            dans la spécification EJB3, l'association un à plusieurs est
+            annotée par <literal>@OneToMany(mappedBy=...)</literal>.</para>
+
+            <programlisting>@Entity
+public class Troop {
+    @OneToMany(mappedBy="troop")
+    public Set&lt;Soldier&gt; getSoldiers() {
+    ...
+}
+
+ at Entity
+public class Soldier {
+    @ManyToOne
+    @JoinColumn(name="troop_fk")
+    public Troop getTroop() {
+    ...
+}              </programlisting>
+
+            <para><classname>Troop</classname> a une relation bidirectionnelle
+            un à plusieurs avec <literal>Soldier</literal> à travers la
+            propriété <literal>troop</literal>. Vous ne devez pas définir
+            de mapping physique à l'extrémité de
+            <literal>mappedBy</literal>.</para>
+
+            <para>Pour mapper une relation bidirectionnelle un à plusieurs, avec
+            l'extrémité one-to-many comme extrémité propriétaire, vous devez
+            enlever l'élément <literal>mappedBy</literal> et marquer
+            l'annotation <literal>@JoinColumn</literal> de l'extrémité plusieurs
+            à un comme ne pouvant pas être insérée et ni mise à jour. Cette
+            solution n'est certainement pas optimisée et produira quelques
+            commandes UPDATE supplémentaires.</para>
+
+            <programlisting>@Entity
+public class Troop {
+    @OneToMany
+    @JoinColumn(name="troop_fk") // nous avons besoin de dupliquer l'information physique
+    public Set&lt;Soldier&gt; getSoldiers() {
+    ...
+}
+
+ at Entity
+public class Soldier {
+    @ManyToOne
+    @JoinColumn(name="troop_fk", insertable=false, updatable=false)
+    public Troop getTroop() {
+    ...
+}</programlisting>
+          </sect5>
+
+          <sect5>
+            <title>Relation unidirectionnelle</title>
+
+            <para>Une relation un à plusieurs unidirectionnelle utilisant une
+            colonne de clef étrangère de l'entité propriétaire n'est pas si
+            commune, réellement recommandée. Nous vous conseillons
+            fortement d'utiliser une table de jointure pour cette sorte
+            d'association (comme expliqué dans la prochaine section). Cette
+            sorte d'association est décrite à travers
+            <literal>@JoinColumn</literal>.</para>
+
+            <programlisting>
+ at Entity
+public class Customer implements Serializable {
+    @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
+    @JoinColumn(name="CUST_ID")
+    public Set&lt;Ticket&gt; getTickets() {
+    ...
+}
+
+ at Entity
+public class Ticket implements Serializable {
+    ... // pas de relation bidirectionnelle
+}
+               </programlisting>
+
+            <para><literal>Customer</literal> décrit une relation
+            unidirectionnelle avec <literal>Ticket</literal> en utilisant la
+            colonne de jointure <literal>CUST_ID</literal>.</para>
+          </sect5>
+
+          <sect5>
+            <title>Relation unidirectionnel avec une table de jointure</title>
+
+            <para>Une relation unidirectionnelle un à plusieurs avec une table
+            de jointure est largement préférée. Cette association est décrite
+            à travers l'annotation <literal>@JoinTable</literal>.</para>
+
+            <programlisting>
+ at Entity
+public class Trainer {
+    @OneToMany
+    @JoinTable(
+            name="TrainedMonkeys",
+            joinColumns = { @JoinColumn( name="trainer_id") },
+            inverseJoinColumns = @JoinColumn( name="monkey_id")
+    )
+    public Set&lt;Monkey&gt; getTrainedMonkeys() {
+    ...
+}
+
+ at Entity
+public class Monkey {
+    ... // pas de relation bidirectionnelle
+}
+               </programlisting>
+
+            <para><literal>Trainer</literal> décrit une relation
+            unidirectionelle avec <classname>Monkey</classname> en utilisant la
+            table de jointure <classname>TrainedMonkeys</classname>, avec une
+            clef étrangère <literal>trainer_id</literal> vers
+            <literal>Trainer</literal> (<literal>joinColumns</literal>) et une
+            clef étrangère <literal>monkey_id</literal> vers
+            <literal>Monkey</literal>
+            (<literal>inversejoinColumns</literal>).</para>
+          </sect5>
+
+          <sect5 id="entity-mapping-association-collection-manytomany-default"
+                 revision="1">
+            <title>Valeurs par défaut</title>
+
+            <para>Si aucun mapping physique n'est déclaré, une relation
+            unidirectionnelle un vers plusieurs utilise une table de jointure.
+            Le nom de la table est la concaténation du nom de la table
+            propriétaire, <keycap>_</keycap>, et le nom de la table de l'autre
+            extrémité. Le nom des colonnes de la clef étrangère référençant la
+            table propriétaire est la concaténation de la table propriétaire,
+            <keycap>_</keycap>, et le nom des colonnes de la clef primaire. Le
+            nom des colonnes de la clef étrangère référençant l'autre extrémité
+            est la concaténation du nom de la propriété du propriétaire,
+            <keycap>_</keycap>, et le nom des colonnes de la clef primaire de
+            l'autre extrémité. Une contrainte d'unicité est ajoutée sur la
+            clef étrangère référençant la table de l'autre extrémité pour
+            réfléter le un à plusieurs.</para>
+
+            <programlisting>
+ at Entity
+public class Trainer {
+    @OneToMany
+    public Set&lt;Tiger&gt; getTrainedTigers() {
+    ...
+}
+
+ at Entity
+public class Tiger {
+    ... // non bidirectionnelle
+}
+               </programlisting>
+
+            <para><classname>Trainer</classname> décrit une relation
+            unidirectionnelle avec <classname>Tiger</classname> utilisant la
+            table de jointure <literal>Trainer_Tiger</literal>, avec une clef
+            étrangère <literal>trainer_id</literal> vers
+            <literal>Trainer</literal> (nom de la table, <keycap>_</keycap>,
+            identifiant de trainer) et une clef étrangère
+            <literal>trainedTigers_id</literal> vers <literal>Monkey</literal>
+            (nom de la propriété, <keycap>_</keycap>, colonne de la clef
+            primaire de Tiger).</para>
+          </sect5>
+        </sect4>
+
+        <sect4 id="eentity-mapping-association-collection-manytomany"
+               revision="">
+          <title>Many-to-many</title>
+
+          <sect5>
+            <title>Définition</title>
+
+            <para>Une association many-to-many est définie logiquement en
+            utilisant l'annotation <literal>@ManyToMany</literal>. Vous devez
+            aussi décrire la table d'association et les conditions de jointure
+            en utilisant l'annotation <literal>@JoinTable</literal>. Si
+            l'association est bidirectionnelle, une extrémité doit être la
+            propriétaire et l'autre doit être marquée comme "inverse" (ie
+            qu'elle sera ignorée lors de la mise à jour des valeurs de la
+            relation dans la table d'association) :</para>
+
+            <programlisting>
+ at Entity
+public class Employer implements Serializable {
+    @ManyToMany(
+        targetEntity=org.hibernate.test.metadata.manytomany.Employee.class,
+        cascade={CascadeType.PERSIST, CascadeType.MERGE}
+    )
+    @JoinTable(
+        name="EMPLOYER_EMPLOYEE",
+        joinColumns={@JoinColumn(name="EMPER_ID")},
+        inverseJoinColumns={@JoinColumn(name="EMPEE_ID")}
+    )
+    public Collection getEmployees() {
+        return employees;
+    }
+    ...
+}
+               </programlisting>
+
+            <programlisting>
+ at Entity
+public class Employee implements Serializable {
+    @ManyToMany(
+        cascade={CascadeType.PERSIST, CascadeType.MERGE},
+        mappedBy="employees"
+        targetEntity=Employer.class
+    )
+    public Collection getEmployers() {
+        return employers;
+    }
+}
+               </programlisting>
+
+            <para>Nous avons déjà montré les déclarations des relations
+            "many" et détaillé les attributs de ces associations. Allons
+            plus en profondeur dans la description de
+            <literal>@JoinTable</literal> ; elle définit un
+            <literal>name</literal>, un tableau de colonnes de jointure (un
+            tableau dans une annotation est défini par {A, B, C}), et un tableau
+            de colonnes de jointure inverse. Ces dernières sont les colonnes
+            de la table d'association qui référencent la clef primaire de
+            <classname>Employee</classname> ("l'autre extrémité").</para>
+
+            <para>Comme vu précédemment, l'autre extrémité ne doit pas décrire
+            le mapping physique : un simple argument
+            <literal>mappedBy</literal> contenant le nom de la propriété de
+            l'extrémité propriétaire suffit à relier les deux.</para>
+          </sect5>
+
+          <sect5>
+            <title>Valeurs par défaut</title>
+
+            <para>Comme d'autres annotations, la plupart des valeurs d'une
+            relation plusieurs à plusieurs sont inférées. Si aucun mapping
+            physique n'est décrit dans une relation plusieurs à plusieurs
+            unidirectionnelle, alors les règles suivantes s'appliquent. Le nom
+            de la table est la concaténation du nom de la table propriétaire,
+            <keycap>_</keycap> et le nom de la table de l'autre extrémité. Le
+            nom des colonnes de la clef étrangère référençant la table
+            propriétaire est la concaténation du nom de la table propriétaire,
+            <keycap>_</keycap> et le nom des colonnes de la clef primaire
+            de cette table. Le nom des colonnes de la clef étrangère référençant
+            l'autre extrémité est la concaténation du nom de la propriété du
+            propriétaire, <keycap>_</keycap> et le nom des colonnes de la
+            clef primaire de l'autre extrémité. Ce sont les mêmes règles que
+            celles utilisées pour une relation un à plusieurs
+            unidirectionnelle.</para>
+
+            <programlisting>
+ at Entity
+public class Store {
+    @ManyToMany(cascade = CascadeType.PERSIST)
+    public Set&lt;City&gt; getImplantedIn() {
+        ...
+    }
+}
+
+ at Entity
+public class City {
+    ... // pas de relation bidirectionnelle
+}
+               </programlisting>
+
+            <para>La table <literal>Store_City</literal> est utilisée comme
+            table de jointure. La colonne <literal>Store_id</literal> est
+            une clef étrangère vers la table <literal>Store</literal>. La
+            colonne <literal>implantedIn_id</literal> est une clef étrangère
+            vers la table <literal>City</literal>.</para>
+
+            <para>Si aucun mapping physique n'est décrit dans une relation
+            plusieurs à plusieurs bidirectionnelle, alors les règles suivantes
+            s'appliquent. Le nom de la table est la concaténation du nom de la
+            table propriétaire, <keycap>_</keycap> et le nom de la table de
+            l'autre extrémité. Le nom des colonnes de la clef étrangère
+            référençant la table propriétaire est la concaténation du nom de la
+            propriété de l'autre extrémité, <keycap>_</keycap> et le nom des
+            colonnes de la clef primaire du propriétaire. Le nom des colonnes de
+            la clef étrangère référençant l'autre extrémité est la concaténation
+            du nom de la propriété du propriétaire, <keycap>_</keycap> et le nom
+            des colonnes de la clef primaire de l'autre extrémité. Ce sont les
+            mêmes règles que celles utilisées pour une relation un à plusieurs
+            unidirectionnelle.</para>
+
+            <programlisting>
+ at Entity
+public class Store {
+    @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
+    public Set&lt;Customer&gt; getCustomers() {
+        ...
+    }
+}
+
+ at Entity
+public class Customer {
+    @ManyToMany(mappedBy="customers")
+    public Set&lt;Store&gt; getStores() {
+        ...
+    }
+}
+               </programlisting>
+
+            <para>La table <literal>Store_Customer</literal> est utilisée comme
+            table de jointure. La colonne <literal>stores_id</literal> est une
+            clef étrangère vers la table <literal>Store</literal>. La colonne
+            <literal>customers_id</literal> est une clef étrangère vers la table
+            <literal>Customer</literal>.</para>
+          </sect5>
+        </sect4>
+      </sect3>
+
+      <sect3>
+        <title>Persistance transitive avec les opérations en cascade</title>
+
+        <para>Vous avez probablement remarqué l'attribut
+        <literal>cascade</literal> prenant comme valeur un tableau de
+        <classname>CascadeType</classname>s. Le concept de cascade dans EJB3 est
+        similaire à la persistance transitive et les opérations en cascade dans
+        Hibernate, mais avec une sémantique légèrement différente et les types
+        de cascade suivants :</para>
+
+        <itemizedlist>
+          <listitem>
+             CascadeType.PERSIST : effectue en cascade l'opération de
+             persistance (création) sur les entités associées si persist() est
+             appelée ou si l'entité est supervisée (par le gestionnaire
+             d'entités)
+          </listitem>
+
+          <listitem>
+             CascadeType.MERGE : effectue en cascade l'opération de fusion sur
+             les entités associées si merge() est appélée ou si l'entité est
+             supervisée
+          </listitem>
+
+          <listitem>
+             CascadeType.REMOVE : effectue en cascade l'opération de
+             suppression sur les entités associées si delete() est appelée
+          </listitem>
+
+          <listitem>
+             CascadeType.REFRESH : effectue en cascade l'opération de
+             rafraîchissement sur les entités associées si refresh() est appelée
+          </listitem>
+
+          <listitem>
+             CascadeType.ALL : tous ceux du dessus
+          </listitem>
+        </itemizedlist>
+
+        <para>Veullez vous référer au chapitre 6.3 de la spécification EJB3 pour
+        plus d'informations sur les opérations en cascade et la sémantique des
+        opérations de création/fusion.</para>
+      </sect3>
+
+      <sect3>
+        <title>Récupération d'associations</title>
+
+        <para>Vous avez la possibilité de récupérer les entités associées soit
+        immédiatement ("eager"), soit à la demande ("lazy"). Le paramètre
+        <literal>fetch</literal> peut être positionné à
+        <literal>FetchType.LAZY</literal> ou à
+        <literal>FetchType.EAGER</literal>. <literal>EAGER</literal> essaiera
+        d'utiliser une jointure externe pour rappatrier l'objet associé,
+        alors que <literal>LAZY</literal> est la valeur par défaut et rapportera
+        les données lorsque l'objet associé sera accédé pour la première fois.
+        JPA-QL a aussi un mot clef <literal>fetch</literal> qui vous permet de
+        surcharger le type de récupération pour une requête particulière. C'est
+        très utile pour améliorer les performances et décider au cas par
+        cas.</para>
+      </sect3>
+    </sect2>
+
+    <sect2>
+      <title>Mapper des clefs primaires et étrangères composées</title>
+
+      <para>Les clefs primaires composées utilisent une classe embarquée comme
+      représentation de la clef primaire, donc vous devriez utiliser les
+      annotations <literal>@Id</literal> et <literal>@Embeddable</literal>.
+      Alternativement, vous pouvez utiliser l'annotation
+      <literal>@EmbeddedId</literal>. Notez que la classe dépendante doit être
+      sérialisable et implementer
+      <methodname>equals()</methodname>/<methodname>hashCode()</methodname>.
+      Vous pouvez aussi utiliser <literal>@IdClass</literal> comme décrit dans
+      <xref linkend="entity-mapping-identifier" />.</para>
+
+      <programlisting>
+ at Entity
+public class RegionalArticle implements Serializable {
+
+    @Id
+    public RegionalArticlePk getPk() { ... }
+}
+
+ at Embeddable
+public class RegionalArticlePk implements Serializable { ... }
+         </programlisting>
+
+      <para>ou alternativement</para>
+
+      <programlisting>
+ at Entity
+public class RegionalArticle implements Serializable {
+
+    @EmbeddedId
+    public RegionalArticlePk getPk() { ... }
+}
+
+public class RegionalArticlePk implements Serializable { ... }
+         </programlisting>
+
+      <para><literal>@Embeddable</literal> hérite le type d'accès de son entité
+      d'appartenance à moins que l'annotation spécifique Hibernate
+      <literal>@AccessType</literal> soit utilisée. Les clefs étrangères
+      composées (si les valeurs par défaut ne sont pas utilisées) sont définies
+      sur les associations en utilisant l'élément
+      <literal>@JoinColumns</literal>, lequel est simplement un tableau de
+      <literal>@JoinColumn</literal>s. Il est considéré comme une bonne pratique
+      d'exprimer <literal>referencedColumnNames</literal> explicitement. Sinon,
+      Hibernate supposera que vous utilisez le même ordre de colonnes que dans
+      la déclaration de la clef primaire.</para>
+
+      <programlisting>
+ at Entity
+public class Parent implements Serializable {
+    @Id
+    public ParentPk id;
+    public int age;
+
+    @OneToMany(cascade=CascadeType.ALL)
+    @JoinColumns ({
+        @JoinColumn(name="parentCivility", referencedColumnName = "isMale"),
+        @JoinColumn(name="parentLastName", referencedColumnName = "lastName"),
+        @JoinColumn(name="parentFirstName", referencedColumnName = "firstName")
+    })
+    public Set&lt;Child&gt; children; //unidirectionnelle
+    ...
+}
+         </programlisting>
+
+      <programlisting>
+ at Entity
+public class Child implements Serializable {
+    @Id @GeneratedValue
+    public Integer id;
+
+    @ManyToOne
+    @JoinColumns ({
+        @JoinColumn(name="parentCivility", referencedColumnName = "isMale"),
+        @JoinColumn(name="parentLastName", referencedColumnName = "lastName"),
+        @JoinColumn(name="parentFirstName", referencedColumnName = "firstName")
+    })
+    public Parent parent; // unidirectionnelle
+}
+         </programlisting>
+
+      <programlisting>
+ at Embeddable
+public class ParentPk implements Serializable {
+    String firstName;
+    String lastName;
+    ...
+}
+         </programlisting>
+
+      <para>Notez l'usage explicite de
+      <literal>referencedColumnName</literal>.</para>
+    </sect2>
+
+    <sect2>
+      <title>Mapper des tables secondaires</title>
+
+      <para>Vous pouvez mapper un simple entity bean vers plusieurs tables en
+      utilisant les annotations de niveau classe
+      <literal>@SecondaryTable</literal> ou
+      <literal>@SecondaryTables</literal>. Pour dire qu'une colonne est dans
+      une table particulière, utlisez le paramètre <literal>table</literal> de
+      <literal>@Column</literal> ou <literal>@JoinColumn</literal>.</para>
+
+      <programlisting>
+ at Entity
+ at Table(name="MainCat")
+<emphasis role="bold">@SecondaryTables({
+    @SecondaryTable(name="Cat1", pkJoinColumns={
+        @PrimaryKeyJoinColumn(name="cat_id", referencedColumnName="id")
+    ),
+    @SecondaryTable(name="Cat2", uniqueConstraints={@UniqueConstraint(columnNames={"storyPart2"})})
+})</emphasis>
+public class Cat implements Serializable {
+
+    private Integer id;
+    private String name;
+    private String storyPart1;
+    private String storyPart2;
+
+    @Id @GeneratedValue
+    public Integer getId() {
+        return id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    <emphasis role="bold">@Column(table="Cat1")</emphasis>
+    public String getStoryPart1() {
+        return storyPart1;
+    }
+
+    <emphasis role="bold">@Column(table="Cat2")</emphasis>
+    public String getStoryPart2() {
+        return storyPart2;
+    }
+</programlisting>
+
+      <para>Dans cet exemple, <literal>name</literal> sera dans
+      <literal>MainCat</literal>. <literal>storyPart1</literal> sera dans
+      <literal>Cat1</literal> et <literal>storyPart2</literal> sera dans
+      <literal>Cat2</literal>. <literal>Cat1</literal> sera joint à
+      <literal>MainCat</literal> avec <literal>cat_id</literal> comme clef
+      étrangère, et <literal>Cat2</literal> avec <literal>id</literal> (ie
+      le même nom de colonne que la colonne identifiante de
+      <literal>MainCat</literal>). De plus, une contrainte d'unicité sur
+      <literal>storyPart2</literal> a été renseignée.</para>
+
+      <para>Regardez le tutoriel EJB3 de JBoss ou la suite de tests
+      unitaires d'Hibernate Annotations pour plus d'exemples.</para>
+    </sect2>
+  </sect1>
+
+  <sect1 id="entity-mapping-query">
+    <title>Mapper des requêtes</title>
+
+    <sect2 id="entity-mapping-query-hql"
+           revision="1">
+      <title>Mapper des requêtes JPAQL/HQL</title>
+
+      <para>Vous pouvez mapper des requêtes JPA-QL/HQL en utilisant les
+      annotations. <literal>@NamedQuery</literal> et
+      <literal>@NamedQueries</literal> peuvent être définies au niveau de la
+      classe ou dans un fichier JPA XML. Cependant, leurs définitions sont
+      globales au scope de la session factory/entity manager factory. Une
+      requête nommée est définie par son nom et la chaîne de caractères de la
+      requête réelle.</para>
+
+      <programlisting>&lt;entity-mappings&gt;
+    &lt;named-query name="plane.getAll"&gt;
+        &lt;query&gt;select p from Plane p&lt;/query&gt;
+    &lt;/named-query&gt;
+    ...
+&lt;/entity-mappings&gt;
+...
+
+ at Entity
+ at NamedQuery(name="night.moreRecentThan", query="select n from Night n where n.date &gt;= :date")
+public class Night {
+    ...
+}
+
+public class MyDao {
+    doStuff() {
+        Query q = s.getNamedQuery("night.moreRecentThan");
+        q.setDate( "date", aMonthAgo );
+        List results = q.list();
+        ...
+    }
+    ...
+}
+        </programlisting>
+
+      <para>Vous pouvez aussi fournir des indications de fonctionnement à une
+      requête à travers un tableau de <literal>QueryHint</literal>s avec
+      l'attribut <literal>hints</literal>.</para>
+
+      <para>Les indications de fonctionnement Hibernate disponibles
+      sont :</para>
+
+      <para></para>
+
+      <table>
+        <title>Indications de fonctionnement d'une requête</title>
+
+        <tgroup cols="2">
+          <thead>
+            <colspec colname="c1" />
+
+            <colspec colname="c2" colnum="2" />
+
+            <row>
+              <entry>Indication</entry>
+
+              <entry colname="c2">description</entry>
+            </row>
+          </thead>
+
+          <tbody>
+            <row>
+              <entry>org.hibernate.cacheable</entry>
+
+              <entry>Indique si la requête devrait interagir avec le cache de
+              second niveau (par défaut à false)</entry>
+            </row>
+
+            <row>
+              <entry>org.hibernate.cacheRegion</entry>
+
+              <entry>Nom de la région du cache (si indéfinie, la valeur par
+              défaut est utilisée)</entry>
+            </row>
+
+            <row>
+              <entry>org.hibernate.timeout</entry>
+
+              <entry>Timeout des requêtes</entry>
+            </row>
+
+            <row>
+              <entry>org.hibernate.fetchSize</entry>
+
+              <entry>Taille des result sets par fetch</entry>
+            </row>
+
+            <row>
+              <entry>org.hibernate.flushMode</entry>
+
+              <entry>Mode de flush utilisé pour cette requête</entry>
+            </row>
+
+            <row>
+              <entry>org.hibernate.cacheMode</entry>
+
+              <entry>Mode de cache utilisé pour cette requête</entry>
+            </row>
+
+            <row>
+              <entry>org.hibernate.readOnly</entry>
+
+              <entry>Indique si les entités chargées par cette requête devraient
+              être en lecture seule ou pas (par défaut à false)</entry>
+            </row>
+
+            <row>
+              <entry>org.hibernate.comment</entry>
+
+              <entry>Commentaire de la requête, ajouté au SQL généré</entry>
+            </row>
+          </tbody>
+        </tgroup>
+      </table>
+    </sect2>
+
+    <sect2 id="entity-mapping-query-native" revision="2">
+      <title>Mapper des requêtes natives</title>
+
+      <para>Vous pouvez aussi mapper une requête native (ie une requête SQL).
+      Pour ce faire, vous devez décrire la structure de l'ensemble de résultat
+      SQL en utilisant <literal>@SqlResultSetMapping</literal> (ou
+      <literal>@SqlResultSetMappings</literal> si vous prévoyez de définir
+      plusieurs mappings de résultats). Comme <literal>@NamedQuery</literal>, un
+      <literal>@SqlResultSetMapping</literal> peut être défini au niveau de la
+      classe ou dans un fichier XML JPA. Cependant sa portée est globale à
+      l'application.</para>
+
+      <para>Comme vous le verrez, un paramètre de
+      <literal>resultSetMapping</literal> est défini dans
+      <literal>@NamedNativeQuery</literal>, il représente le nom du
+      <literal>@SqlResultSetMapping</literal> défini. Le mapping de l'ensemble
+      des résultats déclare les entités récupérées par cette requête native.
+      Chaque champ de l'entité est lié à un alias SQL (nom de colonne). Tous les
+      champs de l'entité (dont ceux des classes filles) et les colonnes des
+      clefs étrangères relatives aux entités doivent être présents dans la
+      requête SQL. Les définitions des champs sont optionnelles, si elles ne
+      sont pas fournies, elles mappent le même nom de colonne que celui déclaré
+      sur la propriété de la classe.</para>
+
+      <para><programlisting>@NamedNativeQuery(name="night&amp;area", query="select night.id nid, night.night_duration, "
+    + " night.night_date, area.id aid, night.area_id, area.name "
+    + "from Night night, Area area where night.area_id = area.id", <emphasis
+            role="bold">resultSetMapping="joinMapping"</emphasis>)
+ at SqlResultSetMapping(name="joinMapping", entities={
+    @EntityResult(entityClass=org.hibernate.test.annotations.query.Night.class, fields = {
+        @FieldResult(name="id", column="nid"),
+        @FieldResult(name="duration", column="night_duration"),
+        @FieldResult(name="date", column="night_date"),
+        @FieldResult(name="area", column="area_id"),
+        discriminatorColumn="disc"
+    }),
+    @EntityResult(entityClass=org.hibernate.test.annotations.query.Area.class, fields = {
+        @FieldResult(name="id", column="aid"),
+        @FieldResult(name="name", column="name")
+    })
+    }
+)</programlisting></para>
+
+      <para>Dans l'exemple ci-dessus, la requête nommée
+      <literal>night&amp;area</literal> utilise le mapping de résultats
+      <literal>joinMapping</literal>. Ce mapping retourne 2 entités,
+      <literal>Night</literal> et <literal>Area</literal>, chaque propriété est
+      déclarée et associée à un nom de colonne, en fait le nom de colonne
+      récupéré par la requête. Voyons maintenant une déclaration implicite de
+      mapping propriété/colonne.</para>
+
+      <programlisting>@Entity
+<emphasis role="bold">@SqlResultSetMapping(name="implicit", entities=@EntityResult(entityClass=org.hibernate.test.annotations.query.SpaceShip.class))
+ at NamedNativeQuery(name="implicitSample", query="select * from SpaceShip", resultSetMapping="implicit")</emphasis>
+public class SpaceShip {
+    private String name;
+    private String model;
+    private double speed;
+
+    @Id
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    @Column(name="model_txt")
+    public String getModel() {
+        return model;
+    }
+
+    public void setModel(String model) {
+        this.model = model;
+    }
+
+    public double getSpeed() {
+        return speed;
+    }
+
+    public void setSpeed(double speed) {
+        this.speed = speed;
+    }
+}</programlisting>
+
+      <para>Dans cet exemple, nous décrivons seulement le membre de l'entité du
+      mapping de résultats. Le mapping de propriété/colonne est fait en
+      utilisant les valeurs de mapping de l'entité. Dans ce cas, la propriété
+      <literal>model</literal> est liée à la colonne
+      <literal>model_txt</literal>. Si l'association à une entité concernée
+      implique une clef primaire composée, un élément
+      <literal>@FieldResult</literal> devrait être utilisé pour chaque colonne
+      de la clef étrangère. Le nom de <literal>@FieldResult</literal> est
+      composé du nom de la propriété pour la relation, suivi par un point ("."),
+      suivi par le nom ou le champ ou la propriété de la clef primaire.</para>
+
+      <programlisting>@Entity
+ at SqlResultSetMapping(name="compositekey",
+        entities=@EntityResult(entityClass=org.hibernate.test.annotations.query.SpaceShip.class,
+            fields = {
+                    @FieldResult(name="name", column = "name"),
+                    @FieldResult(name="model", column = "model"),
+                    @FieldResult(name="speed", column = "speed"),
+<emphasis role="bold">                    @FieldResult(name="captain.firstname", column = "firstn"),
+                    @FieldResult(name="captain.lastname", column = "lastn"),</emphasis>
+                    @FieldResult(name="dimensions.length", column = "length"),
+                    @FieldResult(name="dimensions.width", column = "width")
+                    }),
+        columns = { @ColumnResult(name = "surface"),
+                    @ColumnResult(name = "volume") } )
+
+ at NamedNativeQuery(name="compositekey",
+    query="select name, model, speed, lname as lastn, fname as firstn, length, width, length * width as surface from SpaceShip",
+    resultSetMapping="compositekey")
+} )
+public class SpaceShip {
+    private String name;
+    private String model;
+    private double speed;
+    private Captain captain;
+    private Dimensions dimensions;
+
+    @Id
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    @ManyToOne(fetch= FetchType.LAZY)
+    @JoinColumns( {
+            @JoinColumn(name="fname", referencedColumnName = "firstname"),
+            @JoinColumn(name="lname", referencedColumnName = "lastname")
+            } )
+    public Captain getCaptain() {
+        return captain;
+    }
+
+    public void setCaptain(Captain captain) {
+        this.captain = captain;
+    }
+
+    public String getModel() {
+        return model;
+    }
+
+    public void setModel(String model) {
+        this.model = model;
+    }
+
+    public double getSpeed() {
+        return speed;
+    }
+
+    public void setSpeed(double speed) {
+        this.speed = speed;
+    }
+
+    public Dimensions getDimensions() {
+        return dimensions;
+    }
+
+    public void setDimensions(Dimensions dimensions) {
+        this.dimensions = dimensions;
+    }
+}
+
+ at Entity
+ at IdClass(Identity.class)
+public class Captain implements Serializable {
+    private String firstname;
+    private String lastname;
+
+    @Id
+    public String getFirstname() {
+        return firstname;
+    }
+
+    public void setFirstname(String firstname) {
+        this.firstname = firstname;
+    }
+
+    @Id
+    public String getLastname() {
+        return lastname;
+    }
+
+    public void setLastname(String lastname) {
+        this.lastname = lastname;
+    }
+}
+</programlisting>
+
+      <note>
+        <para>Si vous regardez la propriété dimension, vous verrez qu'Hibernate
+        prend en charge la notation avec les points pour les objets embarqués
+        (vous pouvez même avoir des objets embarqués imbriqués). Les
+        implémentations EJB3 n'ont pas à prendre en charge cette fonctionnalité,
+        mais nous le faisons :-)</para>
+      </note>
+
+      <para>Si vous récupérez une simple entité et si vous utilisez le mapping
+      par défaut, vous pouvez utiliser l'attribut <literal>resultClass</literal>
+      à la place de <literal>resultSetMapping</literal> :</para>
+
+      <programlisting><emphasis role="bold">@NamedNativeQuery(name="implicitSample", query="select * from SpaceShip",
+    resultClass=SpaceShip.class)</emphasis>
+public class SpaceShip {</programlisting>
+
+      <para>Dans certaines de vos requêtes natives, vous devrez retourner des
+      valeurs scalaires, par exemple lors de la construction de requêtes de
+      rapport. Vous pouvez les mapper dans
+      <literal>@SqlResultsetMapping</literal> avec
+      <literal>@ColumnResult</literal>. En fait, vous pouvez même mélanger des
+      retours d'entités et de valeurs scalaires dans la même requête native (ce
+      n'est cependant probablement pas commun).</para>
+
+      <programlisting><emphasis role="bold">@SqlResultSetMapping(name="scalar", columns=@ColumnResult(name="dimension"))
+ at NamedNativeQuery(name="scalar", query="select length*width as dimension from SpaceShip", resultSetMapping="scalar")</emphasis></programlisting>
+
+      <para>Une autre indication de fonctionnement spécifique aux requêtes
+      natives a été présentée : <literal>org.hibernate.callable</literal>
+      laquelle peut être à true ou à false fausse selon que la requête est une
+      procédure stockée ou pas.</para>
+    </sect2>
+  </sect1>
+
+  <sect1 id="entity-hibspec" xreflabel="Extensions d'Hibernate Annotation">
+    <title>Extensions d'Hibernate Annotation</title>
+
+    <para>Hibernate 3.1 offre une variété d'annotations supplémentaires que vous
+    pouvez mélanger/faire correspondre avec des entités EJB3. Elles ont été
+    conçues comme une extension naturelle aux annotations EJB3.</para>
+
+    <para>Pour aller plus loin que les capacités d'EJB3, Hibernate fournit des
+    annotations spécifiques qui correspondent aux fonctionnalités d'Hibernate.
+    Le package <classname>org.hibernate.annotations</classname> contient toutes
+    ces extensions d'annotations.</para>
+
+    <sect2 id="entity-hibspec-entity" revision="2">
+      <title>Entité</title>
+
+      <para>Vous pouvez finement paramétrer certaines des actions faites par
+      Hibernate sur les entités au-delà de ce qu'offre la spécification
+      EJB3.</para>
+
+      <para><classname>@org.hibernate.annotations.Entity</classname> ajoute des
+      méta-données supplémentaires qui peuvent être nécessaires au-delà de ce
+      qui est défini dans l'annotation <literal>@Entity</literal>
+      standard :<itemizedlist>
+          <listitem>
+             mutable : indique si l'entité est modifiable ou non
+          </listitem>
+
+          <listitem>
+             dynamicInsert : autorise le SQL dynamique pour les insertions
+          </listitem>
+
+          <listitem>
+             dynamicUpdate : autorise le SQL dynamique pour les mise à jour
+          </listitem>
+
+          <listitem>
+             selectBeforeUpdate : spécifie qu'Hibernate ne devrait jamais
+             exécuter un UPDATE SQL à moins qu'il ne soit certain qu'un objet
+             est réellement modifié
+          </listitem>
+
+          <listitem>
+             polymorphism : indique si le polymorphisme d'entité est de type
+             PolymorphismType.IMPLICIT (valeur par défaut) ou
+             PolymorphismType.EXPLICIT
+          </listitem>
+
+          <listitem>
+             persister : autorise la surcharge de l'implémentation de
+             persistance fournie par défaut
+          </listitem>
+
+          <listitem>
+             optimisticLock : stratégie de verrouillage optmiste
+             (OptimisticLockType.VERSION,
+             OptimisticLockType.NONE, OptimisticLockType.DIRTY ou
+             OptimisticLockType.ALL)
+          </listitem>
+        </itemizedlist></para>
+
+      <para><note>
+          <para>@javax.persistence.Entity est encore obligatoire,
+          @org.hibernate.annotations.Entity ne la remplace pas.</para>
+        </note></para>
+
+      <para>Voici quelques extensions d'annotations Hibernate
+      supplémentaires.</para>
+
+      <para><literal>@org.hibernate.annotations.BatchSize</literal> vous permet
+      de définir la taille du batch lors de la récupération d'instances de
+      cette entité (p. ex. <literal>@BatchSize(size=4)</literal>). Lors du
+      chargement d'une entité donnée, Hibernate chargera alors toutes les
+      entités non initialisées du même type dans le contexte de la persistance
+      jusqu'à la taille du batch.</para>
+
+      <para><literal>@org.hibernate.annotations.Proxy</literal> définit les
+      attributs de chargement de l'entité. lazy (valeur par défaut) définit si
+      la classe est chargée à la demande ou non. proxyClassName est l'interface
+      utilisée pour générer le proxy (par défaut, la classe elle-même).</para>
+
+      <para><literal>@org.hibernate.annotations.Where</literal> définit une
+      clause WHERE SQL optionnelle utilisée lorsque des instances de cette
+      classe sont récupérées.</para>
+
+      <para><literal>@org.hibernate.annotations.Check</literal> déclare une
+      contrainte de vérification optionnelle définie dans l'expression
+      DDL.</para>
+
+      <para><literal>@OnDelete(action=OnDeleteAction.CASCADE)</literal> sur des
+      classes filles jointes : utilise une commande SQL DELETE en cascade lors
+      de la suppression plutôt que le mécanisme habituel d'Hibernate.</para>
+
+      <para><literal>@Table(appliesTo="tableName", indexes = {
+      @Index(name="index1", columnNames={"column1", "column2"} ) } )</literal>
+      crée les index définis sur les colonnes de la table
+      <literal>tableName</literal>. Cela peut s'appliquer sur une table primaire
+      ou une table secondaire. L'annotation <literal>@Tables</literal> vous
+      permet d'avoir des index sur des tables différentes. Cette annotation est
+      attendue là où <literal>@javax.persistence.Table</literal> ou
+      <literal>@javax.persistence.SecondaryTable</literal>(s) sont
+      déclarées.</para>
+
+      <note>
+        <para><literal>@org.hibernate.annotations.Table</literal> est un
+        complément, pas un remplacement de
+        <literal>@javax.persistence.Table</literal>. Surtout, si vous souhaitez
+        changer le nom par défaut d'une table, vous devez utiliser
+        <literal>@javax.persistence.Table</literal>, pas
+        <literal>@org.hibernate.annotations.Table</literal>.</para>
+      </note>
+
+      <para><programlisting>@Entity
+ at BatchSize(size=5)
+ at org.hibernate.annotations.Entity(
+        selectBeforeUpdate = true,
+        dynamicInsert = true, dynamicUpdate = true,
+        optimisticLock = OptimisticLockType.ALL,
+        polymorphism = PolymorphismType.EXPLICIT)
+ at Where(clause="1=1")
+ at org.hibernate.annotations.Table(name="Forest", indexes = { @Index(name="idx", columnNames = { "name", "length" } ) } )
+public class Forest { ... }</programlisting><programlisting>@Entity
+ at Inheritance(
+    strategy=InheritanceType.JOINED
+)
+public class Vegetable { ... }
+
+ at Entity
+ at OnDelete(action=OnDeleteAction.CASCADE)
+public class Carrot extends Vegetable { ... }</programlisting></para>
+    </sect2>
+
+    <sect2 id="entity-hibspec-identifier" revision="1">
+      <title>Identifiant</title>
+
+      <para><literal>@org.hibernate.annotations.GenericGenerator</literal> vous
+      permet de définir un générateur d'identifiants Hibernate
+      spécifique.</para>
+
+      <para><programlisting>@Id @GeneratedValue(generator="system-uuid")
+ at GenericGenerator(name="system-uuid", strategy = "uuid")
+public String getId() {
+
+ at Id @GeneratedValue(generator="hibseq")
+ at GenericGenerator(name="hibseq", strategy = "seqhilo",
+    parameters = {
+        @Parameter(name="max_lo", value = "5"),
+        @Parameter(name="sequence", value="heybabyhey")
+    }
+)
+public Integer getId() {</programlisting></para>
+
+      <para><literal>strategy</literal> est le nom court de la stratégie du
+      générateur Hibernate3 ou le nom pleinement qualifié de la classe d'une
+      implémentation de <classname>IdentifierGenerator</classname>. Vous pouvez
+      ajouter des paramètres avec l'attribut
+      <literal>parameters</literal>.</para>
+
+      <para>Contrairement à son pendant standard,
+      <literal>@GenericGenerator</literal> peut ête utilisée dans les
+      annotations au niveau du package, en faisant ainsi un générateur de niveau
+      applicatif (comme s'il était dans un fichier JPA XML).</para>
+
+      <programlisting>@GenericGenerator(name="hibseq", strategy = "seqhilo",
+    parameters = {
+        @Parameter(name="max_lo", value = "5"),
+        @Parameter(name="sequence", value="heybabyhey")
+    }
+)
+package org.hibernate.test.model</programlisting>
+    </sect2>
+
+    <sect2 id="entity-hibspec-property" revision="2">
+      <title>Propriété</title>
+
+      <sect3>
+        <title>Type d'accès</title>
+
+        <para>Le type d'accès est déduit de la position de
+        <literal>@Id</literal> ou de <literal>@EmbeddedId</literal> dans la
+        hiérarchie de l'entité. Les entités filles, les objets embarqués et les
+        entités parentes mappés héritent du type d'accès de l'entité
+        racine.</para>
+
+        <para>Dans Hibernate, vous pouvez surcharger le type d'accès
+        pour :</para>
+
+        <itemizedlist>
+          <listitem>
+            <para>utiliser une stratégie d'accès personnalisée</para>
+          </listitem>
+
+          <listitem>
+            <para>paramétrer finement le type d'accès au niveau de la classe ou
+            au niveau de la propriété</para>
+          </listitem>
+        </itemizedlist>
+
+        <para>Une annocation @AccessType a été présentée pour prendre en charge
+        ce comportement. Vous pouvez définir le type d'accès sur :</para>
+
+        <itemizedlist>
+          <listitem>
+            <para>une entité</para>
+          </listitem>
+
+          <listitem>
+            <para>une classe parente</para>
+          </listitem>
+
+          <listitem>
+            <para>un objet embarqué</para>
+          </listitem>
+
+          <listitem>
+            <para>une propriété</para>
+          </listitem>
+        </itemizedlist>
+
+        <para>Le type d'accès est surchargé pour l'élément annoté, si surchargé
+        sur une classe, toutes les propriétés de la classe donnée héritent du
+        type d'accès. Pour les entités racines, le type d'accès est considéré
+        par défaut comme celui de la hiérarchie entière (surchargeable au niveau
+        de la classe ou de la propriété).</para>
+
+        <para>Si le type d'accès est marqué comme "propriété", les getters sont
+        parcourus pour examiner les annotations, si le type d'accès est marqué
+        comme "champ", ce sont les champs qui sont parcourus pour les
+        annotations. Sinon les éléments marqués avec @Id ou @embeddedId sont
+        scannés.</para>
+
+        <para>Vous pouvez surcharger une type d'accès pour une propriété, mais
+        l'élément annoté ne sera pas influencé : par exemple, une entité ayant
+        un type d'accès <literal>field</literal>, peut annoter un champ avec
+        <literal>@AccessType("property")</literal>, le type d'accès sera alors
+        "property" pour cet attribut, des annotations devront encore être
+        portées sur les champs.</para>
+
+        <para>Si une classe parente ou un objet embarquable n'est pas annoté, le
+        type d'accès de l'entité racine est utilisé (même si un type d'accès a
+        été défini sur une classe parente ou un objet embarquable
+        intermédiaire). Le principe de la poupée russe ne s'applique pas.</para>
+
+        <programlisting>@Entity
+public class Person implements Serializable {
+    @Id  @GeneratedValue // type d'accès "champ"
+    Integer id;
+
+    @Embedded
+    @AttributeOverrides({
+    @AttributeOverride(name = "iso2", column = @Column(name = "bornIso2")),
+    @AttributeOverride(name = "name", column = @Column(name = "bornCountryName"))
+            })
+    Country bornIn;
+}
+
+ at Embeddable
+<emphasis role="bold">@AccessType("property")</emphasis> // surcharge le type d'accès pour toutes les propriétés dans Country
+public class Country implements Serializable {
+    private String iso2;
+    private String name;
+
+    public String getIso2() {
+        return iso2;
+    }
+
+    public void setIso2(String iso2) {
+        this.iso2 = iso2;
+    }
+
+    @Column(name = "countryName")
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+}
+</programlisting>
+      </sect3>
+
+      <sect3>
+        <title>Formule</title>
+
+        <para>Parfois, vous voulez effectuer certains calculs par la base de
+        données plutôt que par la JVM, ou vous pourriez aussi vouloir créer une
+        sorte de colonne virtuelle. Vous pouvez utilisez un fragment SQL (alias
+        une formule) plutôt que de mapper un propriété sur une colonne. Cette
+        sorte de propriété est en lecture seule (sa valeur est calculée par
+        votre formule).</para>
+
+        <programlisting>@Formula("obj_length * obj_height * obj_width")
+public long getObjectVolume()</programlisting>
+
+        <para>Le fragment SQL peut être aussi complexe que vous le souhaitez,
+        même avec des sous-selects inclus.</para>
+      </sect3>
+
+      <sect3>
+        <title>Type</title>
+
+        <para><literal>@org.hibernate.annotations.Type</literal> surcharge le
+        type Hibernate utilisé par défaut : ce n'est généralement pas nécessaire
+        puisque le type est correctement inféré par Hibernate. Veuillez vous
+        référer au guide de référence Hibernate pour plus d'informations sur les
+        types Hibernate.</para>
+
+        <para><literal>@org.hibernate.annotations.TypeDef</literal> et
+        <literal>@org.hibernate.annotations.TypeDefs</literal> vous permettent
+        de déclarer des définitions de type. Ces annotations sont placées au
+        niveau de la classe ou du package. Notez que ces définitions seront
+        globales pour la session factory (même au niveau de la classe) et que la
+        définition du type doit être définie avant n'importe quelle
+        utilisation.</para>
+
+        <programlisting>@TypeDefs(
+    {
+    @TypeDef(
+        name="caster",
+        typeClass = CasterStringType.class,
+        parameters = {
+            @Parameter(name="cast", value="lower")
+        }
+    )
+    }
+)
+package org.hibernate.test.annotations.entity;
+
+...
+public class Forest {
+    @Type(type="caster")
+    public String getSmallText() {
+    ...
+}
+         </programlisting>
+
+        <para>Lors de l'utilisation d'un type utilisateur composé, vous devrez
+        exprimer les définitions des colonnes. L'annotation
+        <literal>@Columns</literal> a été mise en place dans ce but.</para>
+
+        <programlisting>@Type(type="org.hibernate.test.annotations.entity.MonetaryAmountUserType")
+ at Columns(columns = {
+    @Column(name="r_amount"),
+    @Column(name="r_currency")
+})
+public MonetaryAmount getAmount() {
+    return amount;
+}
+
+
+public class MonetaryAmount implements Serializable {
+    private BigDecimal amount;
+    private Currency currency;
+    ...
+}</programlisting>
+      </sect3>
+
+      <sect3>
+        <title>Index</title>
+
+        <para>Vous pouvez définir un index sur une colonne particulière en
+        utilisant l'annotation <literal>@Index</literal> sur une propriété d'une
+        colonne, l'attribut columnNames sera ignoré.</para>
+
+        <programlisting>@Column(secondaryTable="Cat1")
+ at Index(name="story1index")
+public String getStoryPart1() {
+    return storyPart1;
+}</programlisting>
+      </sect3>
+
+      <sect3>
+        <title>@Parent</title>
+
+        <para>A l'intérieur d'un objet embarquable, vous pouvez définir
+        une des propriétés comme un pointeur vers l'élément
+        propriétaire.</para>
+
+        <programlisting>@Entity
+public class Person {
+    @Embeddable public Address address;
+    ...
+}
+
+ at Embeddable
+public class Address {
+    @Parent public Person owner;
+    ...
+}
+
+
+person == person.address.owner</programlisting>
+      </sect3>
+
+      <sect3>
+        <title>Propriétés générées</title>
+
+        <para>Certaines propriétés sont générées au moment de l'insertion ou de
+        la mise à jour par votre base de données. Hibernate peut traiter de
+        telles propriétés et déclencher un select subséquent pour lire ces
+        propriétés.</para>
+
+        <programlisting>@Entity
+public class Antenna {
+    @Id public Integer id;
+    @Generated(GenerationTime.ALWAYS) @Column(insertable = false, updatable = false)
+    public String longitude;
+
+    @Generated(GenerationTime.INSERT) @Column(insertable = false)
+    public String latitude;
+}</programlisting>
+
+        <para>Quand vous annotez votre propriété avec
+        <literal>@Generated</literal>, vous devez vous assurer que l'insertion
+        et la mise à jour n'entreront pas en conflit avec la stratégie de
+        génération que vous avez choisie. Lorsque GenerationTime.INSERT est
+        choisi, la propriété ne doit pas contenir de colonnes insérables ;
+        lorsque GenerationTime.ALWAYS est choisi, la propriété ne doit pas
+        contenir de colonnes qui puissent être insérées ou mises à jour.</para>
+
+        <para>Les propriétés <literal>@Version</literal> ne peuvent pas (par
+        conception) être <literal>@Generated(INSERT)</literal>, elles doivent
+        être <literal>NEVER</literal> ou <literal>ALWAYS</literal>.</para>
+      </sect3>
+    </sect2>
+
+    <sect2 id="entity-hibspec-inheritance" revision="1">
+      <title>Héritage</title>
+
+      <para>SINGLE_TABLE est une stratégie très puissante mais parfois, et
+      surtout pour des systèmes pré-existants, vous ne pouvez pas ajouter une
+      colonne discriminante supplémentaire. Pour cela Hibernate a mis en place
+      la notion de formule discriminante :
+      <literal>@DiscriminatorFormula</literal> est une remplaçcant de
+      <literal>@DiscriminatorColumn</literal> et utilise un fragment SQL en tant
+      que formule pour la résolution du discriminant (pas besoin d'avoir une
+      colonne dédiée).</para>
+
+      <programlisting>@Entity
+ at DiscriminatorForumla("case when forest_type is null then 0 else forest_type end")
+public class Forest { ... }</programlisting>
+
+      <para>Par défaut, lors du requêtage sur les entités les plus hautes,
+      Hibernate ne met pas de restriction sur la colonne discriminante. Ceci
+      peut être un inconvénient si cette colonne contient des valeurs qui ne sont
+      pas mappées dans votre hiérarchie (avec
+      <literal>@DiscriminatorValue</literal>). Pour contourner ca, vous pouvez
+      utilser <literal>@ForceDiscriminator</literal> (au niveau de la classe,
+      à côté de <literal>@DiscriminatorColumn</literal>). Hibernate listera
+      alors les valeurs disponibles lors du chargement des entités.</para>
+    </sect2>
+
+    <sect2 id="entity-hibspec-singleassoc">
+      <title>Annotations concernant les simples associations</title>
+
+      <para>Par défaut, lorsqu'Hibernate ne peut pas résoudre l'association
+      parce que l'élément associé attendu n'est pas dans la base de données
+      (mauvais identifiant sur la colonne de l'association), une exception est
+      levée par Hibernate. Cela pourrait être un inconvénient pour des schémas
+      pré-existants et mal maintenus. Vous pouvez demander à Hibernate d'ignorer
+      de tels éléments plutôt que de lever une exception en utilisant
+      l'annotation <literal>@NotFound</literal>. Cette annotation peut être
+      utilisée sur une association <literal>@OneToOne</literal> (avec une clef
+      étrangère), <literal>@ManyToOne</literal>, <literal>@OneToMany</literal>
+      ou <literal>@ManyToMany</literal>.</para>
+
+      <programlisting>@Entity
+public class Child {
+    ...
+    @ManyToOne
+    @NotFound(action=NotFoundAction.IGNORE)
+    public Parent getParent() { ... }
+    ...
+}</programlisting>
+
+      <para>Parfois vous voulez déléguer à votre base de données la suppression
+      en cascade lorsqu'une entité donnée est supprimée.</para>
+
+      <programlisting>@Entity
+public class Child {
+    ...
+    @ManyToOne
+    @OnDelete(action=OnDeleteAction.CASCADE)
+    public Parent getParent() { ... }
+    ...
+}</programlisting>
+
+      <para>Dans ce cas, Hibernate génère une contrainte de suppression en
+      cascade au niveau de la base de données.</para>
+
+      <para>Les contraintes de clef étrangère, bien que générées par Hibernate,
+      ont un nom justement illisible. Vous pouvez surcharger le nom de la
+      contrainte par l'utilisation de <literal>@ForeignKey</literal>.</para>
+
+      <programlisting>@Entity
+public class Child {
+    ...
+    @ManyToOne
+    <emphasis role="bold">@ForeignKey(name="FK_PARENT")</emphasis>
+    public Parent getParent() { ... }
+    ...
+}
+
+alter table Child add constraint FK_PARENT foreign key (parent_id) references Parent</programlisting>
+
+      <sect3>
+        <title>Options de chargement et modes de récupération</title>
+
+        <para>EJB3 arrive avec l'option <literal>fetch</literal> pour définir
+        le chargement à la demande et les modes de récupération, cependant
+        Hibernate a beaucoup plus d'options dans ce domaine. Pour finement
+        paramétrer le chargement à la demande et les stratégies de récupération,
+        quelques annotations supplémentaires ont été mises en place :</para>
+
+        <itemizedlist>
+          <listitem>
+            <para><literal>@LazyToOne</literal> : définit l'option de chargement
+            à la demande sur les associations <literal>@ManyToOne</literal> et
+            <literal>@OneToOne</literal>. <literal>LazyToOneOption</literal>
+            peut être <literal>PROXY</literal> (ie utiliser un chargement à la
+            demande basé sur un proxy), <literal>NO_PROXY</literal> (utilise
+            un chargement à la demande sur l'ajout de bytecode - notez qu'un
+            temps de construction du bytecode est nécessaire) et
+            <literal>FALSE</literal> (association sans chargement à la
+            demande) ;</para>
+          </listitem>
+
+          <listitem>
+            <para><literal>@LazyCollection</literal> : définit l'option de
+            chargement à la demande sur les associations
+            <literal>@ManyToMany</literal> et <literal>@OneToMany</literal>.
+            LazyCollectionOption peut être <literal>TRUE</literal> (la
+            collection est chargée à la demande lorsque son état est accédé),
+            <literal>EXTRA</literal> (la collection est chargée à la demande et
+            toutes les opérations essaieront d'éviter le chargement de la
+            collection, c'est surtout utile pour de grosses collections lorsque
+            le chargement de tous les éléments n'est pas nécessaire) et
+            <literal>FALSE</literal> (association sans chargement à la
+            demande) ;</para>
+          </listitem>
+
+          <listitem>
+            <para><literal>@Fetch</literal> : définit une stratégie de
+            récupération utilisée pour charger l'association.
+            <literal>FetchMode</literal> peut être
+            <literal>SELECT</literal> (un select est déclenché lorsque
+            l'association a besoin d'être chargée), <literal>SUBSELECT</literal>
+            (disponible uniquement pour des collections, utilise une stratégie
+            de sous select - veuillez vous référer à la documentation de
+            référence d'Hibernate pour plus d'informations) ou
+            <literal>JOIN</literal> (utilise un JOIN SQL pour charger
+            l'association lors du chargement de l'entité propriétaire).
+            <literal>JOIN</literal> surcharge n'importe quel attribut de
+            chargement à la demande (une association chargée avec la stratégie
+            <literal>JOIN</literal> ne peut pas être chargée à la
+            demande).</para>
+          </listitem>
+        </itemizedlist>
+
+        <para>Les annotations Hibernate surchargent les options de récupération
+        EJB3.</para>
+
+        <table>
+          <title>Chargement à la demande et options de récupération
+          équivalentes</title>
+
+          <tgroup cols="3">
+            <thead>
+              <row>
+                <entry>Annotations</entry>
+
+                <entry>Chargement à la demande</entry>
+
+                <entry>Récupération</entry>
+              </row>
+            </thead>
+
+            <tbody>
+              <row>
+                <entry>@[One|Many]ToOne](fetch=FetchType.LAZY)</entry>
+
+                <entry>@LazyToOne(PROXY)</entry>
+
+                <entry>@Fetch(SELECT)</entry>
+              </row>
+
+              <row>
+                <entry>@[One|Many]ToOne](fetch=FetchType.EAGER)</entry>
+
+                <entry>@LazyToOne(FALSE)</entry>
+
+                <entry>@Fetch(JOIN)</entry>
+              </row>
+
+              <row>
+                <entry>@ManyTo[One|Many](fetch=FetchType.LAZY)</entry>
+
+                <entry>@LazyCollection(TRUE)</entry>
+
+                <entry>@Fetch(SELECT)</entry>
+              </row>
+
+              <row>
+                <entry>@ManyTo[One|Many](fetch=FetchType.EAGER)</entry>
+
+                <entry>@LazyCollection(FALSE)</entry>
+
+                <entry>@Fetch(JOIN)</entry>
+              </row>
+            </tbody>
+          </tgroup>
+        </table>
+      </sect3>
+    </sect2>
+
+    <sect2 id="entity-hibspec-collection" revision="2">
+      <title>Annotations concernant les collections</title>
+
+      <sect3 id="entity-hibspec-collection-enhance" revision="2">
+        <title>Améliorer les configurations des collections</title>
+
+        <para>Il est possible de configurer :<itemizedlist>
+            <listitem>
+               la taille des batchs pour les collections en utilisant @BatchSize
+            </listitem>
+
+            <listitem>
+               la clause where, en utilisant @Where (appliquée à l'entité cible)
+               ou @WhereJoinTable (appliquée à la table de l'association)
+            </listitem>
+
+            <listitem>
+               la clause de vérification, en utilsant @Check
+            </listitem>
+
+            <listitem>
+               la clause SQL order by, en utilisant @OrderBy
+            </listitem>
+
+            <listitem>
+               la stratégie de suppression en cascade avec
+               @OnDelete(action=OnDeleteAction.CASCADE)
+            </listitem>
+          </itemizedlist></para>
+
+        <para>Vous pouvez aussi déclarer un comparateur de tri, utilisez
+        l'annotation <literal>@Sort</literal>. Exprimez le type de comparateur
+        que vous voulez entre "non trié" (NdT : unsorted), "ordre naturel"
+        (NdT : natural) ou un comparateur personnalisé. Si vous voulez utilisez
+        votre propre implémentation de comparateur, vous devrez indiquer la
+        classe d'implémentation en utilisant l'attribut
+        <literal>comparator</literal>. Notez que vous avez besoin d'utiliser
+        l'interface <classname>SortedSet</classname> ou
+        <classname>SortedMap</classname>.</para>
+
+        <programlisting>    @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
+    @JoinColumn(name="CUST_ID")
+    @Sort(type = SortType.COMPARATOR, comparator = TicketComparator.class)
+    @Where(clause="1=1")
+    @OnDelete(action=OnDeleteAction.CASCADE)
+    public SortedSet&lt;Ticket&gt; getTickets() {
+        return tickets;
+    }</programlisting>
+
+        <para>Veuillez vous référer aux descriptions précédentes de ces
+        annotations pour plus d'informations.</para>
+
+        <para>Les contraintes de clef étrangère, bien que générées par
+        Hibernate, ont un nom illisible. Vous pouvez surcharger le nom de la
+        contrainte en utilisant <literal>@ForeignKey</literal>. Notez que cette
+        annotation doit être placée du côté possédant la relation,
+        <literal>inverseName</literal> référençant la contrainte de l'autre
+        côté.</para>
+
+        <programlisting>@Entity
+public class Woman {
+    ...
+    @ManyToMany(cascade = {CascadeType.ALL})
+    <emphasis role="bold">@ForeignKey(name = "TO_WOMAN_FK", inverseName = "TO_MAN_FK")</emphasis>
+    public Set&lt;Man&gt; getMens() {
+        return mens;
+    }
+}
+
+alter table Man_Woman add constraint TO_WOMAN_FK foreign key (woman_id) references Woman
+alter table Man_Woman add constraint TO_MAN_FK foreign key (man_id) references Man</programlisting>
+      </sect3>
+
+      <sect3 id="entity-hibspec-collection-extratype" revision="1">
+        <title>Types de collection extra</title>
+
+        <sect4>
+          <title>List</title>
+
+          <para>Outre EJB3, Hibernate Annotations prend en charge les véritables
+          <classname>List</classname> et <classname>Array</classname>. Mappez
+          votre collection de la même manière que d'habitude et ajoutez
+          l'annotation @<literal>IndexColumn</literal>. Cette annotation vous
+          permet de décrire la colonne qui contiendra l'index. Vous pouvez aussi
+          déclarer la valeur de l'index en base de données qui représente le
+          premier élément (alias index de base). La valeur habituelle est
+          <literal>0</literal> ou <literal>1</literal>.</para>
+
+          <programlisting>@OneToMany(cascade = CascadeType.ALL)
+ at IndexColumn(name = "drawer_position", base=1)
+public List&lt;Drawer&gt; getDrawers() {
+    return drawers;
+}</programlisting>
+
+          <note>
+            <para>Si vous oubliez de positionner
+            <literal>@IndexColumn</literal>, la sémantique du bag est appliquée.
+            Si vous voulez la sémantique du bag sans ses limitations, considérez
+            l'utilisation de <literal>@CollectionId</literal>.</para>
+          </note>
+        </sect4>
+
+        <sect4>
+          <title>Map</title>
+
+          <para>Hibernate Annotations prend aussi en charge le mapping de
+          véritables Maps, si <literal>@javax.persistence.MapKey</literal> n'est
+          pas positionnée, Hibernate mappera l'élément clef ou l'objet
+          embarquable dans ses propres colonnes. Pour surcharger les colonnes
+          par défaut, vous pouvez utiliser
+          <literal>@org.hibernate.annotations.MapKey</literal> si votre clef est
+          un type de base (par défaut à <literal>mapkey</literal>) ou un objet
+          embarquable, ou vous pouvez utiliser
+          <literal>@org.hibernate.annotations.MapKeyManyToMany</literal> si
+          votre clef est une entité.</para>
+        </sect4>
+
+        <sect4 id="entity-hibspec-collection-extratype-indexbidir">
+          <title>Associations bidirectionnelle avec des collections indexées</title>
+
+          <para>Une association bidirectionnelle où une extrémité est
+          représentée comme une <literal>@IndexColumn</literal> ou une
+          <literal>@org.hibernate.annotations.MapKey[ManyToMany]</literal>
+          requiert une considération spéciale. S'il y a une propriété de la
+          classe enfante qui mappe la colonne de l'index, pas de problème, nous
+          pouvons continuer en utilisant <literal>mappedBy</literal> sur le
+          mapping de la collection :</para>
+
+          <programlisting>@Entity
+public class Parent {
+    @OneToMany(mappedBy="parent")
+    @org.hibernate.annotations.MapKey(columns=@Column(name="name"))
+    private Map&lt;String, Child&gt; children;
+    ...
+}
+
+ at Entity
+public class Parent {
+    ...
+    @Basic
+    private String name;
+
+    @ManyToOne
+    @JoinColumn(name="parent_id", nullable=false)
+    private Parent parent;
+    ...
+}</programlisting>
+
+          <para>Mais s'il n'y a pas de telle propriété sur la classe enfante,
+          nous ne pouvons pas penser que l'association est vraiment
+          bidirectionnelle (il y a des informations disponibles à une extrémité
+          qui ne sont pas disponibles à l'autre). Dans ce cas, nous ne pouvons
+          pas mapper la collection avec <literal>mappedBy</literal>. A la place,
+          nous pourrions utiliser le mapping suivant :</para>
+
+          <programlisting>@Entity
+public class Parent {
+    @OneToMany
+    @org.hibernate.annotations.MapKey(columns=@Column(name="name"))
+    @JoinColumn(name="parent_id", nullable=false)
+    private Map&lt;String, Child&gt; children;
+    ...
+}
+
+ at Entity
+public class Parent {
+    ...
+    @ManyToOne
+    @JoinColumn(name="parent_id", insertable=false, updatable=false, nullable=false)
+    private Parent parent;
+    ...
+}</programlisting>
+
+          <para>Notez que dans ce mapping, l'extrémité de l'association dont la
+          valeur est une collection est responsable des mises à jour pour la
+          clef étrangère.</para>
+        </sect4>
+
+        <sect4>
+          <title>Bag avec une clef primaire</title>
+
+          <para>Une autre fonctionnalité intéressante est la possibilité de
+          définir une clef primaire subrogée à une collection bag. Ceci enlève
+          pas mal d'inconvénients des bags : mise à jour et suppression
+          sont efficaces, plus d'un bag <literal>EAGER</literal> par requête ou
+          par entité. Cette clef primaire sera contenue dans une colonne
+          supplémentaire de votre table de collection mais ne sea pas visible
+          par l'application Java. @CollectionId est utilisée pour marquer une
+          collection comme "id bag", ca permet aussi de surcharger les colonnes
+          de la clef primaire, le type de la clef primaire et la stratégie du
+          générateur. La stratégie peut être <literal>identity</literal>, ou
+          n'importe quel nom de générateur défini de votre application.</para>
+
+          <programlisting>@Entity
+ at TableGenerator(name="ids_generator", table="IDS")
+public class Passport {
+    ...
+
+    @ManyToMany(cascade = CascadeType.ALL)
+    @JoinTable(name="PASSPORT_VISASTAMP")
+    <emphasis role="bold">@CollectionId(
+        columns = @Column(name="COLLECTION_ID"),
+        type=@Type(type="long"),
+        generator = "ids_generator"
+    )</emphasis>
+    private Collection&lt;Stamp&gt; visaStamp = new ArrayList();
+    ...
+}</programlisting>
+        </sect4>
+
+        <sect4>
+          <title>Collection d'éléments ou d'éléments composés</title>
+
+          <para>Hibernate Annotations prend aussi en charge les collections de
+          types core (Integer, String, Enums, ...), les collections d'objets
+          embarquables et même les tableaux de types primitifs. Ce sont des
+          collections d'éléments.</para>
+
+          <para>Une collection d'éléments doit être annotée comme
+          <literal>@CollectionOfElements</literal> (en tant que remplaçant de
+          <literal>@OneToMany</literal>). Pour définir la table de la
+          collection, l'annotation <literal>@JoinTable</literal> est utilisée
+          sur la propriété de l'association, <literal>joinColumns</literal>
+          définit les colonnes de jointure entre la table de l'entité primaire
+          et la table de la collection (inverseJoincolumn est inutile et
+          devrait être laissé à vide). Pour une collection de types core ou un
+          tableau de types primitifs, vous pouvez surcharger la définition de la
+          colonne de l'élément en utilisant <literal>@Column</literal> sur la
+          propriété de l'association. Vous pouvez aussi surcharger les colonnes
+          d'une collection d'objets embarquables en utilisant
+          <literal>@AttributeOverride</literal>. Pour atteindre l'élément de la
+          collection, vous avez besoin d'ajouter "element" au nom de l'attribut
+          surchargé (p. ex. "element" pour les types core, ou "element.serial"
+          pour la propriété serial d'un élément embarqué). Pour atteindre
+          l'index/clef d'une collection, ajoutez "key" à la place.</para>
+
+          <programlisting>@Entity
+public class Boy {
+    private Integer id;
+    private Set&lt;String&gt; nickNames = new HashSet&lt;String&gt;();
+    private int[] favoriteNumbers;
+    private Set&lt;Toy&gt; favoriteToys = new HashSet&lt;Toy&gt;();
+    private Set&lt;Character&gt; characters = new HashSet&lt;Character&gt;();
+
+    @Id @GeneratedValue
+    public Integer getId() {
+        return id;
+    }
+
+    <emphasis role="bold">@CollectionOfElements
+    public Set&lt;String&gt;</emphasis> getNickNames() {
+        return nickNames;
+    }
+
+    <emphasis role="bold">@CollectionOfElements
+    @JoinTable(
+            table=@Table(name="BoyFavoriteNumbers"),
+            joinColumns = @JoinColumn(name="BoyId")
+    )
+    @Column(name="favoriteNumber", nullable=false)</emphasis>
+    @IndexColumn(name="nbr_index")
+    public int[] getFavoriteNumbers() {
+        return favoriteNumbers;
+    }
+
+    <emphasis role="bold">@CollectionOfElements
+    @AttributeOverride( name="element.serial", column=@Column(name="serial_nbr") )</emphasis>
+    public Set&lt;Toy&gt; getFavoriteToys() {
+        return favoriteToys;
+    }
+
+    <emphasis role="bold">@CollectionOfElements
+    public Set&lt;Character&gt;</emphasis> getCharacters() {
+        return characters;
+    }
+    ...
+}
+
+public enum Character {
+    GENTLE,
+    NORMAL,
+    AGGRESSIVE,
+    ATTENTIVE,
+    VIOLENT,
+    CRAFTY
+}
+
+ at Embeddable
+public class Toy {
+    public String name;
+    public String serial;
+    public Boy owner;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getSerial() {
+        return serial;
+    }
+
+    public void setSerial(String serial) {
+        this.serial = serial;
+    }
+
+    <emphasis role="bold">@Parent</emphasis>
+    public Boy getOwner() {
+        return owner;
+    }
+
+    public void setOwner(Boy owner) {
+        this.owner = owner;
+    }
+
+    public boolean equals(Object o) {
+        if ( this == o ) return true;
+        if ( o == null || getClass() != o.getClass() ) return false;
+
+        final Toy toy = (Toy) o;
+
+        if ( !name.equals( toy.name ) ) return false;
+        if ( !serial.equals( toy.serial ) ) return false;
+
+        return true;
+    }
+
+    public int hashCode() {
+        int result;
+        result = name.hashCode();
+        result = 29 * result + serial.hashCode();
+        return result;
+    }
+}</programlisting>
+
+          <para>Sur une collection d'objets embarquables, l'objet embarquable
+          peut avoir une propriété annotée avec <literal>@Parent</literal>.
+          Cette propriété pointera alors vers l'entité contenant la
+          collection.</para>
+
+          <note>
+            <para>Les versions précédentes d'Hibernate Annotations utilisaient
+            <literal>@OneToMany</literal> pour marquer une collection
+            d'éléments. Suite à des incohérences sémantiques, nous avons mis en
+            place l'annotation <literal>@CollectionOfElements</literal>. Pour
+            marquer des collections d'éléments, l'ancienne façon fonctionne
+            encore mais elle est considérée comme "deprecated" et ne sera plus
+            prise en charge dans les futures versions.</para>
+          </note>
+        </sect4>
+      </sect3>
+    </sect2>
+
+    <sect2>
+      <title>Cache</title>
+
+      <para>Pour optimiser vos accès à la base de données, vous pouvez activer
+      le cache de second niveau d'Hibernate. Ce cache est configurable par
+      entité et par collection.</para>
+
+      <para><literal>@org.hibernate.annotations.Cache</literal> définit la
+      stratégie de cache et la région du cache de second niveau donné. Cette
+      annotation peut être appliquée à une entité racine (pas les entités
+      filles), et sur les collections.</para>
+
+      <programlisting>@Entity
+ at Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
+public class Forest { ... }</programlisting>
+
+      <programlisting>    @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
+    @JoinColumn(name="CUST_ID")
+    @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
+    public SortedSet&lt;Ticket&gt; getTickets() {
+        return tickets;
+    }</programlisting>
+
+      <para></para>
+
+      <programlistingco>
+        <areaspec>
+          <area coords="2 55" id="hm1" />
+
+          <area coords="3 55" id="hm2" />
+
+          <area coords="4 55" id="hm3" />
+        </areaspec>
+
+        <programlisting>@Cache(
+    CacheConcurrencyStrategy usage();
+    String region() default "";
+    String include() default "all";
+)</programlisting>
+
+        <calloutlist>
+          <callout arearefs="hm1">
+            <para>usage : la stratégie de concurrence du cache donné (NONE,
+            READ_ONLY, NONSTRICT_READ_WRITE, READ_WRITE, TRANSACTIONAL) ;</para>
+          </callout>
+
+          <callout arearefs="hm2">
+            <para>region (optionnel) : la région du cache (par défaut le nom
+            complet de la classe avec le nom du package, ou le nom complet du
+            rôle de la collection) ;</para>
+          </callout>
+
+          <callout arearefs="hm3">
+            <para><literal>include</literal> (optionnel) : "all" pour inclure
+            toutes les propriétés, "non-lazy" pour inclure seulement les
+            propriétés qui ne sont pas chargées à la demande (valeur par
+            défaut : all).</para>
+          </callout>
+        </calloutlist>
+      </programlistingco>
+    </sect2>
+
+    <sect2 id="entity-hibspec-filters">
+      <title>Filtres</title>
+
+      <para>Hibernate a la capacité d'appliquer des filtres arbitraires à la
+      partie supérieure de vos données. Ces filtres sont appliqués au moment de
+      l'exécution sur une session donnée. Vous avez tout d'abord besoin de les
+      définir.</para>
+
+      <para><literal>@org.hibernate.annotations.FilterDef</literal> ou
+      <literal>@FilterDefs</literal> déclarent des définitions de filtre
+      utilisées par les filtres ayant le même nom. Une définition de filtre a
+      un name() et un tableau de parameters(). Un paramètre vous permettra
+      d'ajuster le comportement du filtre au moment de l'exécution. Chaque
+      paramètre est défini par une <literal>@ParamDef</literal> qui a un nom et
+      un type. Vous pouvez aussi définir un paramètre defaultCondition() pour
+      une <literal>@ParamDef</literal> donnée pour positionner la condition par
+      défaut à utiliser lorsqu'aucune n'est définie dans chaque
+      <literal>@Filter</literal> individuelle. Une <literal>@FilterDef</literal>
+      peut être définie au niveau de la classe ou du package.</para>
+
+      <para>Nous avons besoin de définir la clause du filtre SQL appliqué au
+      chargement de l'entité ou au chargement de la collection.
+      <literal>@Filter</literal> est utilisée et placée sur l'entité ou
+      l'élément de la collection.</para>
+
+      <para><programlisting>@Entity
+ at FilterDef(name="minLength", parameters={ @ParamDef( name="minLength", type="integer" ) } )
+ at Filters( {
+    @Filter(name="betweenLength", condition=":minLength &lt;= length and :maxLength &gt;= length"),
+    @Filter(name="minLength", condition=":minLength &lt;= length")
+} )
+public class Forest { ... }</programlisting></para>
+
+      <para>Lorsque la collection utilise une table d'association comme
+      représentation relationnelle, vous pourriez vouloir appliquer la condition
+      du filtre à la table de l'association elle-même ou à la table de l'entité
+      cible. Pour appliquer la contrainte sur l'entité cible, utilisez
+      l'annotation habituelle <literal>@Filter</literal>. Cependant, si vous
+      voulez ciblez la table d'association, utilisez l'annotation
+      <literal>@FilterJoinTable</literal>.</para>
+
+      <programlisting>    @OneToMany
+    @JoinTable
+    // filtre sur la table de l'entité cible
+    @Filter(name="betweenLength", condition=":minLength &lt;= length and :maxLength &gt;= length")
+    // filtre sur la table d'association
+    @FilterJoinTable(name="security", condition=":userlevel &gt;= requredLevel")
+    public Set&lt;Forest&gt; getForests() { ... }</programlisting>
+    </sect2>
+
+    <sect2 id="entity-hibspec-query">
+      <title>Requête</title>
+
+      <para>Puisqu'Hibernate a plus de fonctionnalités sur les requêtes nommées
+      que définies dans la spécification EJB3,
+      <literal>@org.hibernate.annotations.NamedQuery</literal>,
+      <literal>@org.hibernate.annotations.NamedQueries</literal>,
+      <literal>@org.hibernate.annotations.NamedNativeQuery</literal> et
+      <literal>@org.hibernate.annotations.NamedNativeQueries</literal> ont été
+      mis en place. Elles ajoutent des attributs à la version standard et
+      peuvent être utilisées comme remplaçant :</para>
+
+      <itemizedlist>
+        <listitem>
+          <para>flushMode : définit le mode de flush de la requête (Always,
+          Auto, Commit ou Never)</para>
+        </listitem>
+
+        <listitem>
+          <para>cacheable : indique si la requête devrait être cachée ou
+          non</para>
+        </listitem>
+
+        <listitem>
+          <para>cacheRegion : région du cache utilisée si la requête est
+          cachée</para>
+        </listitem>
+
+        <listitem>
+          <para>fetchSize : taille de l'expression de récupération JDBC pour
+          cette requête</para>
+        </listitem>
+
+        <listitem>
+          <para>timeout : timeout de la requête</para>
+        </listitem>
+
+        <listitem>
+          <para>callable : pour les requêtes natives seulement, mettre à true
+          pour les procédures stockées</para>
+        </listitem>
+
+        <listitem>
+          <para>comment : si les commentaires sont activés, le commentaire vu
+          lorsque la requête est envoyée vers la base de données</para>
+        </listitem>
+
+        <listitem>
+          <para>cacheMode : mode d'intéraction du cache (get, ignore, normal,
+          put ou refresh)</para>
+        </listitem>
+
+        <listitem>
+          <para>readOnly : indique si les éléments récupérés à partir de la
+          requête sont en lecture seule ou pas</para>
+        </listitem>
+      </itemizedlist>
+
+      <para>Ces indications de fonctionnement peuvent être positionnées sur
+      les annotations standards <literal>@javax.persistence.NamedQuery</literal>
+      avec l'annotation <literal>@QueryHint</literal>. Un autre avantage clef
+      est la possibilité de positionner ces annotations au niveau du
+      package.</para>
+    </sect2>
+  </sect1>
+</chapter>

Deleted: trunk/HibernateExt/annotations/doc/reference/fr/modules/lucene.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/doc/reference/fr/modules/lucene.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/doc/reference/fr/modules/lucene.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,197 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<chapter id="lucene" revision="1">
-  <title>Intégration de Lucene avec Hibernate</title>
-
-  <para>Lucene est une bibliothèque de la fondation Apache fournissant un moteur
-  de recherche en Java hautement performant. Hibernate Annotations inclut un
-  ensemble d'annotations qui vous permettent de marquer n'importe quel objet
-  du modèle de données comme indexable et de laisser Hibernate maintenir un
-  index Lucene de toutes les instances persistées via Hibernate.</para>
-
-  <para>Hibernate Lucene est un projet en cours et de nouvelles fonctionnalités
-  sont en préparation. Donc attendez-vous à certains changements avec les
-  versions ultérieures.</para>
-
-  <section id="lucene-mapping">
-    <title>Mapper les entités sur l'index</title>
-
-    <para>Tout d'abord, nous devons déclarer une classe persistante comme
-    étant indexable. Ceci se fait en annotant la classe avec
-    <literal>@Indexed</literal> :</para>
-
-    <programlisting>@Entity
- at Indexed(index="indexes/essays")
-public class Essay {
-    ...
-}</programlisting>
-
-    <para>L'attribut <literal>index</literal> indique à Hibernate quel est le
-    nom du répertoire Lucene (en général un répertoire de votre système de
-    fichiers). Si vous souhaitez définir un répertoire de départ pour tous vos
-    index Lucene, vous pouvez utiliser la propriété
-    <literal>hibernate.lucene.default.indexDir</literal> dans votre fichier de
-    configuration.</para>
-
-    <para>Les index Lucene contiennent quatre types de champs :
-    <emphasis>keyword</emphasis>, <emphasis>text</emphasis>,
-    <emphasis>unstored</emphasis> et <emphasis>unindexed</emphasis>. Hibernate
-    Annotations fournit des annotations pour marquer une propriété d'une entité
-    comme étant d'un des trois premiers types.</para>
-
-    <programlisting>@Entity
- at Indexed(index="indexes/essays")
-public class Essay {
-    ...
-
-    @Id
-    @Keyword(id=true)
-    public Long getId() { return id; }
-
-    @Text(name="Abstract")
-    public String getSummary() { return summary; }
-
-    @Lob
-    @Unstored
-    public String getText() { return text; }
-
-}</programlisting>
-
-    <para>Ces annotations définissent un index avec trois champs :
-    <literal>id</literal>, <literal>Abstract</literal> et
-    <literal>text</literal>. Notez que par défaut le nom du champ n'a plus de
-    majuscules, en suivant la spécification JavaBean.</para>
-
-    <para>Note : vous <emphasis>devez</emphasis> spécifier
-    <literal>@Keyword(id=true)</literal> sur la propriété identifiante de
-    votre entité.</para>
-
-    <para>Lucene a la notion of <emphasis>boost factor</emphasis>. C'est un
-    moyen de donner plus de poids à un champ ou à un élément indexé durant la
-    procédure d'indexation. Vous pouvez utiliser <literal>@Boost</literal> au
-    niveau du champ ou de la classe.</para>
-
-    <para>La classe analyste utilisée pour indexer les éléments est
-    configurable par la propriété
-    <literal>hibernate.lucene.analyzer</literal>. Si aucune n'est définie,
-    <classname>org.apache.lucene.analysis.standard.StandardAnalyzer</classname>
-    est utilisée par défaut.</para>
-  </section>
-
-  <section id="lucene-configuration">
-    <title>Configuration</title>
-
-    <section id="lucene-configuration-directory">
-      <title>Configuration du directory</title>
-
-      <para>Lucene a une notion de Directory où l'index est stocké.
-      L'implémentation de Directory peut être personnalisée mais Lucene arrive,
-      avec deux implémentations prêtes à l'emploi complètes, une sur un système
-      de fichiers et une en mémoire. Hibernate Lucene a la notion de
-      <literal>DirectoryProvider</literal> qui gère la configuration et
-      l'initialisation du Directory Lucene.</para>
-
-      <table>
-        <title>Liste des Directory Providers intégrés</title>
-
-        <tgroup cols="3">
-          <thead>
-            <row>
-              <entry align="center">Classe</entry>
-
-              <entry align="center">Description</entry>
-
-              <entry align="center">Propriétés</entry>
-            </row>
-          </thead>
-
-          <tbody>
-            <row>
-              <entry>org.hibernate.lucene.store.FSDirectoryProvider</entry>
-
-              <entry>Directory base sur le système de fichiers. Le répertoire
-              utilisé sera
-              &lt;indexBase&gt;/&lt;<literal>@Index.name</literal>&gt;</entry>
-
-              <entry><literal>indexBase</literal> : répertoire de départ</entry>
-            </row>
-
-            <row>
-              <entry>org.hibernate.lucene.store.RAMDirectoryProvider</entry>
-
-              <entry>Directory utilisant la mémoire, le directory sera
-              uniquement identifié par l'élément
-              <literal>@Index.name</literal></entry>
-
-              <entry>aucune</entry>
-            </row>
-          </tbody>
-        </tgroup>
-      </table>
-
-      <para>Si les directory providers intégrés ne répondent pas à vos besoins,
-      vous pouvez écrire votre propre directory provider en implémentant
-      l'interface
-      <classname>org.hibernate.store.DirectoryProvider</classname>.</para>
-
-      <para>Chaque entité indexée est associée à un index Lucene (un index peut
-      être partagé par différentes entités mais ce n'est pas le cas en général).
-      Vous pouvez configurer l'index à travers des propriétés préfixées par
-      <literal><literal>hibernate.lucene.&lt;indexname&gt;</literal></literal>.
-      Les propriétés par défaut héritées par tous les index peuvent être
-      définies en utilisant le préfixe hibernate.lucene.default.</para>
-
-      <para>Pour définir le directory provider d'un index donné, utilisez
-      <literal>hibernate.lucene.&lt;indexname&gt;.directory_provider</literal>.</para>
-
-      <programlisting>hibernate.lucene.default.directory_provider org.hibernate.lucene.store.FSDirectoryProvider
-hibernate.lucene.default.indexDir=/usr/lucene/indexes
-
-hibernate.lucene.Rules.directory_provider org.hibernate.lucene.store.RAMDirectoryProvider
-</programlisting>
-
-      <para>appliqué à</para>
-
-      <programlisting>@Indexed(name="Status")
-public class Status { ... }
-
- at Indexed(name="Rules")
-public class Rule { ... }</programlisting>
-
-      <para>Ceci créera un directory système de fichiers dans
-      <filename>/usr/lucene/indexes/Status</filename> où les entités Status
-      seront indexées, et utilisera un directory mémoire nommé
-      <literal>Rules</literal> où les entités Rule seront indexées.</para>
-
-      <para>Donc vous pouvez facilement définir des règles générales comme le
-      directory provider et le répertoire de départ, et surcharger ces valeurs
-      par défaut plus tard pour chaque index.</para>
-
-      <para>En écrivant votre propre DirectoryProvider, vous pouvez aussi
-      bénéficier de ce mécanisme de configuration.</para>
-    </section>
-
-    <section id="lucene-configuration-event">
-      <title>Activer l'indexation automatique</title>
-
-      <para>Finalement, nous activons le <literal>LuceneEventListener</literal>
-      pour les trois événements Hibernate qui ont lieu après que les changements
-      sont validés dans la base de données.</para>
-
-      <programlisting>&lt;hibernate-configuration&gt;
-    ...
-    &lt;event type="post-commit-update"
-        &lt;listener
-            class="org.hibernate.lucene.event.LuceneEventListener"/&gt;
-    &lt;/event&gt;
-    &lt;event type="post-commit-insert"
-        &lt;listener
-            class="org.hibernate.lucene.event.LuceneEventListener"/&gt;
-    &lt;/event&gt;
-    &lt;event type="post-commit-delete"
-        &lt;listener
-            class="org.hibernate.lucene.event.LuceneEventListener"/&gt;
-    &lt;/event&gt;
-&lt;/hibernate-configuration&gt;</programlisting>
-    </section>
-  </section>
-</chapter>
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/doc/reference/fr/modules/lucene.xml (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/doc/reference/fr/modules/lucene.xml)
===================================================================
--- trunk/HibernateExt/annotations/doc/reference/fr/modules/lucene.xml	                        (rev 0)
+++ trunk/HibernateExt/annotations/doc/reference/fr/modules/lucene.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,197 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<chapter id="lucene" revision="1">
+  <title>Intégration de Lucene avec Hibernate</title>
+
+  <para>Lucene est une bibliothèque de la fondation Apache fournissant un moteur
+  de recherche en Java hautement performant. Hibernate Annotations inclut un
+  ensemble d'annotations qui vous permettent de marquer n'importe quel objet
+  du modèle de données comme indexable et de laisser Hibernate maintenir un
+  index Lucene de toutes les instances persistées via Hibernate.</para>
+
+  <para>Hibernate Lucene est un projet en cours et de nouvelles fonctionnalités
+  sont en préparation. Donc attendez-vous à certains changements avec les
+  versions ultérieures.</para>
+
+  <section id="lucene-mapping">
+    <title>Mapper les entités sur l'index</title>
+
+    <para>Tout d'abord, nous devons déclarer une classe persistante comme
+    étant indexable. Ceci se fait en annotant la classe avec
+    <literal>@Indexed</literal> :</para>
+
+    <programlisting>@Entity
+ at Indexed(index="indexes/essays")
+public class Essay {
+    ...
+}</programlisting>
+
+    <para>L'attribut <literal>index</literal> indique à Hibernate quel est le
+    nom du répertoire Lucene (en général un répertoire de votre système de
+    fichiers). Si vous souhaitez définir un répertoire de départ pour tous vos
+    index Lucene, vous pouvez utiliser la propriété
+    <literal>hibernate.lucene.default.indexDir</literal> dans votre fichier de
+    configuration.</para>
+
+    <para>Les index Lucene contiennent quatre types de champs :
+    <emphasis>keyword</emphasis>, <emphasis>text</emphasis>,
+    <emphasis>unstored</emphasis> et <emphasis>unindexed</emphasis>. Hibernate
+    Annotations fournit des annotations pour marquer une propriété d'une entité
+    comme étant d'un des trois premiers types.</para>
+
+    <programlisting>@Entity
+ at Indexed(index="indexes/essays")
+public class Essay {
+    ...
+
+    @Id
+    @Keyword(id=true)
+    public Long getId() { return id; }
+
+    @Text(name="Abstract")
+    public String getSummary() { return summary; }
+
+    @Lob
+    @Unstored
+    public String getText() { return text; }
+
+}</programlisting>
+
+    <para>Ces annotations définissent un index avec trois champs :
+    <literal>id</literal>, <literal>Abstract</literal> et
+    <literal>text</literal>. Notez que par défaut le nom du champ n'a plus de
+    majuscules, en suivant la spécification JavaBean.</para>
+
+    <para>Note : vous <emphasis>devez</emphasis> spécifier
+    <literal>@Keyword(id=true)</literal> sur la propriété identifiante de
+    votre entité.</para>
+
+    <para>Lucene a la notion of <emphasis>boost factor</emphasis>. C'est un
+    moyen de donner plus de poids à un champ ou à un élément indexé durant la
+    procédure d'indexation. Vous pouvez utiliser <literal>@Boost</literal> au
+    niveau du champ ou de la classe.</para>
+
+    <para>La classe analyste utilisée pour indexer les éléments est
+    configurable par la propriété
+    <literal>hibernate.lucene.analyzer</literal>. Si aucune n'est définie,
+    <classname>org.apache.lucene.analysis.standard.StandardAnalyzer</classname>
+    est utilisée par défaut.</para>
+  </section>
+
+  <section id="lucene-configuration">
+    <title>Configuration</title>
+
+    <section id="lucene-configuration-directory">
+      <title>Configuration du directory</title>
+
+      <para>Lucene a une notion de Directory où l'index est stocké.
+      L'implémentation de Directory peut être personnalisée mais Lucene arrive,
+      avec deux implémentations prêtes à l'emploi complètes, une sur un système
+      de fichiers et une en mémoire. Hibernate Lucene a la notion de
+      <literal>DirectoryProvider</literal> qui gère la configuration et
+      l'initialisation du Directory Lucene.</para>
+
+      <table>
+        <title>Liste des Directory Providers intégrés</title>
+
+        <tgroup cols="3">
+          <thead>
+            <row>
+              <entry align="center">Classe</entry>
+
+              <entry align="center">Description</entry>
+
+              <entry align="center">Propriétés</entry>
+            </row>
+          </thead>
+
+          <tbody>
+            <row>
+              <entry>org.hibernate.lucene.store.FSDirectoryProvider</entry>
+
+              <entry>Directory base sur le système de fichiers. Le répertoire
+              utilisé sera
+              &lt;indexBase&gt;/&lt;<literal>@Index.name</literal>&gt;</entry>
+
+              <entry><literal>indexBase</literal> : répertoire de départ</entry>
+            </row>
+
+            <row>
+              <entry>org.hibernate.lucene.store.RAMDirectoryProvider</entry>
+
+              <entry>Directory utilisant la mémoire, le directory sera
+              uniquement identifié par l'élément
+              <literal>@Index.name</literal></entry>
+
+              <entry>aucune</entry>
+            </row>
+          </tbody>
+        </tgroup>
+      </table>
+
+      <para>Si les directory providers intégrés ne répondent pas à vos besoins,
+      vous pouvez écrire votre propre directory provider en implémentant
+      l'interface
+      <classname>org.hibernate.store.DirectoryProvider</classname>.</para>
+
+      <para>Chaque entité indexée est associée à un index Lucene (un index peut
+      être partagé par différentes entités mais ce n'est pas le cas en général).
+      Vous pouvez configurer l'index à travers des propriétés préfixées par
+      <literal><literal>hibernate.lucene.&lt;indexname&gt;</literal></literal>.
+      Les propriétés par défaut héritées par tous les index peuvent être
+      définies en utilisant le préfixe hibernate.lucene.default.</para>
+
+      <para>Pour définir le directory provider d'un index donné, utilisez
+      <literal>hibernate.lucene.&lt;indexname&gt;.directory_provider</literal>.</para>
+
+      <programlisting>hibernate.lucene.default.directory_provider org.hibernate.lucene.store.FSDirectoryProvider
+hibernate.lucene.default.indexDir=/usr/lucene/indexes
+
+hibernate.lucene.Rules.directory_provider org.hibernate.lucene.store.RAMDirectoryProvider
+</programlisting>
+
+      <para>appliqué à</para>
+
+      <programlisting>@Indexed(name="Status")
+public class Status { ... }
+
+ at Indexed(name="Rules")
+public class Rule { ... }</programlisting>
+
+      <para>Ceci créera un directory système de fichiers dans
+      <filename>/usr/lucene/indexes/Status</filename> où les entités Status
+      seront indexées, et utilisera un directory mémoire nommé
+      <literal>Rules</literal> où les entités Rule seront indexées.</para>
+
+      <para>Donc vous pouvez facilement définir des règles générales comme le
+      directory provider et le répertoire de départ, et surcharger ces valeurs
+      par défaut plus tard pour chaque index.</para>
+
+      <para>En écrivant votre propre DirectoryProvider, vous pouvez aussi
+      bénéficier de ce mécanisme de configuration.</para>
+    </section>
+
+    <section id="lucene-configuration-event">
+      <title>Activer l'indexation automatique</title>
+
+      <para>Finalement, nous activons le <literal>LuceneEventListener</literal>
+      pour les trois événements Hibernate qui ont lieu après que les changements
+      sont validés dans la base de données.</para>
+
+      <programlisting>&lt;hibernate-configuration&gt;
+    ...
+    &lt;event type="post-commit-update"
+        &lt;listener
+            class="org.hibernate.lucene.event.LuceneEventListener"/&gt;
+    &lt;/event&gt;
+    &lt;event type="post-commit-insert"
+        &lt;listener
+            class="org.hibernate.lucene.event.LuceneEventListener"/&gt;
+    &lt;/event&gt;
+    &lt;event type="post-commit-delete"
+        &lt;listener
+            class="org.hibernate.lucene.event.LuceneEventListener"/&gt;
+    &lt;/event&gt;
+&lt;/hibernate-configuration&gt;</programlisting>
+    </section>
+  </section>
+</chapter>
\ No newline at end of file

Deleted: trunk/HibernateExt/annotations/doc/reference/fr/modules/setup.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/doc/reference/fr/modules/setup.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/doc/reference/fr/modules/setup.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,158 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<chapter>
-  <title id="setup" revision="1">Configurer un projet avec des annotations</title>
-
-  <section id="setup-requirements">
-    <title>Prérequis</title>
-
-    <itemizedlist>
-      <listitem>
-        <para>Téléchargez et installez la distribution Hibernate Annotations à
-        partir du site web d'Hibernate.</para>
-      </listitem>
-
-      <listitem>
-        <para><emphasis>Cette version requiert Hibernate 3.2.0.GA ou
-        supérieur. N'utilisez pas cette version d'Hibernate Annotations avec
-        une version plus ancienne d'Hibernate 3.x !</emphasis></para>
-      </listitem>
-
-      <listitem>
-        <para>Cette version est connue pour fonctionner avec le noyau 3.2.0.CR5
-        et 3.2.0.GA d'Hibernate.</para>
-      </listitem>
-
-      <listitem>
-        <para>Assurez-vous que vous avez le JDK 5.0 d'installé. Vous pouvez
-        bien sûr continuer à utiliser XDoclet et avoir certains des avantages
-        des méta-données basées sur les annotations avec des versions plus
-        anciennes du JDK. Notez que ce document décrit seulement les annotations
-        du JDK 5.0 et que vous devez vous référer à la documentation de XDoclet
-        pour plus d'informations.</para>
-      </listitem>
-    </itemizedlist>
-  </section>
-
-  <section id="setup-configuration">
-    <title>Configuration</title>
-
-    <para>Tout d'abord, paramétrez votre classpath (après avoir créer un nouveau
-    projet dans votre IDE favori) :<itemizedlist>
-        <listitem>
-          <para>Copiez toutes les bibliothèques du noyau Hibernate3 et toutes
-          les bibliothèques tierces requises (voir lib/README.txt dans
-          Hibernate).</para>
-        </listitem>
-
-        <listitem>
-          <para>Copiez aussi <filename>hibernate-annotations.jar</filename> et
-          <filename>lib/ejb3-persistence.jar</filename> de la distribution
-          Hibernate Annotations dans votre classpath.</para>
-        </listitem>
-
-        <listitem>
-          <para>Pour utiliser <xref linkend="lucene" />, ajouter le fichier jar
-          de lucene.</para>
-        </listitem>
-      </itemizedlist></para>
-
-    <para>Nous recommandons aussi un petit wrapper pour démarrer Hibernate dans
-    un bloc statique d'initialisation, connu en tant que
-    <classname>HibernateUtil</classname>. Vous pourriez avoir vu cette classe
-    sous diverses formes dans d'autres parties de la documentation Hibernate.
-    Pour prendre en charge Annotation vous devez modifier cette classe d'aide
-    de la manière suivante :<programlisting>package hello;
-
-import org.hibernate.*;
-import org.hibernate.cfg.*;
-import test.*;
-import test.animals.Dog;
-
-public class HibernateUtil {
-
-private static final SessionFactory sessionFactory;
-
-    static {
-        try {
-
-            sessionFactory = new <emphasis role="bold">AnnotationConfiguration()</emphasis>.buildSessionFactory();
-        } catch (Throwable ex) {
-            // Log exception!
-            throw new ExceptionInInitializerError(ex);
-        }
-    }
-
-    public static Session getSession()
-            throws HibernateException {
-        return sessionFactory.openSession();
-    }
-}
-            </programlisting></para>
-
-    <para>La partie intéressante ici est l'utilisation de
-    <classname>AnnotationConfiguration</classname>. Les packages et les classes
-    annotées sont déclarés dans votre fichier de configuration XML habituel
-    (généralement <filename>hibernate.cfg.xml</filename>). Voici un équivalent
-    de la déclaration ci-dessus :</para>
-
-    <programlisting>&lt;!DOCTYPE hibernate-configuration PUBLIC
-    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
-    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"&gt;
-
-        &lt;hibernate-configuration&gt;
-          &lt;session-factory&gt;
-            <emphasis role="bold">&lt;mapping package="test.animals"/&gt;
-            &lt;mapping class="test.Flight"/&gt;
-            &lt;mapping class="test.Sky"/&gt;
-            &lt;mapping class="test.Person"/&gt;
-            &lt;mapping class="test.animals.Dog"/&gt;</emphasis>
-<emphasis role="bold">            &lt;mapping resource="test/animals/orm.xml"/&gt;</emphasis>
-          &lt;/session-factory&gt;
-        &lt;/hibernate-configuration&gt;
-        </programlisting>
-
-    <para>Notez que vous pouvez mélanger l'utilisation du fichier hbm.xml et
-    celle des annotations. L'élément de ressource peut être un fichier hbm ou
-    un descripteur de déploiement XML EJB3. Cette distinction est transparente
-    pour votre procédure de configuration.</para>
-
-    <para>Alternativement, vous pouvez définir les classes annotées et des
-    packages en utilisant l'API :</para>
-
-    <programlisting>            sessionFactory = new <emphasis role="bold">AnnotationConfiguration()
-                    .addPackage("test.animals") // le nom complet du package
-                    .addAnnotatedClass(Flight.class)
-                    .addAnnotatedClass(Sky.class)
-                    .addAnnotatedClass(Person.class)
-                    .addAnnotatedClass(Dog.class)</emphasis>
-<emphasis role="bold">                    .addResource("test/animals/orm.xml")</emphasis>
-                    .buildSessionFactory();</programlisting>
-
-    <para>Vous pouvez aussi utiliser Hibernate EntityManager qui a son propre
-    mécanisme de configuration. Veullez vous référer à la documentation de ce
-    projet pour plus de détails.</para>
-
-    <para>Il n'y a pas d'autres différences dans la façon d'utiliser les APIs
-    d'Hibernate, excepté ce changement de routine de démarrage ou le fichier
-    de configuration. Vous pouvez utiliser votre méthode de configuration
-    favorite pour d'autres propriétés (<filename>hibernate.properties</filename>,
-    <filename>hibernate.cfg.xml</filename>, utilisation des APIs, etc). Vous
-    pouvez même mélanger les classes persistantes annotées et des déclarations
-    <filename>hbm.cfg.xml</filename> classiques avec la même
-    <classname>SessionFactory</classname>. Vous ne pouvez cependant pas déclarer
-    une classe plusieurs fois (soit avec les annotations, soit avec un fichier
-    hbm.xml). Vous ne pouvez pas non plus mélanger des stratégies de
-    configuration (hbm vs annotations) dans une hiérarchie d'entités
-    mappées.</para>
-
-    <para>Pour faciliter la procédure de migration de fichiers hbm vers les
-    annotations, le mécanisme de configuration détecte la duplication de mappings
-    entre les annotations et les fichiers hbm. Les classes décrites dans les
-    fichiers hbm se voient alors affecter une priorité plus grande que les
-    classes annotées. Vous pouvez changer cette priorité avec la propriété
-    <literal>hibernate.mapping.precedence</literal>. La valeur par défaut est :
-    <literal>hbm, class</literal> ; la changer en : <literal>class, hbm</literal>
-    donne alors la priorité aux classes annotées lorsqu'un conflit
-    survient.</para>
-  </section>
-</chapter>
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/doc/reference/fr/modules/setup.xml (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/doc/reference/fr/modules/setup.xml)
===================================================================
--- trunk/HibernateExt/annotations/doc/reference/fr/modules/setup.xml	                        (rev 0)
+++ trunk/HibernateExt/annotations/doc/reference/fr/modules/setup.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,158 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<chapter>
+  <title id="setup" revision="1">Configurer un projet avec des annotations</title>
+
+  <section id="setup-requirements">
+    <title>Prérequis</title>
+
+    <itemizedlist>
+      <listitem>
+        <para>Téléchargez et installez la distribution Hibernate Annotations à
+        partir du site web d'Hibernate.</para>
+      </listitem>
+
+      <listitem>
+        <para><emphasis>Cette version requiert Hibernate 3.2.0.GA ou
+        supérieur. N'utilisez pas cette version d'Hibernate Annotations avec
+        une version plus ancienne d'Hibernate 3.x !</emphasis></para>
+      </listitem>
+
+      <listitem>
+        <para>Cette version est connue pour fonctionner avec le noyau 3.2.0.CR5
+        et 3.2.0.GA d'Hibernate.</para>
+      </listitem>
+
+      <listitem>
+        <para>Assurez-vous que vous avez le JDK 5.0 d'installé. Vous pouvez
+        bien sûr continuer à utiliser XDoclet et avoir certains des avantages
+        des méta-données basées sur les annotations avec des versions plus
+        anciennes du JDK. Notez que ce document décrit seulement les annotations
+        du JDK 5.0 et que vous devez vous référer à la documentation de XDoclet
+        pour plus d'informations.</para>
+      </listitem>
+    </itemizedlist>
+  </section>
+
+  <section id="setup-configuration">
+    <title>Configuration</title>
+
+    <para>Tout d'abord, paramétrez votre classpath (après avoir créer un nouveau
+    projet dans votre IDE favori) :<itemizedlist>
+        <listitem>
+          <para>Copiez toutes les bibliothèques du noyau Hibernate3 et toutes
+          les bibliothèques tierces requises (voir lib/README.txt dans
+          Hibernate).</para>
+        </listitem>
+
+        <listitem>
+          <para>Copiez aussi <filename>hibernate-annotations.jar</filename> et
+          <filename>lib/ejb3-persistence.jar</filename> de la distribution
+          Hibernate Annotations dans votre classpath.</para>
+        </listitem>
+
+        <listitem>
+          <para>Pour utiliser <xref linkend="lucene" />, ajouter le fichier jar
+          de lucene.</para>
+        </listitem>
+      </itemizedlist></para>
+
+    <para>Nous recommandons aussi un petit wrapper pour démarrer Hibernate dans
+    un bloc statique d'initialisation, connu en tant que
+    <classname>HibernateUtil</classname>. Vous pourriez avoir vu cette classe
+    sous diverses formes dans d'autres parties de la documentation Hibernate.
+    Pour prendre en charge Annotation vous devez modifier cette classe d'aide
+    de la manière suivante :<programlisting>package hello;
+
+import org.hibernate.*;
+import org.hibernate.cfg.*;
+import test.*;
+import test.animals.Dog;
+
+public class HibernateUtil {
+
+private static final SessionFactory sessionFactory;
+
+    static {
+        try {
+
+            sessionFactory = new <emphasis role="bold">AnnotationConfiguration()</emphasis>.buildSessionFactory();
+        } catch (Throwable ex) {
+            // Log exception!
+            throw new ExceptionInInitializerError(ex);
+        }
+    }
+
+    public static Session getSession()
+            throws HibernateException {
+        return sessionFactory.openSession();
+    }
+}
+            </programlisting></para>
+
+    <para>La partie intéressante ici est l'utilisation de
+    <classname>AnnotationConfiguration</classname>. Les packages et les classes
+    annotées sont déclarés dans votre fichier de configuration XML habituel
+    (généralement <filename>hibernate.cfg.xml</filename>). Voici un équivalent
+    de la déclaration ci-dessus :</para>
+
+    <programlisting>&lt;!DOCTYPE hibernate-configuration PUBLIC
+    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
+    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"&gt;
+
+        &lt;hibernate-configuration&gt;
+          &lt;session-factory&gt;
+            <emphasis role="bold">&lt;mapping package="test.animals"/&gt;
+            &lt;mapping class="test.Flight"/&gt;
+            &lt;mapping class="test.Sky"/&gt;
+            &lt;mapping class="test.Person"/&gt;
+            &lt;mapping class="test.animals.Dog"/&gt;</emphasis>
+<emphasis role="bold">            &lt;mapping resource="test/animals/orm.xml"/&gt;</emphasis>
+          &lt;/session-factory&gt;
+        &lt;/hibernate-configuration&gt;
+        </programlisting>
+
+    <para>Notez que vous pouvez mélanger l'utilisation du fichier hbm.xml et
+    celle des annotations. L'élément de ressource peut être un fichier hbm ou
+    un descripteur de déploiement XML EJB3. Cette distinction est transparente
+    pour votre procédure de configuration.</para>
+
+    <para>Alternativement, vous pouvez définir les classes annotées et des
+    packages en utilisant l'API :</para>
+
+    <programlisting>            sessionFactory = new <emphasis role="bold">AnnotationConfiguration()
+                    .addPackage("test.animals") // le nom complet du package
+                    .addAnnotatedClass(Flight.class)
+                    .addAnnotatedClass(Sky.class)
+                    .addAnnotatedClass(Person.class)
+                    .addAnnotatedClass(Dog.class)</emphasis>
+<emphasis role="bold">                    .addResource("test/animals/orm.xml")</emphasis>
+                    .buildSessionFactory();</programlisting>
+
+    <para>Vous pouvez aussi utiliser Hibernate EntityManager qui a son propre
+    mécanisme de configuration. Veullez vous référer à la documentation de ce
+    projet pour plus de détails.</para>
+
+    <para>Il n'y a pas d'autres différences dans la façon d'utiliser les APIs
+    d'Hibernate, excepté ce changement de routine de démarrage ou le fichier
+    de configuration. Vous pouvez utiliser votre méthode de configuration
+    favorite pour d'autres propriétés (<filename>hibernate.properties</filename>,
+    <filename>hibernate.cfg.xml</filename>, utilisation des APIs, etc). Vous
+    pouvez même mélanger les classes persistantes annotées et des déclarations
+    <filename>hbm.cfg.xml</filename> classiques avec la même
+    <classname>SessionFactory</classname>. Vous ne pouvez cependant pas déclarer
+    une classe plusieurs fois (soit avec les annotations, soit avec un fichier
+    hbm.xml). Vous ne pouvez pas non plus mélanger des stratégies de
+    configuration (hbm vs annotations) dans une hiérarchie d'entités
+    mappées.</para>
+
+    <para>Pour faciliter la procédure de migration de fichiers hbm vers les
+    annotations, le mécanisme de configuration détecte la duplication de mappings
+    entre les annotations et les fichiers hbm. Les classes décrites dans les
+    fichiers hbm se voient alors affecter une priorité plus grande que les
+    classes annotées. Vous pouvez changer cette priorité avec la propriété
+    <literal>hibernate.mapping.precedence</literal>. La valeur par défaut est :
+    <literal>hbm, class</literal> ; la changer en : <literal>class, hbm</literal>
+    donne alors la priorité aux classes annotées lorsqu'un conflit
+    survient.</para>
+  </section>
+</chapter>
\ No newline at end of file

Deleted: trunk/HibernateExt/annotations/doc/reference/fr/modules/validator.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/doc/reference/fr/modules/validator.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/doc/reference/fr/modules/validator.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,569 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<chapter id="validator">
-  <title>Hibernate Validator</title>
-
-  <para>Les annotations sont une manière très commode et élégante pour spécifier
-  des contraintes invariantes sur un modèle de données. Vous pouvez, par
-  exemple, indiquer qu'une propriété ne devrait pas être nulle, que le solde
-  d'un compte devrait être strictement positif, etc. Ces contraintes de modèle
-  de données sont déclarées dans le bean lui-même en annotant ses propriétés.
-  Un validateur peut alors les lire et vérifier les violations de contraintes.
-  Le mécanisme de validation peut être exécuté dans différentes couches de
-  votre application (présentation, accès aux données) sans devoir dupliquer
-  ces règles. Hibernate Validator a été conçu dans ce but.</para>
-
-  <para>Hibernate Validator fonctionne sur deux niveaux. D'abord, il est capable
-  de vérifier des violations de contraintes sur les instances d'une classe en
-  mémoire. Ensuite, il peut appliquer les contraintes au méta-modèle d'Hibernate
-  et les incorporer au schéma de base de données généré.</para>
-
-  <para>Chaque annotation de contrainte est associée à l'implémentation du
-  validateur responsable de vérifier la contrainte sur l'instance de l'entité.
-  Un validateur peut aussi (optionnellement) appliquer la contrainte au
-  méta-modèle d'Hibernate, permettant à Hibernate de générer le DDL qui
-  exprime la contrainte. Avec le listener d'événements approprié, vous pouvez
-  exécuter l'opération de vérification lors des insertions et des mises à jour
-  effectuées par Hibernate. Hibernate Validator n'est pas limité à Hibernate.
-  Vous pouvez facilement l'utiliser n'importe où dans votre application.</para>
-
-  <para>Lors de la vérification des instances à l'exécution, Hibernate Validator
-  retourne des informations à propos des violations de contraintes dans un
-  tableau de <classname>InvalidValue</classname>s. Parmi d'autres informations,
-  <classname>InvalidValue</classname> contient un message de description
-  d'erreur qui peut inclure les valeurs des paramètres associés à l'annotation
-  (p. ex. la limite de taille), et des chaînes de caractères qui peuvent être
-  externalisées avec un <classname>ResourceBundle</classname>.</para>
-
-  <sect1 id="validator-constraints">
-    <title>Contraintes</title>
-
-    <sect2>
-      <title>Qu'est-ce qu'une contrainte ?</title>
-
-      <para>Une contrainte est représentée par une annotation. Une contrainte a
-      généralement des attributs utilisés pour paramétrer les limites des
-      contraintes. La contrainte s'applique à l'élément annoté.</para>
-    </sect2>
-
-    <sect2>
-      <title>Contraintes intégrées</title>
-
-      <para>Hibernate Validator arrive avec des contraintes intégrées,
-      lesquelles couvrent la plupart des vérifications de données de base. Comme
-      nous le verrons plus tard, vous n'êtes pas limité à celles-ci, vous pouvez
-      écrire vos propres contraintes en une minute.</para>
-
-      <table>
-        <title>Contraintes intégrées</title>
-
-        <tgroup cols="4">
-          <colspec align="center" />
-
-          <thead>
-            <row>
-              <entry>Annotation</entry>
-
-              <entry>S'applique à</entry>
-
-              <entry>Vérification à l'exécution</entry>
-
-              <entry>Impact sur les méta-données d'Hibernate</entry>
-            </row>
-          </thead>
-
-          <tbody>
-            <row>
-              <entry>@Length(min=, max=)</entry>
-
-              <entry>propriété (String)</entry>
-
-              <entry>vérifie si la longueur de la chaîne de caractères est
-              comprise dans l'intervalle</entry>
-
-              <entry>la longueur de la colonne sera positionnée à max</entry>
-            </row>
-
-            <row>
-              <entry>@Max(value=)</entry>
-
-              <entry>propriété (nombre ou chaîne de caractères représentant un
-              nombre)</entry>
-
-              <entry>vérifie si la valeur est inférieure ou égale à max</entry>
-
-              <entry>ajoute une contrainte de vérification sur la
-              colonne</entry>
-            </row>
-
-            <row>
-              <entry>@Min(value=)</entry>
-
-              <entry>propriété (nombre ou chaîne de caractères représentant un
-              nombre)</entry>
-
-              <entry>vérifie si la valeur est supérieure ou égale à max</entry>
-
-              <entry>ajoute une contrainte de vérification sur la
-              colonne</entry>
-            </row>
-
-            <row>
-              <entry>@NotNull</entry>
-
-              <entry>propriété</entry>
-
-              <entry>vérifie si la valeur n'est pas nulle</entry>
-
-              <entry>les colonnes sont marquées "not null"</entry>
-            </row>
-
-            <row>
-              <entry>@Past</entry>
-
-              <entry>propriété (Date ou Calendar)</entry>
-
-              <entry>vérifie si la date est dans le passé</entry>
-
-              <entry>ajoute une contrainte de vérification sur la
-              colonne</entry>
-            </row>
-
-            <row>
-              <entry>@Future</entry>
-
-              <entry>propriété (Date ou Calendar)</entry>
-
-              <entry>vérifie si la date est dans le futur</entry>
-
-              <entry>aucun</entry>
-            </row>
-
-            <row>
-              <entry>@Pattern(regex="regexp", flag=)</entry>
-
-              <entry>propriété (String)</entry>
-
-              <entry>vérifie si la propriété correspond à l'expression
-              rationnelle donnée (pour "flag", voir
-              <classname> java.util.regex.Pattern</classname>)</entry>
-
-              <entry>aucun</entry>
-            </row>
-
-            <row>
-              <entry>@Range(min=, max=)</entry>
-
-              <entry>propriété (nombre ou chaîne de caractères représentant un
-              nombre)</entry>
-
-              <entry>vérifie si la valeur est comprise entre min et max
-              (inclus)</entry>
-
-              <entry>ajoute une contrainte de vérification sur la
-              colonne</entry>
-            </row>
-
-            <row>
-              <entry>@Size(min=, max=)</entry>
-
-              <entry>propriété (tableau, collection, map)</entry>
-
-              <entry>vérifie si la taille de l'élément est comprise entre min et
-              max (inclus)</entry>
-
-              <entry>aucun</entry>
-            </row>
-
-            <row>
-              <entry>@AssertFalse</entry>
-
-              <entry>propriété</entry>
-
-              <entry>vérifie que la méthode est évaluée à faux (utile pour les
-              contraintes exprimées dans le code plutôt que dans les
-              annotations)</entry>
-
-              <entry>aucun</entry>
-            </row>
-
-            <row>
-              <entry>@AssertTrue</entry>
-
-              <entry>propriété</entry>
-
-              <entry>vérifie que la méthode est évaluée à vrai (utile pour les
-              contraintes exprimées dans le code plutôt que dans les
-              annotations)</entry>
-
-              <entry>aucun</entry>
-            </row>
-
-            <row>
-              <entry>@Valid</entry>
-
-              <entry>propriété (objet)</entry>
-
-              <entry>exécute la validation récursivement sur l'objet associé.
-              Si l'objet est une Collection ou un tableau, les éléments sont
-              validés récursivement. Si l'objet est une Map, les éléments
-              valeur sont validés récursivement.</entry>
-
-              <entry>aucun</entry>
-            </row>
-
-            <row>
-              <entry>@Email</entry>
-
-              <entry>propriété (String)</entry>
-
-              <entry>vérifie si la chaîne de caractères est conforme à la
-              spécification d'une adresse e-mail</entry>
-
-              <entry>aucun</entry>
-            </row>
-          </tbody>
-        </tgroup>
-      </table>
-    </sect2>
-
-    <sect2 id="validator-constraints-error" xreflabel="Messages d'erreur">
-      <title>Messages d'erreur</title>
-
-      <para>Hibernate Validator arrive avec un ensemble de messages d'erreur par
-      défaut traduits dans environ dix langues (si la vôtre n'en fait pas
-      partie, veuillez nous envoyer un patch). Vous pouvez surcharger ces
-      messages en créant un <filename>ValidatorMessages.properties</filename>
-      (ou <filename>ValidatorMessages_loc.properties</filename>) et en
-      surchargeant les clefs dont vous avez besoin. Vous pouvez même ajouter
-      votre propre ensemble de messages supplémentaire lorsque vous écrivez
-      vos annotations de validation. Si Hibernate Validator ne peut pas trouver
-      une clef à partir de votre resourceBundle ou de votre ValidatorMessage,
-      il se repliera sur les valeurs intégrées par défaut.</para>
-
-      <para>Alternativement vous pouvez fournir un
-      <classname>ResourceBundle</classname> pendant la vérification par
-      programmation des règles de validation sur un bean, ou si vous voulez un
-      mécanisme d'interpolation complètement différent, vous pouvez fournir une
-      implémentation de
-      <literal>org.hibernate.validator.MessageInterpolator</literal> (lisez la
-      JavaDoc pour plus d'informations).</para>
-    </sect2>
-
-    <sect2>
-      <title>Ecrire vos propres contraintes</title>
-
-      <para>Etendre l'ensemble de contraintes intégrées est extrêment facile.
-      N'importe quelle contrainte est constituée deux morceaux : le
-      <emphasis>descripteur</emphasis> de contrainte (l'annotation) et le
-      <emphasis>validateur</emphasis> de contrainte (la classe
-      d'implémentation). Voici un simple descripteur personnalisé :</para>
-
-      <programlisting>@ValidatorClass(CapitalizedValidator.class)
- at Target(METHOD)
- at Retention(RUNTIME)
- at Documented
-public @interface Capitalized {
-    CapitalizeType type() default Capitalize.FIRST;
-    String message() default "has incorrect capitalization";
-}</programlisting>
-
-      <para><literal>type</literal> est un paramètre décrivant comment la
-      propriété devrait être mise en majuscule. Ceci est un paramètre
-      utilisateur complètement dépendant du fonctionnement de
-      l'annotation.</para>
-
-      <para><literal>message</literal> est la chaîne de caractères par défaut
-      utilisée pour décrire la violation de contrainte et est obligatoire. Vous
-      pouvez mettre la chaîne de caractères dans le code ou bien l'externaliser
-      en partie ou complètement avec le mécanisme ResourceBundle Java. Les
-      valeurs des paramètres sont injectées à l'intérieur du message quand
-      la chaîne de caractères <literal>{parameter}</literal> est trouvée (dans
-      notre exemple <literal>Capitalization is not {type}</literal> générerait
-      <literal>Capitalization is not FIRST</literal>), externaliser toute la
-      chaîne dans <filename>ValidatorMessages.properties</filename> est
-      considéré comme une bonne pratique. Voir <xref
-      linkend="validator-constraints-error" />.</para>
-
-      <programlisting>@ValidatorClass(CapitalizedValidator.class)
- at Target(METHOD)
- at Retention(RUNTIME)
- at Documented
-public @interface Capitalized {
-    CapitalizeType type() default Capitalize.FIRST;
-    String message() default "{validator.capitalized}";
-}
-
-...
-#in ValidatorMessages.properties
-validator.capitalized=<literal>Capitalization is not {type}</literal></programlisting>
-
-      <para>Comme vous pouvez le voir la notation {} est récursive.</para>
-
-      <para>Pour lier un descripteur à l'implémentation de son validateur, nous
-      utilisons la méta-annotation <literal>@ValidatorClass</literal>. Le
-      paramètre de la classe du validateur doit nommer une classe qui implémente
-      <literal>Validator&lt;ConstraintAnnotation&gt;</literal>.</para>
-
-      <para>Nous devons maintenant implémenter le validateur (ie
-      l'implémentation vérifiant la règle). Une implémentation de validation
-      peut vérifier la valeur d'une propriété (en implémentant
-      <literal>PropertyConstraint</literal>) et/ou peut modifier les
-      méta-données de mapping d'Hibernate pour exprimer la contrainte au niveau
-      de la base de données (en implémentant
-      <literal>PersistentClassConstraint</literal>).</para>
-
-      <programlisting>public class CapitalizedValidator
-        implements Validator&lt;Capitalized&gt;, PropertyConstraint {
-    private CapitalizeType type;
-
-    // partie du contrat de Validator&lt;Annotation&gt;,
-    // permet d'obtenir et d'utiliser les valeurs de l'annotation
-    public void initialize(Capitalized parameters) {
-        type = parameters.type();
-    }
-
-    // partie du contrat de la contrainte de la propriété
-    public boolean isValid(Object value) {
-        if (value==null) return true;
-        if ( !(value instanceof String) ) return false;
-        String string = (String) value;
-        if (type == CapitalizeType.ALL) {
-            return string.equals( string.toUpperCase() );
-        }
-        else {
-            String first = string.substring(0,1);
-            return first.equals( first.toUpperCase();
-        }
-    }
-}</programlisting>
-
-      <para>La méthode <literal>isValid()</literal> devrait retourner false si
-      la contrainte a été violée. Pour plus d'exemples, référez-vous aux
-      implémentations intégrées du validateur.</para>
-
-      <para>Nous avons seulement vu la validation au niveau propriété, mais vous
-      pouvez écrire une annotation de validation au niveau d'un bean. Plutôt
-      que de recevoir l'instance de retour d'une propriété, le bean lui-même
-      sera passé au validateur. Pour activer la vérification de validation,
-      annotez juste le bean lui-même. Un petit exemple peut être trouvé dans la
-      suite de tests unitaires.</para>
-    </sect2>
-
-    <sect2>
-      <title>Annoter votre modèle de données</title>
-
-      <para>Maintenant que vous vous êtes familiarisés avec les annotations, la
-      syntaxe devrait être connue.</para>
-
-      <programlisting>public class Address {
-    private String line1;
-    private String line2;
-    private String zip;
-    private String state;
-    private String country;
-    private long id;
-
-    // une chaîne non nulle de 20 caractères maximum
-    @Length(max=20)
-    @NotNull
-    public String getCountry() {
-        return country;
-    }
-
-    // une chaîne de caractères non nulle
-    @NotNull
-    public String getLine1() {
-        return line1;
-    }
-
-    // pas de contrainte
-    public String getLine2() {
-        return line2;
-    }
-
-    // une chaîne non nulle de 3 caractères maximum
-    @Length(max=3) @NotNull
-    public String getState() {
-        return state;
-    }
-
-    // une chaîne non nulle de 5 caractères maximum représentant un nombre
-    // si la chaîne de caractères est plus longue, le message sera recherché
-    // dans le resource bundle avec la clef 'long'
-    @Length(max=5, message="{long}")
-    @Pattern(regex="[0-9]+")
-    @NotNull
-    public String getZip() {
-        return zip;
-    }
-
-    // devrait toujours être vrai
-    @AssertTrue
-    public boolean isValid() {
-        return true;
-    }
-
-    // un nombre entre 1 et 2000
-    @Id @Min(1)
-    @Range(max=2000)
-    public long getId() {
-        return id;
-    }
-}</programlisting>
-
-      <para>Bien que l'exemple montre seulement la validation de propriétés
-      publiques, vous pouvez aussi annoter des champs avec n'importe quelle
-      visibilité.</para>
-
-      <programlisting>@MyBeanConstraint(max=45)
-public class Dog {
-    @AssertTrue private boolean isMale;
-    @NotNull protected String getName() { ... };
-    ...
-}</programlisting>
-
-      <para>Vous pouvez aussi annoter des inferfaces. Hibernate Validator
-      vérifiera toutes les classes parentes et les interfaces héritées ou
-      implémentées par un bean donné pour lire les annotations appropriées du
-      validateur.</para>
-
-      <programlisting>public interface Named {
-    @NotNull String getName();
-    ...
-}
-
-public class Dog implements Named {
-
-    @AssertTrue private boolean isMale;
-
-    public String getName() { ... };
-
-}</programlisting>
-
-      <para>La propriété "name" sera vérifiée pour la nullité lorsque le bean
-      Dog sera validé.</para>
-    </sect2>
-  </sect1>
-
-  <sect1>
-    <title>Utiliser le framework Validator</title>
-
-    <para>Hibernate Validator est destiné à être utilisé pour implémenter une
-    validation de données à plusieurs couches, où nous exprimons des contraintes
-    à un seul endroit (le modèle de données annoté) et les appliquons aux
-    différents niveaux de l'application.</para>
-
-    <sect2>
-      <title>Validation au niveau du schéma de la base de données</title>
-
-      <para>Par défaut, Hibernate Annotations traduira les contraintes que vous
-      avez définies sur vos entités en méta-données de mapping. Par exemple, si
-      une propriété de votre entité est annotée avec
-      <literal>@NotNull</literal>, ses colonnes seront déclarées comme
-      <literal>not null</literal> dans le schéma DDL généré par
-      Hibernate.</para>
-    </sect2>
-
-    <sect2>
-      <title>La validation basée sur les événements Hibernate</title>
-
-      <para>Hibernate Validator a deux listeners d'événements Hibernate
-      intégrés. Quand un <literal>PreInsertEvent</literal> ou un
-      <literal>PreUpdateEvent</literal> survient, les listeners vérifieront
-      toutes les contraintes de l'instance de l'entité et lèveront une exception
-      si une contrainte est violée. Fondamentalement, les objets seront vérifiés
-      avant les insertions et avant les mises à jour effectuées par Hibernate.
-      C'est le plus commode et la manière la plus simple d'activer le processus
-      de validation. Sur une violation de contrainte, l'événement lèvera une
-      exception d'exécution <classname>InvalidStateException</classname> (NdT :
-      c'est une RuntimeException) laquelle contient un tableau
-      d'<literal>InvalidValue</literal>s décrivant chaque échec.</para>
-
-      <programlisting>&lt;hibernate-configuration&gt;
-    ...
-    &lt;event type="pre-update"&gt;
-        &lt;listener
-          class="org.hibernate.validator.event.ValidatePreUpdateEventListener"/&gt;
-    &lt;/event&gt;
-    &lt;event type="pre-insert"&gt;
-        &lt;listener
-          class="org.hibernate.validator.event.ValidatePreInsertEventListener"/&gt;
-    &lt;/event&gt;
-&lt;/hibernate-configuration&gt;</programlisting>
-
-      <note>
-        <para>Lors de l'utilisation d'Hibernate Entity Manager, le framework
-        Validation est activé par défaut. Si les beans ne sont pas annotés avec
-        des annotations de validation, il n'y a pas de coût en terme de
-        performance.</para>
-      </note>
-    </sect2>
-
-    <sect2>
-      <title>La validation au niveau applicatif</title>
-
-      <para>Hibernate Validator peut être utilisé n'importe où dans le code de
-      votre application.</para>
-
-      <programlisting>ClassValidator personValidator = new ClassValidator( Person.class );
-ClassValidator addressValidator = new ClassValidator( Address.class, ResourceBundle.getBundle("messages", Locale.ENGLISH) );
-
-InvalidValue[] validationMessages = addressValidator.getInvalidValues(address);</programlisting>
-
-      <para>Les deux premières lignes préparent Hibernate Validator pour la
-      vérification de classes. La première s'appuie sur les messages d'erreur
-      intégrés à Hibernate Validator (voir
-      <xref linkend="validator-constraints-error" />), la seconde utilise un
-      resource bundle pour ses messages. Il est considéré comme une bonne
-      pratique d'exécuter ces lignes une fois et de cacher les instances de
-      validateur.</para>
-
-      <para>La troisième ligne valide en fait l'instance
-      <literal>Address</literal> et retourne un tableau
-      d'<literal>InvalidValue</literal>s. Votre logique applicative sera alors
-      capable de réagir aux échecs.</para>
-
-      <para>Vous pouvez aussi vérifier une propriété particulière plutôt que
-      tout le bean. Ceci pourrait être utile lors d'interactions avec
-      l'utilisateur propriété par propriété.</para>
-
-      <programlisting>ClassValidator addressValidator = new ClassValidator( Address.class, ResourceBundle.getBundle("messages", Locale.ENGLISH) );
-
-// récupère seulement les valeurs invalides de la propriété "city"
-InvalidValue[] validationMessages = addressValidator.getInvalidValues(address, "city");
-
-// récupère seulement les valeurs potentielles invalides de la propriété "city"
-InvalidValue[] validationMessages = addressValidator.getPotentialInvalidValues("city", "Paris")</programlisting>
-    </sect2>
-
-    <sect2>
-      <title>Informations de validation</title>
-
-      <para>Comme un transporteur d'informations de validation, Hibernate
-      fournit un tableau d'<classname>InvalidValue</classname>s. Chaque
-      <literal>InvalidValue</literal> a un groupe de méthodes décrivant les
-      problèmes individuels.</para>
-
-      <para><methodname>getBeanClass()</methodname> récupère le type du bean
-      ayant échoué.</para>
-
-      <para><methodname>getBean()</methodname> récupère l'instance du bean ayant
-      échoué (s'il y en a, c'est-à-dire pas lors de l'utilisation de
-      <methodname>getPotentianInvalidValues()</methodname>).</para>
-
-      <para><methodname>getValue()</methodname> récupère la valeur ayant
-      échouée.</para>
-
-      <para><methodname>getMessage()</methodname> récupère le message d'erreur
-      internationalisé.</para>
-
-      <para><methodname>getRootBean()</methodname> récupère l'instance du bean
-      racine ayant généré le problème (utile en conjonction avec
-      <literal>@Valid</literal>), est nulle si getPotentianInvalidValues() est
-      utilisée.</para>
-
-      <para><literal>getPropertyPath()</literal> récupère le chemin (séparé par
-      des points) de la propriété ayant échouée à partir du bean racine.</para>
-    </sect2>
-  </sect1>
-</chapter>
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/doc/reference/fr/modules/validator.xml (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/doc/reference/fr/modules/validator.xml)
===================================================================
--- trunk/HibernateExt/annotations/doc/reference/fr/modules/validator.xml	                        (rev 0)
+++ trunk/HibernateExt/annotations/doc/reference/fr/modules/validator.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,569 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<chapter id="validator">
+  <title>Hibernate Validator</title>
+
+  <para>Les annotations sont une manière très commode et élégante pour spécifier
+  des contraintes invariantes sur un modèle de données. Vous pouvez, par
+  exemple, indiquer qu'une propriété ne devrait pas être nulle, que le solde
+  d'un compte devrait être strictement positif, etc. Ces contraintes de modèle
+  de données sont déclarées dans le bean lui-même en annotant ses propriétés.
+  Un validateur peut alors les lire et vérifier les violations de contraintes.
+  Le mécanisme de validation peut être exécuté dans différentes couches de
+  votre application (présentation, accès aux données) sans devoir dupliquer
+  ces règles. Hibernate Validator a été conçu dans ce but.</para>
+
+  <para>Hibernate Validator fonctionne sur deux niveaux. D'abord, il est capable
+  de vérifier des violations de contraintes sur les instances d'une classe en
+  mémoire. Ensuite, il peut appliquer les contraintes au méta-modèle d'Hibernate
+  et les incorporer au schéma de base de données généré.</para>
+
+  <para>Chaque annotation de contrainte est associée à l'implémentation du
+  validateur responsable de vérifier la contrainte sur l'instance de l'entité.
+  Un validateur peut aussi (optionnellement) appliquer la contrainte au
+  méta-modèle d'Hibernate, permettant à Hibernate de générer le DDL qui
+  exprime la contrainte. Avec le listener d'événements approprié, vous pouvez
+  exécuter l'opération de vérification lors des insertions et des mises à jour
+  effectuées par Hibernate. Hibernate Validator n'est pas limité à Hibernate.
+  Vous pouvez facilement l'utiliser n'importe où dans votre application.</para>
+
+  <para>Lors de la vérification des instances à l'exécution, Hibernate Validator
+  retourne des informations à propos des violations de contraintes dans un
+  tableau de <classname>InvalidValue</classname>s. Parmi d'autres informations,
+  <classname>InvalidValue</classname> contient un message de description
+  d'erreur qui peut inclure les valeurs des paramètres associés à l'annotation
+  (p. ex. la limite de taille), et des chaînes de caractères qui peuvent être
+  externalisées avec un <classname>ResourceBundle</classname>.</para>
+
+  <sect1 id="validator-constraints">
+    <title>Contraintes</title>
+
+    <sect2>
+      <title>Qu'est-ce qu'une contrainte ?</title>
+
+      <para>Une contrainte est représentée par une annotation. Une contrainte a
+      généralement des attributs utilisés pour paramétrer les limites des
+      contraintes. La contrainte s'applique à l'élément annoté.</para>
+    </sect2>
+
+    <sect2>
+      <title>Contraintes intégrées</title>
+
+      <para>Hibernate Validator arrive avec des contraintes intégrées,
+      lesquelles couvrent la plupart des vérifications de données de base. Comme
+      nous le verrons plus tard, vous n'êtes pas limité à celles-ci, vous pouvez
+      écrire vos propres contraintes en une minute.</para>
+
+      <table>
+        <title>Contraintes intégrées</title>
+
+        <tgroup cols="4">
+          <colspec align="center" />
+
+          <thead>
+            <row>
+              <entry>Annotation</entry>
+
+              <entry>S'applique à</entry>
+
+              <entry>Vérification à l'exécution</entry>
+
+              <entry>Impact sur les méta-données d'Hibernate</entry>
+            </row>
+          </thead>
+
+          <tbody>
+            <row>
+              <entry>@Length(min=, max=)</entry>
+
+              <entry>propriété (String)</entry>
+
+              <entry>vérifie si la longueur de la chaîne de caractères est
+              comprise dans l'intervalle</entry>
+
+              <entry>la longueur de la colonne sera positionnée à max</entry>
+            </row>
+
+            <row>
+              <entry>@Max(value=)</entry>
+
+              <entry>propriété (nombre ou chaîne de caractères représentant un
+              nombre)</entry>
+
+              <entry>vérifie si la valeur est inférieure ou égale à max</entry>
+
+              <entry>ajoute une contrainte de vérification sur la
+              colonne</entry>
+            </row>
+
+            <row>
+              <entry>@Min(value=)</entry>
+
+              <entry>propriété (nombre ou chaîne de caractères représentant un
+              nombre)</entry>
+
+              <entry>vérifie si la valeur est supérieure ou égale à max</entry>
+
+              <entry>ajoute une contrainte de vérification sur la
+              colonne</entry>
+            </row>
+
+            <row>
+              <entry>@NotNull</entry>
+
+              <entry>propriété</entry>
+
+              <entry>vérifie si la valeur n'est pas nulle</entry>
+
+              <entry>les colonnes sont marquées "not null"</entry>
+            </row>
+
+            <row>
+              <entry>@Past</entry>
+
+              <entry>propriété (Date ou Calendar)</entry>
+
+              <entry>vérifie si la date est dans le passé</entry>
+
+              <entry>ajoute une contrainte de vérification sur la
+              colonne</entry>
+            </row>
+
+            <row>
+              <entry>@Future</entry>
+
+              <entry>propriété (Date ou Calendar)</entry>
+
+              <entry>vérifie si la date est dans le futur</entry>
+
+              <entry>aucun</entry>
+            </row>
+
+            <row>
+              <entry>@Pattern(regex="regexp", flag=)</entry>
+
+              <entry>propriété (String)</entry>
+
+              <entry>vérifie si la propriété correspond à l'expression
+              rationnelle donnée (pour "flag", voir
+              <classname> java.util.regex.Pattern</classname>)</entry>
+
+              <entry>aucun</entry>
+            </row>
+
+            <row>
+              <entry>@Range(min=, max=)</entry>
+
+              <entry>propriété (nombre ou chaîne de caractères représentant un
+              nombre)</entry>
+
+              <entry>vérifie si la valeur est comprise entre min et max
+              (inclus)</entry>
+
+              <entry>ajoute une contrainte de vérification sur la
+              colonne</entry>
+            </row>
+
+            <row>
+              <entry>@Size(min=, max=)</entry>
+
+              <entry>propriété (tableau, collection, map)</entry>
+
+              <entry>vérifie si la taille de l'élément est comprise entre min et
+              max (inclus)</entry>
+
+              <entry>aucun</entry>
+            </row>
+
+            <row>
+              <entry>@AssertFalse</entry>
+
+              <entry>propriété</entry>
+
+              <entry>vérifie que la méthode est évaluée à faux (utile pour les
+              contraintes exprimées dans le code plutôt que dans les
+              annotations)</entry>
+
+              <entry>aucun</entry>
+            </row>
+
+            <row>
+              <entry>@AssertTrue</entry>
+
+              <entry>propriété</entry>
+
+              <entry>vérifie que la méthode est évaluée à vrai (utile pour les
+              contraintes exprimées dans le code plutôt que dans les
+              annotations)</entry>
+
+              <entry>aucun</entry>
+            </row>
+
+            <row>
+              <entry>@Valid</entry>
+
+              <entry>propriété (objet)</entry>
+
+              <entry>exécute la validation récursivement sur l'objet associé.
+              Si l'objet est une Collection ou un tableau, les éléments sont
+              validés récursivement. Si l'objet est une Map, les éléments
+              valeur sont validés récursivement.</entry>
+
+              <entry>aucun</entry>
+            </row>
+
+            <row>
+              <entry>@Email</entry>
+
+              <entry>propriété (String)</entry>
+
+              <entry>vérifie si la chaîne de caractères est conforme à la
+              spécification d'une adresse e-mail</entry>
+
+              <entry>aucun</entry>
+            </row>
+          </tbody>
+        </tgroup>
+      </table>
+    </sect2>
+
+    <sect2 id="validator-constraints-error" xreflabel="Messages d'erreur">
+      <title>Messages d'erreur</title>
+
+      <para>Hibernate Validator arrive avec un ensemble de messages d'erreur par
+      défaut traduits dans environ dix langues (si la vôtre n'en fait pas
+      partie, veuillez nous envoyer un patch). Vous pouvez surcharger ces
+      messages en créant un <filename>ValidatorMessages.properties</filename>
+      (ou <filename>ValidatorMessages_loc.properties</filename>) et en
+      surchargeant les clefs dont vous avez besoin. Vous pouvez même ajouter
+      votre propre ensemble de messages supplémentaire lorsque vous écrivez
+      vos annotations de validation. Si Hibernate Validator ne peut pas trouver
+      une clef à partir de votre resourceBundle ou de votre ValidatorMessage,
+      il se repliera sur les valeurs intégrées par défaut.</para>
+
+      <para>Alternativement vous pouvez fournir un
+      <classname>ResourceBundle</classname> pendant la vérification par
+      programmation des règles de validation sur un bean, ou si vous voulez un
+      mécanisme d'interpolation complètement différent, vous pouvez fournir une
+      implémentation de
+      <literal>org.hibernate.validator.MessageInterpolator</literal> (lisez la
+      JavaDoc pour plus d'informations).</para>
+    </sect2>
+
+    <sect2>
+      <title>Ecrire vos propres contraintes</title>
+
+      <para>Etendre l'ensemble de contraintes intégrées est extrêment facile.
+      N'importe quelle contrainte est constituée deux morceaux : le
+      <emphasis>descripteur</emphasis> de contrainte (l'annotation) et le
+      <emphasis>validateur</emphasis> de contrainte (la classe
+      d'implémentation). Voici un simple descripteur personnalisé :</para>
+
+      <programlisting>@ValidatorClass(CapitalizedValidator.class)
+ at Target(METHOD)
+ at Retention(RUNTIME)
+ at Documented
+public @interface Capitalized {
+    CapitalizeType type() default Capitalize.FIRST;
+    String message() default "has incorrect capitalization";
+}</programlisting>
+
+      <para><literal>type</literal> est un paramètre décrivant comment la
+      propriété devrait être mise en majuscule. Ceci est un paramètre
+      utilisateur complètement dépendant du fonctionnement de
+      l'annotation.</para>
+
+      <para><literal>message</literal> est la chaîne de caractères par défaut
+      utilisée pour décrire la violation de contrainte et est obligatoire. Vous
+      pouvez mettre la chaîne de caractères dans le code ou bien l'externaliser
+      en partie ou complètement avec le mécanisme ResourceBundle Java. Les
+      valeurs des paramètres sont injectées à l'intérieur du message quand
+      la chaîne de caractères <literal>{parameter}</literal> est trouvée (dans
+      notre exemple <literal>Capitalization is not {type}</literal> générerait
+      <literal>Capitalization is not FIRST</literal>), externaliser toute la
+      chaîne dans <filename>ValidatorMessages.properties</filename> est
+      considéré comme une bonne pratique. Voir <xref
+      linkend="validator-constraints-error" />.</para>
+
+      <programlisting>@ValidatorClass(CapitalizedValidator.class)
+ at Target(METHOD)
+ at Retention(RUNTIME)
+ at Documented
+public @interface Capitalized {
+    CapitalizeType type() default Capitalize.FIRST;
+    String message() default "{validator.capitalized}";
+}
+
+...
+#in ValidatorMessages.properties
+validator.capitalized=<literal>Capitalization is not {type}</literal></programlisting>
+
+      <para>Comme vous pouvez le voir la notation {} est récursive.</para>
+
+      <para>Pour lier un descripteur à l'implémentation de son validateur, nous
+      utilisons la méta-annotation <literal>@ValidatorClass</literal>. Le
+      paramètre de la classe du validateur doit nommer une classe qui implémente
+      <literal>Validator&lt;ConstraintAnnotation&gt;</literal>.</para>
+
+      <para>Nous devons maintenant implémenter le validateur (ie
+      l'implémentation vérifiant la règle). Une implémentation de validation
+      peut vérifier la valeur d'une propriété (en implémentant
+      <literal>PropertyConstraint</literal>) et/ou peut modifier les
+      méta-données de mapping d'Hibernate pour exprimer la contrainte au niveau
+      de la base de données (en implémentant
+      <literal>PersistentClassConstraint</literal>).</para>
+
+      <programlisting>public class CapitalizedValidator
+        implements Validator&lt;Capitalized&gt;, PropertyConstraint {
+    private CapitalizeType type;
+
+    // partie du contrat de Validator&lt;Annotation&gt;,
+    // permet d'obtenir et d'utiliser les valeurs de l'annotation
+    public void initialize(Capitalized parameters) {
+        type = parameters.type();
+    }
+
+    // partie du contrat de la contrainte de la propriété
+    public boolean isValid(Object value) {
+        if (value==null) return true;
+        if ( !(value instanceof String) ) return false;
+        String string = (String) value;
+        if (type == CapitalizeType.ALL) {
+            return string.equals( string.toUpperCase() );
+        }
+        else {
+            String first = string.substring(0,1);
+            return first.equals( first.toUpperCase();
+        }
+    }
+}</programlisting>
+
+      <para>La méthode <literal>isValid()</literal> devrait retourner false si
+      la contrainte a été violée. Pour plus d'exemples, référez-vous aux
+      implémentations intégrées du validateur.</para>
+
+      <para>Nous avons seulement vu la validation au niveau propriété, mais vous
+      pouvez écrire une annotation de validation au niveau d'un bean. Plutôt
+      que de recevoir l'instance de retour d'une propriété, le bean lui-même
+      sera passé au validateur. Pour activer la vérification de validation,
+      annotez juste le bean lui-même. Un petit exemple peut être trouvé dans la
+      suite de tests unitaires.</para>
+    </sect2>
+
+    <sect2>
+      <title>Annoter votre modèle de données</title>
+
+      <para>Maintenant que vous vous êtes familiarisés avec les annotations, la
+      syntaxe devrait être connue.</para>
+
+      <programlisting>public class Address {
+    private String line1;
+    private String line2;
+    private String zip;
+    private String state;
+    private String country;
+    private long id;
+
+    // une chaîne non nulle de 20 caractères maximum
+    @Length(max=20)
+    @NotNull
+    public String getCountry() {
+        return country;
+    }
+
+    // une chaîne de caractères non nulle
+    @NotNull
+    public String getLine1() {
+        return line1;
+    }
+
+    // pas de contrainte
+    public String getLine2() {
+        return line2;
+    }
+
+    // une chaîne non nulle de 3 caractères maximum
+    @Length(max=3) @NotNull
+    public String getState() {
+        return state;
+    }
+
+    // une chaîne non nulle de 5 caractères maximum représentant un nombre
+    // si la chaîne de caractères est plus longue, le message sera recherché
+    // dans le resource bundle avec la clef 'long'
+    @Length(max=5, message="{long}")
+    @Pattern(regex="[0-9]+")
+    @NotNull
+    public String getZip() {
+        return zip;
+    }
+
+    // devrait toujours être vrai
+    @AssertTrue
+    public boolean isValid() {
+        return true;
+    }
+
+    // un nombre entre 1 et 2000
+    @Id @Min(1)
+    @Range(max=2000)
+    public long getId() {
+        return id;
+    }
+}</programlisting>
+
+      <para>Bien que l'exemple montre seulement la validation de propriétés
+      publiques, vous pouvez aussi annoter des champs avec n'importe quelle
+      visibilité.</para>
+
+      <programlisting>@MyBeanConstraint(max=45)
+public class Dog {
+    @AssertTrue private boolean isMale;
+    @NotNull protected String getName() { ... };
+    ...
+}</programlisting>
+
+      <para>Vous pouvez aussi annoter des inferfaces. Hibernate Validator
+      vérifiera toutes les classes parentes et les interfaces héritées ou
+      implémentées par un bean donné pour lire les annotations appropriées du
+      validateur.</para>
+
+      <programlisting>public interface Named {
+    @NotNull String getName();
+    ...
+}
+
+public class Dog implements Named {
+
+    @AssertTrue private boolean isMale;
+
+    public String getName() { ... };
+
+}</programlisting>
+
+      <para>La propriété "name" sera vérifiée pour la nullité lorsque le bean
+      Dog sera validé.</para>
+    </sect2>
+  </sect1>
+
+  <sect1>
+    <title>Utiliser le framework Validator</title>
+
+    <para>Hibernate Validator est destiné à être utilisé pour implémenter une
+    validation de données à plusieurs couches, où nous exprimons des contraintes
+    à un seul endroit (le modèle de données annoté) et les appliquons aux
+    différents niveaux de l'application.</para>
+
+    <sect2>
+      <title>Validation au niveau du schéma de la base de données</title>
+
+      <para>Par défaut, Hibernate Annotations traduira les contraintes que vous
+      avez définies sur vos entités en méta-données de mapping. Par exemple, si
+      une propriété de votre entité est annotée avec
+      <literal>@NotNull</literal>, ses colonnes seront déclarées comme
+      <literal>not null</literal> dans le schéma DDL généré par
+      Hibernate.</para>
+    </sect2>
+
+    <sect2>
+      <title>La validation basée sur les événements Hibernate</title>
+
+      <para>Hibernate Validator a deux listeners d'événements Hibernate
+      intégrés. Quand un <literal>PreInsertEvent</literal> ou un
+      <literal>PreUpdateEvent</literal> survient, les listeners vérifieront
+      toutes les contraintes de l'instance de l'entité et lèveront une exception
+      si une contrainte est violée. Fondamentalement, les objets seront vérifiés
+      avant les insertions et avant les mises à jour effectuées par Hibernate.
+      C'est le plus commode et la manière la plus simple d'activer le processus
+      de validation. Sur une violation de contrainte, l'événement lèvera une
+      exception d'exécution <classname>InvalidStateException</classname> (NdT :
+      c'est une RuntimeException) laquelle contient un tableau
+      d'<literal>InvalidValue</literal>s décrivant chaque échec.</para>
+
+      <programlisting>&lt;hibernate-configuration&gt;
+    ...
+    &lt;event type="pre-update"&gt;
+        &lt;listener
+          class="org.hibernate.validator.event.ValidatePreUpdateEventListener"/&gt;
+    &lt;/event&gt;
+    &lt;event type="pre-insert"&gt;
+        &lt;listener
+          class="org.hibernate.validator.event.ValidatePreInsertEventListener"/&gt;
+    &lt;/event&gt;
+&lt;/hibernate-configuration&gt;</programlisting>
+
+      <note>
+        <para>Lors de l'utilisation d'Hibernate Entity Manager, le framework
+        Validation est activé par défaut. Si les beans ne sont pas annotés avec
+        des annotations de validation, il n'y a pas de coût en terme de
+        performance.</para>
+      </note>
+    </sect2>
+
+    <sect2>
+      <title>La validation au niveau applicatif</title>
+
+      <para>Hibernate Validator peut être utilisé n'importe où dans le code de
+      votre application.</para>
+
+      <programlisting>ClassValidator personValidator = new ClassValidator( Person.class );
+ClassValidator addressValidator = new ClassValidator( Address.class, ResourceBundle.getBundle("messages", Locale.ENGLISH) );
+
+InvalidValue[] validationMessages = addressValidator.getInvalidValues(address);</programlisting>
+
+      <para>Les deux premières lignes préparent Hibernate Validator pour la
+      vérification de classes. La première s'appuie sur les messages d'erreur
+      intégrés à Hibernate Validator (voir
+      <xref linkend="validator-constraints-error" />), la seconde utilise un
+      resource bundle pour ses messages. Il est considéré comme une bonne
+      pratique d'exécuter ces lignes une fois et de cacher les instances de
+      validateur.</para>
+
+      <para>La troisième ligne valide en fait l'instance
+      <literal>Address</literal> et retourne un tableau
+      d'<literal>InvalidValue</literal>s. Votre logique applicative sera alors
+      capable de réagir aux échecs.</para>
+
+      <para>Vous pouvez aussi vérifier une propriété particulière plutôt que
+      tout le bean. Ceci pourrait être utile lors d'interactions avec
+      l'utilisateur propriété par propriété.</para>
+
+      <programlisting>ClassValidator addressValidator = new ClassValidator( Address.class, ResourceBundle.getBundle("messages", Locale.ENGLISH) );
+
+// récupère seulement les valeurs invalides de la propriété "city"
+InvalidValue[] validationMessages = addressValidator.getInvalidValues(address, "city");
+
+// récupère seulement les valeurs potentielles invalides de la propriété "city"
+InvalidValue[] validationMessages = addressValidator.getPotentialInvalidValues("city", "Paris")</programlisting>
+    </sect2>
+
+    <sect2>
+      <title>Informations de validation</title>
+
+      <para>Comme un transporteur d'informations de validation, Hibernate
+      fournit un tableau d'<classname>InvalidValue</classname>s. Chaque
+      <literal>InvalidValue</literal> a un groupe de méthodes décrivant les
+      problèmes individuels.</para>
+
+      <para><methodname>getBeanClass()</methodname> récupère le type du bean
+      ayant échoué.</para>
+
+      <para><methodname>getBean()</methodname> récupère l'instance du bean ayant
+      échoué (s'il y en a, c'est-à-dire pas lors de l'utilisation de
+      <methodname>getPotentianInvalidValues()</methodname>).</para>
+
+      <para><methodname>getValue()</methodname> récupère la valeur ayant
+      échouée.</para>
+
+      <para><methodname>getMessage()</methodname> récupère le message d'erreur
+      internationalisé.</para>
+
+      <para><methodname>getRootBean()</methodname> récupère l'instance du bean
+      racine ayant généré le problème (utile en conjonction avec
+      <literal>@Valid</literal>), est nulle si getPotentianInvalidValues() est
+      utilisée.</para>
+
+      <para><literal>getPropertyPath()</literal> récupère le chemin (séparé par
+      des points) de la propriété ayant échouée à partir du bean racine.</para>
+    </sect2>
+  </sect1>
+</chapter>
\ No newline at end of file

Deleted: trunk/HibernateExt/annotations/doc/reference/fr/modules/xml-overriding.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/doc/reference/fr/modules/xml-overriding.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/doc/reference/fr/modules/xml-overriding.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,413 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<chapter id="xml-overriding">
-  <title>Surcharger des méta-données à travers du XML</title>
-
-  <para>La cible primaire pour les méta-données dans EJB3 sont les annotations,
-  mais la spécification EJB3 fournit un moyen de surcharger ou remplacer les
-  méta-données définies par des annotations à travers un descripteur de
-  déploiement XML. Dans la version courante, seule la surcharge des annotations
-  pure EJB3 est prise en charge. Si vous souhaitez utiliser des caractéristiques
-  spécifiques à Hibernate dans des entités, vous devrez utiliser les annotations
-  ou vous replier sur les fichiers hbm. Vous pouvez bien sûr mélanger et faire
-  correspondre des entités annotées et des entités décrites dans des fichiers
-  hbm.</para>
-
-  <para>La suite de test unitaires montre des exemples supplémentaires de
-  fichier XML.</para>
-
-  <section id="xml-overriding-principles">
-    <title>Principes</title>
-
-    <para>La structure du descripteur de déploiement XML a été conçue pour
-    refléter celle des annotations. Donc si vous connaissez la structure des
-    annotations, utiliser le schéma XML sera facile pour vous.</para>
-
-    <para>Vous pouvez définir un ou plusieurs fichiers XML décrivant vos
-    méta-données, ces fichiers seront fusionnés par le moteur de surcharge.</para>
-
-    <section>
-      <title>Méta-données de niveau global</title>
-
-      <para>Vous pouvez définir des méta-données de niveau global disponibles
-      pour tous les fichiers XML. Vous ne devez pas définir ces méta-données
-      plus d'une fois par déploiement.</para>
-
-      <programlisting>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
-
-&lt;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 orm_1_0.xsd"
-  version="1.0"&gt;
-
-    &lt;persistence-unit-metadata&gt;
-        &lt;xml-mapping-metadata-complete/&gt;
-        &lt;persistence-unit-defaults&gt;
-            &lt;schema&gt;myschema&lt;/schema&gt;
-            &lt;catalog&gt;mycatalog&lt;/catalog&gt;
-            &lt;cascade-persist/&gt;
-        &lt;/persistence-unit-defaults&gt;
-    &lt;/persistence-unit-metadata&gt;</programlisting>
-
-      <para><literal>xml-mapping-metadata-complete</literal> signifie que toutes
-      les entités, classes mères mappées et méta-données devraient être
-      récupérées à partir du XML (c'est-à-dire ignorer les annotations).</para>
-
-      <para><literal>schema / catalog</literal> surchargera toutes les
-      définitions par défaut de schéma et de catalogue dans les méta-données
-      (XML et annotations).</para>
-
-      <para><literal>cascade-persist</literal> signifie que toutes les
-      associations ont PERSIST comme type de cascade. Nous vous recommandons de
-      ne pas utiliser cette fonctionnalité.</para>
-    </section>
-
-    <section id="xml-overriding-principles-entity" revision="1">
-      <title>Méta-données de niveau entité</title>
-
-      <para>Vous pouvez définir ou surcharger des informations de méta-données
-      sur une entité donnée.</para>
-
-      <programlistingco>
-        <areaspec>
-          <area coords="3 85" id="aa1" />
-
-          <area coords="9 85" id="aa2" />
-
-          <area coords="10 85" id="aa3" />
-
-          <area coords="11 85" id="aa4" />
-
-          <area coords="17 85" id="aa5" />
-
-          <area coords="23 85" id="aa6" />
-
-          <area coords="24 85" id="aa7" />
-
-          <area coords="25 85" id="aa8" />
-
-          <area coords="26 85" id="aa9" />
-
-          <area coords="31 85" id="aa10" />
-        </areaspec>
-
-        <programlisting>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
-
-&lt;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 orm_1_0.xsd"
-  version="1.0"&gt;
-
-    &lt;package&gt;org.hibernate.test.annotations.reflection&lt;/package&gt;
-    &lt;entity class="Administration" access="PROPERTY" metadata-complete="true"&gt;
-        &lt;table name="tbl_admin"&gt;
-            &lt;unique-constraint&gt;
-                &lt;column-name&gt;firstname&lt;/column-name&gt;
-                &lt;column-name&gt;lastname&lt;/column-name&gt;
-            &lt;/unique-constraint&gt;
-        &lt;/table&gt;
-        &lt;secondary-table name="admin2"&gt;
-            &lt;primary-key-join-column name="admin_id" referenced-column-name="id"/&gt;
-            &lt;unique-constraint&gt;
-                &lt;column-name&gt;address&lt;/column-name&gt;
-            &lt;/unique-constraint&gt;
-        &lt;/secondary-table&gt;
-        &lt;id-class class="SocialSecurityNumber"/&gt;
-        &lt;inheritance strategy="JOINED"/&gt;
-        &lt;sequence-generator name="seqhilo" sequence-name="seqhilo"/&gt;
-        &lt;table-generator name="table" table="tablehilo"/&gt;
-        ...
-    &lt;/entity&gt;
-
-    &lt;entity class="PostalAdministration"&gt;
-        &lt;primary-key-join-column name="id"/&gt;
-        ...
-    &lt;/entity&gt;
-&lt;/entity-mappings&gt;</programlisting>
-
-        <calloutlist>
-          <callout arearefs="aa1">
-            <para><literal>entity-mappings</literal> : entity-mappings est
-            l'élément racine pour tous les fichiers XML. Vous devez déclarer le
-            schéma xml, le fichier du schéma est inclus dans le fichier
-            hibernate-annotations.jar, aucun accès à internet ne sera effectué
-            par Hibernate Annotations.</para>
-          </callout>
-
-          <callout arearefs="aa2">
-            <para><literal>package</literal> (optionnel) : package par défaut
-            utilisé pour tous les noms de classes sans package dans le fichier
-            de descripteur de déploiement donné.</para>
-          </callout>
-
-          <callout arearefs="aa3">
-            <para><literal>entity</literal> : décrit une entité.</para>
-
-            <para><literal>metadata-complete</literal> définit si la description
-            des méta-données pour cet élément est complète ou pas (en d'autres
-            mots, si les annotations présentes au niveau de la classe devraient
-            être prises en compte ou pas).</para>
-
-            <para>Une entité doit avoir un attribut <literal>class</literal>
-            référençant une classe java à laquelle s'applique les
-            méta-données.</para>
-
-            <para>Vous pouvez surcharger un nom d'entité avec l'attribut
-            <literal>name</literal>, si aucun n'est défini et si une annotation
-            <literal>@Entity.name</literal> est présente, alors elle est
-            utilisée (et établit que les méta-données ne sont pas
-            complètes).</para>
-
-            <para>Pour un élément avec des méta-données complètes (voir
-            ci-dessous), vous pouvez définir un attribut
-            <literal>access</literal> (soit <literal>FIELD</literal>, soit
-            <literal>PROPERTY</literal> (valeur par défaut)). Pour un élément
-            avec des méta-données incomplètes, si <literal>access</literal>
-            n'est pas défini, la position de @Id permettra de le déterminer, si
-            <literal>access</literal> est défini, sa valeur est utilisée.</para>
-          </callout>
-
-          <callout arearefs="aa4">
-            <para><literal>table</literal> : vous pouvez déclarer des propriétés
-            de table (nom, schéma, catalogue), si aucune n'est définie,
-            l'annotation java est utilisée.</para>
-
-            <para>Vous pouvez définir une ou plusieurs contraintes d'unicité
-            comme dans l'exemple.</para>
-          </callout>
-
-          <callout arearefs="aa5">
-            <para><literal>secondary-table</literal> : définit une table
-            secondaire très semblable à une table habituelle excepté que vous
-            pouvez définir les colonnes de clef primaire / clef étrangère avec
-            l'élément <literal>primary-key-join-column</literal>. Sur des
-            méta-données incomplètes, les annotations de table secondaire sont
-            utilisées seulement s'il n'y a pas de <literal>secondary-table</literal>
-            de défini, sinon les annotations sont ignorées.</para>
-          </callout>
-
-          <callout arearefs="aa6">
-            <para><literal>id-class</literal> : définit la classe identifiante
-            comme le fait <literal>@IdClass</literal>.</para>
-          </callout>
-
-          <callout arearefs="aa7">
-            <para><literal>inheritance</literal> : définit la stratégie
-            d'héritage (<literal>JOINED</literal>,
-            <literal>TABLE_PER_CLASS</literal>,
-            <literal>SINGLE_TABLE</literal>) ; disponible seulement au niveau de
-            l'élément racine.</para>
-          </callout>
-
-          <callout arearefs="aa8">
-            <para><literal>sequence-generator</literal> : définit un générateur
-            de séquence.</para>
-          </callout>
-
-          <callout arearefs="aa9">
-            <para><literal>table-generator</literal> : définit un générateur de
-            table.</para>
-          </callout>
-
-          <callout arearefs="aa10">
-            <para><literal><literal>primary-key-join-column</literal></literal> :
-            définit la colonne de jointure sur la clef primaire pour les
-            entités filles lorsque la stratégie d'héritage utilisée est
-            JOINED.</para>
-          </callout>
-        </calloutlist>
-      </programlistingco>
-
-      <programlistingco>
-        <areaspec>
-          <area coords="11 85" id="ab1" />
-
-          <area coords="18 85" id="ab2" />
-
-          <area coords="22  85" id="ab3" />
-
-          <area coords="28 85" id="ab4" />
-
-          <area coords="34 85" id="ab5" />
-        </areaspec>
-
-        <programlisting>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
-
-&lt;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 orm_1_0.xsd"
-  version="1.0"&gt;
-
-    &lt;package&gt;org.hibernate.test.annotations.reflection&lt;/package&gt;
-    &lt;entity class="Music" access="PROPERTY" metadata-complete="true"&gt;
-        &lt;discriminator-value&gt;Generic&lt;/discriminator-value&gt;
-        &lt;discriminator-column length="34"/&gt;
-        ...
-    &lt;/entity&gt;
-
-    &lt;entity class="PostalAdministration"&gt;
-        &lt;primary-key-join-column name="id"/&gt;
-        &lt;named-query name="adminById"&gt;
-            &lt;query&gt;select m from Administration m where m.id = :id&lt;/query&gt;
-            &lt;hint name="org.hibernate.timeout" value="200"/&gt;
-        &lt;/named-query&gt;
-        &lt;named-native-query name="allAdmin" result-set-mapping="adminrs"&gt;
-            &lt;query&gt;select *, count(taxpayer_id) as taxPayerNumber
-            from Administration, TaxPayer
-            where taxpayer_admin_id = admin_id group by ...&lt;/query&gt;
-            &lt;hint name="org.hibernate.timeout" value="200"/&gt;
-        &lt;/named-native-query&gt;
-        &lt;sql-result-set-mapping name="adminrs"&gt;
-            &lt;entity-result entity-class="Administration"&gt;
-                &lt;field-result name="name" column="fld_name"/&gt;
-            &lt;/entity-result&gt;
-            &lt;column-result name="taxPayerNumber"/&gt;
-        &lt;/sql-result-set-mapping&gt;
-        &lt;attribute-override name="ground"&gt;
-            &lt;column name="fld_ground" unique="true" scale="2"/&gt;
-        &lt;/attribute-override&gt;
-        &lt;association-override name="referer"&gt;
-            &lt;join-column name="referer_id" referenced-column-name="id"/&gt;
-        &lt;/association-override&gt;
-        ...
-    &lt;/entity&gt;
-&lt;/entity-mappings&gt;</programlisting>
-
-        <calloutlist>
-          <callout arearefs="ab1">
-            <para><literal>discriminator-value /
-            discriminator-column</literal> : définissent la colonne et la valeur
-            discriminantes lorsque la stratégie d'héritage choisie est
-            SINGLE_TABLE.</para>
-          </callout>
-
-          <callout arearefs="ab2">
-            <para><literal>named-query</literal> : définit les requêtes nommées
-            et potentiellement les indices qui leur sont associés. Ces
-            définitions sont ajoutées à celles définies dans les annotations,
-            si deux définitions ont le même nom, la version XML a la
-            priorité.</para>
-          </callout>
-
-          <callout arearefs="ab3">
-            <para><literal>named-native-query</literal> : définit une requête
-            SQL nommée et le mapping de son résultat. Alternativement, vous
-            pouvez définir <literal>result-class</literal>. Ces définitions
-            sont ajoutées à celles definies dans les annotations, si deux
-            définitions ont le même nom, la version XML a la priorité.</para>
-          </callout>
-
-          <callout arearefs="ab4">
-            <para><literal>sql-result-set-mapping</literal> : décrit la
-            structure du mapping des résultats. Vous pouvez définir des mappings
-            de colonnes et d'entité. Ces définitions sont ajoutées à celles
-            définies dans les annotations, si deux définitions ont le même nom,
-            la version XML a la priorité.</para>
-          </callout>
-
-          <callout arearefs="ab5">
-            <para><literal>attribute-override /
-            association-override</literal> : surcharge la définition d'une
-            colonne ou d'une colonne de jointure. Cette surcharge est ajoutée à
-            celle définie dans les annotations.</para>
-          </callout>
-        </calloutlist>
-      </programlistingco>
-
-      <para>La même chose s'applique à <literal>&lt;embeddable&gt;</literal> et
-      <literal>&lt;mapped-superclass&gt;</literal>.</para>
-    </section>
-
-    <section>
-      <title>Méta-données de niveau propriété</title>
-
-      <para>Vous pouvez bien sûr définir des surcharges XML pour des propriétés.
-      Si les méta-données sont définies comme incomplètes, alors les propriétés
-      supplémentaires (c'est-à-dire au niveau Java) seront ignorées. Toutes les
-      méta-données de niveau propriété sont définies par
-      <literal>entity/attributes</literal>,
-      <literal>mapped-superclass/attributes</literal> ou
-      <literal>embeddable/attributes</literal>.</para>
-
-      <programlisting>    &lt;attributes&gt;
-        &lt;id name="id"&gt;
-            &lt;column name="fld_id"/&gt;
-            &lt;generated-value generator="generator" strategy="SEQUENCE"/&gt;
-            &lt;temporal&gt;DATE&lt;/temporal&gt;
-            &lt;sequence-generator name="generator" sequence-name="seq"/&gt;
-        &lt;/id&gt;
-        &lt;version name="version"/&gt;
-        &lt;embedded name="embeddedObject"&gt;
-            &lt;attribute-override name"subproperty"&gt;
-                &lt;column name="my_column"/&gt;
-            &lt;/attribute-override&gt;
-        &lt;/embedded&gt;
-        &lt;basic name="status" optional="false"&gt;
-            &lt;enumerated&gt;STRING&lt;/enumerated&gt;
-        &lt;/basic&gt;
-        &lt;basic name="serial" optional="true"&gt;
-            &lt;column name="serialbytes"/&gt;
-            &lt;lob/&gt;
-        &lt;/basic&gt;
-        &lt;basic name="terminusTime" fetch="LAZY"&gt;
-            &lt;temporal&gt;TIMESTAMP&lt;/temporal&gt;
-        &lt;/basic&gt;
-    &lt;/attributes&gt;</programlisting>
-
-      <para>Vous pouvez surcharger une propriété avec <literal>id</literal>,
-      <literal>embedded-id</literal>, <literal>version</literal>,
-      <literal>embedded</literal> et <literal>basic</literal>. Chacun de ces
-      éléments peuvent avoir des sous-éléments : <literal>lob</literal>,
-      <literal>temporal</literal>, <literal>enumerated</literal>,
-      <literal>column</literal>.</para>
-    </section>
-
-    <section>
-      <title>Méta-données au niveau association</title>
-
-      <para>Vous pouvez définir des surcharges XML pour les associations. Toutes
-      les méta-données de niveau association sont définies par
-      <literal>entity/attributes</literal>,
-      <literal>mapped-superclass/attributes</literal> ou
-      <literal>embeddable/attributes</literal>.</para>
-
-      <programlisting>    &lt;attributes&gt;
-        &lt;one-to-many name="players" fetch="EAGER"&gt;
-            &lt;map-key name="name"/&gt;
-            &lt;join-column name="driver"/&gt;
-            &lt;join-column name="number"/&gt;
-        &lt;/one-to-many&gt;
-        &lt;many-to-many name="roads" target-entity="Administration"&gt;
-            &lt;order-by&gt;maxSpeed&lt;/order-by&gt;
-            &lt;join-table name="bus_road"&gt;
-                &lt;join-column name="driver"/&gt;
-                &lt;join-column name="number"/&gt;
-                &lt;inverse-join-column name="road_id"/&gt;
-                &lt;unique-constraint&gt;
-                    &lt;column-name&gt;driver&lt;/column-name&gt;
-                    &lt;column-name&gt;number&lt;/column-name&gt;
-                &lt;/unique-constraint&gt;
-            &lt;/join-table&gt;
-        &lt;/many-to-many&gt;
-        &lt;many-to-many name="allTimeDrivers" mapped-by="drivenBuses"&gt;
-    &lt;/attributes&gt;</programlisting>
-
-      <para>Vous pouvez surcharger une association avec
-      <literal>one-to-many</literal>, <literal>one-to-one</literal>,
-      <literal>many-to-one</literal>, et <literal>many-to-many</literal>.
-      Chacun de ces éléments peut avoir des sous-éléments :
-      <literal>join-table</literal> (qui peut avoir des
-      <literal>join-column</literal>s et des
-      <literal>inverse-join-column</literal>s),
-      <literal><literal>join-column</literal>s</literal>,
-      <literal>map-key</literal>, et <literal>order-by</literal>.
-      <literal>mapped-by</literal> et <literal>target-entity</literal> peuvent
-      être définis en tant qu'attributs lorsque cela a du sens. Une fois de plus
-      la structure est le reflet de la structure des annotations. Vous pouvez
-      trouver toutes les informations de sémantique dans le chapitre décrivant
-      les annotations.</para>
-    </section>
-  </section>
-</chapter>
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/doc/reference/fr/modules/xml-overriding.xml (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/doc/reference/fr/modules/xml-overriding.xml)
===================================================================
--- trunk/HibernateExt/annotations/doc/reference/fr/modules/xml-overriding.xml	                        (rev 0)
+++ trunk/HibernateExt/annotations/doc/reference/fr/modules/xml-overriding.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,413 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<chapter id="xml-overriding">
+  <title>Surcharger des méta-données à travers du XML</title>
+
+  <para>La cible primaire pour les méta-données dans EJB3 sont les annotations,
+  mais la spécification EJB3 fournit un moyen de surcharger ou remplacer les
+  méta-données définies par des annotations à travers un descripteur de
+  déploiement XML. Dans la version courante, seule la surcharge des annotations
+  pure EJB3 est prise en charge. Si vous souhaitez utiliser des caractéristiques
+  spécifiques à Hibernate dans des entités, vous devrez utiliser les annotations
+  ou vous replier sur les fichiers hbm. Vous pouvez bien sûr mélanger et faire
+  correspondre des entités annotées et des entités décrites dans des fichiers
+  hbm.</para>
+
+  <para>La suite de test unitaires montre des exemples supplémentaires de
+  fichier XML.</para>
+
+  <section id="xml-overriding-principles">
+    <title>Principes</title>
+
+    <para>La structure du descripteur de déploiement XML a été conçue pour
+    refléter celle des annotations. Donc si vous connaissez la structure des
+    annotations, utiliser le schéma XML sera facile pour vous.</para>
+
+    <para>Vous pouvez définir un ou plusieurs fichiers XML décrivant vos
+    méta-données, ces fichiers seront fusionnés par le moteur de surcharge.</para>
+
+    <section>
+      <title>Méta-données de niveau global</title>
+
+      <para>Vous pouvez définir des méta-données de niveau global disponibles
+      pour tous les fichiers XML. Vous ne devez pas définir ces méta-données
+      plus d'une fois par déploiement.</para>
+
+      <programlisting>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+
+&lt;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 orm_1_0.xsd"
+  version="1.0"&gt;
+
+    &lt;persistence-unit-metadata&gt;
+        &lt;xml-mapping-metadata-complete/&gt;
+        &lt;persistence-unit-defaults&gt;
+            &lt;schema&gt;myschema&lt;/schema&gt;
+            &lt;catalog&gt;mycatalog&lt;/catalog&gt;
+            &lt;cascade-persist/&gt;
+        &lt;/persistence-unit-defaults&gt;
+    &lt;/persistence-unit-metadata&gt;</programlisting>
+
+      <para><literal>xml-mapping-metadata-complete</literal> signifie que toutes
+      les entités, classes mères mappées et méta-données devraient être
+      récupérées à partir du XML (c'est-à-dire ignorer les annotations).</para>
+
+      <para><literal>schema / catalog</literal> surchargera toutes les
+      définitions par défaut de schéma et de catalogue dans les méta-données
+      (XML et annotations).</para>
+
+      <para><literal>cascade-persist</literal> signifie que toutes les
+      associations ont PERSIST comme type de cascade. Nous vous recommandons de
+      ne pas utiliser cette fonctionnalité.</para>
+    </section>
+
+    <section id="xml-overriding-principles-entity" revision="1">
+      <title>Méta-données de niveau entité</title>
+
+      <para>Vous pouvez définir ou surcharger des informations de méta-données
+      sur une entité donnée.</para>
+
+      <programlistingco>
+        <areaspec>
+          <area coords="3 85" id="aa1" />
+
+          <area coords="9 85" id="aa2" />
+
+          <area coords="10 85" id="aa3" />
+
+          <area coords="11 85" id="aa4" />
+
+          <area coords="17 85" id="aa5" />
+
+          <area coords="23 85" id="aa6" />
+
+          <area coords="24 85" id="aa7" />
+
+          <area coords="25 85" id="aa8" />
+
+          <area coords="26 85" id="aa9" />
+
+          <area coords="31 85" id="aa10" />
+        </areaspec>
+
+        <programlisting>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+
+&lt;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 orm_1_0.xsd"
+  version="1.0"&gt;
+
+    &lt;package&gt;org.hibernate.test.annotations.reflection&lt;/package&gt;
+    &lt;entity class="Administration" access="PROPERTY" metadata-complete="true"&gt;
+        &lt;table name="tbl_admin"&gt;
+            &lt;unique-constraint&gt;
+                &lt;column-name&gt;firstname&lt;/column-name&gt;
+                &lt;column-name&gt;lastname&lt;/column-name&gt;
+            &lt;/unique-constraint&gt;
+        &lt;/table&gt;
+        &lt;secondary-table name="admin2"&gt;
+            &lt;primary-key-join-column name="admin_id" referenced-column-name="id"/&gt;
+            &lt;unique-constraint&gt;
+                &lt;column-name&gt;address&lt;/column-name&gt;
+            &lt;/unique-constraint&gt;
+        &lt;/secondary-table&gt;
+        &lt;id-class class="SocialSecurityNumber"/&gt;
+        &lt;inheritance strategy="JOINED"/&gt;
+        &lt;sequence-generator name="seqhilo" sequence-name="seqhilo"/&gt;
+        &lt;table-generator name="table" table="tablehilo"/&gt;
+        ...
+    &lt;/entity&gt;
+
+    &lt;entity class="PostalAdministration"&gt;
+        &lt;primary-key-join-column name="id"/&gt;
+        ...
+    &lt;/entity&gt;
+&lt;/entity-mappings&gt;</programlisting>
+
+        <calloutlist>
+          <callout arearefs="aa1">
+            <para><literal>entity-mappings</literal> : entity-mappings est
+            l'élément racine pour tous les fichiers XML. Vous devez déclarer le
+            schéma xml, le fichier du schéma est inclus dans le fichier
+            hibernate-annotations.jar, aucun accès à internet ne sera effectué
+            par Hibernate Annotations.</para>
+          </callout>
+
+          <callout arearefs="aa2">
+            <para><literal>package</literal> (optionnel) : package par défaut
+            utilisé pour tous les noms de classes sans package dans le fichier
+            de descripteur de déploiement donné.</para>
+          </callout>
+
+          <callout arearefs="aa3">
+            <para><literal>entity</literal> : décrit une entité.</para>
+
+            <para><literal>metadata-complete</literal> définit si la description
+            des méta-données pour cet élément est complète ou pas (en d'autres
+            mots, si les annotations présentes au niveau de la classe devraient
+            être prises en compte ou pas).</para>
+
+            <para>Une entité doit avoir un attribut <literal>class</literal>
+            référençant une classe java à laquelle s'applique les
+            méta-données.</para>
+
+            <para>Vous pouvez surcharger un nom d'entité avec l'attribut
+            <literal>name</literal>, si aucun n'est défini et si une annotation
+            <literal>@Entity.name</literal> est présente, alors elle est
+            utilisée (et établit que les méta-données ne sont pas
+            complètes).</para>
+
+            <para>Pour un élément avec des méta-données complètes (voir
+            ci-dessous), vous pouvez définir un attribut
+            <literal>access</literal> (soit <literal>FIELD</literal>, soit
+            <literal>PROPERTY</literal> (valeur par défaut)). Pour un élément
+            avec des méta-données incomplètes, si <literal>access</literal>
+            n'est pas défini, la position de @Id permettra de le déterminer, si
+            <literal>access</literal> est défini, sa valeur est utilisée.</para>
+          </callout>
+
+          <callout arearefs="aa4">
+            <para><literal>table</literal> : vous pouvez déclarer des propriétés
+            de table (nom, schéma, catalogue), si aucune n'est définie,
+            l'annotation java est utilisée.</para>
+
+            <para>Vous pouvez définir une ou plusieurs contraintes d'unicité
+            comme dans l'exemple.</para>
+          </callout>
+
+          <callout arearefs="aa5">
+            <para><literal>secondary-table</literal> : définit une table
+            secondaire très semblable à une table habituelle excepté que vous
+            pouvez définir les colonnes de clef primaire / clef étrangère avec
+            l'élément <literal>primary-key-join-column</literal>. Sur des
+            méta-données incomplètes, les annotations de table secondaire sont
+            utilisées seulement s'il n'y a pas de <literal>secondary-table</literal>
+            de défini, sinon les annotations sont ignorées.</para>
+          </callout>
+
+          <callout arearefs="aa6">
+            <para><literal>id-class</literal> : définit la classe identifiante
+            comme le fait <literal>@IdClass</literal>.</para>
+          </callout>
+
+          <callout arearefs="aa7">
+            <para><literal>inheritance</literal> : définit la stratégie
+            d'héritage (<literal>JOINED</literal>,
+            <literal>TABLE_PER_CLASS</literal>,
+            <literal>SINGLE_TABLE</literal>) ; disponible seulement au niveau de
+            l'élément racine.</para>
+          </callout>
+
+          <callout arearefs="aa8">
+            <para><literal>sequence-generator</literal> : définit un générateur
+            de séquence.</para>
+          </callout>
+
+          <callout arearefs="aa9">
+            <para><literal>table-generator</literal> : définit un générateur de
+            table.</para>
+          </callout>
+
+          <callout arearefs="aa10">
+            <para><literal><literal>primary-key-join-column</literal></literal> :
+            définit la colonne de jointure sur la clef primaire pour les
+            entités filles lorsque la stratégie d'héritage utilisée est
+            JOINED.</para>
+          </callout>
+        </calloutlist>
+      </programlistingco>
+
+      <programlistingco>
+        <areaspec>
+          <area coords="11 85" id="ab1" />
+
+          <area coords="18 85" id="ab2" />
+
+          <area coords="22  85" id="ab3" />
+
+          <area coords="28 85" id="ab4" />
+
+          <area coords="34 85" id="ab5" />
+        </areaspec>
+
+        <programlisting>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+
+&lt;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 orm_1_0.xsd"
+  version="1.0"&gt;
+
+    &lt;package&gt;org.hibernate.test.annotations.reflection&lt;/package&gt;
+    &lt;entity class="Music" access="PROPERTY" metadata-complete="true"&gt;
+        &lt;discriminator-value&gt;Generic&lt;/discriminator-value&gt;
+        &lt;discriminator-column length="34"/&gt;
+        ...
+    &lt;/entity&gt;
+
+    &lt;entity class="PostalAdministration"&gt;
+        &lt;primary-key-join-column name="id"/&gt;
+        &lt;named-query name="adminById"&gt;
+            &lt;query&gt;select m from Administration m where m.id = :id&lt;/query&gt;
+            &lt;hint name="org.hibernate.timeout" value="200"/&gt;
+        &lt;/named-query&gt;
+        &lt;named-native-query name="allAdmin" result-set-mapping="adminrs"&gt;
+            &lt;query&gt;select *, count(taxpayer_id) as taxPayerNumber
+            from Administration, TaxPayer
+            where taxpayer_admin_id = admin_id group by ...&lt;/query&gt;
+            &lt;hint name="org.hibernate.timeout" value="200"/&gt;
+        &lt;/named-native-query&gt;
+        &lt;sql-result-set-mapping name="adminrs"&gt;
+            &lt;entity-result entity-class="Administration"&gt;
+                &lt;field-result name="name" column="fld_name"/&gt;
+            &lt;/entity-result&gt;
+            &lt;column-result name="taxPayerNumber"/&gt;
+        &lt;/sql-result-set-mapping&gt;
+        &lt;attribute-override name="ground"&gt;
+            &lt;column name="fld_ground" unique="true" scale="2"/&gt;
+        &lt;/attribute-override&gt;
+        &lt;association-override name="referer"&gt;
+            &lt;join-column name="referer_id" referenced-column-name="id"/&gt;
+        &lt;/association-override&gt;
+        ...
+    &lt;/entity&gt;
+&lt;/entity-mappings&gt;</programlisting>
+
+        <calloutlist>
+          <callout arearefs="ab1">
+            <para><literal>discriminator-value /
+            discriminator-column</literal> : définissent la colonne et la valeur
+            discriminantes lorsque la stratégie d'héritage choisie est
+            SINGLE_TABLE.</para>
+          </callout>
+
+          <callout arearefs="ab2">
+            <para><literal>named-query</literal> : définit les requêtes nommées
+            et potentiellement les indices qui leur sont associés. Ces
+            définitions sont ajoutées à celles définies dans les annotations,
+            si deux définitions ont le même nom, la version XML a la
+            priorité.</para>
+          </callout>
+
+          <callout arearefs="ab3">
+            <para><literal>named-native-query</literal> : définit une requête
+            SQL nommée et le mapping de son résultat. Alternativement, vous
+            pouvez définir <literal>result-class</literal>. Ces définitions
+            sont ajoutées à celles definies dans les annotations, si deux
+            définitions ont le même nom, la version XML a la priorité.</para>
+          </callout>
+
+          <callout arearefs="ab4">
+            <para><literal>sql-result-set-mapping</literal> : décrit la
+            structure du mapping des résultats. Vous pouvez définir des mappings
+            de colonnes et d'entité. Ces définitions sont ajoutées à celles
+            définies dans les annotations, si deux définitions ont le même nom,
+            la version XML a la priorité.</para>
+          </callout>
+
+          <callout arearefs="ab5">
+            <para><literal>attribute-override /
+            association-override</literal> : surcharge la définition d'une
+            colonne ou d'une colonne de jointure. Cette surcharge est ajoutée à
+            celle définie dans les annotations.</para>
+          </callout>
+        </calloutlist>
+      </programlistingco>
+
+      <para>La même chose s'applique à <literal>&lt;embeddable&gt;</literal> et
+      <literal>&lt;mapped-superclass&gt;</literal>.</para>
+    </section>
+
+    <section>
+      <title>Méta-données de niveau propriété</title>
+
+      <para>Vous pouvez bien sûr définir des surcharges XML pour des propriétés.
+      Si les méta-données sont définies comme incomplètes, alors les propriétés
+      supplémentaires (c'est-à-dire au niveau Java) seront ignorées. Toutes les
+      méta-données de niveau propriété sont définies par
+      <literal>entity/attributes</literal>,
+      <literal>mapped-superclass/attributes</literal> ou
+      <literal>embeddable/attributes</literal>.</para>
+
+      <programlisting>    &lt;attributes&gt;
+        &lt;id name="id"&gt;
+            &lt;column name="fld_id"/&gt;
+            &lt;generated-value generator="generator" strategy="SEQUENCE"/&gt;
+            &lt;temporal&gt;DATE&lt;/temporal&gt;
+            &lt;sequence-generator name="generator" sequence-name="seq"/&gt;
+        &lt;/id&gt;
+        &lt;version name="version"/&gt;
+        &lt;embedded name="embeddedObject"&gt;
+            &lt;attribute-override name"subproperty"&gt;
+                &lt;column name="my_column"/&gt;
+            &lt;/attribute-override&gt;
+        &lt;/embedded&gt;
+        &lt;basic name="status" optional="false"&gt;
+            &lt;enumerated&gt;STRING&lt;/enumerated&gt;
+        &lt;/basic&gt;
+        &lt;basic name="serial" optional="true"&gt;
+            &lt;column name="serialbytes"/&gt;
+            &lt;lob/&gt;
+        &lt;/basic&gt;
+        &lt;basic name="terminusTime" fetch="LAZY"&gt;
+            &lt;temporal&gt;TIMESTAMP&lt;/temporal&gt;
+        &lt;/basic&gt;
+    &lt;/attributes&gt;</programlisting>
+
+      <para>Vous pouvez surcharger une propriété avec <literal>id</literal>,
+      <literal>embedded-id</literal>, <literal>version</literal>,
+      <literal>embedded</literal> et <literal>basic</literal>. Chacun de ces
+      éléments peuvent avoir des sous-éléments : <literal>lob</literal>,
+      <literal>temporal</literal>, <literal>enumerated</literal>,
+      <literal>column</literal>.</para>
+    </section>
+
+    <section>
+      <title>Méta-données au niveau association</title>
+
+      <para>Vous pouvez définir des surcharges XML pour les associations. Toutes
+      les méta-données de niveau association sont définies par
+      <literal>entity/attributes</literal>,
+      <literal>mapped-superclass/attributes</literal> ou
+      <literal>embeddable/attributes</literal>.</para>
+
+      <programlisting>    &lt;attributes&gt;
+        &lt;one-to-many name="players" fetch="EAGER"&gt;
+            &lt;map-key name="name"/&gt;
+            &lt;join-column name="driver"/&gt;
+            &lt;join-column name="number"/&gt;
+        &lt;/one-to-many&gt;
+        &lt;many-to-many name="roads" target-entity="Administration"&gt;
+            &lt;order-by&gt;maxSpeed&lt;/order-by&gt;
+            &lt;join-table name="bus_road"&gt;
+                &lt;join-column name="driver"/&gt;
+                &lt;join-column name="number"/&gt;
+                &lt;inverse-join-column name="road_id"/&gt;
+                &lt;unique-constraint&gt;
+                    &lt;column-name&gt;driver&lt;/column-name&gt;
+                    &lt;column-name&gt;number&lt;/column-name&gt;
+                &lt;/unique-constraint&gt;
+            &lt;/join-table&gt;
+        &lt;/many-to-many&gt;
+        &lt;many-to-many name="allTimeDrivers" mapped-by="drivenBuses"&gt;
+    &lt;/attributes&gt;</programlisting>
+
+      <para>Vous pouvez surcharger une association avec
+      <literal>one-to-many</literal>, <literal>one-to-one</literal>,
+      <literal>many-to-one</literal>, et <literal>many-to-many</literal>.
+      Chacun de ces éléments peut avoir des sous-éléments :
+      <literal>join-table</literal> (qui peut avoir des
+      <literal>join-column</literal>s et des
+      <literal>inverse-join-column</literal>s),
+      <literal><literal>join-column</literal>s</literal>,
+      <literal>map-key</literal>, et <literal>order-by</literal>.
+      <literal>mapped-by</literal> et <literal>target-entity</literal> peuvent
+      être définis en tant qu'attributs lorsque cela a du sens. Une fois de plus
+      la structure est le reflet de la structure des annotations. Vous pouvez
+      trouver toutes les informations de sémantique dans le chapitre décrivant
+      les annotations.</para>
+    </section>
+  </section>
+</chapter>
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/doc/reference/fr/styles (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/doc/reference/fr/styles)

Deleted: trunk/HibernateExt/annotations/doc/reference/fr/styles/fopdf.xsl
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/doc/reference/fr/styles/fopdf.xsl	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/doc/reference/fr/styles/fopdf.xsl	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,519 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
-
-    This is the XSL FO configuration file for the Hibernate
-    Reference Documentation. It defines a custom titlepage and
-    the parameters for the A4 sized PDF printable output.
-
-    It took me days to figure out this stuff and fix most of
-    the obvious bugs in the DocBook XSL distribution. Some of
-    the workarounds might not be appropriate with a newer version
-    of DocBook XSL. This file is released as part of Hibernate,
-    hence LGPL licensed.
-
-    christian at hibernate.org
-
--->
-
-<!DOCTYPE xsl:stylesheet [
-    <!ENTITY db_xsl_path        "../../../../../../Hibernate3/doc/reference/support/docbook-xsl/">
-]>
-
-<xsl:stylesheet
-    version="1.0"
-    xmlns="http://www.w3.org/TR/xhtml1/transitional"
-    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-    xmlns:fo="http://www.w3.org/1999/XSL/Format"
-    exclude-result-prefixes="#default">
-
-    <xsl:import href="&db_xsl_path;/fo/docbook.xsl"/>
-
-    <!--###################################################
-                       Custom Title Page
-        ################################################### -->
-
-    <xsl:template name="book.titlepage.recto">
-        <fo:block>
-            <fo:table table-layout="fixed" width="175mm">
-                <fo:table-column column-width="175mm"/>
-                <fo:table-body>
-                    <fo:table-row>
-                        <fo:table-cell text-align="center">
-                            <fo:block>
-                                <fo:external-graphic src="file:images/hibernate_logo_a.png"/>
-                            </fo:block>
-                            <fo:block font-family="Helvetica" font-size="22pt" padding-before="10mm">
-                                <xsl:value-of select="bookinfo/title"/>
-                            </fo:block>
-                            <fo:block font-family="Helvetica" font-size="18pt" padding-before="10mm">
-                                <xsl:value-of select="bookinfo/subtitle"/>
-                            </fo:block>
-                            <fo:block font-family="Helvetica" font-size="12pt" padding="10mm">
-                                Version:
-                                <xsl:value-of select="bookinfo/releaseinfo"/>
-                            </fo:block>
-                        </fo:table-cell>
-                    </fo:table-row>
-                </fo:table-body>
-            </fo:table>
-        </fo:block>
-    </xsl:template>
-
-    <!-- Prevent blank pages in output -->
-    <xsl:template name="book.titlepage.before.verso">
-    </xsl:template>
-    <xsl:template name="book.titlepage.verso">
-    </xsl:template>
-    <xsl:template name="book.titlepage.separator">
-    </xsl:template>
-
-    <!--###################################################
-                          Header
-        ################################################### -->
-
-    <!-- More space in the center header for long text -->
-    <xsl:attribute-set name="header.content.properties">
-        <xsl:attribute name="font-family">
-            <xsl:value-of select="$body.font.family"/>
-        </xsl:attribute>
-        <xsl:attribute name="margin-left">-5em</xsl:attribute>
-        <xsl:attribute name="margin-right">-5em</xsl:attribute>
-    </xsl:attribute-set>
-
-    <!--###################################################
-                          Custom Footer
-        ################################################### -->
-
-    <!-- This footer prints the Hibernate version number on the left side -->
-    <xsl:template name="footer.content">
-        <xsl:param name="pageclass" select="''"/>
-        <xsl:param name="sequence" select="''"/>
-        <xsl:param name="position" select="''"/>
-        <xsl:param name="gentext-key" select="''"/>
-
-        <xsl:variable name="Version">
-            <xsl:choose>
-                <xsl:when test="//releaseinfo">
-                    <xsl:text>Hibernate </xsl:text>
-                    <xsl:value-of select="//releaseinfo"/>
-                </xsl:when>
-                <xsl:otherwise>
-                    <!-- nop -->
-                </xsl:otherwise>
-            </xsl:choose>
-        </xsl:variable>
-
-        <xsl:choose>
-            <xsl:when test="$sequence='blank'">
-                <xsl:choose>
-                    <xsl:when test="$double.sided != 0 and $position = 'left'">
-                        <xsl:value-of select="$Version"/>
-                    </xsl:when>
-
-                    <xsl:when test="$double.sided = 0 and $position = 'center'">
-                        <!-- nop -->
-                    </xsl:when>
-
-                    <xsl:otherwise>
-                        <fo:page-number/>
-                    </xsl:otherwise>
-                </xsl:choose>
-            </xsl:when>
-
-            <xsl:when test="$pageclass='titlepage'">
-                <!-- nop: other titlepage sequences have no footer -->
-            </xsl:when>
-
-            <xsl:when test="$double.sided != 0 and $sequence = 'even' and $position='left'">
-                <fo:page-number/>
-            </xsl:when>
-
-            <xsl:when test="$double.sided != 0 and $sequence = 'odd' and $position='right'">
-                <fo:page-number/>
-            </xsl:when>
-
-            <xsl:when test="$double.sided = 0 and $position='right'">
-                <fo:page-number/>
-            </xsl:when>
-
-            <xsl:when test="$double.sided != 0 and $sequence = 'odd' and $position='left'">
-                <xsl:value-of select="$Version"/>
-            </xsl:when>
-
-            <xsl:when test="$double.sided != 0 and $sequence = 'even' and $position='right'">
-                <xsl:value-of select="$Version"/>
-            </xsl:when>
-
-            <xsl:when test="$double.sided = 0 and $position='left'">
-                <xsl:value-of select="$Version"/>
-            </xsl:when>
-
-            <xsl:otherwise>
-                <!-- nop -->
-            </xsl:otherwise>
-        </xsl:choose>
-    </xsl:template>
-
-    <!--###################################################
-                       Custom Toc Line
-        ################################################### -->
-    
-    <!-- Improve the TOC. -->
-    <xsl:template name="toc.line">
-        <xsl:variable name="id">
-            <xsl:call-template name="object.id"/>
-        </xsl:variable>
-
-        <xsl:variable name="label">
-            <xsl:apply-templates select="." mode="label.markup"/>
-        </xsl:variable>
-
-        <fo:block text-align-last="justify"
-            end-indent="{$toc.indent.width}pt"
-            last-line-end-indent="-{$toc.indent.width}pt">
-            <fo:inline keep-with-next.within-line="always">
-                <fo:basic-link internal-destination="{$id}">
-
-                    <!-- Chapter titles should be bold. -->
-                    <xsl:choose>
-                        <xsl:when test="local-name(.) = 'chapter'">
-                            <xsl:attribute name="font-weight">bold</xsl:attribute>
-                        </xsl:when>
-                    </xsl:choose>
-
-                    <xsl:if test="$label != ''">
-                        <xsl:copy-of select="$label"/>
-                        <xsl:value-of select="$autotoc.label.separator"/>
-                    </xsl:if>
-                    <xsl:apply-templates select="." mode="titleabbrev.markup"/>
-                </fo:basic-link>
-            </fo:inline>
-            <fo:inline keep-together.within-line="always">
-                <xsl:text> </xsl:text>
-                <fo:leader leader-pattern="dots"
-                    leader-pattern-width="3pt"
-                    leader-alignment="reference-area"
-                    keep-with-next.within-line="always"/>
-                <xsl:text> </xsl:text>
-                <fo:basic-link internal-destination="{$id}">
-                    <fo:page-number-citation ref-id="{$id}"/>
-                </fo:basic-link>
-            </fo:inline>
-        </fo:block>
-    </xsl:template>
-
-    <!--###################################################
-                          Extensions
-        ################################################### -->
-
-    <!-- These extensions are required for table printing and other stuff -->
-    <xsl:param name="use.extensions">1</xsl:param>
-    <xsl:param name="tablecolumns.extension">0</xsl:param>
-    <!-- FOP provide only PDF Bookmarks at the moment -->
-    <xsl:param name="fop.extensions">1</xsl:param>
-
-    <!--###################################################
-                          Table Of Contents
-        ################################################### -->
-
-    <!-- Generate the TOCs for named components only -->
-    <xsl:param name="generate.toc">
-        book   toc
-    </xsl:param>
-    
-    <!-- Show only Sections up to level 3 in the TOCs -->
-    <xsl:param name="toc.section.depth">3</xsl:param>
-    
-    <!-- Dot and Whitespace as separator in TOC between Label and Title-->
-    <xsl:param name="autotoc.label.separator" select="'.  '"/>
-
-
-    <!--###################################################
-                       Paper & Page Size
-        ################################################### -->
-    
-    <!-- Paper type, no headers on blank pages, no double sided printing -->
-    <xsl:param name="paper.type" select="'A4'"/>
-    <xsl:param name="double.sided">0</xsl:param>
-    <xsl:param name="headers.on.blank.pages">0</xsl:param>
-    <xsl:param name="footers.on.blank.pages">0</xsl:param>
-
-    <!-- Space between paper border and content (chaotic stuff, don't touch) -->
-    <xsl:param name="page.margin.top">5mm</xsl:param>
-    <xsl:param name="region.before.extent">10mm</xsl:param>
-    <xsl:param name="body.margin.top">10mm</xsl:param>
-
-    <xsl:param name="body.margin.bottom">15mm</xsl:param>
-    <xsl:param name="region.after.extent">10mm</xsl:param>
-    <xsl:param name="page.margin.bottom">0mm</xsl:param>
-
-    <xsl:param name="page.margin.outer">18mm</xsl:param>
-    <xsl:param name="page.margin.inner">18mm</xsl:param>
-
-    <!-- No intendation of Titles -->
-    <xsl:param name="title.margin.left">0pc</xsl:param>
-
-    <!--###################################################
-                       Fonts & Styles
-        ################################################### -->
-
-    <!-- Default Font size -->
-    <xsl:param name="body.font.master">11</xsl:param>
-
-    <!-- Line height in body text -->
-    <xsl:param name="line-height">1.4</xsl:param>
-
-    <!-- Monospaced fonts are smaller than regular text -->
-    <xsl:attribute-set name="monospace.properties">
-        <xsl:attribute name="font-family">
-            <xsl:value-of select="$monospace.font.family"/>
-        </xsl:attribute>
-        <xsl:attribute name="font-size">0.8em</xsl:attribute>
-    </xsl:attribute-set>
-
-    <!--###################################################
-                       Tables
-        ################################################### -->
-
-    <!-- The table width should be adapted to the paper size -->
-    <xsl:param name="default.table.width">17.4cm</xsl:param>
-
-    <!-- Some padding inside tables -->
-    <xsl:attribute-set name="table.cell.padding">
-        <xsl:attribute name="padding-left">4pt</xsl:attribute>
-        <xsl:attribute name="padding-right">4pt</xsl:attribute>
-        <xsl:attribute name="padding-top">4pt</xsl:attribute>
-        <xsl:attribute name="padding-bottom">4pt</xsl:attribute>
-    </xsl:attribute-set>
-    
-    <!-- Only hairlines as frame and cell borders in tables -->
-    <xsl:param name="table.frame.border.thickness">0.1pt</xsl:param>
-    <xsl:param name="table.cell.border.thickness">0.1pt</xsl:param>
-
-    <!--###################################################
-                             Labels
-        ################################################### -->
-
-    <!-- Label Chapters and Sections (numbering) -->
-    <xsl:param name="chapter.autolabel">1</xsl:param>
-    <xsl:param name="section.autolabel" select="1"/>
-    <xsl:param name="section.label.includes.component.label" select="1"/>
-
-    <!-- Label only Sections up to level 2 -->
-    <xsl:param name="local.l10n.xml" select="document('')"/>
-    <l:i18n xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0">
-        <l:l10n language="en">
-            <l:context name="title-numbered">
-                <l:template name="sect3" text="%t"/>
-                <l:template name="sect4" text="%t"/>
-                <l:template name="sect5" text="%t"/>
-            </l:context>
-            <l:context name="section-xref-numbered">
-                <l:template name="sect3" text="the section called %t"/>
-                <l:template name="sect4" text="the section called %t"/>
-                <l:template name="sect5" text="the section called %t"/>
-            </l:context>
-        </l:l10n>
-    </l:i18n>
-    
-    <!--###################################################
-                             Titles
-        ################################################### -->
-    
-    <!-- Chapter title size -->
-    <xsl:attribute-set name="chapter.titlepage.recto.style">
-        <xsl:attribute name="text-align">left</xsl:attribute>
-        <xsl:attribute name="font-weight">bold</xsl:attribute>
-        <xsl:attribute name="font-size">
-            <xsl:value-of select="$body.font.master * 1.8"/>
-            <xsl:text>pt</xsl:text>
-        </xsl:attribute>
-    </xsl:attribute-set>
-
-    <!-- Why is the font-size for chapters hardcoded in the XSL FO templates? 
-        Let's remove it, so this sucker can use our attribute-set only... -->
-    <xsl:template match="title" mode="chapter.titlepage.recto.auto.mode">
-        <fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format"
-            xsl:use-attribute-sets="chapter.titlepage.recto.style">
-            <xsl:call-template name="component.title">
-                <xsl:with-param name="node" select="ancestor-or-self::chapter[1]"/>
-            </xsl:call-template>
-        </fo:block>
-    </xsl:template>
-    
-    <!-- Sections 1, 2 and 3 titles have a small bump factor and padding -->
-    <xsl:attribute-set name="section.title.level1.properties">
-        <xsl:attribute name="space-before.optimum">0.8em</xsl:attribute>
-        <xsl:attribute name="space-before.minimum">0.8em</xsl:attribute>
-        <xsl:attribute name="space-before.maximum">0.8em</xsl:attribute>
-        <xsl:attribute name="font-size">
-            <xsl:value-of select="$body.font.master * 1.5"/>
-            <xsl:text>pt</xsl:text>
-        </xsl:attribute>
-        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
-    </xsl:attribute-set>
-    <xsl:attribute-set name="section.title.level2.properties">
-        <xsl:attribute name="space-before.optimum">0.6em</xsl:attribute>
-        <xsl:attribute name="space-before.minimum">0.6em</xsl:attribute>
-        <xsl:attribute name="space-before.maximum">0.6em</xsl:attribute>
-        <xsl:attribute name="font-size">
-            <xsl:value-of select="$body.font.master * 1.25"/>
-            <xsl:text>pt</xsl:text>
-        </xsl:attribute>
-        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
-    </xsl:attribute-set>
-    <xsl:attribute-set name="section.title.level3.properties">
-        <xsl:attribute name="space-before.optimum">0.4em</xsl:attribute>
-        <xsl:attribute name="space-before.minimum">0.4em</xsl:attribute>
-        <xsl:attribute name="space-before.maximum">0.4em</xsl:attribute>
-        <xsl:attribute name="font-size">
-            <xsl:value-of select="$body.font.master * 1.0"/>
-            <xsl:text>pt</xsl:text>
-        </xsl:attribute>
-        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
-    </xsl:attribute-set>
-
-    <!-- Titles of formal objects (tables, examples, ...) -->
-    <xsl:attribute-set name="formal.title.properties" use-attribute-sets="normal.para.spacing">
-        <xsl:attribute name="font-weight">bold</xsl:attribute>
-        <xsl:attribute name="font-size">
-            <xsl:value-of select="$body.font.master"/>
-            <xsl:text>pt</xsl:text>
-        </xsl:attribute>
-        <xsl:attribute name="hyphenate">false</xsl:attribute>
-        <xsl:attribute name="space-after.minimum">0.4em</xsl:attribute>
-        <xsl:attribute name="space-after.optimum">0.6em</xsl:attribute>
-        <xsl:attribute name="space-after.maximum">0.8em</xsl:attribute>
-    </xsl:attribute-set>
-
-    <!--###################################################
-                          Programlistings
-        ################################################### -->
-    
-    <!-- Verbatim text formatting (programlistings) -->
-    <xsl:attribute-set name="verbatim.properties">
-        <xsl:attribute name="space-before.minimum">1em</xsl:attribute>
-        <xsl:attribute name="space-before.optimum">1em</xsl:attribute>
-        <xsl:attribute name="space-before.maximum">1em</xsl:attribute>
-        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
-        <xsl:attribute name="border-color">#444444</xsl:attribute>
-        <xsl:attribute name="border-style">solid</xsl:attribute>
-        <xsl:attribute name="border-width">0.1pt</xsl:attribute>
-        <xsl:attribute name="padding-top">0.5em</xsl:attribute>
-        <xsl:attribute name="padding-left">0.5em</xsl:attribute>
-        <xsl:attribute name="padding-right">0.5em</xsl:attribute>
-        <xsl:attribute name="padding-bottom">0.5em</xsl:attribute>
-        <xsl:attribute name="margin-left">0.5em</xsl:attribute>
-        <xsl:attribute name="margin-right">0.5em</xsl:attribute>
-    </xsl:attribute-set>
-
-    <!-- Shade (background) programlistings -->
-    <xsl:param name="shade.verbatim">1</xsl:param>
-    <xsl:attribute-set name="shade.verbatim.style">
-        <xsl:attribute name="background-color">#F0F0F0</xsl:attribute>
-    </xsl:attribute-set>
-
-    <!--###################################################
-                             Callouts
-        ################################################### -->
-
-    <!-- We want to use callouts... -->
-    <xsl:param name="callout.extensions">1</xsl:param>
-
-    <!-- Place callout bullets at this column in programmlisting.-->
-    <xsl:param name="callout.defaultcolumn">90</xsl:param>
-
-    <!--
-        No, don't use crappy graphics for the callout bullets. This setting
-        enables some weird Unicode rendering for some fancy bullet points
-        in callouts. By default, this can only count to 10 and produces
-        strange results if you ever have more than 10 callouts for one
-        programlisting. We will fix that next.
-    -->
-    <xsl:param name="callout.graphics">0</xsl:param>
-
-    <!--
-        Again, fun with DocBook XSL: The callout bullets are rendered in
-        two places: In the programlisting itself and in the list below
-        the listing, with the actual callout text. The rendering in the
-        programlisting is some XSL transformer extension (e.g. a Saxon
-        extension), so we can't change that without messing with the
-        extensions. We only can turn it off by setting this limit to
-        zero, then, a simple bracket style like "(3)" and "(4)" will
-        be used in the programlisting.
-    -->
-    <xsl:param name="callout.unicode.number.limit" select="'0'"></xsl:param>
-
-    <!--
-        The callout bullets in the actual callout list will be rendered
-        with an XSL FO template. The default template is broken: limited to 10
-        nice looking Unicode bullet points and then it doesn't print anything,
-        the fallback doesn't work. We implement our own template, which is not
-        as complicated, more ugly, but works. As always, function is more
-        important than form.
-    -->
-    <xsl:template name="callout-bug">
-        <xsl:param name="conum" select='1'/>
-        <fo:inline
-            color="black"
-            padding-top="0.1em"
-            padding-bottom="0.1em"
-            padding-start="0.2em"
-            padding-end="0.2em"
-            baseline-shift="0.1em"
-            font-family="{$monospace.font.family}"
-            font-weight="bold"
-            font-size="75%">
-            <xsl:text>(</xsl:text>
-            <xsl:value-of select="$conum"/>
-            <xsl:text>)</xsl:text>
-        </fo:inline>
-
-    </xsl:template>
-
-    <!--###################################################
-                              Misc
-        ################################################### -->
-
-    <!-- Correct placement of titles for figures and examples. -->
-    <xsl:param name="formal.title.placement">
-        figure after
-        example before
-        equation before
-        table before
-        procedure before
-    </xsl:param>
-    
-    <!-- Format Variable Lists as Blocks (prevents horizontal overflow). -->
-    <xsl:param name="variablelist.as.blocks">1</xsl:param>
-
-    <!-- The horrible list spacing problems, this is much better. -->
-    <xsl:attribute-set name="list.block.spacing">
-        <xsl:attribute name="space-before.optimum">0.8em</xsl:attribute>
-        <xsl:attribute name="space-before.minimum">0.8em</xsl:attribute>
-        <xsl:attribute name="space-before.maximum">0.8em</xsl:attribute>
-        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
-    </xsl:attribute-set>
-
-    <!-- Newer DocBook XSL apparently thinks that some sections are by
-         default "draft" status, and this idiotic thing is by default
-         also set to "maybe", so it spits out a lot of errors with the
-         latest FOP as the XSL/FO styles have references to some draft
-         watermarks, which you actually don't want in the first place.
-         Turn this crap off. If you have to work with the "status"
-         attribute, don't.
-    -->
-    <xsl:param name="draft.mode" select="'no'"/>
-
-</xsl:stylesheet>

Copied: trunk/HibernateExt/annotations/doc/reference/fr/styles/fopdf.xsl (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/doc/reference/fr/styles/fopdf.xsl)
===================================================================
--- trunk/HibernateExt/annotations/doc/reference/fr/styles/fopdf.xsl	                        (rev 0)
+++ trunk/HibernateExt/annotations/doc/reference/fr/styles/fopdf.xsl	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,519 @@
+<?xml version="1.0"?>
+
+<!--
+
+    This is the XSL FO configuration file for the Hibernate
+    Reference Documentation. It defines a custom titlepage and
+    the parameters for the A4 sized PDF printable output.
+
+    It took me days to figure out this stuff and fix most of
+    the obvious bugs in the DocBook XSL distribution. Some of
+    the workarounds might not be appropriate with a newer version
+    of DocBook XSL. This file is released as part of Hibernate,
+    hence LGPL licensed.
+
+    christian at hibernate.org
+
+-->
+
+<!DOCTYPE xsl:stylesheet [
+    <!ENTITY db_xsl_path        "../../../../../../Hibernate3/doc/reference/support/docbook-xsl/">
+]>
+
+<xsl:stylesheet
+    version="1.0"
+    xmlns="http://www.w3.org/TR/xhtml1/transitional"
+    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+    xmlns:fo="http://www.w3.org/1999/XSL/Format"
+    exclude-result-prefixes="#default">
+
+    <xsl:import href="&db_xsl_path;/fo/docbook.xsl"/>
+
+    <!--###################################################
+                       Custom Title Page
+        ################################################### -->
+
+    <xsl:template name="book.titlepage.recto">
+        <fo:block>
+            <fo:table table-layout="fixed" width="175mm">
+                <fo:table-column column-width="175mm"/>
+                <fo:table-body>
+                    <fo:table-row>
+                        <fo:table-cell text-align="center">
+                            <fo:block>
+                                <fo:external-graphic src="file:images/hibernate_logo_a.png"/>
+                            </fo:block>
+                            <fo:block font-family="Helvetica" font-size="22pt" padding-before="10mm">
+                                <xsl:value-of select="bookinfo/title"/>
+                            </fo:block>
+                            <fo:block font-family="Helvetica" font-size="18pt" padding-before="10mm">
+                                <xsl:value-of select="bookinfo/subtitle"/>
+                            </fo:block>
+                            <fo:block font-family="Helvetica" font-size="12pt" padding="10mm">
+                                Version:
+                                <xsl:value-of select="bookinfo/releaseinfo"/>
+                            </fo:block>
+                        </fo:table-cell>
+                    </fo:table-row>
+                </fo:table-body>
+            </fo:table>
+        </fo:block>
+    </xsl:template>
+
+    <!-- Prevent blank pages in output -->
+    <xsl:template name="book.titlepage.before.verso">
+    </xsl:template>
+    <xsl:template name="book.titlepage.verso">
+    </xsl:template>
+    <xsl:template name="book.titlepage.separator">
+    </xsl:template>
+
+    <!--###################################################
+                          Header
+        ################################################### -->
+
+    <!-- More space in the center header for long text -->
+    <xsl:attribute-set name="header.content.properties">
+        <xsl:attribute name="font-family">
+            <xsl:value-of select="$body.font.family"/>
+        </xsl:attribute>
+        <xsl:attribute name="margin-left">-5em</xsl:attribute>
+        <xsl:attribute name="margin-right">-5em</xsl:attribute>
+    </xsl:attribute-set>
+
+    <!--###################################################
+                          Custom Footer
+        ################################################### -->
+
+    <!-- This footer prints the Hibernate version number on the left side -->
+    <xsl:template name="footer.content">
+        <xsl:param name="pageclass" select="''"/>
+        <xsl:param name="sequence" select="''"/>
+        <xsl:param name="position" select="''"/>
+        <xsl:param name="gentext-key" select="''"/>
+
+        <xsl:variable name="Version">
+            <xsl:choose>
+                <xsl:when test="//releaseinfo">
+                    <xsl:text>Hibernate </xsl:text>
+                    <xsl:value-of select="//releaseinfo"/>
+                </xsl:when>
+                <xsl:otherwise>
+                    <!-- nop -->
+                </xsl:otherwise>
+            </xsl:choose>
+        </xsl:variable>
+
+        <xsl:choose>
+            <xsl:when test="$sequence='blank'">
+                <xsl:choose>
+                    <xsl:when test="$double.sided != 0 and $position = 'left'">
+                        <xsl:value-of select="$Version"/>
+                    </xsl:when>
+
+                    <xsl:when test="$double.sided = 0 and $position = 'center'">
+                        <!-- nop -->
+                    </xsl:when>
+
+                    <xsl:otherwise>
+                        <fo:page-number/>
+                    </xsl:otherwise>
+                </xsl:choose>
+            </xsl:when>
+
+            <xsl:when test="$pageclass='titlepage'">
+                <!-- nop: other titlepage sequences have no footer -->
+            </xsl:when>
+
+            <xsl:when test="$double.sided != 0 and $sequence = 'even' and $position='left'">
+                <fo:page-number/>
+            </xsl:when>
+
+            <xsl:when test="$double.sided != 0 and $sequence = 'odd' and $position='right'">
+                <fo:page-number/>
+            </xsl:when>
+
+            <xsl:when test="$double.sided = 0 and $position='right'">
+                <fo:page-number/>
+            </xsl:when>
+
+            <xsl:when test="$double.sided != 0 and $sequence = 'odd' and $position='left'">
+                <xsl:value-of select="$Version"/>
+            </xsl:when>
+
+            <xsl:when test="$double.sided != 0 and $sequence = 'even' and $position='right'">
+                <xsl:value-of select="$Version"/>
+            </xsl:when>
+
+            <xsl:when test="$double.sided = 0 and $position='left'">
+                <xsl:value-of select="$Version"/>
+            </xsl:when>
+
+            <xsl:otherwise>
+                <!-- nop -->
+            </xsl:otherwise>
+        </xsl:choose>
+    </xsl:template>
+
+    <!--###################################################
+                       Custom Toc Line
+        ################################################### -->
+    
+    <!-- Improve the TOC. -->
+    <xsl:template name="toc.line">
+        <xsl:variable name="id">
+            <xsl:call-template name="object.id"/>
+        </xsl:variable>
+
+        <xsl:variable name="label">
+            <xsl:apply-templates select="." mode="label.markup"/>
+        </xsl:variable>
+
+        <fo:block text-align-last="justify"
+            end-indent="{$toc.indent.width}pt"
+            last-line-end-indent="-{$toc.indent.width}pt">
+            <fo:inline keep-with-next.within-line="always">
+                <fo:basic-link internal-destination="{$id}">
+
+                    <!-- Chapter titles should be bold. -->
+                    <xsl:choose>
+                        <xsl:when test="local-name(.) = 'chapter'">
+                            <xsl:attribute name="font-weight">bold</xsl:attribute>
+                        </xsl:when>
+                    </xsl:choose>
+
+                    <xsl:if test="$label != ''">
+                        <xsl:copy-of select="$label"/>
+                        <xsl:value-of select="$autotoc.label.separator"/>
+                    </xsl:if>
+                    <xsl:apply-templates select="." mode="titleabbrev.markup"/>
+                </fo:basic-link>
+            </fo:inline>
+            <fo:inline keep-together.within-line="always">
+                <xsl:text> </xsl:text>
+                <fo:leader leader-pattern="dots"
+                    leader-pattern-width="3pt"
+                    leader-alignment="reference-area"
+                    keep-with-next.within-line="always"/>
+                <xsl:text> </xsl:text>
+                <fo:basic-link internal-destination="{$id}">
+                    <fo:page-number-citation ref-id="{$id}"/>
+                </fo:basic-link>
+            </fo:inline>
+        </fo:block>
+    </xsl:template>
+
+    <!--###################################################
+                          Extensions
+        ################################################### -->
+
+    <!-- These extensions are required for table printing and other stuff -->
+    <xsl:param name="use.extensions">1</xsl:param>
+    <xsl:param name="tablecolumns.extension">0</xsl:param>
+    <!-- FOP provide only PDF Bookmarks at the moment -->
+    <xsl:param name="fop.extensions">1</xsl:param>
+
+    <!--###################################################
+                          Table Of Contents
+        ################################################### -->
+
+    <!-- Generate the TOCs for named components only -->
+    <xsl:param name="generate.toc">
+        book   toc
+    </xsl:param>
+    
+    <!-- Show only Sections up to level 3 in the TOCs -->
+    <xsl:param name="toc.section.depth">3</xsl:param>
+    
+    <!-- Dot and Whitespace as separator in TOC between Label and Title-->
+    <xsl:param name="autotoc.label.separator" select="'.  '"/>
+
+
+    <!--###################################################
+                       Paper & Page Size
+        ################################################### -->
+    
+    <!-- Paper type, no headers on blank pages, no double sided printing -->
+    <xsl:param name="paper.type" select="'A4'"/>
+    <xsl:param name="double.sided">0</xsl:param>
+    <xsl:param name="headers.on.blank.pages">0</xsl:param>
+    <xsl:param name="footers.on.blank.pages">0</xsl:param>
+
+    <!-- Space between paper border and content (chaotic stuff, don't touch) -->
+    <xsl:param name="page.margin.top">5mm</xsl:param>
+    <xsl:param name="region.before.extent">10mm</xsl:param>
+    <xsl:param name="body.margin.top">10mm</xsl:param>
+
+    <xsl:param name="body.margin.bottom">15mm</xsl:param>
+    <xsl:param name="region.after.extent">10mm</xsl:param>
+    <xsl:param name="page.margin.bottom">0mm</xsl:param>
+
+    <xsl:param name="page.margin.outer">18mm</xsl:param>
+    <xsl:param name="page.margin.inner">18mm</xsl:param>
+
+    <!-- No intendation of Titles -->
+    <xsl:param name="title.margin.left">0pc</xsl:param>
+
+    <!--###################################################
+                       Fonts & Styles
+        ################################################### -->
+
+    <!-- Default Font size -->
+    <xsl:param name="body.font.master">11</xsl:param>
+
+    <!-- Line height in body text -->
+    <xsl:param name="line-height">1.4</xsl:param>
+
+    <!-- Monospaced fonts are smaller than regular text -->
+    <xsl:attribute-set name="monospace.properties">
+        <xsl:attribute name="font-family">
+            <xsl:value-of select="$monospace.font.family"/>
+        </xsl:attribute>
+        <xsl:attribute name="font-size">0.8em</xsl:attribute>
+    </xsl:attribute-set>
+
+    <!--###################################################
+                       Tables
+        ################################################### -->
+
+    <!-- The table width should be adapted to the paper size -->
+    <xsl:param name="default.table.width">17.4cm</xsl:param>
+
+    <!-- Some padding inside tables -->
+    <xsl:attribute-set name="table.cell.padding">
+        <xsl:attribute name="padding-left">4pt</xsl:attribute>
+        <xsl:attribute name="padding-right">4pt</xsl:attribute>
+        <xsl:attribute name="padding-top">4pt</xsl:attribute>
+        <xsl:attribute name="padding-bottom">4pt</xsl:attribute>
+    </xsl:attribute-set>
+    
+    <!-- Only hairlines as frame and cell borders in tables -->
+    <xsl:param name="table.frame.border.thickness">0.1pt</xsl:param>
+    <xsl:param name="table.cell.border.thickness">0.1pt</xsl:param>
+
+    <!--###################################################
+                             Labels
+        ################################################### -->
+
+    <!-- Label Chapters and Sections (numbering) -->
+    <xsl:param name="chapter.autolabel">1</xsl:param>
+    <xsl:param name="section.autolabel" select="1"/>
+    <xsl:param name="section.label.includes.component.label" select="1"/>
+
+    <!-- Label only Sections up to level 2 -->
+    <xsl:param name="local.l10n.xml" select="document('')"/>
+    <l:i18n xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0">
+        <l:l10n language="en">
+            <l:context name="title-numbered">
+                <l:template name="sect3" text="%t"/>
+                <l:template name="sect4" text="%t"/>
+                <l:template name="sect5" text="%t"/>
+            </l:context>
+            <l:context name="section-xref-numbered">
+                <l:template name="sect3" text="the section called %t"/>
+                <l:template name="sect4" text="the section called %t"/>
+                <l:template name="sect5" text="the section called %t"/>
+            </l:context>
+        </l:l10n>
+    </l:i18n>
+    
+    <!--###################################################
+                             Titles
+        ################################################### -->
+    
+    <!-- Chapter title size -->
+    <xsl:attribute-set name="chapter.titlepage.recto.style">
+        <xsl:attribute name="text-align">left</xsl:attribute>
+        <xsl:attribute name="font-weight">bold</xsl:attribute>
+        <xsl:attribute name="font-size">
+            <xsl:value-of select="$body.font.master * 1.8"/>
+            <xsl:text>pt</xsl:text>
+        </xsl:attribute>
+    </xsl:attribute-set>
+
+    <!-- Why is the font-size for chapters hardcoded in the XSL FO templates? 
+        Let's remove it, so this sucker can use our attribute-set only... -->
+    <xsl:template match="title" mode="chapter.titlepage.recto.auto.mode">
+        <fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format"
+            xsl:use-attribute-sets="chapter.titlepage.recto.style">
+            <xsl:call-template name="component.title">
+                <xsl:with-param name="node" select="ancestor-or-self::chapter[1]"/>
+            </xsl:call-template>
+        </fo:block>
+    </xsl:template>
+    
+    <!-- Sections 1, 2 and 3 titles have a small bump factor and padding -->
+    <xsl:attribute-set name="section.title.level1.properties">
+        <xsl:attribute name="space-before.optimum">0.8em</xsl:attribute>
+        <xsl:attribute name="space-before.minimum">0.8em</xsl:attribute>
+        <xsl:attribute name="space-before.maximum">0.8em</xsl:attribute>
+        <xsl:attribute name="font-size">
+            <xsl:value-of select="$body.font.master * 1.5"/>
+            <xsl:text>pt</xsl:text>
+        </xsl:attribute>
+        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
+    </xsl:attribute-set>
+    <xsl:attribute-set name="section.title.level2.properties">
+        <xsl:attribute name="space-before.optimum">0.6em</xsl:attribute>
+        <xsl:attribute name="space-before.minimum">0.6em</xsl:attribute>
+        <xsl:attribute name="space-before.maximum">0.6em</xsl:attribute>
+        <xsl:attribute name="font-size">
+            <xsl:value-of select="$body.font.master * 1.25"/>
+            <xsl:text>pt</xsl:text>
+        </xsl:attribute>
+        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
+    </xsl:attribute-set>
+    <xsl:attribute-set name="section.title.level3.properties">
+        <xsl:attribute name="space-before.optimum">0.4em</xsl:attribute>
+        <xsl:attribute name="space-before.minimum">0.4em</xsl:attribute>
+        <xsl:attribute name="space-before.maximum">0.4em</xsl:attribute>
+        <xsl:attribute name="font-size">
+            <xsl:value-of select="$body.font.master * 1.0"/>
+            <xsl:text>pt</xsl:text>
+        </xsl:attribute>
+        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
+    </xsl:attribute-set>
+
+    <!-- Titles of formal objects (tables, examples, ...) -->
+    <xsl:attribute-set name="formal.title.properties" use-attribute-sets="normal.para.spacing">
+        <xsl:attribute name="font-weight">bold</xsl:attribute>
+        <xsl:attribute name="font-size">
+            <xsl:value-of select="$body.font.master"/>
+            <xsl:text>pt</xsl:text>
+        </xsl:attribute>
+        <xsl:attribute name="hyphenate">false</xsl:attribute>
+        <xsl:attribute name="space-after.minimum">0.4em</xsl:attribute>
+        <xsl:attribute name="space-after.optimum">0.6em</xsl:attribute>
+        <xsl:attribute name="space-after.maximum">0.8em</xsl:attribute>
+    </xsl:attribute-set>
+
+    <!--###################################################
+                          Programlistings
+        ################################################### -->
+    
+    <!-- Verbatim text formatting (programlistings) -->
+    <xsl:attribute-set name="verbatim.properties">
+        <xsl:attribute name="space-before.minimum">1em</xsl:attribute>
+        <xsl:attribute name="space-before.optimum">1em</xsl:attribute>
+        <xsl:attribute name="space-before.maximum">1em</xsl:attribute>
+        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
+        <xsl:attribute name="border-color">#444444</xsl:attribute>
+        <xsl:attribute name="border-style">solid</xsl:attribute>
+        <xsl:attribute name="border-width">0.1pt</xsl:attribute>
+        <xsl:attribute name="padding-top">0.5em</xsl:attribute>
+        <xsl:attribute name="padding-left">0.5em</xsl:attribute>
+        <xsl:attribute name="padding-right">0.5em</xsl:attribute>
+        <xsl:attribute name="padding-bottom">0.5em</xsl:attribute>
+        <xsl:attribute name="margin-left">0.5em</xsl:attribute>
+        <xsl:attribute name="margin-right">0.5em</xsl:attribute>
+    </xsl:attribute-set>
+
+    <!-- Shade (background) programlistings -->
+    <xsl:param name="shade.verbatim">1</xsl:param>
+    <xsl:attribute-set name="shade.verbatim.style">
+        <xsl:attribute name="background-color">#F0F0F0</xsl:attribute>
+    </xsl:attribute-set>
+
+    <!--###################################################
+                             Callouts
+        ################################################### -->
+
+    <!-- We want to use callouts... -->
+    <xsl:param name="callout.extensions">1</xsl:param>
+
+    <!-- Place callout bullets at this column in programmlisting.-->
+    <xsl:param name="callout.defaultcolumn">90</xsl:param>
+
+    <!--
+        No, don't use crappy graphics for the callout bullets. This setting
+        enables some weird Unicode rendering for some fancy bullet points
+        in callouts. By default, this can only count to 10 and produces
+        strange results if you ever have more than 10 callouts for one
+        programlisting. We will fix that next.
+    -->
+    <xsl:param name="callout.graphics">0</xsl:param>
+
+    <!--
+        Again, fun with DocBook XSL: The callout bullets are rendered in
+        two places: In the programlisting itself and in the list below
+        the listing, with the actual callout text. The rendering in the
+        programlisting is some XSL transformer extension (e.g. a Saxon
+        extension), so we can't change that without messing with the
+        extensions. We only can turn it off by setting this limit to
+        zero, then, a simple bracket style like "(3)" and "(4)" will
+        be used in the programlisting.
+    -->
+    <xsl:param name="callout.unicode.number.limit" select="'0'"></xsl:param>
+
+    <!--
+        The callout bullets in the actual callout list will be rendered
+        with an XSL FO template. The default template is broken: limited to 10
+        nice looking Unicode bullet points and then it doesn't print anything,
+        the fallback doesn't work. We implement our own template, which is not
+        as complicated, more ugly, but works. As always, function is more
+        important than form.
+    -->
+    <xsl:template name="callout-bug">
+        <xsl:param name="conum" select='1'/>
+        <fo:inline
+            color="black"
+            padding-top="0.1em"
+            padding-bottom="0.1em"
+            padding-start="0.2em"
+            padding-end="0.2em"
+            baseline-shift="0.1em"
+            font-family="{$monospace.font.family}"
+            font-weight="bold"
+            font-size="75%">
+            <xsl:text>(</xsl:text>
+            <xsl:value-of select="$conum"/>
+            <xsl:text>)</xsl:text>
+        </fo:inline>
+
+    </xsl:template>
+
+    <!--###################################################
+                              Misc
+        ################################################### -->
+
+    <!-- Correct placement of titles for figures and examples. -->
+    <xsl:param name="formal.title.placement">
+        figure after
+        example before
+        equation before
+        table before
+        procedure before
+    </xsl:param>
+    
+    <!-- Format Variable Lists as Blocks (prevents horizontal overflow). -->
+    <xsl:param name="variablelist.as.blocks">1</xsl:param>
+
+    <!-- The horrible list spacing problems, this is much better. -->
+    <xsl:attribute-set name="list.block.spacing">
+        <xsl:attribute name="space-before.optimum">0.8em</xsl:attribute>
+        <xsl:attribute name="space-before.minimum">0.8em</xsl:attribute>
+        <xsl:attribute name="space-before.maximum">0.8em</xsl:attribute>
+        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
+    </xsl:attribute-set>
+
+    <!-- Newer DocBook XSL apparently thinks that some sections are by
+         default "draft" status, and this idiotic thing is by default
+         also set to "maybe", so it spits out a lot of errors with the
+         latest FOP as the XSL/FO styles have references to some draft
+         watermarks, which you actually don't want in the first place.
+         Turn this crap off. If you have to work with the "status"
+         attribute, don't.
+    -->
+    <xsl:param name="draft.mode" select="'no'"/>
+
+</xsl:stylesheet>

Deleted: trunk/HibernateExt/annotations/doc/reference/fr/styles/html.css
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/doc/reference/fr/styles/html.css	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/doc/reference/fr/styles/html.css	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,97 +0,0 @@
-A {
-    color: #003399;
-}
-
-A:active {
-    color: #003399;
-}
-
-A:visited {
-    color: #888888;
-}
-
-P, OL, UL, LI, DL, DT, DD, BLOCKQUOTE {
-    color: #000000;
-}
-
-TD, TH, SPAN {
-    color: #000000;
-}
-
-BLOCKQUOTE {
-    margin-right: 0px;
-}
-
-
-H1, H2, H3, H4, H5, H6    {
-    color: #000000;
-    font-weight:500;
-    margin-top:10px;
-    padding-top:15px;
-}
-
-TABLE  {
-    border-collapse: collapse;
-    border-spacing:0;
-    border: 1px thin black;
-    empty-cells: hide;
-}
-
-TD  {
-    padding: 4pt;
-}
-
-H1 { font-size: 150%; }
-H2 { font-size: 140%; }
-H3 { font-size: 110%; font-weight: bold; }
-H4 { font-size: 110%; font-weight: bold;}
-H5 { font-size: 100%; font-style: italic; }
-H6 { font-size: 100%; font-style: italic; }
-
-TT {
-font-size: 90%;
-    font-family: "Courier New", Courier, monospace;
-    color: #000000;
-}
-
-PRE {
-font-size: 100%;
-    padding: 5px;
-    border-style: solid;
-    border-width: 1px;
-    border-color: #CCCCCC;
-    background-color: #F4F4F4;
-}
-
-UL, OL, LI {
-    list-style: disc;
-}
-
-HR  {
-    width: 100%;
-    height: 1px;
-    background-color: #CCCCCC;
-    border-width: 0px;
-    padding: 0px;
-    color: #CCCCCC;
-}
-
-.variablelist { 
-    padding-top: 10; 
-    padding-bottom:10; 
-    margin:0;
-}
-
-.itemizedlist, UL { 
-    padding-top: 0; 
-    padding-bottom:0; 
-    margin:0; 
-}
-
-.term { 
-    font-weight:bold;
-}
-
-
-
-    

Copied: trunk/HibernateExt/annotations/doc/reference/fr/styles/html.css (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/doc/reference/fr/styles/html.css)
===================================================================
--- trunk/HibernateExt/annotations/doc/reference/fr/styles/html.css	                        (rev 0)
+++ trunk/HibernateExt/annotations/doc/reference/fr/styles/html.css	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,97 @@
+A {
+    color: #003399;
+}
+
+A:active {
+    color: #003399;
+}
+
+A:visited {
+    color: #888888;
+}
+
+P, OL, UL, LI, DL, DT, DD, BLOCKQUOTE {
+    color: #000000;
+}
+
+TD, TH, SPAN {
+    color: #000000;
+}
+
+BLOCKQUOTE {
+    margin-right: 0px;
+}
+
+
+H1, H2, H3, H4, H5, H6    {
+    color: #000000;
+    font-weight:500;
+    margin-top:10px;
+    padding-top:15px;
+}
+
+TABLE  {
+    border-collapse: collapse;
+    border-spacing:0;
+    border: 1px thin black;
+    empty-cells: hide;
+}
+
+TD  {
+    padding: 4pt;
+}
+
+H1 { font-size: 150%; }
+H2 { font-size: 140%; }
+H3 { font-size: 110%; font-weight: bold; }
+H4 { font-size: 110%; font-weight: bold;}
+H5 { font-size: 100%; font-style: italic; }
+H6 { font-size: 100%; font-style: italic; }
+
+TT {
+font-size: 90%;
+    font-family: "Courier New", Courier, monospace;
+    color: #000000;
+}
+
+PRE {
+font-size: 100%;
+    padding: 5px;
+    border-style: solid;
+    border-width: 1px;
+    border-color: #CCCCCC;
+    background-color: #F4F4F4;
+}
+
+UL, OL, LI {
+    list-style: disc;
+}
+
+HR  {
+    width: 100%;
+    height: 1px;
+    background-color: #CCCCCC;
+    border-width: 0px;
+    padding: 0px;
+    color: #CCCCCC;
+}
+
+.variablelist { 
+    padding-top: 10; 
+    padding-bottom:10; 
+    margin:0;
+}
+
+.itemizedlist, UL { 
+    padding-top: 0; 
+    padding-bottom:0; 
+    margin:0; 
+}
+
+.term { 
+    font-weight:bold;
+}
+
+
+
+    

Deleted: trunk/HibernateExt/annotations/doc/reference/fr/styles/html.xsl
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/doc/reference/fr/styles/html.xsl	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/doc/reference/fr/styles/html.xsl	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,84 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
-
-    This is the XSL HTML configuration file for the Hibernate
-    Reference Documentation.
-
-    It took me days to figure out this stuff and fix most of
-    the obvious bugs in the DocBook XSL distribution. Some of
-    the workarounds might not be appropriate with a newer version
-    of DocBook XSL. This file is released as part of Hibernate,
-    hence LGPL licensed.
-
-    christian at hibernate.org
--->
-
-<!DOCTYPE xsl:stylesheet [
-    <!ENTITY db_xsl_path        "../../../../../../Hibernate3/doc/reference/support/docbook-xsl/">
-]>
-
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                version="1.0"
-                xmlns="http://www.w3.org/TR/xhtml1/transitional"
-                exclude-result-prefixes="#default">
-                
-<xsl:import href="&db_xsl_path;/html/docbook.xsl"/>
-
-<!--###################################################
-                     HTML Settings
-    ################################################### -->   
-
-    <xsl:param name="html.stylesheet">../shared/css/html.css</xsl:param>
-
-    <!-- These extensions are required for table printing and other stuff -->
-    <xsl:param name="use.extensions">1</xsl:param>
-    <xsl:param name="tablecolumns.extension">0</xsl:param>
-    <xsl:param name="callout.extensions">1</xsl:param>
-    <xsl:param name="graphicsize.extension">0</xsl:param>
-
-<!--###################################################
-                      Table Of Contents
-    ################################################### -->   
-
-    <!-- Generate the TOCs for named components only -->
-    <xsl:param name="generate.toc">
-        book   toc
-    </xsl:param>
-    
-    <!-- Show only Sections up to level 3 in the TOCs -->
-    <xsl:param name="toc.section.depth">3</xsl:param>
-    
-<!--###################################################
-                         Labels
-    ################################################### -->   
-
-    <!-- Label Chapters and Sections (numbering) -->
-    <xsl:param name="chapter.autolabel">1</xsl:param>
-    <xsl:param name="section.autolabel" select="1"/>
-    <xsl:param name="section.label.includes.component.label" select="1"/>
-
-<!--###################################################
-                         Callouts
-    ################################################### -->
-
-    <!-- Don't use graphics, use a simple number style -->
-    <xsl:param name="callout.graphics">0</xsl:param>
-
-    <!-- Place callout marks at this column in annotated areas -->
-    <xsl:param name="callout.defaultcolumn">90</xsl:param>
-
-<!--###################################################
-                          Misc
-    ################################################### -->   
-
-    <!-- Placement of titles -->
-    <xsl:param name="formal.title.placement">
-        figure after
-        example before
-        equation before
-        table before
-        procedure before
-    </xsl:param>    
-    
-</xsl:stylesheet>

Copied: trunk/HibernateExt/annotations/doc/reference/fr/styles/html.xsl (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/doc/reference/fr/styles/html.xsl)
===================================================================
--- trunk/HibernateExt/annotations/doc/reference/fr/styles/html.xsl	                        (rev 0)
+++ trunk/HibernateExt/annotations/doc/reference/fr/styles/html.xsl	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,84 @@
+<?xml version="1.0"?>
+
+<!--
+
+    This is the XSL HTML configuration file for the Hibernate
+    Reference Documentation.
+
+    It took me days to figure out this stuff and fix most of
+    the obvious bugs in the DocBook XSL distribution. Some of
+    the workarounds might not be appropriate with a newer version
+    of DocBook XSL. This file is released as part of Hibernate,
+    hence LGPL licensed.
+
+    christian at hibernate.org
+-->
+
+<!DOCTYPE xsl:stylesheet [
+    <!ENTITY db_xsl_path        "../../../../../../Hibernate3/doc/reference/support/docbook-xsl/">
+]>
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+                version="1.0"
+                xmlns="http://www.w3.org/TR/xhtml1/transitional"
+                exclude-result-prefixes="#default">
+                
+<xsl:import href="&db_xsl_path;/html/docbook.xsl"/>
+
+<!--###################################################
+                     HTML Settings
+    ################################################### -->   
+
+    <xsl:param name="html.stylesheet">../shared/css/html.css</xsl:param>
+
+    <!-- These extensions are required for table printing and other stuff -->
+    <xsl:param name="use.extensions">1</xsl:param>
+    <xsl:param name="tablecolumns.extension">0</xsl:param>
+    <xsl:param name="callout.extensions">1</xsl:param>
+    <xsl:param name="graphicsize.extension">0</xsl:param>
+
+<!--###################################################
+                      Table Of Contents
+    ################################################### -->   
+
+    <!-- Generate the TOCs for named components only -->
+    <xsl:param name="generate.toc">
+        book   toc
+    </xsl:param>
+    
+    <!-- Show only Sections up to level 3 in the TOCs -->
+    <xsl:param name="toc.section.depth">3</xsl:param>
+    
+<!--###################################################
+                         Labels
+    ################################################### -->   
+
+    <!-- Label Chapters and Sections (numbering) -->
+    <xsl:param name="chapter.autolabel">1</xsl:param>
+    <xsl:param name="section.autolabel" select="1"/>
+    <xsl:param name="section.label.includes.component.label" select="1"/>
+
+<!--###################################################
+                         Callouts
+    ################################################### -->
+
+    <!-- Don't use graphics, use a simple number style -->
+    <xsl:param name="callout.graphics">0</xsl:param>
+
+    <!-- Place callout marks at this column in annotated areas -->
+    <xsl:param name="callout.defaultcolumn">90</xsl:param>
+
+<!--###################################################
+                          Misc
+    ################################################### -->   
+
+    <!-- Placement of titles -->
+    <xsl:param name="formal.title.placement">
+        figure after
+        example before
+        equation before
+        table before
+        procedure before
+    </xsl:param>    
+    
+</xsl:stylesheet>

Deleted: trunk/HibernateExt/annotations/doc/reference/fr/styles/html_chunk.xsl
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/doc/reference/fr/styles/html_chunk.xsl	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/doc/reference/fr/styles/html_chunk.xsl	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,86 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
-
-    This is the XSL HTML configuration file for the Hibernate
-    Reference Documentation.
-
-    It took me days to figure out this stuff and fix most of
-    the obvious bugs in the DocBook XSL distribution. Some of
-    the workarounds might not be appropriate with a newer version
-    of DocBook XSL. This file is released as part of Hibernate,
-    hence LGPL licensed.
-
-    christian at hibernate.org
--->
-
-<!DOCTYPE xsl:stylesheet [
-    <!ENTITY db_xsl_path        "../../../../../../Hibernate3/doc/reference/support/docbook-xsl/">
-]>
-
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                version="1.0"
-                xmlns="http://www.w3.org/TR/xhtml1/transitional"
-                exclude-result-prefixes="#default">
-                
-<xsl:import href="&db_xsl_path;/html/chunk.xsl"/>
-
-<!--###################################################
-                     HTML Settings
-    ################################################### -->   
-
-    <xsl:param name="chunk.section.depth">'5'</xsl:param>
-    <xsl:param name="use.id.as.filename">'1'</xsl:param>
-    <xsl:param name="html.stylesheet">../shared/css/html.css</xsl:param>
-
-    <!-- These extensions are required for table printing and other stuff -->
-    <xsl:param name="use.extensions">1</xsl:param>
-    <xsl:param name="tablecolumns.extension">0</xsl:param>
-    <xsl:param name="callout.extensions">1</xsl:param>
-    <xsl:param name="graphicsize.extension">0</xsl:param>
-    
-<!--###################################################
-                      Table Of Contents
-    ################################################### -->   
-
-    <!-- Generate the TOCs for named components only -->
-    <xsl:param name="generate.toc">
-        book   toc
-    </xsl:param>
-    
-    <!-- Show only Sections up to level 3 in the TOCs -->
-    <xsl:param name="toc.section.depth">3</xsl:param>
-
-<!--###################################################
-                         Labels
-    ################################################### -->   
-
-    <!-- Label Chapters and Sections (numbering) -->
-    <xsl:param name="chapter.autolabel">1</xsl:param>
-    <xsl:param name="section.autolabel" select="1"/>
-    <xsl:param name="section.label.includes.component.label" select="1"/>
-                
-<!--###################################################
-                         Callouts
-    ################################################### -->   
-
-    <!-- Don't use graphics, use a simple number style -->
-    <xsl:param name="callout.graphics">0</xsl:param>
-
-    <!-- Place callout marks at this column in annotated areas -->
-    <xsl:param name="callout.defaultcolumn">90</xsl:param>
-
-<!--###################################################
-                          Misc
-    ################################################### -->   
-
-    <!-- Placement of titles -->
-    <xsl:param name="formal.title.placement">
-        figure after
-        example before
-        equation before
-        table before
-        procedure before
-    </xsl:param>    
-    
-</xsl:stylesheet>

Copied: trunk/HibernateExt/annotations/doc/reference/fr/styles/html_chunk.xsl (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/doc/reference/fr/styles/html_chunk.xsl)
===================================================================
--- trunk/HibernateExt/annotations/doc/reference/fr/styles/html_chunk.xsl	                        (rev 0)
+++ trunk/HibernateExt/annotations/doc/reference/fr/styles/html_chunk.xsl	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,86 @@
+<?xml version="1.0"?>
+
+<!--
+
+    This is the XSL HTML configuration file for the Hibernate
+    Reference Documentation.
+
+    It took me days to figure out this stuff and fix most of
+    the obvious bugs in the DocBook XSL distribution. Some of
+    the workarounds might not be appropriate with a newer version
+    of DocBook XSL. This file is released as part of Hibernate,
+    hence LGPL licensed.
+
+    christian at hibernate.org
+-->
+
+<!DOCTYPE xsl:stylesheet [
+    <!ENTITY db_xsl_path        "../../../../../../Hibernate3/doc/reference/support/docbook-xsl/">
+]>
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+                version="1.0"
+                xmlns="http://www.w3.org/TR/xhtml1/transitional"
+                exclude-result-prefixes="#default">
+                
+<xsl:import href="&db_xsl_path;/html/chunk.xsl"/>
+
+<!--###################################################
+                     HTML Settings
+    ################################################### -->   
+
+    <xsl:param name="chunk.section.depth">'5'</xsl:param>
+    <xsl:param name="use.id.as.filename">'1'</xsl:param>
+    <xsl:param name="html.stylesheet">../shared/css/html.css</xsl:param>
+
+    <!-- These extensions are required for table printing and other stuff -->
+    <xsl:param name="use.extensions">1</xsl:param>
+    <xsl:param name="tablecolumns.extension">0</xsl:param>
+    <xsl:param name="callout.extensions">1</xsl:param>
+    <xsl:param name="graphicsize.extension">0</xsl:param>
+    
+<!--###################################################
+                      Table Of Contents
+    ################################################### -->   
+
+    <!-- Generate the TOCs for named components only -->
+    <xsl:param name="generate.toc">
+        book   toc
+    </xsl:param>
+    
+    <!-- Show only Sections up to level 3 in the TOCs -->
+    <xsl:param name="toc.section.depth">3</xsl:param>
+
+<!--###################################################
+                         Labels
+    ################################################### -->   
+
+    <!-- Label Chapters and Sections (numbering) -->
+    <xsl:param name="chapter.autolabel">1</xsl:param>
+    <xsl:param name="section.autolabel" select="1"/>
+    <xsl:param name="section.label.includes.component.label" select="1"/>
+                
+<!--###################################################
+                         Callouts
+    ################################################### -->   
+
+    <!-- Don't use graphics, use a simple number style -->
+    <xsl:param name="callout.graphics">0</xsl:param>
+
+    <!-- Place callout marks at this column in annotated areas -->
+    <xsl:param name="callout.defaultcolumn">90</xsl:param>
+
+<!--###################################################
+                          Misc
+    ################################################### -->   
+
+    <!-- Placement of titles -->
+    <xsl:param name="formal.title.placement">
+        figure after
+        example before
+        equation before
+        table before
+        procedure before
+    </xsl:param>    
+    
+</xsl:stylesheet>

Copied: trunk/HibernateExt/annotations/doc/reference/zh_cn (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/doc/reference/zh_cn)

Copied: trunk/HibernateExt/annotations/doc/reference/zh_cn/fop (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/doc/reference/zh_cn/fop)

Deleted: trunk/HibernateExt/annotations/doc/reference/zh_cn/fop/simhei.ttf
===================================================================
(Binary files differ)

Copied: trunk/HibernateExt/annotations/doc/reference/zh_cn/fop/simhei.ttf (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/doc/reference/zh_cn/fop/simhei.ttf)
===================================================================
(Binary files differ)

Deleted: trunk/HibernateExt/annotations/doc/reference/zh_cn/fop/simhei.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/doc/reference/zh_cn/fop/simhei.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/doc/reference/zh_cn/fop/simhei.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<font-metrics type="TYPE0"><font-name>SimHei</font-name><embed/><cap-height>0</cap-height><x-height>0</x-height><ascender>859</ascender><descender>-140</descender><bbox><left>0</left><bottom>-140</bottom><right>996</right><top>855</top></bbox><flags>33</flags><stemv>0</stemv><italicangle>0</italicangle><subtype>TYPE0</subtype><multibyte-extras><cid-type>CIDFontType2</cid-type><default-width>0</default-width><bfranges><bf us="32" ue="126" gi="3"/><bf us="127" ue="127" gi="2"/><bf us="164" ue="164" gi="98"/><bf us="167" ue="168" gi="99"/><bf us="176" ue="177" gi="101"/><bf us="183" ue="183" gi="103"/><bf us="215" ue="215" gi="104"/><bf us="224" ue="225" gi="105"/><bf us="232" ue="234" gi="107"/><bf us="236" ue="237" gi="110"/><bf us="242" ue="243" gi="112"/><bf us="247" ue="247" gi="114"/><bf us="249" ue="250" gi="115"/><bf us="252" ue="252" gi="117"/><bf us="257" ue="257" gi="118"/><bf us="275" ue="275" gi="119"/><bf us="283" ue="283" gi="120"/><bf us="299" ue="299" gi="121"!
 /><bf us="324" ue="324" gi="122"/><bf us="328" ue="328" gi="123"/><bf us="333" ue="333" gi="124"/><bf us="363" ue="363" gi="125"/><bf us="462" ue="462" gi="126"/><bf us="464" ue="464" gi="127"/><bf us="466" ue="466" gi="128"/><bf us="468" ue="468" gi="129"/><bf us="470" ue="470" gi="130"/><bf us="472" ue="472" gi="131"/><bf us="474" ue="474" gi="132"/><bf us="476" ue="476" gi="133"/><bf us="505" ue="505" gi="687"/><bf us="593" ue="593" gi="134"/><bf us="609" ue="609" gi="135"/><bf us="711" ue="711" gi="136"/><bf us="713" ue="713" gi="137"/><bf us="714" ue="715" gi="799"/><bf us="729" ue="729" gi="801"/><bf us="913" ue="929" gi="138"/><bf us="931" ue="937" gi="155"/><bf us="945" ue="961" gi="162"/><bf us="963" ue="969" gi="179"/><bf us="1025" ue="1025" gi="186"/><bf us="1040" ue="1103" gi="187"/><bf us="1105" ue="1105" gi="251"/><bf us="8208" ue="8208" gi="971"/><bf us="8211" ue="8211" gi="802"/><bf us="8212" ue="8212" gi="252"/><bf us="8213" ue="8213" gi="803"/><bf us="8214!
 " ue="8214" gi="253"/><bf us="8216" ue="8217" gi="254"/><bf us="8220" 
ue="8221" gi="256"/><bf us="8229" ue="8229" gi="804"/><bf us="8230" ue="8230" gi="258"/><bf us="8240" ue="8240" gi="259"/><bf us="8242" ue="8243" gi="260"/><bf us="8245" ue="8245" gi="805"/><bf us="8251" ue="8251" gi="262"/><bf us="8451" ue="8451" gi="263"/><bf us="8453" ue="8453" gi="806"/><bf us="8457" ue="8457" gi="807"/><bf us="8470" ue="8470" gi="264"/><bf us="8481" ue="8481" gi="969"/><bf us="8544" ue="8555" gi="265"/><bf us="8560" ue="8569" gi="957"/><bf us="8592" ue="8595" gi="277"/><bf us="8598" ue="8601" gi="808"/><bf us="8712" ue="8712" gi="281"/><bf us="8719" ue="8719" gi="282"/><bf us="8721" ue="8721" gi="283"/><bf us="8725" ue="8725" gi="812"/><bf us="8730" ue="8730" gi="284"/><bf us="8733" ue="8734" gi="285"/><bf us="8735" ue="8735" gi="813"/><bf us="8736" ue="8736" gi="287"/><bf us="8739" ue="8739" gi="814"/><bf us="8741" ue="8741" gi="288"/><bf us="8743" ue="8747" gi="289"/><bf us="8750" ue="8750" gi="294"/><bf us="8756" ue="8759" gi="295"/><bf us="8765" ue=!
 "8765" gi="299"/><bf us="8776" ue="8776" gi="300"/><bf us="8780" ue="8780" gi="301"/><bf us="8786" ue="8786" gi="815"/><bf us="8800" ue="8801" gi="302"/><bf us="8804" ue="8805" gi="304"/><bf us="8806" ue="8807" gi="816"/><bf us="8814" ue="8815" gi="306"/><bf us="8853" ue="8853" gi="880"/><bf us="8857" ue="8857" gi="308"/><bf us="8869" ue="8869" gi="309"/><bf us="8895" ue="8895" gi="818"/><bf us="8978" ue="8978" gi="310"/><bf us="9312" ue="9321" gi="311"/><bf us="9332" ue="9371" gi="321"/><bf us="9472" ue="9547" gi="361"/><bf us="9552" ue="9587" gi="819"/><bf us="9601" ue="9615" gi="855"/><bf us="9619" ue="9621" gi="870"/><bf us="9632" ue="9633" gi="437"/><bf us="9650" ue="9651" gi="439"/><bf us="9660" ue="9661" gi="873"/><bf us="9670" ue="9671" gi="441"/><bf us="9675" ue="9675" gi="443"/><bf us="9678" ue="9679" gi="444"/><bf us="9698" ue="9701" gi="875"/><bf us="9733" ue="9734" gi="446"/><bf us="9737" ue="9737" gi="879"/><bf us="9792" ue="9792" gi="448"/><bf us="9794" ue="9!
 794" gi="449"/><bf us="11905" ue="11905" gi="21903"/><bf us="11908" ue
="11908" gi="21907"/><bf us="11912" ue="11912" gi="21910"/><bf us="11915" ue="11915" gi="21911"/><bf us="11916" ue="11916" gi="21916"/><bf us="11943" ue="11943" gi="21930"/><bf us="11946" ue="11946" gi="21933"/><bf us="11950" ue="11950" gi="21936"/><bf us="11955" ue="11955" gi="21938"/><bf us="11958" ue="11959" gi="21939"/><bf us="11963" ue="11963" gi="21944"/><bf us="11978" ue="11978" gi="21954"/><bf us="12272" ue="12283" gi="689"/><bf us="12288" ue="12291" gi="450"/><bf us="12293" ue="12293" gi="454"/><bf us="12294" ue="12294" gi="977"/><bf us="12295" ue="12295" gi="21983"/><bf us="12296" ue="12305" gi="455"/><bf us="12306" ue="12306" gi="881"/><bf us="12307" ue="12311" gi="465"/><bf us="12317" ue="12318" gi="882"/><bf us="12321" ue="12329" gi="884"/><bf us="12353" ue="12435" gi="470"/><bf us="12443" ue="12444" gi="973"/><bf us="12445" ue="12446" gi="978"/><bf us="12449" ue="12534" gi="553"/><bf us="12540" ue="12540" gi="972"/><bf us="12541" ue="12542" gi="975"/><bf us="12!
 549" ue="12585" gi="639"/><bf us="12832" ue="12841" gi="676"/><bf us="12849" ue="12849" gi="970"/><bf us="12963" ue="12963" gi="893"/><bf us="13198" ue="13199" gi="894"/><bf us="13212" ue="13214" gi="896"/><bf us="13217" ue="13217" gi="899"/><bf us="13252" ue="13252" gi="900"/><bf us="13262" ue="13262" gi="901"/><bf us="13265" ue="13266" gi="902"/><bf us="13269" ue="13269" gi="904"/><bf us="13383" ue="13383" gi="21909"/><bf us="13427" ue="13427" gi="21908"/><bf us="13726" ue="13726" gi="21913"/><bf us="13838" ue="13838" gi="21915"/><bf us="13850" ue="13850" gi="21914"/><bf us="14616" ue="14616" gi="21919"/><bf us="14702" ue="14702" gi="21918"/><bf us="14799" ue="14799" gi="21921"/><bf us="14800" ue="14800" gi="21924"/><bf us="14815" ue="14815" gi="21922"/><bf us="14963" ue="14963" gi="21923"/><bf us="15182" ue="15182" gi="21927"/><bf us="15470" ue="15470" gi="21928"/><bf us="15584" ue="15584" gi="21929"/><bf us="16470" ue="16470" gi="21934"/><bf us="16735" ue="16735" gi="21!
 935"/><bf us="17207" ue="17207" gi="21937"/><bf us="17324" ue="17324" 
gi="21943"/><bf us="17329" ue="17329" gi="21942"/><bf us="17373" ue="17373" gi="21945"/><bf us="17622" ue="17622" gi="21946"/><bf us="17996" ue="17996" gi="21948"/><bf us="18017" ue="18017" gi="21947"/><bf us="18211" ue="18211" gi="21950"/><bf us="18217" ue="18217" gi="21951"/><bf us="18300" ue="18300" gi="21952"/><bf us="18317" ue="18317" gi="21953"/><bf us="18759" ue="18759" gi="21955"/><bf us="18810" ue="18810" gi="21956"/><bf us="18813" ue="18813" gi="21957"/><bf us="18818" ue="18819" gi="21958"/><bf us="18821" ue="18822" gi="21960"/><bf us="18843" ue="18843" gi="21963"/><bf us="18847" ue="18847" gi="21962"/><bf us="18870" ue="18870" gi="21965"/><bf us="18871" ue="18871" gi="21964"/><bf us="19575" ue="19575" gi="21972"/><bf us="19615" ue="19615" gi="21969"/><bf us="19617" ue="19617" gi="21971"/><bf us="19618" ue="19618" gi="21973"/><bf us="19619" ue="19619" gi="21968"/><bf us="19629" ue="19629" gi="21970"/><bf us="19731" ue="19737" gi="21974"/><bf us="19886" ue="19886" g!
 i="21981"/><bf us="19968" ue="40869" gi="980"/><bf us="59335" ue="59336" gi="686"/><bf us="59367" ue="59379" gi="688"/><bf us="59413" ue="59492" gi="21903"/><bf us="63788" ue="63788" gi="21882"/><bf us="63865" ue="63865" gi="21883"/><bf us="63893" ue="63893" gi="21884"/><bf us="63975" ue="63975" gi="21885"/><bf us="63985" ue="63985" gi="21886"/><bf us="64012" ue="64015" gi="21887"/><bf us="64017" ue="64017" gi="21891"/><bf us="64019" ue="64020" gi="21892"/><bf us="64024" ue="64024" gi="21894"/><bf us="64031" ue="64033" gi="21895"/><bf us="64035" ue="64036" gi="21898"/><bf us="64039" ue="64041" gi="21900"/><bf us="65072" ue="65073" gi="905"/><bf us="65075" ue="65092" gi="907"/><bf us="65097" ue="65106" gi="925"/><bf us="65108" ue="65111" gi="935"/><bf us="65113" ue="65126" gi="939"/><bf us="65128" ue="65131" gi="953"/><bf us="65281" ue="65374" gi="701"/><bf us="65504" ue="65505" gi="795"/><bf us="65506" ue="65506" gi="967"/><bf us="65507" ue="65507" gi="797"/><bf us="65508" !
 ue="65508" gi="968"/><bf us="65509" ue="65509" gi="798"/><bf us="65535
" ue="65535" gi="0"/></bfranges><cid-widths start-index="0"><wx w="1000"/><wx w="0"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="!
 500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="1000"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w
x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w
="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1
000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000
"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="500"/><wx w="500"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w
x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w
="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1
000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000
"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>
<wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=
"1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10
00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"
/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><
wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx 
w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="
1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100
0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/
><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w
x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w
="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1
000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000
"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>
<wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=
"1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10
00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"
/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><
wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx 
w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="
1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100
0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/
><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w
x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w
="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1
000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000
"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>
<wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=
"1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10
00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"
/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><
wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx 
w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="
1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100
0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/
><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w
x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w
="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1
000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000
"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>
<wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=
"1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10
00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"
/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><
wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx 
w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="
1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100
0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/
><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w
x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w
="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1
000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000
"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>
<wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=
"1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10
00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"
/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><
wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx 
w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="
1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100
0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/
><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w
x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w
="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1
000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000
"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>
<wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=
"1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10
00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"
/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><
wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx 
w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="
1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100
0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/
><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w
x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w
="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1
000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000
"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>
<wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=
"1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10
00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"
/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><
wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx 
w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="
1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100
0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/
><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w
x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w
="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1
000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000
"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>
<wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=
"1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10
00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"
/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><
wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx 
w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="
1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100
0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/
><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w
x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w
="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1
000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000
"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>
<wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=
"1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10
00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"
/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><
wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx 
w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="
1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100
0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/
><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w
x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w
="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1
000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000
"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>
<wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=
"1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10
00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"
/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><
wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx 
w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="
1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100
0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/
><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w
x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w
="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1
000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000
"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>
<wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/></cid-widths></multibyte-extras></font-metrics>
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/doc/reference/zh_cn/fop/simhei.xml (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/doc/reference/zh_cn/fop/simhei.xml)
===================================================================
--- trunk/HibernateExt/annotations/doc/reference/zh_cn/fop/simhei.xml	                        (rev 0)
+++ trunk/HibernateExt/annotations/doc/reference/zh_cn/fop/simhei.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<font-metrics type="TYPE0"><font-name>SimHei</font-name><embed/><cap-height>0</cap-height><x-height>0</x-height><ascender>859</ascender><descender>-140</descender><bbox><left>0</left><bottom>-140</bottom><right>996</right><top>855</top></bbox><flags>33</flags><stemv>0</stemv><italicangle>0</italicangle><subtype>TYPE0</subtype><multibyte-extras><cid-type>CIDFontType2</cid-type><default-width>0</default-width><bfranges><bf us="32" ue="126" gi="3"/><bf us="127" ue="127" gi="2"/><bf us="164" ue="164" gi="98"/><bf us="167" ue="168" gi="99"/><bf us="176" ue="177" gi="101"/><bf us="183" ue="183" gi="103"/><bf us="215" ue="215" gi="104"/><bf us="224" ue="225" gi="105"/><bf us="232" ue="234" gi="107"/><bf us="236" ue="237" gi="110"/><bf us="242" ue="243" gi="112"/><bf us="247" ue="247" gi="114"/><bf us="249" ue="250" gi="115"/><bf us="252" ue="252" gi="117"/><bf us="257" ue="257" gi="118"/><bf us="275" ue="275" gi="119"/><bf us="283" ue="283" gi="120"/><bf us="299" ue="299" gi="121"!
 /><bf us="324" ue="324" gi="122"/><bf us="328" ue="328" gi="123"/><bf us="333" ue="333" gi="124"/><bf us="363" ue="363" gi="125"/><bf us="462" ue="462" gi="126"/><bf us="464" ue="464" gi="127"/><bf us="466" ue="466" gi="128"/><bf us="468" ue="468" gi="129"/><bf us="470" ue="470" gi="130"/><bf us="472" ue="472" gi="131"/><bf us="474" ue="474" gi="132"/><bf us="476" ue="476" gi="133"/><bf us="505" ue="505" gi="687"/><bf us="593" ue="593" gi="134"/><bf us="609" ue="609" gi="135"/><bf us="711" ue="711" gi="136"/><bf us="713" ue="713" gi="137"/><bf us="714" ue="715" gi="799"/><bf us="729" ue="729" gi="801"/><bf us="913" ue="929" gi="138"/><bf us="931" ue="937" gi="155"/><bf us="945" ue="961" gi="162"/><bf us="963" ue="969" gi="179"/><bf us="1025" ue="1025" gi="186"/><bf us="1040" ue="1103" gi="187"/><bf us="1105" ue="1105" gi="251"/><bf us="8208" ue="8208" gi="971"/><bf us="8211" ue="8211" gi="802"/><bf us="8212" ue="8212" gi="252"/><bf us="8213" ue="8213" gi="803"/><bf us="8214!
 " ue="8214" gi="253"/><bf us="8216" ue="8217" gi="254"/><bf us="8220" 
ue="8221" gi="256"/><bf us="8229" ue="8229" gi="804"/><bf us="8230" ue="8230" gi="258"/><bf us="8240" ue="8240" gi="259"/><bf us="8242" ue="8243" gi="260"/><bf us="8245" ue="8245" gi="805"/><bf us="8251" ue="8251" gi="262"/><bf us="8451" ue="8451" gi="263"/><bf us="8453" ue="8453" gi="806"/><bf us="8457" ue="8457" gi="807"/><bf us="8470" ue="8470" gi="264"/><bf us="8481" ue="8481" gi="969"/><bf us="8544" ue="8555" gi="265"/><bf us="8560" ue="8569" gi="957"/><bf us="8592" ue="8595" gi="277"/><bf us="8598" ue="8601" gi="808"/><bf us="8712" ue="8712" gi="281"/><bf us="8719" ue="8719" gi="282"/><bf us="8721" ue="8721" gi="283"/><bf us="8725" ue="8725" gi="812"/><bf us="8730" ue="8730" gi="284"/><bf us="8733" ue="8734" gi="285"/><bf us="8735" ue="8735" gi="813"/><bf us="8736" ue="8736" gi="287"/><bf us="8739" ue="8739" gi="814"/><bf us="8741" ue="8741" gi="288"/><bf us="8743" ue="8747" gi="289"/><bf us="8750" ue="8750" gi="294"/><bf us="8756" ue="8759" gi="295"/><bf us="8765" ue=!
 "8765" gi="299"/><bf us="8776" ue="8776" gi="300"/><bf us="8780" ue="8780" gi="301"/><bf us="8786" ue="8786" gi="815"/><bf us="8800" ue="8801" gi="302"/><bf us="8804" ue="8805" gi="304"/><bf us="8806" ue="8807" gi="816"/><bf us="8814" ue="8815" gi="306"/><bf us="8853" ue="8853" gi="880"/><bf us="8857" ue="8857" gi="308"/><bf us="8869" ue="8869" gi="309"/><bf us="8895" ue="8895" gi="818"/><bf us="8978" ue="8978" gi="310"/><bf us="9312" ue="9321" gi="311"/><bf us="9332" ue="9371" gi="321"/><bf us="9472" ue="9547" gi="361"/><bf us="9552" ue="9587" gi="819"/><bf us="9601" ue="9615" gi="855"/><bf us="9619" ue="9621" gi="870"/><bf us="9632" ue="9633" gi="437"/><bf us="9650" ue="9651" gi="439"/><bf us="9660" ue="9661" gi="873"/><bf us="9670" ue="9671" gi="441"/><bf us="9675" ue="9675" gi="443"/><bf us="9678" ue="9679" gi="444"/><bf us="9698" ue="9701" gi="875"/><bf us="9733" ue="9734" gi="446"/><bf us="9737" ue="9737" gi="879"/><bf us="9792" ue="9792" gi="448"/><bf us="9794" ue="9!
 794" gi="449"/><bf us="11905" ue="11905" gi="21903"/><bf us="11908" ue
="11908" gi="21907"/><bf us="11912" ue="11912" gi="21910"/><bf us="11915" ue="11915" gi="21911"/><bf us="11916" ue="11916" gi="21916"/><bf us="11943" ue="11943" gi="21930"/><bf us="11946" ue="11946" gi="21933"/><bf us="11950" ue="11950" gi="21936"/><bf us="11955" ue="11955" gi="21938"/><bf us="11958" ue="11959" gi="21939"/><bf us="11963" ue="11963" gi="21944"/><bf us="11978" ue="11978" gi="21954"/><bf us="12272" ue="12283" gi="689"/><bf us="12288" ue="12291" gi="450"/><bf us="12293" ue="12293" gi="454"/><bf us="12294" ue="12294" gi="977"/><bf us="12295" ue="12295" gi="21983"/><bf us="12296" ue="12305" gi="455"/><bf us="12306" ue="12306" gi="881"/><bf us="12307" ue="12311" gi="465"/><bf us="12317" ue="12318" gi="882"/><bf us="12321" ue="12329" gi="884"/><bf us="12353" ue="12435" gi="470"/><bf us="12443" ue="12444" gi="973"/><bf us="12445" ue="12446" gi="978"/><bf us="12449" ue="12534" gi="553"/><bf us="12540" ue="12540" gi="972"/><bf us="12541" ue="12542" gi="975"/><bf us="12!
 549" ue="12585" gi="639"/><bf us="12832" ue="12841" gi="676"/><bf us="12849" ue="12849" gi="970"/><bf us="12963" ue="12963" gi="893"/><bf us="13198" ue="13199" gi="894"/><bf us="13212" ue="13214" gi="896"/><bf us="13217" ue="13217" gi="899"/><bf us="13252" ue="13252" gi="900"/><bf us="13262" ue="13262" gi="901"/><bf us="13265" ue="13266" gi="902"/><bf us="13269" ue="13269" gi="904"/><bf us="13383" ue="13383" gi="21909"/><bf us="13427" ue="13427" gi="21908"/><bf us="13726" ue="13726" gi="21913"/><bf us="13838" ue="13838" gi="21915"/><bf us="13850" ue="13850" gi="21914"/><bf us="14616" ue="14616" gi="21919"/><bf us="14702" ue="14702" gi="21918"/><bf us="14799" ue="14799" gi="21921"/><bf us="14800" ue="14800" gi="21924"/><bf us="14815" ue="14815" gi="21922"/><bf us="14963" ue="14963" gi="21923"/><bf us="15182" ue="15182" gi="21927"/><bf us="15470" ue="15470" gi="21928"/><bf us="15584" ue="15584" gi="21929"/><bf us="16470" ue="16470" gi="21934"/><bf us="16735" ue="16735" gi="21!
 935"/><bf us="17207" ue="17207" gi="21937"/><bf us="17324" ue="17324" 
gi="21943"/><bf us="17329" ue="17329" gi="21942"/><bf us="17373" ue="17373" gi="21945"/><bf us="17622" ue="17622" gi="21946"/><bf us="17996" ue="17996" gi="21948"/><bf us="18017" ue="18017" gi="21947"/><bf us="18211" ue="18211" gi="21950"/><bf us="18217" ue="18217" gi="21951"/><bf us="18300" ue="18300" gi="21952"/><bf us="18317" ue="18317" gi="21953"/><bf us="18759" ue="18759" gi="21955"/><bf us="18810" ue="18810" gi="21956"/><bf us="18813" ue="18813" gi="21957"/><bf us="18818" ue="18819" gi="21958"/><bf us="18821" ue="18822" gi="21960"/><bf us="18843" ue="18843" gi="21963"/><bf us="18847" ue="18847" gi="21962"/><bf us="18870" ue="18870" gi="21965"/><bf us="18871" ue="18871" gi="21964"/><bf us="19575" ue="19575" gi="21972"/><bf us="19615" ue="19615" gi="21969"/><bf us="19617" ue="19617" gi="21971"/><bf us="19618" ue="19618" gi="21973"/><bf us="19619" ue="19619" gi="21968"/><bf us="19629" ue="19629" gi="21970"/><bf us="19731" ue="19737" gi="21974"/><bf us="19886" ue="19886" g!
 i="21981"/><bf us="19968" ue="40869" gi="980"/><bf us="59335" ue="59336" gi="686"/><bf us="59367" ue="59379" gi="688"/><bf us="59413" ue="59492" gi="21903"/><bf us="63788" ue="63788" gi="21882"/><bf us="63865" ue="63865" gi="21883"/><bf us="63893" ue="63893" gi="21884"/><bf us="63975" ue="63975" gi="21885"/><bf us="63985" ue="63985" gi="21886"/><bf us="64012" ue="64015" gi="21887"/><bf us="64017" ue="64017" gi="21891"/><bf us="64019" ue="64020" gi="21892"/><bf us="64024" ue="64024" gi="21894"/><bf us="64031" ue="64033" gi="21895"/><bf us="64035" ue="64036" gi="21898"/><bf us="64039" ue="64041" gi="21900"/><bf us="65072" ue="65073" gi="905"/><bf us="65075" ue="65092" gi="907"/><bf us="65097" ue="65106" gi="925"/><bf us="65108" ue="65111" gi="935"/><bf us="65113" ue="65126" gi="939"/><bf us="65128" ue="65131" gi="953"/><bf us="65281" ue="65374" gi="701"/><bf us="65504" ue="65505" gi="795"/><bf us="65506" ue="65506" gi="967"/><bf us="65507" ue="65507" gi="797"/><bf us="65508" !
 ue="65508" gi="968"/><bf us="65509" ue="65509" gi="798"/><bf us="65535
" ue="65535" gi="0"/></bfranges><cid-widths start-index="0"><wx w="1000"/><wx w="0"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="!
 500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="1000"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w
x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w
="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1
000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000
"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="500"/><wx w="500"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w
x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w
="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1
000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000
"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>
<wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=
"1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10
00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"
/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><
wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx 
w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="
1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100
0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/
><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w
x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w
="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1
000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000
"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>
<wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=
"1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10
00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"
/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><
wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx 
w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="
1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100
0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/
><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w
x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w
="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1
000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000
"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>
<wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=
"1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10
00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"
/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><
wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx 
w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="
1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100
0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/
><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w
x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w
="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1
000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000
"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>
<wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=
"1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10
00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"
/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><
wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx 
w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="
1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100
0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/
><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w
x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w
="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1
000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000
"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>
<wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=
"1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10
00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"
/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><
wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx 
w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="
1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100
0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/
><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w
x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w
="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1
000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000
"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>
<wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=
"1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10
00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"
/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><
wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx 
w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="
1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100
0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/
><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w
x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w
="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1
000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000
"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>
<wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=
"1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10
00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"
/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><
wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx 
w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="
1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100
0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/
><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w
x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w
="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1
000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000
"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>
<wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=
"1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10
00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"
/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><
wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx 
w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="
1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100
0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/
><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w
x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w
="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1
000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000
"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>
<wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=
"1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10
00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"
/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><
wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx 
w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="
1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100
0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/
><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w
x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w
="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1
000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000
"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>
<wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=
"1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10
00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"
/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><
wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx 
w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="
1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100
0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/
><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w
x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w
="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1
000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000
"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>
<wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/></cid-widths></multibyte-extras></font-metrics>
\ No newline at end of file

Deleted: trunk/HibernateExt/annotations/doc/reference/zh_cn/fop/simsun.ttc
===================================================================
(Binary files differ)

Copied: trunk/HibernateExt/annotations/doc/reference/zh_cn/fop/simsun.ttc (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/doc/reference/zh_cn/fop/simsun.ttc)
===================================================================
(Binary files differ)

Deleted: trunk/HibernateExt/annotations/doc/reference/zh_cn/fop/simsun.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/doc/reference/zh_cn/fop/simsun.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/doc/reference/zh_cn/fop/simsun.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<font-metrics type="TYPE0"><font-name>SimSun</font-name><embed/><cap-height>0</cap-height><x-height>0</x-height><ascender>859</ascender><descender>-140</descender><bbox><left>0</left><bottom>-140</bottom><right>996</right><top>855</top></bbox><flags>33</flags><stemv>0</stemv><italicangle>0</italicangle><ttc-name>SimSun</ttc-name><subtype>TYPE0</subtype><multibyte-extras><cid-type>CIDFontType2</cid-type><default-width>0</default-width><bfranges><bf us="32" ue="126" gi="3"/><bf us="127" ue="127" gi="2"/><bf us="160" ue="163" gi="22021"/><bf us="164" ue="164" gi="98"/><bf us="165" ue="166" gi="22025"/><bf us="167" ue="168" gi="99"/><bf us="169" ue="175" gi="22027"/><bf us="176" ue="177" gi="101"/><bf us="178" ue="182" gi="22034"/><bf us="183" ue="183" gi="103"/><bf us="184" ue="214" gi="22039"/><bf us="215" ue="215" gi="104"/><bf us="216" ue="223" gi="22070"/><bf us="224" ue="225" gi="105"/><bf us="226" ue="231" gi="22078"/><bf us="232" ue="234" gi="107"/><bf us="235" ue="235"!
  gi="22084"/><bf us="236" ue="237" gi="110"/><bf us="238" ue="241" gi="22085"/><bf us="242" ue="243" gi="112"/><bf us="244" ue="246" gi="22089"/><bf us="247" ue="247" gi="114"/><bf us="248" ue="248" gi="22092"/><bf us="249" ue="250" gi="115"/><bf us="251" ue="251" gi="22093"/><bf us="252" ue="252" gi="117"/><bf us="253" ue="255" gi="22094"/><bf us="257" ue="257" gi="118"/><bf us="275" ue="275" gi="119"/><bf us="283" ue="283" gi="120"/><bf us="299" ue="299" gi="121"/><bf us="324" ue="324" gi="122"/><bf us="328" ue="328" gi="123"/><bf us="333" ue="333" gi="124"/><bf us="338" ue="339" gi="22097"/><bf us="352" ue="353" gi="22099"/><bf us="363" ue="363" gi="125"/><bf us="376" ue="376" gi="22101"/><bf us="402" ue="402" gi="22102"/><bf us="462" ue="462" gi="126"/><bf us="464" ue="464" gi="127"/><bf us="466" ue="466" gi="128"/><bf us="468" ue="468" gi="129"/><bf us="470" ue="470" gi="130"/><bf us="472" ue="472" gi="131"/><bf us="474" ue="474" gi="132"/><bf us="476" ue="476" gi="133!
 "/><bf us="505" ue="505" gi="687"/><bf us="593" ue="593" gi="134"/><bf
 us="609" ue="609" gi="135"/><bf us="710" ue="710" gi="22103"/><bf us="711" ue="711" gi="136"/><bf us="713" ue="713" gi="137"/><bf us="714" ue="715" gi="799"/><bf us="729" ue="729" gi="801"/><bf us="732" ue="732" gi="22104"/><bf us="913" ue="929" gi="138"/><bf us="931" ue="937" gi="155"/><bf us="945" ue="961" gi="162"/><bf us="963" ue="969" gi="179"/><bf us="1025" ue="1025" gi="186"/><bf us="1040" ue="1103" gi="187"/><bf us="1105" ue="1105" gi="251"/><bf us="8208" ue="8208" gi="971"/><bf us="8211" ue="8211" gi="802"/><bf us="8212" ue="8212" gi="252"/><bf us="8213" ue="8213" gi="803"/><bf us="8214" ue="8214" gi="253"/><bf us="8216" ue="8217" gi="254"/><bf us="8218" ue="8218" gi="22105"/><bf us="8220" ue="8221" gi="256"/><bf us="8222" ue="8222" gi="22106"/><bf us="8224" ue="8226" gi="22107"/><bf us="8229" ue="8229" gi="804"/><bf us="8230" ue="8230" gi="258"/><bf us="8240" ue="8240" gi="259"/><bf us="8242" ue="8243" gi="260"/><bf us="8245" ue="8245" gi="805"/><bf us="8249" ue="!
 8250" gi="22110"/><bf us="8251" ue="8251" gi="262"/><bf us="8364" ue="8364" gi="22112"/><bf us="8451" ue="8451" gi="263"/><bf us="8453" ue="8453" gi="806"/><bf us="8457" ue="8457" gi="807"/><bf us="8470" ue="8470" gi="264"/><bf us="8481" ue="8481" gi="969"/><bf us="8482" ue="8482" gi="22113"/><bf us="8544" ue="8555" gi="265"/><bf us="8560" ue="8569" gi="957"/><bf us="8592" ue="8595" gi="277"/><bf us="8598" ue="8601" gi="808"/><bf us="8712" ue="8712" gi="281"/><bf us="8719" ue="8719" gi="282"/><bf us="8721" ue="8721" gi="283"/><bf us="8725" ue="8725" gi="812"/><bf us="8730" ue="8730" gi="284"/><bf us="8733" ue="8734" gi="285"/><bf us="8735" ue="8735" gi="813"/><bf us="8736" ue="8736" gi="287"/><bf us="8739" ue="8739" gi="814"/><bf us="8741" ue="8741" gi="288"/><bf us="8743" ue="8747" gi="289"/><bf us="8750" ue="8750" gi="294"/><bf us="8756" ue="8759" gi="295"/><bf us="8765" ue="8765" gi="299"/><bf us="8776" ue="8776" gi="300"/><bf us="8780" ue="8780" gi="301"/><bf us="8786" !
 ue="8786" gi="815"/><bf us="8800" ue="8801" gi="302"/><bf us="8804" ue
="8805" gi="304"/><bf us="8806" ue="8807" gi="816"/><bf us="8814" ue="8815" gi="306"/><bf us="8853" ue="8853" gi="880"/><bf us="8857" ue="8857" gi="308"/><bf us="8869" ue="8869" gi="309"/><bf us="8895" ue="8895" gi="818"/><bf us="8978" ue="8978" gi="310"/><bf us="9312" ue="9321" gi="311"/><bf us="9332" ue="9371" gi="321"/><bf us="9472" ue="9547" gi="361"/><bf us="9552" ue="9587" gi="819"/><bf us="9601" ue="9615" gi="855"/><bf us="9619" ue="9621" gi="870"/><bf us="9632" ue="9633" gi="437"/><bf us="9650" ue="9651" gi="439"/><bf us="9660" ue="9661" gi="873"/><bf us="9670" ue="9671" gi="441"/><bf us="9675" ue="9675" gi="443"/><bf us="9678" ue="9679" gi="444"/><bf us="9698" ue="9701" gi="875"/><bf us="9733" ue="9734" gi="446"/><bf us="9737" ue="9737" gi="879"/><bf us="9792" ue="9792" gi="448"/><bf us="9794" ue="9794" gi="449"/><bf us="11905" ue="11905" gi="21903"/><bf us="11908" ue="11908" gi="21907"/><bf us="11912" ue="11912" gi="21910"/><bf us="11915" ue="11915" gi="21911"/><bf!
  us="11916" ue="11916" gi="21916"/><bf us="11943" ue="11943" gi="21930"/><bf us="11946" ue="11946" gi="21933"/><bf us="11950" ue="11950" gi="21936"/><bf us="11955" ue="11955" gi="21938"/><bf us="11958" ue="11959" gi="21939"/><bf us="11963" ue="11963" gi="21944"/><bf us="11978" ue="11978" gi="21954"/><bf us="12272" ue="12283" gi="689"/><bf us="12288" ue="12291" gi="450"/><bf us="12293" ue="12293" gi="454"/><bf us="12294" ue="12294" gi="977"/><bf us="12295" ue="12295" gi="21983"/><bf us="12296" ue="12305" gi="455"/><bf us="12306" ue="12306" gi="881"/><bf us="12307" ue="12311" gi="465"/><bf us="12317" ue="12318" gi="882"/><bf us="12321" ue="12329" gi="884"/><bf us="12353" ue="12435" gi="470"/><bf us="12443" ue="12444" gi="973"/><bf us="12445" ue="12446" gi="978"/><bf us="12449" ue="12534" gi="553"/><bf us="12540" ue="12540" gi="972"/><bf us="12541" ue="12542" gi="975"/><bf us="12549" ue="12585" gi="639"/><bf us="12832" ue="12841" gi="676"/><bf us="12849" ue="12849" gi="970"/><!
 bf us="12963" ue="12963" gi="893"/><bf us="13198" ue="13199" gi="894"/
><bf us="13212" ue="13214" gi="896"/><bf us="13217" ue="13217" gi="899"/><bf us="13252" ue="13252" gi="900"/><bf us="13262" ue="13262" gi="901"/><bf us="13265" ue="13266" gi="902"/><bf us="13269" ue="13269" gi="904"/><bf us="13383" ue="13383" gi="21909"/><bf us="13427" ue="13427" gi="21908"/><bf us="13726" ue="13726" gi="21913"/><bf us="13838" ue="13838" gi="21915"/><bf us="13850" ue="13850" gi="21914"/><bf us="14616" ue="14616" gi="21919"/><bf us="14702" ue="14702" gi="21918"/><bf us="14799" ue="14799" gi="21921"/><bf us="14800" ue="14800" gi="21924"/><bf us="14815" ue="14815" gi="21922"/><bf us="14963" ue="14963" gi="21923"/><bf us="15182" ue="15182" gi="21927"/><bf us="15470" ue="15470" gi="21928"/><bf us="15584" ue="15584" gi="21929"/><bf us="16470" ue="16470" gi="21934"/><bf us="16735" ue="16735" gi="21935"/><bf us="17207" ue="17207" gi="21937"/><bf us="17324" ue="17324" gi="21943"/><bf us="17329" ue="17329" gi="21942"/><bf us="17373" ue="17373" gi="21945"/><bf us="1762!
 2" ue="17622" gi="21946"/><bf us="17996" ue="17996" gi="21948"/><bf us="18017" ue="18017" gi="21947"/><bf us="18211" ue="18211" gi="21950"/><bf us="18217" ue="18217" gi="21951"/><bf us="18300" ue="18300" gi="21952"/><bf us="18317" ue="18317" gi="21953"/><bf us="18759" ue="18759" gi="21955"/><bf us="18810" ue="18810" gi="21956"/><bf us="18813" ue="18813" gi="21957"/><bf us="18818" ue="18819" gi="21958"/><bf us="18821" ue="18822" gi="21960"/><bf us="18843" ue="18843" gi="21963"/><bf us="18847" ue="18847" gi="21962"/><bf us="18870" ue="18870" gi="21965"/><bf us="18871" ue="18871" gi="21964"/><bf us="19575" ue="19575" gi="21972"/><bf us="19615" ue="19615" gi="21969"/><bf us="19617" ue="19617" gi="21971"/><bf us="19618" ue="19618" gi="21973"/><bf us="19619" ue="19619" gi="21968"/><bf us="19629" ue="19629" gi="21970"/><bf us="19731" ue="19737" gi="21974"/><bf us="19886" ue="19886" gi="21981"/><bf us="19968" ue="40869" gi="980"/><bf us="59335" ue="59336" gi="686"/><bf us="59367" u!
 e="59379" gi="688"/><bf us="59413" ue="59492" gi="21903"/><bf us="6378
8" ue="63788" gi="21882"/><bf us="63865" ue="63865" gi="21883"/><bf us="63893" ue="63893" gi="21884"/><bf us="63975" ue="63975" gi="21885"/><bf us="63985" ue="63985" gi="21886"/><bf us="64012" ue="64015" gi="21887"/><bf us="64017" ue="64017" gi="21891"/><bf us="64019" ue="64020" gi="21892"/><bf us="64024" ue="64024" gi="21894"/><bf us="64031" ue="64033" gi="21895"/><bf us="64035" ue="64036" gi="21898"/><bf us="64039" ue="64041" gi="21900"/><bf us="65072" ue="65073" gi="905"/><bf us="65075" ue="65092" gi="907"/><bf us="65097" ue="65106" gi="925"/><bf us="65108" ue="65111" gi="935"/><bf us="65113" ue="65126" gi="939"/><bf us="65128" ue="65131" gi="953"/><bf us="65281" ue="65374" gi="701"/><bf us="65504" ue="65505" gi="795"/><bf us="65506" ue="65506" gi="967"/><bf us="65507" ue="65507" gi="797"/><bf us="65508" ue="65508" gi="968"/><bf us="65509" ue="65509" gi="798"/><bf us="65535" ue="65535" gi="0"/></bfranges><cid-widths start-index="0"><wx w="1000"/><wx w="0"/><wx w="500"/><w!
 x w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><w!
 x w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="
500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="1000"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"
/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><
wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx 
w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="
1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="500"/><wx w="500"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"
/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><
wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx 
w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="
1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100
0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/
><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w
x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w
="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1
000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000
"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>
<wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=
"1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10
00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"
/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><
wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx 
w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="
1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100
0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/
><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w
x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w
="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1
000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000
"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>
<wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=
"1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10
00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"
/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><
wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx 
w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="
1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100
0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/
><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w
x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w
="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1
000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000
"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>
<wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=
"1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10
00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"
/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><
wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx 
w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="
1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100
0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/
><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w
x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w
="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1
000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000
"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>
<wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=
"1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10
00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"
/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><
wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx 
w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="
1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100
0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/
><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w
x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w
="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1
000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000
"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>
<wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=
"1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10
00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"
/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><
wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx 
w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="
1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100
0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/
><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w
x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w
="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1
000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000
"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>
<wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=
"1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10
00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"
/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><
wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx 
w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="
1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100
0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/
><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w
x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w
="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1
000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000
"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>
<wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=
"1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10
00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"
/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><
wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx 
w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="
1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100
0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/
><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w
x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w
="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1
000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000
"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>
<wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=
"1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10
00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"
/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><
wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx 
w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="
1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100
0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/
><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w
x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w
="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1
000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000
"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>
<wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=
"1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10
00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"
/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><
wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx 
w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="
1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100
0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/
><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w
x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w
="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1
000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000
"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>
<wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=
"1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10
00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"
/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><
wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx 
w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="
1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100
0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/
><wx w="1000"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/!
 ><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/></cid-widths></multibyte-extras></font-metrics>
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/doc/reference/zh_cn/fop/simsun.xml (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/doc/reference/zh_cn/fop/simsun.xml)
===================================================================
--- trunk/HibernateExt/annotations/doc/reference/zh_cn/fop/simsun.xml	                        (rev 0)
+++ trunk/HibernateExt/annotations/doc/reference/zh_cn/fop/simsun.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<font-metrics type="TYPE0"><font-name>SimSun</font-name><embed/><cap-height>0</cap-height><x-height>0</x-height><ascender>859</ascender><descender>-140</descender><bbox><left>0</left><bottom>-140</bottom><right>996</right><top>855</top></bbox><flags>33</flags><stemv>0</stemv><italicangle>0</italicangle><ttc-name>SimSun</ttc-name><subtype>TYPE0</subtype><multibyte-extras><cid-type>CIDFontType2</cid-type><default-width>0</default-width><bfranges><bf us="32" ue="126" gi="3"/><bf us="127" ue="127" gi="2"/><bf us="160" ue="163" gi="22021"/><bf us="164" ue="164" gi="98"/><bf us="165" ue="166" gi="22025"/><bf us="167" ue="168" gi="99"/><bf us="169" ue="175" gi="22027"/><bf us="176" ue="177" gi="101"/><bf us="178" ue="182" gi="22034"/><bf us="183" ue="183" gi="103"/><bf us="184" ue="214" gi="22039"/><bf us="215" ue="215" gi="104"/><bf us="216" ue="223" gi="22070"/><bf us="224" ue="225" gi="105"/><bf us="226" ue="231" gi="22078"/><bf us="232" ue="234" gi="107"/><bf us="235" ue="235"!
  gi="22084"/><bf us="236" ue="237" gi="110"/><bf us="238" ue="241" gi="22085"/><bf us="242" ue="243" gi="112"/><bf us="244" ue="246" gi="22089"/><bf us="247" ue="247" gi="114"/><bf us="248" ue="248" gi="22092"/><bf us="249" ue="250" gi="115"/><bf us="251" ue="251" gi="22093"/><bf us="252" ue="252" gi="117"/><bf us="253" ue="255" gi="22094"/><bf us="257" ue="257" gi="118"/><bf us="275" ue="275" gi="119"/><bf us="283" ue="283" gi="120"/><bf us="299" ue="299" gi="121"/><bf us="324" ue="324" gi="122"/><bf us="328" ue="328" gi="123"/><bf us="333" ue="333" gi="124"/><bf us="338" ue="339" gi="22097"/><bf us="352" ue="353" gi="22099"/><bf us="363" ue="363" gi="125"/><bf us="376" ue="376" gi="22101"/><bf us="402" ue="402" gi="22102"/><bf us="462" ue="462" gi="126"/><bf us="464" ue="464" gi="127"/><bf us="466" ue="466" gi="128"/><bf us="468" ue="468" gi="129"/><bf us="470" ue="470" gi="130"/><bf us="472" ue="472" gi="131"/><bf us="474" ue="474" gi="132"/><bf us="476" ue="476" gi="133!
 "/><bf us="505" ue="505" gi="687"/><bf us="593" ue="593" gi="134"/><bf
 us="609" ue="609" gi="135"/><bf us="710" ue="710" gi="22103"/><bf us="711" ue="711" gi="136"/><bf us="713" ue="713" gi="137"/><bf us="714" ue="715" gi="799"/><bf us="729" ue="729" gi="801"/><bf us="732" ue="732" gi="22104"/><bf us="913" ue="929" gi="138"/><bf us="931" ue="937" gi="155"/><bf us="945" ue="961" gi="162"/><bf us="963" ue="969" gi="179"/><bf us="1025" ue="1025" gi="186"/><bf us="1040" ue="1103" gi="187"/><bf us="1105" ue="1105" gi="251"/><bf us="8208" ue="8208" gi="971"/><bf us="8211" ue="8211" gi="802"/><bf us="8212" ue="8212" gi="252"/><bf us="8213" ue="8213" gi="803"/><bf us="8214" ue="8214" gi="253"/><bf us="8216" ue="8217" gi="254"/><bf us="8218" ue="8218" gi="22105"/><bf us="8220" ue="8221" gi="256"/><bf us="8222" ue="8222" gi="22106"/><bf us="8224" ue="8226" gi="22107"/><bf us="8229" ue="8229" gi="804"/><bf us="8230" ue="8230" gi="258"/><bf us="8240" ue="8240" gi="259"/><bf us="8242" ue="8243" gi="260"/><bf us="8245" ue="8245" gi="805"/><bf us="8249" ue="!
 8250" gi="22110"/><bf us="8251" ue="8251" gi="262"/><bf us="8364" ue="8364" gi="22112"/><bf us="8451" ue="8451" gi="263"/><bf us="8453" ue="8453" gi="806"/><bf us="8457" ue="8457" gi="807"/><bf us="8470" ue="8470" gi="264"/><bf us="8481" ue="8481" gi="969"/><bf us="8482" ue="8482" gi="22113"/><bf us="8544" ue="8555" gi="265"/><bf us="8560" ue="8569" gi="957"/><bf us="8592" ue="8595" gi="277"/><bf us="8598" ue="8601" gi="808"/><bf us="8712" ue="8712" gi="281"/><bf us="8719" ue="8719" gi="282"/><bf us="8721" ue="8721" gi="283"/><bf us="8725" ue="8725" gi="812"/><bf us="8730" ue="8730" gi="284"/><bf us="8733" ue="8734" gi="285"/><bf us="8735" ue="8735" gi="813"/><bf us="8736" ue="8736" gi="287"/><bf us="8739" ue="8739" gi="814"/><bf us="8741" ue="8741" gi="288"/><bf us="8743" ue="8747" gi="289"/><bf us="8750" ue="8750" gi="294"/><bf us="8756" ue="8759" gi="295"/><bf us="8765" ue="8765" gi="299"/><bf us="8776" ue="8776" gi="300"/><bf us="8780" ue="8780" gi="301"/><bf us="8786" !
 ue="8786" gi="815"/><bf us="8800" ue="8801" gi="302"/><bf us="8804" ue
="8805" gi="304"/><bf us="8806" ue="8807" gi="816"/><bf us="8814" ue="8815" gi="306"/><bf us="8853" ue="8853" gi="880"/><bf us="8857" ue="8857" gi="308"/><bf us="8869" ue="8869" gi="309"/><bf us="8895" ue="8895" gi="818"/><bf us="8978" ue="8978" gi="310"/><bf us="9312" ue="9321" gi="311"/><bf us="9332" ue="9371" gi="321"/><bf us="9472" ue="9547" gi="361"/><bf us="9552" ue="9587" gi="819"/><bf us="9601" ue="9615" gi="855"/><bf us="9619" ue="9621" gi="870"/><bf us="9632" ue="9633" gi="437"/><bf us="9650" ue="9651" gi="439"/><bf us="9660" ue="9661" gi="873"/><bf us="9670" ue="9671" gi="441"/><bf us="9675" ue="9675" gi="443"/><bf us="9678" ue="9679" gi="444"/><bf us="9698" ue="9701" gi="875"/><bf us="9733" ue="9734" gi="446"/><bf us="9737" ue="9737" gi="879"/><bf us="9792" ue="9792" gi="448"/><bf us="9794" ue="9794" gi="449"/><bf us="11905" ue="11905" gi="21903"/><bf us="11908" ue="11908" gi="21907"/><bf us="11912" ue="11912" gi="21910"/><bf us="11915" ue="11915" gi="21911"/><bf!
  us="11916" ue="11916" gi="21916"/><bf us="11943" ue="11943" gi="21930"/><bf us="11946" ue="11946" gi="21933"/><bf us="11950" ue="11950" gi="21936"/><bf us="11955" ue="11955" gi="21938"/><bf us="11958" ue="11959" gi="21939"/><bf us="11963" ue="11963" gi="21944"/><bf us="11978" ue="11978" gi="21954"/><bf us="12272" ue="12283" gi="689"/><bf us="12288" ue="12291" gi="450"/><bf us="12293" ue="12293" gi="454"/><bf us="12294" ue="12294" gi="977"/><bf us="12295" ue="12295" gi="21983"/><bf us="12296" ue="12305" gi="455"/><bf us="12306" ue="12306" gi="881"/><bf us="12307" ue="12311" gi="465"/><bf us="12317" ue="12318" gi="882"/><bf us="12321" ue="12329" gi="884"/><bf us="12353" ue="12435" gi="470"/><bf us="12443" ue="12444" gi="973"/><bf us="12445" ue="12446" gi="978"/><bf us="12449" ue="12534" gi="553"/><bf us="12540" ue="12540" gi="972"/><bf us="12541" ue="12542" gi="975"/><bf us="12549" ue="12585" gi="639"/><bf us="12832" ue="12841" gi="676"/><bf us="12849" ue="12849" gi="970"/><!
 bf us="12963" ue="12963" gi="893"/><bf us="13198" ue="13199" gi="894"/
><bf us="13212" ue="13214" gi="896"/><bf us="13217" ue="13217" gi="899"/><bf us="13252" ue="13252" gi="900"/><bf us="13262" ue="13262" gi="901"/><bf us="13265" ue="13266" gi="902"/><bf us="13269" ue="13269" gi="904"/><bf us="13383" ue="13383" gi="21909"/><bf us="13427" ue="13427" gi="21908"/><bf us="13726" ue="13726" gi="21913"/><bf us="13838" ue="13838" gi="21915"/><bf us="13850" ue="13850" gi="21914"/><bf us="14616" ue="14616" gi="21919"/><bf us="14702" ue="14702" gi="21918"/><bf us="14799" ue="14799" gi="21921"/><bf us="14800" ue="14800" gi="21924"/><bf us="14815" ue="14815" gi="21922"/><bf us="14963" ue="14963" gi="21923"/><bf us="15182" ue="15182" gi="21927"/><bf us="15470" ue="15470" gi="21928"/><bf us="15584" ue="15584" gi="21929"/><bf us="16470" ue="16470" gi="21934"/><bf us="16735" ue="16735" gi="21935"/><bf us="17207" ue="17207" gi="21937"/><bf us="17324" ue="17324" gi="21943"/><bf us="17329" ue="17329" gi="21942"/><bf us="17373" ue="17373" gi="21945"/><bf us="1762!
 2" ue="17622" gi="21946"/><bf us="17996" ue="17996" gi="21948"/><bf us="18017" ue="18017" gi="21947"/><bf us="18211" ue="18211" gi="21950"/><bf us="18217" ue="18217" gi="21951"/><bf us="18300" ue="18300" gi="21952"/><bf us="18317" ue="18317" gi="21953"/><bf us="18759" ue="18759" gi="21955"/><bf us="18810" ue="18810" gi="21956"/><bf us="18813" ue="18813" gi="21957"/><bf us="18818" ue="18819" gi="21958"/><bf us="18821" ue="18822" gi="21960"/><bf us="18843" ue="18843" gi="21963"/><bf us="18847" ue="18847" gi="21962"/><bf us="18870" ue="18870" gi="21965"/><bf us="18871" ue="18871" gi="21964"/><bf us="19575" ue="19575" gi="21972"/><bf us="19615" ue="19615" gi="21969"/><bf us="19617" ue="19617" gi="21971"/><bf us="19618" ue="19618" gi="21973"/><bf us="19619" ue="19619" gi="21968"/><bf us="19629" ue="19629" gi="21970"/><bf us="19731" ue="19737" gi="21974"/><bf us="19886" ue="19886" gi="21981"/><bf us="19968" ue="40869" gi="980"/><bf us="59335" ue="59336" gi="686"/><bf us="59367" u!
 e="59379" gi="688"/><bf us="59413" ue="59492" gi="21903"/><bf us="6378
8" ue="63788" gi="21882"/><bf us="63865" ue="63865" gi="21883"/><bf us="63893" ue="63893" gi="21884"/><bf us="63975" ue="63975" gi="21885"/><bf us="63985" ue="63985" gi="21886"/><bf us="64012" ue="64015" gi="21887"/><bf us="64017" ue="64017" gi="21891"/><bf us="64019" ue="64020" gi="21892"/><bf us="64024" ue="64024" gi="21894"/><bf us="64031" ue="64033" gi="21895"/><bf us="64035" ue="64036" gi="21898"/><bf us="64039" ue="64041" gi="21900"/><bf us="65072" ue="65073" gi="905"/><bf us="65075" ue="65092" gi="907"/><bf us="65097" ue="65106" gi="925"/><bf us="65108" ue="65111" gi="935"/><bf us="65113" ue="65126" gi="939"/><bf us="65128" ue="65131" gi="953"/><bf us="65281" ue="65374" gi="701"/><bf us="65504" ue="65505" gi="795"/><bf us="65506" ue="65506" gi="967"/><bf us="65507" ue="65507" gi="797"/><bf us="65508" ue="65508" gi="968"/><bf us="65509" ue="65509" gi="798"/><bf us="65535" ue="65535" gi="0"/></bfranges><cid-widths start-index="0"><wx w="1000"/><wx w="0"/><wx w="500"/><w!
 x w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><w!
 x w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="
500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="1000"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"
/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><
wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx 
w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="
1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="500"/><wx w="500"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"
/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><
wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx 
w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="
1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100
0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/
><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w
x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w
="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1
000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000
"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>
<wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=
"1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10
00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"
/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><
wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx 
w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="
1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100
0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/
><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w
x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w
="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1
000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000
"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>
<wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=
"1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10
00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"
/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><
wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx 
w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="
1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100
0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/
><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w
x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w
="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1
000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000
"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>
<wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=
"1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10
00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"
/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><
wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx 
w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="
1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100
0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/
><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w
x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w
="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1
000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000
"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>
<wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=
"1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10
00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"
/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><
wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx 
w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="
1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100
0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/
><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w
x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w
="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1
000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000
"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>
<wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=
"1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10
00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"
/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><
wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx 
w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="
1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100
0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/
><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w
x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w
="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1
000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000
"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>
<wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=
"1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10
00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"
/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><
wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx 
w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="
1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100
0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/
><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w
x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w
="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1
000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000
"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>
<wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=
"1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10
00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"
/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><
wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx 
w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="
1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100
0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/
><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w
x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w
="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1
000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000
"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>
<wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=
"1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10
00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"
/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><
wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx 
w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="
1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100
0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/
><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w
x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w
="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1
000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000
"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>
<wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=
"1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10
00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"
/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><
wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx 
w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="
1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100
0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/
><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w
x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w
="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1!
 000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1
000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000!
 "/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000
"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>!
 <wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/>
<wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx!
  w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=!
 "1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w=
"1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10!
 00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="10
00"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"!
 /><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"
/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><!
 wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><
wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx !
 w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx 
w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="!
 1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="
1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><w!
 x w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100!
 0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="100
0"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w!
 ="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/!
 ><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/
><wx w="1000"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/!
 ><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="500"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/><wx w="1000"/></cid-widths></multibyte-extras></font-metrics>
\ No newline at end of file

Deleted: trunk/HibernateExt/annotations/doc/reference/zh_cn/fop/userconfig.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/doc/reference/zh_cn/fop/userconfig.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/doc/reference/zh_cn/fop/userconfig.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,114 +0,0 @@
-<!--<!DOCTYPE configuration SYSTEM "config.dtd">-->
-<!-- 
-     this file contains templates which allow an user easy 
-     configuration of Fop. Actually normally you don't need this configuration 
-     file, but if you need to change configuration, you should
-     always use this file and *not* config.xml. 
-     Usage: java org.apache.fop.apps.Fop -c userconfig.xml -fo fo-file -pdf pdf-file
--->
-
-
-<configuration>
-
-<!--  
-baseDir: normally the base directory is the directory where the fo file is 
-         located. if you want to specify your own, uncomment this entry.
-         This value can also be a URL. Actually, the value is converted to 
-         a URL.
--->
-<!-- 
-  <entry>
-    <key>baseDir</key>
-    <value></value>
-  </entry>
--->
-
-<!--  
-fontBaseDir: Similar to baseDir, except that this value is used for fonts. If
-         it isn't specified, the value from baseDir is used.
--->
-<!-- 
-  <entry>
-    <key>fontBaseDir</key>
-    <value></value>
-  </entry>
--->
-
-<!--
-************************************************************************
-                        HYPHENATION 
-************************************************************************
--->
-  
-<!--
-   hyphenation directory 
-   if you want to specify your own directory with hyphenation pattern
-   then uncomment the next entry and add the directory name
--->
-
-<!--
-  <entry>
-    <key>hyphenation-dir</key>
-    <value>/java/xml-fop/hyph</value>
-  </entry>
--->
-
-<!--
-************************************************************************
-  Add fonts here
-************************************************************************
--->
-
-<fonts>
- <!-- example -->
- <!--
- <font metrics-file="arial.xml" kerning="yes" embed-file="arial.ttf">
-    <font-triplet name="Arial" style="normal" weight="normal"/>
-    <font-triplet name="ArialMT" style="normal" weight="normal"/>
- </font>
- <font metrics-file="arialb.xml" kerning="yes" embed-file="arialb.ttf">
-    <font-triplet name="Arial" style="normal" weight="bold"/>
-    <font-triplet name="ArialMT" style="normal" weight="bold"/>
- </font>
- <font metrics-file="ariali.xml" kerning="yes" embed-file="ariali.ttf">
-    <font-triplet name="Arial" style="italic" weight="normal"/>
-    <font-triplet name="ArialMT" style="italic" weight="normal"/>
- </font>
- <font metrics-file="arialbi.xml" kerning="yes" embed-file="arialbi.ttf">
-    <font-triplet name="Arial" style="italic" weight="bold"/>
-    <font-triplet name="ArialMT" style="italic" weight="bold"/>
- </font>
- -->
- <!-- Example Japanese fonts
- <font metrics-file="msgothic.xml" embed-file="D:\winnt\font\msgothic.ttc" kerning="yes">
-    <font-triplet name="Gothic" style="normal" weight="normal"/>
-    <font-triplet name="Gothic" style="normal" weight="bold"/>
-    <font-triplet name="Gothic" style="italic" weight="normal"/>
-    <font-triplet name="Gothic" style="italic" weight="bold"/>
- </font>
- <font metrics-file="msmincho.xml" embed-file="Cyberbit.ttf" kerning="yes">
-    <font-triplet name="Mincho" style="normal" weight="normal"/>
-    <font-triplet name="Mincho" style="normal" weight="bold"/>
-    <font-triplet name="Mincho" style="italic" weight="normal"/>
-    <font-triplet name="Mincho" style="italic" weight="bold"/>
-   </font>
-  -->
- <font metrics-file="simhei.xml" embed-file="simhei.ttf" kerning="yes">
-	<font-triplet name="simhei" style="normal" weight="normal"/> 
-	<font-triplet name="simhei" style="normal" weight="bold"/> 
-	<font-triplet name="simhei" style="italic" weight="normal"/> 
-	<font-triplet name="simhei" style="italic" weight="bold"/> 
- </font>
- <font metrics-file="simsun.xml" embed-file="simsun.ttc" kerning="yes">
-	<font-triplet name="simsun" style="normal" weight="normal"/> 
-	<font-triplet name="simsun" style="normal" weight="bold"/> 
-	<font-triplet name="simsun" style="italic" weight="normal"/> 
-	<font-triplet name="simsun" style="italic" weight="bold"/> 
- </font>
-</fonts>
-
-
-</configuration>
-
-
-

Copied: trunk/HibernateExt/annotations/doc/reference/zh_cn/fop/userconfig.xml (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/doc/reference/zh_cn/fop/userconfig.xml)
===================================================================
--- trunk/HibernateExt/annotations/doc/reference/zh_cn/fop/userconfig.xml	                        (rev 0)
+++ trunk/HibernateExt/annotations/doc/reference/zh_cn/fop/userconfig.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,114 @@
+<!--<!DOCTYPE configuration SYSTEM "config.dtd">-->
+<!-- 
+     this file contains templates which allow an user easy 
+     configuration of Fop. Actually normally you don't need this configuration 
+     file, but if you need to change configuration, you should
+     always use this file and *not* config.xml. 
+     Usage: java org.apache.fop.apps.Fop -c userconfig.xml -fo fo-file -pdf pdf-file
+-->
+
+
+<configuration>
+
+<!--  
+baseDir: normally the base directory is the directory where the fo file is 
+         located. if you want to specify your own, uncomment this entry.
+         This value can also be a URL. Actually, the value is converted to 
+         a URL.
+-->
+<!-- 
+  <entry>
+    <key>baseDir</key>
+    <value></value>
+  </entry>
+-->
+
+<!--  
+fontBaseDir: Similar to baseDir, except that this value is used for fonts. If
+         it isn't specified, the value from baseDir is used.
+-->
+<!-- 
+  <entry>
+    <key>fontBaseDir</key>
+    <value></value>
+  </entry>
+-->
+
+<!--
+************************************************************************
+                        HYPHENATION 
+************************************************************************
+-->
+  
+<!--
+   hyphenation directory 
+   if you want to specify your own directory with hyphenation pattern
+   then uncomment the next entry and add the directory name
+-->
+
+<!--
+  <entry>
+    <key>hyphenation-dir</key>
+    <value>/java/xml-fop/hyph</value>
+  </entry>
+-->
+
+<!--
+************************************************************************
+  Add fonts here
+************************************************************************
+-->
+
+<fonts>
+ <!-- example -->
+ <!--
+ <font metrics-file="arial.xml" kerning="yes" embed-file="arial.ttf">
+    <font-triplet name="Arial" style="normal" weight="normal"/>
+    <font-triplet name="ArialMT" style="normal" weight="normal"/>
+ </font>
+ <font metrics-file="arialb.xml" kerning="yes" embed-file="arialb.ttf">
+    <font-triplet name="Arial" style="normal" weight="bold"/>
+    <font-triplet name="ArialMT" style="normal" weight="bold"/>
+ </font>
+ <font metrics-file="ariali.xml" kerning="yes" embed-file="ariali.ttf">
+    <font-triplet name="Arial" style="italic" weight="normal"/>
+    <font-triplet name="ArialMT" style="italic" weight="normal"/>
+ </font>
+ <font metrics-file="arialbi.xml" kerning="yes" embed-file="arialbi.ttf">
+    <font-triplet name="Arial" style="italic" weight="bold"/>
+    <font-triplet name="ArialMT" style="italic" weight="bold"/>
+ </font>
+ -->
+ <!-- Example Japanese fonts
+ <font metrics-file="msgothic.xml" embed-file="D:\winnt\font\msgothic.ttc" kerning="yes">
+    <font-triplet name="Gothic" style="normal" weight="normal"/>
+    <font-triplet name="Gothic" style="normal" weight="bold"/>
+    <font-triplet name="Gothic" style="italic" weight="normal"/>
+    <font-triplet name="Gothic" style="italic" weight="bold"/>
+ </font>
+ <font metrics-file="msmincho.xml" embed-file="Cyberbit.ttf" kerning="yes">
+    <font-triplet name="Mincho" style="normal" weight="normal"/>
+    <font-triplet name="Mincho" style="normal" weight="bold"/>
+    <font-triplet name="Mincho" style="italic" weight="normal"/>
+    <font-triplet name="Mincho" style="italic" weight="bold"/>
+   </font>
+  -->
+ <font metrics-file="simhei.xml" embed-file="simhei.ttf" kerning="yes">
+	<font-triplet name="simhei" style="normal" weight="normal"/> 
+	<font-triplet name="simhei" style="normal" weight="bold"/> 
+	<font-triplet name="simhei" style="italic" weight="normal"/> 
+	<font-triplet name="simhei" style="italic" weight="bold"/> 
+ </font>
+ <font metrics-file="simsun.xml" embed-file="simsun.ttc" kerning="yes">
+	<font-triplet name="simsun" style="normal" weight="normal"/> 
+	<font-triplet name="simsun" style="normal" weight="bold"/> 
+	<font-triplet name="simsun" style="italic" weight="normal"/> 
+	<font-triplet name="simsun" style="italic" weight="bold"/> 
+ </font>
+</fonts>
+
+
+</configuration>
+
+
+

Copied: trunk/HibernateExt/annotations/doc/reference/zh_cn/images (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/doc/reference/zh_cn/images)

Deleted: trunk/HibernateExt/annotations/doc/reference/zh_cn/images/hibernate_logo_a.png
===================================================================
(Binary files differ)

Copied: trunk/HibernateExt/annotations/doc/reference/zh_cn/images/hibernate_logo_a.png (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/doc/reference/zh_cn/images/hibernate_logo_a.png)
===================================================================
(Binary files differ)

Deleted: trunk/HibernateExt/annotations/doc/reference/zh_cn/master.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/doc/reference/zh_cn/master.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/doc/reference/zh_cn/master.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,294 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3CR3//EN"
-"../../../../../Hibernate3/doc/reference/support/docbook-dtd/docbookx.dtd" [
-<!ENTITY setup SYSTEM "modules/setup.xml">
-<!ENTITY entity SYSTEM "modules/entity.xml">
-<!ENTITY xml-overriding SYSTEM "modules/xml-overriding.xml">
-<!ENTITY validator SYSTEM "modules/validator.xml">
-<!ENTITY lucene SYSTEM "modules/lucene.xml">
-]>
-<book lang="zh_cn">
-  <bookinfo>
-    <title>Hibernate Annotations</title>
-
-    <subtitle>参考文档</subtitle>
-
-    <releaseinfo>3.2.0 CR1</releaseinfo>
-
-    <mediaobject>
-      <imageobject>
-        <imagedata fileref="images/hibernate_logo_a.png" format="png" />
-      </imageobject>
-    </mediaobject>
-  </bookinfo>
-
-  <toc></toc>
-
-  <preface id="preface" revision="2">
-    <title>前言</title>
-
-    <para>WARNING! This is a translated version of the English Hibernate
-    reference documentation. The translated version might not be up to date!
-    However, the differences should only be very minor. Consult the English
-    reference documentation if you are missing information or encounter a
-    translation error. If you like to contribute to a particular translation,
-    contact us on the Hibernate developer mailing list.</para>
-
-    <para>Translator(s): RedSaga Translate Team 满江红翻译团队
-    &lt;caoxg at yahoo.com&gt;</para>
-
-    <sect1 id="preface-translate-comments-zh-cn">
-      <title>翻译说明</title>
-
-      <para>本文档的翻译是在网络上协作进行的,也会不断根据Hibernate的升级进行更新。提供此文档的目的是为了减缓学习Hibernate的坡度,而非代替原文档。我们建议所有有能力的读者都直接阅读英文原文。若您对翻译有异议,或发现翻译错误,敬请不吝赐教,报告到如下地址:http://wiki.redsaga.com/confluence/display/HART/Home</para>
-
-      <table frame="topbot" id="redsaga-translate-team">
-        <title>Hibernate Annotation v3翻译团队</title>
-
-        <tgroup cols="6" colsep="1" rowsep="1">
-          <colspec colname="c1" colwidth="1*" />
-
-          <colspec colname="c2" colwidth="2*" />
-
-          <colspec colname="c3" colwidth="2*" />
-
-          <colspec colname="c4" colwidth="2*" />
-
-          <colspec colname="c5" colwidth="2*" />
-
-          <thead>
-            <row>
-              <entry align="center">序号</entry>
-
-              <entry align="center">标题</entry>
-
-              <entry align="center">中文标题</entry>
-
-              <entry align="center">翻译</entry>
-
-              <entry align="center">1审</entry>
-
-              <entry align="center"> 2审</entry>
-            </row>
-          </thead>
-
-          <tbody>
-            <row>
-              <entry>--</entry>
-
-              <entry>Contents</entry>
-
-              <entry>目录</entry>
-
-              <entry>Liu Chang</entry>
-
-              <entry></entry>
-
-              <entry></entry>
-            </row>
-
-            <row>
-              <entry>#1</entry>
-
-              <entry>Setting up an annotations projec</entry>
-
-              <entry>创建一个注解项目</entry>
-
-              <entry>melthaw</entry>
-
-              <entry>Zheng Shuai</entry>
-
-              <entry>superq</entry>
-            </row>
-
-            <row>
-              <entry>#2</entry>
-
-              <entry>Entity Beans-Introduction</entry>
-
-              <entry>实体Bean-简介</entry>
-
-              <entry>melthaw</entry>
-
-              <entry>Zheng Shuai</entry>
-
-              <entry>superq</entry>
-            </row>
-
-            <row>
-              <entry>#3</entry>
-
-              <entry>Entity Beans-Mapping with EJB3 Annotations</entry>
-
-              <entry>实体Bean-用EJB3注解进行映射</entry>
-
-              <entry>melthaw</entry>
-
-              <entry>Zheng Shuai</entry>
-
-              <entry>superq, Liu Chang, Sean Chan</entry>
-            </row>
-
-            <row>
-              <entry>#4</entry>
-
-              <entry>Entity Beans-Mapping Queries</entry>
-
-              <entry>实体Bean-映射查询</entry>
-
-              <entry>melthaw</entry>
-
-              <entry>Zheng Shuai</entry>
-
-              <entry>superq, Liu Chang, Sean Chan</entry>
-            </row>
-
-            <row>
-              <entry>#5</entry>
-
-              <entry>Entity Beans-Hibernate Annotation Extensions</entry>
-
-              <entry>实体Bean-Hibernate独有的注解扩展</entry>
-
-              <entry>Sean Chan</entry>
-
-              <entry>morning</entry>
-
-              <entry>melthaw</entry>
-            </row>
-
-            <row>
-              <entry>#6</entry>
-
-              <entry>Overriding metadata through XML</entry>
-
-              <entry>通过XML覆写元数据</entry>
-
-              <entry>icess</entry>
-
-              <entry>melthaw</entry>
-
-              <entry>Sean Chan</entry>
-            </row>
-
-            <row>
-              <entry>#7</entry>
-
-              <entry>Hibernate Validator</entry>
-
-              <entry>Hibernate验证器</entry>
-
-              <entry>DigitalSonic</entry>
-
-              <entry>morning</entry>
-
-              <entry>melthaw</entry>
-            </row>
-
-            <row>
-              <entry>#8</entry>
-
-              <entry>Hibernate Lucene Integration</entry>
-
-              <entry>Hibernate与Lucene集成</entry>
-
-              <entry>mochow</entry>
-
-              <entry>morning</entry>
-
-              <entry>melthaw</entry>
-            </row>
-
-            <row>
-              <entry>#9</entry>
-
-              <entry>Appendix:Glossary</entry>
-
-              <entry>附录:术语表</entry>
-
-              <entry>mochow</entry>
-
-              <entry>Liu Chang</entry>
-
-              <entry>曹晓钢</entry>
-            </row>
-          </tbody>
-        </tgroup>
-      </table>
-
-      <para>关于我们</para>
-
-      <variablelist spacing="compact">
-        <varlistentry>
-          <term>满江红.开源, http://www.redsaga.com</term>
-
-          <listitem>
-            <para>从成立之初就致力于Java开放源代码在中国的传播与发展,与国内多个Java团体及出版社有深入交流。坚持少说多做的原则,目前有两个团队,“OpenDoc团队”与“翻译团队”,本翻译文档即为翻译团队作品。OpenDoc团队已经推出包括Hibernate、iBatis、Spring、WebWork的多份开放文档,并于2005年5月在Hibernate开放文档基础上扩充成书,出版了原创书籍:《深入浅出Hibernate》,本书400余页,适合各个层次的Hibernate用户。(http://www.redsaga.com/hibernate_book.html)敬请支持。</para>
-          </listitem>
-        </varlistentry>
-
-        <varlistentry>
-          <term>致谢</term>
-
-          <listitem>
-            <para>在我们翻译Hibernate
-            Annotation参考文档的同时,还有一位热心的朋友也在进行着同样的工作,这位朋友就是icess(冰雨),由icess翻译的中文版的地址:
-            http://icess.my.china.com/hibernate/a/ref/index.htm</para>
-          </listitem>
-        </varlistentry>
-      </variablelist>
-    </sect1>
-
-    <sect1 id="preface-translate-licence-zh-cn">
-      <title>版权声明</title>
-
-      <para>Hibernate英文文档属于Hibernate发行包的一部分,遵循LGPL协议。本翻译版本同样遵循LGPL协议。参与翻译的译者一致同意放弃除署名权外对本翻译版本的其它权利要求。</para>
-
-      <para>您可以自由链接、下载、传播此文档,或者放置在您的网站上,甚至作为产品的一部分发行。但前提是必须保证全文完整转载,包括完整的版权信息和作译者声明,并不能违反LGPL协议。这里“完整”的含义是,不能进行任何删除/增添/注解。若有删除/增添/注解,必须逐段明确声明那些部分并非本文档的一部分。</para>
-    </sect1>
-  </preface>
-
-  <preface>
-    <title>前言</title>
-
-    <para>正如其他的ORM工具,Hibernate同样需要元数据来控制在不同数据表达形式之间的转化. 在Hibernate
-    2.x里,多数情况下表示映射关系的元数据保存在XML文本文件中.
-    还有一种方式就是Xdoclet,它可以在编译时利用Javadoc中的源码注释信息来进行预处理.
-    现在新的JDK标准(JDK1.5以上)也支持类似的注解功能,但相比之下很多工具对此提供了更强大更好用的支持. 以IntelliJ
-    IDEA和Eclipse为例,这些IDE工具为JDK 5.0注解功能提供了自动完成和语法高亮功能. 注解被直接编译到字节码里,并
-    在运行时(对于Hibernate来讲就是启动的时候)通过反射读取这些注解, 因此外部XML文件就不再需要了.</para>
-
-    <para>EJB3规范最终认可了透明化ORM的成功范例以及市场对于这种技术的兴趣.
-    EJB3规范标准化了ORM的基础API而且在任何ORM持久化机制中使用元数据. <emphasis>Hibernate
-    EntityManager</emphasis>实现了EJB3持久化规范中定义的编程接口和生命周期规则. 在<emphasis>Hibernate
-    Core</emphasis>的基础上再结合 <emphasis>Hibernate
-    Annotations</emphasis>就实现了一套完整(并且独立)的EJB3持久化解决方案.
-    你可以结合三者来使用,也可以抛开EJB3编程接口和生命周期规则而独立使用注解, 甚至只单独使用<emphasis>Hibernate
-    Core</emphasis>. 这些都取决于项目的商业和技术上的实际需求. Hibernate允许你直接使用native APIs,如果有需要,
-    甚至可以直接操作JDBC和SQL.</para>
-
-    <para>注意本文档基于Hibernate Annotations的预览版(遵从EJB 3.0/JSR-220最终草案).
-    这个版本和新规范中定义的最终概念已经非常接近了.我们的目标是提供一套完整的ORM注解,
-    包括EJB3的标准注解以及Hibernate3的扩展(后者是EJB3规范中没有涉及到的). 最终通过注解你可以完成任何可能的映射.详情参考<xref
-    linkend="compliance" />.</para>
-
-    <para>EJB3最终草案修改了部分注解,
-    http://www.hibernate.org/371.html提供了从上一个版本到最新版本的迁移指南.</para>
-  </preface>
-
-  &setup;
-
-  &entity;
-
-  &xml-overriding;
-
-  &validator;
-
-  &lucene;
-
-  <appendix>
-    <title id="glossary">术语表</title>
-
-    <para>Redsaga的wiki上维护了本文翻译过程中所参照的中英文对照的术语表,地址:http://wiki.redsaga.com/confluence/display/HART/glossary.</para>
-  </appendix>
-</book>
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/doc/reference/zh_cn/master.xml (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/doc/reference/zh_cn/master.xml)
===================================================================
--- trunk/HibernateExt/annotations/doc/reference/zh_cn/master.xml	                        (rev 0)
+++ trunk/HibernateExt/annotations/doc/reference/zh_cn/master.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,294 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3CR3//EN"
+"../../../../../Hibernate3/doc/reference/support/docbook-dtd/docbookx.dtd" [
+<!ENTITY setup SYSTEM "modules/setup.xml">
+<!ENTITY entity SYSTEM "modules/entity.xml">
+<!ENTITY xml-overriding SYSTEM "modules/xml-overriding.xml">
+<!ENTITY validator SYSTEM "modules/validator.xml">
+<!ENTITY lucene SYSTEM "modules/lucene.xml">
+]>
+<book lang="zh_cn">
+  <bookinfo>
+    <title>Hibernate Annotations</title>
+
+    <subtitle>参考文档</subtitle>
+
+    <releaseinfo>3.2.0 CR1</releaseinfo>
+
+    <mediaobject>
+      <imageobject>
+        <imagedata fileref="images/hibernate_logo_a.png" format="png" />
+      </imageobject>
+    </mediaobject>
+  </bookinfo>
+
+  <toc></toc>
+
+  <preface id="preface" revision="2">
+    <title>前言</title>
+
+    <para>WARNING! This is a translated version of the English Hibernate
+    reference documentation. The translated version might not be up to date!
+    However, the differences should only be very minor. Consult the English
+    reference documentation if you are missing information or encounter a
+    translation error. If you like to contribute to a particular translation,
+    contact us on the Hibernate developer mailing list.</para>
+
+    <para>Translator(s): RedSaga Translate Team 满江红翻译团队
+    &lt;caoxg at yahoo.com&gt;</para>
+
+    <sect1 id="preface-translate-comments-zh-cn">
+      <title>翻译说明</title>
+
+      <para>本文档的翻译是在网络上协作进行的,也会不断根据Hibernate的升级进行更新。提供此文档的目的是为了减缓学习Hibernate的坡度,而非代替原文档。我们建议所有有能力的读者都直接阅读英文原文。若您对翻译有异议,或发现翻译错误,敬请不吝赐教,报告到如下地址:http://wiki.redsaga.com/confluence/display/HART/Home</para>
+
+      <table frame="topbot" id="redsaga-translate-team">
+        <title>Hibernate Annotation v3翻译团队</title>
+
+        <tgroup cols="6" colsep="1" rowsep="1">
+          <colspec colname="c1" colwidth="1*" />
+
+          <colspec colname="c2" colwidth="2*" />
+
+          <colspec colname="c3" colwidth="2*" />
+
+          <colspec colname="c4" colwidth="2*" />
+
+          <colspec colname="c5" colwidth="2*" />
+
+          <thead>
+            <row>
+              <entry align="center">序号</entry>
+
+              <entry align="center">标题</entry>
+
+              <entry align="center">中文标题</entry>
+
+              <entry align="center">翻译</entry>
+
+              <entry align="center">1审</entry>
+
+              <entry align="center"> 2审</entry>
+            </row>
+          </thead>
+
+          <tbody>
+            <row>
+              <entry>--</entry>
+
+              <entry>Contents</entry>
+
+              <entry>目录</entry>
+
+              <entry>Liu Chang</entry>
+
+              <entry></entry>
+
+              <entry></entry>
+            </row>
+
+            <row>
+              <entry>#1</entry>
+
+              <entry>Setting up an annotations projec</entry>
+
+              <entry>创建一个注解项目</entry>
+
+              <entry>melthaw</entry>
+
+              <entry>Zheng Shuai</entry>
+
+              <entry>superq</entry>
+            </row>
+
+            <row>
+              <entry>#2</entry>
+
+              <entry>Entity Beans-Introduction</entry>
+
+              <entry>实体Bean-简介</entry>
+
+              <entry>melthaw</entry>
+
+              <entry>Zheng Shuai</entry>
+
+              <entry>superq</entry>
+            </row>
+
+            <row>
+              <entry>#3</entry>
+
+              <entry>Entity Beans-Mapping with EJB3 Annotations</entry>
+
+              <entry>实体Bean-用EJB3注解进行映射</entry>
+
+              <entry>melthaw</entry>
+
+              <entry>Zheng Shuai</entry>
+
+              <entry>superq, Liu Chang, Sean Chan</entry>
+            </row>
+
+            <row>
+              <entry>#4</entry>
+
+              <entry>Entity Beans-Mapping Queries</entry>
+
+              <entry>实体Bean-映射查询</entry>
+
+              <entry>melthaw</entry>
+
+              <entry>Zheng Shuai</entry>
+
+              <entry>superq, Liu Chang, Sean Chan</entry>
+            </row>
+
+            <row>
+              <entry>#5</entry>
+
+              <entry>Entity Beans-Hibernate Annotation Extensions</entry>
+
+              <entry>实体Bean-Hibernate独有的注解扩展</entry>
+
+              <entry>Sean Chan</entry>
+
+              <entry>morning</entry>
+
+              <entry>melthaw</entry>
+            </row>
+
+            <row>
+              <entry>#6</entry>
+
+              <entry>Overriding metadata through XML</entry>
+
+              <entry>通过XML覆写元数据</entry>
+
+              <entry>icess</entry>
+
+              <entry>melthaw</entry>
+
+              <entry>Sean Chan</entry>
+            </row>
+
+            <row>
+              <entry>#7</entry>
+
+              <entry>Hibernate Validator</entry>
+
+              <entry>Hibernate验证器</entry>
+
+              <entry>DigitalSonic</entry>
+
+              <entry>morning</entry>
+
+              <entry>melthaw</entry>
+            </row>
+
+            <row>
+              <entry>#8</entry>
+
+              <entry>Hibernate Lucene Integration</entry>
+
+              <entry>Hibernate与Lucene集成</entry>
+
+              <entry>mochow</entry>
+
+              <entry>morning</entry>
+
+              <entry>melthaw</entry>
+            </row>
+
+            <row>
+              <entry>#9</entry>
+
+              <entry>Appendix:Glossary</entry>
+
+              <entry>附录:术语表</entry>
+
+              <entry>mochow</entry>
+
+              <entry>Liu Chang</entry>
+
+              <entry>曹晓钢</entry>
+            </row>
+          </tbody>
+        </tgroup>
+      </table>
+
+      <para>关于我们</para>
+
+      <variablelist spacing="compact">
+        <varlistentry>
+          <term>满江红.开源, http://www.redsaga.com</term>
+
+          <listitem>
+            <para>从成立之初就致力于Java开放源代码在中国的传播与发展,与国内多个Java团体及出版社有深入交流。坚持少说多做的原则,目前有两个团队,“OpenDoc团队”与“翻译团队”,本翻译文档即为翻译团队作品。OpenDoc团队已经推出包括Hibernate、iBatis、Spring、WebWork的多份开放文档,并于2005年5月在Hibernate开放文档基础上扩充成书,出版了原创书籍:《深入浅出Hibernate》,本书400余页,适合各个层次的Hibernate用户。(http://www.redsaga.com/hibernate_book.html)敬请支持。</para>
+          </listitem>
+        </varlistentry>
+
+        <varlistentry>
+          <term>致谢</term>
+
+          <listitem>
+            <para>在我们翻译Hibernate
+            Annotation参考文档的同时,还有一位热心的朋友也在进行着同样的工作,这位朋友就是icess(冰雨),由icess翻译的中文版的地址:
+            http://icess.my.china.com/hibernate/a/ref/index.htm</para>
+          </listitem>
+        </varlistentry>
+      </variablelist>
+    </sect1>
+
+    <sect1 id="preface-translate-licence-zh-cn">
+      <title>版权声明</title>
+
+      <para>Hibernate英文文档属于Hibernate发行包的一部分,遵循LGPL协议。本翻译版本同样遵循LGPL协议。参与翻译的译者一致同意放弃除署名权外对本翻译版本的其它权利要求。</para>
+
+      <para>您可以自由链接、下载、传播此文档,或者放置在您的网站上,甚至作为产品的一部分发行。但前提是必须保证全文完整转载,包括完整的版权信息和作译者声明,并不能违反LGPL协议。这里“完整”的含义是,不能进行任何删除/增添/注解。若有删除/增添/注解,必须逐段明确声明那些部分并非本文档的一部分。</para>
+    </sect1>
+  </preface>
+
+  <preface>
+    <title>前言</title>
+
+    <para>正如其他的ORM工具,Hibernate同样需要元数据来控制在不同数据表达形式之间的转化. 在Hibernate
+    2.x里,多数情况下表示映射关系的元数据保存在XML文本文件中.
+    还有一种方式就是Xdoclet,它可以在编译时利用Javadoc中的源码注释信息来进行预处理.
+    现在新的JDK标准(JDK1.5以上)也支持类似的注解功能,但相比之下很多工具对此提供了更强大更好用的支持. 以IntelliJ
+    IDEA和Eclipse为例,这些IDE工具为JDK 5.0注解功能提供了自动完成和语法高亮功能. 注解被直接编译到字节码里,并
+    在运行时(对于Hibernate来讲就是启动的时候)通过反射读取这些注解, 因此外部XML文件就不再需要了.</para>
+
+    <para>EJB3规范最终认可了透明化ORM的成功范例以及市场对于这种技术的兴趣.
+    EJB3规范标准化了ORM的基础API而且在任何ORM持久化机制中使用元数据. <emphasis>Hibernate
+    EntityManager</emphasis>实现了EJB3持久化规范中定义的编程接口和生命周期规则. 在<emphasis>Hibernate
+    Core</emphasis>的基础上再结合 <emphasis>Hibernate
+    Annotations</emphasis>就实现了一套完整(并且独立)的EJB3持久化解决方案.
+    你可以结合三者来使用,也可以抛开EJB3编程接口和生命周期规则而独立使用注解, 甚至只单独使用<emphasis>Hibernate
+    Core</emphasis>. 这些都取决于项目的商业和技术上的实际需求. Hibernate允许你直接使用native APIs,如果有需要,
+    甚至可以直接操作JDBC和SQL.</para>
+
+    <para>注意本文档基于Hibernate Annotations的预览版(遵从EJB 3.0/JSR-220最终草案).
+    这个版本和新规范中定义的最终概念已经非常接近了.我们的目标是提供一套完整的ORM注解,
+    包括EJB3的标准注解以及Hibernate3的扩展(后者是EJB3规范中没有涉及到的). 最终通过注解你可以完成任何可能的映射.详情参考<xref
+    linkend="compliance" />.</para>
+
+    <para>EJB3最终草案修改了部分注解,
+    http://www.hibernate.org/371.html提供了从上一个版本到最新版本的迁移指南.</para>
+  </preface>
+
+  &setup;
+
+  &entity;
+
+  &xml-overriding;
+
+  &validator;
+
+  &lucene;
+
+  <appendix>
+    <title id="glossary">术语表</title>
+
+    <para>Redsaga的wiki上维护了本文翻译过程中所参照的中英文对照的术语表,地址:http://wiki.redsaga.com/confluence/display/HART/glossary.</para>
+  </appendix>
+</book>
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/doc/reference/zh_cn/modules (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/doc/reference/zh_cn/modules)

Deleted: trunk/HibernateExt/annotations/doc/reference/zh_cn/modules/entity.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/doc/reference/zh_cn/modules/entity.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/doc/reference/zh_cn/modules/entity.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,2857 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<chapter id="entity">
-  <title>实体Bean</title>
-
-  <sect1 id="entity-overview" revision="1">
-    <title>简介</title>
-
-    <para>本章内容覆盖了EJB3.0实体bean的注解规范以及Hibernate特有的扩展.</para>
-  </sect1>
-
-  <sect1 id="mapping" revision="1">
-    <title>用EJB3注解进行映射</title>
-
-    <para>现在EJB3实体Bean是纯粹的POJO.实际上这表达了和Hibernate持久化实体对象同样的概念.
-	它们的映射都通过JDK5.0注解来定义(EJB3规范中的XML描述语法至今还没有最终定下来).
-	注解分为两个部分,分别是逻辑映射注解和物理映射注解,
-	通过逻辑映射注解可以描述对象模型,类之间的关系等等,
-	而物理映射注解则描述了物理的schema,表,列,索引等等.
-	下面我们在代码中将混合使用这两种类型的注解.</para>
-
-    <para>EJB3注解的API定义在<literal>javax.persistence.*</literal>包里面.
-	大部分和JDK5兼容的IDE(象Eclipse, IntelliJ IDEA 和Netbeans等等)都提供了注解接口和属性的自动完成功能.
-	(这些不需要IDE提供特别的EJB3支持模块,因为EJB3注解是标准的JDK5注解)</para>
-
-    <para>请阅读JBoss EJB 3.0指南或者直接阅读Hibernate Annotations测试代码以获取更多的可运行实例.Hibernate Annotations提供的大部分单元测试代码都演示了实际的例子,是一个获取灵感的好地方.</para>
-
-    <sect2>
-      <title>声明实体bean</title>
-
-      <para>每一个持久化POJO类都是一个实体bean,这可以通过在类的定义中使用<literal>@Entity</literal>注解来进行声明:</para>
-
-      <programlisting>
- at Entity
-public class Flight implements Serializable {
-    Long id;
-
-    @Id
-    public Long getId() { return id; }
-
-    public void setId(Long id) { this.id = id; }
-}
-         </programlisting>
-
-      <para>通过<literal>@Entity</literal>注解将一个类声明为一个实体bean(即一个持久化POJO类),
-	  <literal>@Id</literal>注解则声明了该实体bean的标识属性.
-	  其他的映射定义是隐式的.这种以隐式映射为主体,以显式映射为例外的配置方式在新的EJ3规范中处于非常重要的位置,
-	  和以前的版本相比有了质的飞跃.
-	  在上面这段代码中:Flight类映射到Flight表,并使用id列作为主键列.
-	  </para>
-
-      <para>在对一个类进行注解时,你可以选择对它的的属性或者方法进行注解,根据你的选择,Hibernate的访问类型分别为
-	  <literal>field</literal>或<literal>property</literal>.
-	  EJ3规范要求在需要访问的元素上进行注解声明,例如,如果访问类型为
-	  <literal>property</literal>就要在getter方法上进行注解声明,
-	  如果访问类型为 <literal>field</literal>就要在字段上进行注解声明.应该尽量避免混合使用这两种访问类型.
-	  Hibernate根据<literal>@Id</literal> 或 <literal>@EmbeddedId</literal>的位置来判断访问类型.</para>
-
-      <sect3>
-        <title>定义表(Table)</title>
-
-        <para><literal>@Table</literal>是类一级的注解,
-		通过<literal>@Table</literal>注解可以为实体bean映射指定表(table),目录(catalog)和schema的名字.
-		如果没有定义<literal>@Table</literal>,那么系统自动使用默认值:实体的短类名(不附带包名).</para>
-
-        <programlisting>
- at Entity
- at Table(name="tbl_sky")
-public class Sky implements Serializable {
-...
-            </programlisting>
-
-        <para><literal>@Table</literal>元素包括了一个<literal>schema</literal>
-		和一个 <literal>catalog</literal>属性,如果需要可以指定相应的值.
-		结合使用<literal>@UniqueConstraint</literal>注解可以定义表的唯一约束(unique constraint)
-		(对于绑定到单列的唯一约束,请参考<literal>@Column</literal>注解)
-		</para>
-
-        <programlisting>@Table(name="tbl_sky",
-		    <emphasis role="bold">uniqueConstraints = {@UniqueConstraint(columnNames={"month", "day"})}</emphasis>
-		)</programlisting>
-
-        <para>上面这个例子中,在month和day这两个字段上定义唯一约束.
-		注意<literal>columnNames</literal>数组中的值指的是逻辑列名.</para>
-
-        <remark>Hibernate在NamingStrategy的实现中定义了逻辑列名.
-		默认的EJB3命名策略将物理字段名当作逻辑字段名来使用.
-		注意该字段名和它对应的属性名可能不同(如果字段名是显式指定的话).
-		除非你重写了NamingStrategy,否则不用担心这些区别..</remark>
-      </sect3>
-
-      <sect3>
-        <title>乐观锁定版本控制</title>
-
-        <para>你可以在实体bean中使用<literal>@Version</literal>注解,通过这种方式可添加对乐观锁定的支持:</para>
-
-        <programlisting>
- at Entity
-public class Flight implements Serializable {
-...
-    @Version
-    @Column(name="OPTLOCK")
-    public Integer getVersion() { ... }
-}           </programlisting>
-
-        <para>上面这个例子中,version属性将映射到 <literal>OPTLOCK</literal>列,
-		entity manager使用该字段来检测更新冲突(防止更新丢失,请参考last-commit-wins策略).</para>
-
-        <para>根据EJB3规范,version列可以是numeric类型(推荐方式)也可以是timestamp类型.
-		Hibernate支持任何自定义类型,只要该类型实现了<classname>UserVersionType</classname>.</para>
-      </sect3>
-    </sect2>
-
-    <sect2>
-      <title>映射简单属性</title>
-
-      <sect3>
-        <title>声明基本的属性映射</title>
-
-        <para>Every non static non transient property (field or method) of an
-        entity bean is considered persistent, unless you annotate it as
-        <literal>@Transient</literal>. Not having an annotation for your
-        property is equivalent to the appropriate <literal>@Basic</literal>
-        annotation. The <literal>@Basic</literal> annotation allows you to
-        declare the fetching strategy for a property:</para>
-
-        <para>实体bean中所有的非static非transient的属性都可以被持久化,
-		除非你将其注解为<literal>@Transient</literal>.所有没有定义注解的属性等价于在其上面添加了@Basic注解.
-		通过 <literal>@Basic</literal>注解可以声明属性的获取策略(fetch strategy):</para>
-
-        <programlisting>public transient int counter; //transient property
-
-private String firstname; //persistent property
-
- at Transient
-String getLengthInMeter() { ... } //transient property
-
-String getName() {... } // persistent property
-
- at Basic
-int getLength() { ... } // persistent property
-
- at Basic(fetch = FetchType.LAZY)
-String getDetailedComment() { ... } // persistent property
-
- at Temporal(TemporalType.TIME)
-java.util.Date getDepartureTime() { ... } // persistent property           
-
- at Enumerated(STRING)
-Starred getNote() { ... } //enum persisted as String in database</programlisting>
-
-        <para>上面这个例子中,<literal>counter</literal>是一个transient的字段,
-		<literal>lengthInMeter</literal>的getter方法被注解为<literal>@Transient</literal>, 
-		entity manager将忽略这些字段和属性.
-		而<literal>name</literal>,<literal>length</literal>,<literal>firstname</literal>
-		这几个属性则是被定义为可持久化和可获取的.对于简单属性来说,默认的获取方式是即时获取(early fetch).
-		当一个实体Bean的实例被创建时,Hibernate会将这些属性的值从数据库中提取出来,保存到Bean的属性里.
-		与即时获取相对应的是延迟获取(lazy fetch).如果一个属性的获取方式是延迟获取
-		(比如上面例子中的<literal>detailedComment</literal>属性),
-		Hibernate在创建一个实体Bean的实例时,不会即时将这个属性的值从数据库中读出.
-		只有在该实体Bean的这个属性第一次被调用时,Hibernate才会去获取对应的值.
-		通常你不需要对简单属性设置延迟获取(lazy simple property),千万不要和延迟关联获取(lazy association fetch)混淆了
-		(译注:这里指不要把lazy simple property和lazy association fetch混淆了).
-		</para>
-
-        <note>
-          <para>为了启用属性级的延迟获取,你的类必须经过特殊处理(instrumented):
-		  字节码将被织入原始类中来实现延迟获取功能,
-		  详情参考Hibernate参考文档.如果不对类文件进行字节码特殊处理,
-		  那么属性级的延迟获取将被忽略.</para>
-        </note>
-
-        <para>推荐的替代方案是使用EJB-QL或者Criteria查询的投影(projection)功能.</para>
-
-        <para>Hibernate和EJB3都支持所有基本类型的属性映射.
-		这些基本类型包括所有的Java基本类型,及其各自的wrapper类和serializable类.
-		Hibernate Annotations还支持将内置的枚举类型映射到一个顺序列(保存了相应的序列值)
-		或一个字符串类型的列(保存相应的字符串).默认是保存枚举的序列值,
-		但是你可以通过<literal>@Enumerated</literal>注解来进行调整(见上面例子中的note属性).</para>
-
-        <para>在核心的Java API中并没有定义时间精度(temporal precision).
-		因此处理时间类型数据时,你还需要定义将其存储在数据库中所预期的精度.
-		在数据库中,表示时间类型的数据有<literal>DATE</literal>, <literal>TIME</literal>, 
-		和 <literal>TIMESTAMP</literal>三种精度(即单纯的日期,时间,或者两者兼备).
-		可使用<literal>@Temporal</literal>注解来调整精度.</para>
-
-        <para><literal>@Lob</literal>注解表示属性将被持久化为Blob或者Clob类型,
-		具体取决于属性的类型,
-		<classname>java.sql.Clob</classname>, 
-		<classname>Character[]</classname>,
-		<classname>char[]</classname> 和 
-		<classname>java.lang.String</classname>这些类型的属性都被持久化为Clob类型,
-		而<classname>java.sql.Blob</classname>, 
-		<classname>Byte[]</classname>, 
-		<classname>byte[]</classname> 和
-		serializable类型则被持久化为Blob类型.</para>
-
-        <programlisting>
- at Lob
-public String getFullText() {
-    return fullText;
-}
-
- at Lob 
-public byte[] getFullCode() {
-    return fullCode;
-}
- </programlisting>
-
-        <para>如果某个属性实现了<classname>java.io.Serializable</classname>同时也不是基本类型,
-		并且没有在该属性上使用<literal>@Lob</literal>注解,
-		那么Hibernate将使用自带的<literal>serializable</literal>类型.
-		</para>
-      </sect3>
-
-      <sect3>
-        <title>声明列属性</title>
-
-        <para>使用 <literal>@Column </literal>注解可将属性映射到列.
-		使用该注解来覆盖默认值(关于默认值请参考EJB3规范).
-		在属性级使用该注解的方式如下:</para>
-
-        <itemizedlist>
-          <listitem>
-            <para>不进行注解</para>
-          </listitem>
-
-          <listitem>
-            <para>和 <literal>@Basic</literal>一起使用</para>
-          </listitem>
-
-          <listitem>
-            <para>和 <literal>@Version</literal>一起使用</para>
-          </listitem>
-
-          <listitem>
-            <para>和 <literal>@Lob</literal>一起使用</para>
-          </listitem>
-
-          <listitem>
-            <para>和 <literal>@Temporal</literal>一起使用</para>
-          </listitem>
-
-          <listitem>
-            <para>和
-            <literal>@org.hibernate.annotations.CollectionOfElements</literal>一起使用
-            (只针对Hibernate )</para>
-          </listitem>
-        </itemizedlist>
-
-
-        <programlisting>
- at Entity
-public class Flight implements Serializable {
-...
- at Column(updatable = false, name = "flight_name", nullable = false, length=50)
-public String getName() { ... }
-            </programlisting>
-
-        <para>在上面这个例子中,<literal>name</literal>属性映射到<literal>flight_name</literal>列.
-		该字段不允许为空,长度为50,并且是不可更新的(也就是属性值是不变的).</para>
-
-        <para>上面这些注解可以被应用到正规属性上例如<literal>@Id</literal> 或<literal>@Version</literal>属性.</para>
-
-        <programlistingco>
-          <areaspec>
-            <area coords="2 55" id="hm1" />
-
-            <area coords="3 55" id="hm2" />
-
-            <area coords="4 55" id="hm3" />
-
-            <area coords="5 55" id="hm4" />
-
-            <area coords="6 55" id="hm5" />
-
-            <area coords="7 55" id="hm6" />
-
-            <area coords="8 55" id="hm7" />
-
-            <area coords="9 55" id="hm8" />
-
-            <area coords="10 55" id="hm9" />
-
-            <area coords="11 55" id="hm10" />
-          </areaspec>
-
-          <programlisting>@Column(
-    name="columnName";
-    boolean unique() default false;
-    boolean nullable() default true;
-    boolean insertable() default true;
-    boolean updatable() default true;
-    String columnDefinition() default "";
-    String table() default "";
-    int length() default 255;
-    int precision() default 0; // decimal precision
-    int scale() default 0; // decimal scale</programlisting>
-
-          <calloutlist>
-            <callout arearefs="hm1">
-              <para><literal>name</literal> 可选,列名(默认值是属性名)</para>
-            </callout>
-
-            <callout arearefs="hm2">
-              <para><literal>unique</literal> 可选,是否在该列上设置唯一约束(默认值false)</para>
-            </callout>
-
-            <callout arearefs="hm3">
-              <para><literal>nullable</literal> 可选,是否设置该列的值可以为空(默认值false)</para>
-            </callout>
-
-            <callout arearefs="hm4">
-              <para><literal>insertable</literal> 可选,该列是否作为生成的insert语句中的一个列(默认值true)</para>
-            </callout>
-
-            <callout arearefs="hm5">
-              <para><literal>updatable</literal> 可选,该列是否作为生成的update语句中的一个列(默认值true)</para>
-            </callout>
-
-            <callout arearefs="hm6">
-              <para><literal>columnDefinition</literal> 可选: 为这个特定列覆盖SQL DDL片段 (这可能导致无法在不同数据库间移植)</para>
-            </callout>
-
-            <callout arearefs="hm7">
-              <para><literal>table</literal> 可选,定义对应的表(默认为主表)</para>
-            </callout>
-
-            <callout arearefs="hm8">
-              <para><literal><literal>length</literal></literal> 可选,列长度(默认值255)</para>
-            </callout>
-
-            <callout arearefs="hm8">
-              <para><literal><literal>precision</literal></literal>
-              可选,列十进制精度(decimal precision)(默认值0)</para>
-            </callout>
-
-            <callout arearefs="hm10">
-              <para><literal><literal>scale</literal></literal> 
-              可选,如果列十进制数值范围(decimal scale)可用,在此设置(默认值0)</para>
-            </callout>
-          </calloutlist>
-        </programlistingco>
-      </sect3>
-
-      <sect3>
-        <title>嵌入式对象(又名组件)</title>
-
-        <para>在实体中可以定义一个嵌入式组件(embedded component),
-		甚至覆盖该实体中原有的列映射.
-		组件类必须在类一级定义<literal>@Embeddable</literal>注解.
-		在特定的实体的关联属性上使用<literal>@Embedded</literal>和
-		<literal>@AttributeOverride</literal>注解可以覆盖该属性对应的嵌入式对象的列映射:</para>
-
-        <programlisting>
- at Entity
-public class Person implements Serializable {
-
-    // Persistent component using defaults
-    Address homeAddress;
-
-    @Embedded
-    @AttributeOverrides( {
-            @AttributeOverride(name="iso2", column = @Column(name="bornIso2") ),
-            @AttributeOverride(name="name", column = @Column(name="bornCountryName") )
-    } )
-    Country bornIn;
-    ...
-}
-            </programlisting>
-
-        <programlisting>
- at Embeddable
-public class Address implements Serializable {
-    String city;
-    Country nationality; //no overriding here
-}
-            </programlisting>
-
-        <programlisting>
- at Embeddable
-public class Country implements Serializable {
-    private String iso2;
-    @Column(name="countryName") private String name;
-
-    public String getIso2() { return iso2; }
-    public void setIso2(String iso2) { this.iso2 = iso2; }
-
-    
-    public String getName() { return name; }
-    public void setName(String name) { this.name = name; }
-    ...
-}
-            </programlisting>
-
-        <para>嵌入式对象继承其所属实体中定义的访问类型
-		(注意:这可以通过使用Hibernate提供的<literal>@AccessType</literal>注解来覆盖原有值)(请参考 <xref
-        linkend="entity-hibspec" />).</para>
-
-        <para>在上面的例子中,实体bean <literal>Person</literal> 有两个组件属性,
-		分别是<literal>homeAddress</literal>和<literal>bornIn</literal>. 
-		我们可以看到<literal>homeAddress</literal> 属性并没有注解.
-		但是Hibernate自动检测其对应的Address类中的<literal>@Embeddable</literal>注解,
-		并将其看作一个持久化组件.对于Country中已映射的属性,
-		则使用<literal>@Embedded</literal>和<literal>@AttributeOverride
-        </literal>注解来覆盖原来映射的列名.
-		正如你所看到的, <literal>Address</literal>对象中还内嵌了<literal>Country</literal>对象,
-		这里和<literal>homeAddress</literal>一样使用了Hibernate和EJB3自动检测机制.
-		目前EJB3规范还不支持覆盖多层嵌套(即嵌入式对象中还包括其他嵌入式对象)的列映射.
-		不过Hibernate通过在表达式中使用"."符号表达式提供了对此特征的支持.</para>
-
-        <para><programlisting>    @Embedded
-    @AttributeOverrides( {
-            @AttributeOverride(name="city", column = @Column(name="fld_city") )
-            @AttributeOverride(name="<emphasis role="bold">nationality.iso2</emphasis>", column = @Column(name="nat_Iso2") ),
-            @AttributeOverride(name="<emphasis role="bold">nationality.name</emphasis>", column = @Column(name="nat_CountryName") )
-            //nationality columns in homeAddress are overridden
-    } )
-    Address homeAddress;</programlisting>
-	Hibernate注解支持很多EJB3规范中没有明确定义的特性.
-	例如,可以在嵌入式对象上添加 <literal>@MappedSuperclass</literal>注解,
-	这样可以将其父类的属性持久(详情请查阅<literal>@MappedSuperclass</literal>).</para>
-
-        <para>Hibernate现在支持在嵌入式对象中使用关联注解(如<literal>@*ToOne</literal>和<literal>@*ToMany</literal>).
-		而EJB3规范尚不支持这样的用法。你可以使用 <literal>@AssociationOverride</literal>注解来覆写关联列.</para>
-
-
-        <para>在同一个实体中使用两个同类型的嵌入对象,
-		其默认列名是无效的:至少要对其中一个进行明确声明.
-		Hibernate在这方面走在了EJB3规范的前面,
-		Hibernate提供了<classname>NamingStrategy</classname>, 在使用Hibernate时, 
-		通过<classname>NamingStrategy</classname>你可以对默认的机制进行扩展. 
-		<classname>DefaultComponentSafeNamingStrategy</classname>
-		在默认的EJB3NamingStrategy上进行了小小的提升,
-		允许在同一实体中使用两个同类型的嵌入对象而无须额外的声明.</para>
-
-      </sect3>
-
-      <sect3>
-        <title>无注解之属性的默认值</title>
-
-        <para>如果某属性没有注解,该属性将遵守下面的规则:</para>
-
-        <itemizedlist>
-          <listitem>
-             如果属性为单一类型,则映射为@Basic 
-          </listitem>
-
-          <listitem>
-             否则,如果属性对应的类型定义了@Embeddable注解,则映射为@Embedded 
-          </listitem>
-
-          <listitem>
-             否则,如果属性对应的类型实现了Serializable,
-			 则属性被映射为@Basic并在一个列中保存该对象的serialized版本
-          </listitem>
-
-          <listitem>
-            否则,如果该属性的类型为java.sql.Clob 或 java.sql.Blob,则作为@Lob并映射到适当的LobType.
-          </listitem>
-        </itemizedlist>
-
-	  </sect3>
-    </sect2>
-
-    <sect2 id="mapping-identifier" label=""
-           xreflabel="Mapping identifier properties">
-      <title>映射主键属性</title>
-
-      <para>使用<literal>@Id</literal>注解可以将实体bean中的某个属性定义为标识符(identifier).
-	  该属性的值可以通过应用自身进行设置,
-	  也可以通过Hiberante生成(推荐).
-	  使用 <literal>@GeneratedValue</literal>注解可以定义该标识符的生成策略:
-	  </para>
-
-      <itemizedlist>
-        <listitem>
-           AUTO - 可以是identity column类型,或者sequence类型或者table类型,取决于不同的底层数据库. 
-        </listitem>
-
-        <listitem>
-           TABLE - 使用表保存id值
-        </listitem>
-
-        <listitem>
-           IDENTITY - identity column
-        </listitem>
-
-        <listitem>
-           SEQUENCE - sequence 
-        </listitem>
-      </itemizedlist>
-
-      <para>和EJB3规范相比,Hibernate提供了更多的id生成器.详情请查阅 <xref linkend="entity-hibspec" /> .</para>
-
-
-      <para>下面的例子展示了使用SEQ_STORE配置的sequence生成器</para>
-
-      <programlisting>
- at Id @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQ_STORE")
-public Integer getId() { ... }
-         </programlisting>
-
-      <para>下面这个例子使用的是identity生成器</para>
-
-      <programlisting>
- at Id @GeneratedValue(strategy=GenerationType.IDENTITY)
-public Long getId() { ... }
-         </programlisting>
-
-      <para><literal>AUTO</literal>生成器适用于可移植的应用(在多个DB间切换).
-	  多个<literal>@Id</literal>可以共享同一个identifier生成器,只要把generator属性设成相同的值就可以了.
-	  通过<literal>@SequenceGenerator</literal> 和<literal>@TableGenerator</literal>,你可以配置不同的identifier生成器. 
-	  每一个identifier生成器都有自己的适用范围,可以是应用级(application level)和类一级(class level). 
-	  类一级的生成器在外部是不可见的,
-	  而且类一级的生成器可以覆盖应用级的生成器.
-	  应用级的生成器则定义在包一级(package level)(如<classname>package-info.java</classname>):</para>
-
-      <programlisting>
- at javax.persistence.TableGenerator(
-    name="EMP_GEN",
-    table="GENERATOR_TABLE",
-    pkColumnName = "key",
-    valueColumnName = "hi"
-    pkColumnValue="EMP",
-    allocationSize=20
-)
- at javax.persistence.SequenceGenerator(
-    name="SEQ_GEN",
-    sequenceName="my_sequence"
-)
-package org.hibernate.test.metadata;
-         </programlisting>
-
-      <para>
-	  如果在<classname>org.hibernate.test.metadata</classname>包下面的
-	  <classname>package-info.java</classname>文件用于初始化EJB配置,
-	  那么该文件中定义的 <literal>EMP_GEN</literal>
-	  和<literal>SEQ_GEN</literal>都是应用级的生成器. 
-      <literal>EMP_GEN</literal>定义了一个使用hilo算法
-	  (max_lo为20)的id生成器(该生成器将id的信息存在数据库的某个表中.).
-	  id的hi值保存在<literal>GENERATOR_TABLE</literal>中.
-      在该表中 <literal>pkColumnName</literal>"key"等价于
-	  <literal>pkColumnValue</literal> "<literal>EMP</literal>",
-      而<literal>valueColumnName</literal> "<literal>hi</literal>"中存储的是下一个要使用的最大值.
-	  </para>
-
-      <para><literal>SEQ_GEN</literal>则定义了一个sequence 生成器,
-	  其对应的sequence名为 <literal>my_sequence</literal>.
-	  注意目前Hibernate Annotations还不支持sequence 生成器中的
-	  <literal>initialValue</literal>和 <literal>allocationSize</literal>参数.</para>
-
-      <para>下面这个例子展示了定义在类范围(class scope)的sequence生成器:</para>
-
-      <programlisting>
- at Entity
- at javax.persistence.SequenceGenerator(
-    name="SEQ_STORE",
-    sequenceName="my_sequence"
-)
-public class Store implements Serializable {
-    private Long id;
-
-    @Id @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQ_STORE")
-    public Long getId() { return id; }
-}
-         </programlisting>
-
-      <para>在这个例子中,Store类使用名为my_sequence的sequence,并且SEQ_STORE 生成器对于其他类是不可见的.
-      注意在org.hibernate.test.metadata.id包下的测试代码有更多演示Hibernate Annotations用法的例子..</para>
-
-      <para>下面是定义组合主键的几种语法:</para>
-
-      <itemizedlist>
-        <listitem>
-           将组件类注解为@Embeddable,并将组件的属性注解为@Id
-        </listitem>
-
-        <listitem>
-           将组件的属性注解为@EmbeddedId
-        </listitem>
-
-        <listitem>
-           将类注解为@IdClass,并将该实体中所有属于主键的属性都注解为@Id 
-        </listitem>
-      </itemizedlist>
-
-      <para>对于EJB2的开发人员来说 <literal>@IdClass</literal>是很常见的,
-	  但是对于Hibernate的用户来说就是一个崭新的用法.
-	  组合主键类对应了一个实体类中的多个字段或属性,
-	  而且主键类中用于定义主键的字段或属性和
-	  实体类中对应的字段或属性在类型上必须一致.下面我们看一个例子:</para>
-
-      <programlisting>@Entity
-<emphasis role="bold">@IdClass(FootballerPk.class)</emphasis>
-public class Footballer {
-    //part of the id key
-    <emphasis role="bold">@Id</emphasis> public String getFirstname() {
-        return firstname;
-    }
-
-    public void setFirstname(String firstname) {
-        this.firstname = firstname;
-    }
-
-    //part of the id key
-    <emphasis role="bold">@Id</emphasis> public String getLastname() {
-        return lastname;
-    }
-
-    public void setLastname(String lastname) {
-        this.lastname = lastname;
-    }
-
-    public String getClub() {
-        return club;
-    }
-
-    public void setClub(String club) {
-        this.club = club;
-    }
-
-    //appropriate equals() and hashCode() implementation
-}
-
- at Embeddable
-public class FootballerPk implements Serializable {
-    //same name and type as in Footballer
-    public String getFirstname() {
-        return firstname;
-    }
-
-    public void setFirstname(String firstname) {
-        this.firstname = firstname;
-    }
-
-    //same name and type as in Footballer
-    public String getLastname() {
-        return lastname;
-    }
-
-    public void setLastname(String lastname) {
-        this.lastname = lastname;
-    }
-
-    //appropriate equals() and hashCode() implementation
-}
-</programlisting>
-
-
-      <para>如上, <literal>@IdClass</literal>指向对应的主键类.</para>
-
-	  <para>Hibernate支持在组合标识符中定义关联(就像使用普通的注解一样),而EJB3规范并不支持此类用法.
-	  </para>
-
-      <programlisting>@Entity
- at AssociationOverride( name="id.channel", joinColumns = @JoinColumn(name="chan_id") )
-public class TvMagazin {
-    @EmbeddedId public TvMagazinPk id;
-    @Temporal(TemporalType.TIME) Date time;
-}
-
- at Embeddable
-public class TvMagazinPk implements Serializable {
-    @ManyToOne
-    public Channel channel;
-    public String name;
-    @ManyToOne
-    public Presenter presenter;
-}
-</programlisting>
-
-	</sect2>
-
-    <sect2>
-      <title>映射继承关系</title>
-
-      <para>EJB3支持三种类型的继承映射:</para>
-
-      <itemizedlist>
-        <listitem>
-            每个类一张表(Table per class)策略: 在Hibernate中对应&lt;union-class&gt;元素:
-        </listitem>
-
-        <listitem>
-		   每个类层次结构一张表(Single table per class hierarchy)策略:在Hibernate中对应&lt;subclass&gt;元素
-        </listitem>
-
-        <listitem>
-		   连接的子类(Joined subclasses)策略:在Hibernate中对应 &lt;joined-subclass&gt;元素
-        </listitem>
-      </itemizedlist>
-
-      <para>
-      你可以用 <literal>@Inheritance</literal>注解来定义所选择的策略.
-      这个注解需要在每个类层次结构(class hierarchy) 最顶端的实体类上使用.
-      </para>
-
-      <note>
-        <para>目前还不支持在接口上进行注解.</para>
-      </note>
-
-      <sect3>
-        <title>每个类一张表</title>
-
-        <para>
-		这种策略有很多缺点(例如:多态查询和关联),EJB3规范, Hibernate参考手册, 
-		Hibernate in Action,以及其他许多地方都对此进行了描述和解释.
-		Hibernate使用<literal>SQL UNION</literal>查询来实现这种策略.
-		通常使用场合是在一个继承层次结构的顶端:</para>
-
-        <programlisting>
- at Entity
- at Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
-public class Flight implements Serializable {
-            </programlisting>
-
-        <para>
-		这种策略支持双向的一对多关联.
-		这里不支持<literal>IDENTITY</literal>生成器策略,因为id必须在多个表间共享.
-		当然,一旦使用这种策略就意味着你不能使用
-		<literal>AUTO </literal>生成器和<literal>IDENTITY</literal>生成器.
-		</para>
-      </sect3>
-
-      <sect3>
-        <title>每个类层次结构一张表</title>
-
-        <para>整个继承层次结构中的父类和子类的所有属性都映射到同一个表中,
-		他们的实例通过一个辨别符(discriminator)列来区分.:</para>
-
-        <programlisting>
- at Entity
- at Inheritance(strategy=InheritanceType.SINGLE_TABLE)
- at DiscriminatorColumn(
-    name="planetype",
-    discriminatorType=DiscriminatorType.STRING
-)
- at DiscriminatorValue("Plane")
-public class Plane { ... }
-
- at Entity
- at DiscriminatorValue("A320")
-public class A320 extends Plane { ... }
-            </programlisting>
-
-        <para>在上面这个例子中,<classname>Plane</classname>是父类,在这个类里面将继承策略定义为
-		<literal>InheritanceType.SINGLE_TABLE</literal>,并通过
-		<literal>@DiscriminatorColumn</literal>注解定义了辨别符列(还可以定义辨别符的类型).
-		最后,对于继承层次结构中的每个类,<literal>@DiscriminatorValue</literal>注解指定了用来辨别该类的值.
-		辨别符列的名字默认为 <literal>DTYPE</literal>,其默认值为实体名(在<literal>@Entity.name</literal>中定义),其类型
-		为DiscriminatorType.STRING.
-		 <classname>A320</classname>是子类,如果不想使用默认的辨别符,只需要指定相应的值即可.
-		其他的如继承策略,辨别标志字段的类型都是自动设定的.</para>
-
-		<para><literal>@Inheritance</literal> 和
-        <literal>@DiscriminatorColumn</literal> 注解只能用于实体层次结构的顶端.</para>
-
-      </sect3>
-
-      <sect3>
-        <title>连接的子类</title>
-
-        <para>当每个子类映射到一个表时, <literal> @PrimaryKeyJoinColumn</literal>
-		和<literal>@PrimaryKeyJoinColumns</literal>
-		注解定义了每个子类表关联到父类表的主键:</para>
-
-        <programlisting>
- at Entity
- at Inheritance(strategy=InheritanceType.JOINED)
-public class Boat implements Serializable { ... }
-
- at Entity
-public class Ferry extends Boat { ... }
-
- at Entity
- at PrimaryKeyJoinColumn(name="BOAT_ID")
-public class AmericaCupClass  extends Boat { ... }
-            </programlisting>
-
-        <para>以上所有实体都使用了<literal>JOINED</literal>策略, 
-		<literal>Ferry</literal>表和<literal>Boat</literal>表使用同名的主键.
-		而<literal>AmericaCupClass</literal>表和<literal>Boat</literal>表使用了条件
-		<code>Boat.id = AmericaCupClass.BOAT_ID</code>进行关联.
-		</para>
-      </sect3>
-
-      <sect3>
-        <title>从父类继承的属性</title>
-
-        <para>有时候通过一个(技术上或业务上)父类共享一些公共属性是很有用的,
-		同时还不用将该父类作为映射的实体(也就是该实体没有对应的表).
-		这个时候你需要使用<literal>@MappedSuperclass</literal>注解来进行映射.</para>
-
-        <programlisting>@MappedSuperclass
-public class BaseEntity {
-    @Basic
-    @Temporal(TemporalType.TIMESTAMP)
-    public Date getLastUpdate() { ... }
-    public String getLastUpdater() { ... }
-    ...
-}
-
- at Entity class Order extends BaseEntity {
-    @Id public Integer getId() { ... }
-    ...
-}</programlisting>
-
-        <para>在数据库中,上面这个例子中的继承的层次结构最终以<literal>Order</literal>表的形式出现,
-		该表拥有<literal>id</literal>, <literal>lastUpdate</literal> 和
-		<literal>lastUpdater</literal>三个列.父类中的属性映射将复制到其子类实体.
-		注意这种情况下的父类不再处在继承层次结构的顶端.</para>
-
-        <note>
-
-          <para>注意,没有注解为<literal>@MappedSuperclass</literal>的父类中的属性将被忽略.</para>
-        </note>
-
-        <note>
-
-          <para>除非显式使用Hibernate annotation中的<literal>@AccessType</literal>注解,
-		  否则将从继承层次结构的根实体中继承访问类型(包括字段或方法)</para>
-        </note>
-
-        <note>
-
-          <para>这对于<literal>@Embeddable</literal>对象的父类中的属性持久化同样有效.
-		  只需要使用<literal>@MappedSuperclass</literal>注解即可
-		  (虽然这种方式不会纳入EJB3标准)</para>
-
-        </note>
-
-        <note>
-
-          <para>可以将处在在映射继承层次结构的中间位置的类注解为<literal>@MappedSuperclass</literal>.</para>
-        </note>
-
-        <note>
-
-          <para>在继承层次结构中任何没有被注解为<literal>@MappedSuperclass</literal>
-		  或<literal>@Entity</literal>的类都将被忽略.</para>
-        </note>
-
-		<para>
-		你可以通过 <literal>@AttributeOverride</literal>注解覆盖实体父类中的定义的列.
-		这个注解只能在继承层次结构的顶端使用.</para>
-
-        <programlisting>@MappedSuperclass
-public class FlyingObject implements Serializable {
-
-    public int getAltitude() {
-        return altitude;
-    }
-
-    @Transient
-    public int getMetricAltitude() {
-        return metricAltitude;
-    }
-
-    @ManyToOne
-    public PropulsionType getPropulsion() {
-        return metricAltitude;
-    }
-    ...
-}
-
- at Entity
- at AttributeOverride( name="altitude", column = @Column(name="fld_altitude") )
- at AssociationOverride( name="propulsion", joinColumns = @JoinColumn(name="fld_propulsion_fk") )
-public class Plane extends FlyingObject {
-    ...
-}</programlisting>
-
-		<para>在上面这个例子中,<literal>altitude</literal>属性的值最终将持久化到<literal>Plane</literal>
-		表的<literal>fld_altitude</literal>列.而名为propulsion的关联则保存在<literal>fld_propulsion_fk</literal>外间列.</para>
-
-        <para>你可以为<literal>@Entity</literal>和<literal>@MappedSuperclass</literal>注解的类
-		以及那些对象为<literal>@Embeddable</literal>的属性定义
-		<literal>@AttributeOverride</literal>和<literal>@AssociationOverride</literal>.</para>
-
-      </sect3>
-    </sect2>
-
-    <sect2 id="entity-mapping-association">
-      <title>映射实体Bean的关联关系</title>
-
-      <sect3>
-        <title>一对一(One-to-one)</title>
-
-		<para>使用<literal>@OneToOne</literal>注解可以建立实体bean之间的一对一的关联.
-		一对一关联有三种情况:
-		一是关联的实体都共享同样的主键,
-		二是其中一个实体通过外键关联到另一个实体的主键
-		(注意要模拟一对一关联必须在外键列上添加唯一约束).
-		三是通过关联表来保存两个实体之间的连接关系
-		(注意要模拟一对一关联必须在每一个外键上添加唯一约束).</para>
-
-        <para>首先,我们通过共享主键来进行一对一关联映射:</para>
-
-        <programlisting>
- at Entity
-public class Body {
-    @Id
-    public Long getId() { return id; }
-
-    @OneToOne(cascade = CascadeType.ALL)
-    @PrimaryKeyJoinColumn
-    public Heart getHeart() {
-        return heart;
-    }
-    ...
-}
-            </programlisting>
-
-        <programlisting>
- at Entity
-public class Heart {
-    @Id
-    public Long getId() { ...}
-}
-            </programlisting>
-
-		<para>上面的例子通过使用注解<literal>@PrimaryKeyJoinColumn</literal>定义了一对一关联.</para>
-
-		<para>下面这个例子使用外键列进行实体的关联.</para>
-
-        <programlisting>
- at Entity
-public class Customer implements Serializable {
-    @OneToOne(cascade = CascadeType.ALL)
-    <emphasis role="bold">@JoinColumn(name="passport_fk")</emphasis>
-    public Passport getPassport() {
-        ...
-    }
-
- at Entity
-public class Passport implements Serializable {
-    @OneToOne(<emphasis role="bold">mappedBy = "passport"</emphasis>)
-    public Customer getOwner() {
-    ...
-}
-            </programlisting>
-
-        <para>上面这个例子中,<classname>Customer</classname> 通过<literal>Customer</literal>
-		表中名为的<literal>passport_fk</literal> 外键列和 <classname>Passport</classname>关联.
-		<literal>@JoinColumn</literal>注解定义了联接列(join column).
-		该注解和<literal>@Column</literal>注解有点类似,
-		但是多了一个名为<literal>referencedColumnName</literal>的参数.
-		该参数定义了所关联目标实体中的联接列.
-		注意,当<literal><literal>referencedColumnName</literal></literal>关联到非主键列的时候,
-		关联的目标类必须实现<classname>Serializable</classname>,
-		还要注意的是所映射的属性对应单个列(否则映射无效).
-		</para>
-
-        <para>一对一关联可能是双向的.在双向关联中,
-		有且仅有一端是作为主体(owner)端存在的:主体端负责维护联接列(即更新).
-		对于不需要维护这种关系的从表则通过mappedBy属性进行声明.
-		<literal>mappedBy</literal>的值指向主体的关联属性.
-		在上面这个例子中,<literal>mappedBy</literal>的值为 <literal>passport</literal>.
-		最后,不必也不能再在被关联端(owned side)定义联接列了,因为已经在主体端进行了声明.</para>
-
-		<para>如果在主体没有声明<literal>@JoinColumn</literal>,系统自动进行处理:
-		在主表(owner table)中将创建联接列,
-		列名为:主体的关联属性名+下划线+被关联端的主键列名.
-		在上面这个例子中是<literal>passport_id</literal>,
-		因为<literal>Customer</literal>中关联属性名为<literal>passport</literal>,
-		<literal>Passport</literal>的主键是<literal>id</literal>.</para>
-
-        <para>The third possibility (using an association table) is very
-        exotic.</para>
-
-        <para>第三种方式也许是最另类的(通过关联表).</para>
-
-        <programlisting>
- at Entity
-public class Customer implements Serializable {
-    @OneToOne(cascade = CascadeType.ALL)
-    <emphasis role="bold">@JoinTable(name = "CustomerPassports"
-        joinColumns = @JoinColumn(name="customer_fk"),
-        inverseJoinColumns = @JoinColumns(name="passport_fk")</emphasis>
-    )
-    public Passport getPassport() {
-        ...
-    }
-
- at Entity
-public class Passport implements Serializable {
-    @OneToOne(<emphasis role="bold">mappedBy = "passport"</emphasis>)
-    public Customer getOwner() {
-    ...
-}
-            </programlisting>
-
-        <para><classname>Customer</classname>通过名为 <literal>CustomerPassports</literal>的关联表和
-        <classname>Passport</classname>关联; 该关联表拥有名为<literal>passport_fk</literal>的外键列,该
-		外键指向<literal>Passport</literal>表,该信息定义为<literal>inverseJoinColumn</literal>的属性值,
-		而<literal>customer_fk</literal>外键列指向<literal>Customer</literal>表,
-		该信息定义为 <literal>joinColumns</literal>的属性值.</para>
-
-        <para>这种关联可能是双向的.在双向关联中,
-		有且仅有一端是作为主体端存在的:主体端负责维护联接列(即更新).
-		对于不需要维护这种关系的从表则通过mappedBy属性进行声明.
-		<literal>mappedBy</literal>的值指向主体的关联属性.
-		在上面这个例子中,<literal>mappedBy</literal>的值为 <literal>passport</literal>.
-		最后,不必也不能再在被关联端(owned side)定义联接列了,因为已经在主体端进行了声明.</para>
-
-		<para>你必须明确定义关联表名和关联列名.</para>
-
-      </sect3>
-
-      <sect3>
-        <title>多对一(Many-to-one)</title>
-
-        <para>在实体属性一级使用<literal>@ManyToOne</literal>注解来定义多对一关联:</para>
-
-        <programlisting>
- at Entity()
-public class Flight implements Serializable {
-    <emphasis role="bold">@ManyToOne</emphasis>( cascade = {CascadeType.PERSIST, CascadeType.MERGE} )
-    @JoinColumn(name="COMP_ID")
-    public Company getCompany() {
-        return company;
-    }
-    ...
-}
-            </programlisting>
-
-        <para>其中<literal>@JoinColumn</literal>是可选的,关联字段默认值和一对一
-		(one to one)关联的情况相似,
-		列名为:主体的关联属性名+下划线+被关联端的主键列名.
-		在这个例子中是<literal>company_id</literal>,
-		因为关联的属性是<literal>company</literal>,
-		<literal>Company</literal>的主键是<literal>id</literal>.</para>
-
-		<para><literal>@ManyToOne</literal>注解有一个名为<literal>targetEntity</literal>的参数,
-		该参数定义了目标实体名.通常不需要定义该参数,
-		因为在大部分情况下默认值(表示关联关系的属性类型)就可以很好的满足要求了.
-		不过下面这种情况下这个参数就显得有意义了:使用接口作为返回值而不是常见的实体.</para>
-
-        <programlisting>
- at Entity()
-public class Flight implements Serializable {
-    @ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE}, <emphasis
-            role="bold">targetEntity=CompanyImpl.class</emphasis> )
-    @JoinColumn(name="COMP_ID")
-    public Company getCompany() {
-        return company;
-    }
-    ...
-}
-
-public interface Company {
-    ...
-            </programlisting>
-
-        <para>对于多对一也可以通过关联表的方式来映射。
-		通过<literal>@JoinTable</literal>注解可定义关联表,
-		该关联表包含了指回实体表的外键(通过<literal>@JoinTable.joinColumns</literal>)
-		以及指向目标实体表的外键(通过<literal>@JoinTable.inverseJoinColumns</literal>).</para>
-
-        <programlisting>
- at Entity()
-public class Flight implements Serializable {
-    @ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE} )
-    <emphasis role="bold">@JoinTable(name="Flight_Company",
-        joinColumns = @JoinColumn(name="FLIGHT_ID"),
-        inverseJoinColumns = @JoinColumns(name="COMP_ID")
-    )</emphasis>
-    public Company getCompany() {
-        return company;
-    }
-    ...
-}
-            </programlisting>
-      </sect3>
-
-      <sect3 id="entity-mapping-association-collections">
-        <title>集合类型</title>
-
-        <sect4>
-          <title>概况</title>
-
-          <para>你可以对 <classname>Collection </classname>,<literal>List</literal>
-		  (指有序列表, 而不是索引列表),
-		  <literal>Map</literal>和<classname>Set</classname>这几种类型进行映射.
-		  EJB3规范定义了怎么样使用<literal>@javax.persistence.OrderBy</literal>
-		  注解来对有序列表进行映射:
-		  该注解接受的参数格式:用逗号隔开的(目标实体)属性名及排序指令,
-		  如<code>firstname asc, age desc</code>,如果该参数为空,则默认以id对该集合进行排序.
-           如果某个集合在数据库中对应一个关联表(association table)的话,你不能在这个集合属性上面使用@OrderBy注解.
-		  对于这种情况的处理方法,请参考<xref linkend="entity-hibspec" />.
-		  EJB3 允许你利用目标实体的一个属性作为Map的key,
-		  这个属性可以用<literal>@MapKey(name="myProperty")</literal>来声明.
-		  如果使用<literal>@MapKey</literal>注解的时候不提供属性名,
-		  系统默认使用目标实体的主键.
-		  map的key使用和属性相同的列:不需要为map key定义专用的列,因为map key实际上就表达了一个目标属性。
-		  注意一旦加载,key不再和属性保持同步,
-		  也就是说,如果你改变了该属性的值,在你的Java模型中的key不会自动更新
-		  (请参考<xref linkend="entity-hibspec" />).
-		  很多人被<literal>&lt;map&gt;</literal>和<literal>@MapKey</literal>弄糊涂了。
-		  其他它们有两点区别.<literal>@MapKey</literal>目前还有一些限制,详情请查看论坛或者
-		  我们的JIRA缺陷系统。
-
-
-		  注意一旦加载,key不再和属性保持同步,
-		  也就是说,如果你改变了该属性的值,在你的Java模型中的key不会自动更新.
-		  (Hibernate 3中Map支持的方式在当前的发布版中还未得到支持).</para>
-
-          <para>Hibernate将集合分以下几类.</para>
-
-          <para></para>
-
-          <table>
-            <title>集合语义</title>
-
-            <tgroup cols="3">
-              <colspec colname="c1" />
-
-              <colspec colname="c2" />
-
-              <colspec colname="c3" colnum="2" />
-
-              <thead>
-                <row>
-                  <entry>语义</entry>
-
-                  <entry>Java实现类</entry>
-
-                  <entry> 注解</entry>
-                </row>
-              </thead>
-
-              <tbody>
-                <row>
-                  <entry>Bag 语义</entry>
-
-                  <entry>java.util.List, java.util.Collection</entry>
-
-                  <entry>@org.hibernate.annotations.CollectionOfElements 或
-                  @OneToMany 或 @ManyToMany</entry>
-                </row>
-
-                <row>
-                  <entry>List 语义</entry>
-
-                  <entry>java.util.List</entry>
-
-                  <entry>(@org.hibernate.annotations.CollectionOfElements 或
-                  @OneToMany 或 @ManyToMany) 
-				  以及
-                  @org.hibernate.annotations.IndexColumn</entry>
-                </row>
-
-                <row>
-                  <entry>Set 语义</entry>
-
-                  <entry>java.util.Set</entry>
-
-                  <entry>@org.hibernate.annotations.CollectionOfElements 或
-                  @OneToMany 或 @ManyToMany</entry>
-                </row>
-
-                <row>
-                  <entry>Map 语义</entry>
-
-                  <entry>java.util.Map</entry>
-
-                  <entry>(@org.hibernate.annotations.CollectionOfElements 或
-                  @OneToMany 或 @ManyToMany)
-				  以及
-				  (空 
-				  或
-                  @org.hibernate.annotations.MapKey/MapKeyManyToMany(支持真正的map), 
-				  或
-                  @javax.persistence.MapKey</entry>
-				  
-                </row>
-              </tbody>
-            </tgroup>
-          </table>
-
-		  <remark>
-		  从上面可以明确地看到,没有@org.hibernate.annotations.IndexColumn 
-		  注解的java.util.List集合将被看作bag类.
-		  </remark>
-
-          <para>EJB3规范不支持原始类型,核心类型,嵌入式对象的集合.但是Hibernate对此提供了支持
-		  (详情参考 <xref linkend="entity-hibspec" />).</para>
-
-          <programlisting>@Entity public class City {
-    @OneToMany(mappedBy="city")
-    <emphasis role="bold">@OrderBy("streetName")</emphasis>
-    public List&lt;Street&gt; getStreets() {
-        return streets;
-    }
-...
-}
-
- at Entity public class Street {
-    <emphasis role="bold">public String getStreetName()</emphasis> {
-        return streetName;
-    }
-
-    @ManyToOne
-    public City getCity() {
-        return city;
-    }
-    ...
-}
-
-
- at Entity
-public class Software {
-    @OneToMany(mappedBy="software")
-    <emphasis role="bold">@MapKey(name="codeName")</emphasis>
-    public Map&lt;String, Version&gt; getVersions() {
-        return versions;
-    }
-...
-}
-
- at Entity
- at Table(name="tbl_version")
-public class Version {
-    <emphasis role="bold">public String getCodeName()</emphasis> {...}
-
-    @ManyToOne
-    public Software getSoftware() { ... }
-...
-}</programlisting>
-
-          <para>上面这个例子中,<literal>City</literal>
-		  中包括了以<literal>streetName</literal>排序的<literal>Street</literal>的集合.
-		  而<literal>Software</literal>中包括了以<literal>codeName</literal>作为
-		  key和以<literal>Version</literal>作为值的Map.</para>
-
-		  <para>除非集合为generic类型,否则你需要指定<literal>targetEntity</literal>.
-		  这个注解属性接受的参数为目标实体的class.</para>
-        </sect4>
-
-        <sect4 id="entity-mapping-association-collection-onetomany"
-               revision="2">
-          <title>一对多(One-to-many)</title>
-
-          <para>在属性级使用 <literal>@OneToMany</literal>注解可定义一对多关联.一对多关联可以是双向关联.</para>
-
-          <sect5>
-            <title>双向(Bidirectional)</title>
-
-            <para>在EJB3规范中多对一这端几乎总是双向关联中的主体(owner)端,
-			而一对多这端的关联注解为<literal>@OneToMany( mappedBy=...
-            )</literal></para>
-
-            <programlisting>@Entity
-public class Troop {
-    @OneToMany(mappedBy="troop")
-    public Set&lt;Soldier&gt; getSoldiers() {
-    ...
-}
-
- at Entity
-public class Soldier {
-    @ManyToOne
-    @JoinColumn(name="troop_fk")
-    public Troop getTroop() {
-    ...
-}              </programlisting>
-
-			<para><classname>Troop</classname> 通过<literal>troop</literal> 
-			属性和<literal>Soldier</literal>建立了一对多的双向关联.
-			在<literal>mappedBy</literal>端不必也不能再定义任何物理映射</para>
-
-            <para>对于一对多的双向映射,如果要一对多这一端维护关联关系,
-			你需要删除<literal>mappedBy</literal>元素并将多对一这端的
-			 <literal>@JoinColumn</literal>的insertable和updatable设置为false.
-			很明显,这种方案不会得到什么明显的优化,而且还会增加一些附加的UPDATE语句.</para>
-
-            <programlisting>@Entity
-public class Troop {
-    @OneToMany
-    @JoinColumn(name="troop_fk") //we need to duplicate the physical information
-    public Set&lt;Soldier&gt; getSoldiers() {
-    ...
-}
-
- at Entity
-public class Soldier {
-    @ManyToOne
-    @JoinColumn(name="troop_fk", insertable=false, updatable=false)
-    public Troop getTroop() {
-    ...
-}</programlisting>
-          </sect5>
-
-          <sect5>
-            <title>单向(Unidirectional)</title>
-
-			<para>通过在被拥有的实体端(owned entity)增加一个外键列来实现一对多单向关联是很少见的,也是不推荐的.
-			我们强烈建议通过一个联接表(join table)来实现这种关联(下一节会对此进行解释).
-			可以通过<literal>@JoinColumn</literal>注解来描述这种单向关联关系.</para>
-
-            <programlisting>
- at Entity
-public class Customer implements Serializable {
-    @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
-    @JoinColumn(name="CUST_ID")
-    public Set&lt;Ticket&gt; getTickets() {
-    ...
-}
-
- at Entity
-public class Ticket implements Serializable {
-    ... //no bidir
-}
-               </programlisting>
-
-			<para><literal>Customer</literal> 通过
-			<literal>CUST_ID</literal>列和<literal>Ticket</literal> 建立了单向关联关系.</para>
-
-          </sect5>
-
-          <sect5>
-            <title>通过关联表处理单向关联</title>
-
-            <para>通过联接表处理单向一对多关联是首选方式.这种关联通过<literal>@JoinTable</literal>注解来进行描述.</para>
-
-            <programlisting>
- at Entity
-public class Trainer {
-    @OneToMany
-    @JoinTable(
-            name="TrainedMonkeys",
-            joinColumns = { @JoinColumn( name="trainer_id") },
-            inverseJoinColumns = @JoinColumn( name="monkey_id")
-    )
-    public Set&lt;Monkey&gt; getTrainedMonkeys() {
-    ...
-}
-
- at Entity
-public class Monkey {
-    ... //no bidir
-}
-               </programlisting>
-
-			<para>上面这个例子中,<literal>Trainer</literal>通过
-			<classname>TrainedMonkeys</classname>表和
-			<classname>Monkey</classname> 建立了单向关联. 
-			其中外键<literal>trainer_id</literal>关联到<literal>Trainer</literal>
-			(<literal>joinColumns</literal>),
-			而外键<literal>monkey_id</literal>关联到 <literal>Monkey</literal>
-			(<literal>inversejoinColumns</literal>).</para>
-          </sect5>
-
-          <sect5>
-            <title>默认处理机制</title>
-
-            <para>通过联接表来建立单向一对多关联不需要描述任何物理映射.
-            表名由以下三个部分组成:主表(owner table)表名+下划线+从表(the other side table)表名.
-            指向主表的外键名:主表表名+下划线+主表主键列名
-            指向从表的外键名:主表所对应实体的属性名+下划线+从表主键列名
-            指向从表的外键定义为唯一约束,用来表示一对多的关联关系.</para>
-
-            <programlisting>
- at Entity
-public class Trainer {
-    @OneToMany
-    public Set&lt;Tiger&gt; getTrainedTigers() {
-    ...
-}
-
- at Entity
-public class Tiger {
-    ... //no bidir
-}
-               </programlisting>
-
-            <para>上面这个例子中,<classname>Trainer</classname>和<classname>Tiger</classname>
-			通过联接表 <literal>Trainer_Tiger</literal>建立单向关联关系,
-			其中外键<literal>trainer_id</literal>关联到<literal>Trainer</literal>
-			(主表表名, <keycap>_</keycap>(下划线), trainer id),
-			而外键<literal>trainedTigers_id</literal>关联到<literal>Tiger</literal>
-			(属性名称,  <keycap>_</keycap>(下划线), Tiger表的主键列名).</para>
-
-          </sect5>
-        </sect4>
-
-        <sect4>
-          <title>多对多(Many-to-many)</title>
-
-          <sect5>
-            <title>定义</title>
-
-            <para>你可以通过<literal>@ManyToMany</literal>注解可定义的多对多关联.
-			同时,你也需要通过注解<literal>@JoinTable</literal>描述关联表和关联条件.
-			如果是双向关联,其中一段必须定义为owner,另一端必须定义为inverse(在对关联表进行更新操作时这一端将被忽略):</para>
-
-            <programlisting>
- at Entity
-public class Employer implements Serializable {
-    @ManyToMany(
-        targetEntity=org.hibernate.test.metadata.manytomany.Employee.class,
-        cascade={CascadeType.PERSIST, CascadeType.MERGE}
-    )
-    @JoinTable(
-        name="EMPLOYER_EMPLOYEE",
-        joinColumns={@JoinColumn(name="EMPER_ID")},
-        inverseJoinColumns={@JoinColumn(name="EMPEE_ID")}
-    )
-    public Collection getEmployees() {
-        return employees;
-    }
-    ...
-}
-               </programlisting>
-
-            <programlisting>
- at Entity
-public class Employee implements Serializable {
-    @ManyToMany(
-        cascade={CascadeType.PERSIST, CascadeType.MERGE},
-        mappedBy="employees"
-        targetEntity=Employer.class
-    )
-    public Collection getEmployers() {
-        return employers;
-    }
-}
-               </programlisting>
-
-            <para>至此,我们已经展示了很多跟关联有关的声明定义以及属性细节.
-			下面我们将深入介绍<literal>@JoinTable</literal>注解,该注解定义了联接表的表名,
-			联接列数组(注解中定义数组的格式为{ A, B, C }),
-			以及inverse联接列数组.
-			后者是关联表中关联到<classname>Employee</classname>主键的列(the "other side").</para>
-
-            <para>正如前面所示,被关联端不必也不能描述物理映射: 
-			只需要一个简单的<literal>mappedBy</literal>参数,该参数包含了主体端的属性名,这样就绑定双方的关系.</para>
-          </sect5>
-
-          <sect5>
-            <title>默认值</title>
-
-			<para>和其他许多注解一样,在多对多关联中很多值是自动生成.
-			当双向多对多关联中没有定义任何物理映射时,Hibernate根据以下规则生成相应的值.
-			关联表名:主表表名+<keycap>_</keycap>下划线+从表表名,
-			关联到主表的外键名:主表名+<keycap>_</keycap>下划线+主表中的主键列名.
-			关联到从表的外键名:主表中用于关联的属性名+<keycap>_</keycap>下划线+从表的主键列名.
-			以上规则对于双向一对多关联同样有效.</para>
-
-            <programlisting>
- at Entity
-public class Store {
-    @ManyToMany(cascade = CascadeType.PERSIST)
-    public Set&lt;City&gt; getImplantedIn() {
-        ...
-    }
-}
-
- at Entity
-public class City {
-    ... //no bidirectional relationship
-}
-               </programlisting>
-
-            <para>上面这个例子中,<literal>Store_Table</literal>作为联接表. 
-			<literal>Store_id</literal>列是联接到<literal>Store</literal>表的外键.
-			而<literal>implantedIn_id</literal>列则联接到<literal>City</literal>表.</para>
-
-            <para>当双向多对多关联中没有定义任何物理映射时, Hibernate根据以下规则生成相应的值
-            关联表名: :主表表名+<keycap>_</keycap>下划线+从表表名,
-            关联到主表的外键名:从表用于关联的属性名+<keycap>_</keycap>下划线+主表中的主键列名.
-            关联到从表的外键名:主表用于关联的属性名+<keycap>_</keycap>下划线+从表的主键列名.
-            以上规则对于双向一对多关联同样有效.</para>
-
-            <programlisting>
- at Entity
-public class Store {
-    @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
-    public Set&lt;Customer&gt; getCustomers() {
-        ...
-    }
-}
-
- at Entity
-public class Customer {
-    @ManyToMany(mappedBy="customers")
-    public Set&lt;Store&gt; getStores() {
-        ...
-    }
-}
-               </programlisting>
-
-            <para>在上面这个例子中,<literal>Store_Customer</literal>作为联接表. 
-			<literal>stores_id</literal>列是联接到<literal>Store</literal>表的外键,
-			而<literal>customers_id</literal>列联接到<literal>City</literal>表.</para>
-
-		  </sect5>
-        </sect4>
-      </sect3>
-
-
-      <sect3>
-        <title>用cascading实现传播性持久化(Transitive persistence)</title>
-
-        <para>也许你已经注意到了<literal>cascade</literal>属性接受的值为<classname>CascadeType</classname>数组.
-		在EJB3中的cascade的概念和Hibernate中的传播性持久化以及cascade操作非常类似,
-		但是在语义上有细微的区别,支持的cascade类型也有点区别:</para>
-
-        <itemizedlist>
-          <listitem>
-             CascadeType.PERSIST: 如果一个实体是受管状态, 或者当persist()函数被调用时, 触发级联创建(create)操作
-          </listitem>
-
-          <listitem>
-             CascadeType.MERGE: 如果一个实体是受管状态, 或者当merge()函数被调用时, 触发级联合并(merge)操作
-          </listitem>
-
-          <listitem>
-             CascadeType.REMOVE: 当delete()函数被调用时, 触发级联删除(remove)操作
-          </listitem>
-
-          <listitem>
-             CascadeType.REFRESH: 当refresh()函数被调用时, 触发级联更新(refresh)操作
-          </listitem>
-
-          <listitem>
-             CascadeType.ALL: 以上全部
-          </listitem>
-        </itemizedlist>
-
-		<para>关于cascading, create/merge的语义请参考EJB3规范的6.3章节.</para>
-      </sect3>
-
-      <sect3>
-        <title>关联关系获取</title>
-
-        <para>通过Hibernate你可以获得直接或者延迟获取关联实体的功能.
-		<literal>fetch</literal>参数可以设置为<literal>FetchType.LAZY</literal> 
-		或者 <literal>FetchType.EAGER</literal>.
-		<literal>EAGER</literal>通过<literal>outer join select</literal>直接获取关联的对象,
-		而<literal>LAZY</literal>(默认值)在第一次访问关联对象的时候才会触发相应的select操作.
-		EJBQL提供了<literal>fetch</literal>关键字,该关键字可以在进行特殊查询的时候覆盖默认值.
-		这对于提高性能来说非常有效,应该根据实际的用例来判断是否选择fetch关键字.</para>
-      </sect3>
-    </sect2>
-
-    <sect2>
-      <title>映射复合主键与外键</title>
-
-      <para>组合主键使用一个可嵌入的类作为主键表示,因此你需要使用<literal>@Id</literal>
-	  和<literal>@Embeddable</literal>两个注解.
-	  还有一种方式是使用<literal>@EmbeddedId</literal>注解.注意所依赖的类必须实现
-	  serializable以及实现<methodname>equals()</methodname>/<methodname>hashCode()</methodname>方法.
-	  你也可以如<xref linkend="mapping-identifier" />一章中描述的办法使用<literal>@IdClass</literal>注解.</para>
-
-      <programlisting>
- at Entity
-public class RegionalArticle implements Serializable {
-
-    @Id
-    public RegionalArticlePk getPk() { ... }
-}
-
- at Embeddable
-public class RegionalArticlePk implements Serializable { ... }
-         </programlisting>
-
-      <para>或者</para>
-
-      <programlisting>
- at Entity
-public class RegionalArticle implements Serializable {
-
-    @EmbeddedId
-    public RegionalArticlePk getPk() { ... }
-}
-
-public class RegionalArticlePk implements Serializable { ... }
-         </programlisting>
-
-      <para><literal>@Embeddable</literal> 注解默认继承了其所属实体的访问类型,
-	  除非显式使用了Hibernate的<literal>@AccessType</literal>注解(这个注解不是EJB3标准的一部分).
-	  而<literal>@JoinColumns</literal>,即<literal>@JoinColumn</literal>数组,
-	  定义了关联的组合外键(如果不使用缺省值的话).
-	  显式指明<literal>referencedColumnNames</literal>是一个好的实践方式,
-	  否则,Hibernate认为你使用的列顺序和主键声明的顺序一致.</para>
-
-      <programlisting>
- at Entity
-public class Parent implements Serializable {
-    @Id
-    public ParentPk id;
-    public int age;
-
-    @OneToMany(cascade=CascadeType.ALL)
-    @JoinColumns ({
-        @JoinColumn(name="parentCivility", referencedColumnName = "isMale"),
-        @JoinColumn(name="parentLastName", referencedColumnName = "lastName"),
-        @JoinColumn(name="parentFirstName", referencedColumnName = "firstName")
-    })
-    public Set&lt;Child&gt; children; //unidirectional
-    ...
-}
-         </programlisting>
-
-      <programlisting>
- at Entity
-public class Child implements Serializable {
-    @Id @GeneratedValue
-    public Integer id;
-
-    @ManyToOne
-    @JoinColumns ({
-        @JoinColumn(name="parentCivility", referencedColumnName = "isMale"),
-        @JoinColumn(name="parentLastName", referencedColumnName = "lastName"),
-        @JoinColumn(name="parentFirstName", referencedColumnName = "firstName")
-    })
-    public Parent parent; //unidirectional
-}
-         </programlisting>
-
-      <programlisting>
- at Embeddable
-public class ParentPk implements Serializable {
-    String firstName;
-    String lastName;
-    ...
-}
-         </programlisting>
-
-	  <para>注意上面的 <literal>referencedColumnName</literal>显式使用方式.</para>
-    </sect2>
-
-    <sect2>
-      <title>映射二级表(secondary tables)</title>
-
-      <para>使用类一级的 <literal>@SecondaryTable </literal> 或 
-	   <literal>@SecondaryTables </literal>注解可以实现单个实体到多个表的映射.
-	  使用 <literal>@Column  </literal>或者  <literal>@JoinColumn  </literal>
-	  注解中的 <literal>table </literal>参数可指定某个列所属的特定表.</para>
-
-      <programlisting>
- at Entity
- at Table(name="MainCat")
-<emphasis role="bold">@SecondaryTables({
-    @SecondaryTable(name="Cat1", pkJoinColumns={
-        @PrimaryKeyJoinColumn(name="cat_id", referencedColumnName="id")
-    ),
-    @SecondaryTable(name="Cat2", uniqueConstraints={@UniqueConstraint(columnNames={"storyPart2"})})
-})</emphasis>
-public class Cat implements Serializable {
-
-    private Integer id;
-    private String name;
-    private String storyPart1;
-    private String storyPart2;
-
-    @Id @GeneratedValue
-    public Integer getId() {
-        return id;
-    }
-
-    public String getName() {
-        return name;
-    }
-    
-    <emphasis role="bold">@Column(table="Cat1")</emphasis>
-    public String getStoryPart1() {
-        return storyPart1;
-    }
-
-    <emphasis role="bold">@Column(table="Cat2")</emphasis>
-    public String getStoryPart2() {
-        return storyPart2;
-    }
-</programlisting>
-
-      <para>在上面这个例子中,<literal>name</literal>保存在<literal>MainCat</literal>表中,
-	  <literal>storyPart1</literal>保存在<literal>Cat1</literal>表中,
-	  <literal>storyPart2</literal>保存在<literal>Cat2</literal>表中.
-	  <literal>Cat1</literal>表通过外键<literal>cat_id</literal>和<literal>MainCat</literal>表关联,
-	  <literal>Cat2</literal>表通过<literal>id</literal>列和<literal>MainCat</literal>表关联
-	  (和<literal>MainCat</literal>的<literal>id</literal>列同名).
-	  对<literal>storyPart2</literal>列还定义了唯一约束.</para>
-
-      <para>在JBoss EJB 3指南和Hibernate Annotations单元测试代码中还有更多的例子.</para>
-    </sect2>
-  </sect1>
-
-  <sect1 id="entity-mapping-query">
-    <title>映射查询</title>
-
-    <sect2>
-      <title>映射EJBQL/HQL查询</title>
-
-      <para>使用注解还可以映射EJBQL/HQL查询.
-	  <literal>@NamedQuery</literal> 和<literal>@NamedQueries</literal>是可使用在类和包上的注解.
-	  但是它们的定义在session factory/entity manager factory范围中是都可见的.
-	  命名式查询通过它的名字和实际的查询字符串来定义.</para>
-
-      <programlisting>
-javax.persistence.NamedQueries(
-    @javax.persistence.NamedQuery(name="plane.getAll", query="select p from Plane p")
-)
-package org.hibernate.test.annotations.query;
-
-...
-
- at Entity
- at NamedQuery(name="night.moreRecentThan", query="select n from Night n where n.date &gt;= :date")
-public class Night {
-    ...
-}
-
-public class MyDao {
-    doStuff() {
-        Query q = s.getNamedQuery("night.moreRecentThan");
-        q.setDate( "date", aMonthAgo );
-        List results = q.list();
-        ...
-    }
-    ...
-}
-        </programlisting>
-
-      <para>还可以通过定义 <literal>QueryHint</literal> 数组的<literal>hints</literal>
-	  属性为查询提供一些hint信息.</para>
-
-      <para>下面是目前可以使用的一些Hibernate hint:</para>
-
-      <para></para>
-
-      <table>
-        <title>Query hints</title>
-
-        <tgroup cols="2">
-          <thead>
-            <colspec colname="c1" />
-
-            <colspec colname="c2" colnum="2" />
-
-            <row>
-              <entry>hint</entry>
-
-              <entry colname="c2">description</entry>
-            </row>
-          </thead>
-
-          <tbody>
-            <row>
-              <entry>org.hibernate.cacheable</entry>
-
-              <entry>查询是否与二级缓存交互(默认值为false)
-	      </entry>
-            </row>
-
-            <row>
-              <entry>org.hibernate.cacheRegion</entry>
-
-              <entry>设置缓存区名称 (默认为otherwise)</entry>
-            </row>
-
-            <row>
-              <entry>org.hibernate.timeout</entry>
-
-              <entry>查询超时设定</entry>
-            </row>
-
-            <row>
-              <entry>org.hibernate.fetchSize</entry>
-
-              <entry>所获取的结果集(resultset)大小</entry>
-            </row>
-
-            <row>
-              <entry>org.hibernate.flushMode</entry>
-
-              <entry>本次查询所用的刷新模式</entry>
-            </row>
-
-            <row>
-              <entry>org.hibernate.cacheMode</entry>
-
-              <entry>本次查询所用的缓存模式</entry>
-            </row>
-
-            <row>
-              <entry>org.hibernate.readOnly</entry>
-
-              <entry>是否将本次查询所加载的实体设为只读(默认为false)
-	      </entry>
-            </row>
-
-            <row>
-              <entry>org.hibernate.comment</entry>
-
-              <entry>将查询注释添加入所生成的SQL</entry>
-            </row>
-          </tbody>
-        </tgroup>
-      </table>
-    </sect2>
-
-    <sect2 id="entity-mapping-query-native" revision="2">
-      <title>映射本地化查询</title>
-
-      <para>你还可以映射本地化查询(也就是普通SQL查询).
-	  不过这需要你使用<literal>@SqlResultSetMapping</literal>注解来描述SQL的resultset的结构
-	  (如果你打算定义多个结果集映射,可是使用<literal>@SqlResultSetMappings</literal>).
-	  <literal>@SqlResultSetMapping</literal>和<literal>@NamedQuery</literal>,
-	  <literal>@SqlResultSetMapping</literal>一样,可以定义在类和包一级.
-	  但是<literal>@SqlResultSetMapping</literal>的作用域为应用级.
-	  下面我们会看到,<literal>@NamedNativeQuery</literal> 注解中
-	  <literal>resultSetMapping</literal>参数值为<literal>@SqlResultSetMapping</literal>的名字.
-	  结果集映射定义了通过本地化查询返回值和实体的映射.
-	  该实体中的每一个字段都绑定到SQL结果集中的某个列上.
-	  该实体的所有字段包括子类的所有字段以及
-	  关联实体的外键列都必须在SQL查询中有对应的定义.
-	  如果实体中的属性和SQL查询中的列名相同,这种情况下可以不进行定义字段映射.</para>
-
-      <para><programlisting>@NamedNativeQuery(name="night&amp;area", query="select night.id nid, night.night_duration, "
-    + " night.night_date, area.id aid, night.area_id, area.name "
-    + "from Night night, Area area where night.area_id = area.id", <emphasis
-            role="bold">resultSetMapping="joinMapping"</emphasis>)
- at SqlResultSetMapping(name="joinMapping", entities={
-    @EntityResult(entityClass=org.hibernate.test.annotations.query.Night.class, fields = {
-        @FieldResult(name="id", column="nid"),
-        @FieldResult(name="duration", column="night_duration"),
-        @FieldResult(name="date", column="night_date"),
-        @FieldResult(name="area", column="area_id"),
-        discriminatorColumn="disc"
-    }),
-    @EntityResult(entityClass=org.hibernate.test.annotations.query.Area.class, fields = {
-        @FieldResult(name="id", column="aid"),
-        @FieldResult(name="name", column="name")
-    })
-    }
-)</programlisting></para>
-
-      <para>在上面这个例子中,名为<literal>night&amp;area</literal>的查询
-	  和<literal>joinMapping</literal>结果集映射对应.
-	  该映射返回两个实体,分别为<literal>Night</literal> 
-	  和<literal>Area</literal>,其中每个属性都和一个列关联,
-	  列名通过查询获取.下面我们看一个隐式声明属性和列映射关系的例子.</para>
-
-      <programlisting>@Entity
-<emphasis role="bold">@SqlResultSetMapping(name="implicit", entities=@EntityResult(entityClass=org.hibernate.test.annotations.query.SpaceShip.class))
- at NamedNativeQuery(name="implicitSample", query="select * from SpaceShip", resultSetMapping="implicit")</emphasis>
-public class SpaceShip {
-    private String name;
-    private String model;
-    private double speed;
-
-    @Id
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    @Column(name="model_txt")
-    public String getModel() {
-        return model;
-    }
-
-    public void setModel(String model) {
-        this.model = model;
-    }
-
-    public double getSpeed() {
-        return speed;
-    }
-
-    public void setSpeed(double speed) {
-        this.speed = speed;
-    }
-}</programlisting>
-
-      <para>在这个例子中,我们只需要定义结果集映射中的实体成员.
-	  属性和列名之间的映射借助实体中包含映射信息来完成.
-	  在这个例子中,<literal>model</literal>属性绑定到<literal>model_txt</literal>列.
-	  如果和相关实体的关联设计到组合主键,
-	  那么应该使用<literal>@FieldResult</literal>注解来定义每个外键列.
-	  <literal>@FieldResult</literal>的名字由以下几部分组成:
-	  定义这种关系的属性名字+"."+主键名或主键列或主键属性.</para>
-
-      <programlisting>@Entity
- at SqlResultSetMapping(name="compositekey",
-        entities=@EntityResult(entityClass=org.hibernate.test.annotations.query.SpaceShip.class,
-            fields = {
-                    @FieldResult(name="name", column = "name"),
-                    @FieldResult(name="model", column = "model"),
-                    @FieldResult(name="speed", column = "speed"),
-<emphasis role="bold">                    @FieldResult(name="captain.firstname", column = "firstn"),
-                    @FieldResult(name="captain.lastname", column = "lastn"),</emphasis>
-                    @FieldResult(name="dimensions.length", column = "length"),
-                    @FieldResult(name="dimensions.width", column = "width")
-                    }),
-        columns = { @ColumnResult(name = "surface"),
-                    @ColumnResult(name = "volume") } )
-
- at NamedNativeQuery(name="compositekey",
-    query="select name, model, speed, lname as lastn, fname as firstn, length, width, length * width as surface from SpaceShip", 
-    resultSetMapping="compositekey")
-} )
-public class SpaceShip {
-    private String name;
-    private String model;
-    private double speed;
-    private Captain captain;
-    private Dimensions dimensions;
-
-    @Id
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    @ManyToOne(fetch= FetchType.LAZY)
-    @JoinColumns( {
-            @JoinColumn(name="fname", referencedColumnName = "firstname"),
-            @JoinColumn(name="lname", referencedColumnName = "lastname")
-            } )
-    public Captain getCaptain() {
-        return captain;
-    }
-
-    public void setCaptain(Captain captain) {
-        this.captain = captain;
-    }
-
-    public String getModel() {
-        return model;
-    }
-
-    public void setModel(String model) {
-        this.model = model;
-    }
-
-    public double getSpeed() {
-        return speed;
-    }
-
-    public void setSpeed(double speed) {
-        this.speed = speed;
-    }
-
-    public Dimensions getDimensions() {
-        return dimensions;
-    }
-
-    public void setDimensions(Dimensions dimensions) {
-        this.dimensions = dimensions;
-    }
-}
-
- at Entity
- at IdClass(Identity.class)
-public class Captain implements Serializable {
-    private String firstname;
-    private String lastname;
-
-    @Id
-    public String getFirstname() {
-        return firstname;
-    }
-
-    public void setFirstname(String firstname) {
-        this.firstname = firstname;
-    }
-
-    @Id
-    public String getLastname() {
-        return lastname;
-    }
-
-    public void setLastname(String lastname) {
-        this.lastname = lastname;
-    }
-}
-</programlisting>
-
-      <note>
-
-		<para>观察dimension属性你会发现Hibernate支持用"."符号来表示嵌入式对象.
-		EJB3实现不必支持这个特征,但是我们做到了:-)</para>
-      </note>
-
-      <para>如果查询返回的是单个实体,或者你打算使用系统默认的映射,
-	  这种情况下可以不使用<literal>resultSetMapping</literal>
-	  而是使用<literal>resultClass</literal>属性:</para>
-
-      <programlisting><emphasis role="bold">@NamedNativeQuery(name="implicitSample", query="select * from SpaceShip", 
-    resultClass=SpaceShip.class)</emphasis>
-public class SpaceShip {</programlisting>
-
-      <para>某些本地查询返回的是scalar值,例如报表查询.
-	  你可以通过<literal>@ColumnResult</literal>将其映射到
-	  <literal>@SqlResultsetMapping</literal>上.
-	  甚至还可以在同一个本地查询的结果中混合实体和scalar类型(不过这种情况比较少见).</para>
-
-      <programlisting><emphasis role="bold">@SqlResultSetMapping(name="scalar", columns=@ColumnResult(name="dimension"))
- at NamedNativeQuery(name="scalar", query="select length*width as dimension from SpaceShip", resultSetMapping="scalar")</emphasis></programlisting>
-
-      <para>本地查询中还有另外一个hint属性:
-	  <literal>org.hibernate.callable</literal>.
-	  这个属性的布尔变量值表明这个查询是否是一个存储过程.</para>
-    </sect2>
-  </sect1>
-
-  <sect1 id="entity-hibspec" xreflabel="Hibernate Annotation Extensions">
-    <title>Hibernate独有的注解扩展</title>
-
-    <para>Hibernate 3.1 提供了多种附加的注解,这些注解可以与EJB3的实体混合/匹配使用.
-    他们被设计成EJB3注解的自然扩展.</para>
-
-    <para>为了强化EJB3的能力,Hibernate提供了与其自身特性相吻合的特殊注解.
-    <classname>org.hibernate.annotations</classname>包已包含了所有的这些注解扩展.</para>
-
-    <sect2 id="entity-hibspec-entity" revision="2">
-      <title>实体</title>
-
-      <para>你可以在EJB3规范所能提供的能力之外,就Hibernate对实体所做的一些操作进行优化.</para>
-
-      <para><classname>@org.hibernate.annotations.Entity</classname>
-      追加了可能需要的额外的元数据,
-      而这些元数据超出了标准<literal>@Entity</literal> 中所定义的元数据. 
-		<itemizedlist>
-          <listitem>
-             mutable: 此实体是否为可变的
-          </listitem>
-
-          <listitem>
-             dynamicInsert: 用动态SQL新增
-          </listitem>
-
-          <listitem>
-             dynamicUpdate: 用动态SQL更新
-          </listitem>
-
-          <listitem>
-             selectBeforeUpdate: 指明Hibernate从不运行SQL UPDATE除非能确定对象的确已被修改
-          </listitem>
-
-          <listitem>
-             polymorphism: (指出)实体多态是PolymorphismType.IMPLICIT(默认)还是PolymorphismType.EXPLICIT 
-		  </listitem>
-
-		  <listitem>
-             persister:允许对默认持久实现(persister implementation)的覆盖
-		  </listitem>         
-
-          <listitem>
-             optimisticLock: 乐观锁策略(OptimisticLockType.VERSION, OptimisticLockType.NONE, OptimisticLockType.DIRTY或OptimisticLockType.ALL)
-          </listitem>
-        </itemizedlist>
-	  </para>
-
-      <para>
-		<note>
-			<para>
-				@javax.persistence.Entity仍是必选的(mandatory),
-				@org.hibernate.annotations.Entity不是取代品.
-			</para>
-        </note>
-	  </para>
-
-      <para>以下是一些附加的Hibernate注解扩展:</para>
-
-      <para><literal>@org.hibernate.annotations.BatchSize</literal> 
-		允许你定义批量获取该实体的实例数量(如:<literal>@BatchSize(size=4)</literal>).
-      当加载一特定的实体时,Hibernate将加载在持久上下文中未经初始化的同类型实体,直至批量数量(上限).</para>
-
-      <para><literal>@org.hibernate.annotations.Proxy</literal>
-      定义了实体的延迟属性.Lazy(默认为true)定义了类是否为延迟(加载).
-      proxyClassName是用来生成代理的接口(默认为该类本身).</para>
-
-      <para><literal>@org.hibernate.annotations.Where</literal>
-		定义了当获取类实例时所用的SQL WHERE子句(该SQL WHERE子句为可选).</para>
-
-      <para><literal>@org.hibernate.annotations.Check</literal>
-      定义了在DDL语句中定义的合法性检查约束(该约束为可选).</para>
-
-      <para><literal>@OnDelete(action=OnDeleteAction.CASCADE)</literal>
-      定义于被连接的子类(joined subclass):在删除时使用SQL级连删除,而非通常的Hibernate删除机制.</para>
-
-      <para><literal>@Table(name="tableName", indexes = {
-      @Index(name="index1", columnNames={"column1", "column2"} ) } )</literal>
-	  在<literal>tableName</literal>表的列上创建定义好的索引.
-	  该注解可以被应用于关键表或者是其他次要的表.
-      <literal>@Tables</literal> 注解允许你在不同的表上应用索引.
-      此注解预期在使用
-      <literal>@javax.persistence.Table</literal>或
-      <literal>@javax.persistence.SecondaryTable</literal>的地方中出现.</para>
-
-      <note>
-        <para>
-		<literal>@org.hibernate.annotations.Table</literal> 是对
-        <literal>@javax.persistence.Table</literal>的补充而不是它的替代品.
-		特别是当你打算改变表名的默认值的时候,你必须使用<literal>@javax.persistence.Table</literal>,
-		而不是<literal>@org.hibernate.annotations.Table</literal>.</para>
-      </note>
-
-            <para><programlisting>@Entity
- at BatchSize(size=5)
- at org.hibernate.annotations.Entity(
-        selectBeforeUpdate = true,
-        dynamicInsert = true, dynamicUpdate = true,
-        optimisticLock = OptimisticLockType.ALL,
-        polymorphism = PolymorphismType.EXPLICIT)
- at Where(clause="1=1")
- at org.hibernate.annotations.Table(name="Forest", indexes = { @Index(name="idx", columnNames = { "name", "length" } ) } )
-public class Forest { ... }</programlisting><programlisting>@Entity
- at Inheritance(
-    strategy=InheritanceType.JOINED
-)
-public class Vegetable { ... }
-
- at Entity
- at OnDelete(action=OnDeleteAction.CASCADE)
-public class Carrot extends Vegetable { ... }</programlisting></para>
-    </sect2>
-
-    <sect2>
-      <title>标识符</title>
-
-      <para><literal><literal>@org.hibernate.annotations.GenericGenerator</literal>
-      允许你定义一个Hibernate特定的id生成器.</literal></para>
-
-      <para><programlisting>@Id @GeneratedValue(generator="system-uuid")
- at GenericGenerator(name="system-uuid", strategy = "uuid")
-public String getId() {
-
- at Id @GeneratedValue(generator="hibseq")
- at GenericGenerator(name="hibseq", strategy = "seqhilo",
-    parameters = {
-        @Parameter(name="max_lo", value = "5"),
-        @Parameter(name="sequence", value="heybabyhey")
-    }
-)
-public Integer getId() {</programlisting></para>
-
-	<para><literal>strategy</literal>可以是Hibernate3生成器策略的简称,
-	或者是一个<classname>IdentifierGenerator</classname>实现的(带包路径的)全限定类名.
-	你可以通过<literal>parameters</literal>属性增加一些参数.</para>
-</sect2>
-
-<sect2 id="entity-hibspec-property" revision="2">
-      <title>属性</title>
-
-      <sect3>
-        <title>访问类型</title>
-
-	<para>访问类型是根据<literal>@Id</literal>或<literal>@EmbeddedId</literal>
-	在实体继承层次中所处的位置推演而得的.子实体(Sub-entities),
-	内嵌对象和被映射的父类均继承了根实体(root entity)的访问类型.</para>
-
-	<para>在Hibernate中,你可以把访问类型覆盖成:</para>
-
-        <itemizedlist>
-          <listitem>
-            <para>使用定制的访问类型策略</para>
-          </listitem>
-
-          <listitem>
-            <para>优化类级或属性级的访问类型</para>
-          </listitem>
-        </itemizedlist>
-
-        <para>为支持这种行为,Hibernate引入了@AccessType注解.你可以对以下元素定义访问类型:</para>
-
-        <itemizedlist>
-          <listitem>
-            <para>实体</para>
-          </listitem>
-
-          <listitem>
-            <para>父类</para>
-          </listitem>
-
-          <listitem>
-            <para>可内嵌的对象</para>
-          </listitem>
-
-          <listitem>
-            <para>属性</para>
-          </listitem>
-        </itemizedlist>
-
-		<para>被注解元素的访问类型会被覆盖,若覆盖是在类一级上,则所有的属性继承访问类型.
-		对于根实体,其访问类型会被认为是整个继承层次中的缺省设置(可在类或属性一级覆盖).</para>
-
-		<para>若访问类型被标以"property",则Hibernate会扫描getter方法的注解,若访问类型被标以"field",
-		则扫描字段的注解.否则,扫描标为@Id或@embeddedId的元素.</para>
-
-		<para>你可以覆盖某个属性(property)的访问类型,但是受注解的元素将不受影响:
-			例如一个具有field访问类型的实体,(我们)可以将某个字段标注为 @AccessType("property"),
-			则该字段的访问类型随之将成为property,但是其他字段上依然需要携带注解.</para>
-
-		<para>若父类或可内嵌的对象没有被注解,则使用根实体的访问类型(即使已经在非直系父类或可内嵌对象上定义了访问类型).
-			此时俄罗斯套娃(Russian doll)原理就不再适用.(译注:俄罗斯套娃(матрёшка或 матрешка)是俄罗斯特产木制玩具,
-			一般由多个一样图案的空心木娃娃一个套一个组成,最多可达十多个,通常为圆柱形,底部平坦可以直立.)</para>
-
-<programlisting>@Entity
-public class Person implements Serializable {
-    @Id  @GeneratedValue //access type field
-    Integer id;
-
-    @Embedded
-    @AttributeOverrides({
-    @AttributeOverride(name = "iso2", column = @Column(name = "bornIso2")),
-    @AttributeOverride(name = "name", column = @Column(name = "bornCountryName"))
-            })
-    Country bornIn;
-}
-
- at Embeddable
-<emphasis role="bold">@AccessType("property")</emphasis> //override access type for all properties in Country
-public class Country implements Serializable {
-    private String iso2;
-    private String name;
-
-    public String getIso2() {
-        return iso2;
-    }
-
-    public void setIso2(String iso2) {
-        this.iso2 = iso2;
-    }
-
-    @Column(name = "countryName")
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-}
-</programlisting>
-      </sect3>
-
-      <sect3>
-        <title>公式</title>
-
-		<para>有时候,你想让数据库,而非JVM,来替你完成一些计算,也可能想创建某种虚拟列.
-		你可以使用SQL片段(亦称为公式),而不是将属性映射到(物理)列. 这种属性是只读的(属性值由公求得).</para>
-		
-		<programlisting>@Formula("obj_length * obj_height * obj_width")
-		public long getObjectVolume()</programlisting>
-		
-		
-		<para>SQL片段可以是任意复杂的,甚至可包含子查询.</para>
-      </sect3>
-
-      <sect3>
-        <title>类型</title>
-
-        <para><literal>@org.hibernate.annotations.Type</literal>
-		覆盖了Hibernate所用的默认类型:这通常不是必须的,因为类型可以由Hibernate正确推得.
-		关于Hibernate类型的详细信息,请参考Hibernate使用手册.</para>
-
-        <para><literal>@org.hibernate.annotations.TypeDef</literal> 和
-		 <literal>@org.hibernate.annotations.TypeDefs</literal>允许你来声明类型定义.
-		这些注解被置于类或包一级.注意,对session factory来说,
-		这些定义将是全局的(即使定义于类一级),并且类型定义必须先于任何使用.</para>
-
-        <programlisting>@TypeDefs(
-    {
-    @TypeDef(
-        name="caster",
-        typeClass = CasterStringType.class,
-        parameters = {
-            @Parameter(name="cast", value="lower")
-        }
-    )
-    }
-)
-package org.hibernate.test.annotations.entity;
-
-...
-public class Forest {
-    @Type(type="caster")
-    public String getSmallText() {
-    ...
-}
-         </programlisting>
-
-        <para>当使用组合的用户自定义类型时,你必须自己表示列的定义.
-<literal>@Columns</literal>就是为了此目的而引入的.</para>
-<programlisting>@Type(type="org.hibernate.test.annotations.entity.MonetaryAmountUserType")
- at Columns(columns = {
-    @Column(name="r_amount"),
-    @Column(name="r_currency")
-})
-public MonetaryAmount getAmount() {
-    return amount;
-}
-
-
-public class MonetaryAmount implements Serializable {
-    private BigDecimal amount;
-    private Currency currency;
-    ...
-}</programlisting>
-      </sect3>
-
-      <sect3>
-        <title>索引</title>
-
-        <para>通过在列属性(property)上使用<literal>@Index</literal>注解,
-		可以在特定列上定义索引,columnNames属性(attribute)将随之被忽略.</para>
-
-        <programlisting>@Column(secondaryTable="Cat1")
- at Index(name="story1index")
-public String getStoryPart1() {
-    return storyPart1;
-}</programlisting>
-      </sect3>
-
-      <sect3>
-        <title>@Parent</title>
-
-		<para>在嵌入式对象内部,你可以在那些指向该嵌入式对象所属元素的属性上定义该注解.</para>
-
-        <programlisting>@Entity
-public class Person {
-    @Embeddable public Address address;
-    ...
-}
-
- at Embeddable
-public class Address {
-    @Parent public Person owner;
-    ...
-}
-
-
-person == person.address.owner</programlisting>
-      </sect3>
-
-      <sect3>
-        <title>生成的属性</title>
-
-        <para>
-		某些属性可以在对数据库做插入或更新操作的时候生成.
-		Hibernate能够处理这样的属性,并触发一个后续的查询来读取这些属性.
-		</para>
-
-        <programlisting>@Entity
-public class Antenna {
-    @Id public Integer id;
-    @Generated(GenerationTime.ALWAYS) @Column(insertable = false, updatable = false)
-    public String longitude;
-
-    @Generated(GenerationTime.INSERT) @Column(insertable = false)
-    public String latitude;
-}</programlisting>
-
-        <para>
-		你可以将属性注解为<literal>@Generated</literal>.
-		但是你要注意insertability和updatability不要和你选择的生成策略冲突.
-		如果选择了GenerationTime.INSERT,该属性不能包含insertable列,
-		如果选择了GenerationTime.ALWAYS,该属性不能包含insertable和updatable列.</para>
-
-        <para><literal>@Version</literal>属性不可以为
-        <literal>@Generated(INSERT)</literal>(设计时), 只能是
-        <literal>NEVER</literal>或<literal>ALWAYS</literal>.</para>
-      </sect3>
-
-    </sect2>
-
-    <sect2>
-      <title>继承</title>
-
-      <para>SINGLE_TABLE 是个功能强大的策略,但有时,特别对遗留系统而言,
-		是无法加入一个额外的辨别符列.
-		由此,Hibernate引入了辨别符公式(discriminator formula)的概念:
-		<literal>@DiscriminatorFormula</literal>是<literal>@DiscriminatorColumn</literal>的替代品,
-		它使用SQL片段作为辨别符解决方案的公式( 不需要有一个专门的字段).</para>
-
-      <programlisting>@Entity
- at DiscriminatorForumla("case when forest_type is null then 0 else forest_type end")
-public class Forest { ... }</programlisting>
-    </sect2>
-
-    <sect2>
-      <title>关于单个关联关系的注解</title>
-
-      <para>默认情况下,当预期的被关联元素不在数据库中(关乎关联列的错误id),致使Hiberante无法解决关联性问题时,Hibernate就会抛出异常.
-      这对遗留schema和历经拙劣维护的schema而言,这或有许多不便.
-      此时,你可用 <literal>@NotFound </literal>注解让Hibernate略过这样的元素而不是抛出异常.
-      该注解可用于 <literal>@OneToOne </literal> (有外键)、 <literal>@ManyToOne </literal>、  
-      <literal>@OneToMany </literal> 或 <literal>@ManyToMany </literal>关联.</para>
-
-      <programlisting>@Entity
-public class Child {
-    ...
-    @ManyToOne
-    @NotFound(action=NotFoundAction.IGNORE)
-    public Parent getParent() { ... }
-    ...
-}</programlisting>
-
-      <para>
-	  有时候删除某实体的时候需要触发数据库的级联删除.</para>
-
-      <programlisting>@Entity
-public class Child {
-    ...
-    @ManyToOne
-    @OnDelete(action=OnDeleteAction.CASCADE)
-    public Parent getParent() { ... }
-    ...
-}</programlisting>
-
-      <para>上面这个例子中,Hibernate将生成一个数据库级的级联删除约束.</para>
-
-      <sect3>
-        <title>延迟选项和获取模式</title>
-
-        <para>
-		EJB3为延迟加载和获取模式提供了<literal>fetch</literal>选项,而Hibernate
-		这方面提供了更丰富的选项集.为了更好的调整延迟加载和获取策略,Hibernate引入了
-		一些附加的注解:</para>
-
-        <itemizedlist>
-          <listitem>
-            <para><literal>@LazyToOne</literal>: 定义了
-             <literal>@ManyToOne</literal> 和 <literal>@OneToOne</literal>
-            关联的延迟选项. <literal>LazyToOneOption</literal> 可以是
-            <literal>PROXY</literal> (例如:基于代理的延迟加载),
-            <literal>NO_PROXY</literal> (例如:基于字节码增强的延迟加载 - 注意需要在构建期处理字节码)
-            和 <literal>FALSE</literal> (非延迟加载的关联)</para>
-		  </listitem>
-
-          <listitem>
-            <para><literal>@LazyCollection</literal>: 定义了
-            <literal>@ManyToMany</literal>和
-            <literal>@OneToMany</literal>  关联的延迟选项. LazyCollectionOption
-            可以是<literal>TRUE</literal> (集合具有延迟性,只有在访问的时候才加载), 
-			<literal>EXTRA</literal> (集合具有延迟性,并且所有的操作都会尽量避免加载集合,
-			对于一个巨大的集合特别有用,因为这样的集合中的元素没有必要全部加载)和 FALSE
-            (非延迟加载的关联)</para>
-          </listitem>
-
-          <listitem>
-			<para><literal>@Fetch</literal>: 
-			定义了加载关联关系的获取策略. <literal>FetchMode</literal> 可以是
-            <literal>SELECT</literal> (在需要加载关联的时候触发select操作), 
-			<literal>SUBSELECT</literal>
-            (只对集合有效,使用了子查询策略,详情参考Hibernate参考文档) or 
-			<literal>JOIN</literal> (在加载主实体(owner entity)的时候使用SQL JOIN来加载关联关系).
-            <literal>JOIN</literal> 将覆写任何延迟属性 
-			(通过<literal>JOIN</literal>策略加载的关联将不再具有延迟性).</para>
-          </listitem>
-        </itemizedlist>
-
-        <para>The Hibernate annotations overrides the EJB3 fetching
-        options.</para>
-
-		<para>Hibernate注解覆写了EJB3提供的获取(fetch)选项.</para>
-
-        <table>
-          <title>延迟和获取选项的等效注解</title>
-
-          <tgroup cols="3">
-            <thead>
-              <row>
-                <entry>Annotations</entry>
-
-                <entry>Lazy</entry>
-
-                <entry>Fetch</entry>
-              </row>
-            </thead>
-
-            <tbody>
-              <row>
-                <entry>@[One|Many]ToOne](fetch=FetchType.LAZY)</entry>
-
-                <entry>@LazyToOne(PROXY)</entry>
-
-                <entry>@Fetch(SELECT)</entry>
-              </row>
-
-              <row>
-                <entry>@[One|Many]ToOne](fetch=FetchType.EAGER)</entry>
-
-                <entry>@LazyToOne(FALSE)</entry>
-
-                <entry>@Fetch(JOIN)</entry>
-              </row>
-
-              <row>
-                <entry>@ManyTo[One|Many](fetch=FetchType.LAZY)</entry>
-
-                <entry>@LazyCollection(TRUE)</entry>
-
-                <entry>@Fetch(SELECT)</entry>
-              </row>
-
-              <row>
-                <entry>@ManyTo[One|Many](fetch=FetchType.EAGER)</entry>
-
-                <entry>@LazyCollection(FALSE)</entry>
-
-                <entry>@Fetch(JOIN)</entry>
-              </row>
-            </tbody>
-          </tgroup>
-        </table>
-      </sect3>
-
-
-    </sect2>
-
-    <sect2 id="entity-hibspec-collection" revision="2">
-      <title>关于集合类型的注解</title>
-
-      <sect3>
-        <title>参数注解</title>
-
-        <para>以下是可能的设置方式<itemizedlist>
-            <listitem>
-               用@BatchSizebatch设置集合的batch大小 
-            </listitem>
-
-            <listitem>
-               用@Where注解设置Where子句
-            </listitem>
-
-            <listitem>
-               用注解@Check来设置check子句
-            </listitem>
-
-            <listitem>
-               用注解@OrderBy来设置SQL的order by子句
-            </listitem>
-
-            <listitem>
-               利用@OnDelete(action=OnDeleteAction.CASCADE) 注解设置级连删除策略
-            </listitem>
-          </itemizedlist></para>
-
-        <para>你也可以利用<literal>@Sort</literal>注解定义一个排序比较器(sort comparator),
-		表明希望的比较器类型,无序、自然顺序或自定义排序,三者择一.若你想用你自己实现的comparator,
-		你还需要利用<literal>comparator</literal>属性(attribute)指明实现类.</para>
-
-        <programlisting>    @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
-    @JoinColumn(name="CUST_ID")
-    @Sort(type = SortType.COMPARATOR, comparator = TicketComparator.class)
-    @Where(clause="1=1")
-    @OnDelete(action=OnDeleteAction.CASCADE)
-    public SortedSet&lt;Ticket&gt; getTickets() {
-        return tickets;
-    }</programlisting>
-
-        <para>关于这些注解更详细的信息,请参阅此前的描述.</para>
-
-      </sect3>
-
-      <sect3>
-        <title>更多的集合类型</title>
-
-        <para>比EJB3更胜一筹的是,Hibernate Annotations支持真正的
-			<classname>List</classname>和<classname>Array</classname>.
-			映射集合的方式和以前完全一样,只不过要新增<literal>@IndexColumn</literal>注解.
-			该注解允许你指明存放索引值的字段.你还可以定义代表数据库中首个元素的索引值(亦称为索引基数).
-			常见取值为<literal>0</literal>或<literal>1</literal>.</para>
-
-        <programlisting>@OneToMany(cascade = CascadeType.ALL)
- at IndexColumn(name = "drawer_position", base=1)
-public List&lt;Drawer&gt; getDrawers() {
-    return drawers;
-}</programlisting>
-
-        <note>
-          <para>假如你忘了设置<literal>@IndexColumn</literal>,
-			Hibernate会采用包(bag)语义(译注:即允许重复元素的无序集合).</para>
-        </note>
-
-        <para>Hibernate注解支持true Map映射,
-		如果没有设置<literal>@javax.persistence.MapKey</literal>,
-		hibernate将key元素或嵌入式对象直接映射到他们所属的列.
-		要覆写默认的列,可以使用以下注解:
-		<literal>@org.hibernate.annotations.MapKey</literal>适用的key为基本类型或者嵌入式对象,
-		<literal>@org.hibernate.annotations.MapKey</literal>适用的key为实体.
-        </para>
-
-        <para>Hibernate Annotations还支持核心类型集合(Integer, String, Enums, ......)、
-		可内嵌对象的集合,甚至基本类型数组.这就是所谓的元素集合.</para>
-
-        <para>元素集合可用@CollectionOfElements来注解(作为@OneToMany的替代).
-		为了定义集合表(译注:即存放集合元素的表,与下面提到的主表对应),要在关联属性上使用@JoinTable注解,
-		joinColumns定义了介乎实体主表与集合表之间的连接字段(inverseJoincolumn是无效的且其值应为空).
-		对于核心类型的集合或基本类型数组,你可以在关联属性上用<literal>@Column</literal>来覆盖存放元素值的字段的定义.
-		你还可以用<literal>@AttributeOverride</literal>来覆盖存放可内嵌对象的字段的定义.
-		要访问集合元素,需要将该注解的name属性值设置为"element"("element"用于核心类型,而"element.serial"
-		用于嵌入式对象的serial属性).要访问集合的index/key,则将该注解的name属性值设置为"key".
-		</para>
-
-        <programlisting>@Entity
-public class Boy {
-    private Integer id;
-    private Set&lt;String&gt; nickNames = new HashSet&lt;String&gt;();
-    private int[] favoriteNumbers;
-    private Set&lt;Toy&gt; favoriteToys = new HashSet&lt;Toy&gt;();
-    private Set&lt;Character&gt; characters = new HashSet&lt;Character&gt;();
-
-    @Id @GeneratedValue
-    public Integer getId() {
-        return id;
-    }
-
-    <emphasis role="bold">@CollectionOfElements
-    public Set&lt;String&gt;</emphasis> getNickNames() {
-        return nickNames;
-    }
-
-    <emphasis role="bold">@CollectionOfElements
-    @JoinTable(
-            table=@Table(name="BoyFavoriteNumbers"),
-            joinColumns = @JoinColumn(name="BoyId")
-    )
-    @Column(name="favoriteNumber", nullable=false)</emphasis>
-    @IndexColumn(name="nbr_index")
-    public int[] getFavoriteNumbers() {
-        return favoriteNumbers;
-    }
-
-    <emphasis role="bold">@CollectionOfElements
-    @AttributeOverride( name="element.serial", column=@Column(name="serial_nbr") )</emphasis>
-    public Set&lt;Toy&gt; getFavoriteToys() {
-        return favoriteToys;
-    }
-
-    <emphasis role="bold">@CollectionOfElements
-    public Set&lt;Character&gt;</emphasis> getCharacters() {
-        return characters;
-    }
-    ...
-}
-
-public enum Character {
-    GENTLE,
-    NORMAL,
-    AGGRESSIVE,
-    ATTENTIVE,
-    VIOLENT,
-    CRAFTY
-}
-
- at Embeddable
-public class Toy {
-    public String name;
-    public String serial;
-    public Boy owner;
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getSerial() {
-        return serial;
-    }
-
-    public void setSerial(String serial) {
-        this.serial = serial;
-    }
-
-    <emphasis role="bold">@Parent</emphasis>
-    public Boy getOwner() {
-        return owner;
-    }
-
-    public void setOwner(Boy owner) {
-        this.owner = owner;
-    }
-
-
-    public boolean equals(Object o) {
-        if ( this == o ) return true;
-        if ( o == null || getClass() != o.getClass() ) return false;
-
-        final Toy toy = (Toy) o;
-
-        if ( !name.equals( toy.name ) ) return false;
-        if ( !serial.equals( toy.serial ) ) return false;
-
-        return true;
-    }
-
-    public int hashCode() {
-        int result;
-        result = name.hashCode();
-        result = 29 * result + serial.hashCode();
-        return result;
-    }
-}</programlisting>
-
-		<para>
-		在嵌入式对象的集合中,可以使用 <literal>@Parent</literal>注解嵌入式对象的某属性.
-		该属性指向该嵌入式对象所属的集合实体.</para>
-
-        <note>
-		  <para>旧版的Hibernate Annotations用<literal>@OneToMany</literal>来标识集合元素.
-			由于语义矛盾,我们引入了<literal>@CollectionOfElements</literal>注解.
-			用<literal>@OneToMany</literal>来标识集合元素的这种旧有方式目前尚有效,
-			但是不推荐使用,而且在以后的发布版本中不再支持这种方式.</para>
-        </note>
-      </sect3>
-    </sect2>
-
-    <sect2>
-      <title>缓存</title>
-
-      <para>为了优化数据库访问,你可以激活所谓的Hibernate二级缓存.该缓存是可以按每个实体和集合进行配置的.</para>
-
-      <para><literal>@org.hibernate.annotations.Cache</literal>定义了缓存策略及给定的二级缓存的范围.
-		此注解适用于根实体(非子实体),还有集合.</para>
-
-      <programlisting>@Entity
- at Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
-public class Forest { ... }</programlisting>
-
-      <programlisting>    @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
-    @JoinColumn(name="CUST_ID")
-    @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
-    public SortedSet&lt;Ticket&gt; getTickets() {
-        return tickets;
-    }</programlisting>
-
-      <para></para>
-
-      <programlistingco>
-        <areaspec>
-          <area coords="2 55" id="hm1" />
-
-          <area coords="3 55" id="hm2" />
-
-          <area coords="4 55" id="hm3" />
-        </areaspec>
-
-        <programlisting>@Cache(
-    CacheConcurrencyStrategy usage();
-    String region() default "";
-    String include() default "all";
-)</programlisting>
-
-        <calloutlist>
-          <callout arearefs="hm1">
-            <para>usage: 给定缓存的并发策略(NONE,
-            READ_ONLY, NONSTRICT_READ_WRITE, READ_WRITE, TRANSACTIONAL)</para>
-          </callout>
-
-          <callout arearefs="hm2">
-            <para>region (可选的):缓存范围(默认为类的全限定类名或是集合的全限定角色名)</para>
-          </callout>
-
-          <callout arearefs="hm3">
-            <para><literal>include</literal> (可选的):值为all时包括了所有的属性(proterty),
-            为non-lazy时仅含非延迟属性(默认值为all)</para>
-          </callout>
-        </calloutlist>
-
-      </programlistingco>
-    </sect2>
-
-    <sect2>
-      <title>过滤器</title>
-
-      <para>Hibernate具有数据过滤器的概念,可在运行期应用于一个给定的session.过滤器需要事先定义好.</para>
-
-      <para><literal>@org.hibernate.annotations.FilterDef</literal> 或
-      <literal>@FilterDefs</literal> 定义过滤器声明,为同名过滤器所用.
-      过滤器声明带有一个name()和一个parameters()数组,<literal>@ParamDef</literal>包含name和type,
-      你还可以为给定的<literal>@filterDef</literal>定义一个defaultCondition()参数,
-      当<literal>@Filter</literal>中没有任何定义时,可使用该参数定义缺省条件.
-     <literal>@FilterDef</literal> (s)可以在类或包一级进行定义.</para>
-
-      <para>现在我们来定义应用于实体或集合加载时的SQL过滤器子句.我们使用<literal>@Filter</literal>,并将其置于实体或集合元素上.</para>
-
-      <para><programlisting>@Entity
- at FilterDef(name="minLength", parameters={ @ParamDef( name="minLength", type="integer" ) } )
- at Filters( {
-    @Filter(name="betweenLength", condition=":minLength &lt;= length and :maxLength &gt;= length"),
-    @Filter(name="minLength", condition=":minLength &lt;= length")
-} )
-public class Forest { ... }</programlisting></para>
-    </sect2>
- 
-
-    <sect2>
-      <title>查询</title>
-
-      <para>由于Hibernate引入了
-      <literal>@org.hibernate.annotations.NamedQuery</literal>,
-      <literal>@org.hibernate.annotations.NamedQueries</literal>,
-      <literal>@org.hibernate.annotations.NamedNativeQuery</literal> 和
-      <literal>@org.hibernate.annotations.NamedNativeQueries</literal> 命名式查询,
-      因此Hibernate在命名式查询上比EBJ3规范中所定义的命名式查询提供了更多的特性.
-      他们在标准版中添加了可作为替代品的一些属性(attributes):</para>
-
-      <itemizedlist>
-        <listitem>
-          <para>flushMode: 定义查询的刷新模式(Always, Auto, Commit或Never)</para>
-        </listitem>
-
-        <listitem>
-          <para>cacheable: 查询该不该被缓存</para>
-        </listitem>
-
-        <listitem>
-          <para>cacheRegion: 若查询已被缓存时所用缓存的范围</para>
-        </listitem>
-
-        <listitem>
-          <para>fetchSize: 针对该查询的JDBC statement单次获取记录的数目</para>
-        </listitem>
-
-        <listitem>
-          <para>timeout: 查询超时</para>
-        </listitem>
-
-        <listitem>
-          <para>callable: 仅用于本地化查询(native query),对于存储过程设为true</para>
-        </listitem>
-
-        <listitem>
-          <para>comment: 一旦激活注释功能,我们会在向数据库交送查询请求时看到注释</para>
-        </listitem>
-
-        <listitem>
-          <para>cacheMode: 缓存交护模式(get, ignore,normal,或refresh)</para>
-        </listitem>
-
-        <listitem>
-          <para>readOnly: 不管是否从查询获取元素都是在只读模式下</para>
-        </listitem>
-      </itemizedlist>
-
-      <para>注意,EJB3已公开的最终草案中引入了<literal>@QueryHint</literal>的概念,
-      这可能是定义hints更好的方法.</para>
-    </sect2>
-  </sect1>
-
-</chapter>
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/doc/reference/zh_cn/modules/entity.xml (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/doc/reference/zh_cn/modules/entity.xml)
===================================================================
--- trunk/HibernateExt/annotations/doc/reference/zh_cn/modules/entity.xml	                        (rev 0)
+++ trunk/HibernateExt/annotations/doc/reference/zh_cn/modules/entity.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,2857 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<chapter id="entity">
+  <title>实体Bean</title>
+
+  <sect1 id="entity-overview" revision="1">
+    <title>简介</title>
+
+    <para>本章内容覆盖了EJB3.0实体bean的注解规范以及Hibernate特有的扩展.</para>
+  </sect1>
+
+  <sect1 id="mapping" revision="1">
+    <title>用EJB3注解进行映射</title>
+
+    <para>现在EJB3实体Bean是纯粹的POJO.实际上这表达了和Hibernate持久化实体对象同样的概念.
+	它们的映射都通过JDK5.0注解来定义(EJB3规范中的XML描述语法至今还没有最终定下来).
+	注解分为两个部分,分别是逻辑映射注解和物理映射注解,
+	通过逻辑映射注解可以描述对象模型,类之间的关系等等,
+	而物理映射注解则描述了物理的schema,表,列,索引等等.
+	下面我们在代码中将混合使用这两种类型的注解.</para>
+
+    <para>EJB3注解的API定义在<literal>javax.persistence.*</literal>包里面.
+	大部分和JDK5兼容的IDE(象Eclipse, IntelliJ IDEA 和Netbeans等等)都提供了注解接口和属性的自动完成功能.
+	(这些不需要IDE提供特别的EJB3支持模块,因为EJB3注解是标准的JDK5注解)</para>
+
+    <para>请阅读JBoss EJB 3.0指南或者直接阅读Hibernate Annotations测试代码以获取更多的可运行实例.Hibernate Annotations提供的大部分单元测试代码都演示了实际的例子,是一个获取灵感的好地方.</para>
+
+    <sect2>
+      <title>声明实体bean</title>
+
+      <para>每一个持久化POJO类都是一个实体bean,这可以通过在类的定义中使用<literal>@Entity</literal>注解来进行声明:</para>
+
+      <programlisting>
+ at Entity
+public class Flight implements Serializable {
+    Long id;
+
+    @Id
+    public Long getId() { return id; }
+
+    public void setId(Long id) { this.id = id; }
+}
+         </programlisting>
+
+      <para>通过<literal>@Entity</literal>注解将一个类声明为一个实体bean(即一个持久化POJO类),
+	  <literal>@Id</literal>注解则声明了该实体bean的标识属性.
+	  其他的映射定义是隐式的.这种以隐式映射为主体,以显式映射为例外的配置方式在新的EJ3规范中处于非常重要的位置,
+	  和以前的版本相比有了质的飞跃.
+	  在上面这段代码中:Flight类映射到Flight表,并使用id列作为主键列.
+	  </para>
+
+      <para>在对一个类进行注解时,你可以选择对它的的属性或者方法进行注解,根据你的选择,Hibernate的访问类型分别为
+	  <literal>field</literal>或<literal>property</literal>.
+	  EJ3规范要求在需要访问的元素上进行注解声明,例如,如果访问类型为
+	  <literal>property</literal>就要在getter方法上进行注解声明,
+	  如果访问类型为 <literal>field</literal>就要在字段上进行注解声明.应该尽量避免混合使用这两种访问类型.
+	  Hibernate根据<literal>@Id</literal> 或 <literal>@EmbeddedId</literal>的位置来判断访问类型.</para>
+
+      <sect3>
+        <title>定义表(Table)</title>
+
+        <para><literal>@Table</literal>是类一级的注解,
+		通过<literal>@Table</literal>注解可以为实体bean映射指定表(table),目录(catalog)和schema的名字.
+		如果没有定义<literal>@Table</literal>,那么系统自动使用默认值:实体的短类名(不附带包名).</para>
+
+        <programlisting>
+ at Entity
+ at Table(name="tbl_sky")
+public class Sky implements Serializable {
+...
+            </programlisting>
+
+        <para><literal>@Table</literal>元素包括了一个<literal>schema</literal>
+		和一个 <literal>catalog</literal>属性,如果需要可以指定相应的值.
+		结合使用<literal>@UniqueConstraint</literal>注解可以定义表的唯一约束(unique constraint)
+		(对于绑定到单列的唯一约束,请参考<literal>@Column</literal>注解)
+		</para>
+
+        <programlisting>@Table(name="tbl_sky",
+		    <emphasis role="bold">uniqueConstraints = {@UniqueConstraint(columnNames={"month", "day"})}</emphasis>
+		)</programlisting>
+
+        <para>上面这个例子中,在month和day这两个字段上定义唯一约束.
+		注意<literal>columnNames</literal>数组中的值指的是逻辑列名.</para>
+
+        <remark>Hibernate在NamingStrategy的实现中定义了逻辑列名.
+		默认的EJB3命名策略将物理字段名当作逻辑字段名来使用.
+		注意该字段名和它对应的属性名可能不同(如果字段名是显式指定的话).
+		除非你重写了NamingStrategy,否则不用担心这些区别..</remark>
+      </sect3>
+
+      <sect3>
+        <title>乐观锁定版本控制</title>
+
+        <para>你可以在实体bean中使用<literal>@Version</literal>注解,通过这种方式可添加对乐观锁定的支持:</para>
+
+        <programlisting>
+ at Entity
+public class Flight implements Serializable {
+...
+    @Version
+    @Column(name="OPTLOCK")
+    public Integer getVersion() { ... }
+}           </programlisting>
+
+        <para>上面这个例子中,version属性将映射到 <literal>OPTLOCK</literal>列,
+		entity manager使用该字段来检测更新冲突(防止更新丢失,请参考last-commit-wins策略).</para>
+
+        <para>根据EJB3规范,version列可以是numeric类型(推荐方式)也可以是timestamp类型.
+		Hibernate支持任何自定义类型,只要该类型实现了<classname>UserVersionType</classname>.</para>
+      </sect3>
+    </sect2>
+
+    <sect2>
+      <title>映射简单属性</title>
+
+      <sect3>
+        <title>声明基本的属性映射</title>
+
+        <para>Every non static non transient property (field or method) of an
+        entity bean is considered persistent, unless you annotate it as
+        <literal>@Transient</literal>. Not having an annotation for your
+        property is equivalent to the appropriate <literal>@Basic</literal>
+        annotation. The <literal>@Basic</literal> annotation allows you to
+        declare the fetching strategy for a property:</para>
+
+        <para>实体bean中所有的非static非transient的属性都可以被持久化,
+		除非你将其注解为<literal>@Transient</literal>.所有没有定义注解的属性等价于在其上面添加了@Basic注解.
+		通过 <literal>@Basic</literal>注解可以声明属性的获取策略(fetch strategy):</para>
+
+        <programlisting>public transient int counter; //transient property
+
+private String firstname; //persistent property
+
+ at Transient
+String getLengthInMeter() { ... } //transient property
+
+String getName() {... } // persistent property
+
+ at Basic
+int getLength() { ... } // persistent property
+
+ at Basic(fetch = FetchType.LAZY)
+String getDetailedComment() { ... } // persistent property
+
+ at Temporal(TemporalType.TIME)
+java.util.Date getDepartureTime() { ... } // persistent property           
+
+ at Enumerated(STRING)
+Starred getNote() { ... } //enum persisted as String in database</programlisting>
+
+        <para>上面这个例子中,<literal>counter</literal>是一个transient的字段,
+		<literal>lengthInMeter</literal>的getter方法被注解为<literal>@Transient</literal>, 
+		entity manager将忽略这些字段和属性.
+		而<literal>name</literal>,<literal>length</literal>,<literal>firstname</literal>
+		这几个属性则是被定义为可持久化和可获取的.对于简单属性来说,默认的获取方式是即时获取(early fetch).
+		当一个实体Bean的实例被创建时,Hibernate会将这些属性的值从数据库中提取出来,保存到Bean的属性里.
+		与即时获取相对应的是延迟获取(lazy fetch).如果一个属性的获取方式是延迟获取
+		(比如上面例子中的<literal>detailedComment</literal>属性),
+		Hibernate在创建一个实体Bean的实例时,不会即时将这个属性的值从数据库中读出.
+		只有在该实体Bean的这个属性第一次被调用时,Hibernate才会去获取对应的值.
+		通常你不需要对简单属性设置延迟获取(lazy simple property),千万不要和延迟关联获取(lazy association fetch)混淆了
+		(译注:这里指不要把lazy simple property和lazy association fetch混淆了).
+		</para>
+
+        <note>
+          <para>为了启用属性级的延迟获取,你的类必须经过特殊处理(instrumented):
+		  字节码将被织入原始类中来实现延迟获取功能,
+		  详情参考Hibernate参考文档.如果不对类文件进行字节码特殊处理,
+		  那么属性级的延迟获取将被忽略.</para>
+        </note>
+
+        <para>推荐的替代方案是使用EJB-QL或者Criteria查询的投影(projection)功能.</para>
+
+        <para>Hibernate和EJB3都支持所有基本类型的属性映射.
+		这些基本类型包括所有的Java基本类型,及其各自的wrapper类和serializable类.
+		Hibernate Annotations还支持将内置的枚举类型映射到一个顺序列(保存了相应的序列值)
+		或一个字符串类型的列(保存相应的字符串).默认是保存枚举的序列值,
+		但是你可以通过<literal>@Enumerated</literal>注解来进行调整(见上面例子中的note属性).</para>
+
+        <para>在核心的Java API中并没有定义时间精度(temporal precision).
+		因此处理时间类型数据时,你还需要定义将其存储在数据库中所预期的精度.
+		在数据库中,表示时间类型的数据有<literal>DATE</literal>, <literal>TIME</literal>, 
+		和 <literal>TIMESTAMP</literal>三种精度(即单纯的日期,时间,或者两者兼备).
+		可使用<literal>@Temporal</literal>注解来调整精度.</para>
+
+        <para><literal>@Lob</literal>注解表示属性将被持久化为Blob或者Clob类型,
+		具体取决于属性的类型,
+		<classname>java.sql.Clob</classname>, 
+		<classname>Character[]</classname>,
+		<classname>char[]</classname> 和 
+		<classname>java.lang.String</classname>这些类型的属性都被持久化为Clob类型,
+		而<classname>java.sql.Blob</classname>, 
+		<classname>Byte[]</classname>, 
+		<classname>byte[]</classname> 和
+		serializable类型则被持久化为Blob类型.</para>
+
+        <programlisting>
+ at Lob
+public String getFullText() {
+    return fullText;
+}
+
+ at Lob 
+public byte[] getFullCode() {
+    return fullCode;
+}
+ </programlisting>
+
+        <para>如果某个属性实现了<classname>java.io.Serializable</classname>同时也不是基本类型,
+		并且没有在该属性上使用<literal>@Lob</literal>注解,
+		那么Hibernate将使用自带的<literal>serializable</literal>类型.
+		</para>
+      </sect3>
+
+      <sect3>
+        <title>声明列属性</title>
+
+        <para>使用 <literal>@Column </literal>注解可将属性映射到列.
+		使用该注解来覆盖默认值(关于默认值请参考EJB3规范).
+		在属性级使用该注解的方式如下:</para>
+
+        <itemizedlist>
+          <listitem>
+            <para>不进行注解</para>
+          </listitem>
+
+          <listitem>
+            <para>和 <literal>@Basic</literal>一起使用</para>
+          </listitem>
+
+          <listitem>
+            <para>和 <literal>@Version</literal>一起使用</para>
+          </listitem>
+
+          <listitem>
+            <para>和 <literal>@Lob</literal>一起使用</para>
+          </listitem>
+
+          <listitem>
+            <para>和 <literal>@Temporal</literal>一起使用</para>
+          </listitem>
+
+          <listitem>
+            <para>和
+            <literal>@org.hibernate.annotations.CollectionOfElements</literal>一起使用
+            (只针对Hibernate )</para>
+          </listitem>
+        </itemizedlist>
+
+
+        <programlisting>
+ at Entity
+public class Flight implements Serializable {
+...
+ at Column(updatable = false, name = "flight_name", nullable = false, length=50)
+public String getName() { ... }
+            </programlisting>
+
+        <para>在上面这个例子中,<literal>name</literal>属性映射到<literal>flight_name</literal>列.
+		该字段不允许为空,长度为50,并且是不可更新的(也就是属性值是不变的).</para>
+
+        <para>上面这些注解可以被应用到正规属性上例如<literal>@Id</literal> 或<literal>@Version</literal>属性.</para>
+
+        <programlistingco>
+          <areaspec>
+            <area coords="2 55" id="hm1" />
+
+            <area coords="3 55" id="hm2" />
+
+            <area coords="4 55" id="hm3" />
+
+            <area coords="5 55" id="hm4" />
+
+            <area coords="6 55" id="hm5" />
+
+            <area coords="7 55" id="hm6" />
+
+            <area coords="8 55" id="hm7" />
+
+            <area coords="9 55" id="hm8" />
+
+            <area coords="10 55" id="hm9" />
+
+            <area coords="11 55" id="hm10" />
+          </areaspec>
+
+          <programlisting>@Column(
+    name="columnName";
+    boolean unique() default false;
+    boolean nullable() default true;
+    boolean insertable() default true;
+    boolean updatable() default true;
+    String columnDefinition() default "";
+    String table() default "";
+    int length() default 255;
+    int precision() default 0; // decimal precision
+    int scale() default 0; // decimal scale</programlisting>
+
+          <calloutlist>
+            <callout arearefs="hm1">
+              <para><literal>name</literal> 可选,列名(默认值是属性名)</para>
+            </callout>
+
+            <callout arearefs="hm2">
+              <para><literal>unique</literal> 可选,是否在该列上设置唯一约束(默认值false)</para>
+            </callout>
+
+            <callout arearefs="hm3">
+              <para><literal>nullable</literal> 可选,是否设置该列的值可以为空(默认值false)</para>
+            </callout>
+
+            <callout arearefs="hm4">
+              <para><literal>insertable</literal> 可选,该列是否作为生成的insert语句中的一个列(默认值true)</para>
+            </callout>
+
+            <callout arearefs="hm5">
+              <para><literal>updatable</literal> 可选,该列是否作为生成的update语句中的一个列(默认值true)</para>
+            </callout>
+
+            <callout arearefs="hm6">
+              <para><literal>columnDefinition</literal> 可选: 为这个特定列覆盖SQL DDL片段 (这可能导致无法在不同数据库间移植)</para>
+            </callout>
+
+            <callout arearefs="hm7">
+              <para><literal>table</literal> 可选,定义对应的表(默认为主表)</para>
+            </callout>
+
+            <callout arearefs="hm8">
+              <para><literal><literal>length</literal></literal> 可选,列长度(默认值255)</para>
+            </callout>
+
+            <callout arearefs="hm8">
+              <para><literal><literal>precision</literal></literal>
+              可选,列十进制精度(decimal precision)(默认值0)</para>
+            </callout>
+
+            <callout arearefs="hm10">
+              <para><literal><literal>scale</literal></literal> 
+              可选,如果列十进制数值范围(decimal scale)可用,在此设置(默认值0)</para>
+            </callout>
+          </calloutlist>
+        </programlistingco>
+      </sect3>
+
+      <sect3>
+        <title>嵌入式对象(又名组件)</title>
+
+        <para>在实体中可以定义一个嵌入式组件(embedded component),
+		甚至覆盖该实体中原有的列映射.
+		组件类必须在类一级定义<literal>@Embeddable</literal>注解.
+		在特定的实体的关联属性上使用<literal>@Embedded</literal>和
+		<literal>@AttributeOverride</literal>注解可以覆盖该属性对应的嵌入式对象的列映射:</para>
+
+        <programlisting>
+ at Entity
+public class Person implements Serializable {
+
+    // Persistent component using defaults
+    Address homeAddress;
+
+    @Embedded
+    @AttributeOverrides( {
+            @AttributeOverride(name="iso2", column = @Column(name="bornIso2") ),
+            @AttributeOverride(name="name", column = @Column(name="bornCountryName") )
+    } )
+    Country bornIn;
+    ...
+}
+            </programlisting>
+
+        <programlisting>
+ at Embeddable
+public class Address implements Serializable {
+    String city;
+    Country nationality; //no overriding here
+}
+            </programlisting>
+
+        <programlisting>
+ at Embeddable
+public class Country implements Serializable {
+    private String iso2;
+    @Column(name="countryName") private String name;
+
+    public String getIso2() { return iso2; }
+    public void setIso2(String iso2) { this.iso2 = iso2; }
+
+    
+    public String getName() { return name; }
+    public void setName(String name) { this.name = name; }
+    ...
+}
+            </programlisting>
+
+        <para>嵌入式对象继承其所属实体中定义的访问类型
+		(注意:这可以通过使用Hibernate提供的<literal>@AccessType</literal>注解来覆盖原有值)(请参考 <xref
+        linkend="entity-hibspec" />).</para>
+
+        <para>在上面的例子中,实体bean <literal>Person</literal> 有两个组件属性,
+		分别是<literal>homeAddress</literal>和<literal>bornIn</literal>. 
+		我们可以看到<literal>homeAddress</literal> 属性并没有注解.
+		但是Hibernate自动检测其对应的Address类中的<literal>@Embeddable</literal>注解,
+		并将其看作一个持久化组件.对于Country中已映射的属性,
+		则使用<literal>@Embedded</literal>和<literal>@AttributeOverride
+        </literal>注解来覆盖原来映射的列名.
+		正如你所看到的, <literal>Address</literal>对象中还内嵌了<literal>Country</literal>对象,
+		这里和<literal>homeAddress</literal>一样使用了Hibernate和EJB3自动检测机制.
+		目前EJB3规范还不支持覆盖多层嵌套(即嵌入式对象中还包括其他嵌入式对象)的列映射.
+		不过Hibernate通过在表达式中使用"."符号表达式提供了对此特征的支持.</para>
+
+        <para><programlisting>    @Embedded
+    @AttributeOverrides( {
+            @AttributeOverride(name="city", column = @Column(name="fld_city") )
+            @AttributeOverride(name="<emphasis role="bold">nationality.iso2</emphasis>", column = @Column(name="nat_Iso2") ),
+            @AttributeOverride(name="<emphasis role="bold">nationality.name</emphasis>", column = @Column(name="nat_CountryName") )
+            //nationality columns in homeAddress are overridden
+    } )
+    Address homeAddress;</programlisting>
+	Hibernate注解支持很多EJB3规范中没有明确定义的特性.
+	例如,可以在嵌入式对象上添加 <literal>@MappedSuperclass</literal>注解,
+	这样可以将其父类的属性持久(详情请查阅<literal>@MappedSuperclass</literal>).</para>
+
+        <para>Hibernate现在支持在嵌入式对象中使用关联注解(如<literal>@*ToOne</literal>和<literal>@*ToMany</literal>).
+		而EJB3规范尚不支持这样的用法。你可以使用 <literal>@AssociationOverride</literal>注解来覆写关联列.</para>
+
+
+        <para>在同一个实体中使用两个同类型的嵌入对象,
+		其默认列名是无效的:至少要对其中一个进行明确声明.
+		Hibernate在这方面走在了EJB3规范的前面,
+		Hibernate提供了<classname>NamingStrategy</classname>, 在使用Hibernate时, 
+		通过<classname>NamingStrategy</classname>你可以对默认的机制进行扩展. 
+		<classname>DefaultComponentSafeNamingStrategy</classname>
+		在默认的EJB3NamingStrategy上进行了小小的提升,
+		允许在同一实体中使用两个同类型的嵌入对象而无须额外的声明.</para>
+
+      </sect3>
+
+      <sect3>
+        <title>无注解之属性的默认值</title>
+
+        <para>如果某属性没有注解,该属性将遵守下面的规则:</para>
+
+        <itemizedlist>
+          <listitem>
+             如果属性为单一类型,则映射为@Basic 
+          </listitem>
+
+          <listitem>
+             否则,如果属性对应的类型定义了@Embeddable注解,则映射为@Embedded 
+          </listitem>
+
+          <listitem>
+             否则,如果属性对应的类型实现了Serializable,
+			 则属性被映射为@Basic并在一个列中保存该对象的serialized版本
+          </listitem>
+
+          <listitem>
+            否则,如果该属性的类型为java.sql.Clob 或 java.sql.Blob,则作为@Lob并映射到适当的LobType.
+          </listitem>
+        </itemizedlist>
+
+	  </sect3>
+    </sect2>
+
+    <sect2 id="mapping-identifier" label=""
+           xreflabel="Mapping identifier properties">
+      <title>映射主键属性</title>
+
+      <para>使用<literal>@Id</literal>注解可以将实体bean中的某个属性定义为标识符(identifier).
+	  该属性的值可以通过应用自身进行设置,
+	  也可以通过Hiberante生成(推荐).
+	  使用 <literal>@GeneratedValue</literal>注解可以定义该标识符的生成策略:
+	  </para>
+
+      <itemizedlist>
+        <listitem>
+           AUTO - 可以是identity column类型,或者sequence类型或者table类型,取决于不同的底层数据库. 
+        </listitem>
+
+        <listitem>
+           TABLE - 使用表保存id值
+        </listitem>
+
+        <listitem>
+           IDENTITY - identity column
+        </listitem>
+
+        <listitem>
+           SEQUENCE - sequence 
+        </listitem>
+      </itemizedlist>
+
+      <para>和EJB3规范相比,Hibernate提供了更多的id生成器.详情请查阅 <xref linkend="entity-hibspec" /> .</para>
+
+
+      <para>下面的例子展示了使用SEQ_STORE配置的sequence生成器</para>
+
+      <programlisting>
+ at Id @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQ_STORE")
+public Integer getId() { ... }
+         </programlisting>
+
+      <para>下面这个例子使用的是identity生成器</para>
+
+      <programlisting>
+ at Id @GeneratedValue(strategy=GenerationType.IDENTITY)
+public Long getId() { ... }
+         </programlisting>
+
+      <para><literal>AUTO</literal>生成器适用于可移植的应用(在多个DB间切换).
+	  多个<literal>@Id</literal>可以共享同一个identifier生成器,只要把generator属性设成相同的值就可以了.
+	  通过<literal>@SequenceGenerator</literal> 和<literal>@TableGenerator</literal>,你可以配置不同的identifier生成器. 
+	  每一个identifier生成器都有自己的适用范围,可以是应用级(application level)和类一级(class level). 
+	  类一级的生成器在外部是不可见的,
+	  而且类一级的生成器可以覆盖应用级的生成器.
+	  应用级的生成器则定义在包一级(package level)(如<classname>package-info.java</classname>):</para>
+
+      <programlisting>
+ at javax.persistence.TableGenerator(
+    name="EMP_GEN",
+    table="GENERATOR_TABLE",
+    pkColumnName = "key",
+    valueColumnName = "hi"
+    pkColumnValue="EMP",
+    allocationSize=20
+)
+ at javax.persistence.SequenceGenerator(
+    name="SEQ_GEN",
+    sequenceName="my_sequence"
+)
+package org.hibernate.test.metadata;
+         </programlisting>
+
+      <para>
+	  如果在<classname>org.hibernate.test.metadata</classname>包下面的
+	  <classname>package-info.java</classname>文件用于初始化EJB配置,
+	  那么该文件中定义的 <literal>EMP_GEN</literal>
+	  和<literal>SEQ_GEN</literal>都是应用级的生成器. 
+      <literal>EMP_GEN</literal>定义了一个使用hilo算法
+	  (max_lo为20)的id生成器(该生成器将id的信息存在数据库的某个表中.).
+	  id的hi值保存在<literal>GENERATOR_TABLE</literal>中.
+      在该表中 <literal>pkColumnName</literal>"key"等价于
+	  <literal>pkColumnValue</literal> "<literal>EMP</literal>",
+      而<literal>valueColumnName</literal> "<literal>hi</literal>"中存储的是下一个要使用的最大值.
+	  </para>
+
+      <para><literal>SEQ_GEN</literal>则定义了一个sequence 生成器,
+	  其对应的sequence名为 <literal>my_sequence</literal>.
+	  注意目前Hibernate Annotations还不支持sequence 生成器中的
+	  <literal>initialValue</literal>和 <literal>allocationSize</literal>参数.</para>
+
+      <para>下面这个例子展示了定义在类范围(class scope)的sequence生成器:</para>
+
+      <programlisting>
+ at Entity
+ at javax.persistence.SequenceGenerator(
+    name="SEQ_STORE",
+    sequenceName="my_sequence"
+)
+public class Store implements Serializable {
+    private Long id;
+
+    @Id @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQ_STORE")
+    public Long getId() { return id; }
+}
+         </programlisting>
+
+      <para>在这个例子中,Store类使用名为my_sequence的sequence,并且SEQ_STORE 生成器对于其他类是不可见的.
+      注意在org.hibernate.test.metadata.id包下的测试代码有更多演示Hibernate Annotations用法的例子..</para>
+
+      <para>下面是定义组合主键的几种语法:</para>
+
+      <itemizedlist>
+        <listitem>
+           将组件类注解为@Embeddable,并将组件的属性注解为@Id
+        </listitem>
+
+        <listitem>
+           将组件的属性注解为@EmbeddedId
+        </listitem>
+
+        <listitem>
+           将类注解为@IdClass,并将该实体中所有属于主键的属性都注解为@Id 
+        </listitem>
+      </itemizedlist>
+
+      <para>对于EJB2的开发人员来说 <literal>@IdClass</literal>是很常见的,
+	  但是对于Hibernate的用户来说就是一个崭新的用法.
+	  组合主键类对应了一个实体类中的多个字段或属性,
+	  而且主键类中用于定义主键的字段或属性和
+	  实体类中对应的字段或属性在类型上必须一致.下面我们看一个例子:</para>
+
+      <programlisting>@Entity
+<emphasis role="bold">@IdClass(FootballerPk.class)</emphasis>
+public class Footballer {
+    //part of the id key
+    <emphasis role="bold">@Id</emphasis> public String getFirstname() {
+        return firstname;
+    }
+
+    public void setFirstname(String firstname) {
+        this.firstname = firstname;
+    }
+
+    //part of the id key
+    <emphasis role="bold">@Id</emphasis> public String getLastname() {
+        return lastname;
+    }
+
+    public void setLastname(String lastname) {
+        this.lastname = lastname;
+    }
+
+    public String getClub() {
+        return club;
+    }
+
+    public void setClub(String club) {
+        this.club = club;
+    }
+
+    //appropriate equals() and hashCode() implementation
+}
+
+ at Embeddable
+public class FootballerPk implements Serializable {
+    //same name and type as in Footballer
+    public String getFirstname() {
+        return firstname;
+    }
+
+    public void setFirstname(String firstname) {
+        this.firstname = firstname;
+    }
+
+    //same name and type as in Footballer
+    public String getLastname() {
+        return lastname;
+    }
+
+    public void setLastname(String lastname) {
+        this.lastname = lastname;
+    }
+
+    //appropriate equals() and hashCode() implementation
+}
+</programlisting>
+
+
+      <para>如上, <literal>@IdClass</literal>指向对应的主键类.</para>
+
+	  <para>Hibernate支持在组合标识符中定义关联(就像使用普通的注解一样),而EJB3规范并不支持此类用法.
+	  </para>
+
+      <programlisting>@Entity
+ at AssociationOverride( name="id.channel", joinColumns = @JoinColumn(name="chan_id") )
+public class TvMagazin {
+    @EmbeddedId public TvMagazinPk id;
+    @Temporal(TemporalType.TIME) Date time;
+}
+
+ at Embeddable
+public class TvMagazinPk implements Serializable {
+    @ManyToOne
+    public Channel channel;
+    public String name;
+    @ManyToOne
+    public Presenter presenter;
+}
+</programlisting>
+
+	</sect2>
+
+    <sect2>
+      <title>映射继承关系</title>
+
+      <para>EJB3支持三种类型的继承映射:</para>
+
+      <itemizedlist>
+        <listitem>
+            每个类一张表(Table per class)策略: 在Hibernate中对应&lt;union-class&gt;元素:
+        </listitem>
+
+        <listitem>
+		   每个类层次结构一张表(Single table per class hierarchy)策略:在Hibernate中对应&lt;subclass&gt;元素
+        </listitem>
+
+        <listitem>
+		   连接的子类(Joined subclasses)策略:在Hibernate中对应 &lt;joined-subclass&gt;元素
+        </listitem>
+      </itemizedlist>
+
+      <para>
+      你可以用 <literal>@Inheritance</literal>注解来定义所选择的策略.
+      这个注解需要在每个类层次结构(class hierarchy) 最顶端的实体类上使用.
+      </para>
+
+      <note>
+        <para>目前还不支持在接口上进行注解.</para>
+      </note>
+
+      <sect3>
+        <title>每个类一张表</title>
+
+        <para>
+		这种策略有很多缺点(例如:多态查询和关联),EJB3规范, Hibernate参考手册, 
+		Hibernate in Action,以及其他许多地方都对此进行了描述和解释.
+		Hibernate使用<literal>SQL UNION</literal>查询来实现这种策略.
+		通常使用场合是在一个继承层次结构的顶端:</para>
+
+        <programlisting>
+ at Entity
+ at Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
+public class Flight implements Serializable {
+            </programlisting>
+
+        <para>
+		这种策略支持双向的一对多关联.
+		这里不支持<literal>IDENTITY</literal>生成器策略,因为id必须在多个表间共享.
+		当然,一旦使用这种策略就意味着你不能使用
+		<literal>AUTO </literal>生成器和<literal>IDENTITY</literal>生成器.
+		</para>
+      </sect3>
+
+      <sect3>
+        <title>每个类层次结构一张表</title>
+
+        <para>整个继承层次结构中的父类和子类的所有属性都映射到同一个表中,
+		他们的实例通过一个辨别符(discriminator)列来区分.:</para>
+
+        <programlisting>
+ at Entity
+ at Inheritance(strategy=InheritanceType.SINGLE_TABLE)
+ at DiscriminatorColumn(
+    name="planetype",
+    discriminatorType=DiscriminatorType.STRING
+)
+ at DiscriminatorValue("Plane")
+public class Plane { ... }
+
+ at Entity
+ at DiscriminatorValue("A320")
+public class A320 extends Plane { ... }
+            </programlisting>
+
+        <para>在上面这个例子中,<classname>Plane</classname>是父类,在这个类里面将继承策略定义为
+		<literal>InheritanceType.SINGLE_TABLE</literal>,并通过
+		<literal>@DiscriminatorColumn</literal>注解定义了辨别符列(还可以定义辨别符的类型).
+		最后,对于继承层次结构中的每个类,<literal>@DiscriminatorValue</literal>注解指定了用来辨别该类的值.
+		辨别符列的名字默认为 <literal>DTYPE</literal>,其默认值为实体名(在<literal>@Entity.name</literal>中定义),其类型
+		为DiscriminatorType.STRING.
+		 <classname>A320</classname>是子类,如果不想使用默认的辨别符,只需要指定相应的值即可.
+		其他的如继承策略,辨别标志字段的类型都是自动设定的.</para>
+
+		<para><literal>@Inheritance</literal> 和
+        <literal>@DiscriminatorColumn</literal> 注解只能用于实体层次结构的顶端.</para>
+
+      </sect3>
+
+      <sect3>
+        <title>连接的子类</title>
+
+        <para>当每个子类映射到一个表时, <literal> @PrimaryKeyJoinColumn</literal>
+		和<literal>@PrimaryKeyJoinColumns</literal>
+		注解定义了每个子类表关联到父类表的主键:</para>
+
+        <programlisting>
+ at Entity
+ at Inheritance(strategy=InheritanceType.JOINED)
+public class Boat implements Serializable { ... }
+
+ at Entity
+public class Ferry extends Boat { ... }
+
+ at Entity
+ at PrimaryKeyJoinColumn(name="BOAT_ID")
+public class AmericaCupClass  extends Boat { ... }
+            </programlisting>
+
+        <para>以上所有实体都使用了<literal>JOINED</literal>策略, 
+		<literal>Ferry</literal>表和<literal>Boat</literal>表使用同名的主键.
+		而<literal>AmericaCupClass</literal>表和<literal>Boat</literal>表使用了条件
+		<code>Boat.id = AmericaCupClass.BOAT_ID</code>进行关联.
+		</para>
+      </sect3>
+
+      <sect3>
+        <title>从父类继承的属性</title>
+
+        <para>有时候通过一个(技术上或业务上)父类共享一些公共属性是很有用的,
+		同时还不用将该父类作为映射的实体(也就是该实体没有对应的表).
+		这个时候你需要使用<literal>@MappedSuperclass</literal>注解来进行映射.</para>
+
+        <programlisting>@MappedSuperclass
+public class BaseEntity {
+    @Basic
+    @Temporal(TemporalType.TIMESTAMP)
+    public Date getLastUpdate() { ... }
+    public String getLastUpdater() { ... }
+    ...
+}
+
+ at Entity class Order extends BaseEntity {
+    @Id public Integer getId() { ... }
+    ...
+}</programlisting>
+
+        <para>在数据库中,上面这个例子中的继承的层次结构最终以<literal>Order</literal>表的形式出现,
+		该表拥有<literal>id</literal>, <literal>lastUpdate</literal> 和
+		<literal>lastUpdater</literal>三个列.父类中的属性映射将复制到其子类实体.
+		注意这种情况下的父类不再处在继承层次结构的顶端.</para>
+
+        <note>
+
+          <para>注意,没有注解为<literal>@MappedSuperclass</literal>的父类中的属性将被忽略.</para>
+        </note>
+
+        <note>
+
+          <para>除非显式使用Hibernate annotation中的<literal>@AccessType</literal>注解,
+		  否则将从继承层次结构的根实体中继承访问类型(包括字段或方法)</para>
+        </note>
+
+        <note>
+
+          <para>这对于<literal>@Embeddable</literal>对象的父类中的属性持久化同样有效.
+		  只需要使用<literal>@MappedSuperclass</literal>注解即可
+		  (虽然这种方式不会纳入EJB3标准)</para>
+
+        </note>
+
+        <note>
+
+          <para>可以将处在在映射继承层次结构的中间位置的类注解为<literal>@MappedSuperclass</literal>.</para>
+        </note>
+
+        <note>
+
+          <para>在继承层次结构中任何没有被注解为<literal>@MappedSuperclass</literal>
+		  或<literal>@Entity</literal>的类都将被忽略.</para>
+        </note>
+
+		<para>
+		你可以通过 <literal>@AttributeOverride</literal>注解覆盖实体父类中的定义的列.
+		这个注解只能在继承层次结构的顶端使用.</para>
+
+        <programlisting>@MappedSuperclass
+public class FlyingObject implements Serializable {
+
+    public int getAltitude() {
+        return altitude;
+    }
+
+    @Transient
+    public int getMetricAltitude() {
+        return metricAltitude;
+    }
+
+    @ManyToOne
+    public PropulsionType getPropulsion() {
+        return metricAltitude;
+    }
+    ...
+}
+
+ at Entity
+ at AttributeOverride( name="altitude", column = @Column(name="fld_altitude") )
+ at AssociationOverride( name="propulsion", joinColumns = @JoinColumn(name="fld_propulsion_fk") )
+public class Plane extends FlyingObject {
+    ...
+}</programlisting>
+
+		<para>在上面这个例子中,<literal>altitude</literal>属性的值最终将持久化到<literal>Plane</literal>
+		表的<literal>fld_altitude</literal>列.而名为propulsion的关联则保存在<literal>fld_propulsion_fk</literal>外间列.</para>
+
+        <para>你可以为<literal>@Entity</literal>和<literal>@MappedSuperclass</literal>注解的类
+		以及那些对象为<literal>@Embeddable</literal>的属性定义
+		<literal>@AttributeOverride</literal>和<literal>@AssociationOverride</literal>.</para>
+
+      </sect3>
+    </sect2>
+
+    <sect2 id="entity-mapping-association">
+      <title>映射实体Bean的关联关系</title>
+
+      <sect3>
+        <title>一对一(One-to-one)</title>
+
+		<para>使用<literal>@OneToOne</literal>注解可以建立实体bean之间的一对一的关联.
+		一对一关联有三种情况:
+		一是关联的实体都共享同样的主键,
+		二是其中一个实体通过外键关联到另一个实体的主键
+		(注意要模拟一对一关联必须在外键列上添加唯一约束).
+		三是通过关联表来保存两个实体之间的连接关系
+		(注意要模拟一对一关联必须在每一个外键上添加唯一约束).</para>
+
+        <para>首先,我们通过共享主键来进行一对一关联映射:</para>
+
+        <programlisting>
+ at Entity
+public class Body {
+    @Id
+    public Long getId() { return id; }
+
+    @OneToOne(cascade = CascadeType.ALL)
+    @PrimaryKeyJoinColumn
+    public Heart getHeart() {
+        return heart;
+    }
+    ...
+}
+            </programlisting>
+
+        <programlisting>
+ at Entity
+public class Heart {
+    @Id
+    public Long getId() { ...}
+}
+            </programlisting>
+
+		<para>上面的例子通过使用注解<literal>@PrimaryKeyJoinColumn</literal>定义了一对一关联.</para>
+
+		<para>下面这个例子使用外键列进行实体的关联.</para>
+
+        <programlisting>
+ at Entity
+public class Customer implements Serializable {
+    @OneToOne(cascade = CascadeType.ALL)
+    <emphasis role="bold">@JoinColumn(name="passport_fk")</emphasis>
+    public Passport getPassport() {
+        ...
+    }
+
+ at Entity
+public class Passport implements Serializable {
+    @OneToOne(<emphasis role="bold">mappedBy = "passport"</emphasis>)
+    public Customer getOwner() {
+    ...
+}
+            </programlisting>
+
+        <para>上面这个例子中,<classname>Customer</classname> 通过<literal>Customer</literal>
+		表中名为的<literal>passport_fk</literal> 外键列和 <classname>Passport</classname>关联.
+		<literal>@JoinColumn</literal>注解定义了联接列(join column).
+		该注解和<literal>@Column</literal>注解有点类似,
+		但是多了一个名为<literal>referencedColumnName</literal>的参数.
+		该参数定义了所关联目标实体中的联接列.
+		注意,当<literal><literal>referencedColumnName</literal></literal>关联到非主键列的时候,
+		关联的目标类必须实现<classname>Serializable</classname>,
+		还要注意的是所映射的属性对应单个列(否则映射无效).
+		</para>
+
+        <para>一对一关联可能是双向的.在双向关联中,
+		有且仅有一端是作为主体(owner)端存在的:主体端负责维护联接列(即更新).
+		对于不需要维护这种关系的从表则通过mappedBy属性进行声明.
+		<literal>mappedBy</literal>的值指向主体的关联属性.
+		在上面这个例子中,<literal>mappedBy</literal>的值为 <literal>passport</literal>.
+		最后,不必也不能再在被关联端(owned side)定义联接列了,因为已经在主体端进行了声明.</para>
+
+		<para>如果在主体没有声明<literal>@JoinColumn</literal>,系统自动进行处理:
+		在主表(owner table)中将创建联接列,
+		列名为:主体的关联属性名+下划线+被关联端的主键列名.
+		在上面这个例子中是<literal>passport_id</literal>,
+		因为<literal>Customer</literal>中关联属性名为<literal>passport</literal>,
+		<literal>Passport</literal>的主键是<literal>id</literal>.</para>
+
+        <para>The third possibility (using an association table) is very
+        exotic.</para>
+
+        <para>第三种方式也许是最另类的(通过关联表).</para>
+
+        <programlisting>
+ at Entity
+public class Customer implements Serializable {
+    @OneToOne(cascade = CascadeType.ALL)
+    <emphasis role="bold">@JoinTable(name = "CustomerPassports"
+        joinColumns = @JoinColumn(name="customer_fk"),
+        inverseJoinColumns = @JoinColumns(name="passport_fk")</emphasis>
+    )
+    public Passport getPassport() {
+        ...
+    }
+
+ at Entity
+public class Passport implements Serializable {
+    @OneToOne(<emphasis role="bold">mappedBy = "passport"</emphasis>)
+    public Customer getOwner() {
+    ...
+}
+            </programlisting>
+
+        <para><classname>Customer</classname>通过名为 <literal>CustomerPassports</literal>的关联表和
+        <classname>Passport</classname>关联; 该关联表拥有名为<literal>passport_fk</literal>的外键列,该
+		外键指向<literal>Passport</literal>表,该信息定义为<literal>inverseJoinColumn</literal>的属性值,
+		而<literal>customer_fk</literal>外键列指向<literal>Customer</literal>表,
+		该信息定义为 <literal>joinColumns</literal>的属性值.</para>
+
+        <para>这种关联可能是双向的.在双向关联中,
+		有且仅有一端是作为主体端存在的:主体端负责维护联接列(即更新).
+		对于不需要维护这种关系的从表则通过mappedBy属性进行声明.
+		<literal>mappedBy</literal>的值指向主体的关联属性.
+		在上面这个例子中,<literal>mappedBy</literal>的值为 <literal>passport</literal>.
+		最后,不必也不能再在被关联端(owned side)定义联接列了,因为已经在主体端进行了声明.</para>
+
+		<para>你必须明确定义关联表名和关联列名.</para>
+
+      </sect3>
+
+      <sect3>
+        <title>多对一(Many-to-one)</title>
+
+        <para>在实体属性一级使用<literal>@ManyToOne</literal>注解来定义多对一关联:</para>
+
+        <programlisting>
+ at Entity()
+public class Flight implements Serializable {
+    <emphasis role="bold">@ManyToOne</emphasis>( cascade = {CascadeType.PERSIST, CascadeType.MERGE} )
+    @JoinColumn(name="COMP_ID")
+    public Company getCompany() {
+        return company;
+    }
+    ...
+}
+            </programlisting>
+
+        <para>其中<literal>@JoinColumn</literal>是可选的,关联字段默认值和一对一
+		(one to one)关联的情况相似,
+		列名为:主体的关联属性名+下划线+被关联端的主键列名.
+		在这个例子中是<literal>company_id</literal>,
+		因为关联的属性是<literal>company</literal>,
+		<literal>Company</literal>的主键是<literal>id</literal>.</para>
+
+		<para><literal>@ManyToOne</literal>注解有一个名为<literal>targetEntity</literal>的参数,
+		该参数定义了目标实体名.通常不需要定义该参数,
+		因为在大部分情况下默认值(表示关联关系的属性类型)就可以很好的满足要求了.
+		不过下面这种情况下这个参数就显得有意义了:使用接口作为返回值而不是常见的实体.</para>
+
+        <programlisting>
+ at Entity()
+public class Flight implements Serializable {
+    @ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE}, <emphasis
+            role="bold">targetEntity=CompanyImpl.class</emphasis> )
+    @JoinColumn(name="COMP_ID")
+    public Company getCompany() {
+        return company;
+    }
+    ...
+}
+
+public interface Company {
+    ...
+            </programlisting>
+
+        <para>对于多对一也可以通过关联表的方式来映射。
+		通过<literal>@JoinTable</literal>注解可定义关联表,
+		该关联表包含了指回实体表的外键(通过<literal>@JoinTable.joinColumns</literal>)
+		以及指向目标实体表的外键(通过<literal>@JoinTable.inverseJoinColumns</literal>).</para>
+
+        <programlisting>
+ at Entity()
+public class Flight implements Serializable {
+    @ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE} )
+    <emphasis role="bold">@JoinTable(name="Flight_Company",
+        joinColumns = @JoinColumn(name="FLIGHT_ID"),
+        inverseJoinColumns = @JoinColumns(name="COMP_ID")
+    )</emphasis>
+    public Company getCompany() {
+        return company;
+    }
+    ...
+}
+            </programlisting>
+      </sect3>
+
+      <sect3 id="entity-mapping-association-collections">
+        <title>集合类型</title>
+
+        <sect4>
+          <title>概况</title>
+
+          <para>你可以对 <classname>Collection </classname>,<literal>List</literal>
+		  (指有序列表, 而不是索引列表),
+		  <literal>Map</literal>和<classname>Set</classname>这几种类型进行映射.
+		  EJB3规范定义了怎么样使用<literal>@javax.persistence.OrderBy</literal>
+		  注解来对有序列表进行映射:
+		  该注解接受的参数格式:用逗号隔开的(目标实体)属性名及排序指令,
+		  如<code>firstname asc, age desc</code>,如果该参数为空,则默认以id对该集合进行排序.
+           如果某个集合在数据库中对应一个关联表(association table)的话,你不能在这个集合属性上面使用@OrderBy注解.
+		  对于这种情况的处理方法,请参考<xref linkend="entity-hibspec" />.
+		  EJB3 允许你利用目标实体的一个属性作为Map的key,
+		  这个属性可以用<literal>@MapKey(name="myProperty")</literal>来声明.
+		  如果使用<literal>@MapKey</literal>注解的时候不提供属性名,
+		  系统默认使用目标实体的主键.
+		  map的key使用和属性相同的列:不需要为map key定义专用的列,因为map key实际上就表达了一个目标属性。
+		  注意一旦加载,key不再和属性保持同步,
+		  也就是说,如果你改变了该属性的值,在你的Java模型中的key不会自动更新
+		  (请参考<xref linkend="entity-hibspec" />).
+		  很多人被<literal>&lt;map&gt;</literal>和<literal>@MapKey</literal>弄糊涂了。
+		  其他它们有两点区别.<literal>@MapKey</literal>目前还有一些限制,详情请查看论坛或者
+		  我们的JIRA缺陷系统。
+
+
+		  注意一旦加载,key不再和属性保持同步,
+		  也就是说,如果你改变了该属性的值,在你的Java模型中的key不会自动更新.
+		  (Hibernate 3中Map支持的方式在当前的发布版中还未得到支持).</para>
+
+          <para>Hibernate将集合分以下几类.</para>
+
+          <para></para>
+
+          <table>
+            <title>集合语义</title>
+
+            <tgroup cols="3">
+              <colspec colname="c1" />
+
+              <colspec colname="c2" />
+
+              <colspec colname="c3" colnum="2" />
+
+              <thead>
+                <row>
+                  <entry>语义</entry>
+
+                  <entry>Java实现类</entry>
+
+                  <entry> 注解</entry>
+                </row>
+              </thead>
+
+              <tbody>
+                <row>
+                  <entry>Bag 语义</entry>
+
+                  <entry>java.util.List, java.util.Collection</entry>
+
+                  <entry>@org.hibernate.annotations.CollectionOfElements 或
+                  @OneToMany 或 @ManyToMany</entry>
+                </row>
+
+                <row>
+                  <entry>List 语义</entry>
+
+                  <entry>java.util.List</entry>
+
+                  <entry>(@org.hibernate.annotations.CollectionOfElements 或
+                  @OneToMany 或 @ManyToMany) 
+				  以及
+                  @org.hibernate.annotations.IndexColumn</entry>
+                </row>
+
+                <row>
+                  <entry>Set 语义</entry>
+
+                  <entry>java.util.Set</entry>
+
+                  <entry>@org.hibernate.annotations.CollectionOfElements 或
+                  @OneToMany 或 @ManyToMany</entry>
+                </row>
+
+                <row>
+                  <entry>Map 语义</entry>
+
+                  <entry>java.util.Map</entry>
+
+                  <entry>(@org.hibernate.annotations.CollectionOfElements 或
+                  @OneToMany 或 @ManyToMany)
+				  以及
+				  (空 
+				  或
+                  @org.hibernate.annotations.MapKey/MapKeyManyToMany(支持真正的map), 
+				  或
+                  @javax.persistence.MapKey</entry>
+				  
+                </row>
+              </tbody>
+            </tgroup>
+          </table>
+
+		  <remark>
+		  从上面可以明确地看到,没有@org.hibernate.annotations.IndexColumn 
+		  注解的java.util.List集合将被看作bag类.
+		  </remark>
+
+          <para>EJB3规范不支持原始类型,核心类型,嵌入式对象的集合.但是Hibernate对此提供了支持
+		  (详情参考 <xref linkend="entity-hibspec" />).</para>
+
+          <programlisting>@Entity public class City {
+    @OneToMany(mappedBy="city")
+    <emphasis role="bold">@OrderBy("streetName")</emphasis>
+    public List&lt;Street&gt; getStreets() {
+        return streets;
+    }
+...
+}
+
+ at Entity public class Street {
+    <emphasis role="bold">public String getStreetName()</emphasis> {
+        return streetName;
+    }
+
+    @ManyToOne
+    public City getCity() {
+        return city;
+    }
+    ...
+}
+
+
+ at Entity
+public class Software {
+    @OneToMany(mappedBy="software")
+    <emphasis role="bold">@MapKey(name="codeName")</emphasis>
+    public Map&lt;String, Version&gt; getVersions() {
+        return versions;
+    }
+...
+}
+
+ at Entity
+ at Table(name="tbl_version")
+public class Version {
+    <emphasis role="bold">public String getCodeName()</emphasis> {...}
+
+    @ManyToOne
+    public Software getSoftware() { ... }
+...
+}</programlisting>
+
+          <para>上面这个例子中,<literal>City</literal>
+		  中包括了以<literal>streetName</literal>排序的<literal>Street</literal>的集合.
+		  而<literal>Software</literal>中包括了以<literal>codeName</literal>作为
+		  key和以<literal>Version</literal>作为值的Map.</para>
+
+		  <para>除非集合为generic类型,否则你需要指定<literal>targetEntity</literal>.
+		  这个注解属性接受的参数为目标实体的class.</para>
+        </sect4>
+
+        <sect4 id="entity-mapping-association-collection-onetomany"
+               revision="2">
+          <title>一对多(One-to-many)</title>
+
+          <para>在属性级使用 <literal>@OneToMany</literal>注解可定义一对多关联.一对多关联可以是双向关联.</para>
+
+          <sect5>
+            <title>双向(Bidirectional)</title>
+
+            <para>在EJB3规范中多对一这端几乎总是双向关联中的主体(owner)端,
+			而一对多这端的关联注解为<literal>@OneToMany( mappedBy=...
+            )</literal></para>
+
+            <programlisting>@Entity
+public class Troop {
+    @OneToMany(mappedBy="troop")
+    public Set&lt;Soldier&gt; getSoldiers() {
+    ...
+}
+
+ at Entity
+public class Soldier {
+    @ManyToOne
+    @JoinColumn(name="troop_fk")
+    public Troop getTroop() {
+    ...
+}              </programlisting>
+
+			<para><classname>Troop</classname> 通过<literal>troop</literal> 
+			属性和<literal>Soldier</literal>建立了一对多的双向关联.
+			在<literal>mappedBy</literal>端不必也不能再定义任何物理映射</para>
+
+            <para>对于一对多的双向映射,如果要一对多这一端维护关联关系,
+			你需要删除<literal>mappedBy</literal>元素并将多对一这端的
+			 <literal>@JoinColumn</literal>的insertable和updatable设置为false.
+			很明显,这种方案不会得到什么明显的优化,而且还会增加一些附加的UPDATE语句.</para>
+
+            <programlisting>@Entity
+public class Troop {
+    @OneToMany
+    @JoinColumn(name="troop_fk") //we need to duplicate the physical information
+    public Set&lt;Soldier&gt; getSoldiers() {
+    ...
+}
+
+ at Entity
+public class Soldier {
+    @ManyToOne
+    @JoinColumn(name="troop_fk", insertable=false, updatable=false)
+    public Troop getTroop() {
+    ...
+}</programlisting>
+          </sect5>
+
+          <sect5>
+            <title>单向(Unidirectional)</title>
+
+			<para>通过在被拥有的实体端(owned entity)增加一个外键列来实现一对多单向关联是很少见的,也是不推荐的.
+			我们强烈建议通过一个联接表(join table)来实现这种关联(下一节会对此进行解释).
+			可以通过<literal>@JoinColumn</literal>注解来描述这种单向关联关系.</para>
+
+            <programlisting>
+ at Entity
+public class Customer implements Serializable {
+    @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
+    @JoinColumn(name="CUST_ID")
+    public Set&lt;Ticket&gt; getTickets() {
+    ...
+}
+
+ at Entity
+public class Ticket implements Serializable {
+    ... //no bidir
+}
+               </programlisting>
+
+			<para><literal>Customer</literal> 通过
+			<literal>CUST_ID</literal>列和<literal>Ticket</literal> 建立了单向关联关系.</para>
+
+          </sect5>
+
+          <sect5>
+            <title>通过关联表处理单向关联</title>
+
+            <para>通过联接表处理单向一对多关联是首选方式.这种关联通过<literal>@JoinTable</literal>注解来进行描述.</para>
+
+            <programlisting>
+ at Entity
+public class Trainer {
+    @OneToMany
+    @JoinTable(
+            name="TrainedMonkeys",
+            joinColumns = { @JoinColumn( name="trainer_id") },
+            inverseJoinColumns = @JoinColumn( name="monkey_id")
+    )
+    public Set&lt;Monkey&gt; getTrainedMonkeys() {
+    ...
+}
+
+ at Entity
+public class Monkey {
+    ... //no bidir
+}
+               </programlisting>
+
+			<para>上面这个例子中,<literal>Trainer</literal>通过
+			<classname>TrainedMonkeys</classname>表和
+			<classname>Monkey</classname> 建立了单向关联. 
+			其中外键<literal>trainer_id</literal>关联到<literal>Trainer</literal>
+			(<literal>joinColumns</literal>),
+			而外键<literal>monkey_id</literal>关联到 <literal>Monkey</literal>
+			(<literal>inversejoinColumns</literal>).</para>
+          </sect5>
+
+          <sect5>
+            <title>默认处理机制</title>
+
+            <para>通过联接表来建立单向一对多关联不需要描述任何物理映射.
+            表名由以下三个部分组成:主表(owner table)表名+下划线+从表(the other side table)表名.
+            指向主表的外键名:主表表名+下划线+主表主键列名
+            指向从表的外键名:主表所对应实体的属性名+下划线+从表主键列名
+            指向从表的外键定义为唯一约束,用来表示一对多的关联关系.</para>
+
+            <programlisting>
+ at Entity
+public class Trainer {
+    @OneToMany
+    public Set&lt;Tiger&gt; getTrainedTigers() {
+    ...
+}
+
+ at Entity
+public class Tiger {
+    ... //no bidir
+}
+               </programlisting>
+
+            <para>上面这个例子中,<classname>Trainer</classname>和<classname>Tiger</classname>
+			通过联接表 <literal>Trainer_Tiger</literal>建立单向关联关系,
+			其中外键<literal>trainer_id</literal>关联到<literal>Trainer</literal>
+			(主表表名, <keycap>_</keycap>(下划线), trainer id),
+			而外键<literal>trainedTigers_id</literal>关联到<literal>Tiger</literal>
+			(属性名称,  <keycap>_</keycap>(下划线), Tiger表的主键列名).</para>
+
+          </sect5>
+        </sect4>
+
+        <sect4>
+          <title>多对多(Many-to-many)</title>
+
+          <sect5>
+            <title>定义</title>
+
+            <para>你可以通过<literal>@ManyToMany</literal>注解可定义的多对多关联.
+			同时,你也需要通过注解<literal>@JoinTable</literal>描述关联表和关联条件.
+			如果是双向关联,其中一段必须定义为owner,另一端必须定义为inverse(在对关联表进行更新操作时这一端将被忽略):</para>
+
+            <programlisting>
+ at Entity
+public class Employer implements Serializable {
+    @ManyToMany(
+        targetEntity=org.hibernate.test.metadata.manytomany.Employee.class,
+        cascade={CascadeType.PERSIST, CascadeType.MERGE}
+    )
+    @JoinTable(
+        name="EMPLOYER_EMPLOYEE",
+        joinColumns={@JoinColumn(name="EMPER_ID")},
+        inverseJoinColumns={@JoinColumn(name="EMPEE_ID")}
+    )
+    public Collection getEmployees() {
+        return employees;
+    }
+    ...
+}
+               </programlisting>
+
+            <programlisting>
+ at Entity
+public class Employee implements Serializable {
+    @ManyToMany(
+        cascade={CascadeType.PERSIST, CascadeType.MERGE},
+        mappedBy="employees"
+        targetEntity=Employer.class
+    )
+    public Collection getEmployers() {
+        return employers;
+    }
+}
+               </programlisting>
+
+            <para>至此,我们已经展示了很多跟关联有关的声明定义以及属性细节.
+			下面我们将深入介绍<literal>@JoinTable</literal>注解,该注解定义了联接表的表名,
+			联接列数组(注解中定义数组的格式为{ A, B, C }),
+			以及inverse联接列数组.
+			后者是关联表中关联到<classname>Employee</classname>主键的列(the "other side").</para>
+
+            <para>正如前面所示,被关联端不必也不能描述物理映射: 
+			只需要一个简单的<literal>mappedBy</literal>参数,该参数包含了主体端的属性名,这样就绑定双方的关系.</para>
+          </sect5>
+
+          <sect5>
+            <title>默认值</title>
+
+			<para>和其他许多注解一样,在多对多关联中很多值是自动生成.
+			当双向多对多关联中没有定义任何物理映射时,Hibernate根据以下规则生成相应的值.
+			关联表名:主表表名+<keycap>_</keycap>下划线+从表表名,
+			关联到主表的外键名:主表名+<keycap>_</keycap>下划线+主表中的主键列名.
+			关联到从表的外键名:主表中用于关联的属性名+<keycap>_</keycap>下划线+从表的主键列名.
+			以上规则对于双向一对多关联同样有效.</para>
+
+            <programlisting>
+ at Entity
+public class Store {
+    @ManyToMany(cascade = CascadeType.PERSIST)
+    public Set&lt;City&gt; getImplantedIn() {
+        ...
+    }
+}
+
+ at Entity
+public class City {
+    ... //no bidirectional relationship
+}
+               </programlisting>
+
+            <para>上面这个例子中,<literal>Store_Table</literal>作为联接表. 
+			<literal>Store_id</literal>列是联接到<literal>Store</literal>表的外键.
+			而<literal>implantedIn_id</literal>列则联接到<literal>City</literal>表.</para>
+
+            <para>当双向多对多关联中没有定义任何物理映射时, Hibernate根据以下规则生成相应的值
+            关联表名: :主表表名+<keycap>_</keycap>下划线+从表表名,
+            关联到主表的外键名:从表用于关联的属性名+<keycap>_</keycap>下划线+主表中的主键列名.
+            关联到从表的外键名:主表用于关联的属性名+<keycap>_</keycap>下划线+从表的主键列名.
+            以上规则对于双向一对多关联同样有效.</para>
+
+            <programlisting>
+ at Entity
+public class Store {
+    @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
+    public Set&lt;Customer&gt; getCustomers() {
+        ...
+    }
+}
+
+ at Entity
+public class Customer {
+    @ManyToMany(mappedBy="customers")
+    public Set&lt;Store&gt; getStores() {
+        ...
+    }
+}
+               </programlisting>
+
+            <para>在上面这个例子中,<literal>Store_Customer</literal>作为联接表. 
+			<literal>stores_id</literal>列是联接到<literal>Store</literal>表的外键,
+			而<literal>customers_id</literal>列联接到<literal>City</literal>表.</para>
+
+		  </sect5>
+        </sect4>
+      </sect3>
+
+
+      <sect3>
+        <title>用cascading实现传播性持久化(Transitive persistence)</title>
+
+        <para>也许你已经注意到了<literal>cascade</literal>属性接受的值为<classname>CascadeType</classname>数组.
+		在EJB3中的cascade的概念和Hibernate中的传播性持久化以及cascade操作非常类似,
+		但是在语义上有细微的区别,支持的cascade类型也有点区别:</para>
+
+        <itemizedlist>
+          <listitem>
+             CascadeType.PERSIST: 如果一个实体是受管状态, 或者当persist()函数被调用时, 触发级联创建(create)操作
+          </listitem>
+
+          <listitem>
+             CascadeType.MERGE: 如果一个实体是受管状态, 或者当merge()函数被调用时, 触发级联合并(merge)操作
+          </listitem>
+
+          <listitem>
+             CascadeType.REMOVE: 当delete()函数被调用时, 触发级联删除(remove)操作
+          </listitem>
+
+          <listitem>
+             CascadeType.REFRESH: 当refresh()函数被调用时, 触发级联更新(refresh)操作
+          </listitem>
+
+          <listitem>
+             CascadeType.ALL: 以上全部
+          </listitem>
+        </itemizedlist>
+
+		<para>关于cascading, create/merge的语义请参考EJB3规范的6.3章节.</para>
+      </sect3>
+
+      <sect3>
+        <title>关联关系获取</title>
+
+        <para>通过Hibernate你可以获得直接或者延迟获取关联实体的功能.
+		<literal>fetch</literal>参数可以设置为<literal>FetchType.LAZY</literal> 
+		或者 <literal>FetchType.EAGER</literal>.
+		<literal>EAGER</literal>通过<literal>outer join select</literal>直接获取关联的对象,
+		而<literal>LAZY</literal>(默认值)在第一次访问关联对象的时候才会触发相应的select操作.
+		EJBQL提供了<literal>fetch</literal>关键字,该关键字可以在进行特殊查询的时候覆盖默认值.
+		这对于提高性能来说非常有效,应该根据实际的用例来判断是否选择fetch关键字.</para>
+      </sect3>
+    </sect2>
+
+    <sect2>
+      <title>映射复合主键与外键</title>
+
+      <para>组合主键使用一个可嵌入的类作为主键表示,因此你需要使用<literal>@Id</literal>
+	  和<literal>@Embeddable</literal>两个注解.
+	  还有一种方式是使用<literal>@EmbeddedId</literal>注解.注意所依赖的类必须实现
+	  serializable以及实现<methodname>equals()</methodname>/<methodname>hashCode()</methodname>方法.
+	  你也可以如<xref linkend="mapping-identifier" />一章中描述的办法使用<literal>@IdClass</literal>注解.</para>
+
+      <programlisting>
+ at Entity
+public class RegionalArticle implements Serializable {
+
+    @Id
+    public RegionalArticlePk getPk() { ... }
+}
+
+ at Embeddable
+public class RegionalArticlePk implements Serializable { ... }
+         </programlisting>
+
+      <para>或者</para>
+
+      <programlisting>
+ at Entity
+public class RegionalArticle implements Serializable {
+
+    @EmbeddedId
+    public RegionalArticlePk getPk() { ... }
+}
+
+public class RegionalArticlePk implements Serializable { ... }
+         </programlisting>
+
+      <para><literal>@Embeddable</literal> 注解默认继承了其所属实体的访问类型,
+	  除非显式使用了Hibernate的<literal>@AccessType</literal>注解(这个注解不是EJB3标准的一部分).
+	  而<literal>@JoinColumns</literal>,即<literal>@JoinColumn</literal>数组,
+	  定义了关联的组合外键(如果不使用缺省值的话).
+	  显式指明<literal>referencedColumnNames</literal>是一个好的实践方式,
+	  否则,Hibernate认为你使用的列顺序和主键声明的顺序一致.</para>
+
+      <programlisting>
+ at Entity
+public class Parent implements Serializable {
+    @Id
+    public ParentPk id;
+    public int age;
+
+    @OneToMany(cascade=CascadeType.ALL)
+    @JoinColumns ({
+        @JoinColumn(name="parentCivility", referencedColumnName = "isMale"),
+        @JoinColumn(name="parentLastName", referencedColumnName = "lastName"),
+        @JoinColumn(name="parentFirstName", referencedColumnName = "firstName")
+    })
+    public Set&lt;Child&gt; children; //unidirectional
+    ...
+}
+         </programlisting>
+
+      <programlisting>
+ at Entity
+public class Child implements Serializable {
+    @Id @GeneratedValue
+    public Integer id;
+
+    @ManyToOne
+    @JoinColumns ({
+        @JoinColumn(name="parentCivility", referencedColumnName = "isMale"),
+        @JoinColumn(name="parentLastName", referencedColumnName = "lastName"),
+        @JoinColumn(name="parentFirstName", referencedColumnName = "firstName")
+    })
+    public Parent parent; //unidirectional
+}
+         </programlisting>
+
+      <programlisting>
+ at Embeddable
+public class ParentPk implements Serializable {
+    String firstName;
+    String lastName;
+    ...
+}
+         </programlisting>
+
+	  <para>注意上面的 <literal>referencedColumnName</literal>显式使用方式.</para>
+    </sect2>
+
+    <sect2>
+      <title>映射二级表(secondary tables)</title>
+
+      <para>使用类一级的 <literal>@SecondaryTable </literal> 或 
+	   <literal>@SecondaryTables </literal>注解可以实现单个实体到多个表的映射.
+	  使用 <literal>@Column  </literal>或者  <literal>@JoinColumn  </literal>
+	  注解中的 <literal>table </literal>参数可指定某个列所属的特定表.</para>
+
+      <programlisting>
+ at Entity
+ at Table(name="MainCat")
+<emphasis role="bold">@SecondaryTables({
+    @SecondaryTable(name="Cat1", pkJoinColumns={
+        @PrimaryKeyJoinColumn(name="cat_id", referencedColumnName="id")
+    ),
+    @SecondaryTable(name="Cat2", uniqueConstraints={@UniqueConstraint(columnNames={"storyPart2"})})
+})</emphasis>
+public class Cat implements Serializable {
+
+    private Integer id;
+    private String name;
+    private String storyPart1;
+    private String storyPart2;
+
+    @Id @GeneratedValue
+    public Integer getId() {
+        return id;
+    }
+
+    public String getName() {
+        return name;
+    }
+    
+    <emphasis role="bold">@Column(table="Cat1")</emphasis>
+    public String getStoryPart1() {
+        return storyPart1;
+    }
+
+    <emphasis role="bold">@Column(table="Cat2")</emphasis>
+    public String getStoryPart2() {
+        return storyPart2;
+    }
+</programlisting>
+
+      <para>在上面这个例子中,<literal>name</literal>保存在<literal>MainCat</literal>表中,
+	  <literal>storyPart1</literal>保存在<literal>Cat1</literal>表中,
+	  <literal>storyPart2</literal>保存在<literal>Cat2</literal>表中.
+	  <literal>Cat1</literal>表通过外键<literal>cat_id</literal>和<literal>MainCat</literal>表关联,
+	  <literal>Cat2</literal>表通过<literal>id</literal>列和<literal>MainCat</literal>表关联
+	  (和<literal>MainCat</literal>的<literal>id</literal>列同名).
+	  对<literal>storyPart2</literal>列还定义了唯一约束.</para>
+
+      <para>在JBoss EJB 3指南和Hibernate Annotations单元测试代码中还有更多的例子.</para>
+    </sect2>
+  </sect1>
+
+  <sect1 id="entity-mapping-query">
+    <title>映射查询</title>
+
+    <sect2>
+      <title>映射EJBQL/HQL查询</title>
+
+      <para>使用注解还可以映射EJBQL/HQL查询.
+	  <literal>@NamedQuery</literal> 和<literal>@NamedQueries</literal>是可使用在类和包上的注解.
+	  但是它们的定义在session factory/entity manager factory范围中是都可见的.
+	  命名式查询通过它的名字和实际的查询字符串来定义.</para>
+
+      <programlisting>
+javax.persistence.NamedQueries(
+    @javax.persistence.NamedQuery(name="plane.getAll", query="select p from Plane p")
+)
+package org.hibernate.test.annotations.query;
+
+...
+
+ at Entity
+ at NamedQuery(name="night.moreRecentThan", query="select n from Night n where n.date &gt;= :date")
+public class Night {
+    ...
+}
+
+public class MyDao {
+    doStuff() {
+        Query q = s.getNamedQuery("night.moreRecentThan");
+        q.setDate( "date", aMonthAgo );
+        List results = q.list();
+        ...
+    }
+    ...
+}
+        </programlisting>
+
+      <para>还可以通过定义 <literal>QueryHint</literal> 数组的<literal>hints</literal>
+	  属性为查询提供一些hint信息.</para>
+
+      <para>下面是目前可以使用的一些Hibernate hint:</para>
+
+      <para></para>
+
+      <table>
+        <title>Query hints</title>
+
+        <tgroup cols="2">
+          <thead>
+            <colspec colname="c1" />
+
+            <colspec colname="c2" colnum="2" />
+
+            <row>
+              <entry>hint</entry>
+
+              <entry colname="c2">description</entry>
+            </row>
+          </thead>
+
+          <tbody>
+            <row>
+              <entry>org.hibernate.cacheable</entry>
+
+              <entry>查询是否与二级缓存交互(默认值为false)
+	      </entry>
+            </row>
+
+            <row>
+              <entry>org.hibernate.cacheRegion</entry>
+
+              <entry>设置缓存区名称 (默认为otherwise)</entry>
+            </row>
+
+            <row>
+              <entry>org.hibernate.timeout</entry>
+
+              <entry>查询超时设定</entry>
+            </row>
+
+            <row>
+              <entry>org.hibernate.fetchSize</entry>
+
+              <entry>所获取的结果集(resultset)大小</entry>
+            </row>
+
+            <row>
+              <entry>org.hibernate.flushMode</entry>
+
+              <entry>本次查询所用的刷新模式</entry>
+            </row>
+
+            <row>
+              <entry>org.hibernate.cacheMode</entry>
+
+              <entry>本次查询所用的缓存模式</entry>
+            </row>
+
+            <row>
+              <entry>org.hibernate.readOnly</entry>
+
+              <entry>是否将本次查询所加载的实体设为只读(默认为false)
+	      </entry>
+            </row>
+
+            <row>
+              <entry>org.hibernate.comment</entry>
+
+              <entry>将查询注释添加入所生成的SQL</entry>
+            </row>
+          </tbody>
+        </tgroup>
+      </table>
+    </sect2>
+
+    <sect2 id="entity-mapping-query-native" revision="2">
+      <title>映射本地化查询</title>
+
+      <para>你还可以映射本地化查询(也就是普通SQL查询).
+	  不过这需要你使用<literal>@SqlResultSetMapping</literal>注解来描述SQL的resultset的结构
+	  (如果你打算定义多个结果集映射,可是使用<literal>@SqlResultSetMappings</literal>).
+	  <literal>@SqlResultSetMapping</literal>和<literal>@NamedQuery</literal>,
+	  <literal>@SqlResultSetMapping</literal>一样,可以定义在类和包一级.
+	  但是<literal>@SqlResultSetMapping</literal>的作用域为应用级.
+	  下面我们会看到,<literal>@NamedNativeQuery</literal> 注解中
+	  <literal>resultSetMapping</literal>参数值为<literal>@SqlResultSetMapping</literal>的名字.
+	  结果集映射定义了通过本地化查询返回值和实体的映射.
+	  该实体中的每一个字段都绑定到SQL结果集中的某个列上.
+	  该实体的所有字段包括子类的所有字段以及
+	  关联实体的外键列都必须在SQL查询中有对应的定义.
+	  如果实体中的属性和SQL查询中的列名相同,这种情况下可以不进行定义字段映射.</para>
+
+      <para><programlisting>@NamedNativeQuery(name="night&amp;area", query="select night.id nid, night.night_duration, "
+    + " night.night_date, area.id aid, night.area_id, area.name "
+    + "from Night night, Area area where night.area_id = area.id", <emphasis
+            role="bold">resultSetMapping="joinMapping"</emphasis>)
+ at SqlResultSetMapping(name="joinMapping", entities={
+    @EntityResult(entityClass=org.hibernate.test.annotations.query.Night.class, fields = {
+        @FieldResult(name="id", column="nid"),
+        @FieldResult(name="duration", column="night_duration"),
+        @FieldResult(name="date", column="night_date"),
+        @FieldResult(name="area", column="area_id"),
+        discriminatorColumn="disc"
+    }),
+    @EntityResult(entityClass=org.hibernate.test.annotations.query.Area.class, fields = {
+        @FieldResult(name="id", column="aid"),
+        @FieldResult(name="name", column="name")
+    })
+    }
+)</programlisting></para>
+
+      <para>在上面这个例子中,名为<literal>night&amp;area</literal>的查询
+	  和<literal>joinMapping</literal>结果集映射对应.
+	  该映射返回两个实体,分别为<literal>Night</literal> 
+	  和<literal>Area</literal>,其中每个属性都和一个列关联,
+	  列名通过查询获取.下面我们看一个隐式声明属性和列映射关系的例子.</para>
+
+      <programlisting>@Entity
+<emphasis role="bold">@SqlResultSetMapping(name="implicit", entities=@EntityResult(entityClass=org.hibernate.test.annotations.query.SpaceShip.class))
+ at NamedNativeQuery(name="implicitSample", query="select * from SpaceShip", resultSetMapping="implicit")</emphasis>
+public class SpaceShip {
+    private String name;
+    private String model;
+    private double speed;
+
+    @Id
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    @Column(name="model_txt")
+    public String getModel() {
+        return model;
+    }
+
+    public void setModel(String model) {
+        this.model = model;
+    }
+
+    public double getSpeed() {
+        return speed;
+    }
+
+    public void setSpeed(double speed) {
+        this.speed = speed;
+    }
+}</programlisting>
+
+      <para>在这个例子中,我们只需要定义结果集映射中的实体成员.
+	  属性和列名之间的映射借助实体中包含映射信息来完成.
+	  在这个例子中,<literal>model</literal>属性绑定到<literal>model_txt</literal>列.
+	  如果和相关实体的关联设计到组合主键,
+	  那么应该使用<literal>@FieldResult</literal>注解来定义每个外键列.
+	  <literal>@FieldResult</literal>的名字由以下几部分组成:
+	  定义这种关系的属性名字+"."+主键名或主键列或主键属性.</para>
+
+      <programlisting>@Entity
+ at SqlResultSetMapping(name="compositekey",
+        entities=@EntityResult(entityClass=org.hibernate.test.annotations.query.SpaceShip.class,
+            fields = {
+                    @FieldResult(name="name", column = "name"),
+                    @FieldResult(name="model", column = "model"),
+                    @FieldResult(name="speed", column = "speed"),
+<emphasis role="bold">                    @FieldResult(name="captain.firstname", column = "firstn"),
+                    @FieldResult(name="captain.lastname", column = "lastn"),</emphasis>
+                    @FieldResult(name="dimensions.length", column = "length"),
+                    @FieldResult(name="dimensions.width", column = "width")
+                    }),
+        columns = { @ColumnResult(name = "surface"),
+                    @ColumnResult(name = "volume") } )
+
+ at NamedNativeQuery(name="compositekey",
+    query="select name, model, speed, lname as lastn, fname as firstn, length, width, length * width as surface from SpaceShip", 
+    resultSetMapping="compositekey")
+} )
+public class SpaceShip {
+    private String name;
+    private String model;
+    private double speed;
+    private Captain captain;
+    private Dimensions dimensions;
+
+    @Id
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    @ManyToOne(fetch= FetchType.LAZY)
+    @JoinColumns( {
+            @JoinColumn(name="fname", referencedColumnName = "firstname"),
+            @JoinColumn(name="lname", referencedColumnName = "lastname")
+            } )
+    public Captain getCaptain() {
+        return captain;
+    }
+
+    public void setCaptain(Captain captain) {
+        this.captain = captain;
+    }
+
+    public String getModel() {
+        return model;
+    }
+
+    public void setModel(String model) {
+        this.model = model;
+    }
+
+    public double getSpeed() {
+        return speed;
+    }
+
+    public void setSpeed(double speed) {
+        this.speed = speed;
+    }
+
+    public Dimensions getDimensions() {
+        return dimensions;
+    }
+
+    public void setDimensions(Dimensions dimensions) {
+        this.dimensions = dimensions;
+    }
+}
+
+ at Entity
+ at IdClass(Identity.class)
+public class Captain implements Serializable {
+    private String firstname;
+    private String lastname;
+
+    @Id
+    public String getFirstname() {
+        return firstname;
+    }
+
+    public void setFirstname(String firstname) {
+        this.firstname = firstname;
+    }
+
+    @Id
+    public String getLastname() {
+        return lastname;
+    }
+
+    public void setLastname(String lastname) {
+        this.lastname = lastname;
+    }
+}
+</programlisting>
+
+      <note>
+
+		<para>观察dimension属性你会发现Hibernate支持用"."符号来表示嵌入式对象.
+		EJB3实现不必支持这个特征,但是我们做到了:-)</para>
+      </note>
+
+      <para>如果查询返回的是单个实体,或者你打算使用系统默认的映射,
+	  这种情况下可以不使用<literal>resultSetMapping</literal>
+	  而是使用<literal>resultClass</literal>属性:</para>
+
+      <programlisting><emphasis role="bold">@NamedNativeQuery(name="implicitSample", query="select * from SpaceShip", 
+    resultClass=SpaceShip.class)</emphasis>
+public class SpaceShip {</programlisting>
+
+      <para>某些本地查询返回的是scalar值,例如报表查询.
+	  你可以通过<literal>@ColumnResult</literal>将其映射到
+	  <literal>@SqlResultsetMapping</literal>上.
+	  甚至还可以在同一个本地查询的结果中混合实体和scalar类型(不过这种情况比较少见).</para>
+
+      <programlisting><emphasis role="bold">@SqlResultSetMapping(name="scalar", columns=@ColumnResult(name="dimension"))
+ at NamedNativeQuery(name="scalar", query="select length*width as dimension from SpaceShip", resultSetMapping="scalar")</emphasis></programlisting>
+
+      <para>本地查询中还有另外一个hint属性:
+	  <literal>org.hibernate.callable</literal>.
+	  这个属性的布尔变量值表明这个查询是否是一个存储过程.</para>
+    </sect2>
+  </sect1>
+
+  <sect1 id="entity-hibspec" xreflabel="Hibernate Annotation Extensions">
+    <title>Hibernate独有的注解扩展</title>
+
+    <para>Hibernate 3.1 提供了多种附加的注解,这些注解可以与EJB3的实体混合/匹配使用.
+    他们被设计成EJB3注解的自然扩展.</para>
+
+    <para>为了强化EJB3的能力,Hibernate提供了与其自身特性相吻合的特殊注解.
+    <classname>org.hibernate.annotations</classname>包已包含了所有的这些注解扩展.</para>
+
+    <sect2 id="entity-hibspec-entity" revision="2">
+      <title>实体</title>
+
+      <para>你可以在EJB3规范所能提供的能力之外,就Hibernate对实体所做的一些操作进行优化.</para>
+
+      <para><classname>@org.hibernate.annotations.Entity</classname>
+      追加了可能需要的额外的元数据,
+      而这些元数据超出了标准<literal>@Entity</literal> 中所定义的元数据. 
+		<itemizedlist>
+          <listitem>
+             mutable: 此实体是否为可变的
+          </listitem>
+
+          <listitem>
+             dynamicInsert: 用动态SQL新增
+          </listitem>
+
+          <listitem>
+             dynamicUpdate: 用动态SQL更新
+          </listitem>
+
+          <listitem>
+             selectBeforeUpdate: 指明Hibernate从不运行SQL UPDATE除非能确定对象的确已被修改
+          </listitem>
+
+          <listitem>
+             polymorphism: (指出)实体多态是PolymorphismType.IMPLICIT(默认)还是PolymorphismType.EXPLICIT 
+		  </listitem>
+
+		  <listitem>
+             persister:允许对默认持久实现(persister implementation)的覆盖
+		  </listitem>         
+
+          <listitem>
+             optimisticLock: 乐观锁策略(OptimisticLockType.VERSION, OptimisticLockType.NONE, OptimisticLockType.DIRTY或OptimisticLockType.ALL)
+          </listitem>
+        </itemizedlist>
+	  </para>
+
+      <para>
+		<note>
+			<para>
+				@javax.persistence.Entity仍是必选的(mandatory),
+				@org.hibernate.annotations.Entity不是取代品.
+			</para>
+        </note>
+	  </para>
+
+      <para>以下是一些附加的Hibernate注解扩展:</para>
+
+      <para><literal>@org.hibernate.annotations.BatchSize</literal> 
+		允许你定义批量获取该实体的实例数量(如:<literal>@BatchSize(size=4)</literal>).
+      当加载一特定的实体时,Hibernate将加载在持久上下文中未经初始化的同类型实体,直至批量数量(上限).</para>
+
+      <para><literal>@org.hibernate.annotations.Proxy</literal>
+      定义了实体的延迟属性.Lazy(默认为true)定义了类是否为延迟(加载).
+      proxyClassName是用来生成代理的接口(默认为该类本身).</para>
+
+      <para><literal>@org.hibernate.annotations.Where</literal>
+		定义了当获取类实例时所用的SQL WHERE子句(该SQL WHERE子句为可选).</para>
+
+      <para><literal>@org.hibernate.annotations.Check</literal>
+      定义了在DDL语句中定义的合法性检查约束(该约束为可选).</para>
+
+      <para><literal>@OnDelete(action=OnDeleteAction.CASCADE)</literal>
+      定义于被连接的子类(joined subclass):在删除时使用SQL级连删除,而非通常的Hibernate删除机制.</para>
+
+      <para><literal>@Table(name="tableName", indexes = {
+      @Index(name="index1", columnNames={"column1", "column2"} ) } )</literal>
+	  在<literal>tableName</literal>表的列上创建定义好的索引.
+	  该注解可以被应用于关键表或者是其他次要的表.
+      <literal>@Tables</literal> 注解允许你在不同的表上应用索引.
+      此注解预期在使用
+      <literal>@javax.persistence.Table</literal>或
+      <literal>@javax.persistence.SecondaryTable</literal>的地方中出现.</para>
+
+      <note>
+        <para>
+		<literal>@org.hibernate.annotations.Table</literal> 是对
+        <literal>@javax.persistence.Table</literal>的补充而不是它的替代品.
+		特别是当你打算改变表名的默认值的时候,你必须使用<literal>@javax.persistence.Table</literal>,
+		而不是<literal>@org.hibernate.annotations.Table</literal>.</para>
+      </note>
+
+            <para><programlisting>@Entity
+ at BatchSize(size=5)
+ at org.hibernate.annotations.Entity(
+        selectBeforeUpdate = true,
+        dynamicInsert = true, dynamicUpdate = true,
+        optimisticLock = OptimisticLockType.ALL,
+        polymorphism = PolymorphismType.EXPLICIT)
+ at Where(clause="1=1")
+ at org.hibernate.annotations.Table(name="Forest", indexes = { @Index(name="idx", columnNames = { "name", "length" } ) } )
+public class Forest { ... }</programlisting><programlisting>@Entity
+ at Inheritance(
+    strategy=InheritanceType.JOINED
+)
+public class Vegetable { ... }
+
+ at Entity
+ at OnDelete(action=OnDeleteAction.CASCADE)
+public class Carrot extends Vegetable { ... }</programlisting></para>
+    </sect2>
+
+    <sect2>
+      <title>标识符</title>
+
+      <para><literal><literal>@org.hibernate.annotations.GenericGenerator</literal>
+      允许你定义一个Hibernate特定的id生成器.</literal></para>
+
+      <para><programlisting>@Id @GeneratedValue(generator="system-uuid")
+ at GenericGenerator(name="system-uuid", strategy = "uuid")
+public String getId() {
+
+ at Id @GeneratedValue(generator="hibseq")
+ at GenericGenerator(name="hibseq", strategy = "seqhilo",
+    parameters = {
+        @Parameter(name="max_lo", value = "5"),
+        @Parameter(name="sequence", value="heybabyhey")
+    }
+)
+public Integer getId() {</programlisting></para>
+
+	<para><literal>strategy</literal>可以是Hibernate3生成器策略的简称,
+	或者是一个<classname>IdentifierGenerator</classname>实现的(带包路径的)全限定类名.
+	你可以通过<literal>parameters</literal>属性增加一些参数.</para>
+</sect2>
+
+<sect2 id="entity-hibspec-property" revision="2">
+      <title>属性</title>
+
+      <sect3>
+        <title>访问类型</title>
+
+	<para>访问类型是根据<literal>@Id</literal>或<literal>@EmbeddedId</literal>
+	在实体继承层次中所处的位置推演而得的.子实体(Sub-entities),
+	内嵌对象和被映射的父类均继承了根实体(root entity)的访问类型.</para>
+
+	<para>在Hibernate中,你可以把访问类型覆盖成:</para>
+
+        <itemizedlist>
+          <listitem>
+            <para>使用定制的访问类型策略</para>
+          </listitem>
+
+          <listitem>
+            <para>优化类级或属性级的访问类型</para>
+          </listitem>
+        </itemizedlist>
+
+        <para>为支持这种行为,Hibernate引入了@AccessType注解.你可以对以下元素定义访问类型:</para>
+
+        <itemizedlist>
+          <listitem>
+            <para>实体</para>
+          </listitem>
+
+          <listitem>
+            <para>父类</para>
+          </listitem>
+
+          <listitem>
+            <para>可内嵌的对象</para>
+          </listitem>
+
+          <listitem>
+            <para>属性</para>
+          </listitem>
+        </itemizedlist>
+
+		<para>被注解元素的访问类型会被覆盖,若覆盖是在类一级上,则所有的属性继承访问类型.
+		对于根实体,其访问类型会被认为是整个继承层次中的缺省设置(可在类或属性一级覆盖).</para>
+
+		<para>若访问类型被标以"property",则Hibernate会扫描getter方法的注解,若访问类型被标以"field",
+		则扫描字段的注解.否则,扫描标为@Id或@embeddedId的元素.</para>
+
+		<para>你可以覆盖某个属性(property)的访问类型,但是受注解的元素将不受影响:
+			例如一个具有field访问类型的实体,(我们)可以将某个字段标注为 @AccessType("property"),
+			则该字段的访问类型随之将成为property,但是其他字段上依然需要携带注解.</para>
+
+		<para>若父类或可内嵌的对象没有被注解,则使用根实体的访问类型(即使已经在非直系父类或可内嵌对象上定义了访问类型).
+			此时俄罗斯套娃(Russian doll)原理就不再适用.(译注:俄罗斯套娃(матрёшка或 матрешка)是俄罗斯特产木制玩具,
+			一般由多个一样图案的空心木娃娃一个套一个组成,最多可达十多个,通常为圆柱形,底部平坦可以直立.)</para>
+
+<programlisting>@Entity
+public class Person implements Serializable {
+    @Id  @GeneratedValue //access type field
+    Integer id;
+
+    @Embedded
+    @AttributeOverrides({
+    @AttributeOverride(name = "iso2", column = @Column(name = "bornIso2")),
+    @AttributeOverride(name = "name", column = @Column(name = "bornCountryName"))
+            })
+    Country bornIn;
+}
+
+ at Embeddable
+<emphasis role="bold">@AccessType("property")</emphasis> //override access type for all properties in Country
+public class Country implements Serializable {
+    private String iso2;
+    private String name;
+
+    public String getIso2() {
+        return iso2;
+    }
+
+    public void setIso2(String iso2) {
+        this.iso2 = iso2;
+    }
+
+    @Column(name = "countryName")
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+}
+</programlisting>
+      </sect3>
+
+      <sect3>
+        <title>公式</title>
+
+		<para>有时候,你想让数据库,而非JVM,来替你完成一些计算,也可能想创建某种虚拟列.
+		你可以使用SQL片段(亦称为公式),而不是将属性映射到(物理)列. 这种属性是只读的(属性值由公求得).</para>
+		
+		<programlisting>@Formula("obj_length * obj_height * obj_width")
+		public long getObjectVolume()</programlisting>
+		
+		
+		<para>SQL片段可以是任意复杂的,甚至可包含子查询.</para>
+      </sect3>
+
+      <sect3>
+        <title>类型</title>
+
+        <para><literal>@org.hibernate.annotations.Type</literal>
+		覆盖了Hibernate所用的默认类型:这通常不是必须的,因为类型可以由Hibernate正确推得.
+		关于Hibernate类型的详细信息,请参考Hibernate使用手册.</para>
+
+        <para><literal>@org.hibernate.annotations.TypeDef</literal> 和
+		 <literal>@org.hibernate.annotations.TypeDefs</literal>允许你来声明类型定义.
+		这些注解被置于类或包一级.注意,对session factory来说,
+		这些定义将是全局的(即使定义于类一级),并且类型定义必须先于任何使用.</para>
+
+        <programlisting>@TypeDefs(
+    {
+    @TypeDef(
+        name="caster",
+        typeClass = CasterStringType.class,
+        parameters = {
+            @Parameter(name="cast", value="lower")
+        }
+    )
+    }
+)
+package org.hibernate.test.annotations.entity;
+
+...
+public class Forest {
+    @Type(type="caster")
+    public String getSmallText() {
+    ...
+}
+         </programlisting>
+
+        <para>当使用组合的用户自定义类型时,你必须自己表示列的定义.
+<literal>@Columns</literal>就是为了此目的而引入的.</para>
+<programlisting>@Type(type="org.hibernate.test.annotations.entity.MonetaryAmountUserType")
+ at Columns(columns = {
+    @Column(name="r_amount"),
+    @Column(name="r_currency")
+})
+public MonetaryAmount getAmount() {
+    return amount;
+}
+
+
+public class MonetaryAmount implements Serializable {
+    private BigDecimal amount;
+    private Currency currency;
+    ...
+}</programlisting>
+      </sect3>
+
+      <sect3>
+        <title>索引</title>
+
+        <para>通过在列属性(property)上使用<literal>@Index</literal>注解,
+		可以在特定列上定义索引,columnNames属性(attribute)将随之被忽略.</para>
+
+        <programlisting>@Column(secondaryTable="Cat1")
+ at Index(name="story1index")
+public String getStoryPart1() {
+    return storyPart1;
+}</programlisting>
+      </sect3>
+
+      <sect3>
+        <title>@Parent</title>
+
+		<para>在嵌入式对象内部,你可以在那些指向该嵌入式对象所属元素的属性上定义该注解.</para>
+
+        <programlisting>@Entity
+public class Person {
+    @Embeddable public Address address;
+    ...
+}
+
+ at Embeddable
+public class Address {
+    @Parent public Person owner;
+    ...
+}
+
+
+person == person.address.owner</programlisting>
+      </sect3>
+
+      <sect3>
+        <title>生成的属性</title>
+
+        <para>
+		某些属性可以在对数据库做插入或更新操作的时候生成.
+		Hibernate能够处理这样的属性,并触发一个后续的查询来读取这些属性.
+		</para>
+
+        <programlisting>@Entity
+public class Antenna {
+    @Id public Integer id;
+    @Generated(GenerationTime.ALWAYS) @Column(insertable = false, updatable = false)
+    public String longitude;
+
+    @Generated(GenerationTime.INSERT) @Column(insertable = false)
+    public String latitude;
+}</programlisting>
+
+        <para>
+		你可以将属性注解为<literal>@Generated</literal>.
+		但是你要注意insertability和updatability不要和你选择的生成策略冲突.
+		如果选择了GenerationTime.INSERT,该属性不能包含insertable列,
+		如果选择了GenerationTime.ALWAYS,该属性不能包含insertable和updatable列.</para>
+
+        <para><literal>@Version</literal>属性不可以为
+        <literal>@Generated(INSERT)</literal>(设计时), 只能是
+        <literal>NEVER</literal>或<literal>ALWAYS</literal>.</para>
+      </sect3>
+
+    </sect2>
+
+    <sect2>
+      <title>继承</title>
+
+      <para>SINGLE_TABLE 是个功能强大的策略,但有时,特别对遗留系统而言,
+		是无法加入一个额外的辨别符列.
+		由此,Hibernate引入了辨别符公式(discriminator formula)的概念:
+		<literal>@DiscriminatorFormula</literal>是<literal>@DiscriminatorColumn</literal>的替代品,
+		它使用SQL片段作为辨别符解决方案的公式( 不需要有一个专门的字段).</para>
+
+      <programlisting>@Entity
+ at DiscriminatorForumla("case when forest_type is null then 0 else forest_type end")
+public class Forest { ... }</programlisting>
+    </sect2>
+
+    <sect2>
+      <title>关于单个关联关系的注解</title>
+
+      <para>默认情况下,当预期的被关联元素不在数据库中(关乎关联列的错误id),致使Hiberante无法解决关联性问题时,Hibernate就会抛出异常.
+      这对遗留schema和历经拙劣维护的schema而言,这或有许多不便.
+      此时,你可用 <literal>@NotFound </literal>注解让Hibernate略过这样的元素而不是抛出异常.
+      该注解可用于 <literal>@OneToOne </literal> (有外键)、 <literal>@ManyToOne </literal>、  
+      <literal>@OneToMany </literal> 或 <literal>@ManyToMany </literal>关联.</para>
+
+      <programlisting>@Entity
+public class Child {
+    ...
+    @ManyToOne
+    @NotFound(action=NotFoundAction.IGNORE)
+    public Parent getParent() { ... }
+    ...
+}</programlisting>
+
+      <para>
+	  有时候删除某实体的时候需要触发数据库的级联删除.</para>
+
+      <programlisting>@Entity
+public class Child {
+    ...
+    @ManyToOne
+    @OnDelete(action=OnDeleteAction.CASCADE)
+    public Parent getParent() { ... }
+    ...
+}</programlisting>
+
+      <para>上面这个例子中,Hibernate将生成一个数据库级的级联删除约束.</para>
+
+      <sect3>
+        <title>延迟选项和获取模式</title>
+
+        <para>
+		EJB3为延迟加载和获取模式提供了<literal>fetch</literal>选项,而Hibernate
+		这方面提供了更丰富的选项集.为了更好的调整延迟加载和获取策略,Hibernate引入了
+		一些附加的注解:</para>
+
+        <itemizedlist>
+          <listitem>
+            <para><literal>@LazyToOne</literal>: 定义了
+             <literal>@ManyToOne</literal> 和 <literal>@OneToOne</literal>
+            关联的延迟选项. <literal>LazyToOneOption</literal> 可以是
+            <literal>PROXY</literal> (例如:基于代理的延迟加载),
+            <literal>NO_PROXY</literal> (例如:基于字节码增强的延迟加载 - 注意需要在构建期处理字节码)
+            和 <literal>FALSE</literal> (非延迟加载的关联)</para>
+		  </listitem>
+
+          <listitem>
+            <para><literal>@LazyCollection</literal>: 定义了
+            <literal>@ManyToMany</literal>和
+            <literal>@OneToMany</literal>  关联的延迟选项. LazyCollectionOption
+            可以是<literal>TRUE</literal> (集合具有延迟性,只有在访问的时候才加载), 
+			<literal>EXTRA</literal> (集合具有延迟性,并且所有的操作都会尽量避免加载集合,
+			对于一个巨大的集合特别有用,因为这样的集合中的元素没有必要全部加载)和 FALSE
+            (非延迟加载的关联)</para>
+          </listitem>
+
+          <listitem>
+			<para><literal>@Fetch</literal>: 
+			定义了加载关联关系的获取策略. <literal>FetchMode</literal> 可以是
+            <literal>SELECT</literal> (在需要加载关联的时候触发select操作), 
+			<literal>SUBSELECT</literal>
+            (只对集合有效,使用了子查询策略,详情参考Hibernate参考文档) or 
+			<literal>JOIN</literal> (在加载主实体(owner entity)的时候使用SQL JOIN来加载关联关系).
+            <literal>JOIN</literal> 将覆写任何延迟属性 
+			(通过<literal>JOIN</literal>策略加载的关联将不再具有延迟性).</para>
+          </listitem>
+        </itemizedlist>
+
+        <para>The Hibernate annotations overrides the EJB3 fetching
+        options.</para>
+
+		<para>Hibernate注解覆写了EJB3提供的获取(fetch)选项.</para>
+
+        <table>
+          <title>延迟和获取选项的等效注解</title>
+
+          <tgroup cols="3">
+            <thead>
+              <row>
+                <entry>Annotations</entry>
+
+                <entry>Lazy</entry>
+
+                <entry>Fetch</entry>
+              </row>
+            </thead>
+
+            <tbody>
+              <row>
+                <entry>@[One|Many]ToOne](fetch=FetchType.LAZY)</entry>
+
+                <entry>@LazyToOne(PROXY)</entry>
+
+                <entry>@Fetch(SELECT)</entry>
+              </row>
+
+              <row>
+                <entry>@[One|Many]ToOne](fetch=FetchType.EAGER)</entry>
+
+                <entry>@LazyToOne(FALSE)</entry>
+
+                <entry>@Fetch(JOIN)</entry>
+              </row>
+
+              <row>
+                <entry>@ManyTo[One|Many](fetch=FetchType.LAZY)</entry>
+
+                <entry>@LazyCollection(TRUE)</entry>
+
+                <entry>@Fetch(SELECT)</entry>
+              </row>
+
+              <row>
+                <entry>@ManyTo[One|Many](fetch=FetchType.EAGER)</entry>
+
+                <entry>@LazyCollection(FALSE)</entry>
+
+                <entry>@Fetch(JOIN)</entry>
+              </row>
+            </tbody>
+          </tgroup>
+        </table>
+      </sect3>
+
+
+    </sect2>
+
+    <sect2 id="entity-hibspec-collection" revision="2">
+      <title>关于集合类型的注解</title>
+
+      <sect3>
+        <title>参数注解</title>
+
+        <para>以下是可能的设置方式<itemizedlist>
+            <listitem>
+               用@BatchSizebatch设置集合的batch大小 
+            </listitem>
+
+            <listitem>
+               用@Where注解设置Where子句
+            </listitem>
+
+            <listitem>
+               用注解@Check来设置check子句
+            </listitem>
+
+            <listitem>
+               用注解@OrderBy来设置SQL的order by子句
+            </listitem>
+
+            <listitem>
+               利用@OnDelete(action=OnDeleteAction.CASCADE) 注解设置级连删除策略
+            </listitem>
+          </itemizedlist></para>
+
+        <para>你也可以利用<literal>@Sort</literal>注解定义一个排序比较器(sort comparator),
+		表明希望的比较器类型,无序、自然顺序或自定义排序,三者择一.若你想用你自己实现的comparator,
+		你还需要利用<literal>comparator</literal>属性(attribute)指明实现类.</para>
+
+        <programlisting>    @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
+    @JoinColumn(name="CUST_ID")
+    @Sort(type = SortType.COMPARATOR, comparator = TicketComparator.class)
+    @Where(clause="1=1")
+    @OnDelete(action=OnDeleteAction.CASCADE)
+    public SortedSet&lt;Ticket&gt; getTickets() {
+        return tickets;
+    }</programlisting>
+
+        <para>关于这些注解更详细的信息,请参阅此前的描述.</para>
+
+      </sect3>
+
+      <sect3>
+        <title>更多的集合类型</title>
+
+        <para>比EJB3更胜一筹的是,Hibernate Annotations支持真正的
+			<classname>List</classname>和<classname>Array</classname>.
+			映射集合的方式和以前完全一样,只不过要新增<literal>@IndexColumn</literal>注解.
+			该注解允许你指明存放索引值的字段.你还可以定义代表数据库中首个元素的索引值(亦称为索引基数).
+			常见取值为<literal>0</literal>或<literal>1</literal>.</para>
+
+        <programlisting>@OneToMany(cascade = CascadeType.ALL)
+ at IndexColumn(name = "drawer_position", base=1)
+public List&lt;Drawer&gt; getDrawers() {
+    return drawers;
+}</programlisting>
+
+        <note>
+          <para>假如你忘了设置<literal>@IndexColumn</literal>,
+			Hibernate会采用包(bag)语义(译注:即允许重复元素的无序集合).</para>
+        </note>
+
+        <para>Hibernate注解支持true Map映射,
+		如果没有设置<literal>@javax.persistence.MapKey</literal>,
+		hibernate将key元素或嵌入式对象直接映射到他们所属的列.
+		要覆写默认的列,可以使用以下注解:
+		<literal>@org.hibernate.annotations.MapKey</literal>适用的key为基本类型或者嵌入式对象,
+		<literal>@org.hibernate.annotations.MapKey</literal>适用的key为实体.
+        </para>
+
+        <para>Hibernate Annotations还支持核心类型集合(Integer, String, Enums, ......)、
+		可内嵌对象的集合,甚至基本类型数组.这就是所谓的元素集合.</para>
+
+        <para>元素集合可用@CollectionOfElements来注解(作为@OneToMany的替代).
+		为了定义集合表(译注:即存放集合元素的表,与下面提到的主表对应),要在关联属性上使用@JoinTable注解,
+		joinColumns定义了介乎实体主表与集合表之间的连接字段(inverseJoincolumn是无效的且其值应为空).
+		对于核心类型的集合或基本类型数组,你可以在关联属性上用<literal>@Column</literal>来覆盖存放元素值的字段的定义.
+		你还可以用<literal>@AttributeOverride</literal>来覆盖存放可内嵌对象的字段的定义.
+		要访问集合元素,需要将该注解的name属性值设置为"element"("element"用于核心类型,而"element.serial"
+		用于嵌入式对象的serial属性).要访问集合的index/key,则将该注解的name属性值设置为"key".
+		</para>
+
+        <programlisting>@Entity
+public class Boy {
+    private Integer id;
+    private Set&lt;String&gt; nickNames = new HashSet&lt;String&gt;();
+    private int[] favoriteNumbers;
+    private Set&lt;Toy&gt; favoriteToys = new HashSet&lt;Toy&gt;();
+    private Set&lt;Character&gt; characters = new HashSet&lt;Character&gt;();
+
+    @Id @GeneratedValue
+    public Integer getId() {
+        return id;
+    }
+
+    <emphasis role="bold">@CollectionOfElements
+    public Set&lt;String&gt;</emphasis> getNickNames() {
+        return nickNames;
+    }
+
+    <emphasis role="bold">@CollectionOfElements
+    @JoinTable(
+            table=@Table(name="BoyFavoriteNumbers"),
+            joinColumns = @JoinColumn(name="BoyId")
+    )
+    @Column(name="favoriteNumber", nullable=false)</emphasis>
+    @IndexColumn(name="nbr_index")
+    public int[] getFavoriteNumbers() {
+        return favoriteNumbers;
+    }
+
+    <emphasis role="bold">@CollectionOfElements
+    @AttributeOverride( name="element.serial", column=@Column(name="serial_nbr") )</emphasis>
+    public Set&lt;Toy&gt; getFavoriteToys() {
+        return favoriteToys;
+    }
+
+    <emphasis role="bold">@CollectionOfElements
+    public Set&lt;Character&gt;</emphasis> getCharacters() {
+        return characters;
+    }
+    ...
+}
+
+public enum Character {
+    GENTLE,
+    NORMAL,
+    AGGRESSIVE,
+    ATTENTIVE,
+    VIOLENT,
+    CRAFTY
+}
+
+ at Embeddable
+public class Toy {
+    public String name;
+    public String serial;
+    public Boy owner;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getSerial() {
+        return serial;
+    }
+
+    public void setSerial(String serial) {
+        this.serial = serial;
+    }
+
+    <emphasis role="bold">@Parent</emphasis>
+    public Boy getOwner() {
+        return owner;
+    }
+
+    public void setOwner(Boy owner) {
+        this.owner = owner;
+    }
+
+
+    public boolean equals(Object o) {
+        if ( this == o ) return true;
+        if ( o == null || getClass() != o.getClass() ) return false;
+
+        final Toy toy = (Toy) o;
+
+        if ( !name.equals( toy.name ) ) return false;
+        if ( !serial.equals( toy.serial ) ) return false;
+
+        return true;
+    }
+
+    public int hashCode() {
+        int result;
+        result = name.hashCode();
+        result = 29 * result + serial.hashCode();
+        return result;
+    }
+}</programlisting>
+
+		<para>
+		在嵌入式对象的集合中,可以使用 <literal>@Parent</literal>注解嵌入式对象的某属性.
+		该属性指向该嵌入式对象所属的集合实体.</para>
+
+        <note>
+		  <para>旧版的Hibernate Annotations用<literal>@OneToMany</literal>来标识集合元素.
+			由于语义矛盾,我们引入了<literal>@CollectionOfElements</literal>注解.
+			用<literal>@OneToMany</literal>来标识集合元素的这种旧有方式目前尚有效,
+			但是不推荐使用,而且在以后的发布版本中不再支持这种方式.</para>
+        </note>
+      </sect3>
+    </sect2>
+
+    <sect2>
+      <title>缓存</title>
+
+      <para>为了优化数据库访问,你可以激活所谓的Hibernate二级缓存.该缓存是可以按每个实体和集合进行配置的.</para>
+
+      <para><literal>@org.hibernate.annotations.Cache</literal>定义了缓存策略及给定的二级缓存的范围.
+		此注解适用于根实体(非子实体),还有集合.</para>
+
+      <programlisting>@Entity
+ at Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
+public class Forest { ... }</programlisting>
+
+      <programlisting>    @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
+    @JoinColumn(name="CUST_ID")
+    @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
+    public SortedSet&lt;Ticket&gt; getTickets() {
+        return tickets;
+    }</programlisting>
+
+      <para></para>
+
+      <programlistingco>
+        <areaspec>
+          <area coords="2 55" id="hm1" />
+
+          <area coords="3 55" id="hm2" />
+
+          <area coords="4 55" id="hm3" />
+        </areaspec>
+
+        <programlisting>@Cache(
+    CacheConcurrencyStrategy usage();
+    String region() default "";
+    String include() default "all";
+)</programlisting>
+
+        <calloutlist>
+          <callout arearefs="hm1">
+            <para>usage: 给定缓存的并发策略(NONE,
+            READ_ONLY, NONSTRICT_READ_WRITE, READ_WRITE, TRANSACTIONAL)</para>
+          </callout>
+
+          <callout arearefs="hm2">
+            <para>region (可选的):缓存范围(默认为类的全限定类名或是集合的全限定角色名)</para>
+          </callout>
+
+          <callout arearefs="hm3">
+            <para><literal>include</literal> (可选的):值为all时包括了所有的属性(proterty),
+            为non-lazy时仅含非延迟属性(默认值为all)</para>
+          </callout>
+        </calloutlist>
+
+      </programlistingco>
+    </sect2>
+
+    <sect2>
+      <title>过滤器</title>
+
+      <para>Hibernate具有数据过滤器的概念,可在运行期应用于一个给定的session.过滤器需要事先定义好.</para>
+
+      <para><literal>@org.hibernate.annotations.FilterDef</literal> 或
+      <literal>@FilterDefs</literal> 定义过滤器声明,为同名过滤器所用.
+      过滤器声明带有一个name()和一个parameters()数组,<literal>@ParamDef</literal>包含name和type,
+      你还可以为给定的<literal>@filterDef</literal>定义一个defaultCondition()参数,
+      当<literal>@Filter</literal>中没有任何定义时,可使用该参数定义缺省条件.
+     <literal>@FilterDef</literal> (s)可以在类或包一级进行定义.</para>
+
+      <para>现在我们来定义应用于实体或集合加载时的SQL过滤器子句.我们使用<literal>@Filter</literal>,并将其置于实体或集合元素上.</para>
+
+      <para><programlisting>@Entity
+ at FilterDef(name="minLength", parameters={ @ParamDef( name="minLength", type="integer" ) } )
+ at Filters( {
+    @Filter(name="betweenLength", condition=":minLength &lt;= length and :maxLength &gt;= length"),
+    @Filter(name="minLength", condition=":minLength &lt;= length")
+} )
+public class Forest { ... }</programlisting></para>
+    </sect2>
+ 
+
+    <sect2>
+      <title>查询</title>
+
+      <para>由于Hibernate引入了
+      <literal>@org.hibernate.annotations.NamedQuery</literal>,
+      <literal>@org.hibernate.annotations.NamedQueries</literal>,
+      <literal>@org.hibernate.annotations.NamedNativeQuery</literal> 和
+      <literal>@org.hibernate.annotations.NamedNativeQueries</literal> 命名式查询,
+      因此Hibernate在命名式查询上比EBJ3规范中所定义的命名式查询提供了更多的特性.
+      他们在标准版中添加了可作为替代品的一些属性(attributes):</para>
+
+      <itemizedlist>
+        <listitem>
+          <para>flushMode: 定义查询的刷新模式(Always, Auto, Commit或Never)</para>
+        </listitem>
+
+        <listitem>
+          <para>cacheable: 查询该不该被缓存</para>
+        </listitem>
+
+        <listitem>
+          <para>cacheRegion: 若查询已被缓存时所用缓存的范围</para>
+        </listitem>
+
+        <listitem>
+          <para>fetchSize: 针对该查询的JDBC statement单次获取记录的数目</para>
+        </listitem>
+
+        <listitem>
+          <para>timeout: 查询超时</para>
+        </listitem>
+
+        <listitem>
+          <para>callable: 仅用于本地化查询(native query),对于存储过程设为true</para>
+        </listitem>
+
+        <listitem>
+          <para>comment: 一旦激活注释功能,我们会在向数据库交送查询请求时看到注释</para>
+        </listitem>
+
+        <listitem>
+          <para>cacheMode: 缓存交护模式(get, ignore,normal,或refresh)</para>
+        </listitem>
+
+        <listitem>
+          <para>readOnly: 不管是否从查询获取元素都是在只读模式下</para>
+        </listitem>
+      </itemizedlist>
+
+      <para>注意,EJB3已公开的最终草案中引入了<literal>@QueryHint</literal>的概念,
+      这可能是定义hints更好的方法.</para>
+    </sect2>
+  </sect1>
+
+</chapter>
\ No newline at end of file

Deleted: trunk/HibernateExt/annotations/doc/reference/zh_cn/modules/lucene.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/doc/reference/zh_cn/modules/lucene.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/doc/reference/zh_cn/modules/lucene.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,86 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<chapter id="lucene">
-  <title id="lucene">Hibernate与Lucene集成</title>
-
-  <para>Lucene是一个高性能的java搜索引擎库,可以从 Apache软件基金组织获取。
-  Hibernate Annotations包括一个注解包,它允许把任何域模型对象标记为可索引的,
-  并且对任何经由Hibernate进行持续化的实例,Hibernate 都会为之维护一个对应的Lucene索引。</para>
-
-  <sect1 id="lucene-intro">
-    <title>使用Lucene为实体建立索引</title>
-
-    <sect2>
-      <title>注解领域模型</title>
-
-      <para>首先,必须将一个持久类声明为
-      <literal>@Indexed</literal>:</para>
-
-      <programlisting>@Entity
- at Indexed(index="indexes/essays")
-public class Essay {
-    ...
-}</programlisting>
-
-      <para>属性<literal>index</literal>是告诉Hibernate, Lucene索引信息所在的位置(你文件系统的某个目录)。
-	  如果你想为所有的Lucene索引定义一个根目录,你可以在配置文件中用属性<literal>hibernate.lucene.index_dir</literal>进行配置。
-	  </para>
-
-      <para>Lucene索引包括四种字段:<emphasis>keyword</emphasis> 字段,<emphasis>text</emphasis>
-      字段,<emphasis>unstored</emphasis>字段和<emphasis>unindexed</emphasis>字段。
-      Hibernate注解提供了将实体属性标记为前三种被索引字段的注解。</para>
-
-      <programlisting>@Entity
- at Indexed(index="indexes/essays")
-public class Essay {
-    ...
-
-    @Id
-    @Keyword(id=true)
-    public Long getId() { return id; }
-    
-    @Text(name="Abstract")
-    public String getSummary() { return summary; }
-    
-    @Lob
-    @Unstored
-    public String getText() { return text; }
-    
-}</programlisting>
-
-      <para>这些注解定义了一个带有三个字段的索引:
-      <literal>Id</literal>, <literal>Abstract</literal> 和
-      <literal>Text</literal>.</para>
-
-      <para>注意:你必须在你的实体类的标志属性上指定
-      <literal>@Keyword(id=true)</literal> .</para>
-
-	  <para>用于对元素建立索引的分析器类是可以通过<literal>hibernate.lucene.analyzer</literal>属性进行配置的。
-	  如果没有定义,则把 <classname>org.apache.lucene.analysis.standard.StandardAnalyzer</classname>作为缺省。</para>
-
-    </sect2>
-
-    <sect2>
-      <title>启用自动索引</title>
-
-      <para>我们激活用于帧听三类Hibernate事件的 <literal>LuceneEventListener</literal>,
-	  这些事件会在变更被提交至数据库后产生。</para>
-
-      <programlisting>&lt;hibernate-configuration&gt;
-    ...
-    &lt;event type="post-commit-update" 
-        &lt;listener  
-            class="org.hibernate.lucene.event.LuceneEventListener"/&gt;
-    &lt;/event&gt;
-    &lt;event type="post-commit-insert" 
-        &lt;listener 
-            class="org.hibernate.lucene.event.LuceneEventListener"/&gt;
-    &lt;/event&gt;
-    &lt;event type="post-commit-delete" 
-        &lt;listener 
-            class="org.hibernate.lucene.event.LuceneEventListener"/&gt;
-    &lt;/event&gt;
-&lt;/hibernate-configuration&gt;</programlisting>
-    </sect2>
-  </sect1>
-</chapter>
-

Copied: trunk/HibernateExt/annotations/doc/reference/zh_cn/modules/lucene.xml (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/doc/reference/zh_cn/modules/lucene.xml)
===================================================================
--- trunk/HibernateExt/annotations/doc/reference/zh_cn/modules/lucene.xml	                        (rev 0)
+++ trunk/HibernateExt/annotations/doc/reference/zh_cn/modules/lucene.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<chapter id="lucene">
+  <title id="lucene">Hibernate与Lucene集成</title>
+
+  <para>Lucene是一个高性能的java搜索引擎库,可以从 Apache软件基金组织获取。
+  Hibernate Annotations包括一个注解包,它允许把任何域模型对象标记为可索引的,
+  并且对任何经由Hibernate进行持续化的实例,Hibernate 都会为之维护一个对应的Lucene索引。</para>
+
+  <sect1 id="lucene-intro">
+    <title>使用Lucene为实体建立索引</title>
+
+    <sect2>
+      <title>注解领域模型</title>
+
+      <para>首先,必须将一个持久类声明为
+      <literal>@Indexed</literal>:</para>
+
+      <programlisting>@Entity
+ at Indexed(index="indexes/essays")
+public class Essay {
+    ...
+}</programlisting>
+
+      <para>属性<literal>index</literal>是告诉Hibernate, Lucene索引信息所在的位置(你文件系统的某个目录)。
+	  如果你想为所有的Lucene索引定义一个根目录,你可以在配置文件中用属性<literal>hibernate.lucene.index_dir</literal>进行配置。
+	  </para>
+
+      <para>Lucene索引包括四种字段:<emphasis>keyword</emphasis> 字段,<emphasis>text</emphasis>
+      字段,<emphasis>unstored</emphasis>字段和<emphasis>unindexed</emphasis>字段。
+      Hibernate注解提供了将实体属性标记为前三种被索引字段的注解。</para>
+
+      <programlisting>@Entity
+ at Indexed(index="indexes/essays")
+public class Essay {
+    ...
+
+    @Id
+    @Keyword(id=true)
+    public Long getId() { return id; }
+    
+    @Text(name="Abstract")
+    public String getSummary() { return summary; }
+    
+    @Lob
+    @Unstored
+    public String getText() { return text; }
+    
+}</programlisting>
+
+      <para>这些注解定义了一个带有三个字段的索引:
+      <literal>Id</literal>, <literal>Abstract</literal> 和
+      <literal>Text</literal>.</para>
+
+      <para>注意:你必须在你的实体类的标志属性上指定
+      <literal>@Keyword(id=true)</literal> .</para>
+
+	  <para>用于对元素建立索引的分析器类是可以通过<literal>hibernate.lucene.analyzer</literal>属性进行配置的。
+	  如果没有定义,则把 <classname>org.apache.lucene.analysis.standard.StandardAnalyzer</classname>作为缺省。</para>
+
+    </sect2>
+
+    <sect2>
+      <title>启用自动索引</title>
+
+      <para>我们激活用于帧听三类Hibernate事件的 <literal>LuceneEventListener</literal>,
+	  这些事件会在变更被提交至数据库后产生。</para>
+
+      <programlisting>&lt;hibernate-configuration&gt;
+    ...
+    &lt;event type="post-commit-update" 
+        &lt;listener  
+            class="org.hibernate.lucene.event.LuceneEventListener"/&gt;
+    &lt;/event&gt;
+    &lt;event type="post-commit-insert" 
+        &lt;listener 
+            class="org.hibernate.lucene.event.LuceneEventListener"/&gt;
+    &lt;/event&gt;
+    &lt;event type="post-commit-delete" 
+        &lt;listener 
+            class="org.hibernate.lucene.event.LuceneEventListener"/&gt;
+    &lt;/event&gt;
+&lt;/hibernate-configuration&gt;</programlisting>
+    </sect2>
+  </sect1>
+</chapter>
+

Deleted: trunk/HibernateExt/annotations/doc/reference/zh_cn/modules/setup.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/doc/reference/zh_cn/modules/setup.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/doc/reference/zh_cn/modules/setup.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,129 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<chapter>
-  <title id="setup" revision="1">创建一个注解项目</title>
-
-  <section id="setup-requirements">
-    <title>系统需求</title>
-
-    <itemizedlist>
-      <listitem>
-        <para>首先从Hibernate官方网站下载并解压Hibernate Annotations的发布包。</para>
-      </listitem>
-
-      <listitem>
-        <para><emphasis>这个版本(预览版)要求使用Hibernate 3.2.0.CR2或更高版本。请不要和老版本的Hibernate 3.x混合起来使用。</emphasis></para>
-      </listitem>
-
-      <listitem>
-        <para>这个版本在Hibernate core 3.2.0.CR2的基础上工作良好。</para>
-      </listitem>
-
-      <listitem>
-        <para>首先确定你已经安装了JDK 5.0。当然就算使用低版本的JDK,
-        Xdoclet也可以提供(基于注解的)元数据所带来的部分功能。
-        不过请注意本文档只描述跟JDK5.0注解有关的内容,关于Xdoclet请参考相关文档。</para>
-      </listitem>
-    </itemizedlist>
-  </section>
-
-  <section id="setup-configuration">
-    <title>系统配置</title>
-
-    <para>首先就是设置classpath(当然是在IDE中创建了一个新项目之后)。 <itemizedlist>
-        <listitem>
-          <para>将Hibernate3核心文件以及其依赖的第三方库文件(请参考lib/README.txt文件)加入到你的classpath里面。</para>
-        </listitem>
-
-        <listitem>
-          <para>å°†<filename>hibernate-annotations.jar</filename>
-          和<filename>lib/ejb3-persistence.jar</filename>加入到你的classpath里面。</para>
-        </listitem>
-
-        <listitem>
-          <para>如果要使用 <xref linkend="lucene" />,还需要将lucene的jar文件加入你的classpath。</para>
-        </listitem>
-      </itemizedlist></para>
-
-    <para>我们推荐在一个包装器(wrapper)类<classname>HibernateUtil</classname>
-    的静态初始化代码块中启动Hibernate。或许你在Hibernate文档的其他很多地方看到过这个类,
-    但是要在你的项目中使用注解,还需要对这个辅助(helper)类进行扩展。扩展如下:
-    <programlisting>package hello;
-
-import org.hibernate.*;
-import org.hibernate.cfg.*;
-import test.*;
-import test.animals.Dog;
-
-public class HibernateUtil {
-
-private static final SessionFactory sessionFactory;
-
-    static {
-        try {
-
-            sessionFactory = new <emphasis role="bold">AnnotationConfiguration()</emphasis>.buildSessionFactory();
-        } catch (Throwable ex) {
-            // Log exception!
-            throw new ExceptionInInitializerError(ex);
-        }
-    }
-
-    public static Session getSession()
-            throws HibernateException {
-        return sessionFactory.openSession();
-    }
-}
-            </programlisting></para>
-
-    <para>这里比较有意思的是使用到了<classname>AnnotationConfiguration</classname>类。
-    在XML配置文件(通常是<filename>hibernate.cfg.xml</filename>)中则定义了包和经过注解的类。下面的xml和前面的声明等价:
-    </para>
-
-    <programlisting>&lt;!DOCTYPE hibernate-configuration PUBLIC
-    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
-    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"&gt;
-
-        &lt;hibernate-configuration&gt;
-          &lt;session-factory&gt;
-            <emphasis role="bold">&lt;mapping package="test.animals"/&gt;
-            &lt;mapping class="test.Flight"/&gt;
-            &lt;mapping class="test.Sky"/&gt;
-            &lt;mapping class="test.Person"/&gt;
-            &lt;mapping class="test.animals.Dog"/&gt;</emphasis>
-<emphasis role="bold">            &lt;mapping resource="test/animals/orm.xml"/&gt;</emphasis>
-          &lt;/session-factory&gt;
-        &lt;/hibernate-configuration&gt;
-        </programlisting>
-
-    <para>注意现在你可以混合使用hbm.xml和注解。资源元素(resource element)可以是hbm文件也可以是EJB3 XML发布描述符,此差别对于配置过程是透明的。</para>
-
-    <para>除了上面的方式,你还可以通过编程的方式定义包括注解的类和包</para>
-
-    <programlisting>            sessionFactory = new <emphasis role="bold">AnnotationConfiguration()
-                    .addPackage("test.animals") //the fully qualified package name
-                    .addAnnotatedClass(Flight.class)
-                    .addAnnotatedClass(Sky.class)
-                    .addAnnotatedClass(Person.class)
-                    .addAnnotatedClass(Dog.class)</emphasis>
-                    .buildSessionFactory();</programlisting>
-
-    <para>你也可以使用Hibernate Entity Manager来完成以上功能。Hibernate Entity Manager有自己的一套配置机制,详情请参考相关文档。</para>
-
-    <para>除了启动方式和配置文件有所改变之外,结合注解来使用Hibernate API和以前没有什么区别,
-    在其他方面你还是可以继续保持以前的习惯和喜好(<filename>hibernate.properties</filename>,
-    <filename>hibernate.cfg.xml</filename>, programmatic APIs等等)。
-    甚至对于同一个<classname>SessionFactory</classname>,你都可以混合带注解的持久类以及传统的bm.cfg.xml声明方式。
-    然而你不能多次声明同一个类(要么通过注解要么通过hbm.xml配置文件),
-    而且在一个映射实体的类继承层次中,这两个配置策略不能同时使用.
-    </para>
-
-    <para>为了简化从hbm文件到注解的迁移过程,
-    配置机制将自动检测在注解和hbm文件中重复的映射。
-    默认情况下hbm文件中的声明比类中的注解元数据具有更高的优先级。
-    这种优先级的设定是以类为单位的。
-    你也可以通过<literal>hibernate.mapping.precedence</literal>修改这种优先级。
-    默认的值是<literal>hbm, class</literal>,
-    如果改为<literal>class,hbm</literal>,当发生冲突的时候,类中的注解将比hbm文件具有更高的优先级。
-    </para>
-  </section>
-</chapter>
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/doc/reference/zh_cn/modules/setup.xml (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/doc/reference/zh_cn/modules/setup.xml)
===================================================================
--- trunk/HibernateExt/annotations/doc/reference/zh_cn/modules/setup.xml	                        (rev 0)
+++ trunk/HibernateExt/annotations/doc/reference/zh_cn/modules/setup.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<chapter>
+  <title id="setup" revision="1">创建一个注解项目</title>
+
+  <section id="setup-requirements">
+    <title>系统需求</title>
+
+    <itemizedlist>
+      <listitem>
+        <para>首先从Hibernate官方网站下载并解压Hibernate Annotations的发布包。</para>
+      </listitem>
+
+      <listitem>
+        <para><emphasis>这个版本(预览版)要求使用Hibernate 3.2.0.CR2或更高版本。请不要和老版本的Hibernate 3.x混合起来使用。</emphasis></para>
+      </listitem>
+
+      <listitem>
+        <para>这个版本在Hibernate core 3.2.0.CR2的基础上工作良好。</para>
+      </listitem>
+
+      <listitem>
+        <para>首先确定你已经安装了JDK 5.0。当然就算使用低版本的JDK,
+        Xdoclet也可以提供(基于注解的)元数据所带来的部分功能。
+        不过请注意本文档只描述跟JDK5.0注解有关的内容,关于Xdoclet请参考相关文档。</para>
+      </listitem>
+    </itemizedlist>
+  </section>
+
+  <section id="setup-configuration">
+    <title>系统配置</title>
+
+    <para>首先就是设置classpath(当然是在IDE中创建了一个新项目之后)。 <itemizedlist>
+        <listitem>
+          <para>将Hibernate3核心文件以及其依赖的第三方库文件(请参考lib/README.txt文件)加入到你的classpath里面。</para>
+        </listitem>
+
+        <listitem>
+          <para>å°†<filename>hibernate-annotations.jar</filename>
+          和<filename>lib/ejb3-persistence.jar</filename>加入到你的classpath里面。</para>
+        </listitem>
+
+        <listitem>
+          <para>如果要使用 <xref linkend="lucene" />,还需要将lucene的jar文件加入你的classpath。</para>
+        </listitem>
+      </itemizedlist></para>
+
+    <para>我们推荐在一个包装器(wrapper)类<classname>HibernateUtil</classname>
+    的静态初始化代码块中启动Hibernate。或许你在Hibernate文档的其他很多地方看到过这个类,
+    但是要在你的项目中使用注解,还需要对这个辅助(helper)类进行扩展。扩展如下:
+    <programlisting>package hello;
+
+import org.hibernate.*;
+import org.hibernate.cfg.*;
+import test.*;
+import test.animals.Dog;
+
+public class HibernateUtil {
+
+private static final SessionFactory sessionFactory;
+
+    static {
+        try {
+
+            sessionFactory = new <emphasis role="bold">AnnotationConfiguration()</emphasis>.buildSessionFactory();
+        } catch (Throwable ex) {
+            // Log exception!
+            throw new ExceptionInInitializerError(ex);
+        }
+    }
+
+    public static Session getSession()
+            throws HibernateException {
+        return sessionFactory.openSession();
+    }
+}
+            </programlisting></para>
+
+    <para>这里比较有意思的是使用到了<classname>AnnotationConfiguration</classname>类。
+    在XML配置文件(通常是<filename>hibernate.cfg.xml</filename>)中则定义了包和经过注解的类。下面的xml和前面的声明等价:
+    </para>
+
+    <programlisting>&lt;!DOCTYPE hibernate-configuration PUBLIC
+    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
+    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"&gt;
+
+        &lt;hibernate-configuration&gt;
+          &lt;session-factory&gt;
+            <emphasis role="bold">&lt;mapping package="test.animals"/&gt;
+            &lt;mapping class="test.Flight"/&gt;
+            &lt;mapping class="test.Sky"/&gt;
+            &lt;mapping class="test.Person"/&gt;
+            &lt;mapping class="test.animals.Dog"/&gt;</emphasis>
+<emphasis role="bold">            &lt;mapping resource="test/animals/orm.xml"/&gt;</emphasis>
+          &lt;/session-factory&gt;
+        &lt;/hibernate-configuration&gt;
+        </programlisting>
+
+    <para>注意现在你可以混合使用hbm.xml和注解。资源元素(resource element)可以是hbm文件也可以是EJB3 XML发布描述符,此差别对于配置过程是透明的。</para>
+
+    <para>除了上面的方式,你还可以通过编程的方式定义包括注解的类和包</para>
+
+    <programlisting>            sessionFactory = new <emphasis role="bold">AnnotationConfiguration()
+                    .addPackage("test.animals") //the fully qualified package name
+                    .addAnnotatedClass(Flight.class)
+                    .addAnnotatedClass(Sky.class)
+                    .addAnnotatedClass(Person.class)
+                    .addAnnotatedClass(Dog.class)</emphasis>
+                    .buildSessionFactory();</programlisting>
+
+    <para>你也可以使用Hibernate Entity Manager来完成以上功能。Hibernate Entity Manager有自己的一套配置机制,详情请参考相关文档。</para>
+
+    <para>除了启动方式和配置文件有所改变之外,结合注解来使用Hibernate API和以前没有什么区别,
+    在其他方面你还是可以继续保持以前的习惯和喜好(<filename>hibernate.properties</filename>,
+    <filename>hibernate.cfg.xml</filename>, programmatic APIs等等)。
+    甚至对于同一个<classname>SessionFactory</classname>,你都可以混合带注解的持久类以及传统的bm.cfg.xml声明方式。
+    然而你不能多次声明同一个类(要么通过注解要么通过hbm.xml配置文件),
+    而且在一个映射实体的类继承层次中,这两个配置策略不能同时使用.
+    </para>
+
+    <para>为了简化从hbm文件到注解的迁移过程,
+    配置机制将自动检测在注解和hbm文件中重复的映射。
+    默认情况下hbm文件中的声明比类中的注解元数据具有更高的优先级。
+    这种优先级的设定是以类为单位的。
+    你也可以通过<literal>hibernate.mapping.precedence</literal>修改这种优先级。
+    默认的值是<literal>hbm, class</literal>,
+    如果改为<literal>class,hbm</literal>,当发生冲突的时候,类中的注解将比hbm文件具有更高的优先级。
+    </para>
+  </section>
+</chapter>
\ No newline at end of file

Deleted: trunk/HibernateExt/annotations/doc/reference/zh_cn/modules/validator.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/doc/reference/zh_cn/modules/validator.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/doc/reference/zh_cn/modules/validator.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,464 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<chapter id="validator">
-  <title>Hibernate验证器</title>
-
-  <para>注解是一种为领域模型(domain model)指定不变约束的简洁而幽雅的方法。例如,你能
-  表示一个属性永远不为null,一个帐户余额一定是正值,等等。这些域模型约束通过为bean中的属性添加
-  注解来加以声明。随后一个验证器(validator)会读取并检查这些约束。验证机制可以执行于应用程序中的
-  不同层(表现层、数据访问层),而不必复述任何(前述)这些规则。Hibernate验证器正为这一目的而设计的。</para>
-
-  <para>Hibernate验证器工作在两个层次上。第一层,它能检查内存中一个类的实例是否违反约束。
-  第二层,它能将约束应用于Hibernate元模型上,并将它们融入生成的数据库schema中。</para>
-  
-  <para>每个约束注解(constraint annotation)和一个验证器实现关联,该验证器负责检查位于实体实例上的约束。
-  一个验证器也能(可选地)将约束应用于Hibernate元模型上,让Hibernate生成表示这一约束的DDL。使用合适的事件监听器,你能
-  让Hibernate在插入和更新时执行检查操作。Hibernate验证器并不局限于同Hibernate一起使用。
-  你能在你应用程序的任何地方方便地使用它。</para>
-
-  <para>在运行时检查实例时,Hibernate验证器返回违反约束的信息,
-  这些信息以一个<classname>InvalidValue</classname>数组的形式返回。
-  除了众多其他信息外,<classname>InvalidValue</classname>包含了一个错误描述消
-  息,该信息可以内嵌与注解相捆绑的参数值(例如长度限制),以及能被提取至ResourceBundle的消息字串。</para>
-
-  <sect1 id="validator-constraints">
-    <title>约束</title>
-
-    <sect2>
-      <title>什么是约束?</title>
-
-      <para>约束通过注解表示。一个约束通常有一些用来参数化约束限制的属性。约束应用于带注解的元素。</para>
-    </sect2>
-
-    <sect2>
-      <title>内建约束</title>
-
-      <para>Hibernate验证器有些内建约束,这些约束覆盖了大多数的基本数据检查。随后我们会看到,
-      你不必受制于这些内置约束,因为一分钟内就可以写出你自己的约束。</para>
-
-      <table>
-        <title>内建约束</title>
-
-        <tgroup cols="4">
-          <colspec align="center" />
-
-          <thead>
-            <row>
-              <entry>注解</entry>
-
-              <entry>应用目标</entry>
-
-              <entry>运行时检查</entry>
-
-              <entry>Hibernate元数据影响</entry>
-            </row>
-          </thead>
-
-          <tbody>
-          
-            <row>
-              <entry>@Length(min=, max=)</entry>
-
-              <entry>属性(String)</entry>
-
-              <entry>检查字符串长度是否符合范围</entry>
-
-              <entry>列长度会被设到最大值</entry>
-            </row>
-
-            <row>
-              <entry>@Max(value=)</entry>
-
-              <entry>属性 (以numeric或者string类型来表示一个数字)</entry>
-
-              <entry>检查值是否小于或等于最大值</entry>
-
-              <entry>对列增加一个检查约束</entry>
-            </row>
-
-            <row>
-              <entry>@Min(value=)</entry>
-
-              <entry>属性(以numeric或者string类型来表示一个数字)</entry>
-
-              <entry>检查值是否大于或等于最小值</entry>
-
-              <entry>对列增加一个检查约束</entry>
-            </row>
-
-            <row>
-              <entry>@NotNull</entry>
-
-              <entry>属性</entry>
-
-              <entry>检查值是否非空(not null)</entry>
-
-              <entry>列不为空</entry>
-            </row>
-
-            <row>
-              <entry>@Past</entry>
-
-              <entry>属性(date或calendar)</entry>
-
-              <entry>检查日期是否是过去时</entry>
-
-              <entry>对列增加一个检查约束</entry>
-            </row>
-
-            <row>
-              <entry>@Future</entry>
-
-              <entry>属性 (date 或 calendar)</entry>
-
-              <entry>检查日期是否是将来时</entry>
-
-              <entry>æ— </entry>
-            </row>
-
-            <row>
-              <entry>@Pattern(regex="regexp", flag=)</entry>
-
-              <entry>属性 (string)</entry>
-
-              <entry>检查属性是否与给定匹配标志的正则表达式相匹配(见<classname> 
-              java.util.regex.Pattern </classname>)</entry>
-
-              <entry>æ— </entry>
-            </row>
-
-            <row>
-              <entry>@Range(min=, max=)</entry>
-
-              <entry>属性(以numeric或者string类型来表示一个数字)</entry>
-
-              <entry>检查值是否在最小和最大值之间(包括临界值)</entry>
-
-              <entry>对列增加一个检查约束</entry>
-            </row>
-            
-            <row>
-              <entry>@Size(min=, max=)</entry>
-
-              <entry>属性 (array, collection, map)</entry>
-
-              <entry>检查元素大小是否在最小和最大值之间(包括临界值)</entry>
-
-              <entry>æ— </entry>
-            </row>
-
-            <row>
-              <entry>@AssertFalse</entry>
-
-              <entry>属性</entry>
-
-              <entry>检查方法的演算结果是否为false(对以代码方式而不是注解表示的约束很有用)</entry>
-
-              <entry>æ— </entry>
-            </row>
-
-            <row>
-              <entry>@AssertTrue</entry>
-
-              <entry>属性</entry>
-
-              <entry>检查方法的演算结果是否为true(对以代码方式而不是注解表示的约束很有用)</entry>
-
-              <entry>æ— </entry>
-            </row>
-
-            <row>
-              <entry>@Valid</entry>
-
-              <entry>属性 (object)</entry>
-
-              <entry>对关联对象递归的进行验证。如果对象是集合或数组,就递归地验证其元素。如果对象是Map,则递归验证其值元素。</entry>
-
-              <entry>æ— </entry>
-            </row>
-
-	        <row>
-              <entry>@Email</entry>
-
-              <entry>属性(String)</entry>
-
-              <entry>检查字符串是否符合有效的email地址规范。</entry>
-
-              <entry>æ— </entry>
-            </row>
-
-          </tbody>
-        </tgroup>
-      </table>
-    </sect2>
-
-    <sect2 id="validator-constraints-error" xreflabel="Error messages">
-      <title id="validator-constraints-error">错误信息</title>
-
-      <para>Hibernate验证器提供了一组默认的错误提示信息,它们被翻译成多种语言(如果你的语言不在其中,请给
-      我们寄一个补丁)。你可以在<filename>org.hibernate.validator.resources.DefaultValidatorMessages.properties</filename>
-      之外创建<filename>ValidatorMessages.properties</filename>或<filename>ValidatorMessages_loc.properties</filename>
-      文件并改变相应的键值,籍此覆盖那些(默认)信息。你甚至可以在写自己的验证器
-      注解时添加你自己的附加消息集。</para>
-
-      <para>或者你可以以编程方式检查bean的验证规则并提供相应的<classname>ResourceBundle</classname>。</para>
-    </sect2>
-
-    <sect2>
-      <title>编写你自己的约束</title>
-
-      <para>扩展内建约束集是极其方便的。任何约束都包括两部分:约束<emphasis>描述符</emphasis>(注解)
-      和约束<emphasis>验证器</emphasis>(实现类)。下面是一个简单的用户定义描述符:</para>
-
-      <programlisting>@ValidatorClass(CapitalizedValidator.class)
- at Target(METHOD) 
- at Retention(RUNTIME)
- at Documented
-public @interface Capitalized {
-    CapitalizeType type() default Capitalize.FIRST;
-    String message() default "has incorrect capitalization";
-}</programlisting>
-
-      <para><literal>type</literal>参数描述属性应该如何被大写。这是一个完全依赖于注解业务(逻辑)的用户
-      参数。</para>
-
-      <para><literal>message</literal>是用于描述约束违规的默认字符串,它是强制要求的。你可以采取硬编码的方式,
-      或者通过Java ResourceBundle机制将message的部分/全部内容提取至外部文件。一旦发现message中{parameter}字符串,
-      就会在{parameter}这个位置注入相应的参数值(在我们的例子里Capitalization is not {type}会生成 Capitalization is not FIRST),
-      可以将message对应的整个字符串提取至外部文件ValidatorMessages.properties,这也是一种良好实践。
-      见<xref linkend="validator-constraints-error" />。</para>
-
-      <programlisting>@ValidatorClass(CapitalizedValidator.class)
- at Target(METHOD) 
- at Retention(RUNTIME)
- at Documented
-public @interface Capitalized {
-    CapitalizeType type() default Capitalize.FIRST;
-    String message() default "{validator.capitalized}";
-}
-
-...
-#in ValidatorMessages.properties
-validator.capitalized=<literal>Capitalization is not {type}</literal></programlisting>
-
-      <para>如你所见{}符号是递归的。</para>
-
-      <para>为了将一个描述符连接到它的验证器实现,我们使用<literal>@ValidatorClass</literal>
-      元注解。验证器类参数必须指定一个实现了<literal>Validator&lt;ConstraintAnnotation&gt;</literal>
-      的类。</para>
-
-      <para>我们现在要实现验证器(也就是实现规则检查)。一个验证器实现能检查一个属性的值
-      (实现<literal>PropertyConstraint</literal>),并且/或者可以修改hibernate映射元数据
-      (实现<literal>PersistentClassConstraint</literal>),籍此表示数据库级的约束。</para>
-
-      <programlisting>public class CapitalizedValidator 
-        implements Validator&lt;Capitalized&gt;, PropertyConstraint {
-    private CapitalizeType type;
-
-    //part of the Validator&lt;Annotation&gt; contract, 
-    //allows to get and use the annotation values
-    public void initialize(Capitalized parameters) {
-        type = parameters.type();
-    }
-
-    //part of the property constraint contract
-    public boolean isValid(Object value) {
-        if (value==null) return true;
-        if ( !(value instanceof String) ) return false;
-        String string = (String) value;
-        if (type == CapitalizeType.ALL) {
-            return string.equals( string.toUpperCase() );
-        }
-        else {
-            String first = string.substring(0,1);
-            return first.equals( first.toUpperCase();
-        }
-    }
-}</programlisting>
-
-      <para>如果违反约束,<literal>isValid()</literal>方法将返回false。更多例子请参考内建验证器实现。</para>
-
-      <para>至此我们只看到属性级的验证,你还可以写一个Bean级别的验证注解。Bean自身会被传递给验证器,
-      而不是bean的属性实例。只要对bean自身进行注解即可激活验证检查。在单元测试套件中还可以找到一个小例子。</para>
-    </sect2>
-
-    <sect2>
-      <title>注解你的领域模型</title>
-
-      <para>既然你现在已经熟悉注解了,那么对语法也应该很清楚了。</para>
-
-      <programlisting>public class Address {
-    private String line1;
-    private String line2;
-    private String zip;
-    private String state;
-    private String country;
-    private long id;
-    
-    // a not null string of 20 characters maximum
-    @Length(max=20) 
-    @NotNull
-    public String getCountry() {
-        return country;
-    }
-    
-    // a non null string
-    @NotNull
-    public String getLine1() {
-        return line1;
-    }
-
-    //no constraint    
-    public String getLine2() {
-        return line2;
-    }
-    
-    // a not null string of 3 characters maximum
-    @Length(max=3) @NotNull
-    public String getState() {
-        return state;
-    }
-
-    // a not null numeric string of 5 characters maximum
-    // if the string is longer, the message will 
-    //be searched in the resource bundle at key 'long'
-    @Length(max=5, message="{long}")
-    @Pattern(regex="[0-9]+")
-    @NotNull
-    public String getZip() {
-        return zip;
-    }
-    
-    // should always be true
-    @AssertTrue
-    public boolean isValid() {
-        return true;
-    }
-
-    // a numeric between 1 and 2000
-    @Id @Min(1)
-    @Range(max=2000)
-    public long getId() {
-        return id;
-    }
-}</programlisting>
-
-      <para>上面的例子只展示了公共属性验证,你还可以对任何可见度的字段(field)进行注解。</para>
-
-      <programlisting>@MyBeanConstraint(max=45)
-public class Dog {
-    @AssertTrue private boolean isMale;
-    @NotNull protected String getName() { ... };
-    ...
-}</programlisting>
-
-      <para>你可以对接口进行注解。Hibernate验证器会检查给定bean所扩展或实现的所有父类和接口,
-      籍以读取相应的验证器注解(信息)。</para>
-
-      <programlisting>public interface Named {
-    @NotNull String getName();
-    ...
-}
-
-public class Dog implements Named {
-
-    @AssertTrue private boolean isMale;
-
-    public String getName() { ... };
-
-}</programlisting>
-
-      <para>在验证Dog bean时会检查name属性的有效性(不为null)。</para>
-    </sect2>
-  </sect1>
-
-  <sect1>
-    <title>使用验证器框架</title>
-
-    <para>Hibernate验证器旨在实现多层数据验证,我们在一处表示约束(带注解的域模型),然后将其运用于
-    应用程序的不同层。</para>
-
-    <sect2>
-      <title>数据库schema层次验证</title>
-
-      <para>无须额外手续,Hibernate Annotations会自动将你为实体定义的约束翻译为映射元数据。例如,如果你的实体
-      的一个属性注解为<literal>@NotNull</literal>,在Hibernate生成的DDL schema中这列会被定义为
-      <literal>not null</literal>。</para>
-    </sect2>
-
-    <sect2>
-      <title>Hibernate基于事件的验证</title>
-
-      <para>Hibernate验证器有两个内建Hibernate事件监听器。当一个<literal>PreInsertEvent</literal>
-      或<literal>PreUpdateEvent</literal>发生时,监听器会验证该实体实例的所有约束,如有违反会抛出一个异常。
-      基本上,在Hibernate执行任何插入和更新前对象会被检查。这是激活验证过程的最便捷最简单的方法。当遇到约束
-      违规时,事件会引发一个运行时<classname>InvalidStateException</classname>,该异常包含一个描述每个错误的
-      <literal>InvalidValue</literal>数组。</para>
-
-      <programlisting>&lt;hibernate-configuration&gt;
-    ...
-    &lt;event type="pre-update"&gt;
-        &lt;listener 
-          class="org.hibernate.validator.event.ValidatePreUpdateEventListener"/&gt;
-    &lt;/event&gt;
-    &lt;event type="pre-insert"&gt;
-        &lt;listener 
-          class="org.hibernate.validator.event.ValidatePreInsertEventListener"/&gt;
-    &lt;/event&gt;
-&lt;/hibernate-configuration&gt;</programlisting>
-
-      <para><note>
-          <para>在使用Hibernate Entity Manager时,Validation框架会被自动激活。如果bean不带验证注解,
-          就不会有性能损失。</para>
-        </note></para>
-    </sect2>
-
-    <sect2>
-      <title>程序级验证</title>
-
-      <para>Hibernate验证器能应用于你应用程序代码中的任何地方。</para>
-
-      <programlisting>ClassValidator personValidator = new ClassValidator( Person.class );
-ClassValidator addressValidator = new ClassValidator( Address.class, ResourceBundle.getBundle("messages", Locale.ENGLISH) );
-
-InvalidValue[] validationMessages = addressValidator.getInvalidValues(address);</programlisting>
-
-      <para>头两行为执行类检查而准备Hibernate验证器。第一行依赖于嵌入在Hibernate验证器内的错误
-      消息(见<xref linkend="validator-constraints-error" />),第二行为这些消息准备资源包。这些代码只执行一次,
-      并将验证器进行缓存处理,这种方式是一种良好实践。</para>
-
-      <para>第三行真正验证了<literal>Address</literal>实例并返回一个<literal>InvalidValue</literal>数组。
-      你的应用程序逻辑随后可以对错误做出响应。</para>
-
-      <para>除了针对整个bean你还可以对某个特定属性进行检查。这对于一个属性一个属性的用户交互情形或许是有用的。</para>
-
-      <programlisting>ClassValidator addressValidator = new ClassValidator( Address.class, ResourceBundle.getBundle("messages", Locale.ENGLISH) );
-
-//only get city property invalid values
-InvalidValue[] validationMessages = addressValidator.getInvalidValues(address, "city");
-
-//only get potential city property invalid values
-InvalidValue[] validationMessages = addressValidator.getPotentialInvalidValues("city", "Paris")</programlisting>
-    </sect2>
-
-    <sect2>
-      <title>验证信息</title>
-
-      <para>作为一个验证信息的载体,hibernate提供了一个<classname>InvalidValue</classname>数组。
-      每个<literal>InvalidValue</literal>有一组,这些方法分别描述相应的个体问题。</para>
-
-      <para><methodname>getBeanClass()</methodname>获取失败的bean类型。</para>
-
-      <para><methodname>getBean()</methodname>获取验证失败的实例(如果有的话,当使用
-      <methodname>getPotentianInvalidValues()</methodname>时则不会取到) </para>
-
-      <para><methodname>getValue()</methodname>获取验证失败的值</para>
-
-      <para><methodname>getMessage()</methodname>获取合适的国际化错误消息</para>
-
-      <para><methodname>getRootBean()</methodname>获取产生问题的根bean实例(在与<literal>@Valid</literal>连用
-      时很有用),如用getPotentianInvalidValues()则返回null。</para>
-
-      <para><literal>getPropertyPath()</literal>获取“问题”属性从根bean开始的带点的路径</para>
-    </sect2>
-  </sect1>
-</chapter>
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/doc/reference/zh_cn/modules/validator.xml (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/doc/reference/zh_cn/modules/validator.xml)
===================================================================
--- trunk/HibernateExt/annotations/doc/reference/zh_cn/modules/validator.xml	                        (rev 0)
+++ trunk/HibernateExt/annotations/doc/reference/zh_cn/modules/validator.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,464 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<chapter id="validator">
+  <title>Hibernate验证器</title>
+
+  <para>注解是一种为领域模型(domain model)指定不变约束的简洁而幽雅的方法。例如,你能
+  表示一个属性永远不为null,一个帐户余额一定是正值,等等。这些域模型约束通过为bean中的属性添加
+  注解来加以声明。随后一个验证器(validator)会读取并检查这些约束。验证机制可以执行于应用程序中的
+  不同层(表现层、数据访问层),而不必复述任何(前述)这些规则。Hibernate验证器正为这一目的而设计的。</para>
+
+  <para>Hibernate验证器工作在两个层次上。第一层,它能检查内存中一个类的实例是否违反约束。
+  第二层,它能将约束应用于Hibernate元模型上,并将它们融入生成的数据库schema中。</para>
+  
+  <para>每个约束注解(constraint annotation)和一个验证器实现关联,该验证器负责检查位于实体实例上的约束。
+  一个验证器也能(可选地)将约束应用于Hibernate元模型上,让Hibernate生成表示这一约束的DDL。使用合适的事件监听器,你能
+  让Hibernate在插入和更新时执行检查操作。Hibernate验证器并不局限于同Hibernate一起使用。
+  你能在你应用程序的任何地方方便地使用它。</para>
+
+  <para>在运行时检查实例时,Hibernate验证器返回违反约束的信息,
+  这些信息以一个<classname>InvalidValue</classname>数组的形式返回。
+  除了众多其他信息外,<classname>InvalidValue</classname>包含了一个错误描述消
+  息,该信息可以内嵌与注解相捆绑的参数值(例如长度限制),以及能被提取至ResourceBundle的消息字串。</para>
+
+  <sect1 id="validator-constraints">
+    <title>约束</title>
+
+    <sect2>
+      <title>什么是约束?</title>
+
+      <para>约束通过注解表示。一个约束通常有一些用来参数化约束限制的属性。约束应用于带注解的元素。</para>
+    </sect2>
+
+    <sect2>
+      <title>内建约束</title>
+
+      <para>Hibernate验证器有些内建约束,这些约束覆盖了大多数的基本数据检查。随后我们会看到,
+      你不必受制于这些内置约束,因为一分钟内就可以写出你自己的约束。</para>
+
+      <table>
+        <title>内建约束</title>
+
+        <tgroup cols="4">
+          <colspec align="center" />
+
+          <thead>
+            <row>
+              <entry>注解</entry>
+
+              <entry>应用目标</entry>
+
+              <entry>运行时检查</entry>
+
+              <entry>Hibernate元数据影响</entry>
+            </row>
+          </thead>
+
+          <tbody>
+          
+            <row>
+              <entry>@Length(min=, max=)</entry>
+
+              <entry>属性(String)</entry>
+
+              <entry>检查字符串长度是否符合范围</entry>
+
+              <entry>列长度会被设到最大值</entry>
+            </row>
+
+            <row>
+              <entry>@Max(value=)</entry>
+
+              <entry>属性 (以numeric或者string类型来表示一个数字)</entry>
+
+              <entry>检查值是否小于或等于最大值</entry>
+
+              <entry>对列增加一个检查约束</entry>
+            </row>
+
+            <row>
+              <entry>@Min(value=)</entry>
+
+              <entry>属性(以numeric或者string类型来表示一个数字)</entry>
+
+              <entry>检查值是否大于或等于最小值</entry>
+
+              <entry>对列增加一个检查约束</entry>
+            </row>
+
+            <row>
+              <entry>@NotNull</entry>
+
+              <entry>属性</entry>
+
+              <entry>检查值是否非空(not null)</entry>
+
+              <entry>列不为空</entry>
+            </row>
+
+            <row>
+              <entry>@Past</entry>
+
+              <entry>属性(date或calendar)</entry>
+
+              <entry>检查日期是否是过去时</entry>
+
+              <entry>对列增加一个检查约束</entry>
+            </row>
+
+            <row>
+              <entry>@Future</entry>
+
+              <entry>属性 (date 或 calendar)</entry>
+
+              <entry>检查日期是否是将来时</entry>
+
+              <entry>æ— </entry>
+            </row>
+
+            <row>
+              <entry>@Pattern(regex="regexp", flag=)</entry>
+
+              <entry>属性 (string)</entry>
+
+              <entry>检查属性是否与给定匹配标志的正则表达式相匹配(见<classname> 
+              java.util.regex.Pattern </classname>)</entry>
+
+              <entry>æ— </entry>
+            </row>
+
+            <row>
+              <entry>@Range(min=, max=)</entry>
+
+              <entry>属性(以numeric或者string类型来表示一个数字)</entry>
+
+              <entry>检查值是否在最小和最大值之间(包括临界值)</entry>
+
+              <entry>对列增加一个检查约束</entry>
+            </row>
+            
+            <row>
+              <entry>@Size(min=, max=)</entry>
+
+              <entry>属性 (array, collection, map)</entry>
+
+              <entry>检查元素大小是否在最小和最大值之间(包括临界值)</entry>
+
+              <entry>æ— </entry>
+            </row>
+
+            <row>
+              <entry>@AssertFalse</entry>
+
+              <entry>属性</entry>
+
+              <entry>检查方法的演算结果是否为false(对以代码方式而不是注解表示的约束很有用)</entry>
+
+              <entry>æ— </entry>
+            </row>
+
+            <row>
+              <entry>@AssertTrue</entry>
+
+              <entry>属性</entry>
+
+              <entry>检查方法的演算结果是否为true(对以代码方式而不是注解表示的约束很有用)</entry>
+
+              <entry>æ— </entry>
+            </row>
+
+            <row>
+              <entry>@Valid</entry>
+
+              <entry>属性 (object)</entry>
+
+              <entry>对关联对象递归的进行验证。如果对象是集合或数组,就递归地验证其元素。如果对象是Map,则递归验证其值元素。</entry>
+
+              <entry>æ— </entry>
+            </row>
+
+	        <row>
+              <entry>@Email</entry>
+
+              <entry>属性(String)</entry>
+
+              <entry>检查字符串是否符合有效的email地址规范。</entry>
+
+              <entry>æ— </entry>
+            </row>
+
+          </tbody>
+        </tgroup>
+      </table>
+    </sect2>
+
+    <sect2 id="validator-constraints-error" xreflabel="Error messages">
+      <title id="validator-constraints-error">错误信息</title>
+
+      <para>Hibernate验证器提供了一组默认的错误提示信息,它们被翻译成多种语言(如果你的语言不在其中,请给
+      我们寄一个补丁)。你可以在<filename>org.hibernate.validator.resources.DefaultValidatorMessages.properties</filename>
+      之外创建<filename>ValidatorMessages.properties</filename>或<filename>ValidatorMessages_loc.properties</filename>
+      文件并改变相应的键值,籍此覆盖那些(默认)信息。你甚至可以在写自己的验证器
+      注解时添加你自己的附加消息集。</para>
+
+      <para>或者你可以以编程方式检查bean的验证规则并提供相应的<classname>ResourceBundle</classname>。</para>
+    </sect2>
+
+    <sect2>
+      <title>编写你自己的约束</title>
+
+      <para>扩展内建约束集是极其方便的。任何约束都包括两部分:约束<emphasis>描述符</emphasis>(注解)
+      和约束<emphasis>验证器</emphasis>(实现类)。下面是一个简单的用户定义描述符:</para>
+
+      <programlisting>@ValidatorClass(CapitalizedValidator.class)
+ at Target(METHOD) 
+ at Retention(RUNTIME)
+ at Documented
+public @interface Capitalized {
+    CapitalizeType type() default Capitalize.FIRST;
+    String message() default "has incorrect capitalization";
+}</programlisting>
+
+      <para><literal>type</literal>参数描述属性应该如何被大写。这是一个完全依赖于注解业务(逻辑)的用户
+      参数。</para>
+
+      <para><literal>message</literal>是用于描述约束违规的默认字符串,它是强制要求的。你可以采取硬编码的方式,
+      或者通过Java ResourceBundle机制将message的部分/全部内容提取至外部文件。一旦发现message中{parameter}字符串,
+      就会在{parameter}这个位置注入相应的参数值(在我们的例子里Capitalization is not {type}会生成 Capitalization is not FIRST),
+      可以将message对应的整个字符串提取至外部文件ValidatorMessages.properties,这也是一种良好实践。
+      见<xref linkend="validator-constraints-error" />。</para>
+
+      <programlisting>@ValidatorClass(CapitalizedValidator.class)
+ at Target(METHOD) 
+ at Retention(RUNTIME)
+ at Documented
+public @interface Capitalized {
+    CapitalizeType type() default Capitalize.FIRST;
+    String message() default "{validator.capitalized}";
+}
+
+...
+#in ValidatorMessages.properties
+validator.capitalized=<literal>Capitalization is not {type}</literal></programlisting>
+
+      <para>如你所见{}符号是递归的。</para>
+
+      <para>为了将一个描述符连接到它的验证器实现,我们使用<literal>@ValidatorClass</literal>
+      元注解。验证器类参数必须指定一个实现了<literal>Validator&lt;ConstraintAnnotation&gt;</literal>
+      的类。</para>
+
+      <para>我们现在要实现验证器(也就是实现规则检查)。一个验证器实现能检查一个属性的值
+      (实现<literal>PropertyConstraint</literal>),并且/或者可以修改hibernate映射元数据
+      (实现<literal>PersistentClassConstraint</literal>),籍此表示数据库级的约束。</para>
+
+      <programlisting>public class CapitalizedValidator 
+        implements Validator&lt;Capitalized&gt;, PropertyConstraint {
+    private CapitalizeType type;
+
+    //part of the Validator&lt;Annotation&gt; contract, 
+    //allows to get and use the annotation values
+    public void initialize(Capitalized parameters) {
+        type = parameters.type();
+    }
+
+    //part of the property constraint contract
+    public boolean isValid(Object value) {
+        if (value==null) return true;
+        if ( !(value instanceof String) ) return false;
+        String string = (String) value;
+        if (type == CapitalizeType.ALL) {
+            return string.equals( string.toUpperCase() );
+        }
+        else {
+            String first = string.substring(0,1);
+            return first.equals( first.toUpperCase();
+        }
+    }
+}</programlisting>
+
+      <para>如果违反约束,<literal>isValid()</literal>方法将返回false。更多例子请参考内建验证器实现。</para>
+
+      <para>至此我们只看到属性级的验证,你还可以写一个Bean级别的验证注解。Bean自身会被传递给验证器,
+      而不是bean的属性实例。只要对bean自身进行注解即可激活验证检查。在单元测试套件中还可以找到一个小例子。</para>
+    </sect2>
+
+    <sect2>
+      <title>注解你的领域模型</title>
+
+      <para>既然你现在已经熟悉注解了,那么对语法也应该很清楚了。</para>
+
+      <programlisting>public class Address {
+    private String line1;
+    private String line2;
+    private String zip;
+    private String state;
+    private String country;
+    private long id;
+    
+    // a not null string of 20 characters maximum
+    @Length(max=20) 
+    @NotNull
+    public String getCountry() {
+        return country;
+    }
+    
+    // a non null string
+    @NotNull
+    public String getLine1() {
+        return line1;
+    }
+
+    //no constraint    
+    public String getLine2() {
+        return line2;
+    }
+    
+    // a not null string of 3 characters maximum
+    @Length(max=3) @NotNull
+    public String getState() {
+        return state;
+    }
+
+    // a not null numeric string of 5 characters maximum
+    // if the string is longer, the message will 
+    //be searched in the resource bundle at key 'long'
+    @Length(max=5, message="{long}")
+    @Pattern(regex="[0-9]+")
+    @NotNull
+    public String getZip() {
+        return zip;
+    }
+    
+    // should always be true
+    @AssertTrue
+    public boolean isValid() {
+        return true;
+    }
+
+    // a numeric between 1 and 2000
+    @Id @Min(1)
+    @Range(max=2000)
+    public long getId() {
+        return id;
+    }
+}</programlisting>
+
+      <para>上面的例子只展示了公共属性验证,你还可以对任何可见度的字段(field)进行注解。</para>
+
+      <programlisting>@MyBeanConstraint(max=45)
+public class Dog {
+    @AssertTrue private boolean isMale;
+    @NotNull protected String getName() { ... };
+    ...
+}</programlisting>
+
+      <para>你可以对接口进行注解。Hibernate验证器会检查给定bean所扩展或实现的所有父类和接口,
+      籍以读取相应的验证器注解(信息)。</para>
+
+      <programlisting>public interface Named {
+    @NotNull String getName();
+    ...
+}
+
+public class Dog implements Named {
+
+    @AssertTrue private boolean isMale;
+
+    public String getName() { ... };
+
+}</programlisting>
+
+      <para>在验证Dog bean时会检查name属性的有效性(不为null)。</para>
+    </sect2>
+  </sect1>
+
+  <sect1>
+    <title>使用验证器框架</title>
+
+    <para>Hibernate验证器旨在实现多层数据验证,我们在一处表示约束(带注解的域模型),然后将其运用于
+    应用程序的不同层。</para>
+
+    <sect2>
+      <title>数据库schema层次验证</title>
+
+      <para>无须额外手续,Hibernate Annotations会自动将你为实体定义的约束翻译为映射元数据。例如,如果你的实体
+      的一个属性注解为<literal>@NotNull</literal>,在Hibernate生成的DDL schema中这列会被定义为
+      <literal>not null</literal>。</para>
+    </sect2>
+
+    <sect2>
+      <title>Hibernate基于事件的验证</title>
+
+      <para>Hibernate验证器有两个内建Hibernate事件监听器。当一个<literal>PreInsertEvent</literal>
+      或<literal>PreUpdateEvent</literal>发生时,监听器会验证该实体实例的所有约束,如有违反会抛出一个异常。
+      基本上,在Hibernate执行任何插入和更新前对象会被检查。这是激活验证过程的最便捷最简单的方法。当遇到约束
+      违规时,事件会引发一个运行时<classname>InvalidStateException</classname>,该异常包含一个描述每个错误的
+      <literal>InvalidValue</literal>数组。</para>
+
+      <programlisting>&lt;hibernate-configuration&gt;
+    ...
+    &lt;event type="pre-update"&gt;
+        &lt;listener 
+          class="org.hibernate.validator.event.ValidatePreUpdateEventListener"/&gt;
+    &lt;/event&gt;
+    &lt;event type="pre-insert"&gt;
+        &lt;listener 
+          class="org.hibernate.validator.event.ValidatePreInsertEventListener"/&gt;
+    &lt;/event&gt;
+&lt;/hibernate-configuration&gt;</programlisting>
+
+      <para><note>
+          <para>在使用Hibernate Entity Manager时,Validation框架会被自动激活。如果bean不带验证注解,
+          就不会有性能损失。</para>
+        </note></para>
+    </sect2>
+
+    <sect2>
+      <title>程序级验证</title>
+
+      <para>Hibernate验证器能应用于你应用程序代码中的任何地方。</para>
+
+      <programlisting>ClassValidator personValidator = new ClassValidator( Person.class );
+ClassValidator addressValidator = new ClassValidator( Address.class, ResourceBundle.getBundle("messages", Locale.ENGLISH) );
+
+InvalidValue[] validationMessages = addressValidator.getInvalidValues(address);</programlisting>
+
+      <para>头两行为执行类检查而准备Hibernate验证器。第一行依赖于嵌入在Hibernate验证器内的错误
+      消息(见<xref linkend="validator-constraints-error" />),第二行为这些消息准备资源包。这些代码只执行一次,
+      并将验证器进行缓存处理,这种方式是一种良好实践。</para>
+
+      <para>第三行真正验证了<literal>Address</literal>实例并返回一个<literal>InvalidValue</literal>数组。
+      你的应用程序逻辑随后可以对错误做出响应。</para>
+
+      <para>除了针对整个bean你还可以对某个特定属性进行检查。这对于一个属性一个属性的用户交互情形或许是有用的。</para>
+
+      <programlisting>ClassValidator addressValidator = new ClassValidator( Address.class, ResourceBundle.getBundle("messages", Locale.ENGLISH) );
+
+//only get city property invalid values
+InvalidValue[] validationMessages = addressValidator.getInvalidValues(address, "city");
+
+//only get potential city property invalid values
+InvalidValue[] validationMessages = addressValidator.getPotentialInvalidValues("city", "Paris")</programlisting>
+    </sect2>
+
+    <sect2>
+      <title>验证信息</title>
+
+      <para>作为一个验证信息的载体,hibernate提供了一个<classname>InvalidValue</classname>数组。
+      每个<literal>InvalidValue</literal>有一组,这些方法分别描述相应的个体问题。</para>
+
+      <para><methodname>getBeanClass()</methodname>获取失败的bean类型。</para>
+
+      <para><methodname>getBean()</methodname>获取验证失败的实例(如果有的话,当使用
+      <methodname>getPotentianInvalidValues()</methodname>时则不会取到) </para>
+
+      <para><methodname>getValue()</methodname>获取验证失败的值</para>
+
+      <para><methodname>getMessage()</methodname>获取合适的国际化错误消息</para>
+
+      <para><methodname>getRootBean()</methodname>获取产生问题的根bean实例(在与<literal>@Valid</literal>连用
+      时很有用),如用getPotentianInvalidValues()则返回null。</para>
+
+      <para><literal>getPropertyPath()</literal>获取“问题”属性从根bean开始的带点的路径</para>
+    </sect2>
+  </sect1>
+</chapter>
\ No newline at end of file

Deleted: trunk/HibernateExt/annotations/doc/reference/zh_cn/modules/xml-overriding.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/doc/reference/zh_cn/modules/xml-overriding.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/doc/reference/zh_cn/modules/xml-overriding.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,345 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<chapter id="xml-overriding">
-  <title>通过XML覆写元数据</title>
-
-  <para>在EJB3中元数据的主要目标是使用注释,但是EJB3规范也提供通过XML部署文件来覆写或者替换元数据注释.
-  在当前的发布版本仅仅支持EJB3注释的覆写,如果你想使用Hibernate特有的一些实体注释,
-  你有两种选择:一,只使用注释;二,使用原来的hbm 映射文件.你当然还是可以同时使用注释实体和hbm XML映射文件的实体.</para>
-
-  <para>在测试套件中有一些附加的XML文件的样例.</para>
-
-  <section>
-    <title>原则</title>
-
-    <para>XML部署文件结构被设计为直接映射注释结构,所以如果你知道注释的结构,那么使用XML语法是很简单的.</para>
-
-
-    <para>你可以定义一个或者多个XML文件来描述你的元数据,这些文件会被覆写引擎合并(merged).</para>
-
-    <section>
-      <title>全局级别的元数据</title>
-
-      <para>你可以使用XML文件来定义全局元数据,对每一个部署文件你不能定义多于一个的元数据.</para>
-
-      <programlisting>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
-
-&lt;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 orm_1_0.xsd"
-  version="1.0"&gt;
-
-    &lt;persistence-unit-metadata&gt;
-        &lt;xml-mapping-metadata-complete/&gt;
-        &lt;persistence-unit-defaults&gt;
-            &lt;schema&gt;myschema&lt;/schema&gt;
-            &lt;catalog&gt;mycatalog&lt;/catalog&gt;
-            &lt;cascade-persist/&gt;
-        &lt;/persistence-unit-defaults&gt;
-    &lt;/persistence-unit-metadata&gt;</programlisting>
-
-      <para><literal>xml-mapping-metadata-complete</literal> 意味着所有的实体,mapped-superclasses和嵌套的元数据应该从XML文件中启用(忽略注释).</para>
-
-
-      <para><literal>schema / catalog</literal> 将覆写所有在元数据中默认定义的schema 和 catalog(包括XML和注释).</para>
-
-      <para><literal>cascade-persist</literal> 意味着所有注释作为一个 cascade type 都是PERSIST的. 我们推荐你不要使用该特性.</para>
-    </section>
-
-    <section>
-      <title>实体级别的元数据</title>
-
-      <para>你也可以在一个给定的实体上定义或者覆写元数据</para>
-
-      <programlistingco>
-        <areaspec>
-          <area coords="3 85" id="aa1" />
-
-          <area coords="9 85" id="aa2" />
-
-          <area coords="10 85" id="aa3" />
-
-          <area coords="11 85" id="aa4" />
-
-          <area coords="17 85" id="aa5" />
-
-          <area coords="23 85" id="aa6" />
-
-          <area coords="24 85" id="aa7" />
-
-          <area coords="25 85" id="aa8" />
-
-          <area coords="26 85" id="aa9" />
-
-          <area coords="31 85" id="aa10" />
-        </areaspec>
-
-        <programlisting>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
-
-&lt;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 orm_1_0.xsd"
-  version="1.0"&gt;
-
-    &lt;package&gt;org.hibernate.test.annotations.reflection&lt;/package&gt;
-    &lt;entity class="Administration" access="PROPERTY" metadata-complete="true"&gt;
-        &lt;table name="tbl_admin"&gt;
-            &lt;unique-constraint&gt;
-                &lt;column-name&gt;firstname&lt;/column-name&gt;
-                &lt;column-name&gt;lastname&lt;/column-name&gt;
-            &lt;/unique-constraint&gt;
-        &lt;/table&gt;
-        &lt;secondary-table name="admin2"&gt;
-            &lt;primary-key-join-column name="admin_id" referenced-column-name="id"/&gt;
-            &lt;unique-constraint&gt;
-                &lt;column-name&gt;address&lt;/column-name&gt;
-            &lt;/unique-constraint&gt;
-        &lt;/secondary-table&gt;
-        &lt;id-class class="SocialSecurityNumber"/&gt;
-        &lt;inheritance strategy="JOINED"/&gt;
-        &lt;sequence-generator name="seqhilo" sequence-name="seqhilo"/&gt;
-        &lt;table-generator name="table" table="tablehilo"/&gt;
-        ...
-    &lt;/entity&gt;
-
-    &lt;entity class="PostalAdministration"&gt;
-        &lt;primary-key-join-column name="id"/&gt;
-        ...
-    &lt;/entity&gt;
-&lt;/entity-mappings&gt;</programlisting>
-
-        <calloutlist>
-          <callout arearefs="aa1">
-            <para><literal>entity-mappings</literal>:entity-mappings 是所有XML文件的根元素.你必须定义XML Schema, 该文件包含在hibernate-annotations.jar中,使用Hibernate Annotations 不需要访问网络.</para>
-          </callout>
-
-          <callout arearefs="aa2">
-            <para><literal>package</literal> (可选的): 作为默认的package用于在一个给定的部署描述文件中所有没有限定的类.</para>
-          </callout>
-
-          <callout arearefs="aa3">
-            <para><literal>entity</literal>: 描述一个实体. </para>
-
-            <para><literal>metadata-complete</literal> 定义对于该元素是否全部使用元数据(换句话来说就是,如果注释出现在类级别应该考虑或者忽略).</para>
-
-            <para>一个实体不得不有一个 class 属性来引用 元数据所应用的类. </para>
-
-            <para>通过<literal>name</literal>属性你可以覆写实体的名字,
-			如果没有定义并且<literal>@Entity.name</literal>出现了的话,那么就使用该注释(假如metadata complete 没有被设置).</para>
-
-            <para>
-			对于metadata complete (参考下面)元素, 你可以定义一个  <literal>access</literal>(<literal>FIELD</literal> 或者 <literal>PROPERTY</literal>(默认值)),
-			对于非metadata complete 元素,使用注释的access type.</para>
-          </callout>
-
-          <callout arearefs="aa4">
-            <para><literal>table</literal>:  你可以声明table 属性(name, schema, catalog), 如果没有定义, 将使用Java注释.</para>
-
-            <para>就象例子中所示的那样你可以定义一个或者多个unique constraints</para>
-          </callout>
-
-          <callout arearefs="aa5">
-            <para><literal>secondary-table</literal>: 定义一个secondary-table,除了你可以通过<literal>primary-key-join-column </literal>元素定义 primary key / foreign key 列以外是和一般的table一样的. 在非metadata complete下, annotation secondary tables 仅仅在没有<literal>secondary-table </literal>定义的情况下使用, 否则 注释将被忽略.</para>
-          </callout>
-
-          <callout arearefs="aa6">
-            <para><literal>id-class</literal>: 和<literal>@IdClass</literal>一样定义一个id class.</para>
-          </callout>
-
-          <callout arearefs="aa7">
-            <para><literal>inheritance</literal>: 
-			定义继承策略(<literal>JOINED</literal>,
-            <literal>TABLE_PER_CLASS</literal>,
-            <literal>SINGLE_TABLE</literal>), 仅仅在根实体级别可以使用.</para>
-          </callout>
-
-          <callout arearefs="aa8">
-            <para><literal>sequence-generator</literal>: 定义一个序列产生器.</para>
-          </callout>
-
-          <callout arearefs="aa9">
-            <para><literal>table-generator</literal>: 定义一个table generator</para>
-          </callout>
-
-          <callout arearefs="aa10">
-            <para><literal><literal>primary-key-join-column</literal></literal>:
-            当 JOINED 继承策略使用时,为sub entities定义一个 primary key join column.</para>
-          </callout>
-        </calloutlist>
-
-
-      </programlistingco>
-
-      <programlistingco>
-        <areaspec>
-          <area coords="11 85" id="ab1" />
-
-          <area coords="18 85" id="ab2" />
-
-          <area coords="22  85" id="ab3" />
-
-          <area coords="28 85" id="ab4" />
-
-          <area coords="34 85" id="ab5" />
-        </areaspec>
-
-        <programlisting>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
-
-&lt;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 orm_1_0.xsd"
-  version="1.0"&gt;
-
-    &lt;package&gt;org.hibernate.test.annotations.reflection&lt;/package&gt;
-    &lt;entity class="Music" access="PROPERTY" metadata-complete="true"&gt;
-        &lt;discriminator-value&gt;Generic&lt;/discriminator-value&gt;
-        &lt;discriminator-column length="34"/&gt;
-        ...
-    &lt;/entity&gt;
-
-    &lt;entity class="PostalAdministration"&gt;
-        &lt;primary-key-join-column name="id"/&gt;
-        &lt;named-query name="adminById"&gt;
-            &lt;query&gt;select m from Administration m where m.id = :id&lt;/query&gt;
-            &lt;hint name="org.hibernate.timeout" value="200"/&gt;
-        &lt;/named-query&gt;
-        &lt;named-native-query name="allAdmin" result-set-mapping="adminrs"&gt;
-            &lt;query&gt;select *, count(taxpayer_id) as taxPayerNumber 
-            from Administration, TaxPayer
-            where taxpayer_admin_id = admin_id group by ...&lt;/query&gt;
-            &lt;hint name="org.hibernate.timeout" value="200"/&gt;
-        &lt;/named-native-query&gt;
-        &lt;sql-result-set-mapping name="adminrs"&gt;
-            &lt;entity-result entity-class="Administration"&gt;
-                &lt;field-result name="name" column="fld_name"/&gt;
-            &lt;/entity-result&gt;
-            &lt;column-result name="taxPayerNumber"/&gt;
-        &lt;/sql-result-set-mapping&gt;
-        &lt;attribute-override name="ground"&gt;
-            &lt;column name="fld_ground" unique="true" scale="2"/&gt;
-        &lt;/attribute-override&gt;
-        &lt;association-override name="referer"&gt;
-            &lt;join-column name="referer_id" referenced-column-name="id"/&gt;
-        &lt;/association-override&gt;
-        ...
-    &lt;/entity&gt;
-&lt;/entity-mappings&gt;</programlisting>
-
-        <calloutlist>
-          <callout arearefs="ab1">
-            <para><literal>discriminator-value /
-            discriminator-column</literal>: 当SINGLE_TABLE继承策略使用时,定义鉴别器值 和 保存该值的列.</para>
-          </callout>
-
-          <callout arearefs="ab2">
-            <para><literal>named-query</literal>: 定义命名查询和一些相关的可能的线索. 该定义附加在注释的定义中,如果两个都定义了相同的名字,那么XML将优先考虑.</para>
-          </callout>
-
-          <callout arearefs="ab3">
-            <para><literal>named-native-query</literal>: 定义一个命名本地查询 和他的 sql result set  映射. 作为另外一种选择,你可以定义<literal>result-class</literal>. 这些定义附加在注释的定义中.如果两个定义了同样的名字,XML文件优先考虑.</para>
-          </callout>
-
-          <callout arearefs="ab4">
-            <para><literal>sql-result-set-mapping</literal>: 描述了 result set mapping 的结构. 你可以定义 实体和列映射. 这些定义附加在注释的定义中,如果定义了同样的名字,XML文件优先考虑.</para>
-          </callout>
-
-          <callout arearefs="ab5">
-            <para><literal>attribute-override /
-            association-override</literal>: 定义一列或者join column overriding. 该overriding 附加在注释的定义中.</para>
-          </callout>
-        </calloutlist>
-      </programlistingco>
-
-      <para>一些应用于 <literal>&lt;embeddable&gt;</literal> 和
-      <literal>&lt;mapped-superclass&gt;</literal>.</para>
-    </section>
-
-    <section>
-      <title>属性级别的元数据</title>
-
-      <para>
-	  你当然可以定义XML来覆写属性. 如果metadata complete 给定义了,那么附加的属性(如: 在Java 级别的)将被忽略.
-另外,一旦你开始覆写一个属性,在该属性上的所有注释都会被忽略.所有属性级别的元数据应用于<literal>entity/attributes</literal>,
-      <literal>mapped-superclass/attributes</literal> 或
-      <literal>embeddable/attributes</literal>.</para>
-
-      <programlisting>    &lt;attributes&gt;
-        &lt;id name="id"&gt;
-            &lt;column name="fld_id"/&gt;
-            &lt;generated-value generator="generator" strategy="SEQUENCE"/&gt;
-            &lt;temporal&gt;DATE&lt;/temporal&gt;
-            &lt;sequence-generator name="generator" sequence-name="seq"/&gt;
-        &lt;/id&gt;
-        &lt;version name="version"/&gt;
-        &lt;embedded name="embeddedObject"&gt;
-            &lt;attribute-override name"subproperty"&gt;
-                &lt;column name="my_column"/&gt;
-            &lt;/attribute-override&gt;
-        &lt;/embedded&gt;
-        &lt;basic name="status" optional="false"&gt;
-            &lt;enumerated&gt;STRING&lt;/enumerated&gt;
-        &lt;/basic&gt;
-        &lt;basic name="serial" optional="true"&gt;
-            &lt;column name="serialbytes"/&gt;
-            &lt;lob/&gt;
-        &lt;/basic&gt;
-        &lt;basic name="terminusTime" fetch="LAZY"&gt;
-            &lt;temporal&gt;TIMESTAMP&lt;/temporal&gt;
-        &lt;/basic&gt;
-    &lt;/attributes&gt;</programlisting>
-
-      <para>
-	  通过 <literal>id</literal>,
-      <literal>embedded-id</literal>, <literal>version</literal>,
-      <literal>embedded</literal> 和 <literal>basic</literal>你可以覆写一个属性,
-	  这些元素中的每一个元素都有相应的subelements:<literal>lob</literal>,
-      <literal>temporal</literal>, <literal>enumerated</literal>,
-      <literal>column</literal>.</para>
-
-    </section>
-
-    <section>
-      <title>关联级别的元数据</title>
-
-      <para>你可以定义XML覆写关联注释. 所有的关联级别的元数据作用于
-	   <literal>entity/attributes</literal>,
-      <literal>mapped-superclass/attributes</literal> 或
-      <literal>embeddable/attributes</literal>.</para>
-
-      <programlisting>    &lt;attributes&gt;
-        &lt;one-to-many name="players" fetch="EAGER"&gt;
-            &lt;map-key name="name"/&gt;
-            &lt;join-column name="driver"/&gt;
-            &lt;join-column name="number"/&gt;
-        &lt;/one-to-many&gt;
-        &lt;many-to-many name="roads" target-entity="Administration"&gt;
-            &lt;order-by&gt;maxSpeed&lt;/order-by&gt;
-            &lt;join-table name="bus_road"&gt;
-                &lt;join-column name="driver"/&gt;
-                &lt;join-column name="number"/&gt;
-                &lt;inverse-join-column name="road_id"/&gt;
-                &lt;unique-constraint&gt;
-                    &lt;column-name&gt;driver&lt;/column-name&gt;
-                    &lt;column-name&gt;number&lt;/column-name&gt;
-                &lt;/unique-constraint&gt;
-            &lt;/join-table&gt;
-        &lt;/many-to-many&gt;
-        &lt;many-to-many name="allTimeDrivers" mapped-by="drivenBuses"&gt;
-    &lt;/attributes&gt;</programlisting>
-
-      <para>通过<literal>one-to-many</literal>, <literal>one-to-one</literal>,
-      <literal>many-to-one</literal>, 和 <literal>many-to-many</literal>.
-	  你可以重写一个关联关系.这些元素中的每一个都有相应的subelements. <literal>join-table</literal>  (可以有
-	  <literal>join-column</literal>和
-      <literal>inverse-join-column</literal>),
-      <literal><literal>join-column</literal></literal>,
-      <literal>map-key</literal>, 和 <literal>order-by</literal>.
-      <literal>mapped-by</literal> 和 <literal>target-entity</literal>
-	  当他们有意义的时候可以定义属性. 再一次强调 该结构映射于注释的结构.在描述注释的一章中 你可以找到所有的语义信息.</para>
-
-
-    </section>
-  </section>
-</chapter>
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/doc/reference/zh_cn/modules/xml-overriding.xml (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/doc/reference/zh_cn/modules/xml-overriding.xml)
===================================================================
--- trunk/HibernateExt/annotations/doc/reference/zh_cn/modules/xml-overriding.xml	                        (rev 0)
+++ trunk/HibernateExt/annotations/doc/reference/zh_cn/modules/xml-overriding.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,345 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<chapter id="xml-overriding">
+  <title>通过XML覆写元数据</title>
+
+  <para>在EJB3中元数据的主要目标是使用注释,但是EJB3规范也提供通过XML部署文件来覆写或者替换元数据注释.
+  在当前的发布版本仅仅支持EJB3注释的覆写,如果你想使用Hibernate特有的一些实体注释,
+  你有两种选择:一,只使用注释;二,使用原来的hbm 映射文件.你当然还是可以同时使用注释实体和hbm XML映射文件的实体.</para>
+
+  <para>在测试套件中有一些附加的XML文件的样例.</para>
+
+  <section>
+    <title>原则</title>
+
+    <para>XML部署文件结构被设计为直接映射注释结构,所以如果你知道注释的结构,那么使用XML语法是很简单的.</para>
+
+
+    <para>你可以定义一个或者多个XML文件来描述你的元数据,这些文件会被覆写引擎合并(merged).</para>
+
+    <section>
+      <title>全局级别的元数据</title>
+
+      <para>你可以使用XML文件来定义全局元数据,对每一个部署文件你不能定义多于一个的元数据.</para>
+
+      <programlisting>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+
+&lt;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 orm_1_0.xsd"
+  version="1.0"&gt;
+
+    &lt;persistence-unit-metadata&gt;
+        &lt;xml-mapping-metadata-complete/&gt;
+        &lt;persistence-unit-defaults&gt;
+            &lt;schema&gt;myschema&lt;/schema&gt;
+            &lt;catalog&gt;mycatalog&lt;/catalog&gt;
+            &lt;cascade-persist/&gt;
+        &lt;/persistence-unit-defaults&gt;
+    &lt;/persistence-unit-metadata&gt;</programlisting>
+
+      <para><literal>xml-mapping-metadata-complete</literal> 意味着所有的实体,mapped-superclasses和嵌套的元数据应该从XML文件中启用(忽略注释).</para>
+
+
+      <para><literal>schema / catalog</literal> 将覆写所有在元数据中默认定义的schema 和 catalog(包括XML和注释).</para>
+
+      <para><literal>cascade-persist</literal> 意味着所有注释作为一个 cascade type 都是PERSIST的. 我们推荐你不要使用该特性.</para>
+    </section>
+
+    <section>
+      <title>实体级别的元数据</title>
+
+      <para>你也可以在一个给定的实体上定义或者覆写元数据</para>
+
+      <programlistingco>
+        <areaspec>
+          <area coords="3 85" id="aa1" />
+
+          <area coords="9 85" id="aa2" />
+
+          <area coords="10 85" id="aa3" />
+
+          <area coords="11 85" id="aa4" />
+
+          <area coords="17 85" id="aa5" />
+
+          <area coords="23 85" id="aa6" />
+
+          <area coords="24 85" id="aa7" />
+
+          <area coords="25 85" id="aa8" />
+
+          <area coords="26 85" id="aa9" />
+
+          <area coords="31 85" id="aa10" />
+        </areaspec>
+
+        <programlisting>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+
+&lt;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 orm_1_0.xsd"
+  version="1.0"&gt;
+
+    &lt;package&gt;org.hibernate.test.annotations.reflection&lt;/package&gt;
+    &lt;entity class="Administration" access="PROPERTY" metadata-complete="true"&gt;
+        &lt;table name="tbl_admin"&gt;
+            &lt;unique-constraint&gt;
+                &lt;column-name&gt;firstname&lt;/column-name&gt;
+                &lt;column-name&gt;lastname&lt;/column-name&gt;
+            &lt;/unique-constraint&gt;
+        &lt;/table&gt;
+        &lt;secondary-table name="admin2"&gt;
+            &lt;primary-key-join-column name="admin_id" referenced-column-name="id"/&gt;
+            &lt;unique-constraint&gt;
+                &lt;column-name&gt;address&lt;/column-name&gt;
+            &lt;/unique-constraint&gt;
+        &lt;/secondary-table&gt;
+        &lt;id-class class="SocialSecurityNumber"/&gt;
+        &lt;inheritance strategy="JOINED"/&gt;
+        &lt;sequence-generator name="seqhilo" sequence-name="seqhilo"/&gt;
+        &lt;table-generator name="table" table="tablehilo"/&gt;
+        ...
+    &lt;/entity&gt;
+
+    &lt;entity class="PostalAdministration"&gt;
+        &lt;primary-key-join-column name="id"/&gt;
+        ...
+    &lt;/entity&gt;
+&lt;/entity-mappings&gt;</programlisting>
+
+        <calloutlist>
+          <callout arearefs="aa1">
+            <para><literal>entity-mappings</literal>:entity-mappings 是所有XML文件的根元素.你必须定义XML Schema, 该文件包含在hibernate-annotations.jar中,使用Hibernate Annotations 不需要访问网络.</para>
+          </callout>
+
+          <callout arearefs="aa2">
+            <para><literal>package</literal> (可选的): 作为默认的package用于在一个给定的部署描述文件中所有没有限定的类.</para>
+          </callout>
+
+          <callout arearefs="aa3">
+            <para><literal>entity</literal>: 描述一个实体. </para>
+
+            <para><literal>metadata-complete</literal> 定义对于该元素是否全部使用元数据(换句话来说就是,如果注释出现在类级别应该考虑或者忽略).</para>
+
+            <para>一个实体不得不有一个 class 属性来引用 元数据所应用的类. </para>
+
+            <para>通过<literal>name</literal>属性你可以覆写实体的名字,
+			如果没有定义并且<literal>@Entity.name</literal>出现了的话,那么就使用该注释(假如metadata complete 没有被设置).</para>
+
+            <para>
+			对于metadata complete (参考下面)元素, 你可以定义一个  <literal>access</literal>(<literal>FIELD</literal> 或者 <literal>PROPERTY</literal>(默认值)),
+			对于非metadata complete 元素,使用注释的access type.</para>
+          </callout>
+
+          <callout arearefs="aa4">
+            <para><literal>table</literal>:  你可以声明table 属性(name, schema, catalog), 如果没有定义, 将使用Java注释.</para>
+
+            <para>就象例子中所示的那样你可以定义一个或者多个unique constraints</para>
+          </callout>
+
+          <callout arearefs="aa5">
+            <para><literal>secondary-table</literal>: 定义一个secondary-table,除了你可以通过<literal>primary-key-join-column </literal>元素定义 primary key / foreign key 列以外是和一般的table一样的. 在非metadata complete下, annotation secondary tables 仅仅在没有<literal>secondary-table </literal>定义的情况下使用, 否则 注释将被忽略.</para>
+          </callout>
+
+          <callout arearefs="aa6">
+            <para><literal>id-class</literal>: 和<literal>@IdClass</literal>一样定义一个id class.</para>
+          </callout>
+
+          <callout arearefs="aa7">
+            <para><literal>inheritance</literal>: 
+			定义继承策略(<literal>JOINED</literal>,
+            <literal>TABLE_PER_CLASS</literal>,
+            <literal>SINGLE_TABLE</literal>), 仅仅在根实体级别可以使用.</para>
+          </callout>
+
+          <callout arearefs="aa8">
+            <para><literal>sequence-generator</literal>: 定义一个序列产生器.</para>
+          </callout>
+
+          <callout arearefs="aa9">
+            <para><literal>table-generator</literal>: 定义一个table generator</para>
+          </callout>
+
+          <callout arearefs="aa10">
+            <para><literal><literal>primary-key-join-column</literal></literal>:
+            当 JOINED 继承策略使用时,为sub entities定义一个 primary key join column.</para>
+          </callout>
+        </calloutlist>
+
+
+      </programlistingco>
+
+      <programlistingco>
+        <areaspec>
+          <area coords="11 85" id="ab1" />
+
+          <area coords="18 85" id="ab2" />
+
+          <area coords="22  85" id="ab3" />
+
+          <area coords="28 85" id="ab4" />
+
+          <area coords="34 85" id="ab5" />
+        </areaspec>
+
+        <programlisting>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+
+&lt;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 orm_1_0.xsd"
+  version="1.0"&gt;
+
+    &lt;package&gt;org.hibernate.test.annotations.reflection&lt;/package&gt;
+    &lt;entity class="Music" access="PROPERTY" metadata-complete="true"&gt;
+        &lt;discriminator-value&gt;Generic&lt;/discriminator-value&gt;
+        &lt;discriminator-column length="34"/&gt;
+        ...
+    &lt;/entity&gt;
+
+    &lt;entity class="PostalAdministration"&gt;
+        &lt;primary-key-join-column name="id"/&gt;
+        &lt;named-query name="adminById"&gt;
+            &lt;query&gt;select m from Administration m where m.id = :id&lt;/query&gt;
+            &lt;hint name="org.hibernate.timeout" value="200"/&gt;
+        &lt;/named-query&gt;
+        &lt;named-native-query name="allAdmin" result-set-mapping="adminrs"&gt;
+            &lt;query&gt;select *, count(taxpayer_id) as taxPayerNumber 
+            from Administration, TaxPayer
+            where taxpayer_admin_id = admin_id group by ...&lt;/query&gt;
+            &lt;hint name="org.hibernate.timeout" value="200"/&gt;
+        &lt;/named-native-query&gt;
+        &lt;sql-result-set-mapping name="adminrs"&gt;
+            &lt;entity-result entity-class="Administration"&gt;
+                &lt;field-result name="name" column="fld_name"/&gt;
+            &lt;/entity-result&gt;
+            &lt;column-result name="taxPayerNumber"/&gt;
+        &lt;/sql-result-set-mapping&gt;
+        &lt;attribute-override name="ground"&gt;
+            &lt;column name="fld_ground" unique="true" scale="2"/&gt;
+        &lt;/attribute-override&gt;
+        &lt;association-override name="referer"&gt;
+            &lt;join-column name="referer_id" referenced-column-name="id"/&gt;
+        &lt;/association-override&gt;
+        ...
+    &lt;/entity&gt;
+&lt;/entity-mappings&gt;</programlisting>
+
+        <calloutlist>
+          <callout arearefs="ab1">
+            <para><literal>discriminator-value /
+            discriminator-column</literal>: 当SINGLE_TABLE继承策略使用时,定义鉴别器值 和 保存该值的列.</para>
+          </callout>
+
+          <callout arearefs="ab2">
+            <para><literal>named-query</literal>: 定义命名查询和一些相关的可能的线索. 该定义附加在注释的定义中,如果两个都定义了相同的名字,那么XML将优先考虑.</para>
+          </callout>
+
+          <callout arearefs="ab3">
+            <para><literal>named-native-query</literal>: 定义一个命名本地查询 和他的 sql result set  映射. 作为另外一种选择,你可以定义<literal>result-class</literal>. 这些定义附加在注释的定义中.如果两个定义了同样的名字,XML文件优先考虑.</para>
+          </callout>
+
+          <callout arearefs="ab4">
+            <para><literal>sql-result-set-mapping</literal>: 描述了 result set mapping 的结构. 你可以定义 实体和列映射. 这些定义附加在注释的定义中,如果定义了同样的名字,XML文件优先考虑.</para>
+          </callout>
+
+          <callout arearefs="ab5">
+            <para><literal>attribute-override /
+            association-override</literal>: 定义一列或者join column overriding. 该overriding 附加在注释的定义中.</para>
+          </callout>
+        </calloutlist>
+      </programlistingco>
+
+      <para>一些应用于 <literal>&lt;embeddable&gt;</literal> 和
+      <literal>&lt;mapped-superclass&gt;</literal>.</para>
+    </section>
+
+    <section>
+      <title>属性级别的元数据</title>
+
+      <para>
+	  你当然可以定义XML来覆写属性. 如果metadata complete 给定义了,那么附加的属性(如: 在Java 级别的)将被忽略.
+另外,一旦你开始覆写一个属性,在该属性上的所有注释都会被忽略.所有属性级别的元数据应用于<literal>entity/attributes</literal>,
+      <literal>mapped-superclass/attributes</literal> 或
+      <literal>embeddable/attributes</literal>.</para>
+
+      <programlisting>    &lt;attributes&gt;
+        &lt;id name="id"&gt;
+            &lt;column name="fld_id"/&gt;
+            &lt;generated-value generator="generator" strategy="SEQUENCE"/&gt;
+            &lt;temporal&gt;DATE&lt;/temporal&gt;
+            &lt;sequence-generator name="generator" sequence-name="seq"/&gt;
+        &lt;/id&gt;
+        &lt;version name="version"/&gt;
+        &lt;embedded name="embeddedObject"&gt;
+            &lt;attribute-override name"subproperty"&gt;
+                &lt;column name="my_column"/&gt;
+            &lt;/attribute-override&gt;
+        &lt;/embedded&gt;
+        &lt;basic name="status" optional="false"&gt;
+            &lt;enumerated&gt;STRING&lt;/enumerated&gt;
+        &lt;/basic&gt;
+        &lt;basic name="serial" optional="true"&gt;
+            &lt;column name="serialbytes"/&gt;
+            &lt;lob/&gt;
+        &lt;/basic&gt;
+        &lt;basic name="terminusTime" fetch="LAZY"&gt;
+            &lt;temporal&gt;TIMESTAMP&lt;/temporal&gt;
+        &lt;/basic&gt;
+    &lt;/attributes&gt;</programlisting>
+
+      <para>
+	  通过 <literal>id</literal>,
+      <literal>embedded-id</literal>, <literal>version</literal>,
+      <literal>embedded</literal> 和 <literal>basic</literal>你可以覆写一个属性,
+	  这些元素中的每一个元素都有相应的subelements:<literal>lob</literal>,
+      <literal>temporal</literal>, <literal>enumerated</literal>,
+      <literal>column</literal>.</para>
+
+    </section>
+
+    <section>
+      <title>关联级别的元数据</title>
+
+      <para>你可以定义XML覆写关联注释. 所有的关联级别的元数据作用于
+	   <literal>entity/attributes</literal>,
+      <literal>mapped-superclass/attributes</literal> 或
+      <literal>embeddable/attributes</literal>.</para>
+
+      <programlisting>    &lt;attributes&gt;
+        &lt;one-to-many name="players" fetch="EAGER"&gt;
+            &lt;map-key name="name"/&gt;
+            &lt;join-column name="driver"/&gt;
+            &lt;join-column name="number"/&gt;
+        &lt;/one-to-many&gt;
+        &lt;many-to-many name="roads" target-entity="Administration"&gt;
+            &lt;order-by&gt;maxSpeed&lt;/order-by&gt;
+            &lt;join-table name="bus_road"&gt;
+                &lt;join-column name="driver"/&gt;
+                &lt;join-column name="number"/&gt;
+                &lt;inverse-join-column name="road_id"/&gt;
+                &lt;unique-constraint&gt;
+                    &lt;column-name&gt;driver&lt;/column-name&gt;
+                    &lt;column-name&gt;number&lt;/column-name&gt;
+                &lt;/unique-constraint&gt;
+            &lt;/join-table&gt;
+        &lt;/many-to-many&gt;
+        &lt;many-to-many name="allTimeDrivers" mapped-by="drivenBuses"&gt;
+    &lt;/attributes&gt;</programlisting>
+
+      <para>通过<literal>one-to-many</literal>, <literal>one-to-one</literal>,
+      <literal>many-to-one</literal>, 和 <literal>many-to-many</literal>.
+	  你可以重写一个关联关系.这些元素中的每一个都有相应的subelements. <literal>join-table</literal>  (可以有
+	  <literal>join-column</literal>和
+      <literal>inverse-join-column</literal>),
+      <literal><literal>join-column</literal></literal>,
+      <literal>map-key</literal>, 和 <literal>order-by</literal>.
+      <literal>mapped-by</literal> 和 <literal>target-entity</literal>
+	  当他们有意义的时候可以定义属性. 再一次强调 该结构映射于注释的结构.在描述注释的一章中 你可以找到所有的语义信息.</para>
+
+
+    </section>
+  </section>
+</chapter>
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/doc/reference/zh_cn/styles (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/doc/reference/zh_cn/styles)

Deleted: trunk/HibernateExt/annotations/doc/reference/zh_cn/styles/fopdf.xsl
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/doc/reference/zh_cn/styles/fopdf.xsl	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/doc/reference/zh_cn/styles/fopdf.xsl	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,509 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
-
-    This is the XSL FO configuration file for the Hibernate
-    Reference Documentation. It defines a custom titlepage and
-    the parameters for the A4 sized PDF printable output.
-
-    It took me days to figure out this stuff and fix most of
-    the obvious bugs in the DocBook XSL distribution. Some of
-    the workarounds might not be appropriate with a newer version
-    of DocBook XSL. This file is released as part of Hibernate,
-    hence LGPL licensed.
-
-    christian at hibernate.org
-
--->
-
-<!DOCTYPE xsl:stylesheet [
-    <!ENTITY db_xsl_path        "../../../../../../Hibernate3/doc/reference/support/docbook-xsl/">
-]>
-
-<xsl:stylesheet
-    version="1.0"
-    xmlns="http://www.w3.org/TR/xhtml1/transitional"
-    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-    xmlns:fo="http://www.w3.org/1999/XSL/Format"
-    exclude-result-prefixes="#default">
-
-    <xsl:import href="&db_xsl_path;/fo/docbook.xsl"/>
-
-    <!--###################################################
-                       Custom Title Page
-        ################################################### -->
-
-    <xsl:template name="book.titlepage.recto">
-        <fo:block>
-            <fo:table table-layout="fixed" width="175mm">
-                <fo:table-column column-width="175mm"/>
-                <fo:table-body>
-                    <fo:table-row>
-                        <fo:table-cell text-align="center">
-                            <fo:block>
-                                <fo:external-graphic src="file:images/hibernate_logo_a.png"/>
-                            </fo:block>
-                            <fo:block font-family="Helvetica" font-size="22pt" padding-before="10mm">
-                                <xsl:value-of select="bookinfo/subtitle"/>
-                            </fo:block>
-                            <fo:block font-family="Helvetica" font-size="12pt" padding="10mm">
-                                Version:
-                                <xsl:value-of select="bookinfo/releaseinfo"/>
-                            </fo:block>
-                        </fo:table-cell>
-                    </fo:table-row>
-                </fo:table-body>
-            </fo:table>
-        </fo:block>
-    </xsl:template>
-
-    <!-- Prevent blank pages in output -->
-    <xsl:template name="book.titlepage.before.verso">
-    </xsl:template>
-    <xsl:template name="book.titlepage.verso">
-    </xsl:template>
-    <xsl:template name="book.titlepage.separator">
-    </xsl:template>
-
-    <!--###################################################
-                          Header
-        ################################################### -->
-
-    <!-- More space in the center header for long text -->
-    <xsl:attribute-set name="header.content.properties">
-        <xsl:attribute name="font-family">
-            <xsl:value-of select="$body.font.family"/>
-        </xsl:attribute>
-        <xsl:attribute name="margin-left">-5em</xsl:attribute>
-        <xsl:attribute name="margin-right">-5em</xsl:attribute>
-    </xsl:attribute-set>
-
-    <!--###################################################
-                          Custom Footer
-        ################################################### -->
-
-    <!-- This footer prints the Hibernate version number on the left side -->
-    <xsl:template name="footer.content">
-        <xsl:param name="pageclass" select="''"/>
-        <xsl:param name="sequence" select="''"/>
-        <xsl:param name="position" select="''"/>
-        <xsl:param name="gentext-key" select="''"/>
-
-        <xsl:variable name="Version">
-            <xsl:choose>
-                <xsl:when test="//releaseinfo">
-                    <xsl:text>Hibernate </xsl:text>
-                    <xsl:value-of select="//releaseinfo"/>
-                </xsl:when>
-                <xsl:otherwise>
-                    <!-- nop -->
-                </xsl:otherwise>
-            </xsl:choose>
-        </xsl:variable>
-
-        <xsl:choose>
-            <xsl:when test="$sequence='blank'">
-                <xsl:choose>
-                    <xsl:when test="$double.sided != 0 and $position = 'left'">
-                        <xsl:value-of select="$Version"/>
-                    </xsl:when>
-
-                    <xsl:when test="$double.sided = 0 and $position = 'center'">
-                        <!-- nop -->
-                    </xsl:when>
-
-                    <xsl:otherwise>
-                        <fo:page-number/>
-                    </xsl:otherwise>
-                </xsl:choose>
-            </xsl:when>
-
-            <xsl:when test="$pageclass='titlepage'">
-                <!-- nop: other titlepage sequences have no footer -->
-            </xsl:when>
-
-            <xsl:when test="$double.sided != 0 and $sequence = 'even' and $position='left'">
-                <fo:page-number/>
-            </xsl:when>
-
-            <xsl:when test="$double.sided != 0 and $sequence = 'odd' and $position='right'">
-                <fo:page-number/>
-            </xsl:when>
-
-            <xsl:when test="$double.sided = 0 and $position='right'">
-                <fo:page-number/>
-            </xsl:when>
-
-            <xsl:when test="$double.sided != 0 and $sequence = 'odd' and $position='left'">
-                <xsl:value-of select="$Version"/>
-            </xsl:when>
-
-            <xsl:when test="$double.sided != 0 and $sequence = 'even' and $position='right'">
-                <xsl:value-of select="$Version"/>
-            </xsl:when>
-
-            <xsl:when test="$double.sided = 0 and $position='left'">
-                <xsl:value-of select="$Version"/>
-            </xsl:when>
-
-            <xsl:otherwise>
-                <!-- nop -->
-            </xsl:otherwise>
-        </xsl:choose>
-    </xsl:template>
-
-    <!--###################################################
-                       Custom Toc Line
-        ################################################### -->
-    
-    <!-- Improve the TOC. -->
-    <xsl:template name="toc.line">
-        <xsl:variable name="id">
-            <xsl:call-template name="object.id"/>
-        </xsl:variable>
-
-        <xsl:variable name="label">
-            <xsl:apply-templates select="." mode="label.markup"/>
-        </xsl:variable>
-
-        <fo:block text-align-last="justify"
-            end-indent="{$toc.indent.width}pt"
-            last-line-end-indent="-{$toc.indent.width}pt">
-            <fo:inline keep-with-next.within-line="always">
-                <fo:basic-link internal-destination="{$id}">
-
-                    <!-- Chapter titles should be bold. -->
-                    <xsl:choose>
-                        <xsl:when test="local-name(.) = 'chapter'">
-                            <xsl:attribute name="font-weight">bold</xsl:attribute>
-                        </xsl:when>
-                    </xsl:choose>
-
-                    <xsl:if test="$label != ''">
-                        <xsl:copy-of select="$label"/>
-                        <xsl:value-of select="$autotoc.label.separator"/>
-                    </xsl:if>
-                    <xsl:apply-templates select="." mode="titleabbrev.markup"/>
-                </fo:basic-link>
-            </fo:inline>
-            <fo:inline keep-together.within-line="always">
-                <xsl:text> </xsl:text>
-                <fo:leader leader-pattern="dots"
-                    leader-pattern-width="3pt"
-                    leader-alignment="reference-area"
-                    keep-with-next.within-line="always"/>
-                <xsl:text> </xsl:text>
-                <fo:basic-link internal-destination="{$id}">
-                    <fo:page-number-citation ref-id="{$id}"/>
-                </fo:basic-link>
-            </fo:inline>
-        </fo:block>
-    </xsl:template>
-
-    <!--###################################################
-                          Extensions
-        ################################################### -->
-
-    <!-- These extensions are required for table printing and other stuff -->
-    <xsl:param name="use.extensions">1</xsl:param>
-    <xsl:param name="tablecolumns.extension">0</xsl:param>
-    <!-- FOP provide only PDF Bookmarks at the moment -->
-    <xsl:param name="fop.extensions">1</xsl:param>
-
-    <!--###################################################
-                          Table Of Contents
-        ################################################### -->
-
-    <!-- Generate the TOCs for named components only -->
-    <xsl:param name="generate.toc">
-        book   toc
-    </xsl:param>
-    
-    <!-- Show only Sections up to level 3 in the TOCs -->
-    <xsl:param name="toc.section.depth">3</xsl:param>
-    
-    <!-- Dot and Whitespace as separator in TOC between Label and Title-->
-    <xsl:param name="autotoc.label.separator" select="'.  '"/>
-
-
-    <!--###################################################
-                       Paper & Page Size
-        ################################################### -->
-    
-    <!-- Paper type, no headers on blank pages, no double sided printing -->
-    <xsl:param name="paper.type" select="'A4'"/>
-    <xsl:param name="double.sided">0</xsl:param>
-    <xsl:param name="headers.on.blank.pages">0</xsl:param>
-    <xsl:param name="footers.on.blank.pages">0</xsl:param>
-
-    <!-- Space between paper border and content (chaotic stuff, don't touch) -->
-    <xsl:param name="page.margin.top">5mm</xsl:param>
-    <xsl:param name="region.before.extent">10mm</xsl:param>
-    <xsl:param name="body.margin.top">10mm</xsl:param>
-
-    <xsl:param name="body.margin.bottom">15mm</xsl:param>
-    <xsl:param name="region.after.extent">10mm</xsl:param>
-    <xsl:param name="page.margin.bottom">0mm</xsl:param>
-
-    <xsl:param name="page.margin.outer">18mm</xsl:param>
-    <xsl:param name="page.margin.inner">18mm</xsl:param>
-
-    <!-- No intendation of Titles -->
-    <xsl:param name="title.margin.left">0pc</xsl:param>
-
-    <!--###################################################
-                       Fonts & Styles
-        ################################################### -->
-
-    <!-- Default Font size -->
-    <xsl:param name="body.font.master">11</xsl:param>
-
-    <!-- Line height in body text -->
-    <xsl:param name="line-height">1.4</xsl:param>
-
-    <!-- Monospaced fonts are smaller than regular text -->
-    <xsl:attribute-set name="monospace.properties">
-        <xsl:attribute name="font-family">
-            <xsl:value-of select="$monospace.font.family"/>
-        </xsl:attribute>
-        <xsl:attribute name="font-size">0.8em</xsl:attribute>
-    </xsl:attribute-set>
-
-
-    <!--###################################################
-                       Tables
-        ################################################### -->
-
-    <!-- The table width should be adapted to the paper size -->
-    <xsl:param name="default.table.width">17.4cm</xsl:param>
-
-    <!-- Some padding inside tables -->
-    <xsl:attribute-set name="table.cell.padding">
-        <xsl:attribute name="padding-left">4pt</xsl:attribute>
-        <xsl:attribute name="padding-right">4pt</xsl:attribute>
-        <xsl:attribute name="padding-top">4pt</xsl:attribute>
-        <xsl:attribute name="padding-bottom">4pt</xsl:attribute>
-    </xsl:attribute-set>
-    
-    <!-- Only hairlines as frame and cell borders in tables -->
-    <xsl:param name="table.frame.border.thickness">0.1pt</xsl:param>
-    <xsl:param name="table.cell.border.thickness">0.1pt</xsl:param>
-
-    <!--###################################################
-                             Labels
-        ################################################### -->
-
-    <!-- Label Chapters and Sections (numbering) -->
-    <xsl:param name="chapter.autolabel">1</xsl:param>
-    <xsl:param name="section.autolabel" select="1"/>
-    <xsl:param name="section.label.includes.component.label" select="1"/>
-
-    <!--###################################################
-                             Titles
-        ################################################### -->
-    
-    <!-- Chapter title size -->
-    <xsl:attribute-set name="chapter.titlepage.recto.style">
-        <xsl:attribute name="text-align">left</xsl:attribute>
-        <xsl:attribute name="font-weight">bold</xsl:attribute>
-        <xsl:attribute name="font-size">
-            <xsl:value-of select="$body.font.master * 1.8"/>
-            <xsl:text>pt</xsl:text>
-        </xsl:attribute>
-    </xsl:attribute-set>
-
-    <!-- Why is the font-size for chapters hardcoded in the XSL FO templates? 
-        Let's remove it, so this sucker can use our attribute-set only... -->
-    <xsl:template match="title" mode="chapter.titlepage.recto.auto.mode">
-        <fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format"
-            xsl:use-attribute-sets="chapter.titlepage.recto.style">
-            <xsl:call-template name="component.title">
-                <xsl:with-param name="node" select="ancestor-or-self::chapter[1]"/>
-            </xsl:call-template>
-        </fo:block>
-    </xsl:template>
-    
-    <!-- Sections 1, 2 and 3 titles have a small bump factor and padding -->
-    <xsl:attribute-set name="section.title.level1.properties">
-        <xsl:attribute name="space-before.optimum">0.8em</xsl:attribute>
-        <xsl:attribute name="space-before.minimum">0.8em</xsl:attribute>
-        <xsl:attribute name="space-before.maximum">0.8em</xsl:attribute>
-        <xsl:attribute name="font-size">
-            <xsl:value-of select="$body.font.master * 1.5"/>
-            <xsl:text>pt</xsl:text>
-        </xsl:attribute>
-        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
-    </xsl:attribute-set>
-    <xsl:attribute-set name="section.title.level2.properties">
-        <xsl:attribute name="space-before.optimum">0.6em</xsl:attribute>
-        <xsl:attribute name="space-before.minimum">0.6em</xsl:attribute>
-        <xsl:attribute name="space-before.maximum">0.6em</xsl:attribute>
-        <xsl:attribute name="font-size">
-            <xsl:value-of select="$body.font.master * 1.25"/>
-            <xsl:text>pt</xsl:text>
-        </xsl:attribute>
-        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
-    </xsl:attribute-set>
-    <xsl:attribute-set name="section.title.level3.properties">
-        <xsl:attribute name="space-before.optimum">0.4em</xsl:attribute>
-        <xsl:attribute name="space-before.minimum">0.4em</xsl:attribute>
-        <xsl:attribute name="space-before.maximum">0.4em</xsl:attribute>
-        <xsl:attribute name="font-size">
-            <xsl:value-of select="$body.font.master * 1.0"/>
-            <xsl:text>pt</xsl:text>
-        </xsl:attribute>
-        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
-    </xsl:attribute-set>
-
-    <!-- Titles of formal objects (tables, examples, ...) -->
-    <xsl:attribute-set name="formal.title.properties" use-attribute-sets="normal.para.spacing">
-        <xsl:attribute name="font-weight">bold</xsl:attribute>
-        <xsl:attribute name="font-size">
-            <xsl:value-of select="$body.font.master"/>
-            <xsl:text>pt</xsl:text>
-        </xsl:attribute>
-        <xsl:attribute name="hyphenate">false</xsl:attribute>
-        <xsl:attribute name="space-after.minimum">0.4em</xsl:attribute>
-        <xsl:attribute name="space-after.optimum">0.6em</xsl:attribute>
-        <xsl:attribute name="space-after.maximum">0.8em</xsl:attribute>
-    </xsl:attribute-set>
-
-    <!--###################################################
-                          Programlistings
-        ################################################### -->
-    
-    <!-- Verbatim text formatting (programlistings) -->
-    <xsl:attribute-set name="verbatim.properties">
-        <xsl:attribute name="space-before.minimum">1em</xsl:attribute>
-        <xsl:attribute name="space-before.optimum">1em</xsl:attribute>
-        <xsl:attribute name="space-before.maximum">1em</xsl:attribute>
-        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
-        <xsl:attribute name="border-color">#444444</xsl:attribute>
-        <xsl:attribute name="border-style">solid</xsl:attribute>
-        <xsl:attribute name="border-width">0.1pt</xsl:attribute>
-        <xsl:attribute name="padding-top">0.5em</xsl:attribute>
-        <xsl:attribute name="padding-left">0.5em</xsl:attribute>
-        <xsl:attribute name="padding-right">0.5em</xsl:attribute>
-        <xsl:attribute name="padding-bottom">0.5em</xsl:attribute>
-        <xsl:attribute name="margin-left">0.5em</xsl:attribute>
-        <xsl:attribute name="margin-right">0.5em</xsl:attribute>
-    </xsl:attribute-set>
-
-    <!-- Shade (background) programlistings -->
-    <xsl:param name="shade.verbatim">1</xsl:param>
-    <xsl:attribute-set name="shade.verbatim.style">
-        <xsl:attribute name="background-color">#F0F0F0</xsl:attribute>
-    </xsl:attribute-set>
-
-    <!--###################################################
-                             Callouts
-        ################################################### -->
-
-    <!-- We want to use callouts... -->
-    <xsl:param name="callout.extensions">1</xsl:param>
-
-    <!-- Place callout bullets at this column in programmlisting.-->
-    <xsl:param name="callout.defaultcolumn">90</xsl:param>
-
-    <!--
-        No, don't use crappy graphics for the callout bullets. This setting
-        enables some weird Unicode rendering for some fancy bullet points
-        in callouts. By default, this can only count to 10 and produces
-        strange results if you ever have more than 10 callouts for one
-        programlisting. We will fix that next.
-    -->
-    <xsl:param name="callout.graphics">0</xsl:param>
-
-    <!--
-        Again, fun with DocBook XSL: The callout bullets are rendered in
-        two places: In the programlisting itself and in the list below
-        the listing, with the actual callout text. The rendering in the
-        programlisting is some XSL transformer extension (e.g. a Saxon
-        extension), so we can't change that without messing with the
-        extensions. We only can turn it off by setting this limit to
-        zero, then, a simple bracket style like "(3)" and "(4)" will
-        be used in the programlisting.
-    -->
-    <xsl:param name="callout.unicode.number.limit" select="'0'"></xsl:param>
-
-    <!--
-        The callout bullets in the actual callout list will be rendered
-        with an XSL FO template. The default template is broken: limited to 10
-        nice looking Unicode bullet points and then it doesn't print anything,
-        the fallback doesn't work. We implement our own template, which is not
-        as complicated, more ugly, but works. As always, function is more
-        important than form.
-    -->
-    <xsl:template name="callout-bug">
-        <xsl:param name="conum" select='1'/>
-        <fo:inline
-            color="black"
-            padding-top="0.1em"
-            padding-bottom="0.1em"
-            padding-start="0.2em"
-            padding-end="0.2em"
-            baseline-shift="0.1em"
-            font-family="{$monospace.font.family}"
-            font-weight="bold"
-            font-size="75%">
-            <xsl:text>(</xsl:text>
-            <xsl:value-of select="$conum"/>
-            <xsl:text>)</xsl:text>
-        </fo:inline>
-
-    </xsl:template>
-
-    <!--###################################################
-                              Misc
-        ################################################### -->
-
-    <!-- Correct placement of titles for figures and examples. -->
-    <xsl:param name="formal.title.placement">
-        figure after
-        example before
-        equation before
-        table before
-        procedure before
-    </xsl:param>
-    
-    <!-- Format Variable Lists as Blocks (prevents horizontal overflow). -->
-    <xsl:param name="variablelist.as.blocks">1</xsl:param>
-
-    <!-- The horrible list spacing problems, this is much better. -->
-    <xsl:attribute-set name="list.block.spacing">
-        <xsl:attribute name="space-before.optimum">0.8em</xsl:attribute>
-        <xsl:attribute name="space-before.minimum">0.8em</xsl:attribute>
-        <xsl:attribute name="space-before.maximum">0.8em</xsl:attribute>
-        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
-    </xsl:attribute-set>
-
-    <!-- Newer DocBook XSL apparently thinks that some sections are by
-         default "draft" status, and this idiotic thing is by default
-         also set to "maybe", so it spits out a lot of errors with the
-         latest FOP as the XSL/FO styles have references to some draft
-         watermarks, which you actually don't want in the first place.
-         Turn this crap off. If you have to work with the "status"
-         attribute, don't.
-    -->
-    <xsl:param name="draft.mode" select="'no'"/>
-
-	<!-- Simplified Chinese related Settings -->
-    <xsl:param name="hyphenate">false</xsl:param>
-	<xsl:param name="body.font.family">simsun</xsl:param>
-	<xsl:param name="monospace.font.family">simsun</xsl:param>
-	<xsl:param name="title.font.family">simhei</xsl:param>
-	<xsl:param name="saxon.character.representation" select="native"/>
-	<xsl:param name="callout.unicode" select="1"/>
-	<xsl:param name="callout.unicode.start.character" select="10102"/>
-	<xsl:param name="l10n.gentext.default.language" select="zh-cn"/>
-</xsl:stylesheet>

Copied: trunk/HibernateExt/annotations/doc/reference/zh_cn/styles/fopdf.xsl (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/doc/reference/zh_cn/styles/fopdf.xsl)
===================================================================
--- trunk/HibernateExt/annotations/doc/reference/zh_cn/styles/fopdf.xsl	                        (rev 0)
+++ trunk/HibernateExt/annotations/doc/reference/zh_cn/styles/fopdf.xsl	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,509 @@
+<?xml version="1.0"?>
+
+<!--
+
+    This is the XSL FO configuration file for the Hibernate
+    Reference Documentation. It defines a custom titlepage and
+    the parameters for the A4 sized PDF printable output.
+
+    It took me days to figure out this stuff and fix most of
+    the obvious bugs in the DocBook XSL distribution. Some of
+    the workarounds might not be appropriate with a newer version
+    of DocBook XSL. This file is released as part of Hibernate,
+    hence LGPL licensed.
+
+    christian at hibernate.org
+
+-->
+
+<!DOCTYPE xsl:stylesheet [
+    <!ENTITY db_xsl_path        "../../../../../../Hibernate3/doc/reference/support/docbook-xsl/">
+]>
+
+<xsl:stylesheet
+    version="1.0"
+    xmlns="http://www.w3.org/TR/xhtml1/transitional"
+    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+    xmlns:fo="http://www.w3.org/1999/XSL/Format"
+    exclude-result-prefixes="#default">
+
+    <xsl:import href="&db_xsl_path;/fo/docbook.xsl"/>
+
+    <!--###################################################
+                       Custom Title Page
+        ################################################### -->
+
+    <xsl:template name="book.titlepage.recto">
+        <fo:block>
+            <fo:table table-layout="fixed" width="175mm">
+                <fo:table-column column-width="175mm"/>
+                <fo:table-body>
+                    <fo:table-row>
+                        <fo:table-cell text-align="center">
+                            <fo:block>
+                                <fo:external-graphic src="file:images/hibernate_logo_a.png"/>
+                            </fo:block>
+                            <fo:block font-family="Helvetica" font-size="22pt" padding-before="10mm">
+                                <xsl:value-of select="bookinfo/subtitle"/>
+                            </fo:block>
+                            <fo:block font-family="Helvetica" font-size="12pt" padding="10mm">
+                                Version:
+                                <xsl:value-of select="bookinfo/releaseinfo"/>
+                            </fo:block>
+                        </fo:table-cell>
+                    </fo:table-row>
+                </fo:table-body>
+            </fo:table>
+        </fo:block>
+    </xsl:template>
+
+    <!-- Prevent blank pages in output -->
+    <xsl:template name="book.titlepage.before.verso">
+    </xsl:template>
+    <xsl:template name="book.titlepage.verso">
+    </xsl:template>
+    <xsl:template name="book.titlepage.separator">
+    </xsl:template>
+
+    <!--###################################################
+                          Header
+        ################################################### -->
+
+    <!-- More space in the center header for long text -->
+    <xsl:attribute-set name="header.content.properties">
+        <xsl:attribute name="font-family">
+            <xsl:value-of select="$body.font.family"/>
+        </xsl:attribute>
+        <xsl:attribute name="margin-left">-5em</xsl:attribute>
+        <xsl:attribute name="margin-right">-5em</xsl:attribute>
+    </xsl:attribute-set>
+
+    <!--###################################################
+                          Custom Footer
+        ################################################### -->
+
+    <!-- This footer prints the Hibernate version number on the left side -->
+    <xsl:template name="footer.content">
+        <xsl:param name="pageclass" select="''"/>
+        <xsl:param name="sequence" select="''"/>
+        <xsl:param name="position" select="''"/>
+        <xsl:param name="gentext-key" select="''"/>
+
+        <xsl:variable name="Version">
+            <xsl:choose>
+                <xsl:when test="//releaseinfo">
+                    <xsl:text>Hibernate </xsl:text>
+                    <xsl:value-of select="//releaseinfo"/>
+                </xsl:when>
+                <xsl:otherwise>
+                    <!-- nop -->
+                </xsl:otherwise>
+            </xsl:choose>
+        </xsl:variable>
+
+        <xsl:choose>
+            <xsl:when test="$sequence='blank'">
+                <xsl:choose>
+                    <xsl:when test="$double.sided != 0 and $position = 'left'">
+                        <xsl:value-of select="$Version"/>
+                    </xsl:when>
+
+                    <xsl:when test="$double.sided = 0 and $position = 'center'">
+                        <!-- nop -->
+                    </xsl:when>
+
+                    <xsl:otherwise>
+                        <fo:page-number/>
+                    </xsl:otherwise>
+                </xsl:choose>
+            </xsl:when>
+
+            <xsl:when test="$pageclass='titlepage'">
+                <!-- nop: other titlepage sequences have no footer -->
+            </xsl:when>
+
+            <xsl:when test="$double.sided != 0 and $sequence = 'even' and $position='left'">
+                <fo:page-number/>
+            </xsl:when>
+
+            <xsl:when test="$double.sided != 0 and $sequence = 'odd' and $position='right'">
+                <fo:page-number/>
+            </xsl:when>
+
+            <xsl:when test="$double.sided = 0 and $position='right'">
+                <fo:page-number/>
+            </xsl:when>
+
+            <xsl:when test="$double.sided != 0 and $sequence = 'odd' and $position='left'">
+                <xsl:value-of select="$Version"/>
+            </xsl:when>
+
+            <xsl:when test="$double.sided != 0 and $sequence = 'even' and $position='right'">
+                <xsl:value-of select="$Version"/>
+            </xsl:when>
+
+            <xsl:when test="$double.sided = 0 and $position='left'">
+                <xsl:value-of select="$Version"/>
+            </xsl:when>
+
+            <xsl:otherwise>
+                <!-- nop -->
+            </xsl:otherwise>
+        </xsl:choose>
+    </xsl:template>
+
+    <!--###################################################
+                       Custom Toc Line
+        ################################################### -->
+    
+    <!-- Improve the TOC. -->
+    <xsl:template name="toc.line">
+        <xsl:variable name="id">
+            <xsl:call-template name="object.id"/>
+        </xsl:variable>
+
+        <xsl:variable name="label">
+            <xsl:apply-templates select="." mode="label.markup"/>
+        </xsl:variable>
+
+        <fo:block text-align-last="justify"
+            end-indent="{$toc.indent.width}pt"
+            last-line-end-indent="-{$toc.indent.width}pt">
+            <fo:inline keep-with-next.within-line="always">
+                <fo:basic-link internal-destination="{$id}">
+
+                    <!-- Chapter titles should be bold. -->
+                    <xsl:choose>
+                        <xsl:when test="local-name(.) = 'chapter'">
+                            <xsl:attribute name="font-weight">bold</xsl:attribute>
+                        </xsl:when>
+                    </xsl:choose>
+
+                    <xsl:if test="$label != ''">
+                        <xsl:copy-of select="$label"/>
+                        <xsl:value-of select="$autotoc.label.separator"/>
+                    </xsl:if>
+                    <xsl:apply-templates select="." mode="titleabbrev.markup"/>
+                </fo:basic-link>
+            </fo:inline>
+            <fo:inline keep-together.within-line="always">
+                <xsl:text> </xsl:text>
+                <fo:leader leader-pattern="dots"
+                    leader-pattern-width="3pt"
+                    leader-alignment="reference-area"
+                    keep-with-next.within-line="always"/>
+                <xsl:text> </xsl:text>
+                <fo:basic-link internal-destination="{$id}">
+                    <fo:page-number-citation ref-id="{$id}"/>
+                </fo:basic-link>
+            </fo:inline>
+        </fo:block>
+    </xsl:template>
+
+    <!--###################################################
+                          Extensions
+        ################################################### -->
+
+    <!-- These extensions are required for table printing and other stuff -->
+    <xsl:param name="use.extensions">1</xsl:param>
+    <xsl:param name="tablecolumns.extension">0</xsl:param>
+    <!-- FOP provide only PDF Bookmarks at the moment -->
+    <xsl:param name="fop.extensions">1</xsl:param>
+
+    <!--###################################################
+                          Table Of Contents
+        ################################################### -->
+
+    <!-- Generate the TOCs for named components only -->
+    <xsl:param name="generate.toc">
+        book   toc
+    </xsl:param>
+    
+    <!-- Show only Sections up to level 3 in the TOCs -->
+    <xsl:param name="toc.section.depth">3</xsl:param>
+    
+    <!-- Dot and Whitespace as separator in TOC between Label and Title-->
+    <xsl:param name="autotoc.label.separator" select="'.  '"/>
+
+
+    <!--###################################################
+                       Paper & Page Size
+        ################################################### -->
+    
+    <!-- Paper type, no headers on blank pages, no double sided printing -->
+    <xsl:param name="paper.type" select="'A4'"/>
+    <xsl:param name="double.sided">0</xsl:param>
+    <xsl:param name="headers.on.blank.pages">0</xsl:param>
+    <xsl:param name="footers.on.blank.pages">0</xsl:param>
+
+    <!-- Space between paper border and content (chaotic stuff, don't touch) -->
+    <xsl:param name="page.margin.top">5mm</xsl:param>
+    <xsl:param name="region.before.extent">10mm</xsl:param>
+    <xsl:param name="body.margin.top">10mm</xsl:param>
+
+    <xsl:param name="body.margin.bottom">15mm</xsl:param>
+    <xsl:param name="region.after.extent">10mm</xsl:param>
+    <xsl:param name="page.margin.bottom">0mm</xsl:param>
+
+    <xsl:param name="page.margin.outer">18mm</xsl:param>
+    <xsl:param name="page.margin.inner">18mm</xsl:param>
+
+    <!-- No intendation of Titles -->
+    <xsl:param name="title.margin.left">0pc</xsl:param>
+
+    <!--###################################################
+                       Fonts & Styles
+        ################################################### -->
+
+    <!-- Default Font size -->
+    <xsl:param name="body.font.master">11</xsl:param>
+
+    <!-- Line height in body text -->
+    <xsl:param name="line-height">1.4</xsl:param>
+
+    <!-- Monospaced fonts are smaller than regular text -->
+    <xsl:attribute-set name="monospace.properties">
+        <xsl:attribute name="font-family">
+            <xsl:value-of select="$monospace.font.family"/>
+        </xsl:attribute>
+        <xsl:attribute name="font-size">0.8em</xsl:attribute>
+    </xsl:attribute-set>
+
+
+    <!--###################################################
+                       Tables
+        ################################################### -->
+
+    <!-- The table width should be adapted to the paper size -->
+    <xsl:param name="default.table.width">17.4cm</xsl:param>
+
+    <!-- Some padding inside tables -->
+    <xsl:attribute-set name="table.cell.padding">
+        <xsl:attribute name="padding-left">4pt</xsl:attribute>
+        <xsl:attribute name="padding-right">4pt</xsl:attribute>
+        <xsl:attribute name="padding-top">4pt</xsl:attribute>
+        <xsl:attribute name="padding-bottom">4pt</xsl:attribute>
+    </xsl:attribute-set>
+    
+    <!-- Only hairlines as frame and cell borders in tables -->
+    <xsl:param name="table.frame.border.thickness">0.1pt</xsl:param>
+    <xsl:param name="table.cell.border.thickness">0.1pt</xsl:param>
+
+    <!--###################################################
+                             Labels
+        ################################################### -->
+
+    <!-- Label Chapters and Sections (numbering) -->
+    <xsl:param name="chapter.autolabel">1</xsl:param>
+    <xsl:param name="section.autolabel" select="1"/>
+    <xsl:param name="section.label.includes.component.label" select="1"/>
+
+    <!--###################################################
+                             Titles
+        ################################################### -->
+    
+    <!-- Chapter title size -->
+    <xsl:attribute-set name="chapter.titlepage.recto.style">
+        <xsl:attribute name="text-align">left</xsl:attribute>
+        <xsl:attribute name="font-weight">bold</xsl:attribute>
+        <xsl:attribute name="font-size">
+            <xsl:value-of select="$body.font.master * 1.8"/>
+            <xsl:text>pt</xsl:text>
+        </xsl:attribute>
+    </xsl:attribute-set>
+
+    <!-- Why is the font-size for chapters hardcoded in the XSL FO templates? 
+        Let's remove it, so this sucker can use our attribute-set only... -->
+    <xsl:template match="title" mode="chapter.titlepage.recto.auto.mode">
+        <fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format"
+            xsl:use-attribute-sets="chapter.titlepage.recto.style">
+            <xsl:call-template name="component.title">
+                <xsl:with-param name="node" select="ancestor-or-self::chapter[1]"/>
+            </xsl:call-template>
+        </fo:block>
+    </xsl:template>
+    
+    <!-- Sections 1, 2 and 3 titles have a small bump factor and padding -->
+    <xsl:attribute-set name="section.title.level1.properties">
+        <xsl:attribute name="space-before.optimum">0.8em</xsl:attribute>
+        <xsl:attribute name="space-before.minimum">0.8em</xsl:attribute>
+        <xsl:attribute name="space-before.maximum">0.8em</xsl:attribute>
+        <xsl:attribute name="font-size">
+            <xsl:value-of select="$body.font.master * 1.5"/>
+            <xsl:text>pt</xsl:text>
+        </xsl:attribute>
+        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
+    </xsl:attribute-set>
+    <xsl:attribute-set name="section.title.level2.properties">
+        <xsl:attribute name="space-before.optimum">0.6em</xsl:attribute>
+        <xsl:attribute name="space-before.minimum">0.6em</xsl:attribute>
+        <xsl:attribute name="space-before.maximum">0.6em</xsl:attribute>
+        <xsl:attribute name="font-size">
+            <xsl:value-of select="$body.font.master * 1.25"/>
+            <xsl:text>pt</xsl:text>
+        </xsl:attribute>
+        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
+    </xsl:attribute-set>
+    <xsl:attribute-set name="section.title.level3.properties">
+        <xsl:attribute name="space-before.optimum">0.4em</xsl:attribute>
+        <xsl:attribute name="space-before.minimum">0.4em</xsl:attribute>
+        <xsl:attribute name="space-before.maximum">0.4em</xsl:attribute>
+        <xsl:attribute name="font-size">
+            <xsl:value-of select="$body.font.master * 1.0"/>
+            <xsl:text>pt</xsl:text>
+        </xsl:attribute>
+        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
+    </xsl:attribute-set>
+
+    <!-- Titles of formal objects (tables, examples, ...) -->
+    <xsl:attribute-set name="formal.title.properties" use-attribute-sets="normal.para.spacing">
+        <xsl:attribute name="font-weight">bold</xsl:attribute>
+        <xsl:attribute name="font-size">
+            <xsl:value-of select="$body.font.master"/>
+            <xsl:text>pt</xsl:text>
+        </xsl:attribute>
+        <xsl:attribute name="hyphenate">false</xsl:attribute>
+        <xsl:attribute name="space-after.minimum">0.4em</xsl:attribute>
+        <xsl:attribute name="space-after.optimum">0.6em</xsl:attribute>
+        <xsl:attribute name="space-after.maximum">0.8em</xsl:attribute>
+    </xsl:attribute-set>
+
+    <!--###################################################
+                          Programlistings
+        ################################################### -->
+    
+    <!-- Verbatim text formatting (programlistings) -->
+    <xsl:attribute-set name="verbatim.properties">
+        <xsl:attribute name="space-before.minimum">1em</xsl:attribute>
+        <xsl:attribute name="space-before.optimum">1em</xsl:attribute>
+        <xsl:attribute name="space-before.maximum">1em</xsl:attribute>
+        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
+        <xsl:attribute name="border-color">#444444</xsl:attribute>
+        <xsl:attribute name="border-style">solid</xsl:attribute>
+        <xsl:attribute name="border-width">0.1pt</xsl:attribute>
+        <xsl:attribute name="padding-top">0.5em</xsl:attribute>
+        <xsl:attribute name="padding-left">0.5em</xsl:attribute>
+        <xsl:attribute name="padding-right">0.5em</xsl:attribute>
+        <xsl:attribute name="padding-bottom">0.5em</xsl:attribute>
+        <xsl:attribute name="margin-left">0.5em</xsl:attribute>
+        <xsl:attribute name="margin-right">0.5em</xsl:attribute>
+    </xsl:attribute-set>
+
+    <!-- Shade (background) programlistings -->
+    <xsl:param name="shade.verbatim">1</xsl:param>
+    <xsl:attribute-set name="shade.verbatim.style">
+        <xsl:attribute name="background-color">#F0F0F0</xsl:attribute>
+    </xsl:attribute-set>
+
+    <!--###################################################
+                             Callouts
+        ################################################### -->
+
+    <!-- We want to use callouts... -->
+    <xsl:param name="callout.extensions">1</xsl:param>
+
+    <!-- Place callout bullets at this column in programmlisting.-->
+    <xsl:param name="callout.defaultcolumn">90</xsl:param>
+
+    <!--
+        No, don't use crappy graphics for the callout bullets. This setting
+        enables some weird Unicode rendering for some fancy bullet points
+        in callouts. By default, this can only count to 10 and produces
+        strange results if you ever have more than 10 callouts for one
+        programlisting. We will fix that next.
+    -->
+    <xsl:param name="callout.graphics">0</xsl:param>
+
+    <!--
+        Again, fun with DocBook XSL: The callout bullets are rendered in
+        two places: In the programlisting itself and in the list below
+        the listing, with the actual callout text. The rendering in the
+        programlisting is some XSL transformer extension (e.g. a Saxon
+        extension), so we can't change that without messing with the
+        extensions. We only can turn it off by setting this limit to
+        zero, then, a simple bracket style like "(3)" and "(4)" will
+        be used in the programlisting.
+    -->
+    <xsl:param name="callout.unicode.number.limit" select="'0'"></xsl:param>
+
+    <!--
+        The callout bullets in the actual callout list will be rendered
+        with an XSL FO template. The default template is broken: limited to 10
+        nice looking Unicode bullet points and then it doesn't print anything,
+        the fallback doesn't work. We implement our own template, which is not
+        as complicated, more ugly, but works. As always, function is more
+        important than form.
+    -->
+    <xsl:template name="callout-bug">
+        <xsl:param name="conum" select='1'/>
+        <fo:inline
+            color="black"
+            padding-top="0.1em"
+            padding-bottom="0.1em"
+            padding-start="0.2em"
+            padding-end="0.2em"
+            baseline-shift="0.1em"
+            font-family="{$monospace.font.family}"
+            font-weight="bold"
+            font-size="75%">
+            <xsl:text>(</xsl:text>
+            <xsl:value-of select="$conum"/>
+            <xsl:text>)</xsl:text>
+        </fo:inline>
+
+    </xsl:template>
+
+    <!--###################################################
+                              Misc
+        ################################################### -->
+
+    <!-- Correct placement of titles for figures and examples. -->
+    <xsl:param name="formal.title.placement">
+        figure after
+        example before
+        equation before
+        table before
+        procedure before
+    </xsl:param>
+    
+    <!-- Format Variable Lists as Blocks (prevents horizontal overflow). -->
+    <xsl:param name="variablelist.as.blocks">1</xsl:param>
+
+    <!-- The horrible list spacing problems, this is much better. -->
+    <xsl:attribute-set name="list.block.spacing">
+        <xsl:attribute name="space-before.optimum">0.8em</xsl:attribute>
+        <xsl:attribute name="space-before.minimum">0.8em</xsl:attribute>
+        <xsl:attribute name="space-before.maximum">0.8em</xsl:attribute>
+        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
+    </xsl:attribute-set>
+
+    <!-- Newer DocBook XSL apparently thinks that some sections are by
+         default "draft" status, and this idiotic thing is by default
+         also set to "maybe", so it spits out a lot of errors with the
+         latest FOP as the XSL/FO styles have references to some draft
+         watermarks, which you actually don't want in the first place.
+         Turn this crap off. If you have to work with the "status"
+         attribute, don't.
+    -->
+    <xsl:param name="draft.mode" select="'no'"/>
+
+	<!-- Simplified Chinese related Settings -->
+    <xsl:param name="hyphenate">false</xsl:param>
+	<xsl:param name="body.font.family">simsun</xsl:param>
+	<xsl:param name="monospace.font.family">simsun</xsl:param>
+	<xsl:param name="title.font.family">simhei</xsl:param>
+	<xsl:param name="saxon.character.representation" select="native"/>
+	<xsl:param name="callout.unicode" select="1"/>
+	<xsl:param name="callout.unicode.start.character" select="10102"/>
+	<xsl:param name="l10n.gentext.default.language" select="zh-cn"/>
+</xsl:stylesheet>

Deleted: trunk/HibernateExt/annotations/doc/reference/zh_cn/styles/html.css
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/doc/reference/zh_cn/styles/html.css	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/doc/reference/zh_cn/styles/html.css	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,97 +0,0 @@
-A {
-    color: #003399;
-}
-
-A:active {
-    color: #003399;
-}
-
-A:visited {
-    color: #888888;
-}
-
-P, OL, UL, LI, DL, DT, DD, BLOCKQUOTE {
-    color: #000000;
-}
-
-TD, TH, SPAN {
-    color: #000000;
-}
-
-BLOCKQUOTE {
-    margin-right: 0px;
-}
-
-
-H1, H2, H3, H4, H5, H6    {
-    color: #000000;
-    font-weight:500;
-    margin-top:10px;
-    padding-top:15px;
-}
-
-TABLE  {
-    border-collapse: collapse;
-    border-spacing:0;
-    border: 1px thin black;
-    empty-cells: hide;
-}
-
-TD  {
-    padding: 4pt;
-}
-
-H1 { font-size: 150%; }
-H2 { font-size: 140%; }
-H3 { font-size: 110%; font-weight: bold; }
-H4 { font-size: 110%; font-weight: bold;}
-H5 { font-size: 100%; font-style: italic; }
-H6 { font-size: 100%; font-style: italic; }
-
-TT {
-font-size: 90%;
-    font-family: "Courier New", Courier, monospace;
-    color: #000000;
-}
-
-PRE {
-font-size: 100%;
-    padding: 5px;
-    border-style: solid;
-    border-width: 1px;
-    border-color: #CCCCCC;
-    background-color: #F4F4F4;
-}
-
-UL, OL, LI {
-    list-style: disc;
-}
-
-HR  {
-    width: 100%;
-    height: 1px;
-    background-color: #CCCCCC;
-    border-width: 0px;
-    padding: 0px;
-    color: #CCCCCC;
-}
-
-.variablelist { 
-    padding-top: 10; 
-    padding-bottom:10; 
-    margin:0;
-}
-
-.itemizedlist, UL { 
-    padding-top: 0; 
-    padding-bottom:0; 
-    margin:0; 
-}
-
-.term { 
-    font-weight:bold;
-}
-
-
-
-    

Copied: trunk/HibernateExt/annotations/doc/reference/zh_cn/styles/html.css (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/doc/reference/zh_cn/styles/html.css)
===================================================================
--- trunk/HibernateExt/annotations/doc/reference/zh_cn/styles/html.css	                        (rev 0)
+++ trunk/HibernateExt/annotations/doc/reference/zh_cn/styles/html.css	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,97 @@
+A {
+    color: #003399;
+}
+
+A:active {
+    color: #003399;
+}
+
+A:visited {
+    color: #888888;
+}
+
+P, OL, UL, LI, DL, DT, DD, BLOCKQUOTE {
+    color: #000000;
+}
+
+TD, TH, SPAN {
+    color: #000000;
+}
+
+BLOCKQUOTE {
+    margin-right: 0px;
+}
+
+
+H1, H2, H3, H4, H5, H6    {
+    color: #000000;
+    font-weight:500;
+    margin-top:10px;
+    padding-top:15px;
+}
+
+TABLE  {
+    border-collapse: collapse;
+    border-spacing:0;
+    border: 1px thin black;
+    empty-cells: hide;
+}
+
+TD  {
+    padding: 4pt;
+}
+
+H1 { font-size: 150%; }
+H2 { font-size: 140%; }
+H3 { font-size: 110%; font-weight: bold; }
+H4 { font-size: 110%; font-weight: bold;}
+H5 { font-size: 100%; font-style: italic; }
+H6 { font-size: 100%; font-style: italic; }
+
+TT {
+font-size: 90%;
+    font-family: "Courier New", Courier, monospace;
+    color: #000000;
+}
+
+PRE {
+font-size: 100%;
+    padding: 5px;
+    border-style: solid;
+    border-width: 1px;
+    border-color: #CCCCCC;
+    background-color: #F4F4F4;
+}
+
+UL, OL, LI {
+    list-style: disc;
+}
+
+HR  {
+    width: 100%;
+    height: 1px;
+    background-color: #CCCCCC;
+    border-width: 0px;
+    padding: 0px;
+    color: #CCCCCC;
+}
+
+.variablelist { 
+    padding-top: 10; 
+    padding-bottom:10; 
+    margin:0;
+}
+
+.itemizedlist, UL { 
+    padding-top: 0; 
+    padding-bottom:0; 
+    margin:0; 
+}
+
+.term { 
+    font-weight:bold;
+}
+
+
+
+    

Deleted: trunk/HibernateExt/annotations/doc/reference/zh_cn/styles/html.xsl
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/doc/reference/zh_cn/styles/html.xsl	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/doc/reference/zh_cn/styles/html.xsl	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,84 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
-
-    This is the XSL HTML configuration file for the Hibernate
-    Reference Documentation.
-
-    It took me days to figure out this stuff and fix most of
-    the obvious bugs in the DocBook XSL distribution. Some of
-    the workarounds might not be appropriate with a newer version
-    of DocBook XSL. This file is released as part of Hibernate,
-    hence LGPL licensed.
-
-    christian at hibernate.org
--->
-
-<!DOCTYPE xsl:stylesheet [
-    <!ENTITY db_xsl_path        "../../support/docbook-xsl/">
-]>
-
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                version="1.0"
-                xmlns="http://www.w3.org/TR/xhtml1/transitional"
-                exclude-result-prefixes="#default">
-                
-<xsl:import href="&db_xsl_path;/html/docbook.xsl"/>
-
-<!--###################################################
-                     HTML Settings
-    ################################################### -->   
-
-    <xsl:param name="html.stylesheet">../shared/css/html.css</xsl:param>
-
-    <!-- These extensions are required for table printing and other stuff -->
-    <xsl:param name="use.extensions">1</xsl:param>
-    <xsl:param name="tablecolumns.extension">0</xsl:param>
-    <xsl:param name="callout.extensions">1</xsl:param>
-    <xsl:param name="graphicsize.extension">0</xsl:param>
-
-<!--###################################################
-                      Table Of Contents
-    ################################################### -->   
-
-    <!-- Generate the TOCs for named components only -->
-    <xsl:param name="generate.toc">
-        book   toc
-    </xsl:param>
-    
-    <!-- Show only Sections up to level 3 in the TOCs -->
-    <xsl:param name="toc.section.depth">3</xsl:param>
-    
-<!--###################################################
-                         Labels
-    ################################################### -->   
-
-    <!-- Label Chapters and Sections (numbering) -->
-    <xsl:param name="chapter.autolabel">1</xsl:param>
-    <xsl:param name="section.autolabel" select="1"/>
-    <xsl:param name="section.label.includes.component.label" select="1"/>
-
-<!--###################################################
-                         Callouts
-    ################################################### -->
-
-    <!-- Don't use graphics, use a simple number style -->
-    <xsl:param name="callout.graphics">0</xsl:param>
-
-    <!-- Place callout marks at this column in annotated areas -->
-    <xsl:param name="callout.defaultcolumn">90</xsl:param>
-
-<!--###################################################
-                          Misc
-    ################################################### -->   
-
-    <!-- Placement of titles -->
-    <xsl:param name="formal.title.placement">
-        figure after
-        example before
-        equation before
-        table before
-        procedure before
-    </xsl:param>    
-    
-</xsl:stylesheet>

Copied: trunk/HibernateExt/annotations/doc/reference/zh_cn/styles/html.xsl (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/doc/reference/zh_cn/styles/html.xsl)
===================================================================
--- trunk/HibernateExt/annotations/doc/reference/zh_cn/styles/html.xsl	                        (rev 0)
+++ trunk/HibernateExt/annotations/doc/reference/zh_cn/styles/html.xsl	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,84 @@
+<?xml version="1.0"?>
+
+<!--
+
+    This is the XSL HTML configuration file for the Hibernate
+    Reference Documentation.
+
+    It took me days to figure out this stuff and fix most of
+    the obvious bugs in the DocBook XSL distribution. Some of
+    the workarounds might not be appropriate with a newer version
+    of DocBook XSL. This file is released as part of Hibernate,
+    hence LGPL licensed.
+
+    christian at hibernate.org
+-->
+
+<!DOCTYPE xsl:stylesheet [
+    <!ENTITY db_xsl_path        "../../support/docbook-xsl/">
+]>
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+                version="1.0"
+                xmlns="http://www.w3.org/TR/xhtml1/transitional"
+                exclude-result-prefixes="#default">
+                
+<xsl:import href="&db_xsl_path;/html/docbook.xsl"/>
+
+<!--###################################################
+                     HTML Settings
+    ################################################### -->   
+
+    <xsl:param name="html.stylesheet">../shared/css/html.css</xsl:param>
+
+    <!-- These extensions are required for table printing and other stuff -->
+    <xsl:param name="use.extensions">1</xsl:param>
+    <xsl:param name="tablecolumns.extension">0</xsl:param>
+    <xsl:param name="callout.extensions">1</xsl:param>
+    <xsl:param name="graphicsize.extension">0</xsl:param>
+
+<!--###################################################
+                      Table Of Contents
+    ################################################### -->   
+
+    <!-- Generate the TOCs for named components only -->
+    <xsl:param name="generate.toc">
+        book   toc
+    </xsl:param>
+    
+    <!-- Show only Sections up to level 3 in the TOCs -->
+    <xsl:param name="toc.section.depth">3</xsl:param>
+    
+<!--###################################################
+                         Labels
+    ################################################### -->   
+
+    <!-- Label Chapters and Sections (numbering) -->
+    <xsl:param name="chapter.autolabel">1</xsl:param>
+    <xsl:param name="section.autolabel" select="1"/>
+    <xsl:param name="section.label.includes.component.label" select="1"/>
+
+<!--###################################################
+                         Callouts
+    ################################################### -->
+
+    <!-- Don't use graphics, use a simple number style -->
+    <xsl:param name="callout.graphics">0</xsl:param>
+
+    <!-- Place callout marks at this column in annotated areas -->
+    <xsl:param name="callout.defaultcolumn">90</xsl:param>
+
+<!--###################################################
+                          Misc
+    ################################################### -->   
+
+    <!-- Placement of titles -->
+    <xsl:param name="formal.title.placement">
+        figure after
+        example before
+        equation before
+        table before
+        procedure before
+    </xsl:param>    
+    
+</xsl:stylesheet>

Deleted: trunk/HibernateExt/annotations/doc/reference/zh_cn/styles/html_chunk.xsl
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/doc/reference/zh_cn/styles/html_chunk.xsl	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/doc/reference/zh_cn/styles/html_chunk.xsl	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,86 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
-
-    This is the XSL HTML configuration file for the Hibernate
-    Reference Documentation.
-
-    It took me days to figure out this stuff and fix most of
-    the obvious bugs in the DocBook XSL distribution. Some of
-    the workarounds might not be appropriate with a newer version
-    of DocBook XSL. This file is released as part of Hibernate,
-    hence LGPL licensed.
-
-    christian at hibernate.org
--->
-
-<!DOCTYPE xsl:stylesheet [
-    <!ENTITY db_xsl_path        "../../support/docbook-xsl/">
-]>
-
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                version="1.0"
-                xmlns="http://www.w3.org/TR/xhtml1/transitional"
-                exclude-result-prefixes="#default">
-                
-<xsl:import href="&db_xsl_path;/html/chunk.xsl"/>
-
-<!--###################################################
-                     HTML Settings
-    ################################################### -->   
-
-    <xsl:param name="chunk.section.depth">'5'</xsl:param>
-    <xsl:param name="use.id.as.filename">'1'</xsl:param>
-    <xsl:param name="html.stylesheet">../shared/css/html.css</xsl:param>
-
-    <!-- These extensions are required for table printing and other stuff -->
-    <xsl:param name="use.extensions">1</xsl:param>
-    <xsl:param name="tablecolumns.extension">0</xsl:param>
-    <xsl:param name="callout.extensions">1</xsl:param>
-    <xsl:param name="graphicsize.extension">0</xsl:param>
-    
-<!--###################################################
-                      Table Of Contents
-    ################################################### -->   
-
-    <!-- Generate the TOCs for named components only -->
-    <xsl:param name="generate.toc">
-        book   toc
-    </xsl:param>
-    
-    <!-- Show only Sections up to level 3 in the TOCs -->
-    <xsl:param name="toc.section.depth">3</xsl:param>
-
-<!--###################################################
-                         Labels
-    ################################################### -->   
-
-    <!-- Label Chapters and Sections (numbering) -->
-    <xsl:param name="chapter.autolabel">1</xsl:param>
-    <xsl:param name="section.autolabel" select="1"/>
-    <xsl:param name="section.label.includes.component.label" select="1"/>
-                
-<!--###################################################
-                         Callouts
-    ################################################### -->   
-
-    <!-- Don't use graphics, use a simple number style -->
-    <xsl:param name="callout.graphics">0</xsl:param>
-
-    <!-- Place callout marks at this column in annotated areas -->
-    <xsl:param name="callout.defaultcolumn">90</xsl:param>
-
-<!--###################################################
-                          Misc
-    ################################################### -->   
-
-    <!-- Placement of titles -->
-    <xsl:param name="formal.title.placement">
-        figure after
-        example before
-        equation before
-        table before
-        procedure before
-    </xsl:param>    
-    
-</xsl:stylesheet>

Copied: trunk/HibernateExt/annotations/doc/reference/zh_cn/styles/html_chunk.xsl (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/doc/reference/zh_cn/styles/html_chunk.xsl)
===================================================================
--- trunk/HibernateExt/annotations/doc/reference/zh_cn/styles/html_chunk.xsl	                        (rev 0)
+++ trunk/HibernateExt/annotations/doc/reference/zh_cn/styles/html_chunk.xsl	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,86 @@
+<?xml version="1.0"?>
+
+<!--
+
+    This is the XSL HTML configuration file for the Hibernate
+    Reference Documentation.
+
+    It took me days to figure out this stuff and fix most of
+    the obvious bugs in the DocBook XSL distribution. Some of
+    the workarounds might not be appropriate with a newer version
+    of DocBook XSL. This file is released as part of Hibernate,
+    hence LGPL licensed.
+
+    christian at hibernate.org
+-->
+
+<!DOCTYPE xsl:stylesheet [
+    <!ENTITY db_xsl_path        "../../support/docbook-xsl/">
+]>
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+                version="1.0"
+                xmlns="http://www.w3.org/TR/xhtml1/transitional"
+                exclude-result-prefixes="#default">
+                
+<xsl:import href="&db_xsl_path;/html/chunk.xsl"/>
+
+<!--###################################################
+                     HTML Settings
+    ################################################### -->   
+
+    <xsl:param name="chunk.section.depth">'5'</xsl:param>
+    <xsl:param name="use.id.as.filename">'1'</xsl:param>
+    <xsl:param name="html.stylesheet">../shared/css/html.css</xsl:param>
+
+    <!-- These extensions are required for table printing and other stuff -->
+    <xsl:param name="use.extensions">1</xsl:param>
+    <xsl:param name="tablecolumns.extension">0</xsl:param>
+    <xsl:param name="callout.extensions">1</xsl:param>
+    <xsl:param name="graphicsize.extension">0</xsl:param>
+    
+<!--###################################################
+                      Table Of Contents
+    ################################################### -->   
+
+    <!-- Generate the TOCs for named components only -->
+    <xsl:param name="generate.toc">
+        book   toc
+    </xsl:param>
+    
+    <!-- Show only Sections up to level 3 in the TOCs -->
+    <xsl:param name="toc.section.depth">3</xsl:param>
+
+<!--###################################################
+                         Labels
+    ################################################### -->   
+
+    <!-- Label Chapters and Sections (numbering) -->
+    <xsl:param name="chapter.autolabel">1</xsl:param>
+    <xsl:param name="section.autolabel" select="1"/>
+    <xsl:param name="section.label.includes.component.label" select="1"/>
+                
+<!--###################################################
+                         Callouts
+    ################################################### -->   
+
+    <!-- Don't use graphics, use a simple number style -->
+    <xsl:param name="callout.graphics">0</xsl:param>
+
+    <!-- Place callout marks at this column in annotated areas -->
+    <xsl:param name="callout.defaultcolumn">90</xsl:param>
+
+<!--###################################################
+                          Misc
+    ################################################### -->   
+
+    <!-- Placement of titles -->
+    <xsl:param name="formal.title.placement">
+        figure after
+        example before
+        equation before
+        table before
+        procedure before
+    </xsl:param>    
+    
+</xsl:stylesheet>

Copied: trunk/HibernateExt/annotations/jdbc (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/jdbc)

Deleted: trunk/HibernateExt/annotations/jdbc/hsqldb.jar
===================================================================
(Binary files differ)

Copied: trunk/HibernateExt/annotations/jdbc/hsqldb.jar (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/jdbc/hsqldb.jar)
===================================================================
(Binary files differ)

Deleted: trunk/HibernateExt/annotations/lgpl.txt
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/lgpl.txt	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/lgpl.txt	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,504 +0,0 @@
-		  GNU LESSER GENERAL PUBLIC LICENSE
-		       Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
-     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL.  It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
-			    Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
-  This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it.  You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
-  When we speak of free software, we are referring to freedom of use,
-not price.  Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
-  To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights.  These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
-  For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you.  You must make sure that they, too, receive or can get the source
-code.  If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it.  And you must show them these terms so they know their rights.
-
-  We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
-  To protect each distributor, we want to make it very clear that
-there is no warranty for the free library.  Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-
-  Finally, software patents pose a constant threat to the existence of
-any free program.  We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder.  Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
-  Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License.  This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License.  We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
-  When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library.  The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom.  The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
-  We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License.  It also provides other free software developers Less
-of an advantage over competing non-free programs.  These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries.  However, the Lesser license provides advantages in certain
-special circumstances.
-
-  For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard.  To achieve this, non-free programs must be
-allowed to use the library.  A more frequent case is that a free
-library does the same job as widely used non-free libraries.  In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
-  In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software.  For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
-  Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.  Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library".  The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-
-		  GNU LESSER GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
-  A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
-  The "Library", below, refers to any such software library or work
-which has been distributed under these terms.  A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language.  (Hereinafter, translation is
-included without limitation in the term "modification".)
-
-  "Source code" for a work means the preferred form of the work for
-making modifications to it.  For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
-  Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it).  Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-  
-  1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
-  You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
-  2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) The modified work must itself be a software library.
-
-    b) You must cause the files modified to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    c) You must cause the whole of the work to be licensed at no
-    charge to all third parties under the terms of this License.
-
-    d) If a facility in the modified Library refers to a function or a
-    table of data to be supplied by an application program that uses
-    the facility, other than as an argument passed when the facility
-    is invoked, then you must make a good faith effort to ensure that,
-    in the event an application does not supply such function or
-    table, the facility still operates, and performs whatever part of
-    its purpose remains meaningful.
-
-    (For example, a function in a library to compute square roots has
-    a purpose that is entirely well-defined independent of the
-    application.  Therefore, Subsection 2d requires that any
-    application-supplied function or table used by this function must
-    be optional: if the application does not supply it, the square
-    root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library.  To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License.  (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.)  Do not make any other change in
-these notices.
-
-  Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
-  This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
-  4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
-  If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library".  Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
-  However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library".  The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
-  When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library.  The
-threshold for this to be true is not precisely defined by law.
-
-  If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work.  (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
-  Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
-  6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
-  You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License.  You must supply a copy of this License.  If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License.  Also, you must do one
-of these things:
-
-    a) Accompany the work with the complete corresponding
-    machine-readable source code for the Library including whatever
-    changes were used in the work (which must be distributed under
-    Sections 1 and 2 above); and, if the work is an executable linked
-    with the Library, with the complete machine-readable "work that
-    uses the Library", as object code and/or source code, so that the
-    user can modify the Library and then relink to produce a modified
-    executable containing the modified Library.  (It is understood
-    that the user who changes the contents of definitions files in the
-    Library will not necessarily be able to recompile the application
-    to use the modified definitions.)
-
-    b) Use a suitable shared library mechanism for linking with the
-    Library.  A suitable mechanism is one that (1) uses at run time a
-    copy of the library already present on the user's computer system,
-    rather than copying library functions into the executable, and (2)
-    will operate properly with a modified version of the library, if
-    the user installs one, as long as the modified version is
-    interface-compatible with the version that the work was made with.
-
-    c) Accompany the work with a written offer, valid for at
-    least three years, to give the same user the materials
-    specified in Subsection 6a, above, for a charge no more
-    than the cost of performing this distribution.
-
-    d) If distribution of the work is made by offering access to copy
-    from a designated place, offer equivalent access to copy the above
-    specified materials from the same place.
-
-    e) Verify that the user has already received a copy of these
-    materials or that you have already sent this user a copy.
-
-  For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it.  However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
-  It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system.  Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
-  7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
-    a) Accompany the combined library with a copy of the same work
-    based on the Library, uncombined with any other library
-    facilities.  This must be distributed under the terms of the
-    Sections above.
-
-    b) Give prominent notice with the combined library of the fact
-    that part of it is a work based on the Library, and explaining
-    where to find the accompanying uncombined form of the same work.
-
-  8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License.  Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License.  However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
-  9. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Library or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
-  10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-
-  11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded.  In such case, this License incorporates the limitation as if
-written in the body of this License.
-
-  13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation.  If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
-  14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission.  For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this.  Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
-			    NO WARRANTY
-
-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
-		     END OF TERMS AND CONDITIONS
-		     
-           How to Apply These Terms to Your New Libraries
-
-  If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change.  You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
-  To apply these terms, attach the following notices to the library.  It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the library's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the
-  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
-  <signature of Ty Coon>, 1 April 1990
-  Ty Coon, President of Vice
-
-That's all there is to it!
-
-

Copied: trunk/HibernateExt/annotations/lgpl.txt (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/lgpl.txt)
===================================================================
--- trunk/HibernateExt/annotations/lgpl.txt	                        (rev 0)
+++ trunk/HibernateExt/annotations/lgpl.txt	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,504 @@
+		  GNU LESSER GENERAL PUBLIC LICENSE
+		       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+		  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+  
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+			    NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+		     
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+

Copied: trunk/HibernateExt/annotations/lib (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/lib)

Deleted: trunk/HibernateExt/annotations/lib/README.txt
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/lib/README.txt	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/lib/README.txt	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,15 +0,0 @@
-Hibernate Annotations dependencies
-==================================
-
-
-Core
-====
-hibernate-commons-annotations.jar: required
-hibernate3.jar: required
-hibernate core dependencies: required (see Hibernate Core for more information)
-hibernate-validator.jar: optional
-ejb3-persistence.jar: required
-
-Test
-====
-(no additinal dependency)
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/lib/README.txt (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/lib/README.txt)
===================================================================
--- trunk/HibernateExt/annotations/lib/README.txt	                        (rev 0)
+++ trunk/HibernateExt/annotations/lib/README.txt	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,15 @@
+Hibernate Annotations dependencies
+==================================
+
+
+Core
+====
+hibernate-commons-annotations.jar: required
+hibernate3.jar: required
+hibernate core dependencies: required (see Hibernate Core for more information)
+hibernate-validator.jar: optional
+ejb3-persistence.jar: required
+
+Test
+====
+(no additinal dependency)
\ No newline at end of file

Deleted: trunk/HibernateExt/annotations/readme.txt
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/readme.txt	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/readme.txt	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,57 +0,0 @@
-Hibernate Annotations
-==================================================
-Version: 3.2.1.GA, 8.12.2006
-
-THIS RELEASE OF HIBERNATE ANNOTATIONS REQUIRES HIBERNATE CORE 3.2.0.GA (and above) AND DOES NOT 
-WORK WITH HIBERNATE 3.1.x OR ANY OLDER VERSION OF HIBERNATE.
-
-
-Description
------------
-
-The EJB3 specification recognizes the interest and the success of
-the transparent object/relational mapping paradigm. The EJB3 specification
-standardizes the basic APIs and the metadata needed for any object/relational
-persistence mechanism.
-
-Hibernate EntityManager implements the programming interfaces and lifecycle rules
-as defined by the EJB3 persistence specification. Together with Hibernate Annotations
-this wrapper implements a complete (and standalone) EJB3 persistence solution on
-top of the mature Hibernate core. You may use a combination of all three together,
-annotations without EJB3 programming interfaces and lifecycle, or even pure native
-Hibernate, depending on the business and technical needs of your project. You can
-at all times fall back to Hibernate native APIs, or if required, even to native
-JDBC and SQL.
-
-
-Instructions
-------------
-
-Unzip to installation directory, read doc/reference
-
-
-Contact
-------------
-
-Latest Documentation:
-
-   http://hibernate.org
-   http://annotations.hibernate.org
-
-Bug Reports:
-
-   Hibernate JIRA (preferred)
-   hibernate-devel at lists.sourceforge.net
-
-Free Technical Support:
-
-   http://forum.hibernate.org
-
-
-Notes
------------
-
-If you want to contribute, go to http://www.hibernate.org/
-
-This software and its documentation are distributed under the terms of the
-FSF Lesser Gnu Public License (see lgpl.txt).
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/readme.txt (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/readme.txt)
===================================================================
--- trunk/HibernateExt/annotations/readme.txt	                        (rev 0)
+++ trunk/HibernateExt/annotations/readme.txt	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,57 @@
+Hibernate Annotations
+==================================================
+Version: 3.2.1.GA, 8.12.2006
+
+THIS RELEASE OF HIBERNATE ANNOTATIONS REQUIRES HIBERNATE CORE 3.2.0.GA (and above) AND DOES NOT 
+WORK WITH HIBERNATE 3.1.x OR ANY OLDER VERSION OF HIBERNATE.
+
+
+Description
+-----------
+
+The EJB3 specification recognizes the interest and the success of
+the transparent object/relational mapping paradigm. The EJB3 specification
+standardizes the basic APIs and the metadata needed for any object/relational
+persistence mechanism.
+
+Hibernate EntityManager implements the programming interfaces and lifecycle rules
+as defined by the EJB3 persistence specification. Together with Hibernate Annotations
+this wrapper implements a complete (and standalone) EJB3 persistence solution on
+top of the mature Hibernate core. You may use a combination of all three together,
+annotations without EJB3 programming interfaces and lifecycle, or even pure native
+Hibernate, depending on the business and technical needs of your project. You can
+at all times fall back to Hibernate native APIs, or if required, even to native
+JDBC and SQL.
+
+
+Instructions
+------------
+
+Unzip to installation directory, read doc/reference
+
+
+Contact
+------------
+
+Latest Documentation:
+
+   http://hibernate.org
+   http://annotations.hibernate.org
+
+Bug Reports:
+
+   Hibernate JIRA (preferred)
+   hibernate-devel at lists.sourceforge.net
+
+Free Technical Support:
+
+   http://forum.hibernate.org
+
+
+Notes
+-----------
+
+If you want to contribute, go to http://www.hibernate.org/
+
+This software and its documentation are distributed under the terms of the
+FSF Lesser Gnu Public License (see lgpl.txt).
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src)

Copied: trunk/HibernateExt/annotations/src/java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java)

Copied: trunk/HibernateExt/annotations/src/java/org (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org)

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate)

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/AnnotationException.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/AnnotationException.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/AnnotationException.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,24 +0,0 @@
-//$Id$
-package org.hibernate;
-
-/**
- * Annotation related exception.
- * The EJB3 EG will probably set a generic exception.
- * I'll then use this one.
- *
- * @author Emmanuel Bernard
- */
-public class AnnotationException extends MappingException {
-
-	public AnnotationException(String msg, Throwable root) {
-		super( msg, root );
-	}
-
-	public AnnotationException(Throwable root) {
-		super( root );
-	}
-
-	public AnnotationException(String s) {
-		super( s );
-	}
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/AnnotationException.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/AnnotationException.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/AnnotationException.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/AnnotationException.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,24 @@
+//$Id$
+package org.hibernate;
+
+/**
+ * Annotation related exception.
+ * The EJB3 EG will probably set a generic exception.
+ * I'll then use this one.
+ *
+ * @author Emmanuel Bernard
+ */
+public class AnnotationException extends MappingException {
+
+	public AnnotationException(String msg, Throwable root) {
+		super( msg, root );
+	}
+
+	public AnnotationException(Throwable root) {
+		super( root );
+	}
+
+	public AnnotationException(String s) {
+		super( s );
+	}
+}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations)

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/AccessType.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/AccessType.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/AccessType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,18 +0,0 @@
-//$Id$
-package org.hibernate.annotations;
-
-import static java.lang.annotation.ElementType.*;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * Property Access type
- *
- * @author Emmanuel Bernard
- */
- at Target({TYPE, METHOD, FIELD})
- at Retention(RUNTIME)
-public @interface AccessType {
-	String value();
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/AccessType.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/AccessType.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/AccessType.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/AccessType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,18 @@
+//$Id$
+package org.hibernate.annotations;
+
+import static java.lang.annotation.ElementType.*;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * Property Access type
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({TYPE, METHOD, FIELD})
+ at Retention(RUNTIME)
+public @interface AccessType {
+	String value();
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/BatchSize.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/BatchSize.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/BatchSize.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,19 +0,0 @@
-//$Id$
-package org.hibernate.annotations;
-
-import static java.lang.annotation.ElementType.*;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * Batch size for SQL loading
- *
- * @author Emmanuel Bernard
- */
- at Target({TYPE, METHOD, FIELD})
- at Retention(RUNTIME)
-public @interface BatchSize {
-	/** Strictly positive integer */
-	int size();
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/BatchSize.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/BatchSize.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/BatchSize.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/BatchSize.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,19 @@
+//$Id$
+package org.hibernate.annotations;
+
+import static java.lang.annotation.ElementType.*;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * Batch size for SQL loading
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({TYPE, METHOD, FIELD})
+ at Retention(RUNTIME)
+public @interface BatchSize {
+	/** Strictly positive integer */
+	int size();
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Cache.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Cache.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Cache.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,26 +0,0 @@
-//$Id$
-package org.hibernate.annotations;
-
-import static java.lang.annotation.ElementType.*;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * Add caching strategy to a root entity or a collection
- *
- * @author Emmanuel Bernard
- */
- at Target({TYPE, METHOD, FIELD})
- at Retention(RUNTIME)
-public @interface Cache {
-	/** concurrency strategy chosen */
-	CacheConcurrencyStrategy usage();
-	/** cache region name */
-	String region() default "";
-	/**
-	 * whether or not lazy-properties are included in the second level cache
-	 * default all, other value: non-lazy
-	 */
-	String include() default "all";
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Cache.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Cache.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Cache.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Cache.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,26 @@
+//$Id$
+package org.hibernate.annotations;
+
+import static java.lang.annotation.ElementType.*;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * Add caching strategy to a root entity or a collection
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({TYPE, METHOD, FIELD})
+ at Retention(RUNTIME)
+public @interface Cache {
+	/** concurrency strategy chosen */
+	CacheConcurrencyStrategy usage();
+	/** cache region name */
+	String region() default "";
+	/**
+	 * whether or not lazy-properties are included in the second level cache
+	 * default all, other value: non-lazy
+	 */
+	String include() default "all";
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/CacheConcurrencyStrategy.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/CacheConcurrencyStrategy.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/CacheConcurrencyStrategy.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,15 +0,0 @@
-//$Id$
-package org.hibernate.annotations;
-
-/**
- * Cache concurrency strategy
- *
- * @author Emmanuel Bernard
- */
-public enum CacheConcurrencyStrategy {
-	NONE,
-	READ_ONLY,
-	NONSTRICT_READ_WRITE,
-	READ_WRITE,
-	TRANSACTIONAL
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/CacheConcurrencyStrategy.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/CacheConcurrencyStrategy.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/CacheConcurrencyStrategy.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/CacheConcurrencyStrategy.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,15 @@
+//$Id$
+package org.hibernate.annotations;
+
+/**
+ * Cache concurrency strategy
+ *
+ * @author Emmanuel Bernard
+ */
+public enum CacheConcurrencyStrategy {
+	NONE,
+	READ_ONLY,
+	NONSTRICT_READ_WRITE,
+	READ_WRITE,
+	TRANSACTIONAL
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/CacheModeType.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/CacheModeType.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/CacheModeType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,17 +0,0 @@
-package org.hibernate.annotations;
-
-/**
- * Enumeration for the different interaction modes between the session and
- * the Level 2 Cache.
- *
- * @author Emmanuel Bernard
- * @author Carlos González-Cadenas
- */
-
-public enum CacheModeType {
-	GET,
-	IGNORE,
-	NORMAL,
-	PUT,
-	REFRESH
-} 
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/CacheModeType.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/CacheModeType.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/CacheModeType.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/CacheModeType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,17 @@
+package org.hibernate.annotations;
+
+/**
+ * Enumeration for the different interaction modes between the session and
+ * the Level 2 Cache.
+ *
+ * @author Emmanuel Bernard
+ * @author Carlos González-Cadenas
+ */
+
+public enum CacheModeType {
+	GET,
+	IGNORE,
+	NORMAL,
+	PUT,
+	REFRESH
+} 
\ No newline at end of file

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Cascade.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Cascade.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Cascade.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,16 +0,0 @@
-package org.hibernate.annotations;
-
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.ElementType.METHOD;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * Apply a cascade strategy on an association
- */
- at Target({METHOD, FIELD})
- at Retention(RUNTIME)
-public @interface Cascade {
-	CascadeType[] value();
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Cascade.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Cascade.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Cascade.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Cascade.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,16 @@
+package org.hibernate.annotations;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * Apply a cascade strategy on an association
+ */
+ at Target({METHOD, FIELD})
+ at Retention(RUNTIME)
+public @interface Cascade {
+	CascadeType[] value();
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/CascadeType.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/CascadeType.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/CascadeType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,18 +0,0 @@
-package org.hibernate.annotations;
-
-/**
- * Cascade types (can override default EJB3 cascades
- */
-public enum CascadeType {
-	ALL,
-	PERSIST,
-	MERGE,
-	REMOVE,
-	REFRESH,
-	DELETE,
-	SAVE_UPDATE,
-	REPLICATE,
-	DELETE_ORPHAN,
-	LOCK,
-	EVICT
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/CascadeType.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/CascadeType.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/CascadeType.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/CascadeType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,18 @@
+package org.hibernate.annotations;
+
+/**
+ * Cascade types (can override default EJB3 cascades
+ */
+public enum CascadeType {
+	ALL,
+	PERSIST,
+	MERGE,
+	REMOVE,
+	REFRESH,
+	DELETE,
+	SAVE_UPDATE,
+	REPLICATE,
+	DELETE_ORPHAN,
+	LOCK,
+	EVICT
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Check.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Check.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Check.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,19 +0,0 @@
-//$Id$
-package org.hibernate.annotations;
-
-import static java.lang.annotation.ElementType.*;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * Arbitrary SQL check constraints which can be defined at the class,
- * property or collection level
- *
- * @author Emmanuel Bernard
- */
- at Target({TYPE, METHOD, FIELD})
- at Retention(RUNTIME)
-public @interface Check {
-	String constraints();
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Check.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Check.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Check.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Check.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,19 @@
+//$Id$
+package org.hibernate.annotations;
+
+import static java.lang.annotation.ElementType.*;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * Arbitrary SQL check constraints which can be defined at the class,
+ * property or collection level
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({TYPE, METHOD, FIELD})
+ at Retention(RUNTIME)
+public @interface Check {
+	String constraints();
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/CollectionId.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/CollectionId.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/CollectionId.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,26 +0,0 @@
-//$Id: $
-package org.hibernate.annotations;
-
-import java.lang.annotation.Target;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import static java.lang.annotation.ElementType.METHOD;
-import static java.lang.annotation.ElementType.FIELD;
-import javax.persistence.Column;
-
-/**
- * Describe an identifier column for a bag (ie an idbag)
- * EXPERIMENTAL: the structure of this annotation might slightly change (generator() mix strategy and generator
- * 
- * @author Emmanuel Bernard
- */
- at Target({METHOD, FIELD})
- at Retention(RUNTIME)
-public @interface CollectionId {
-	/** Collection id column(s) */
-	Column[] columns();
-	/** id type, type.type() must be set  */
-	Type type();
-	/** generator name: 'identity' or a defined generator name */
-	String generator();
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/CollectionId.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/CollectionId.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/CollectionId.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/CollectionId.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,26 @@
+//$Id: $
+package org.hibernate.annotations;
+
+import java.lang.annotation.Target;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.FIELD;
+import javax.persistence.Column;
+
+/**
+ * Describe an identifier column for a bag (ie an idbag)
+ * EXPERIMENTAL: the structure of this annotation might slightly change (generator() mix strategy and generator
+ * 
+ * @author Emmanuel Bernard
+ */
+ at Target({METHOD, FIELD})
+ at Retention(RUNTIME)
+public @interface CollectionId {
+	/** Collection id column(s) */
+	Column[] columns();
+	/** id type, type.type() must be set  */
+	Type type();
+	/** generator name: 'identity' or a defined generator name */
+	String generator();
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/CollectionOfElements.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/CollectionOfElements.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/CollectionOfElements.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,28 +0,0 @@
-//$Id$
-package org.hibernate.annotations;
-
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.ElementType.METHOD;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-import javax.persistence.FetchType;
-import static javax.persistence.FetchType.LAZY;
-
-/**
- * Annotation used to mark a collection as a collection of elements or
- * a collection of embedded objects
- *
- * @author Emmanuel Bernard
- */
- at Target({METHOD, FIELD})
- at Retention(RUNTIME)
-public @interface CollectionOfElements {
-	/**
-	 * Represent the element class in the collection
-	 * Only useful if the collection does not use generics
-	 */
-	Class targetElement() default void.class;
-
-	FetchType fetch() default LAZY;
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/CollectionOfElements.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/CollectionOfElements.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/CollectionOfElements.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/CollectionOfElements.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,28 @@
+//$Id$
+package org.hibernate.annotations;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+import javax.persistence.FetchType;
+import static javax.persistence.FetchType.LAZY;
+
+/**
+ * Annotation used to mark a collection as a collection of elements or
+ * a collection of embedded objects
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({METHOD, FIELD})
+ at Retention(RUNTIME)
+public @interface CollectionOfElements {
+	/**
+	 * Represent the element class in the collection
+	 * Only useful if the collection does not use generics
+	 */
+	Class targetElement() default void.class;
+
+	FetchType fetch() default LAZY;
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Columns.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Columns.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Columns.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,20 +0,0 @@
-//$Id$
-package org.hibernate.annotations;
-
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.ElementType.METHOD;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-import javax.persistence.Column;
-
-/**
- * Support an array of columns. Useful for component user types mappings
- *
- * @author Emmanuel Bernard
- */
- at Target({METHOD, FIELD})
- at Retention(RUNTIME)
-public @interface Columns {
-	Column[] columns();
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Columns.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Columns.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Columns.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Columns.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,20 @@
+//$Id$
+package org.hibernate.annotations;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+import javax.persistence.Column;
+
+/**
+ * Support an array of columns. Useful for component user types mappings
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({METHOD, FIELD})
+ at Retention(RUNTIME)
+public @interface Columns {
+	Column[] columns();
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/DiscriminatorFormula.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/DiscriminatorFormula.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/DiscriminatorFormula.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,20 +0,0 @@
-//$Id$
-package org.hibernate.annotations;
-
-import static java.lang.annotation.ElementType.TYPE;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * Discriminator formula
- * To be placed at the root entity.
- *
- * @author Emmanuel Bernard
- * @see Formula
- */
- at Target({TYPE})
- at Retention(RUNTIME)
-public @interface DiscriminatorFormula {
-	String value();
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/DiscriminatorFormula.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/DiscriminatorFormula.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/DiscriminatorFormula.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/DiscriminatorFormula.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,20 @@
+//$Id$
+package org.hibernate.annotations;
+
+import static java.lang.annotation.ElementType.TYPE;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * Discriminator formula
+ * To be placed at the root entity.
+ *
+ * @author Emmanuel Bernard
+ * @see Formula
+ */
+ at Target({TYPE})
+ at Retention(RUNTIME)
+public @interface DiscriminatorFormula {
+	String value();
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Entity.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Entity.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Entity.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,31 +0,0 @@
-//$Id$
-package org.hibernate.annotations;
-
-import static java.lang.annotation.ElementType.TYPE;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * Extends {@link javax.persistence.Entity} with Hibernate features
- *
- * @author Emmanuel Bernard
- */
- at Target(TYPE)
- at Retention(RUNTIME)
-public @interface Entity {
-	/** Is this entity mutable (read only) or not */
-	boolean mutable() default true;
-	/** Needed column only in SQL on insert */
-	boolean dynamicInsert() default false;
-	/** Needed column only in SQL on update */
-	boolean dynamicUpdate() default false;
-	/** Do a select to retrieve the entity before any potential update */
-	boolean selectBeforeUpdate() default false;
-	/** polymorphism strategy for this entity */
-	PolymorphismType polymorphism() default PolymorphismType.IMPLICIT;
-	/** persister of this entity, default is hibernate internal one */
-	String persister() default "";
-	/** optimistic locking strategy */
-	OptimisticLockType optimisticLock() default OptimisticLockType.VERSION;
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Entity.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Entity.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Entity.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Entity.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,31 @@
+//$Id$
+package org.hibernate.annotations;
+
+import static java.lang.annotation.ElementType.TYPE;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * Extends {@link javax.persistence.Entity} with Hibernate features
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target(TYPE)
+ at Retention(RUNTIME)
+public @interface Entity {
+	/** Is this entity mutable (read only) or not */
+	boolean mutable() default true;
+	/** Needed column only in SQL on insert */
+	boolean dynamicInsert() default false;
+	/** Needed column only in SQL on update */
+	boolean dynamicUpdate() default false;
+	/** Do a select to retrieve the entity before any potential update */
+	boolean selectBeforeUpdate() default false;
+	/** polymorphism strategy for this entity */
+	PolymorphismType polymorphism() default PolymorphismType.IMPLICIT;
+	/** persister of this entity, default is hibernate internal one */
+	String persister() default "";
+	/** optimistic locking strategy */
+	OptimisticLockType optimisticLock() default OptimisticLockType.VERSION;
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Fetch.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Fetch.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Fetch.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,18 +0,0 @@
-//$Id: $
-package org.hibernate.annotations;
-
-import java.lang.annotation.Target;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * Define the fetching strategy used for the given association
- *
- * @author Emmanuel Bernard
- */
- at Target({ElementType.METHOD, ElementType.FIELD})
- at Retention(RetentionPolicy.RUNTIME)
-public @interface Fetch {
-	FetchMode value();
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Fetch.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Fetch.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Fetch.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Fetch.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,18 @@
+//$Id: $
+package org.hibernate.annotations;
+
+import java.lang.annotation.Target;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * Define the fetching strategy used for the given association
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({ElementType.METHOD, ElementType.FIELD})
+ at Retention(RetentionPolicy.RUNTIME)
+public @interface Fetch {
+	FetchMode value();
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/FetchMode.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/FetchMode.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/FetchMode.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,22 +0,0 @@
-//$Id: $
-package org.hibernate.annotations;
-
-/**
- * Fetch options on associations
- *
- * @author Emmanuel Bernard
- */
-public enum FetchMode {
-	/**
-	 * use a select for each individual entity, collection, or join load
-	 */
-	SELECT,
-	/**
-	 * use an outer join to load the related entities, collections or joins
-	 */
-	JOIN,
-	/**
-	 * use a subselect query to load the additional collections
-	 */
-	SUBSELECT
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/FetchMode.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/FetchMode.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/FetchMode.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/FetchMode.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,22 @@
+//$Id: $
+package org.hibernate.annotations;
+
+/**
+ * Fetch options on associations
+ *
+ * @author Emmanuel Bernard
+ */
+public enum FetchMode {
+	/**
+	 * use a select for each individual entity, collection, or join load
+	 */
+	SELECT,
+	/**
+	 * use an outer join to load the related entities, collections or joins
+	 */
+	JOIN,
+	/**
+	 * use a subselect query to load the additional collections
+	 */
+	SUBSELECT
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Filter.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Filter.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Filter.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,22 +0,0 @@
-//$Id$
-package org.hibernate.annotations;
-
-import static java.lang.annotation.ElementType.*;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * Add filters to an entity or a target entity of a collection
- *
- * @author Emmanuel Bernard
- * @author Matthew Inger
- * @author Magnus Sandberg
- */
- at Target({TYPE, METHOD, FIELD})
- at Retention(RUNTIME)
-public @interface Filter {
-	String name();
-
-	String condition() default "";
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Filter.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Filter.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Filter.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Filter.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,22 @@
+//$Id$
+package org.hibernate.annotations;
+
+import static java.lang.annotation.ElementType.*;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * Add filters to an entity or a target entity of a collection
+ *
+ * @author Emmanuel Bernard
+ * @author Matthew Inger
+ * @author Magnus Sandberg
+ */
+ at Target({TYPE, METHOD, FIELD})
+ at Retention(RUNTIME)
+public @interface Filter {
+	String name();
+
+	String condition() default "";
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/FilterDef.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/FilterDef.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/FilterDef.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,24 +0,0 @@
-//$Id$
-package org.hibernate.annotations;
-
-import static java.lang.annotation.ElementType.PACKAGE;
-import static java.lang.annotation.ElementType.TYPE;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * Filter definition
- *
- * @author Matthew Inger
- * @author Emmanuel Bernard
- */
- at Target({TYPE, PACKAGE})
- at Retention(RUNTIME)
-public @interface FilterDef {
-	String name();
-
-	String defaultCondition() default "";
-
-	ParamDef[] parameters() default {};
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/FilterDef.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/FilterDef.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/FilterDef.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/FilterDef.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,24 @@
+//$Id$
+package org.hibernate.annotations;
+
+import static java.lang.annotation.ElementType.PACKAGE;
+import static java.lang.annotation.ElementType.TYPE;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * Filter definition
+ *
+ * @author Matthew Inger
+ * @author Emmanuel Bernard
+ */
+ at Target({TYPE, PACKAGE})
+ at Retention(RUNTIME)
+public @interface FilterDef {
+	String name();
+
+	String defaultCondition() default "";
+
+	ParamDef[] parameters() default {};
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/FilterDefs.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/FilterDefs.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/FilterDefs.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,20 +0,0 @@
-//$Id$
-package org.hibernate.annotations;
-
-import static java.lang.annotation.ElementType.PACKAGE;
-import static java.lang.annotation.ElementType.TYPE;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * Array of filter definitions
- *
- * @author Matthew Inger
- * @author Emmanuel Bernard
- */
- at Target({PACKAGE, TYPE})
- at Retention(RUNTIME)
-public @interface FilterDefs {
-	FilterDef[] value();
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/FilterDefs.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/FilterDefs.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/FilterDefs.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/FilterDefs.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,20 @@
+//$Id$
+package org.hibernate.annotations;
+
+import static java.lang.annotation.ElementType.PACKAGE;
+import static java.lang.annotation.ElementType.TYPE;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * Array of filter definitions
+ *
+ * @author Matthew Inger
+ * @author Emmanuel Bernard
+ */
+ at Target({PACKAGE, TYPE})
+ at Retention(RUNTIME)
+public @interface FilterDefs {
+	FilterDef[] value();
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/FilterJoinTable.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/FilterJoinTable.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/FilterJoinTable.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,20 +0,0 @@
-//$Id: $
-package org.hibernate.annotations;
-
-import java.lang.annotation.Target;
-import java.lang.annotation.Retention;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * Add filters to a join table collection
- *
- * @author Emmanuel Bernard
- */
- at Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
- at Retention(RetentionPolicy.RUNTIME)
-public @interface FilterJoinTable {
-	String name();
-
-	String condition() default "";
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/FilterJoinTable.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/FilterJoinTable.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/FilterJoinTable.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/FilterJoinTable.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,20 @@
+//$Id: $
+package org.hibernate.annotations;
+
+import java.lang.annotation.Target;
+import java.lang.annotation.Retention;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * Add filters to a join table collection
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
+ at Retention(RetentionPolicy.RUNTIME)
+public @interface FilterJoinTable {
+	String name();
+
+	String condition() default "";
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/FilterJoinTables.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/FilterJoinTables.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/FilterJoinTables.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,18 +0,0 @@
-//$Id: $
-package org.hibernate.annotations;
-
-import java.lang.annotation.Target;
-import java.lang.annotation.Retention;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * Add multiple @FilterJoinTable to a collection
- *
- * @author Emmanuel Bernard
- */
- at Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
- at Retention(RetentionPolicy.RUNTIME)
-public @interface FilterJoinTables {
-	FilterJoinTable[] value();
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/FilterJoinTables.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/FilterJoinTables.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/FilterJoinTables.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/FilterJoinTables.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,18 @@
+//$Id: $
+package org.hibernate.annotations;
+
+import java.lang.annotation.Target;
+import java.lang.annotation.Retention;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * Add multiple @FilterJoinTable to a collection
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
+ at Retention(RetentionPolicy.RUNTIME)
+public @interface FilterJoinTables {
+	FilterJoinTable[] value();
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Filters.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Filters.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Filters.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,20 +0,0 @@
-//$Id$
-package org.hibernate.annotations;
-
-import static java.lang.annotation.ElementType.*;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * Add multiple @Filters
- *
- * @author Emmanuel Bernard
- * @author Matthew Inger
- * @author Magnus Sandberg
- */
- at Target({TYPE, METHOD, FIELD})
- at Retention(RUNTIME)
-public @interface Filters {
-	Filter[] value();
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Filters.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Filters.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Filters.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Filters.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,20 @@
+//$Id$
+package org.hibernate.annotations;
+
+import static java.lang.annotation.ElementType.*;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * Add multiple @Filters
+ *
+ * @author Emmanuel Bernard
+ * @author Matthew Inger
+ * @author Magnus Sandberg
+ */
+ at Target({TYPE, METHOD, FIELD})
+ at Retention(RUNTIME)
+public @interface Filters {
+	Filter[] value();
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/FlushModeType.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/FlushModeType.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/FlushModeType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,31 +0,0 @@
-package org.hibernate.annotations;
-
-/**
- * Enumeration extending javax.persistence flush modes.
- *
- * @author Carlos González-Cadenas
- */
-
-public enum FlushModeType {
-	/**
-	 * see {@link org.hibernate.FlushMode.ALWAYS}
-	 */
-	ALWAYS,
-	/**
-	 * see {@link org.hibernate.FlushMode.AUTO}
-	 */
-	AUTO,
-	/**
-	 * see {@link org.hibernate.FlushMode.COMMIT}
-	 */
-	COMMIT,
-	/**
-	 * see {@link org.hibernate.FlushMode.NEVER}
-	 * @deprecated use MANUAL, will be removed in a subsequent release
-	 */
-	NEVER,
-	/**
-	 * see {@link org.hibernate.FlushMode.MANUAL}
-	 */
-	MANUAL
-}
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/FlushModeType.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/FlushModeType.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/FlushModeType.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/FlushModeType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,31 @@
+package org.hibernate.annotations;
+
+/**
+ * Enumeration extending javax.persistence flush modes.
+ *
+ * @author Carlos González-Cadenas
+ */
+
+public enum FlushModeType {
+	/**
+	 * see {@link org.hibernate.FlushMode.ALWAYS}
+	 */
+	ALWAYS,
+	/**
+	 * see {@link org.hibernate.FlushMode.AUTO}
+	 */
+	AUTO,
+	/**
+	 * see {@link org.hibernate.FlushMode.COMMIT}
+	 */
+	COMMIT,
+	/**
+	 * see {@link org.hibernate.FlushMode.NEVER}
+	 * @deprecated use MANUAL, will be removed in a subsequent release
+	 */
+	NEVER,
+	/**
+	 * see {@link org.hibernate.FlushMode.MANUAL}
+	 */
+	MANUAL
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/ForceDiscriminator.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/ForceDiscriminator.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/ForceDiscriminator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,16 +0,0 @@
-//$Id: $
-package org.hibernate.annotations;
-
-import java.lang.annotation.Target;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * ForceDiscriminator flag
- * To be placed at the root entity near @DiscriminatorColumn or @DiscriminatorFormula
- *
- * @author Serg Prasolov
- */
- at Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME)
-public @interface ForceDiscriminator {}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/ForceDiscriminator.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/ForceDiscriminator.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/ForceDiscriminator.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/ForceDiscriminator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,16 @@
+//$Id: $
+package org.hibernate.annotations;
+
+import java.lang.annotation.Target;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * ForceDiscriminator flag
+ * To be placed at the root entity near @DiscriminatorColumn or @DiscriminatorFormula
+ *
+ * @author Serg Prasolov
+ */
+ at Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME)
+public @interface ForceDiscriminator {}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/ForeignKey.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/ForeignKey.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/ForeignKey.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,29 +0,0 @@
-//$Id: $
-package org.hibernate.annotations;
-
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.ElementType.METHOD;
-import static java.lang.annotation.ElementType.TYPE;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
- at Target({FIELD, METHOD, TYPE})
- at Retention(RUNTIME)
-
-/**
- * Define the foreign key name
- */
-public @interface ForeignKey {
-	/**
-	 * Name of the foreign key.  Used in OneToMany, ManyToOne, and OneToOne
-	 * relationships.  Used for the owning side in ManyToMany relationships
-	 */
-	String name();
-
-	/**
-	 * Used for the non-owning side of a ManyToMany relationship.  Ignored
-	 * in other relationships
-	 */
-	String inverseName() default "";
-}
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/ForeignKey.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/ForeignKey.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/ForeignKey.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/ForeignKey.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,29 @@
+//$Id: $
+package org.hibernate.annotations;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+ at Target({FIELD, METHOD, TYPE})
+ at Retention(RUNTIME)
+
+/**
+ * Define the foreign key name
+ */
+public @interface ForeignKey {
+	/**
+	 * Name of the foreign key.  Used in OneToMany, ManyToOne, and OneToOne
+	 * relationships.  Used for the owning side in ManyToMany relationships
+	 */
+	String name();
+
+	/**
+	 * Used for the non-owning side of a ManyToMany relationship.  Ignored
+	 * in other relationships
+	 */
+	String inverseName() default "";
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Formula.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Formula.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Formula.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,19 +0,0 @@
-package org.hibernate.annotations;
-
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.ElementType.METHOD;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * Formula. To be used as a replacement for @Column in most places
- * The formula has to be a valid SQL fragment
- *
- * @author Emmanuel Bernard
- */
- at Target({METHOD, FIELD})
- at Retention(RUNTIME)
-public @interface Formula {
-	String value();
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Formula.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Formula.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Formula.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Formula.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,19 @@
+package org.hibernate.annotations;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * Formula. To be used as a replacement for @Column in most places
+ * The formula has to be a valid SQL fragment
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({METHOD, FIELD})
+ at Retention(RUNTIME)
+public @interface Formula {
+	String value();
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Generated.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Generated.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Generated.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,18 +0,0 @@
-//$Id: $
-package org.hibernate.annotations;
-
-import java.lang.annotation.Target;
-import java.lang.annotation.Retention;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * The annotated property is generated by the database
- *
- * @author Emmanuel Bernard
- */
- at Target({ElementType.FIELD, ElementType.METHOD})
- at Retention(RetentionPolicy.RUNTIME)
-public @interface Generated {
-	GenerationTime value();
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Generated.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Generated.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Generated.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Generated.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,18 @@
+//$Id: $
+package org.hibernate.annotations;
+
+import java.lang.annotation.Target;
+import java.lang.annotation.Retention;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * The annotated property is generated by the database
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({ElementType.FIELD, ElementType.METHOD})
+ at Retention(RetentionPolicy.RUNTIME)
+public @interface Generated {
+	GenerationTime value();
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/GenerationTime.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/GenerationTime.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/GenerationTime.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,13 +0,0 @@
-//$Id: $
-package org.hibernate.annotations;
-
-/**
- * When should the generation occurs
- *
- * @author Emmanuel Bernard
- */
-public enum GenerationTime {
-	NEVER,
-	INSERT,
-	ALWAYS
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/GenerationTime.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/GenerationTime.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/GenerationTime.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/GenerationTime.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,13 @@
+//$Id: $
+package org.hibernate.annotations;
+
+/**
+ * When should the generation occurs
+ *
+ * @author Emmanuel Bernard
+ */
+public enum GenerationTime {
+	NEVER,
+	INSERT,
+	ALWAYS
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/GenericGenerator.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/GenericGenerator.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/GenericGenerator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,31 +0,0 @@
-//$Id$
-package org.hibernate.annotations;
-
-import static java.lang.annotation.ElementType.*;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * Generator annotation describing any kind of Hibernate
- * generator in a detyped manner
- *
- * @author Emmanuel Bernard
- */
- at Target({PACKAGE, TYPE, METHOD, FIELD})
- at Retention(RUNTIME)
-public @interface GenericGenerator {
-	/**
-	 * unique generator name
-	 */
-	String name();
-	/**
-	 * Generator strategy either a predefined Hibernate
-	 * strategy or a fully qualified class name.
-	 */
-	String strategy();
-	/**
-	 * Optional generator parameters
-	 */
-	Parameter[] parameters() default {};
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/GenericGenerator.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/GenericGenerator.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/GenericGenerator.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/GenericGenerator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,31 @@
+//$Id$
+package org.hibernate.annotations;
+
+import static java.lang.annotation.ElementType.*;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * Generator annotation describing any kind of Hibernate
+ * generator in a detyped manner
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({PACKAGE, TYPE, METHOD, FIELD})
+ at Retention(RUNTIME)
+public @interface GenericGenerator {
+	/**
+	 * unique generator name
+	 */
+	String name();
+	/**
+	 * Generator strategy either a predefined Hibernate
+	 * strategy or a fully qualified class name.
+	 */
+	String strategy();
+	/**
+	 * Optional generator parameters
+	 */
+	Parameter[] parameters() default {};
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Immutable.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Immutable.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Immutable.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,15 +0,0 @@
-//$Id: $
-package org.hibernate.annotations;
-
-import java.lang.annotation.*;
-
-/**
- * Mark an Entity or a Collection as immutable
- * No annotation means the element is mutable
- *
- * @author Emmanuel Bernard
- */
- at java.lang.annotation.Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
- at Retention( RetentionPolicy.RUNTIME )
-public @interface Immutable {
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Immutable.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Immutable.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Immutable.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Immutable.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,15 @@
+//$Id: $
+package org.hibernate.annotations;
+
+import java.lang.annotation.*;
+
+/**
+ * Mark an Entity or a Collection as immutable
+ * No annotation means the element is mutable
+ *
+ * @author Emmanuel Bernard
+ */
+ at java.lang.annotation.Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
+ at Retention( RetentionPolicy.RUNTIME )
+public @interface Immutable {
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Index.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Index.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Index.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,20 +0,0 @@
-package org.hibernate.annotations;
-
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.ElementType.METHOD;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * Define a DB index
- *
- * @author Emmanuel Bernard
- */
- at Target({FIELD, METHOD})
- at Retention(RUNTIME)
-public @interface Index {
-	String name();
-
-	String[] columnNames() default {};
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Index.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Index.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Index.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Index.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,20 @@
+package org.hibernate.annotations;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * Define a DB index
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({FIELD, METHOD})
+ at Retention(RUNTIME)
+public @interface Index {
+	String name();
+
+	String[] columnNames() default {};
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/IndexColumn.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/IndexColumn.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/IndexColumn.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,25 +0,0 @@
-package org.hibernate.annotations;
-
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.ElementType.METHOD;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * Describe an index column of a List
- *
- * @author Matthew Inger
- */
- at Target({METHOD, FIELD})
- at Retention(RUNTIME)
-public @interface IndexColumn {
-	/** column name */
-	String name();
-	/** index in DB start from base */
-	int base() default 0;
-	/** is the index nullable */
-	boolean nullable() default true;
-	/** column definition, default to an appropriate integer */
-	String columnDefinition() default "";
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/IndexColumn.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/IndexColumn.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/IndexColumn.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/IndexColumn.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,25 @@
+package org.hibernate.annotations;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * Describe an index column of a List
+ *
+ * @author Matthew Inger
+ */
+ at Target({METHOD, FIELD})
+ at Retention(RUNTIME)
+public @interface IndexColumn {
+	/** column name */
+	String name();
+	/** index in DB start from base */
+	int base() default 0;
+	/** is the index nullable */
+	boolean nullable() default true;
+	/** column definition, default to an appropriate integer */
+	String columnDefinition() default "";
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/LazyCollection.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/LazyCollection.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/LazyCollection.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,18 +0,0 @@
-//$Id: $
-package org.hibernate.annotations;
-
-import java.lang.annotation.Target;
-import java.lang.annotation.Retention;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * Define the lazy status of a collection
- *
- * @author Emmanuel Bernard
- */
- at Target({ElementType.METHOD, ElementType.FIELD})
- at Retention(RetentionPolicy.RUNTIME)
-public @interface LazyCollection {
-	LazyCollectionOption value();
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/LazyCollection.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/LazyCollection.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/LazyCollection.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/LazyCollection.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,18 @@
+//$Id: $
+package org.hibernate.annotations;
+
+import java.lang.annotation.Target;
+import java.lang.annotation.Retention;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * Define the lazy status of a collection
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({ElementType.METHOD, ElementType.FIELD})
+ at Retention(RetentionPolicy.RUNTIME)
+public @interface LazyCollection {
+	LazyCollectionOption value();
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/LazyCollectionOption.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/LazyCollectionOption.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/LazyCollectionOption.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,16 +0,0 @@
-//$Id: $
-package org.hibernate.annotations;
-
-/**
- * Lazy options available for a collection
- *
- * @author Emmanuel Bernard
- */
-public enum LazyCollectionOption {
-	/** eagerly load it */
-	FALSE,
-	/** load it when the state is requested */
-	TRUE,
-	/** prefer extra queries over fill collection loading */
-	EXTRA
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/LazyCollectionOption.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/LazyCollectionOption.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/LazyCollectionOption.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/LazyCollectionOption.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,16 @@
+//$Id: $
+package org.hibernate.annotations;
+
+/**
+ * Lazy options available for a collection
+ *
+ * @author Emmanuel Bernard
+ */
+public enum LazyCollectionOption {
+	/** eagerly load it */
+	FALSE,
+	/** load it when the state is requested */
+	TRUE,
+	/** prefer extra queries over fill collection loading */
+	EXTRA
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/LazyToOne.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/LazyToOne.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/LazyToOne.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,19 +0,0 @@
-//$Id: $
-package org.hibernate.annotations;
-
-import java.lang.annotation.Target;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * Define the lazy status of a ToOne association
- * (ie OneToOne or ManyToOne)
- *
- * @author Emmanuel Bernard
- */
- at Target({ElementType.METHOD, ElementType.FIELD})
- at Retention(RetentionPolicy.RUNTIME)
-public @interface LazyToOne {
-	LazyToOneOption value();
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/LazyToOne.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/LazyToOne.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/LazyToOne.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/LazyToOne.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,19 @@
+//$Id: $
+package org.hibernate.annotations;
+
+import java.lang.annotation.Target;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * Define the lazy status of a ToOne association
+ * (ie OneToOne or ManyToOne)
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({ElementType.METHOD, ElementType.FIELD})
+ at Retention(RetentionPolicy.RUNTIME)
+public @interface LazyToOne {
+	LazyToOneOption value();
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/LazyToOneOption.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/LazyToOneOption.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/LazyToOneOption.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,23 +0,0 @@
-//$Id: $
-package org.hibernate.annotations;
-
-/**
- * Lazy options available for a ToOne association
- *
- * @author Emmanuel Bernard
- */
-public enum LazyToOneOption {
-	/** eagerly load the association */
-	FALSE,
-	/**
-	 * Lazy, give back a proxy which will be loaded when the state is requested
-	 * This should be the prefered option
-	 */
-	PROXY,
-	/** Lazy, give back the real object loaded when a reference is requested
-	 * (Bytecode enhancement is mandatory for this option, fall back to PROXY
-	 * if the class is not enhanced)
-	 * This option should be avoided unless you can't afford the use of proxies
-	 */
-	NO_PROXY
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/LazyToOneOption.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/LazyToOneOption.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/LazyToOneOption.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/LazyToOneOption.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,23 @@
+//$Id: $
+package org.hibernate.annotations;
+
+/**
+ * Lazy options available for a ToOne association
+ *
+ * @author Emmanuel Bernard
+ */
+public enum LazyToOneOption {
+	/** eagerly load the association */
+	FALSE,
+	/**
+	 * Lazy, give back a proxy which will be loaded when the state is requested
+	 * This should be the prefered option
+	 */
+	PROXY,
+	/** Lazy, give back the real object loaded when a reference is requested
+	 * (Bytecode enhancement is mandatory for this option, fall back to PROXY
+	 * if the class is not enhanced)
+	 * This option should be avoided unless you can't afford the use of proxies
+	 */
+	NO_PROXY
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Loader.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Loader.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Loader.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,22 +0,0 @@
-package org.hibernate.annotations;
-
-import static java.lang.annotation.ElementType.TYPE;
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.ElementType.METHOD;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * Loader Annotation for overwriting Hibernate default FIND method
- *
- * @author László Benke
- */
- at Target( {TYPE, FIELD, METHOD} )
- at Retention( RUNTIME )
-public @interface Loader {
-	/**
-	 * namedQuery to use for loading
-	 */
-	String namedQuery() default "";
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Loader.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Loader.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Loader.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Loader.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,22 @@
+package org.hibernate.annotations;
+
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * Loader Annotation for overwriting Hibernate default FIND method
+ *
+ * @author László Benke
+ */
+ at Target( {TYPE, FIELD, METHOD} )
+ at Retention( RUNTIME )
+public @interface Loader {
+	/**
+	 * namedQuery to use for loading
+	 */
+	String namedQuery() default "";
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/MapKey.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/MapKey.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/MapKey.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,27 +0,0 @@
-//$Id: $
-package org.hibernate.annotations;
-
-import java.lang.annotation.Target;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import static java.lang.annotation.ElementType.METHOD;
-import static java.lang.annotation.ElementType.FIELD;
-import javax.persistence.Column;
-
-/**
- * Define the map key columns as an explicit column holding the map key
- * This is completly different from {@link javax.persistence.MapKey} which use an existing column
- * This annotation and {@link javax.persistence.MapKey} are mutually exclusive
- *
- * @author Emmanuel Bernard
- */
- at Target({METHOD, FIELD})
- at Retention(RUNTIME)
-public @interface MapKey {
-	Column[] columns() default {};
-	/**
-	 * Represent the key class in a Map
-	 * Only useful if the collection does not use generics
-	 */
-	Class targetElement() default void.class;
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/MapKey.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/MapKey.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/MapKey.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/MapKey.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,27 @@
+//$Id: $
+package org.hibernate.annotations;
+
+import java.lang.annotation.Target;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.FIELD;
+import javax.persistence.Column;
+
+/**
+ * Define the map key columns as an explicit column holding the map key
+ * This is completly different from {@link javax.persistence.MapKey} which use an existing column
+ * This annotation and {@link javax.persistence.MapKey} are mutually exclusive
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({METHOD, FIELD})
+ at Retention(RUNTIME)
+public @interface MapKey {
+	Column[] columns() default {};
+	/**
+	 * Represent the key class in a Map
+	 * Only useful if the collection does not use generics
+	 */
+	Class targetElement() default void.class;
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/MapKeyManyToMany.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/MapKeyManyToMany.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/MapKeyManyToMany.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,26 +0,0 @@
-//$Id: $
-package org.hibernate.annotations;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-import javax.persistence.JoinColumn;
-
-/**
- * Define the map key columns as an explicit column holding the map key
- * This is completly different from {@link javax.persistence.MapKey} which use an existing column
- * This annotation and {@link javax.persistence.MapKey} are mutually exclusive
- *
- * @author Emmanuel Bernard
- */
- at Target({ElementType.METHOD, ElementType.FIELD})
- at Retention(RetentionPolicy.RUNTIME)
-public @interface MapKeyManyToMany {
-	JoinColumn[] joinColumns() default {};
-	/**
-	 * Represent the key class in a Map
-	 * Only useful if the collection does not use generics
-	 */
-	Class targetEntity() default void.class;
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/MapKeyManyToMany.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/MapKeyManyToMany.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/MapKeyManyToMany.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/MapKeyManyToMany.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,26 @@
+//$Id: $
+package org.hibernate.annotations;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import javax.persistence.JoinColumn;
+
+/**
+ * Define the map key columns as an explicit column holding the map key
+ * This is completly different from {@link javax.persistence.MapKey} which use an existing column
+ * This annotation and {@link javax.persistence.MapKey} are mutually exclusive
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({ElementType.METHOD, ElementType.FIELD})
+ at Retention(RetentionPolicy.RUNTIME)
+public @interface MapKeyManyToMany {
+	JoinColumn[] joinColumns() default {};
+	/**
+	 * Represent the key class in a Map
+	 * Only useful if the collection does not use generics
+	 */
+	Class targetEntity() default void.class;
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/NamedNativeQueries.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/NamedNativeQueries.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/NamedNativeQueries.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,19 +0,0 @@
-package org.hibernate.annotations;
-
-import static java.lang.annotation.ElementType.PACKAGE;
-import static java.lang.annotation.ElementType.TYPE;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * Extends {@link javax.persistence.NamedNativeQueries} to hold hibernate NamedNativeQuery
- * objects
- *
- * @author Emmanuel Bernard
- */
- at Target({TYPE, PACKAGE})
- at Retention(RUNTIME)
-public @interface NamedNativeQueries {
-	NamedNativeQuery[] value();
-}
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/NamedNativeQueries.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/NamedNativeQueries.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/NamedNativeQueries.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/NamedNativeQueries.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,19 @@
+package org.hibernate.annotations;
+
+import static java.lang.annotation.ElementType.PACKAGE;
+import static java.lang.annotation.ElementType.TYPE;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * Extends {@link javax.persistence.NamedNativeQueries} to hold hibernate NamedNativeQuery
+ * objects
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({TYPE, PACKAGE})
+ at Retention(RUNTIME)
+public @interface NamedNativeQueries {
+	NamedNativeQuery[] value();
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/NamedNativeQuery.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/NamedNativeQuery.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/NamedNativeQuery.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,42 +0,0 @@
-package org.hibernate.annotations;
-
-import static java.lang.annotation.ElementType.PACKAGE;
-import static java.lang.annotation.ElementType.TYPE;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * Extends {@link javax.persistence.NamedNativeQuery} with Hibernate features
- *
- * @author Emmanuel Bernard
- */
- at Target({TYPE, PACKAGE})
- at Retention(RUNTIME)
-public @interface NamedNativeQuery {
-	String name();
-
-	String query();
-
-	Class resultClass() default void.class;
-
-	String resultSetMapping() default ""; // name of SQLResultSetMapping
-	/** the flush mode for the query */
-	FlushModeType flushMode() default FlushModeType.AUTO;
-	/** mark the query as cacheable or not */
-	boolean cacheable() default false;
-	/** the cache region to use */
-	String cacheRegion() default "";
-	/** the number of rows fetched by the JDBC Driver per roundtrip */
-	int fetchSize() default -1;
-	/**the query timeout in seconds*/
-	int timeout() default -1;
-
-	boolean callable() default false;
-	/**comment added to the SQL query, useful for the DBA */
-	String comment() default "";
-	/**the cache mode used for this query*/
-	CacheModeType cacheMode() default CacheModeType.NORMAL;
-	/**marks whether the results are fetched in read-only mode or not*/
-	boolean readOnly() default false;
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/NamedNativeQuery.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/NamedNativeQuery.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/NamedNativeQuery.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/NamedNativeQuery.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,42 @@
+package org.hibernate.annotations;
+
+import static java.lang.annotation.ElementType.PACKAGE;
+import static java.lang.annotation.ElementType.TYPE;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * Extends {@link javax.persistence.NamedNativeQuery} with Hibernate features
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({TYPE, PACKAGE})
+ at Retention(RUNTIME)
+public @interface NamedNativeQuery {
+	String name();
+
+	String query();
+
+	Class resultClass() default void.class;
+
+	String resultSetMapping() default ""; // name of SQLResultSetMapping
+	/** the flush mode for the query */
+	FlushModeType flushMode() default FlushModeType.AUTO;
+	/** mark the query as cacheable or not */
+	boolean cacheable() default false;
+	/** the cache region to use */
+	String cacheRegion() default "";
+	/** the number of rows fetched by the JDBC Driver per roundtrip */
+	int fetchSize() default -1;
+	/**the query timeout in seconds*/
+	int timeout() default -1;
+
+	boolean callable() default false;
+	/**comment added to the SQL query, useful for the DBA */
+	String comment() default "";
+	/**the cache mode used for this query*/
+	CacheModeType cacheMode() default CacheModeType.NORMAL;
+	/**marks whether the results are fetched in read-only mode or not*/
+	boolean readOnly() default false;
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/NamedQueries.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/NamedQueries.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/NamedQueries.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,20 +0,0 @@
-package org.hibernate.annotations;
-
-import static java.lang.annotation.ElementType.PACKAGE;
-import static java.lang.annotation.ElementType.TYPE;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * Extends {@link javax.persistence.NamedQueries} to hold hibernate NamedQuery
- * objects
- *
- * @author Emmanuel Bernard
- * @author Carlos González-Cadenas
- */
- at Target({TYPE, PACKAGE})
- at Retention(RUNTIME)
-public @interface NamedQueries {
-	NamedQuery[] value();
-}
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/NamedQueries.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/NamedQueries.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/NamedQueries.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/NamedQueries.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,20 @@
+package org.hibernate.annotations;
+
+import static java.lang.annotation.ElementType.PACKAGE;
+import static java.lang.annotation.ElementType.TYPE;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * Extends {@link javax.persistence.NamedQueries} to hold hibernate NamedQuery
+ * objects
+ *
+ * @author Emmanuel Bernard
+ * @author Carlos González-Cadenas
+ */
+ at Target({TYPE, PACKAGE})
+ at Retention(RUNTIME)
+public @interface NamedQueries {
+	NamedQuery[] value();
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/NamedQuery.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/NamedQuery.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/NamedQuery.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,40 +0,0 @@
-//$Id$
-package org.hibernate.annotations;
-
-import static java.lang.annotation.ElementType.PACKAGE;
-import static java.lang.annotation.ElementType.TYPE;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * Extends {@link javax.persistence.NamedQuery} with Hibernate features
- *
- * @author Carlos González-Cadenas
- */
- at Target({TYPE, PACKAGE})
- at Retention(RUNTIME)
-public @interface NamedQuery {
-
-	/** the name of the NamedQuery */
-	String name();
-	/** the Query String for the NamedQuery */
-	String query();
-	/** the flush mode for the query */
-	FlushModeType flushMode() default FlushModeType.AUTO;
-	/** mark the query as cacheable or not */
-	boolean cacheable() default false;
-	/** the cache region to use */
-	String cacheRegion() default "";
-	/** the number of rows fetched by the JDBC Driver per roundtrip */
-	int fetchSize() default -1;
-	/**the query timeout in seconds*/
-	int timeout() default -1;
-	/**comment added to the SQL query, useful for the DBA */
-	String comment() default "";
-	/**the cache mode used for this query*/
-	CacheModeType cacheMode() default CacheModeType.NORMAL;
-	/**marks whether the results are fetched in read-only mode or not*/
-	boolean readOnly() default false;
-
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/NamedQuery.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/NamedQuery.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/NamedQuery.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/NamedQuery.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,40 @@
+//$Id$
+package org.hibernate.annotations;
+
+import static java.lang.annotation.ElementType.PACKAGE;
+import static java.lang.annotation.ElementType.TYPE;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * Extends {@link javax.persistence.NamedQuery} with Hibernate features
+ *
+ * @author Carlos González-Cadenas
+ */
+ at Target({TYPE, PACKAGE})
+ at Retention(RUNTIME)
+public @interface NamedQuery {
+
+	/** the name of the NamedQuery */
+	String name();
+	/** the Query String for the NamedQuery */
+	String query();
+	/** the flush mode for the query */
+	FlushModeType flushMode() default FlushModeType.AUTO;
+	/** mark the query as cacheable or not */
+	boolean cacheable() default false;
+	/** the cache region to use */
+	String cacheRegion() default "";
+	/** the number of rows fetched by the JDBC Driver per roundtrip */
+	int fetchSize() default -1;
+	/**the query timeout in seconds*/
+	int timeout() default -1;
+	/**comment added to the SQL query, useful for the DBA */
+	String comment() default "";
+	/**the cache mode used for this query*/
+	CacheModeType cacheMode() default CacheModeType.NORMAL;
+	/**marks whether the results are fetched in read-only mode or not*/
+	boolean readOnly() default false;
+
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/NotFound.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/NotFound.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/NotFound.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,18 +0,0 @@
-package org.hibernate.annotations;
-
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.ElementType.METHOD;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * Action to do when an element is not found on a association whiel beeing expected
- *
- * @author Emmanuel Bernard
- */
- at Target({METHOD, FIELD})
- at Retention(RUNTIME)
-public @interface NotFound {
-	NotFoundAction action() default NotFoundAction.EXCEPTION;
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/NotFound.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/NotFound.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/NotFound.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/NotFound.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,18 @@
+package org.hibernate.annotations;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * Action to do when an element is not found on a association whiel beeing expected
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({METHOD, FIELD})
+ at Retention(RUNTIME)
+public @interface NotFound {
+	NotFoundAction action() default NotFoundAction.EXCEPTION;
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/NotFoundAction.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/NotFoundAction.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/NotFoundAction.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,17 +0,0 @@
-package org.hibernate.annotations;
-
-/**
- * Actoin to use when an element is not found in DB while beeing expected
- *
- * @author Emmanuel Bernard
- */
-public enum NotFoundAction {
-	/**
-	 * raise an exception when an element is not found (default and recommended)
-	 */
-	EXCEPTION,
-	/**
-	 * ignore the element when not found in DB
-	 */
-	IGNORE
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/NotFoundAction.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/NotFoundAction.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/NotFoundAction.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/NotFoundAction.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,17 @@
+package org.hibernate.annotations;
+
+/**
+ * Actoin to use when an element is not found in DB while beeing expected
+ *
+ * @author Emmanuel Bernard
+ */
+public enum NotFoundAction {
+	/**
+	 * raise an exception when an element is not found (default and recommended)
+	 */
+	EXCEPTION,
+	/**
+	 * ignore the element when not found in DB
+	 */
+	IGNORE
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/OnDelete.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/OnDelete.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/OnDelete.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,19 +0,0 @@
-package org.hibernate.annotations;
-
-import static java.lang.annotation.ElementType.*;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-
-/**
- * Strategy to use on collections, arrays and on joined subclasses delete
- * OnDelete of secondary tables currently not supported.
- *
- * @author Emmanuel Bernard
- */
- at Target({METHOD, FIELD, TYPE})
- at Retention(RUNTIME)
-public @interface OnDelete {
-	OnDeleteAction action();
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/OnDelete.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/OnDelete.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/OnDelete.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/OnDelete.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,19 @@
+package org.hibernate.annotations;
+
+import static java.lang.annotation.ElementType.*;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+
+/**
+ * Strategy to use on collections, arrays and on joined subclasses delete
+ * OnDelete of secondary tables currently not supported.
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({METHOD, FIELD, TYPE})
+ at Retention(RUNTIME)
+public @interface OnDelete {
+	OnDeleteAction action();
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/OnDeleteAction.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/OnDeleteAction.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/OnDeleteAction.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,17 +0,0 @@
-package org.hibernate.annotations;
-
-/**
- * Possible actions on deletes
- *
- * @author Emmanuel Bernard
- */
-public enum OnDeleteAction {
-	/**
-	 * the default
-	 */
-	NO_ACTION,
-	/**
-	 * use cascade delete capabilities of the DD
-	 */
-	CASCADE
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/OnDeleteAction.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/OnDeleteAction.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/OnDeleteAction.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/OnDeleteAction.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,17 @@
+package org.hibernate.annotations;
+
+/**
+ * Possible actions on deletes
+ *
+ * @author Emmanuel Bernard
+ */
+public enum OnDeleteAction {
+	/**
+	 * the default
+	 */
+	NO_ACTION,
+	/**
+	 * use cascade delete capabilities of the DD
+	 */
+	CASCADE
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/OptimisticLock.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/OptimisticLock.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/OptimisticLock.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,24 +0,0 @@
-//$Id: $
-package org.hibernate.annotations;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Whether or not update entity's version on property's change
- * If the annotation is not present, the property is involved in the optimistic lock srategy (default)
- *
- * @author Logi Ragnarsson
- */
- at Target( {ElementType.METHOD, ElementType.FIELD} )
- at Retention( RetentionPolicy.RUNTIME )
-public @interface OptimisticLock {
-
-	/**
-	 * If true, the annotated property change will not trigger a version upgrade
-	 */
-	boolean excluded();
-
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/OptimisticLock.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/OptimisticLock.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/OptimisticLock.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/OptimisticLock.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,24 @@
+//$Id: $
+package org.hibernate.annotations;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Whether or not update entity's version on property's change
+ * If the annotation is not present, the property is involved in the optimistic lock srategy (default)
+ *
+ * @author Logi Ragnarsson
+ */
+ at Target( {ElementType.METHOD, ElementType.FIELD} )
+ at Retention( RetentionPolicy.RUNTIME )
+public @interface OptimisticLock {
+
+	/**
+	 * If true, the annotated property change will not trigger a version upgrade
+	 */
+	boolean excluded();
+
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/OptimisticLockType.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/OptimisticLockType.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/OptimisticLockType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,27 +0,0 @@
-//$Id$
-package org.hibernate.annotations;
-
-/**
- * Optimistic locking strategy
- * VERSION is the default and recommanded one
- *
- * @author Emmanuel Bernard
- */
-public enum OptimisticLockType {
-	/**
-	 * no optimistic locking
-	 */
-	NONE,
-	/**
-	 * use a column version
-	 */
-	VERSION,
-	/**
-	 * dirty columns are compared
-	 */
-	DIRTY,
-	/**
-	 * all columns are compared
-	 */
-	ALL
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/OptimisticLockType.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/OptimisticLockType.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/OptimisticLockType.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/OptimisticLockType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,27 @@
+//$Id$
+package org.hibernate.annotations;
+
+/**
+ * Optimistic locking strategy
+ * VERSION is the default and recommanded one
+ *
+ * @author Emmanuel Bernard
+ */
+public enum OptimisticLockType {
+	/**
+	 * no optimistic locking
+	 */
+	NONE,
+	/**
+	 * use a column version
+	 */
+	VERSION,
+	/**
+	 * dirty columns are compared
+	 */
+	DIRTY,
+	/**
+	 * all columns are compared
+	 */
+	ALL
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/OrderBy.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/OrderBy.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/OrderBy.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,19 +0,0 @@
-package org.hibernate.annotations;
-
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.ElementType.METHOD;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * Order a collection using SQL ordering (not HQL ordering)
- *
- * @author Emmanuel Bernard
- */
- at Target({METHOD, FIELD})
- at Retention(RUNTIME)
-public @interface OrderBy {
-	/** SQL orderby clause */
-	String clause();
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/OrderBy.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/OrderBy.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/OrderBy.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/OrderBy.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,19 @@
+package org.hibernate.annotations;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * Order a collection using SQL ordering (not HQL ordering)
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({METHOD, FIELD})
+ at Retention(RUNTIME)
+public @interface OrderBy {
+	/** SQL orderby clause */
+	String clause();
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/ParamDef.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/ParamDef.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/ParamDef.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,19 +0,0 @@
-//$Id$
-package org.hibernate.annotations;
-
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * A parameter definition
- *
- * @author Emmanuel Bernard
- */
- at Target({})
- at Retention(RUNTIME)
-public @interface ParamDef {
-	String name();
-
-	String type();
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/ParamDef.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/ParamDef.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/ParamDef.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/ParamDef.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,19 @@
+//$Id$
+package org.hibernate.annotations;
+
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * A parameter definition
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({})
+ at Retention(RUNTIME)
+public @interface ParamDef {
+	String name();
+
+	String type();
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Parameter.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Parameter.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Parameter.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,19 +0,0 @@
-//$Id$
-package org.hibernate.annotations;
-
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * Parameter (basically key/value pattern)
- *
- * @author Emmanuel Bernard
- */
- at Target({})
- at Retention(RUNTIME)
-public @interface Parameter {
-	String name();
-
-	String value();
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Parameter.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Parameter.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Parameter.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Parameter.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,19 @@
+//$Id$
+package org.hibernate.annotations;
+
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * Parameter (basically key/value pattern)
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({})
+ at Retention(RUNTIME)
+public @interface Parameter {
+	String name();
+
+	String value();
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Parent.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Parent.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Parent.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,18 +0,0 @@
-//$Id: $
-package org.hibernate.annotations;
-
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.ElementType.METHOD;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * Reference the property as a pointer back to the owner (generally the owning entity)
- * 
- * @author Emmanuel Bernard
- */
- at Target({METHOD, FIELD})
- at Retention(RUNTIME)
-public @interface Parent {
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Parent.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Parent.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Parent.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Parent.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,18 @@
+//$Id: $
+package org.hibernate.annotations;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * Reference the property as a pointer back to the owner (generally the owning entity)
+ * 
+ * @author Emmanuel Bernard
+ */
+ at Target({METHOD, FIELD})
+ at Retention(RUNTIME)
+public @interface Parent {
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Persister.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Persister.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Persister.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,16 +0,0 @@
-//$Id: $
-package org.hibernate.annotations;
-
-import java.lang.annotation.*;
-
-/**
- * Specify a custom persister.
- *
- * @author Shawn Clowater
- */
- at java.lang.annotation.Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
- at Retention( RetentionPolicy.RUNTIME )
-public @interface Persister {
-	/** Custom persister */
-	Class impl();
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Persister.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Persister.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Persister.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Persister.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,16 @@
+//$Id: $
+package org.hibernate.annotations;
+
+import java.lang.annotation.*;
+
+/**
+ * Specify a custom persister.
+ *
+ * @author Shawn Clowater
+ */
+ at java.lang.annotation.Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
+ at Retention( RetentionPolicy.RUNTIME )
+public @interface Persister {
+	/** Custom persister */
+	Class impl();
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/PolymorphismType.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/PolymorphismType.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/PolymorphismType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,18 +0,0 @@
-//$Id$
-package org.hibernate.annotations;
-
-/**
- * Type of avaliable polymorphism for a particular entity
- *
- * @author Emmanuel Bernard
- */
-public enum PolymorphismType {
-	/**
-	 * default, this entity is retrieved if any of its super entity is asked
-	 */
-	IMPLICIT,
-	/**
-	 * this entity is retrived only if explicitly asked
-	 */
-	EXPLICIT
-}
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/PolymorphismType.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/PolymorphismType.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/PolymorphismType.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/PolymorphismType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,18 @@
+//$Id$
+package org.hibernate.annotations;
+
+/**
+ * Type of avaliable polymorphism for a particular entity
+ *
+ * @author Emmanuel Bernard
+ */
+public enum PolymorphismType {
+	/**
+	 * default, this entity is retrieved if any of its super entity is asked
+	 */
+	IMPLICIT,
+	/**
+	 * this entity is retrived only if explicitly asked
+	 */
+	EXPLICIT
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Proxy.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Proxy.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Proxy.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,26 +0,0 @@
-//$Id$
-package org.hibernate.annotations;
-
-import static java.lang.annotation.ElementType.TYPE;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * Lazy and proxy configuration of a particular class
- *
- * @author Emmanuel Bernard
- */
- at Target(TYPE)
- at Retention(RUNTIME)
-public @interface Proxy {
-	/**
-	 * Whether this class is lazy or not (default to true)
-	 */
-	boolean lazy() default true;
-
-	/**
-	 * Proxy class or interface used. Default entity class name.
-	 */
-	Class proxyClass() default void.class;
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Proxy.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Proxy.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Proxy.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Proxy.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,26 @@
+//$Id$
+package org.hibernate.annotations;
+
+import static java.lang.annotation.ElementType.TYPE;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * Lazy and proxy configuration of a particular class
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target(TYPE)
+ at Retention(RUNTIME)
+public @interface Proxy {
+	/**
+	 * Whether this class is lazy or not (default to true)
+	 */
+	boolean lazy() default true;
+
+	/**
+	 * Proxy class or interface used. Default entity class name.
+	 */
+	Class proxyClass() default void.class;
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/ResultCheckStyle.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/ResultCheckStyle.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/ResultCheckStyle.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,31 +0,0 @@
-//$Id:
-package org.hibernate.annotations;
-
-/**
- * Possible checks on Sql Insert, Delete, Update
- *
- * @author László Benke
- */
-public enum ResultCheckStyle {
-	/**
-	 * Do not perform checking.  Either user simply does not want checking, or is
-	 * indicating a {@link java.sql.CallableStatement} execution in which the
-	 * checks are being performed explicitly and failures are handled through
-	 * propogation of {@link java.sql.SQLException}s.
-	 */
-	NONE,
-	/**
-	 * Perform row-count checking.  Row counts are the int values returned by both
-	 * {@link java.sql.PreparedStatement#executeUpdate()} and
-	 * {@link java.sql.Statement#executeBatch()}.  These values are checked
-	 * against some expected count.
-	 */
-	COUNT,
-	/**
-	 * Essentially the same as {@link #COUNT} except that the row count actually
-	 * comes from an output parameter registered as part of a
-	 * {@link java.sql.CallableStatement}.  This style explicitly prohibits
-	 * statement batching from being used...
-	 */
-	PARAM
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/ResultCheckStyle.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/ResultCheckStyle.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/ResultCheckStyle.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/ResultCheckStyle.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,31 @@
+//$Id:
+package org.hibernate.annotations;
+
+/**
+ * Possible checks on Sql Insert, Delete, Update
+ *
+ * @author László Benke
+ */
+public enum ResultCheckStyle {
+	/**
+	 * Do not perform checking.  Either user simply does not want checking, or is
+	 * indicating a {@link java.sql.CallableStatement} execution in which the
+	 * checks are being performed explicitly and failures are handled through
+	 * propogation of {@link java.sql.SQLException}s.
+	 */
+	NONE,
+	/**
+	 * Perform row-count checking.  Row counts are the int values returned by both
+	 * {@link java.sql.PreparedStatement#executeUpdate()} and
+	 * {@link java.sql.Statement#executeBatch()}.  These values are checked
+	 * against some expected count.
+	 */
+	COUNT,
+	/**
+	 * Essentially the same as {@link #COUNT} except that the row count actually
+	 * comes from an output parameter registered as part of a
+	 * {@link java.sql.CallableStatement}.  This style explicitly prohibits
+	 * statement batching from being used...
+	 */
+	PARAM
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/SQLDelete.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/SQLDelete.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/SQLDelete.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,33 +0,0 @@
-//$Id:$
-package org.hibernate.annotations;
-
-import static java.lang.annotation.ElementType.TYPE;
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.ElementType.METHOD;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * SqlDelete Annotation for overwriting Hibernate default DELETE method
- *
- * @author László Benke
- */
- at Target( {TYPE, FIELD, METHOD} )
- at Retention( RUNTIME )
-public @interface SQLDelete {
-	/**
-	 * Procedure name or DELETE STATEMENT
-	 */
-	String sql();
-
-	/**
-	 * Is the statement using stored procedure or not
-	 */
-	boolean callable() default false;
-
-	/**
-	 * For persistence operation what style of determining results (success/failure) is to be used.
-	 */
-	ResultCheckStyle check() default ResultCheckStyle.NONE;
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/SQLDelete.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/SQLDelete.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/SQLDelete.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/SQLDelete.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,33 @@
+//$Id:$
+package org.hibernate.annotations;
+
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * SqlDelete Annotation for overwriting Hibernate default DELETE method
+ *
+ * @author László Benke
+ */
+ at Target( {TYPE, FIELD, METHOD} )
+ at Retention( RUNTIME )
+public @interface SQLDelete {
+	/**
+	 * Procedure name or DELETE STATEMENT
+	 */
+	String sql();
+
+	/**
+	 * Is the statement using stored procedure or not
+	 */
+	boolean callable() default false;
+
+	/**
+	 * For persistence operation what style of determining results (success/failure) is to be used.
+	 */
+	ResultCheckStyle check() default ResultCheckStyle.NONE;
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/SQLDeleteAll.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/SQLDeleteAll.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/SQLDeleteAll.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,34 +0,0 @@
-//$Id: $
-package org.hibernate.annotations;
-
-import java.lang.annotation.Target;
-import java.lang.annotation.Retention;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.RetentionPolicy;
-import static java.lang.annotation.ElementType.TYPE;
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.ElementType.METHOD;
-
-/**
- * SqlDelete Annotation for overwriting Hibernate default DELETE ALL method
- *
- * @author László Benke
- */
- at Target( {TYPE, FIELD, METHOD} )
- at Retention( RetentionPolicy.RUNTIME )
-public @interface SQLDeleteAll {
-	/**
-	 * Procedure name or DELETE STATEMENT
-	 */
-	String sql();
-
-	/**
-	 * Is the statement using stored procedure or not
-	 */
-	boolean callable() default false;
-
-	/**
-	 * For persistence operation what style of determining results (success/failure) is to be used.
-	 */
-	ResultCheckStyle check() default ResultCheckStyle.NONE;
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/SQLDeleteAll.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/SQLDeleteAll.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/SQLDeleteAll.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/SQLDeleteAll.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,34 @@
+//$Id: $
+package org.hibernate.annotations;
+
+import java.lang.annotation.Target;
+import java.lang.annotation.Retention;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.RetentionPolicy;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+
+/**
+ * SqlDelete Annotation for overwriting Hibernate default DELETE ALL method
+ *
+ * @author László Benke
+ */
+ at Target( {TYPE, FIELD, METHOD} )
+ at Retention( RetentionPolicy.RUNTIME )
+public @interface SQLDeleteAll {
+	/**
+	 * Procedure name or DELETE STATEMENT
+	 */
+	String sql();
+
+	/**
+	 * Is the statement using stored procedure or not
+	 */
+	boolean callable() default false;
+
+	/**
+	 * For persistence operation what style of determining results (success/failure) is to be used.
+	 */
+	ResultCheckStyle check() default ResultCheckStyle.NONE;
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/SQLInsert.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/SQLInsert.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/SQLInsert.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,33 +0,0 @@
-//$Id:$
-package org.hibernate.annotations;
-
-import static java.lang.annotation.ElementType.TYPE;
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.ElementType.METHOD;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * SqlInsert Annotation for overwriting Hibernate default INSERT INTO method
- *
- * @author László Benke
- */
- at Target( {TYPE, FIELD, METHOD} )
- at Retention( RUNTIME )
-public @interface SQLInsert {
-	/**
-	 * Procedure name or INSERT STATEMENT
-	 */
-	String sql();
-
-	/**
-	 * Is the statement using stored procedure or not
-	 */
-	boolean callable() default false;
-
-	/**
-	 * For persistence operation what style of determining results (success/failure) is to be used.
-	 */
-	ResultCheckStyle check() default ResultCheckStyle.NONE;
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/SQLInsert.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/SQLInsert.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/SQLInsert.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/SQLInsert.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,33 @@
+//$Id:$
+package org.hibernate.annotations;
+
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * SqlInsert Annotation for overwriting Hibernate default INSERT INTO method
+ *
+ * @author László Benke
+ */
+ at Target( {TYPE, FIELD, METHOD} )
+ at Retention( RUNTIME )
+public @interface SQLInsert {
+	/**
+	 * Procedure name or INSERT STATEMENT
+	 */
+	String sql();
+
+	/**
+	 * Is the statement using stored procedure or not
+	 */
+	boolean callable() default false;
+
+	/**
+	 * For persistence operation what style of determining results (success/failure) is to be used.
+	 */
+	ResultCheckStyle check() default ResultCheckStyle.NONE;
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/SQLUpdate.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/SQLUpdate.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/SQLUpdate.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,34 +0,0 @@
-//$Id:$
-package org.hibernate.annotations;
-
-import static java.lang.annotation.ElementType.TYPE;
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.ElementType.METHOD;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * SqlUpdate Annotation for overwriting Hibernate default UPDATE method
- *
- * @author László Benke
- */
- at Target( {TYPE, FIELD, METHOD} )
- at Retention( RUNTIME )
-public @interface SQLUpdate {
-
-	/**
-	 * Procedure name or UPDATE STATEMENT
-	 */
-	String sql();
-
-	/**
-	 * Is the statement using stored procedure or not
-	 */
-	boolean callable() default false;
-
-	/**
-	 * For persistence operation what style of determining results (success/failure) is to be used.
-	 */
-	ResultCheckStyle check() default ResultCheckStyle.NONE;
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/SQLUpdate.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/SQLUpdate.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/SQLUpdate.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/SQLUpdate.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,34 @@
+//$Id:$
+package org.hibernate.annotations;
+
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * SqlUpdate Annotation for overwriting Hibernate default UPDATE method
+ *
+ * @author László Benke
+ */
+ at Target( {TYPE, FIELD, METHOD} )
+ at Retention( RUNTIME )
+public @interface SQLUpdate {
+
+	/**
+	 * Procedure name or UPDATE STATEMENT
+	 */
+	String sql();
+
+	/**
+	 * Is the statement using stored procedure or not
+	 */
+	boolean callable() default false;
+
+	/**
+	 * For persistence operation what style of determining results (success/failure) is to be used.
+	 */
+	ResultCheckStyle check() default ResultCheckStyle.NONE;
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Sort.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Sort.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Sort.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,29 +0,0 @@
-//$Id$
-package org.hibernate.annotations;
-
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.ElementType.METHOD;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * Collection sort
- * (Java level sorting)
- *
- * @author Emmanuel Bernard
- */
- at Target({METHOD, FIELD})
- at Retention(RUNTIME)
-public @interface Sort {
-	/**
-	 * sort type
-	 */
-	SortType type() default SortType.UNSORTED;
-	/**
-	 * Sort comparator implementation
-	 */
-	//TODO find a way to use Class<Comparator>
-
-	Class comparator() default void.class;
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Sort.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Sort.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Sort.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Sort.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,29 @@
+//$Id$
+package org.hibernate.annotations;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * Collection sort
+ * (Java level sorting)
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({METHOD, FIELD})
+ at Retention(RUNTIME)
+public @interface Sort {
+	/**
+	 * sort type
+	 */
+	SortType type() default SortType.UNSORTED;
+	/**
+	 * Sort comparator implementation
+	 */
+	//TODO find a way to use Class<Comparator>
+
+	Class comparator() default void.class;
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/SortType.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/SortType.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/SortType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,13 +0,0 @@
-//$Id$
-package org.hibernate.annotations;
-
-/**
- * Sort strategies
- *
- * @author Emmanuel Bernard
- */
-public enum SortType {
-	UNSORTED,
-	NATURAL,
-	COMPARATOR
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/SortType.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/SortType.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/SortType.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/SortType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,13 @@
+//$Id$
+package org.hibernate.annotations;
+
+/**
+ * Sort strategies
+ *
+ * @author Emmanuel Bernard
+ */
+public enum SortType {
+	UNSORTED,
+	NATURAL,
+	COMPARATOR
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Table.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Table.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Table.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,86 +0,0 @@
-//$Id$
-package org.hibernate.annotations;
-
-import static java.lang.annotation.ElementType.TYPE;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * Complementary information to a table either primary or secondary
- *
- * @author Emmanuel Bernard
- */
- at Target({TYPE})
- at Retention(RUNTIME)
-public @interface Table {
-	/**
-	 * name of the targeted table
-	 */
-	String appliesTo();
-
-	/**
-	 * Indexes
-	 */
-	Index[] indexes() default {};
-
-	/**
-	 * define a table comment
-	 */
-	String comment() default "";
-
-	/**
-	 * Defines the Foreign Key name of a secondary table
-	 * pointing back to the primary table
-	 */
-	ForeignKey foreignKey() default @ForeignKey( name="" );
-
-	/**
-	 * If set to JOIN, the default, Hibernate will use an inner join to retrieve a
-	 * secondary table defined by a class or its superclasses and an outer join for a
-	 * secondary table defined by a subclass.
-	 * If set to select then Hibernate will use a
-	 * sequential select for a secondary table defined on a subclass, which will be issued only if a row
-	 * turns out to represent an instance of the subclass. Inner joins will still be used to retrieve a
-	 * secondary defined by the class and its superclasses.
-	 *
-	 * <b>Only applies to secondary tables</b>
-	 */
-	FetchMode fetch() default FetchMode.JOIN;
-
-	/**
-	 * If true, Hibernate will not try to insert or update the properties defined by this join.
-	 *
-	 * <b>Only applies to secondary tables</b>
-	 */
-	boolean inverse() default false;
-
-	/**
-	 * If enabled, Hibernate will insert a row only if the properties defined by this join are non-null
-	 * and will always use an outer join to retrieve the properties.
-	 *
-	 * <b>Only applies to secondary tables</b>
-	 */
-	boolean optional() default true;
-
-	/**
-	 * Defines a custom SQL insert statement
-	 *
-	 * <b>Only applies to secondary tables</b>
-	 */
-	SQLInsert sqlInsert() default @SQLInsert(sql="");
-
-	/**
-	 * Defines a custom SQL update statement
-	 *
-	 * <b>Only applies to secondary tables</b>
-	 */
-	SQLUpdate sqlUpdate() default @SQLUpdate(sql="");
-
-	/**
-	 * Defines a custom SQL delete statement
-	 *
-	 * <b>Only applies to secondary tables</b>
-	 */
-	SQLDelete sqlDelete() default @SQLDelete(sql="");
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Table.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Table.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Table.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Table.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,86 @@
+//$Id$
+package org.hibernate.annotations;
+
+import static java.lang.annotation.ElementType.TYPE;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * Complementary information to a table either primary or secondary
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({TYPE})
+ at Retention(RUNTIME)
+public @interface Table {
+	/**
+	 * name of the targeted table
+	 */
+	String appliesTo();
+
+	/**
+	 * Indexes
+	 */
+	Index[] indexes() default {};
+
+	/**
+	 * define a table comment
+	 */
+	String comment() default "";
+
+	/**
+	 * Defines the Foreign Key name of a secondary table
+	 * pointing back to the primary table
+	 */
+	ForeignKey foreignKey() default @ForeignKey( name="" );
+
+	/**
+	 * If set to JOIN, the default, Hibernate will use an inner join to retrieve a
+	 * secondary table defined by a class or its superclasses and an outer join for a
+	 * secondary table defined by a subclass.
+	 * If set to select then Hibernate will use a
+	 * sequential select for a secondary table defined on a subclass, which will be issued only if a row
+	 * turns out to represent an instance of the subclass. Inner joins will still be used to retrieve a
+	 * secondary defined by the class and its superclasses.
+	 *
+	 * <b>Only applies to secondary tables</b>
+	 */
+	FetchMode fetch() default FetchMode.JOIN;
+
+	/**
+	 * If true, Hibernate will not try to insert or update the properties defined by this join.
+	 *
+	 * <b>Only applies to secondary tables</b>
+	 */
+	boolean inverse() default false;
+
+	/**
+	 * If enabled, Hibernate will insert a row only if the properties defined by this join are non-null
+	 * and will always use an outer join to retrieve the properties.
+	 *
+	 * <b>Only applies to secondary tables</b>
+	 */
+	boolean optional() default true;
+
+	/**
+	 * Defines a custom SQL insert statement
+	 *
+	 * <b>Only applies to secondary tables</b>
+	 */
+	SQLInsert sqlInsert() default @SQLInsert(sql="");
+
+	/**
+	 * Defines a custom SQL update statement
+	 *
+	 * <b>Only applies to secondary tables</b>
+	 */
+	SQLUpdate sqlUpdate() default @SQLUpdate(sql="");
+
+	/**
+	 * Defines a custom SQL delete statement
+	 *
+	 * <b>Only applies to secondary tables</b>
+	 */
+	SQLDelete sqlDelete() default @SQLDelete(sql="");
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Tables.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Tables.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Tables.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,18 +0,0 @@
-package org.hibernate.annotations;
-
-import static java.lang.annotation.ElementType.TYPE;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * Plural of Table
- *
- * @author Emmanuel Bernard
- * @see Table
- */
- at Target({TYPE})
- at Retention(RUNTIME)
-public @interface Tables {
-	Table[] value();
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Tables.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Tables.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Tables.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Tables.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,18 @@
+package org.hibernate.annotations;
+
+import static java.lang.annotation.ElementType.TYPE;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * Plural of Table
+ *
+ * @author Emmanuel Bernard
+ * @see Table
+ */
+ at Target({TYPE})
+ at Retention(RUNTIME)
+public @interface Tables {
+	Table[] value();
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Target.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Target.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Target.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,17 +0,0 @@
-//$Id: $
-package org.hibernate.annotations;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * Define an explicit target,a voiding reflection and generics resolving
- *
- * @author Emmanuel Bernard
- */
- at java.lang.annotation.Target({ElementType.FIELD, ElementType.METHOD})
- at Retention( RetentionPolicy.RUNTIME )
-public @interface Target {
-	Class value();
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Target.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Target.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Target.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Target.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,17 @@
+//$Id: $
+package org.hibernate.annotations;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * Define an explicit target,a voiding reflection and generics resolving
+ *
+ * @author Emmanuel Bernard
+ */
+ at java.lang.annotation.Target({ElementType.FIELD, ElementType.METHOD})
+ at Retention( RetentionPolicy.RUNTIME )
+public @interface Target {
+	Class value();
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Tuplizer.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Tuplizer.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Tuplizer.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,21 +0,0 @@
-//$Id: $
-package org.hibernate.annotations;
-
-import java.lang.annotation.*;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import static java.lang.annotation.ElementType.TYPE;
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.ElementType.METHOD;
-
-/**
- * Define a tuplizer for an entity or a component
- * @author Emmanuel Bernard
- */
- at java.lang.annotation.Target( {TYPE, FIELD, METHOD} )
- at Retention( RUNTIME )
-public @interface Tuplizer {
-	/** tuplizer implementation */
-	Class impl();
-	/** either pojo, dynamic-map or dom4j÷ */
-	String entityMode() default "pojo";
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Tuplizer.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Tuplizer.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Tuplizer.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Tuplizer.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,21 @@
+//$Id: $
+package org.hibernate.annotations;
+
+import java.lang.annotation.*;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+
+/**
+ * Define a tuplizer for an entity or a component
+ * @author Emmanuel Bernard
+ */
+ at java.lang.annotation.Target( {TYPE, FIELD, METHOD} )
+ at Retention( RUNTIME )
+public @interface Tuplizer {
+	/** tuplizer implementation */
+	Class impl();
+	/** either pojo, dynamic-map or dom4j÷ */
+	String entityMode() default "pojo";
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Tuplizers.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Tuplizers.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Tuplizers.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,16 +0,0 @@
-//$Id: $
-package org.hibernate.annotations;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * Define a set of tuplizer for an entity or a component
- * @author Emmanuel Bernard
- */
- at java.lang.annotation.Target( {ElementType.TYPE, ElementType.FIELD, ElementType.METHOD} )
- at Retention( RetentionPolicy.RUNTIME )
-public @interface Tuplizers {
-	Tuplizer[] value();
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Tuplizers.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Tuplizers.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Tuplizers.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Tuplizers.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,16 @@
+//$Id: $
+package org.hibernate.annotations;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * Define a set of tuplizer for an entity or a component
+ * @author Emmanuel Bernard
+ */
+ at java.lang.annotation.Target( {ElementType.TYPE, ElementType.FIELD, ElementType.METHOD} )
+ at Retention( RetentionPolicy.RUNTIME )
+public @interface Tuplizers {
+	Tuplizer[] value();
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Type.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Type.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Type.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,21 +0,0 @@
-//$Id$
-package org.hibernate.annotations;
-
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.ElementType.METHOD;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * hibernate type
- *
- * @author Emmanuel Bernard
- */
- at Target({FIELD, METHOD})
- at Retention(RUNTIME)
-public @interface Type {
-	String type();
-
-	Parameter[] parameters() default {};
-}
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Type.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Type.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Type.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Type.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,21 @@
+//$Id$
+package org.hibernate.annotations;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * hibernate type
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({FIELD, METHOD})
+ at Retention(RUNTIME)
+public @interface Type {
+	String type();
+
+	Parameter[] parameters() default {};
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/TypeDef.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/TypeDef.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/TypeDef.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,23 +0,0 @@
-//$Id$
-package org.hibernate.annotations;
-
-import static java.lang.annotation.ElementType.PACKAGE;
-import static java.lang.annotation.ElementType.TYPE;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * Type definition
- *
- * @author Emmanuel Bernard
- */
- at Target({TYPE, PACKAGE})
- at Retention(RUNTIME)
-public @interface TypeDef {
-	String name();
-
-	Class typeClass();
-
-	Parameter[] parameters() default {};
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/TypeDef.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/TypeDef.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/TypeDef.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/TypeDef.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,23 @@
+//$Id$
+package org.hibernate.annotations;
+
+import static java.lang.annotation.ElementType.PACKAGE;
+import static java.lang.annotation.ElementType.TYPE;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * Type definition
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({TYPE, PACKAGE})
+ at Retention(RUNTIME)
+public @interface TypeDef {
+	String name();
+
+	Class typeClass();
+
+	Parameter[] parameters() default {};
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/TypeDefs.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/TypeDefs.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/TypeDefs.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,19 +0,0 @@
-//$Id$
-package org.hibernate.annotations;
-
-import static java.lang.annotation.ElementType.PACKAGE;
-import static java.lang.annotation.ElementType.TYPE;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * Type definition array
- *
- * @author Emmanuel Bernard
- */
- at Target({TYPE, PACKAGE})
- at Retention(RUNTIME)
-public @interface TypeDefs {
-	TypeDef[] value();
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/TypeDefs.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/TypeDefs.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/TypeDefs.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/TypeDefs.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,19 @@
+//$Id$
+package org.hibernate.annotations;
+
+import static java.lang.annotation.ElementType.PACKAGE;
+import static java.lang.annotation.ElementType.TYPE;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * Type definition array
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({TYPE, PACKAGE})
+ at Retention(RUNTIME)
+public @interface TypeDefs {
+	TypeDef[] value();
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Where.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Where.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Where.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,17 +0,0 @@
-package org.hibernate.annotations;
-
-import static java.lang.annotation.ElementType.*;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * Where clause to add to the element Entity or target entity of a collection
- *
- * @author Emmanuel Bernard
- */
- at Target({TYPE, METHOD, FIELD})
- at Retention(RUNTIME)
-public @interface Where {
-	String clause();
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Where.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/Where.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Where.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/Where.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,17 @@
+package org.hibernate.annotations;
+
+import static java.lang.annotation.ElementType.*;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * Where clause to add to the element Entity or target entity of a collection
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({TYPE, METHOD, FIELD})
+ at Retention(RUNTIME)
+public @interface Where {
+	String clause();
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/WhereJoinTable.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/WhereJoinTable.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/WhereJoinTable.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,18 +0,0 @@
-//$Id: $
-package org.hibernate.annotations;
-
-import java.lang.annotation.Target;
-import java.lang.annotation.Retention;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * Where clause to add to the colleciton join table
- *
- * @author Emmanuel Bernard
- */
- at Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
- at Retention(RetentionPolicy.RUNTIME)
-public @interface WhereJoinTable {
-	String clause();
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/WhereJoinTable.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/annotations/WhereJoinTable.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/WhereJoinTable.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/annotations/WhereJoinTable.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,18 @@
+//$Id: $
+package org.hibernate.annotations;
+
+import java.lang.annotation.Target;
+import java.lang.annotation.Retention;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * Where clause to add to the colleciton join table
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
+ at Retention(RetentionPolicy.RUNTIME)
+public @interface WhereJoinTable {
+	String clause();
+}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg)

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/AbstractPropertyHolder.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/AbstractPropertyHolder.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/AbstractPropertyHolder.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,188 +0,0 @@
-//$Id$
-package org.hibernate.cfg;
-
-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 org.hibernate.AssertionFailure;
-import org.hibernate.annotations.common.reflection.XAnnotatedElement;
-import org.hibernate.annotations.common.reflection.XClass;
-import org.hibernate.annotations.common.reflection.XProperty;
-import org.hibernate.util.StringHelper;
-
-/**
- * @author Emmanuel Bernard
- */
-public abstract class AbstractPropertyHolder implements PropertyHolder {
-	protected PropertyHolder parent;
-	private Map<String, Column[]> holderColumnOverride;
-	private Map<String, Column[]> currentPropertyColumnOverride;
-	private Map<String, JoinColumn[]> holderJoinColumnOverride;
-	private Map<String, JoinColumn[]> currentPropertyJoinColumnOverride;
-	private String path;
-	private ExtendedMappings mappings;
-
-	public AbstractPropertyHolder(
-			String path, PropertyHolder parent, XClass clazzToProcess, ExtendedMappings mappings
-	) {
-		this.path = path;
-		this.parent = parent;
-		this.mappings = mappings;
-		buildHierarchyColumnOverride( clazzToProcess );
-	}
-
-	public String getPath() {
-		return path;
-	}
-
-	/**
-	 * property can be null
-	 */
-	protected void setCurrentProperty(XProperty property) {
-		if ( property == null ) {
-			this.currentPropertyColumnOverride = null;
-			this.currentPropertyJoinColumnOverride = null;
-		}
-		else {
-			this.currentPropertyColumnOverride = buildColumnOverride(
-					property,
-					getPath()
-			);
-			if ( this.currentPropertyColumnOverride.size() == 0 ) {
-				this.currentPropertyColumnOverride = null;
-			}
-			this.currentPropertyJoinColumnOverride = buildJoinColumnOverride(
-					property,
-					getPath()
-			);
-			if ( this.currentPropertyJoinColumnOverride.size() == 0 ) {
-				this.currentPropertyJoinColumnOverride = null;
-			}
-		}
-	}
-
-	/**
-	 * Get column overriding, property first, then parent, then holder
-	 */
-	public Column[] getOverriddenColumn(String propertyName) {
-		Column[] override = null;
-		if ( parent != null ) {
-			override = parent.getOverriddenColumn( propertyName );
-		}
-		if ( override == null && currentPropertyColumnOverride != null ) {
-			override = currentPropertyColumnOverride.get( propertyName );
-		}
-		if ( override == null && holderColumnOverride != null ) {
-			override = holderColumnOverride.get( propertyName );
-		}
-		return override;
-	}
-
-	/**
-	 * Get column overriding, property first, then parent, then holder
-	 */
-	public JoinColumn[] getOverriddenJoinColumn(String propertyName) {
-		JoinColumn[] override = null;
-		if ( parent != null ) {
-			override = parent.getOverriddenJoinColumn( propertyName );
-		}
-		if ( override == null && currentPropertyJoinColumnOverride != null ) {
-			override = currentPropertyJoinColumnOverride.get( propertyName );
-		}
-		if ( override == null && holderJoinColumnOverride != null ) {
-			override = holderJoinColumnOverride.get( propertyName );
-		}
-		return override;
-	}
-
-	private void buildHierarchyColumnOverride(XClass element) {
-		XClass current = element;
-		Map<String, Column[]> columnOverride = new HashMap<String, Column[]>();
-		Map<String, JoinColumn[]> joinColumnOverride = new HashMap<String, JoinColumn[]>();
-		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?
-				Map<String, Column[]> currentOverride = buildColumnOverride( current, getPath() );
-				Map<String, JoinColumn[]> currentJoinOverride = buildJoinColumnOverride( current, getPath() );
-				currentOverride.putAll( columnOverride ); //subclasses have precedence over superclasses
-				currentJoinOverride.putAll( joinColumnOverride ); //subclasses have precedence over superclasses
-				columnOverride = currentOverride;
-				joinColumnOverride = currentJoinOverride;
-			}
-			current = current.getSuperclass();
-		}
-
-		holderColumnOverride = columnOverride.size() > 0 ? columnOverride : null;
-		holderJoinColumnOverride = joinColumnOverride.size() > 0 ? joinColumnOverride : null;
-	}
-
-	private static Map<String, Column[]> buildColumnOverride(XAnnotatedElement element, String path) {
-		Map<String, Column[]> columnOverride = new HashMap<String, Column[]>();
-		if ( element == null ) return columnOverride;
-		AttributeOverride singleOverride = element.getAnnotation( AttributeOverride.class );
-		AttributeOverrides multipleOverrides = element.getAnnotation( AttributeOverrides.class );
-		AttributeOverride[] overrides;
-		if ( singleOverride != null ) {
-			overrides = new AttributeOverride[]{singleOverride};
-		}
-		else if ( multipleOverrides != null ) {
-			overrides = multipleOverrides.value();
-		}
-		else {
-			overrides = null;
-		}
-
-		//fill overriden columns
-		if ( overrides != null ) {
-			for ( AttributeOverride depAttr : overrides ) {
-				columnOverride.put(
-						StringHelper.qualify( path, depAttr.name() ),
-						new Column[]{depAttr.column()}
-				);
-			}
-		}
-		return columnOverride;
-	}
-
-	private static Map<String, JoinColumn[]> buildJoinColumnOverride(XAnnotatedElement element, String path) {
-		Map<String, JoinColumn[]> columnOverride = new HashMap<String, JoinColumn[]>();
-		if ( element == null ) return columnOverride;
-		AssociationOverride singleOverride = element.getAnnotation( AssociationOverride.class );
-		AssociationOverrides multipleOverrides = element.getAnnotation( AssociationOverrides.class );
-		AssociationOverride[] overrides;
-		if ( singleOverride != null ) {
-			overrides = new AssociationOverride[]{singleOverride};
-		}
-		else if ( multipleOverrides != null ) {
-			overrides = multipleOverrides.value();
-		}
-		else {
-			overrides = null;
-		}
-
-		//fill overriden columns
-		if ( overrides != null ) {
-			for ( AssociationOverride depAttr : overrides ) {
-				columnOverride.put(
-						StringHelper.qualify( path, depAttr.name() ),
-						depAttr.joinColumns()
-				);
-			}
-		}
-		return columnOverride;
-	}
-
-	public void setParentProperty(String parentProperty) {
-		throw new AssertionFailure( "Setting the parent property to a non component" );
-	}
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/AbstractPropertyHolder.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/AbstractPropertyHolder.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/AbstractPropertyHolder.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/AbstractPropertyHolder.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,188 @@
+//$Id$
+package org.hibernate.cfg;
+
+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 org.hibernate.AssertionFailure;
+import org.hibernate.annotations.common.reflection.XAnnotatedElement;
+import org.hibernate.annotations.common.reflection.XClass;
+import org.hibernate.annotations.common.reflection.XProperty;
+import org.hibernate.util.StringHelper;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public abstract class AbstractPropertyHolder implements PropertyHolder {
+	protected PropertyHolder parent;
+	private Map<String, Column[]> holderColumnOverride;
+	private Map<String, Column[]> currentPropertyColumnOverride;
+	private Map<String, JoinColumn[]> holderJoinColumnOverride;
+	private Map<String, JoinColumn[]> currentPropertyJoinColumnOverride;
+	private String path;
+	private ExtendedMappings mappings;
+
+	public AbstractPropertyHolder(
+			String path, PropertyHolder parent, XClass clazzToProcess, ExtendedMappings mappings
+	) {
+		this.path = path;
+		this.parent = parent;
+		this.mappings = mappings;
+		buildHierarchyColumnOverride( clazzToProcess );
+	}
+
+	public String getPath() {
+		return path;
+	}
+
+	/**
+	 * property can be null
+	 */
+	protected void setCurrentProperty(XProperty property) {
+		if ( property == null ) {
+			this.currentPropertyColumnOverride = null;
+			this.currentPropertyJoinColumnOverride = null;
+		}
+		else {
+			this.currentPropertyColumnOverride = buildColumnOverride(
+					property,
+					getPath()
+			);
+			if ( this.currentPropertyColumnOverride.size() == 0 ) {
+				this.currentPropertyColumnOverride = null;
+			}
+			this.currentPropertyJoinColumnOverride = buildJoinColumnOverride(
+					property,
+					getPath()
+			);
+			if ( this.currentPropertyJoinColumnOverride.size() == 0 ) {
+				this.currentPropertyJoinColumnOverride = null;
+			}
+		}
+	}
+
+	/**
+	 * Get column overriding, property first, then parent, then holder
+	 */
+	public Column[] getOverriddenColumn(String propertyName) {
+		Column[] override = null;
+		if ( parent != null ) {
+			override = parent.getOverriddenColumn( propertyName );
+		}
+		if ( override == null && currentPropertyColumnOverride != null ) {
+			override = currentPropertyColumnOverride.get( propertyName );
+		}
+		if ( override == null && holderColumnOverride != null ) {
+			override = holderColumnOverride.get( propertyName );
+		}
+		return override;
+	}
+
+	/**
+	 * Get column overriding, property first, then parent, then holder
+	 */
+	public JoinColumn[] getOverriddenJoinColumn(String propertyName) {
+		JoinColumn[] override = null;
+		if ( parent != null ) {
+			override = parent.getOverriddenJoinColumn( propertyName );
+		}
+		if ( override == null && currentPropertyJoinColumnOverride != null ) {
+			override = currentPropertyJoinColumnOverride.get( propertyName );
+		}
+		if ( override == null && holderJoinColumnOverride != null ) {
+			override = holderJoinColumnOverride.get( propertyName );
+		}
+		return override;
+	}
+
+	private void buildHierarchyColumnOverride(XClass element) {
+		XClass current = element;
+		Map<String, Column[]> columnOverride = new HashMap<String, Column[]>();
+		Map<String, JoinColumn[]> joinColumnOverride = new HashMap<String, JoinColumn[]>();
+		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?
+				Map<String, Column[]> currentOverride = buildColumnOverride( current, getPath() );
+				Map<String, JoinColumn[]> currentJoinOverride = buildJoinColumnOverride( current, getPath() );
+				currentOverride.putAll( columnOverride ); //subclasses have precedence over superclasses
+				currentJoinOverride.putAll( joinColumnOverride ); //subclasses have precedence over superclasses
+				columnOverride = currentOverride;
+				joinColumnOverride = currentJoinOverride;
+			}
+			current = current.getSuperclass();
+		}
+
+		holderColumnOverride = columnOverride.size() > 0 ? columnOverride : null;
+		holderJoinColumnOverride = joinColumnOverride.size() > 0 ? joinColumnOverride : null;
+	}
+
+	private static Map<String, Column[]> buildColumnOverride(XAnnotatedElement element, String path) {
+		Map<String, Column[]> columnOverride = new HashMap<String, Column[]>();
+		if ( element == null ) return columnOverride;
+		AttributeOverride singleOverride = element.getAnnotation( AttributeOverride.class );
+		AttributeOverrides multipleOverrides = element.getAnnotation( AttributeOverrides.class );
+		AttributeOverride[] overrides;
+		if ( singleOverride != null ) {
+			overrides = new AttributeOverride[]{singleOverride};
+		}
+		else if ( multipleOverrides != null ) {
+			overrides = multipleOverrides.value();
+		}
+		else {
+			overrides = null;
+		}
+
+		//fill overriden columns
+		if ( overrides != null ) {
+			for ( AttributeOverride depAttr : overrides ) {
+				columnOverride.put(
+						StringHelper.qualify( path, depAttr.name() ),
+						new Column[]{depAttr.column()}
+				);
+			}
+		}
+		return columnOverride;
+	}
+
+	private static Map<String, JoinColumn[]> buildJoinColumnOverride(XAnnotatedElement element, String path) {
+		Map<String, JoinColumn[]> columnOverride = new HashMap<String, JoinColumn[]>();
+		if ( element == null ) return columnOverride;
+		AssociationOverride singleOverride = element.getAnnotation( AssociationOverride.class );
+		AssociationOverrides multipleOverrides = element.getAnnotation( AssociationOverrides.class );
+		AssociationOverride[] overrides;
+		if ( singleOverride != null ) {
+			overrides = new AssociationOverride[]{singleOverride};
+		}
+		else if ( multipleOverrides != null ) {
+			overrides = multipleOverrides.value();
+		}
+		else {
+			overrides = null;
+		}
+
+		//fill overriden columns
+		if ( overrides != null ) {
+			for ( AssociationOverride depAttr : overrides ) {
+				columnOverride.put(
+						StringHelper.qualify( path, depAttr.name() ),
+						depAttr.joinColumns()
+				);
+			}
+		}
+		return columnOverride;
+	}
+
+	public void setParentProperty(String parentProperty) {
+		throw new AssertionFailure( "Setting the parent property to a non component" );
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/AnnotatedClassType.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/AnnotatedClassType.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/AnnotatedClassType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,25 +0,0 @@
-package org.hibernate.cfg;
-
-/**
- * Type of annotation of a class will give its type
- *
- * @author Emmanuel Bernard
- */
-public enum AnnotatedClassType {
-	/**
-	 * has no revelent top level annotation
-	 */
-	NONE,
-	/**
-	 * has @Entity annotation
-	 */
-	ENTITY,
-	/**
-	 * has a @Embeddable annotation
-	 */
-	EMBEDDABLE,
-	/**
-	 * has @EmbeddedSuperclass annotation
-	 */
-	EMBEDDABLE_SUPERCLASS
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/AnnotatedClassType.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/AnnotatedClassType.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/AnnotatedClassType.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/AnnotatedClassType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,25 @@
+package org.hibernate.cfg;
+
+/**
+ * Type of annotation of a class will give its type
+ *
+ * @author Emmanuel Bernard
+ */
+public enum AnnotatedClassType {
+	/**
+	 * has no revelent top level annotation
+	 */
+	NONE,
+	/**
+	 * has @Entity annotation
+	 */
+	ENTITY,
+	/**
+	 * has a @Embeddable annotation
+	 */
+	EMBEDDABLE,
+	/**
+	 * has @EmbeddedSuperclass annotation
+	 */
+	EMBEDDABLE_SUPERCLASS
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/AnnotationBinder.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/AnnotationBinder.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/AnnotationBinder.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,2172 +0,0 @@
-//$Id$
-package org.hibernate.cfg;
-
-import java.util.ArrayList;
-import java.util.EnumSet;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-import java.util.Collections;
-import java.util.Comparator;
-import javax.persistence.Basic;
-import javax.persistence.Column;
-import javax.persistence.DiscriminatorType;
-import javax.persistence.DiscriminatorValue;
-import javax.persistence.Embeddable;
-import javax.persistence.Embedded;
-import javax.persistence.EmbeddedId;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.IdClass;
-import javax.persistence.InheritanceType;
-import javax.persistence.JoinColumn;
-import javax.persistence.JoinColumns;
-import javax.persistence.JoinTable;
-import javax.persistence.ManyToMany;
-import javax.persistence.ManyToOne;
-import javax.persistence.MapKey;
-import javax.persistence.MappedSuperclass;
-import javax.persistence.NamedNativeQueries;
-import javax.persistence.NamedNativeQuery;
-import javax.persistence.NamedQueries;
-import javax.persistence.NamedQuery;
-import javax.persistence.OneToMany;
-import javax.persistence.OneToOne;
-import javax.persistence.PrimaryKeyJoinColumn;
-import javax.persistence.PrimaryKeyJoinColumns;
-import javax.persistence.SequenceGenerator;
-import javax.persistence.SqlResultSetMapping;
-import javax.persistence.SqlResultSetMappings;
-import javax.persistence.Table;
-import javax.persistence.TableGenerator;
-import javax.persistence.Transient;
-import javax.persistence.Version;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.hibernate.AnnotationException;
-import org.hibernate.AssertionFailure;
-import org.hibernate.FetchMode;
-import org.hibernate.MappingException;
-import org.hibernate.EntityMode;
-import org.hibernate.annotations.AccessType;
-import org.hibernate.annotations.BatchSize;
-import org.hibernate.annotations.Cache;
-import org.hibernate.annotations.Cascade;
-import org.hibernate.annotations.CascadeType;
-import org.hibernate.annotations.Check;
-import org.hibernate.annotations.CollectionId;
-import org.hibernate.annotations.CollectionOfElements;
-import org.hibernate.annotations.Columns;
-import org.hibernate.annotations.Fetch;
-import org.hibernate.annotations.Filter;
-import org.hibernate.annotations.FilterDef;
-import org.hibernate.annotations.FilterDefs;
-import org.hibernate.annotations.Filters;
-import org.hibernate.annotations.ForeignKey;
-import org.hibernate.annotations.Formula;
-import org.hibernate.annotations.GenericGenerator;
-import org.hibernate.annotations.LazyToOne;
-import org.hibernate.annotations.LazyToOneOption;
-import org.hibernate.annotations.MapKeyManyToMany;
-import org.hibernate.annotations.NotFound;
-import org.hibernate.annotations.NotFoundAction;
-import org.hibernate.annotations.OnDelete;
-import org.hibernate.annotations.OnDeleteAction;
-import org.hibernate.annotations.OrderBy;
-import org.hibernate.annotations.ParamDef;
-import org.hibernate.annotations.Parameter;
-import org.hibernate.annotations.Parent;
-import org.hibernate.annotations.Proxy;
-import org.hibernate.annotations.Sort;
-import org.hibernate.annotations.Type;
-import org.hibernate.annotations.TypeDef;
-import org.hibernate.annotations.TypeDefs;
-import org.hibernate.annotations.Where;
-import org.hibernate.annotations.Index;
-import org.hibernate.annotations.Target;
-import org.hibernate.annotations.Tuplizers;
-import org.hibernate.annotations.Tuplizer;
-import org.hibernate.cfg.annotations.CollectionBinder;
-import org.hibernate.cfg.annotations.EntityBinder;
-import org.hibernate.cfg.annotations.Nullability;
-import org.hibernate.cfg.annotations.PropertyBinder;
-import org.hibernate.cfg.annotations.QueryBinder;
-import org.hibernate.cfg.annotations.SimpleValueBinder;
-import org.hibernate.cfg.annotations.TableBinder;
-import org.hibernate.engine.FilterDefinition;
-import org.hibernate.engine.Versioning;
-import org.hibernate.id.MultipleHiLoPerTableGenerator;
-import org.hibernate.id.PersistentIdentifierGenerator;
-import org.hibernate.id.SequenceHiLoGenerator;
-import org.hibernate.id.TableHiLoGenerator;
-import org.hibernate.mapping.Component;
-import org.hibernate.mapping.DependantValue;
-import org.hibernate.mapping.IdGenerator;
-import org.hibernate.mapping.Join;
-import org.hibernate.mapping.JoinedSubclass;
-import org.hibernate.mapping.PersistentClass;
-import org.hibernate.mapping.Property;
-import org.hibernate.mapping.RootClass;
-import org.hibernate.mapping.SimpleValue;
-import org.hibernate.mapping.SingleTableSubclass;
-import org.hibernate.mapping.Subclass;
-import org.hibernate.mapping.ToOne;
-import org.hibernate.mapping.UnionSubclass;
-import org.hibernate.persister.entity.JoinedSubclassEntityPersister;
-import org.hibernate.persister.entity.SingleTableEntityPersister;
-import org.hibernate.persister.entity.UnionSubclassEntityPersister;
-import org.hibernate.annotations.common.reflection.ReflectionManager;
-import org.hibernate.annotations.common.reflection.XAnnotatedElement;
-import org.hibernate.annotations.common.reflection.XClass;
-import org.hibernate.annotations.common.reflection.XPackage;
-import org.hibernate.annotations.common.reflection.XProperty;
-import org.hibernate.type.TypeFactory;
-import org.hibernate.util.StringHelper;
-
-/**
- * JSR 175 annotation binder
- * Will read the annotation from classes, apply the
- * principles of the EJB3 spec and produces the Hibernate
- * configuration-time metamodel (the classes in the <tt>mapping</tt>
- * package)
- *
- * @author Emmanuel Bernard
- */
-public final class AnnotationBinder {
-
-	/*
-	 * Some design description
-	 * I tried to remove any link to annotation except from the 2 first level of
-	 * method call.
-	 * It'll enable to:
-	 *   - facilitate annotation overriding
-	 *   - mutualize one day xml and annotation binder (probably a dream though)
-	 *   - split this huge class in smaller mapping oriented classes
-	 *
-	 * bindSomething usually create the mapping container and is accessed by one of the 2 first level method
-	 * makeSomething usually create the mapping container and is accessed by bindSomething[else]
-	 * fillSomething take the container into parameter and fill it.
-	 *
-	 *
-	 */
-	private AnnotationBinder() {
-	}
-
-	private static final Log log = LogFactory.getLog( AnnotationBinder.class );
-
-	public static void bindDefaults(ExtendedMappings mappings) {
-		Map defaults = mappings.getReflectionManager().getDefaults();
-		{
-			List<SequenceGenerator> anns = (List<SequenceGenerator>) defaults.get( SequenceGenerator.class );
-			if ( anns != null ) {
-				for ( SequenceGenerator ann : anns ) {
-					IdGenerator idGen = buildIdGenerator( ann, mappings );
-					if ( idGen != null ) mappings.addDefaultGenerator( idGen );
-				}
-			}
-		}
-		{
-			List<TableGenerator> anns = (List<TableGenerator>) defaults.get( TableGenerator.class );
-			if ( anns != null ) {
-				for ( TableGenerator ann : anns ) {
-					IdGenerator idGen = buildIdGenerator( ann, mappings );
-					if ( idGen != null ) mappings.addDefaultGenerator( idGen );
-				}
-			}
-		}
-		{
-			List<NamedQuery> anns = (List<NamedQuery>) defaults.get( NamedQuery.class );
-			if ( anns != null ) {
-				for ( NamedQuery ann : anns ) {
-					QueryBinder.bindQuery( ann, mappings, true );
-				}
-			}
-		}
-		{
-			List<NamedNativeQuery> anns = (List<NamedNativeQuery>) defaults.get( NamedNativeQuery.class );
-			if ( anns != null ) {
-				for ( NamedNativeQuery ann : anns ) {
-					QueryBinder.bindNativeQuery( ann, mappings, true );
-				}
-			}
-		}
-		{
-			List<SqlResultSetMapping> anns = (List<SqlResultSetMapping>) defaults.get( SqlResultSetMapping.class );
-			if ( anns != null ) {
-				for ( SqlResultSetMapping ann : anns ) {
-					QueryBinder.bindSqlResultsetMapping( ann, mappings, true );
-				}
-			}
-		}
-	}
-
-	public static void bindPackage(String packageName, ExtendedMappings mappings) {
-		XPackage pckg = null;
-		try {
-			pckg = mappings.getReflectionManager().packageForName( packageName );
-		}
-		catch (ClassNotFoundException cnf) {
-			log.warn( "Package not found or wo package-info.java: " + packageName );
-			return;
-		}
-		if ( pckg.isAnnotationPresent( SequenceGenerator.class ) ) {
-			SequenceGenerator ann = pckg.getAnnotation( SequenceGenerator.class );
-			IdGenerator idGen = buildIdGenerator( ann, mappings );
-			mappings.addGenerator( idGen );
-			log.debug( "Add sequence generator with name: " + idGen.getName() );
-		}
-		if ( pckg.isAnnotationPresent( TableGenerator.class ) ) {
-			TableGenerator ann = pckg.getAnnotation( TableGenerator.class );
-			IdGenerator idGen = buildIdGenerator( ann, mappings );
-			mappings.addGenerator( idGen );
-
-		}
-		if ( pckg.isAnnotationPresent( GenericGenerator.class ) ) {
-			GenericGenerator ann = pckg.getAnnotation( GenericGenerator.class );
-			IdGenerator idGen = buildIdGenerator( ann, mappings );
-			mappings.addGenerator( idGen );
-		}
-		bindQueries( pckg, mappings );
-		bindFilterDefs( pckg, mappings );
-		bindTypeDefs( pckg, mappings );
-	}
-
-	private static void bindQueries(XAnnotatedElement annotatedElement, ExtendedMappings mappings) {
-		{
-			SqlResultSetMapping ann = annotatedElement.getAnnotation( SqlResultSetMapping.class );
-			QueryBinder.bindSqlResultsetMapping( ann, mappings, false );
-		}
-		{
-			SqlResultSetMappings ann = annotatedElement.getAnnotation( SqlResultSetMappings.class );
-			if ( ann != null ) {
-				for ( SqlResultSetMapping current : ann.value() ) {
-					QueryBinder.bindSqlResultsetMapping( current, mappings, false );
-				}
-			}
-		}
-		{
-			NamedQuery ann = annotatedElement.getAnnotation( NamedQuery.class );
-			QueryBinder.bindQuery( ann, mappings, false );
-		}
-		{
-			org.hibernate.annotations.NamedQuery ann = annotatedElement.getAnnotation(
-					org.hibernate.annotations.NamedQuery.class
-			);
-			QueryBinder.bindQuery( ann, mappings );
-		}
-		{
-			NamedQueries ann = annotatedElement.getAnnotation( NamedQueries.class );
-			QueryBinder.bindQueries( ann, mappings, false );
-		}
-		{
-			org.hibernate.annotations.NamedQueries ann = annotatedElement.getAnnotation(
-					org.hibernate.annotations.NamedQueries.class
-			);
-			QueryBinder.bindQueries( ann, mappings );
-		}
-		{
-			NamedNativeQuery ann = annotatedElement.getAnnotation( NamedNativeQuery.class );
-			QueryBinder.bindNativeQuery( ann, mappings, false );
-		}
-		{
-			org.hibernate.annotations.NamedNativeQuery ann = annotatedElement.getAnnotation(
-					org.hibernate.annotations.NamedNativeQuery.class
-			);
-			QueryBinder.bindNativeQuery( ann, mappings );
-		}
-		{
-			NamedNativeQueries ann = annotatedElement.getAnnotation( NamedNativeQueries.class );
-			QueryBinder.bindNativeQueries( ann, mappings, false );
-		}
-		{
-			org.hibernate.annotations.NamedNativeQueries ann = annotatedElement.getAnnotation(
-					org.hibernate.annotations.NamedNativeQueries.class
-			);
-			QueryBinder.bindNativeQueries( ann, mappings );
-		}
-	}
-
-	private static IdGenerator buildIdGenerator(java.lang.annotation.Annotation ann, Mappings mappings) {
-		IdGenerator idGen = new IdGenerator();
-		if ( mappings.getSchemaName() != null ) {
-			idGen.addParam( PersistentIdentifierGenerator.SCHEMA, mappings.getSchemaName() );
-		}
-		if ( mappings.getCatalogName() != null ) {
-			idGen.addParam( PersistentIdentifierGenerator.CATALOG, mappings.getCatalogName() );
-		}
-		if ( ann == null ) {
-			idGen = null;
-		}
-		else if ( ann instanceof TableGenerator ) {
-			TableGenerator tabGen = (TableGenerator) ann;
-			idGen.setName( tabGen.name() );
-			idGen.setIdentifierGeneratorStrategy( MultipleHiLoPerTableGenerator.class.getName() );
-
-			if ( !BinderHelper.isDefault( tabGen.table() ) ) {
-				idGen.addParam( MultipleHiLoPerTableGenerator.ID_TABLE, tabGen.table() );
-			}
-			if ( !BinderHelper.isDefault( tabGen.catalog() ) ) {
-				idGen.addParam( MultipleHiLoPerTableGenerator.CATALOG, tabGen.catalog() );
-			}
-			if ( !BinderHelper.isDefault( tabGen.schema() ) ) {
-				idGen.addParam( MultipleHiLoPerTableGenerator.SCHEMA, tabGen.schema() );
-			}
-			//FIXME implements uniqueconstrains
-
-			if ( !BinderHelper.isDefault( tabGen.pkColumnName() ) ) {
-				idGen.addParam( MultipleHiLoPerTableGenerator.PK_COLUMN_NAME, tabGen.pkColumnName() );
-			}
-			if ( !BinderHelper.isDefault( tabGen.valueColumnName() ) ) {
-				idGen.addParam( MultipleHiLoPerTableGenerator.VALUE_COLUMN_NAME, tabGen.valueColumnName() );
-			}
-			if ( !BinderHelper.isDefault( tabGen.pkColumnValue() ) ) {
-				idGen.addParam( MultipleHiLoPerTableGenerator.PK_VALUE_NAME, tabGen.pkColumnValue() );
-			}
-			idGen.addParam( TableHiLoGenerator.MAX_LO, String.valueOf( tabGen.allocationSize() - 1 ) );
-			log.debug( "Add table generator with name: " + idGen.getName() );
-		}
-		else if ( ann instanceof SequenceGenerator ) {
-			SequenceGenerator seqGen = (SequenceGenerator) ann;
-			idGen.setName( seqGen.name() );
-			idGen.setIdentifierGeneratorStrategy( "seqhilo" );
-
-			if ( !BinderHelper.isDefault( seqGen.sequenceName() ) ) {
-				idGen.addParam( org.hibernate.id.SequenceGenerator.SEQUENCE, seqGen.sequenceName() );
-			}
-			//FIXME: work on initialValue() through SequenceGenerator.PARAMETERS
-			if ( seqGen.initialValue() != 1 ) {
-				log.warn(
-						"Hibernate does not support SequenceGenerator.initialValue()"
-				);
-			}
-			idGen.addParam( SequenceHiLoGenerator.MAX_LO, String.valueOf( seqGen.allocationSize() - 1 ) );
-			log.debug( "Add sequence generator with name: " + idGen.getName() );
-		}
-		else if ( ann instanceof GenericGenerator ) {
-			GenericGenerator genGen = (GenericGenerator) ann;
-			idGen.setName( genGen.name() );
-			idGen.setIdentifierGeneratorStrategy( genGen.strategy() );
-			Parameter[] params = genGen.parameters();
-			for ( Parameter parameter : params ) {
-				idGen.addParam( parameter.name(), parameter.value() );
-			}
-			log.debug( "Add generic generator with name: " + idGen.getName() );
-		}
-		else {
-			throw new AssertionFailure( "Unknown Generator annotation: " + ann );
-		}
-		return idGen;
-	}
-
-	/**
-	 * Bind a class having JSR175 annotations
-	 * The subclasses <b>have to</b> be binded after its mother class
-	 */
-	public static void bindClass(
-			XClass clazzToProcess, Map<XClass, InheritanceState> inheritanceStatePerClass, ExtendedMappings mappings
-	) throws MappingException {
-		//TODO: be more strict with secondarytable allowance (not for ids, not for secondary table join columns etc)
-		InheritanceState inheritanceState = inheritanceStatePerClass.get( clazzToProcess );
-		AnnotatedClassType classType = mappings.getClassType( clazzToProcess );
-		if ( AnnotatedClassType.EMBEDDABLE_SUPERCLASS.equals( classType ) //will be processed by their subentities
-				|| AnnotatedClassType.NONE.equals( classType ) //to be ignored
-				|| AnnotatedClassType.EMBEDDABLE.equals( classType ) //allow embeddable element declaration
-				) {
-			if ( AnnotatedClassType.NONE.equals( classType )
-					&& clazzToProcess.isAnnotationPresent( org.hibernate.annotations.Entity.class ) ) {
-				log.warn("Class annotated @org.hibernate.annotations.Entity but not javax.persistence.Entity "
-						+ "(most likely a user error): " + clazzToProcess.getName() );
-			}
-			return;
-		}
-		if ( !classType.equals( AnnotatedClassType.ENTITY ) ) {
-			//TODO make this test accurate by removing the none elements artifically added
-			throw new AnnotationException(
-					"Annotated class should have a @javax.persistence.Entity, @javax.persistence.Embeddable or @javax.persistence.EmbeddedSuperclass annotation: " + clazzToProcess
-							.getName()
-			);
-		}
-		XAnnotatedElement annotatedClass = clazzToProcess;
-		if ( log.isInfoEnabled() ) log.info( "Binding entity from annotated class: " + clazzToProcess.getName() );
-		InheritanceState superEntityState =
-				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
-			if ( inheritanceState.hasParents ) {
-				throw new AssertionFailure(
-						"Subclass has to be binded after it's mother class: "
-								+ superEntityState.clazz.getName()
-				);
-			}
-		}
-		bindQueries( annotatedClass, mappings );
-		bindFilterDefs( annotatedClass, mappings );
-		bindTypeDefs( annotatedClass, mappings );
-
-		String schema = "";
-		String table = ""; //might be no @Table annotation on the annotated class
-		String catalog = "";
-		String discrimValue = null;
-		List<String[]> uniqueConstraints = new ArrayList<String[]>();
-		Ejb3DiscriminatorColumn discriminatorColumn = null;
-		Ejb3JoinColumn[] inheritanceJoinedColumns = null;
-
-		if ( annotatedClass.isAnnotationPresent( javax.persistence.Table.class ) ) {
-			javax.persistence.Table tabAnn = annotatedClass.getAnnotation( javax.persistence.Table.class );
-			table = tabAnn.name();
-			schema = tabAnn.schema();
-			catalog = tabAnn.catalog();
-			uniqueConstraints = TableBinder.buildUniqueConstraints( tabAnn.uniqueConstraints() );
-		}
-		final boolean hasJoinedColumns = inheritanceState.hasParents
-				&& InheritanceType.JOINED.equals( inheritanceState.type );
-		if ( hasJoinedColumns ) {
-			//@Inheritance(JOINED) subclass need to link back to the super entity
-			PrimaryKeyJoinColumns jcsAnn = annotatedClass.getAnnotation( PrimaryKeyJoinColumns.class );
-			boolean explicitInheritanceJoinedColumns = jcsAnn != null && jcsAnn.value().length != 0;
-			if ( explicitInheritanceJoinedColumns ) {
-				int nbrOfInhJoinedColumns = jcsAnn.value().length;
-				PrimaryKeyJoinColumn jcAnn;
-				inheritanceJoinedColumns = new Ejb3JoinColumn[nbrOfInhJoinedColumns];
-				for ( int colIndex = 0; colIndex < nbrOfInhJoinedColumns; colIndex++ ) {
-					jcAnn = jcsAnn.value()[colIndex];
-					inheritanceJoinedColumns[colIndex] = Ejb3JoinColumn.buildJoinColumn(
-							jcAnn, null, superEntity.getIdentifier(),
-							(Map<String, Join>) null, (PropertyHolder) null, mappings
-					);
-				}
-			}
-			else {
-				PrimaryKeyJoinColumn jcAnn = annotatedClass.getAnnotation( PrimaryKeyJoinColumn.class );
-				inheritanceJoinedColumns = new Ejb3JoinColumn[1];
-				inheritanceJoinedColumns[0] = Ejb3JoinColumn.buildJoinColumn(
-						jcAnn, null, superEntity.getIdentifier(),
-						(Map<String, Join>) null, (PropertyHolder) null, mappings
-				);
-			}
-			log.debug( "Subclass joined column(s) created" );
-		}
-		else {
-			if ( annotatedClass.isAnnotationPresent( javax.persistence.PrimaryKeyJoinColumns.class )
-					|| annotatedClass.isAnnotationPresent( javax.persistence.PrimaryKeyJoinColumn.class ) ) {
-				log.warn( "Root entity should not hold an PrimaryKeyJoinColum(s), will be ignored" );
-			}
-		}
-
-		if ( InheritanceType.SINGLE_TABLE.equals( inheritanceState.type ) ) {
-			javax.persistence.Inheritance inhAnn = annotatedClass.getAnnotation( javax.persistence.Inheritance.class );
-			javax.persistence.DiscriminatorColumn discAnn = annotatedClass.getAnnotation(
-					javax.persistence.DiscriminatorColumn.class
-			);
-			DiscriminatorType discriminatorType = discAnn != null ?
-					discAnn.discriminatorType() :
-					DiscriminatorType.STRING;
-
-			org.hibernate.annotations.DiscriminatorFormula discFormulaAnn = annotatedClass.getAnnotation(
-					org.hibernate.annotations.DiscriminatorFormula.class
-			);
-			if ( !inheritanceState.hasParents ) {
-				discriminatorColumn = Ejb3DiscriminatorColumn.buildDiscriminatorColumn(
-						discriminatorType, discAnn, discFormulaAnn, mappings
-				);
-			}
-			if ( discAnn != null && inheritanceState.hasParents ) {
-				log.warn(
-						"Discriminator column has to be defined in the root entity, it will be ignored in subclass: "
-								+ clazzToProcess.getName()
-				);
-			}
-			discrimValue = annotatedClass.isAnnotationPresent( DiscriminatorValue.class ) ?
-					annotatedClass.getAnnotation( DiscriminatorValue.class ).value() :
-					null;
-		}
-
-		//we now know what kind of persistent entity it is
-		PersistentClass persistentClass;
-		//create persistent class
-		if ( !inheritanceState.hasParents ) {
-			persistentClass = new RootClass();
-		}
-		else if ( InheritanceType.SINGLE_TABLE.equals( inheritanceState.type ) ) {
-			persistentClass = new SingleTableSubclass( superEntity );
-		}
-		else if ( InheritanceType.JOINED.equals( inheritanceState.type ) ) {
-			persistentClass = new JoinedSubclass( superEntity );
-		}
-		else if ( InheritanceType.TABLE_PER_CLASS.equals( inheritanceState.type ) ) {
-			persistentClass = new UnionSubclass( superEntity );
-		}
-		else {
-			throw new AssertionFailure( "Unknown inheritance type: " + inheritanceState.type );
-		}
-		Proxy proxyAnn = annotatedClass.getAnnotation( Proxy.class );
-		BatchSize sizeAnn = annotatedClass.getAnnotation( BatchSize.class );
-		Where whereAnn = annotatedClass.getAnnotation( Where.class );
-		Entity entityAnn = annotatedClass.getAnnotation( Entity.class );
-		org.hibernate.annotations.Entity hibEntityAnn = annotatedClass.getAnnotation(
-				org.hibernate.annotations.Entity.class
-		);
-		org.hibernate.annotations.Cache cacheAnn = annotatedClass.getAnnotation(
-				org.hibernate.annotations.Cache.class
-		);
-		EntityBinder entityBinder = new EntityBinder(
-				entityAnn, hibEntityAnn, clazzToProcess, persistentClass, mappings
-		);
-		entityBinder.setDiscriminatorValue( discrimValue );
-		entityBinder.setBatchSize( sizeAnn );
-		entityBinder.setProxy( proxyAnn );
-		entityBinder.setWhere( whereAnn );
-		entityBinder.setCache( cacheAnn );
-		entityBinder.setInheritanceState( inheritanceState );
-		Filter filterAnn = annotatedClass.getAnnotation( Filter.class );
-		if ( filterAnn != null ) {
-			entityBinder.addFilter( filterAnn.name(), filterAnn.condition() );
-		}
-		Filters filtersAnn = annotatedClass.getAnnotation( Filters.class );
-		if ( filtersAnn != null ) {
-			for ( Filter filter : filtersAnn.value() ) {
-				entityBinder.addFilter( filter.name(), filter.condition() );
-			}
-		}
-		entityBinder.bindEntity();
-
-		if ( inheritanceState.hasTable() ) {
-			Check checkAnn = annotatedClass.getAnnotation( Check.class );
-			String constraints = checkAnn == null ?
-					null :
-					checkAnn.constraints();
-			entityBinder.bindTable(
-					schema, catalog, table, uniqueConstraints,
-					constraints, inheritanceState.hasDenormalizedTable() ?
-					superEntity.getTable() :
-					null
-			);
-		}
-		else {
-			if ( annotatedClass.isAnnotationPresent( Table.class ) ) {
-				log.warn( "Illegal use of @Table in a subclass of a SINGLE_TABLE hierarchy: " + clazzToProcess
-						.getName() );
-			}
-		}
-//		Map<String, Column[]> columnOverride = PropertyHolderBuilder.buildHierarchyColumnOverride(
-//				clazzToProcess,
-//				persistentClass.getClassName()
-//		);
-		PropertyHolder propertyHolder = PropertyHolderBuilder.buildPropertyHolder(
-				clazzToProcess,
-				persistentClass,
-				entityBinder, mappings
-		);
-
-		javax.persistence.SecondaryTable secTabAnn = annotatedClass.getAnnotation(
-				javax.persistence.SecondaryTable.class
-		);
-		javax.persistence.SecondaryTables secTabsAnn = annotatedClass.getAnnotation(
-				javax.persistence.SecondaryTables.class
-		);
-		entityBinder.firstLevelSecondaryTablesBinding( secTabAnn, secTabsAnn );
-
-		OnDelete onDeleteAnn = annotatedClass.getAnnotation( OnDelete.class );
-		boolean onDeleteAppropriate = false;
-		if ( InheritanceType.JOINED.equals( inheritanceState.type ) && inheritanceState.hasParents ) {
-			onDeleteAppropriate = true;
-			final JoinedSubclass jsc = (JoinedSubclass) persistentClass;
-			if ( persistentClass.getEntityPersisterClass() == null ) {
-				persistentClass.getRootClass().setEntityPersisterClass( JoinedSubclassEntityPersister.class );
-			}
-			SimpleValue key = new DependantValue( jsc.getTable(), jsc.getIdentifier() );
-			jsc.setKey( key );
-			ForeignKey fk = annotatedClass.getAnnotation( ForeignKey.class );
-			if (fk != null && ! BinderHelper.isDefault( fk.name() ) ) {
-				key.setForeignKeyName( fk.name() );
-			}
-			if ( onDeleteAnn != null ) {
-				key.setCascadeDeleteEnabled( OnDeleteAction.CASCADE.equals( onDeleteAnn.action() ) );
-			}
-			else {
-				key.setCascadeDeleteEnabled( false );
-			}
-			TableBinder.bindFk( jsc.getSuperclass(), jsc, inheritanceJoinedColumns, key, false, mappings );
-			//no need to handle inSecondPass this is an Etntiy related work
-			mappings.addSecondPass( new CreateKeySecondPass( jsc ) );
-
-		}
-		else if ( InheritanceType.SINGLE_TABLE.equals( inheritanceState.type ) ) {
-			if ( inheritanceState.hasParents ) {
-				if ( persistentClass.getEntityPersisterClass() == null ) {
-					persistentClass.getRootClass().setEntityPersisterClass( SingleTableEntityPersister.class );
-				}
-			}
-			else {
-				if ( inheritanceState.hasSons || !discriminatorColumn.isImplicit() ) {
-					//need a discriminator column
-					bindDiscriminatorToPersistentClass(
-							(RootClass) persistentClass,
-							discriminatorColumn,
-							entityBinder.getSecondaryTables(),
-							propertyHolder
-					);
-					entityBinder.bindDiscriminatorValue();//bind it again since the type might have changed
-				}
-			}
-		}
-		else if ( InheritanceType.TABLE_PER_CLASS.equals( inheritanceState.type ) ) {
-			if ( inheritanceState.hasParents ) {
-				if ( persistentClass.getEntityPersisterClass() == null ) {
-					persistentClass.getRootClass().setEntityPersisterClass( UnionSubclassEntityPersister.class );
-				}
-			}
-		}
-		if ( onDeleteAnn != null && !onDeleteAppropriate ) {
-			log.warn(
-					"Inapropriate use of @OnDelete on entity, annotation ignored: " + propertyHolder.getEntityName()
-			);
-		}
-
-		//try to find class level generators
-		HashMap<String, IdGenerator> classGenerators = buildLocalGenerators( annotatedClass, mappings );
-
-		// check properties
-		List<PropertyData> elements =
-				getElementsToProcess(
-						clazzToProcess, inheritanceStatePerClass, propertyHolder, entityBinder, mappings
-				);
-		if ( elements == null ) {
-			throw new AnnotationException( "No identifier specified for entity: " + propertyHolder.getEntityName() );
-		}
-		final boolean subclassAndSingleTableStrategy = inheritanceState.type == InheritanceType.SINGLE_TABLE
-				&& inheritanceState.hasParents;
-		//process idclass if any
-		Set<String> idProperties = new HashSet<String>();
-		IdClass idClass = null;
-		if ( !inheritanceState.hasParents ) {
-			//look for idClass
-			XClass current = inheritanceState.clazz;
-			InheritanceState state = inheritanceState;
-			do {
-				current = state.clazz;
-				if ( current.isAnnotationPresent( IdClass.class ) ) {
-					idClass = current.getAnnotation( IdClass.class );
-					break;
-				}
-				state = InheritanceState.getSuperclassInheritanceState(
-						current, inheritanceStatePerClass, mappings.getReflectionManager()
-				);
-			}
-			while ( state != null );
-		}
-		if ( idClass != null ) {
-			XClass compositeClass = mappings.getReflectionManager().toXClass( idClass.value() );
-			boolean isComponent = true;
-			boolean propertyAnnotated = entityBinder.isPropertyAnnotated( compositeClass );
-			String propertyAccessor = entityBinder.getPropertyAccessor( compositeClass );
-			String generatorType = "assigned";
-			String generator = BinderHelper.ANNOTATION_STRING_DEFAULT;
-			PropertyData inferredData = new PropertyPreloadedData(
-					entityBinder.getPropertyAccessor(), "id", compositeClass
-			);
-			HashMap<String, IdGenerator> localGenerators = new HashMap<String, IdGenerator>();
-			boolean ignoreIdAnnotations = entityBinder.isIgnoreIdAnnotations();
-			entityBinder.setIgnoreIdAnnotations( true );
-			bindId(
-					generatorType,
-					generator,
-					inferredData,
-					null,
-					propertyHolder,
-					localGenerators,
-					isComponent,
-					propertyAnnotated,
-					propertyAccessor, entityBinder,
-					null,
-					true,
-					false, mappings
-			);
-			inferredData = new PropertyPreloadedData(
-					propertyAccessor, "_identifierMapper", compositeClass
-			);
-			Component mapper = fillComponent(
-					propertyHolder,
-					inferredData,
-					propertyAnnotated,
-					propertyAccessor, false,
-					entityBinder,
-					true, true,
-					false, mappings
-			);
-			entityBinder.setIgnoreIdAnnotations( ignoreIdAnnotations );
-			persistentClass.setIdentifierMapper( mapper );
-			Property property = new Property();
-			property.setName( "_identifierMapper" );
-			property.setNodeName( "id" );
-			property.setUpdateable( false );
-			property.setInsertable( false );
-			property.setValue( mapper );
-			property.setPropertyAccessorName( "embedded" );
-			persistentClass.addProperty( property );
-			entityBinder.setIgnoreIdAnnotations( true );
-
-			Iterator properties = mapper.getPropertyIterator();
-			while ( properties.hasNext() ) {
-				idProperties.add( ( (Property) properties.next() ).getName() );
-			}
-		}
-		Set<String> missingIdProperties = new HashSet<String>( idProperties );
-		for ( PropertyData propertyAnnotatedElement : elements ) {
-			String propertyName = propertyAnnotatedElement.getPropertyName();
-			if ( !idProperties.contains( propertyName ) ) {
-				processElementAnnotations(
-						propertyHolder,
-						subclassAndSingleTableStrategy ?
-								Nullability.FORCED_NULL :
-								Nullability.NO_CONSTRAINT,
-						propertyAnnotatedElement.getProperty(),
-						propertyAnnotatedElement, classGenerators, entityBinder,
-						false, false, false, mappings
-				);
-			}
-			else {
-				missingIdProperties.remove( propertyName );
-			}
-		}
-
-		if ( missingIdProperties.size() != 0 ) {
-			StringBuilder missings = new StringBuilder();
-			for ( String property : missingIdProperties ) {
-				missings.append( property ).append( ", " );
-			}
-			throw new AnnotationException(
-					"Unable to find properties ("
-							+ missings.substring( 0, missings.length() - 2 )
-							+ ") in entity annotated with @IdClass:" + persistentClass.getEntityName()
-			);
-		}
-
-		if ( !inheritanceState.hasParents ) {
-			final RootClass rootClass = (RootClass) persistentClass;
-			//no need to handle inSecondPass this is an Entity related work
-			mappings.addSecondPass( new CreateKeySecondPass( rootClass ) );
-		}
-		else {
-			superEntity.addSubclass( (Subclass) persistentClass );
-		}
-
-		mappings.addClass( persistentClass );
-		entityBinder.finalSecondaryTableBinding( propertyHolder );
-
-		//add process complementary Table definition (index & all)
-		entityBinder.processComplementaryTableDefinitions( annotatedClass.getAnnotation( org.hibernate.annotations.Table.class ) );
-		entityBinder.processComplementaryTableDefinitions( annotatedClass.getAnnotation( org.hibernate.annotations.Tables.class ) );
-
-	}
-
-	/**
-	 * Get the annotated elements
-	 * Guess the annotated element from @Id or @EmbeddedId presence
-	 * Change EntityBinder by side effect
-	 */
-	private static List<PropertyData> getElementsToProcess(
-			XClass clazzToProcess, Map<XClass, InheritanceState> inheritanceStatePerClass,
-			PropertyHolder propertyHolder, EntityBinder entityBinder, ExtendedMappings mappings
-	) {
-		InheritanceState inheritanceState = inheritanceStatePerClass.get( clazzToProcess );
-		List<XClass> classesToProcess = orderClassesToBeProcessed(
-				clazzToProcess, inheritanceStatePerClass, inheritanceState, mappings
-		);
-		List<PropertyData> elements = new ArrayList<PropertyData>();
-		int deep = classesToProcess.size();
-		boolean hasIdentifier = false;
-
-		assert !inheritanceState.isEmbeddableSuperclass;
-		Boolean isExplicitPropertyAnnotated = null;
-		String explicitAccessType = null;
-		if ( inheritanceState.hasParents ) {
-			InheritanceState superEntityState =
-					InheritanceState.getSuperEntityInheritanceState(
-							clazzToProcess, inheritanceStatePerClass, mappings.getReflectionManager()
-					);
-			isExplicitPropertyAnnotated = superEntityState != null ?
-					superEntityState.isPropertyAnnotated :
-					null;
-			explicitAccessType = superEntityState != null ?
-					superEntityState.accessType :
-					null;
-		}
-		else {
-			AccessType access = clazzToProcess.getAnnotation( AccessType.class );
-			explicitAccessType = access != null ?
-					access.value() :
-					null;
-			if ( "property".equals( explicitAccessType ) ) {
-				isExplicitPropertyAnnotated = Boolean.TRUE;
-			}
-			else if ( "field".equals( explicitAccessType ) ) {
-				isExplicitPropertyAnnotated = Boolean.FALSE;
-			}
-		}
-		Boolean isPropertyAnnotated = isExplicitPropertyAnnotated == null ?
-				Boolean.TRUE :
-				//default to property and fallback if needed
-				isExplicitPropertyAnnotated;
-		String accessType = explicitAccessType != null ?
-				explicitAccessType :
-				"property";
-
-		for ( int index = 0; index < deep; index++ ) {
-			XClass clazz = classesToProcess.get( index );
-
-			boolean currentHasIdentifier = addElementsOfAClass(
-					elements, propertyHolder, isPropertyAnnotated,
-					accessType, clazz, mappings
-			);
-			hasIdentifier = hasIdentifier || currentHasIdentifier;
-		}
-
-		if ( !hasIdentifier && !inheritanceState.hasParents ) {
-			if ( isExplicitPropertyAnnotated != null ) return null; //explicit but no @Id
-			isPropertyAnnotated = !isPropertyAnnotated;
-			accessType = "field";
-			elements.clear();
-			for ( int index = 0; index < deep; index++ ) {
-				XClass clazz = classesToProcess.get( index );
-				boolean currentHasIdentifier = addElementsOfAClass(
-						elements, propertyHolder, isPropertyAnnotated,
-						accessType, clazz, mappings
-				);
-				hasIdentifier = hasIdentifier || currentHasIdentifier;
-			}
-		}
-		//TODO set the access type here?
-		entityBinder.setPropertyAnnotated( isPropertyAnnotated );
-		entityBinder.setPropertyAccessor( accessType );
-		inheritanceState.isPropertyAnnotated = isPropertyAnnotated;
-		inheritanceState.accessType = accessType;
-		return hasIdentifier || inheritanceState.hasParents ?
-				elements :
-				null;
-	}
-
-	private static List<XClass> orderClassesToBeProcessed(
-			XClass annotatedClass, Map<XClass, InheritanceState> inheritanceStatePerClass,
-			InheritanceState inheritanceState, ExtendedMappings mappings
-	) {
-		//ordered to allow proper messages on properties subclassing
-		List<XClass> classesToProcess = new ArrayList<XClass>();
-		XClass currentClassInHierarchy = annotatedClass;
-		InheritanceState superclassState;
-		do {
-			classesToProcess.add( 0, currentClassInHierarchy );
-			XClass superClass = currentClassInHierarchy;
-			do {
-				superClass = superClass.getSuperclass();
-				superclassState = inheritanceStatePerClass.get( superClass );
-			}
-			while ( superClass != null && !mappings.getReflectionManager()
-					.equals( superClass, Object.class ) && superclassState == null );
-
-			currentClassInHierarchy = superClass;
-		}
-		while ( superclassState != null && superclassState.isEmbeddableSuperclass );
-
-		return classesToProcess;
-	}
-
-	private static void bindFilterDefs(XAnnotatedElement annotatedElement, ExtendedMappings mappings) {
-		FilterDef defAnn = annotatedElement.getAnnotation( FilterDef.class );
-		FilterDefs defsAnn = annotatedElement.getAnnotation( FilterDefs.class );
-		if ( defAnn != null ) {
-			bindFilterDef( defAnn, mappings );
-		}
-		if ( defsAnn != null ) {
-			for ( FilterDef def : defsAnn.value() ) {
-				bindFilterDef( def, mappings );
-			}
-		}
-	}
-
-	private static void bindFilterDef(FilterDef defAnn, ExtendedMappings mappings) {
-		Map<String, org.hibernate.type.Type> params = new HashMap<String, org.hibernate.type.Type>();
-		for ( ParamDef param : defAnn.parameters() ) {
-			params.put( param.name(), TypeFactory.heuristicType( param.type() ) );
-		}
-		FilterDefinition def = new FilterDefinition( defAnn.name(), defAnn.defaultCondition(), params );
-		if ( log.isInfoEnabled() ) log.info( "Binding filter definition: " + def.getFilterName() );
-		mappings.addFilterDefinition( def );
-	}
-
-	private static void bindTypeDefs(XAnnotatedElement annotatedElement, ExtendedMappings mappings) {
-		TypeDef defAnn = annotatedElement.getAnnotation( TypeDef.class );
-		TypeDefs defsAnn = annotatedElement.getAnnotation( TypeDefs.class );
-		if ( defAnn != null ) {
-			bindTypeDef( defAnn, mappings );
-		}
-		if ( defsAnn != null ) {
-			for ( TypeDef def : defsAnn.value() ) {
-				bindTypeDef( def, mappings );
-			}
-		}
-	}
-
-	private static void bindTypeDef(TypeDef defAnn, ExtendedMappings mappings) {
-		Properties params = new Properties();
-		for ( Parameter param : defAnn.parameters() ) {
-			params.setProperty( param.name(), param.value() );
-		}
-		if ( log.isInfoEnabled() ) log.info( "Binding type definition: " + defAnn.name() );
-		mappings.addTypeDef( defAnn.name(), defAnn.typeClass().getName(), params );
-	}
-
-	private static void bindDiscriminatorToPersistentClass(
-			RootClass rootClass,
-			Ejb3DiscriminatorColumn discriminatorColumn, Map<String, Join> secondaryTables,
-			PropertyHolder propertyHolder
-	) {
-		if ( rootClass.getDiscriminator() == null ) {
-			if ( discriminatorColumn == null ) {
-				throw new AssertionFailure( "discriminator column should have been built" );
-			}
-			discriminatorColumn.setJoins( secondaryTables );
-			discriminatorColumn.setPropertyHolder( propertyHolder );
-			SimpleValue discrim = new SimpleValue( rootClass.getTable() );
-			rootClass.setDiscriminator( discrim );
-			discriminatorColumn.linkWithValue( discrim );
-			discrim.setTypeName( discriminatorColumn.getDiscriminatorTypeName() );
-			rootClass.setPolymorphic( true );
-			log.debug( "Setting discriminator for entity " + rootClass.getEntityName() );
-		}
-	}
-
-	/**
-	 * Add elements of a class
-	 */
-	private static boolean addElementsOfAClass(
-			List<PropertyData> elements, PropertyHolder propertyHolder, boolean isPropertyAnnotated,
-			String propertyAccessor, final XClass annotatedClass, ExtendedMappings mappings
-	) {
-		boolean hasIdentifier = false;
-		AccessType access = annotatedClass.getAnnotation( AccessType.class );
-		String localPropertyAccessor = access != null ?
-				access.value() :
-				null;
-		String accessType = null;
-		if ( "property".equals( localPropertyAccessor ) || "field".equals( localPropertyAccessor ) ) {
-			accessType = localPropertyAccessor;
-		}
-		else {
-			if ( localPropertyAccessor == null ) {
-				localPropertyAccessor = propertyAccessor;
-			}
-
-			if ( isPropertyAnnotated ) {
-				accessType = "property";
-			}
-			else {
-				accessType = "field";
-			}
-		}
-
-		log.debug( "Processing " + propertyHolder.getEntityName() + " " + accessType + " annotation" );
-		List<XProperty> properties = annotatedClass.getDeclaredProperties( accessType );
-		//order so that property are used int he same order when binding native query
-		Collections.sort( properties, new Comparator<XProperty>() {
-			public int compare(XProperty property1, XProperty property2) {
-				return property1.getName().compareTo( property2.getName() );
-			}
-		} );
-		for ( XProperty p : properties ) {
-			if ( !p.isTypeResolved() && !discoverTypeWithoutReflection( p ) && !mustBeSkipped( p, mappings ) ) {
-				throw new AnnotationException(
-						"Property " + StringHelper.qualify( propertyHolder.getEntityName(), p.getName() ) +
-								" has an unbound type and no explicit target entity. Resolve this Generic usage issue" +
-								" or set an explicit target attribute (eg @OneToMany(target=) or use an explicit @Type"
-				);
-			}
-			final boolean currentHasIdentifier = addProperty( p, elements, localPropertyAccessor, mappings );
-			hasIdentifier = hasIdentifier || currentHasIdentifier;
-		}
-		return hasIdentifier;
-	}
-
-	private static boolean discoverTypeWithoutReflection(XProperty p) {
-		if ( p.isAnnotationPresent( OneToOne.class ) && !p.getAnnotation( OneToOne.class )
-				.targetEntity()
-				.equals( void.class ) ) {
-			return true;
-		}
-		else if ( p.isAnnotationPresent( OneToMany.class ) && !p.getAnnotation( OneToMany.class )
-				.targetEntity()
-				.equals( void.class ) ) {
-			return true;
-		}
-		else if ( p.isAnnotationPresent( ManyToOne.class ) && !p.getAnnotation( ManyToOne.class )
-				.targetEntity()
-				.equals( void.class ) ) {
-			return true;
-		}
-		else if ( p.isAnnotationPresent( ManyToMany.class ) && !p.getAnnotation( ManyToMany.class )
-				.targetEntity()
-				.equals( void.class ) ) {
-			return true;
-		}
-		else if ( p.isAnnotationPresent( Type.class ) ) {
-			return true;
-		}
-		else if ( p.isAnnotationPresent( Target.class ) ) {
-			return true;
-		}
-		return false;
-	}
-
-	private static boolean addProperty(
-			XProperty property, List<PropertyData> annElts,
-			String propertyAccessor, ExtendedMappings mappings
-	) {
-		boolean hasIdentifier = false;
-		PropertyData propertyAnnotatedElement = new PropertyInferredData(
-				property, propertyAccessor,
-				mappings.getReflectionManager() );
-		if ( !mustBeSkipped( propertyAnnotatedElement.getProperty(), mappings ) ) {
-			/*
-			 * put element annotated by @Id in front
-			 * since it has to be parsed before any assoctation by Hibernate
-			 */
-			final XAnnotatedElement element = propertyAnnotatedElement.getProperty();
-			if ( element.isAnnotationPresent( Id.class ) || element.isAnnotationPresent( EmbeddedId.class ) ) {
-				annElts.add( 0, propertyAnnotatedElement );
-				hasIdentifier = true;
-			}
-			else {
-				annElts.add( propertyAnnotatedElement );
-				hasIdentifier = false;
-			}
-		}
-		return hasIdentifier;
-	}
-
-	private static boolean mustBeSkipped(XProperty property, ExtendedMappings mappings) {
-		//TODO make those hardcoded tests more portable (through the bytecode provider?)
-		return property.isAnnotationPresent( Transient.class )
-				|| "net.sf.cglib.transform.impl.InterceptFieldCallback".equals( property.getType().getName() )
-				|| "org.hibernate.tool.instrument.javassist.FieldHandler".equals( property.getType().getName() );
-	}
-
-	/**
-	 * Process annotation of a particular property
-	 */
-	private static void processElementAnnotations(
-			PropertyHolder propertyHolder, Nullability nullability, XProperty property,
-			PropertyData inferredData, HashMap<String, IdGenerator> classGenerators,
-			EntityBinder entityBinder, boolean isIdentifierMapper,
-			boolean isComponentEmbedded, boolean inSecondPass, ExtendedMappings mappings
-	)
-			throws MappingException {
-		/**
-		 * inSecondPass can only be used to apply right away the second pass of a composite-element
-		 * Because it's a value type, there is no bidirectional association, hence second pass
-		 * ordering does not matter
-		 */
-		Ejb3Column[] columns = null;
-		Ejb3JoinColumn[] joinColumns = null;
-		if ( log.isDebugEnabled() ) {
-			log.debug(
-					"Processing annotations of " + propertyHolder.getEntityName() + "." + inferredData.getPropertyName()
-			);
-		}
-
-		if ( property.isAnnotationPresent( Parent.class ) ) {
-			if ( propertyHolder.isComponent() ) {
-				propertyHolder.setParentProperty( property.getName() );
-			}
-			else {
-				throw new AnnotationException(
-						"@Parent cannot be applied outside an embeddable object: "
-								+ StringHelper.qualify( propertyHolder.getPath(), property.getName() )
-				);
-			}
-			return;
-		}
-
-		//process @JoinColumn(s) before @Column(s) to handle collection of elements properly
-		{
-			JoinColumn[] anns = null;
-			if ( property.isAnnotationPresent( JoinColumn.class ) ) {
-				anns = new JoinColumn[]{property.getAnnotation( JoinColumn.class )};
-			}
-			else if ( property.isAnnotationPresent( JoinColumns.class ) ) {
-				JoinColumns ann = property.getAnnotation( JoinColumns.class );
-				anns = ann.value();
-				int length = anns.length;
-				if ( length == 0 ) {
-					throw new AnnotationException( "Cannot bind an empty @JoinColumns" );
-				}
-			}
-			if ( anns != null ) {
-				joinColumns = Ejb3JoinColumn.buildJoinColumns(
-						anns, null, entityBinder.getSecondaryTables(),
-						propertyHolder, inferredData.getPropertyName(), mappings
-				);
-			}
-		}
-		if ( property.isAnnotationPresent( Column.class ) || property.isAnnotationPresent( Formula.class ) ) {
-			Column ann = property.getAnnotation( Column.class );
-			Formula formulaAnn = property.getAnnotation( Formula.class );
-			columns = Ejb3Column.buildColumnFromAnnotation(
-					new Column[]{ann}, formulaAnn, nullability, propertyHolder, inferredData,
-					entityBinder.getSecondaryTables(), mappings
-			);
-		}
-		else if ( property.isAnnotationPresent( Columns.class ) ) {
-			Columns anns = property.getAnnotation( Columns.class );
-			columns = Ejb3Column.buildColumnFromAnnotation(
-					anns.columns(), null, nullability, propertyHolder, inferredData, entityBinder.getSecondaryTables(),
-					mappings
-			);
-		}
-
-		//set default values if needed
-		if ( joinColumns == null &&
-				( property.isAnnotationPresent( ManyToOne.class )
-						|| property.isAnnotationPresent( OneToOne.class ) )
-				) {
-			if ( property.isAnnotationPresent( JoinTable.class ) ) {
-				JoinTable joinTableAnn = property.getAnnotation( JoinTable.class );
-				joinColumns = Ejb3JoinColumn.buildJoinColumns(
-						joinTableAnn.inverseJoinColumns(), null, entityBinder.getSecondaryTables(),
-						propertyHolder, inferredData.getPropertyName(), mappings
-				);
-				if ( StringHelper.isEmpty( joinTableAnn.name() ) ) {
-					throw new AnnotationException(
-							"JoinTable.name() on a @ToOne association has to be explicit: "
-									+ StringHelper.qualify( propertyHolder.getPath(), inferredData.getPropertyName() )
-					);
-				}
-			}
-			else {
-				OneToOne oneToOneAnn = property.getAnnotation( OneToOne.class );
-				String mappedBy = oneToOneAnn != null ?
-						oneToOneAnn.mappedBy() :
-						null;
-				joinColumns = Ejb3JoinColumn.buildJoinColumns(
-						(JoinColumn[]) null,
-						mappedBy, entityBinder.getSecondaryTables(),
-						propertyHolder, inferredData.getPropertyName(), mappings
-				);
-			}
-		}
-		else if ( joinColumns == null &&
-				( property.isAnnotationPresent( OneToMany.class )
-						|| property.isAnnotationPresent( CollectionOfElements.class ) ) ) {
-			OneToMany oneToMany = property.getAnnotation( OneToMany.class );
-			String mappedBy = oneToMany != null ?
-					oneToMany.mappedBy() :
-					"";
-			joinColumns = Ejb3JoinColumn.buildJoinColumns(
-					(JoinColumn[]) null,
-					mappedBy, entityBinder.getSecondaryTables(),
-					propertyHolder, inferredData.getPropertyName(), mappings
-			);
-		}
-		if ( columns == null && !property.isAnnotationPresent( ManyToMany.class ) ) {
-			//useful for collection of embedded elements
-			columns = Ejb3Column.buildColumnFromAnnotation(
-					null, null, nullability, propertyHolder, inferredData, entityBinder.getSecondaryTables(), mappings
-			);
-		}
-
-		if ( nullability == Nullability.FORCED_NOT_NULL ) {
-			//force columns to not null
-			for ( Ejb3Column col : columns ) {
-				col.forceNotNull();
-			}
-		}
-
-		final XClass returnedClass = inferredData.getClassOrElement();
-		if ( !entityBinder.isIgnoreIdAnnotations() &&
-				( property.isAnnotationPresent( Id.class )
-						|| property.isAnnotationPresent( EmbeddedId.class ) ) ) {
-			if ( isIdentifierMapper ) {
-				throw new AnnotationException(
-						"@IdClass class should not have @Id nor @EmbeddedId properties"
-				);
-			}
-			log.debug( inferredData.getPropertyName() + " is an id" );
-			//clone classGenerator and override with local values
-			HashMap<String, IdGenerator> localGenerators = (HashMap<String, IdGenerator>) classGenerators.clone();
-			localGenerators.putAll( buildLocalGenerators( property, mappings ) );
-
-			//manage composite related metadata
-			//guess if its a component and find id data access (property, field etc)
-			final boolean isComponent = returnedClass.isAnnotationPresent( Embeddable.class )
-					|| property.isAnnotationPresent( EmbeddedId.class );
-			boolean propertyAnnotated = entityBinder.isPropertyAnnotated( returnedClass );
-			String propertyAccessor = entityBinder.getPropertyAccessor( returnedClass );
-			//if ( isComponent && embeddableAnn != null && embeddableAnn.access() == AccessType.FIELD ) propertyAccess = false;
-
-			GeneratedValue generatedValue = property.getAnnotation( GeneratedValue.class );
-			String generatorType = generatedValue != null ?
-					generatorType( generatedValue.strategy() ) :
-					"assigned";
-			String generator = generatedValue != null ?
-					generatedValue.generator() :
-					BinderHelper.ANNOTATION_STRING_DEFAULT;
-			if ( isComponent ) generatorType = "assigned"; //a component must not have any generator
-			Type typeAnn = property.getAnnotation( Type.class );
-			bindId(
-					generatorType,
-					generator,
-					inferredData,
-					columns,
-					propertyHolder,
-					localGenerators,
-					isComponent,
-					propertyAnnotated,
-					propertyAccessor, entityBinder,
-					typeAnn,
-					false,
-					isIdentifierMapper, mappings
-			);
-			if ( log.isDebugEnabled() ) {
-				log.debug(
-						"Bind " + ( isComponent ?
-								"@EmbeddedId" :
-								"@Id" ) + " on " + inferredData.getPropertyName()
-				);
-			}
-		}
-		else if ( property.isAnnotationPresent( Version.class ) ) {
-			if ( isIdentifierMapper ) {
-				throw new AnnotationException(
-						"@IdClass class should not have @Version property"
-				);
-			}
-			if ( !( propertyHolder.getPersistentClass() instanceof RootClass ) ) {
-				throw new AnnotationException(
-						"Unable to define/override @Version on a subclass: "
-								+ propertyHolder.getEntityName()
-				);
-			}
-			log.debug( inferredData.getPropertyName() + " is a version property" );
-			RootClass rootClass = (RootClass) propertyHolder.getPersistentClass();
-			boolean lazy = false;
-			PropertyBinder propBinder = new PropertyBinder();
-			propBinder.setName( inferredData.getPropertyName() );
-			propBinder.setReturnedClassName( inferredData.getTypeName() );
-			propBinder.setLazy( lazy );
-			propBinder.setPropertyAccessorName( inferredData.getDefaultAccess() );
-			propBinder.setColumns( columns );
-			propBinder.setHolder( propertyHolder ); //PropertyHolderBuilder.buildPropertyHolder(rootClass)
-			propBinder.setProperty( property );
-			propBinder.setReturnedClass( inferredData.getPropertyClass() );
-
-			propBinder.setMappings( mappings );
-			Property prop = propBinder.bind();
-			rootClass.setVersion( prop );
-			SimpleValue simpleValue = (SimpleValue) prop.getValue();
-			if ( !simpleValue.isTypeSpecified() ) simpleValue.setTypeName( "integer" );
-			simpleValue.setNullValue( "undefined" );
-			rootClass.setOptimisticLockMode( Versioning.OPTIMISTIC_LOCK_VERSION );
-			log.debug(
-					"Version name: " + rootClass.getVersion().getName() + ", unsavedValue: " + ( (SimpleValue) rootClass
-							.getVersion()
-							.getValue() ).getNullValue()
-			);
-		}
-		else if ( property.isAnnotationPresent( ManyToOne.class ) ) {
-			ManyToOne ann = property.getAnnotation( ManyToOne.class );
-
-			//check validity
-			if ( property.isAnnotationPresent( Column.class )
-					|| property.isAnnotationPresent( Columns.class ) ) {
-				throw new AnnotationException( "@Column(s) not allowed on a @ManyToOne property: "
-						+ StringHelper.qualify( propertyHolder.getPath(), inferredData.getPropertyName() ) );
-			}
-
-			Cascade hibernateCascade = property.getAnnotation( Cascade.class );
-			NotFound notFound = property.getAnnotation( NotFound.class );
-			boolean ignoreNotFound = notFound != null && notFound.action().equals( NotFoundAction.IGNORE );
-			OnDelete onDeleteAnn = property.getAnnotation( OnDelete.class );
-			boolean onDeleteCascade = onDeleteAnn != null && OnDeleteAction.CASCADE.equals( onDeleteAnn.action() );
-			JoinTable assocTable = property.getAnnotation( JoinTable.class );
-			if ( assocTable != null ) {
-				Join join = propertyHolder.addJoin( assocTable, false );
-				for ( Ejb3JoinColumn joinColumn : joinColumns ) {
-					joinColumn.setSecondaryTableName( join.getTable().getName() );
-				}
-			}
-			bindManyToOne(
-					getCascadeStrategy( ann.cascade(), hibernateCascade ),
-					joinColumns,
-					ann.optional(),
-					ignoreNotFound, onDeleteCascade,
-					mappings.getReflectionManager().toXClass( ann.targetEntity() ),
-					propertyHolder,
-					inferredData, false, isIdentifierMapper, inSecondPass, mappings
-			);
-		}
-		else if ( property.isAnnotationPresent( OneToOne.class ) ) {
-			OneToOne ann = property.getAnnotation( OneToOne.class );
-
-			//check validity
-			if ( property.isAnnotationPresent( Column.class )
-					|| property.isAnnotationPresent( Columns.class ) ) {
-				throw new AnnotationException( "@Column(s) not allowed on a @OneToOne property: "
-						+ StringHelper.qualify( propertyHolder.getPath(), inferredData.getPropertyName() ) );
-			}
-
-			//FIXME support a proper PKJCs
-			boolean trueOneToOne = property.isAnnotationPresent( PrimaryKeyJoinColumn.class )
-					|| property.isAnnotationPresent( PrimaryKeyJoinColumns.class );
-			Cascade hibernateCascade = property.getAnnotation( Cascade.class );
-			NotFound notFound = property.getAnnotation( NotFound.class );
-			boolean ignoreNotFound = notFound != null && notFound.action().equals( NotFoundAction.IGNORE );
-			OnDelete onDeleteAnn = property.getAnnotation( OnDelete.class );
-			boolean onDeleteCascade = onDeleteAnn != null && OnDeleteAction.CASCADE.equals( onDeleteAnn.action() );
-			JoinTable assocTable = property.getAnnotation( JoinTable.class );
-			if ( assocTable != null ) {
-				Join join = propertyHolder.addJoin( assocTable, false );
-				for ( Ejb3JoinColumn joinColumn : joinColumns ) {
-					joinColumn.setSecondaryTableName( join.getTable().getName() );
-				}
-			}
-			bindOneToOne(
-					getCascadeStrategy( ann.cascade(), hibernateCascade ),
-					joinColumns,
-					ann.optional(),
-					getFetchMode( ann.fetch() ),
-					ignoreNotFound, onDeleteCascade,
-					mappings.getReflectionManager().toXClass( ann.targetEntity() ),
-					propertyHolder,
-					inferredData, ann.mappedBy(), trueOneToOne, isIdentifierMapper, inSecondPass, mappings
-			);
-		}
-		else if ( property.isAnnotationPresent( OneToMany.class )
-				|| property.isAnnotationPresent( ManyToMany.class )
-				|| property.isAnnotationPresent( CollectionOfElements.class ) ) {
-			OneToMany oneToManyAnn = property.getAnnotation( OneToMany.class );
-			ManyToMany manyToManyAnn = property.getAnnotation( ManyToMany.class );
-			CollectionOfElements collectionOfElementsAnn = property.getAnnotation( CollectionOfElements.class );
-			org.hibernate.annotations.IndexColumn indexAnn = property.getAnnotation(
-					org.hibernate.annotations.IndexColumn.class
-			);
-			JoinTable assocTable = property.getAnnotation( JoinTable.class );
-
-			IndexColumn indexColumn = IndexColumn.buildColumnFromAnnotation(
-					indexAnn, propertyHolder, inferredData, mappings
-			);
-			CollectionBinder collectionBinder = CollectionBinder.getCollectionBinder(
-					propertyHolder.getEntityName(),
-					property,
-					!indexColumn.isImplicit()
-			);
-			collectionBinder.setIndexColumn( indexColumn );
-			MapKey mapKeyAnn = property.getAnnotation( MapKey.class );
-			collectionBinder.setMapKey( mapKeyAnn );
-			collectionBinder.setPropertyName( inferredData.getPropertyName() );
-			BatchSize batchAnn = property.getAnnotation( BatchSize.class );
-			collectionBinder.setBatchSize( batchAnn );
-			javax.persistence.OrderBy ejb3OrderByAnn = property.getAnnotation( javax.persistence.OrderBy.class );
-			OrderBy orderByAnn = property.getAnnotation( OrderBy.class );
-			collectionBinder.setEjb3OrderBy( ejb3OrderByAnn );
-			collectionBinder.setSqlOrderBy( orderByAnn );
-			Sort sortAnn = property.getAnnotation( Sort.class );
-			collectionBinder.setSort( sortAnn );
-			Cache cachAnn = property.getAnnotation( Cache.class );
-			collectionBinder.setCache( cachAnn );
-			collectionBinder.setPropertyHolder( propertyHolder );
-			Cascade hibernateCascade = property.getAnnotation( Cascade.class );
-			NotFound notFound = property.getAnnotation( NotFound.class );
-			boolean ignoreNotFound = notFound != null && notFound.action().equals( NotFoundAction.IGNORE );
-			collectionBinder.setIgnoreNotFound( ignoreNotFound );
-			collectionBinder.setCollectionType( inferredData.getProperty().getElementClass() );
-			collectionBinder.setMappings( mappings );
-			collectionBinder.setPropertyAccessorName( inferredData.getDefaultAccess() );
-
-			Ejb3Column[] elementColumns = null;
-			PropertyData virtualProperty = new WrappedInferredData( inferredData, "element" );
-			if ( property.isAnnotationPresent( Column.class ) || property.isAnnotationPresent(
-					Formula.class
-			) ) {
-				Column ann = property.getAnnotation( Column.class );
-				Formula formulaAnn = property.getAnnotation( Formula.class );
-				elementColumns = Ejb3Column.buildColumnFromAnnotation(
-						new Column[]{ann},
-						formulaAnn,
-						nullability,
-						propertyHolder,
-						virtualProperty,
-						entityBinder.getSecondaryTables(),
-						mappings
-				);
-			}
-			else if ( property.isAnnotationPresent( Columns.class ) ) {
-				Columns anns = property.getAnnotation( Columns.class );
-				elementColumns = Ejb3Column.buildColumnFromAnnotation(
-						anns.columns(), null, nullability, propertyHolder, virtualProperty,
-						entityBinder.getSecondaryTables(), mappings
-				);
-			}
-			else {
-				elementColumns = Ejb3Column.buildColumnFromAnnotation(
-						null,
-						null,
-						nullability,
-						propertyHolder,
-						virtualProperty,
-						entityBinder.getSecondaryTables(),
-						mappings
-				);
-			}
-
-			org.hibernate.annotations.MapKey hibMapKeyAnn = property.getAnnotation(
-					org.hibernate.annotations.MapKey.class
-			);
-			PropertyData mapKeyVirtualProperty = new WrappedInferredData( inferredData, "mapkey" );
-			Ejb3Column[] mapColumns = Ejb3Column.buildColumnFromAnnotation(
-					hibMapKeyAnn != null && hibMapKeyAnn.columns().length > 0 ?
-							hibMapKeyAnn.columns() :
-							null,
-					null,
-					Nullability.FORCED_NOT_NULL,
-					propertyHolder,
-					mapKeyVirtualProperty,
-					entityBinder.getSecondaryTables(),
-					mappings
-			);
-			collectionBinder.setMapKeyColumns( mapColumns );
-
-			MapKeyManyToMany mapKeyManyToMany = property.getAnnotation( MapKeyManyToMany.class );
-			Ejb3JoinColumn[] mapJoinColumns = Ejb3JoinColumn.buildJoinColumns(
-					mapKeyManyToMany != null ?
-							mapKeyManyToMany.joinColumns() :
-							null,
-					null, entityBinder.getSecondaryTables(),
-					propertyHolder, mapKeyVirtualProperty.getPropertyName(), mappings
-			);
-			collectionBinder.setMapKeyManyToManyColumns( mapJoinColumns );
-
-			//potential element
-			collectionBinder.setEmbedded( property.isAnnotationPresent( Embedded.class ) );
-			collectionBinder.setElementColumns( elementColumns );
-			collectionBinder.setProperty( property );
-
-			if ( oneToManyAnn != null && manyToManyAnn != null ) {
-				throw new AnnotationException(
-						"@OneToMany and @ManyToMany on the same property is not allowed: "
-								+ propertyHolder.getEntityName() + "." + inferredData.getPropertyName()
-				);
-			}
-			String mappedBy = null;
-			if ( oneToManyAnn != null ) {
-				for ( Ejb3JoinColumn column : joinColumns ) {
-					if ( column.isSecondary() ) {
-						throw new NotYetImplementedException( "Collections having FK in secondary table" );
-					}
-				}
-				collectionBinder.setFkJoinColumns( joinColumns );
-				mappedBy = oneToManyAnn.mappedBy();
-				collectionBinder.setTargetEntity(
-						mappings.getReflectionManager().toXClass( oneToManyAnn.targetEntity() )
-				);
-				collectionBinder.setCascadeStrategy( getCascadeStrategy( oneToManyAnn.cascade(), hibernateCascade ) );
-				collectionBinder.setOneToMany( true );
-			}
-			else if ( collectionOfElementsAnn != null ) {
-				for ( Ejb3JoinColumn column : joinColumns ) {
-					if ( column.isSecondary() ) {
-						throw new NotYetImplementedException( "Collections having FK in secondary table" );
-					}
-				}
-				collectionBinder.setFkJoinColumns( joinColumns );
-				mappedBy = "";
-				collectionBinder.setTargetEntity(
-						mappings.getReflectionManager().toXClass( collectionOfElementsAnn.targetElement() )
-				);
-				//collectionBinder.setCascadeStrategy( getCascadeStrategy( embeddedCollectionAnn.cascade(), hibernateCascade ) );
-				collectionBinder.setOneToMany( true );
-			}
-			else if ( manyToManyAnn != null ) {
-				mappedBy = manyToManyAnn.mappedBy();
-				collectionBinder.setTargetEntity(
-						mappings.getReflectionManager().toXClass( manyToManyAnn.targetEntity() )
-				);
-				collectionBinder.setCascadeStrategy( getCascadeStrategy( manyToManyAnn.cascade(), hibernateCascade ) );
-				collectionBinder.setOneToMany( false );
-			}
-			collectionBinder.setMappedBy( mappedBy );
-			bindJoinedTableAssociation(
-					assocTable, mappings, entityBinder, collectionBinder, propertyHolder, inferredData, mappedBy
-			);
-
-			OnDelete onDeleteAnn = property.getAnnotation( OnDelete.class );
-			boolean onDeleteCascade = onDeleteAnn != null && OnDeleteAction.CASCADE.equals( onDeleteAnn.action() );
-			collectionBinder.setCascadeDeleteEnabled( onDeleteCascade );
-			if ( isIdentifierMapper ) {
-				collectionBinder.setInsertable( false );
-				collectionBinder.setUpdatable( false );
-			}
-			if ( property.isAnnotationPresent( CollectionId.class ) ) { //do not compute the generators unless necessary
-				HashMap<String, IdGenerator> localGenerators = (HashMap<String, IdGenerator>) classGenerators.clone();
-				localGenerators.putAll( buildLocalGenerators( property, mappings ) );
-				collectionBinder.setLocalGenerators( localGenerators );
-
-			}
-			collectionBinder.bind();
-
-		}
-		else {
-			//define whether the type is a component or not
-			boolean isComponent = false;
-			Embeddable embeddableAnn = (Embeddable) returnedClass.getAnnotation( Embeddable.class );
-			Embedded embeddedAnn = (Embedded) property.getAnnotation( Embedded.class );
-			isComponent = embeddedAnn != null || embeddableAnn != null;
-
-			if ( isComponent ) {
-				//process component object
-				//boolean propertyAccess = true;
-				//if ( embeddableAnn != null && embeddableAnn.access() == AccessType.FIELD ) propertyAccess = false;
-				boolean propertyAnnotated = entityBinder.isPropertyAnnotated( property );
-				String propertyAccessor = entityBinder.getPropertyAccessor( property );
-				bindComponent(
-						inferredData, propertyHolder, propertyAnnotated, propertyAccessor, entityBinder,
-						isIdentifierMapper,
-						mappings, isComponentEmbedded
-				);
-			}
-			else {
-				//provide the basic property mapping
-				boolean optional = true;
-				boolean lazy = false;
-				if ( property.isAnnotationPresent( Basic.class ) ) {
-					Basic ann = property.getAnnotation( Basic.class );
-					optional = ann.optional();
-					lazy = ann.fetch() == FetchType.LAZY;
-				}
-				//implicit type will check basic types and Serializable classes
-				if ( !optional && nullability != Nullability.FORCED_NULL ) {
-					//force columns to not null
-					for ( Ejb3Column col : columns ) {
-						col.forceNotNull();
-					}
-				}
-
-				PropertyBinder propBinder = new PropertyBinder();
-				propBinder.setName( inferredData.getPropertyName() );
-				propBinder.setReturnedClassName( inferredData.getTypeName() );
-				propBinder.setLazy( lazy );
-				propBinder.setPropertyAccessorName( inferredData.getDefaultAccess() );
-				propBinder.setColumns( columns );
-				propBinder.setHolder( propertyHolder );
-				propBinder.setProperty( property );
-				propBinder.setReturnedClass( inferredData.getPropertyClass() );
-				propBinder.setMappings( mappings );
-				if ( isIdentifierMapper ) {
-					propBinder.setInsertable( false );
-					propBinder.setUpdatable( false );
-				}
-				propBinder.bind();
-			}
-		}
-		//init index
-		//process indexes after everything: in second pass, many to one has to be done before indexes
-		Index index = property.getAnnotation( Index.class );
-		if ( index != null ) {
-			if ( joinColumns != null ) {
-				for ( Ejb3Column column : joinColumns ) {
-					column.addIndex( index, inSecondPass );
-				}
-			}
-			else {
-				for ( Ejb3Column column : columns ) {
-					column.addIndex( index, inSecondPass );
-				}
-			}
-		}
-	}
-
-	//TODO move that to collection binder?
-	private static void bindJoinedTableAssociation(
-			JoinTable joinTableAnn, ExtendedMappings mappings, EntityBinder entityBinder,
-			CollectionBinder collectionBinder, PropertyHolder propertyHolder, PropertyData inferredData,
-			String mappedBy
-	) {
-		TableBinder associationTableBinder = new TableBinder();
-		JoinColumn[] annJoins;
-		JoinColumn[] annInverseJoins;
-		if ( joinTableAnn != null ) {
-			collectionBinder.setExplicitAssociationTable( true );
-			if ( !BinderHelper.isDefault( joinTableAnn.schema() ) )
-				associationTableBinder.setSchema( joinTableAnn.schema() );
-			if ( !BinderHelper.isDefault( joinTableAnn.catalog() ) )
-				associationTableBinder.setCatalog( joinTableAnn.catalog() );
-			if ( !BinderHelper.isDefault( joinTableAnn.name() ) ) associationTableBinder.setName( joinTableAnn.name() );
-			associationTableBinder.setUniqueConstraints( joinTableAnn.uniqueConstraints() );
-
-			//set check constaint in the second pass
-
-			JoinColumn[] joins = joinTableAnn.joinColumns();
-
-			if ( joins.length == 0 ) {
-				annJoins = null;
-			}
-			else {
-				annJoins = joins;
-			}
-
-			JoinColumn[] inverseJoins = joinTableAnn.inverseJoinColumns();
-
-			if ( inverseJoins.length == 0 ) {
-				annInverseJoins = null;
-			}
-			else {
-				annInverseJoins = inverseJoins;
-			}
-		}
-		else {
-			annJoins = null;
-			annInverseJoins = null;
-		}
-		Ejb3JoinColumn[] joinColumns = Ejb3JoinColumn.buildJoinTableJoinColumns(
-				annJoins, entityBinder.getSecondaryTables(), propertyHolder, inferredData.getPropertyName(), mappedBy,
-				mappings
-		);
-		Ejb3JoinColumn[] inverseJoinColumns = Ejb3JoinColumn.buildJoinTableJoinColumns(
-				annInverseJoins, entityBinder.getSecondaryTables(), propertyHolder, inferredData.getPropertyName(),
-				mappedBy, mappings
-		);
-		associationTableBinder.setMappings( mappings );
-		collectionBinder.setTableBinder( associationTableBinder );
-		collectionBinder.setJoinColumns( joinColumns );
-		collectionBinder.setInverseJoinColumns( inverseJoinColumns );
-	}
-
-	private static void bindComponent(
-			PropertyData inferredData,
-			PropertyHolder propertyHolder,
-			boolean propertyAnnotated,
-			String propertyAccessor, EntityBinder entityBinder,
-			boolean isIdentifierMapper,
-			ExtendedMappings mappings, boolean isComponentEmbedded
-	) {
-		Component comp = fillComponent(
-				propertyHolder, inferredData, propertyAnnotated, propertyAccessor, true, entityBinder,
-				isComponentEmbedded, isIdentifierMapper,
-				false, mappings
-		);
-		XProperty property = inferredData.getProperty();
-		setupComponentTuplizer( property, comp );
-
-		PropertyBinder binder = new PropertyBinder();
-		binder.setName( inferredData.getPropertyName() );
-		binder.setValue( comp );
-		binder.setProperty( inferredData.getProperty() );
-		binder.setPropertyAccessorName( inferredData.getDefaultAccess() );
-		Property prop = binder.make();
-		propertyHolder.addProperty( prop );
-	}
-
-	public static Component fillComponent(
-			PropertyHolder propertyHolder, PropertyData inferredData,
-			boolean propertyAnnotated, String propertyAccessor, boolean isNullable,
-			EntityBinder entityBinder,
-			boolean isComponentEmbedded, boolean isIdentifierMapper, boolean inSecondPass, ExtendedMappings mappings
-	) {
-		/**
-		 * inSecondPass can only be used to apply right away the second pass of a composite-element
-		 * Because it's a value type, there is no bidirectional association, hence second pass
-		 * ordering does not matter
-		 */
-		Component comp = new Component( propertyHolder.getPersistentClass() );
-		comp.setEmbedded( isComponentEmbedded );
-		//yuk
-		comp.setTable( propertyHolder.getTable() );
-		if ( !isIdentifierMapper ) {
-			comp.setComponentClassName( inferredData.getClassOrElementName() );
-		}
-		else {
-			comp.setComponentClassName( comp.getOwner().getClassName() );
-		}
-		comp.setNodeName( inferredData.getPropertyName() );
-		String subpath = StringHelper.qualify( propertyHolder.getPath(), inferredData.getPropertyName() );
-		log.debug( "Binding component with path: " + subpath );
-		PropertyHolder subHolder = PropertyHolderBuilder.buildPropertyHolder(
-				comp, subpath,
-				inferredData, propertyHolder, mappings
-		);
-		List<PropertyData> classElements = new ArrayList<PropertyData>();
-		XClass returnedClassOrElement = inferredData.getClassOrElement();
-		addElementsOfAClass(
-				classElements,
-				subHolder,
-				propertyAnnotated,
-				propertyAccessor, returnedClassOrElement, mappings
-		);
-		//add elements of the embeddable superclass
-		XClass superClass = inferredData.getPropertyClass().getSuperclass();
-		while ( superClass != null && superClass.isAnnotationPresent( MappedSuperclass.class ) ) {
-			//FIXME: proper support of typevariables incl var resolved at upper levels
-			addElementsOfAClass(
-					classElements,
-					subHolder,
-					entityBinder.isPropertyAnnotated( superClass ),
-					propertyAccessor, superClass, mappings
-			);
-			superClass = superClass.getSuperclass();
-		}
-		for ( PropertyData propertyAnnotatedElement : classElements ) {
-			processElementAnnotations(
-					subHolder, isNullable ?
-					Nullability.NO_CONSTRAINT :
-					Nullability.FORCED_NOT_NULL,
-					propertyAnnotatedElement.getProperty(), propertyAnnotatedElement,
-					new HashMap<String, IdGenerator>(), entityBinder, isIdentifierMapper, isComponentEmbedded,
-					inSecondPass, mappings
-			);
-		}
-		return comp;
-	}
-
-	private static void bindId(
-			String generatorType, String generatorName,
-			PropertyData inferredData, Ejb3Column[] columns, PropertyHolder propertyHolder,
-			Map<String, IdGenerator> localGenerators,
-			boolean isComposite,
-			boolean isPropertyAnnotated,
-			String propertyAccessor, EntityBinder entityBinder, Type typeAnn, boolean isEmbedded,
-			boolean isIdentifierMapper, ExtendedMappings mappings
-	) {
-		/*
-		 * Fill simple value and property since and Id is a property
-		 */
-		PersistentClass persistentClass = propertyHolder.getPersistentClass();
-		if ( !( persistentClass instanceof RootClass ) ) {
-			throw new AnnotationException(
-					"Unable to define/override @Id(s) on a subclass: "
-							+ propertyHolder.getEntityName()
-			);
-		}
-		RootClass rootClass = (RootClass) persistentClass;
-		String persistentClassName = rootClass == null ?
-				null :
-				rootClass.getClassName();
-		SimpleValue id;
-		if ( isComposite ) {
-			id = fillComponent(
-					propertyHolder, inferredData, isPropertyAnnotated, propertyAccessor,
-					false, entityBinder, isEmbedded, isIdentifierMapper, false, mappings
-			);
-			Component componentId = (Component) id;
-			componentId.setKey( true );
-			if ( componentId.getPropertySpan() == 0 ) {
-				throw new AnnotationException( componentId.getComponentClassName() + " has no persistent id property" );
-			}
-			//tuplizers
-			XProperty property = inferredData.getProperty();
-			setupComponentTuplizer( property, componentId );
-		}
-		else {
-			for ( Ejb3Column column : columns ) {
-				column.forceNotNull(); //this is an id
-			}
-			SimpleValueBinder value = new SimpleValueBinder();
-			value.setPropertyName( inferredData.getPropertyName() );
-			value.setReturnedClassName( inferredData.getTypeName() );
-			value.setColumns( columns );
-			value.setPersistentClassName( persistentClassName );
-			value.setMappings( mappings );
-			value.setExplicitType( typeAnn );
-			id = value.make();
-		}
-		rootClass.setIdentifier( id );
-		BinderHelper.makeIdGenerator( id, generatorType, generatorName, mappings, localGenerators );
-		if ( isEmbedded ) {
-			rootClass.setEmbeddedIdentifier( inferredData.getPropertyClass() == null );
-		}
-		else {
-			PropertyBinder binder = new PropertyBinder();
-			binder.setName( inferredData.getPropertyName() );
-			binder.setValue( id );
-			binder.setPropertyAccessorName( inferredData.getDefaultAccess() );
-			binder.setProperty( inferredData.getProperty() );
-			Property prop = binder.make();
-			rootClass.setIdentifierProperty( prop );
-		}
-	}
-
-	private static void setupComponentTuplizer(XProperty property, Component component) {
-		if ( property == null ) return;
-		if ( property.isAnnotationPresent( Tuplizers.class ) ) {
-			for ( Tuplizer tuplizer : property.getAnnotation( Tuplizers.class ).value() ) {
-				EntityMode mode = EntityMode.parse( tuplizer.entityMode() );
-				component.addTuplizer( mode, tuplizer.impl().getName() );
-			}
-		}
-		if ( property.isAnnotationPresent( Tuplizer.class ) ) {
-			Tuplizer tuplizer = property.getAnnotation( Tuplizer.class );
-			EntityMode mode = EntityMode.parse( tuplizer.entityMode() );
-			component.addTuplizer( mode, tuplizer.impl().getName() );
-		}
-	}
-
-	private static void bindManyToOne(
-			String cascadeStrategy, Ejb3JoinColumn[] columns, boolean optional,
-			boolean ignoreNotFound, boolean cascadeOnDelete,
-			XClass targetEntity, PropertyHolder propertyHolder,
-			PropertyData inferredData, boolean unique, boolean isIdentifierMapper, boolean inSecondPass,
-			ExtendedMappings mappings
-	) {
-		//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, mappings ) ) {
-			value.setReferencedEntityName( inferredData.getClassOrElementName() );
-		}
-		else {
-			value.setReferencedEntityName( targetEntity.getName() );
-		}
-		defineFetchingStrategy( value, inferredData.getProperty() );
-		//value.setFetchMode( fetchMode );
-		value.setIgnoreNotFound( ignoreNotFound );
-		value.setCascadeDeleteEnabled( cascadeOnDelete );
-		//value.setLazy( fetchMode != FetchMode.JOIN );
-		if ( !optional ) {
-			for ( Ejb3JoinColumn column : columns ) {
-				column.setNullable( false );
-			}
-		}
-		value.setTypeName( inferredData.getClassOrElementName() );
-		final String propertyName = inferredData.getPropertyName();
-		value.setTypeUsingReflection( propertyHolder.getClassName(), propertyName );
-
-		ForeignKey fk = inferredData.getProperty().getAnnotation( ForeignKey.class );
-		String fkName = fk != null ?
-				fk.name() :
-				"";
-		if ( !BinderHelper.isDefault( fkName ) ) value.setForeignKeyName( fkName );
-
-		String path = propertyHolder.getPath() + "." + propertyName;
-		FkSecondPass secondPass = new FkSecondPass(
-				value, columns,
-				!optional && unique, //cannot have nullabe and unique on certain DBs like Derby
-				propertyHolder.getEntityOwnerClassName(),
-				path, mappings
-		);
-		if ( inSecondPass ) {
-			secondPass.doSecondPass( mappings.getClasses() );
-		}
-		else {
-			mappings.addSecondPass(
-					secondPass
-			);
-		}
-		Ejb3Column.checkPropertyConsistency( columns, propertyHolder.getEntityName() + propertyName );
-		PropertyBinder binder = new PropertyBinder();
-		binder.setName( propertyName );
-		binder.setValue( value );
-		//binder.setCascade(cascadeStrategy);
-		if ( isIdentifierMapper ) {
-			binder.setInsertable( false );
-			binder.setInsertable( false );
-		}
-		else {
-			binder.setInsertable( columns[0].isInsertable() );
-			binder.setUpdatable( columns[0].isUpdatable() );
-		}
-		binder.setPropertyAccessorName( inferredData.getDefaultAccess() );
-		binder.setCascade( cascadeStrategy );
-		Property prop = binder.make();
-		//composite FK columns are in the same table so its OK
-		propertyHolder.addProperty( prop, columns );
-	}
-
-	protected static void defineFetchingStrategy(ToOne toOne, XProperty property) {
-		LazyToOne lazy = property.getAnnotation( LazyToOne.class );
-		Fetch fetch = property.getAnnotation( Fetch.class );
-		ManyToOne manyToOne = property.getAnnotation( ManyToOne.class );
-		OneToOne oneToOne = property.getAnnotation( OneToOne.class );
-		FetchType fetchType;
-		if ( manyToOne != null ) {
-			fetchType = manyToOne.fetch();
-		}
-		else if ( oneToOne != null ) {
-			fetchType = oneToOne.fetch();
-		}
-		else {
-			throw new AssertionFailure(
-					"Define fetch strategy on a property not annotated with @OneToMany nor @OneToOne"
-			);
-		}
-		if ( lazy != null ) {
-			toOne.setLazy( !( lazy.value() == LazyToOneOption.FALSE ) );
-			toOne.setUnwrapProxy( ( lazy.value() == LazyToOneOption.NO_PROXY ) );
-		}
-		else {
-			toOne.setLazy( fetchType == FetchType.LAZY );
-			toOne.setUnwrapProxy( false );
-		}
-		if ( fetch != null ) {
-			if ( fetch.value() == org.hibernate.annotations.FetchMode.JOIN ) {
-				toOne.setFetchMode( FetchMode.JOIN );
-				toOne.setLazy( false );
-				toOne.setUnwrapProxy( false );
-			}
-			else if ( fetch.value() == org.hibernate.annotations.FetchMode.SELECT ) {
-				toOne.setFetchMode( FetchMode.SELECT );
-			}
-			else if ( fetch.value() == org.hibernate.annotations.FetchMode.SUBSELECT ) {
-				throw new AnnotationException( "Use of FetchMode.SUBSELECT not allowed on ToOne associations" );
-			}
-			else {
-				throw new AssertionFailure( "Unknown FetchMode: " + fetch.value() );
-			}
-		}
-		else {
-			toOne.setFetchMode( getFetchMode( fetchType ) );
-		}
-	}
-
-	private static void bindOneToOne(
-			String cascadeStrategy,
-			Ejb3JoinColumn[] joinColumns,
-			boolean optional,
-			FetchMode fetchMode,
-			boolean ignoreNotFound,
-			boolean cascadeOnDelete,
-			XClass targetEntity,
-			PropertyHolder propertyHolder,
-			PropertyData inferredData, String mappedBy,
-			boolean trueOneToOne,
-			boolean isIdentifierMapper, boolean inSecondPass, ExtendedMappings mappings
-	) {
-		//column.getTable() => persistentClass.getTable()
-		final String propertyName = inferredData.getPropertyName();
-		log.debug( "Fetching " + propertyName + " with " + fetchMode );
-		boolean mapToPK = true;
-		if ( !trueOneToOne ) {
-			//try to find a hidden true one to one (FK == PK columns)
-			Iterator idColumns = propertyHolder.getIdentifier().getColumnIterator();
-			List<String> idColumnNames = new ArrayList<String>();
-			org.hibernate.mapping.Column currentColumn;
-			while ( idColumns.hasNext() ) {
-				currentColumn = (org.hibernate.mapping.Column) idColumns.next();
-				idColumnNames.add( currentColumn.getName() );
-			}
-			for ( Ejb3JoinColumn col : joinColumns ) {
-				if ( !idColumnNames.contains( col.getMappingColumn().getName() ) ) {
-					mapToPK = false;
-					break;
-				}
-			}
-		}
-		if ( trueOneToOne || mapToPK || !BinderHelper.isDefault( mappedBy ) ) {
-			//is a true one-to-one
-			//FIXME referencedColumnName ignored => ordering may fail.
-			OneToOneSecondPass secondPass = new OneToOneSecondPass(
-					mappedBy,
-					propertyHolder.getEntityName(),
-					propertyName,
-					propertyHolder, inferredData, targetEntity, ignoreNotFound, cascadeOnDelete,
-					optional, cascadeStrategy, joinColumns, mappings
-			);
-			if ( inSecondPass ) {
-				secondPass.doSecondPass( mappings.getClasses() );
-			}
-			else {
-				mappings.addSecondPass(
-						secondPass, BinderHelper.isDefault( mappedBy )
-				);
-			}
-		}
-		else {
-			//has a FK on the table
-			bindManyToOne(
-					cascadeStrategy, joinColumns, optional, ignoreNotFound, cascadeOnDelete,
-					targetEntity,
-					propertyHolder, inferredData, true, isIdentifierMapper, inSecondPass, mappings
-			);
-		}
-	}
-
-	private static String generatorType(GenerationType generatorEnum) {
-		switch (generatorEnum) {
-			case IDENTITY:
-				return "identity";
-			case AUTO:
-				return "native";
-			case TABLE:
-				return MultipleHiLoPerTableGenerator.class.getName();
-			case SEQUENCE:
-				return "seqhilo";
-		}
-		throw new AssertionFailure( "Unknown GeneratorType: " + generatorEnum );
-	}
-
-	private static EnumSet<CascadeType> convertToHibernateCascadeType(javax.persistence.CascadeType[] ejbCascades) {
-		EnumSet<CascadeType> hibernateCascadeSet = EnumSet.noneOf( CascadeType.class );
-		if ( ejbCascades != null && ejbCascades.length > 0 ) {
-			for ( javax.persistence.CascadeType cascade : ejbCascades ) {
-				switch (cascade) {
-					case ALL:
-						hibernateCascadeSet.add( CascadeType.ALL );
-						break;
-					case PERSIST:
-						hibernateCascadeSet.add( CascadeType.PERSIST );
-						break;
-					case MERGE:
-						hibernateCascadeSet.add( CascadeType.MERGE );
-						break;
-					case REMOVE:
-						hibernateCascadeSet.add( CascadeType.REMOVE );
-						break;
-					case REFRESH:
-						hibernateCascadeSet.add( CascadeType.REFRESH );
-						break;
-				}
-			}
-		}
-
-		return hibernateCascadeSet;
-	}
-
-	private static String getCascadeStrategy(
-			javax.persistence.CascadeType[] ejbCascades, Cascade hibernateCascadeAnnotation
-	) {
-		EnumSet<CascadeType> hibernateCascadeSet = convertToHibernateCascadeType( ejbCascades );
-		CascadeType[] hibernateCascades = hibernateCascadeAnnotation == null ?
-				null :
-				hibernateCascadeAnnotation.value();
-
-		if ( hibernateCascades != null && hibernateCascades.length > 0 ) {
-			for ( CascadeType cascadeType : hibernateCascades ) {
-				hibernateCascadeSet.add( cascadeType );
-			}
-		}
-
-		StringBuilder cascade = new StringBuilder();
-		Iterator<CascadeType> cascadeType = hibernateCascadeSet.iterator();
-		while ( cascadeType.hasNext() ) {
-			switch (cascadeType.next()) {
-				case ALL:
-					cascade.append( "," ).append( "all" );
-					break;
-				case SAVE_UPDATE:
-					cascade.append( "," ).append( "save-update" );
-					break;
-				case PERSIST:
-					cascade.append( "," ).append( "persist" );
-					break;
-				case MERGE:
-					cascade.append( "," ).append( "merge" );
-					break;
-				case LOCK:
-					cascade.append( "," ).append( "lock" );
-					break;
-				case REFRESH:
-					cascade.append( "," ).append( "refresh" );
-					break;
-				case REPLICATE:
-					cascade.append( "," ).append( "replicate" );
-					break;
-				case EVICT:
-					cascade.append( "," ).append( "evict" );
-					break;
-				case DELETE:
-					cascade.append( "," ).append( "delete" );
-					break;
-				case DELETE_ORPHAN:
-					cascade.append( "," ).append( "delete-orphan" );
-					break;
-				case REMOVE:
-					cascade.append( "," ).append( "delete" );
-					break;
-			}
-		}
-		return cascade.length() > 0 ?
-				cascade.substring( 1 ) :
-				"none";
-	}
-
-	public static FetchMode getFetchMode(FetchType fetch) {
-		if ( fetch == FetchType.EAGER ) {
-			return FetchMode.JOIN;
-		}
-		else {
-			return FetchMode.SELECT;
-		}
-	}
-
-	private static HashMap<String, IdGenerator> buildLocalGenerators(XAnnotatedElement annElt, Mappings mappings) {
-		HashMap<String, IdGenerator> generators = new HashMap<String, IdGenerator>();
-		TableGenerator tabGen = annElt.getAnnotation( TableGenerator.class );
-		SequenceGenerator seqGen = annElt.getAnnotation( SequenceGenerator.class );
-		GenericGenerator genGen = annElt.getAnnotation( GenericGenerator.class );
-		if ( tabGen != null ) {
-			IdGenerator idGen = buildIdGenerator( tabGen, mappings );
-			generators.put( idGen.getName(), idGen );
-		}
-		if ( seqGen != null ) {
-			IdGenerator idGen = buildIdGenerator( seqGen, mappings );
-			generators.put( idGen.getName(), idGen );
-		}
-		if ( genGen != null ) {
-			IdGenerator idGen = buildIdGenerator( genGen, mappings );
-			generators.put( idGen.getName(), idGen );
-		}
-		return generators;
-	}
-
-	public static boolean isDefault(XClass clazz, ExtendedMappings mappings) {
-		return mappings.getReflectionManager().equals( clazz, void.class );
-	}
-
-	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,
-					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,
-						reflectionManager
-				);
-				state.hasParents = superEntityState != null;
-				final boolean nonDefault = state.type != null && !InheritanceType.SINGLE_TABLE.equals( state.type );
-				if ( superclassState.type != null ) {
-					final boolean mixingStrategy = state.type != null && !state.type.equals( superclassState.type );
-					if ( nonDefault && mixingStrategy ) {
-						log.warn(
-								"Mixing inheritance strategy in a entity hierarchy is not allowed, ignoring sub strategy in: " + clazz
-										.getName()
-						);
-					}
-					state.type = superclassState.type;
-				}
-			}
-			inheritanceStatePerClass.put( clazz, state );
-		}
-		return inheritanceStatePerClass;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/AnnotationBinder.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/AnnotationBinder.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/AnnotationBinder.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/AnnotationBinder.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,2172 @@
+//$Id$
+package org.hibernate.cfg;
+
+import java.util.ArrayList;
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+import java.util.Collections;
+import java.util.Comparator;
+import javax.persistence.Basic;
+import javax.persistence.Column;
+import javax.persistence.DiscriminatorType;
+import javax.persistence.DiscriminatorValue;
+import javax.persistence.Embeddable;
+import javax.persistence.Embedded;
+import javax.persistence.EmbeddedId;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.IdClass;
+import javax.persistence.InheritanceType;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinColumns;
+import javax.persistence.JoinTable;
+import javax.persistence.ManyToMany;
+import javax.persistence.ManyToOne;
+import javax.persistence.MapKey;
+import javax.persistence.MappedSuperclass;
+import javax.persistence.NamedNativeQueries;
+import javax.persistence.NamedNativeQuery;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
+import javax.persistence.OneToOne;
+import javax.persistence.PrimaryKeyJoinColumn;
+import javax.persistence.PrimaryKeyJoinColumns;
+import javax.persistence.SequenceGenerator;
+import javax.persistence.SqlResultSetMapping;
+import javax.persistence.SqlResultSetMappings;
+import javax.persistence.Table;
+import javax.persistence.TableGenerator;
+import javax.persistence.Transient;
+import javax.persistence.Version;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.hibernate.AnnotationException;
+import org.hibernate.AssertionFailure;
+import org.hibernate.FetchMode;
+import org.hibernate.MappingException;
+import org.hibernate.EntityMode;
+import org.hibernate.annotations.AccessType;
+import org.hibernate.annotations.BatchSize;
+import org.hibernate.annotations.Cache;
+import org.hibernate.annotations.Cascade;
+import org.hibernate.annotations.CascadeType;
+import org.hibernate.annotations.Check;
+import org.hibernate.annotations.CollectionId;
+import org.hibernate.annotations.CollectionOfElements;
+import org.hibernate.annotations.Columns;
+import org.hibernate.annotations.Fetch;
+import org.hibernate.annotations.Filter;
+import org.hibernate.annotations.FilterDef;
+import org.hibernate.annotations.FilterDefs;
+import org.hibernate.annotations.Filters;
+import org.hibernate.annotations.ForeignKey;
+import org.hibernate.annotations.Formula;
+import org.hibernate.annotations.GenericGenerator;
+import org.hibernate.annotations.LazyToOne;
+import org.hibernate.annotations.LazyToOneOption;
+import org.hibernate.annotations.MapKeyManyToMany;
+import org.hibernate.annotations.NotFound;
+import org.hibernate.annotations.NotFoundAction;
+import org.hibernate.annotations.OnDelete;
+import org.hibernate.annotations.OnDeleteAction;
+import org.hibernate.annotations.OrderBy;
+import org.hibernate.annotations.ParamDef;
+import org.hibernate.annotations.Parameter;
+import org.hibernate.annotations.Parent;
+import org.hibernate.annotations.Proxy;
+import org.hibernate.annotations.Sort;
+import org.hibernate.annotations.Type;
+import org.hibernate.annotations.TypeDef;
+import org.hibernate.annotations.TypeDefs;
+import org.hibernate.annotations.Where;
+import org.hibernate.annotations.Index;
+import org.hibernate.annotations.Target;
+import org.hibernate.annotations.Tuplizers;
+import org.hibernate.annotations.Tuplizer;
+import org.hibernate.cfg.annotations.CollectionBinder;
+import org.hibernate.cfg.annotations.EntityBinder;
+import org.hibernate.cfg.annotations.Nullability;
+import org.hibernate.cfg.annotations.PropertyBinder;
+import org.hibernate.cfg.annotations.QueryBinder;
+import org.hibernate.cfg.annotations.SimpleValueBinder;
+import org.hibernate.cfg.annotations.TableBinder;
+import org.hibernate.engine.FilterDefinition;
+import org.hibernate.engine.Versioning;
+import org.hibernate.id.MultipleHiLoPerTableGenerator;
+import org.hibernate.id.PersistentIdentifierGenerator;
+import org.hibernate.id.SequenceHiLoGenerator;
+import org.hibernate.id.TableHiLoGenerator;
+import org.hibernate.mapping.Component;
+import org.hibernate.mapping.DependantValue;
+import org.hibernate.mapping.IdGenerator;
+import org.hibernate.mapping.Join;
+import org.hibernate.mapping.JoinedSubclass;
+import org.hibernate.mapping.PersistentClass;
+import org.hibernate.mapping.Property;
+import org.hibernate.mapping.RootClass;
+import org.hibernate.mapping.SimpleValue;
+import org.hibernate.mapping.SingleTableSubclass;
+import org.hibernate.mapping.Subclass;
+import org.hibernate.mapping.ToOne;
+import org.hibernate.mapping.UnionSubclass;
+import org.hibernate.persister.entity.JoinedSubclassEntityPersister;
+import org.hibernate.persister.entity.SingleTableEntityPersister;
+import org.hibernate.persister.entity.UnionSubclassEntityPersister;
+import org.hibernate.annotations.common.reflection.ReflectionManager;
+import org.hibernate.annotations.common.reflection.XAnnotatedElement;
+import org.hibernate.annotations.common.reflection.XClass;
+import org.hibernate.annotations.common.reflection.XPackage;
+import org.hibernate.annotations.common.reflection.XProperty;
+import org.hibernate.type.TypeFactory;
+import org.hibernate.util.StringHelper;
+
+/**
+ * JSR 175 annotation binder
+ * Will read the annotation from classes, apply the
+ * principles of the EJB3 spec and produces the Hibernate
+ * configuration-time metamodel (the classes in the <tt>mapping</tt>
+ * package)
+ *
+ * @author Emmanuel Bernard
+ */
+public final class AnnotationBinder {
+
+	/*
+	 * Some design description
+	 * I tried to remove any link to annotation except from the 2 first level of
+	 * method call.
+	 * It'll enable to:
+	 *   - facilitate annotation overriding
+	 *   - mutualize one day xml and annotation binder (probably a dream though)
+	 *   - split this huge class in smaller mapping oriented classes
+	 *
+	 * bindSomething usually create the mapping container and is accessed by one of the 2 first level method
+	 * makeSomething usually create the mapping container and is accessed by bindSomething[else]
+	 * fillSomething take the container into parameter and fill it.
+	 *
+	 *
+	 */
+	private AnnotationBinder() {
+	}
+
+	private static final Log log = LogFactory.getLog( AnnotationBinder.class );
+
+	public static void bindDefaults(ExtendedMappings mappings) {
+		Map defaults = mappings.getReflectionManager().getDefaults();
+		{
+			List<SequenceGenerator> anns = (List<SequenceGenerator>) defaults.get( SequenceGenerator.class );
+			if ( anns != null ) {
+				for ( SequenceGenerator ann : anns ) {
+					IdGenerator idGen = buildIdGenerator( ann, mappings );
+					if ( idGen != null ) mappings.addDefaultGenerator( idGen );
+				}
+			}
+		}
+		{
+			List<TableGenerator> anns = (List<TableGenerator>) defaults.get( TableGenerator.class );
+			if ( anns != null ) {
+				for ( TableGenerator ann : anns ) {
+					IdGenerator idGen = buildIdGenerator( ann, mappings );
+					if ( idGen != null ) mappings.addDefaultGenerator( idGen );
+				}
+			}
+		}
+		{
+			List<NamedQuery> anns = (List<NamedQuery>) defaults.get( NamedQuery.class );
+			if ( anns != null ) {
+				for ( NamedQuery ann : anns ) {
+					QueryBinder.bindQuery( ann, mappings, true );
+				}
+			}
+		}
+		{
+			List<NamedNativeQuery> anns = (List<NamedNativeQuery>) defaults.get( NamedNativeQuery.class );
+			if ( anns != null ) {
+				for ( NamedNativeQuery ann : anns ) {
+					QueryBinder.bindNativeQuery( ann, mappings, true );
+				}
+			}
+		}
+		{
+			List<SqlResultSetMapping> anns = (List<SqlResultSetMapping>) defaults.get( SqlResultSetMapping.class );
+			if ( anns != null ) {
+				for ( SqlResultSetMapping ann : anns ) {
+					QueryBinder.bindSqlResultsetMapping( ann, mappings, true );
+				}
+			}
+		}
+	}
+
+	public static void bindPackage(String packageName, ExtendedMappings mappings) {
+		XPackage pckg = null;
+		try {
+			pckg = mappings.getReflectionManager().packageForName( packageName );
+		}
+		catch (ClassNotFoundException cnf) {
+			log.warn( "Package not found or wo package-info.java: " + packageName );
+			return;
+		}
+		if ( pckg.isAnnotationPresent( SequenceGenerator.class ) ) {
+			SequenceGenerator ann = pckg.getAnnotation( SequenceGenerator.class );
+			IdGenerator idGen = buildIdGenerator( ann, mappings );
+			mappings.addGenerator( idGen );
+			log.debug( "Add sequence generator with name: " + idGen.getName() );
+		}
+		if ( pckg.isAnnotationPresent( TableGenerator.class ) ) {
+			TableGenerator ann = pckg.getAnnotation( TableGenerator.class );
+			IdGenerator idGen = buildIdGenerator( ann, mappings );
+			mappings.addGenerator( idGen );
+
+		}
+		if ( pckg.isAnnotationPresent( GenericGenerator.class ) ) {
+			GenericGenerator ann = pckg.getAnnotation( GenericGenerator.class );
+			IdGenerator idGen = buildIdGenerator( ann, mappings );
+			mappings.addGenerator( idGen );
+		}
+		bindQueries( pckg, mappings );
+		bindFilterDefs( pckg, mappings );
+		bindTypeDefs( pckg, mappings );
+	}
+
+	private static void bindQueries(XAnnotatedElement annotatedElement, ExtendedMappings mappings) {
+		{
+			SqlResultSetMapping ann = annotatedElement.getAnnotation( SqlResultSetMapping.class );
+			QueryBinder.bindSqlResultsetMapping( ann, mappings, false );
+		}
+		{
+			SqlResultSetMappings ann = annotatedElement.getAnnotation( SqlResultSetMappings.class );
+			if ( ann != null ) {
+				for ( SqlResultSetMapping current : ann.value() ) {
+					QueryBinder.bindSqlResultsetMapping( current, mappings, false );
+				}
+			}
+		}
+		{
+			NamedQuery ann = annotatedElement.getAnnotation( NamedQuery.class );
+			QueryBinder.bindQuery( ann, mappings, false );
+		}
+		{
+			org.hibernate.annotations.NamedQuery ann = annotatedElement.getAnnotation(
+					org.hibernate.annotations.NamedQuery.class
+			);
+			QueryBinder.bindQuery( ann, mappings );
+		}
+		{
+			NamedQueries ann = annotatedElement.getAnnotation( NamedQueries.class );
+			QueryBinder.bindQueries( ann, mappings, false );
+		}
+		{
+			org.hibernate.annotations.NamedQueries ann = annotatedElement.getAnnotation(
+					org.hibernate.annotations.NamedQueries.class
+			);
+			QueryBinder.bindQueries( ann, mappings );
+		}
+		{
+			NamedNativeQuery ann = annotatedElement.getAnnotation( NamedNativeQuery.class );
+			QueryBinder.bindNativeQuery( ann, mappings, false );
+		}
+		{
+			org.hibernate.annotations.NamedNativeQuery ann = annotatedElement.getAnnotation(
+					org.hibernate.annotations.NamedNativeQuery.class
+			);
+			QueryBinder.bindNativeQuery( ann, mappings );
+		}
+		{
+			NamedNativeQueries ann = annotatedElement.getAnnotation( NamedNativeQueries.class );
+			QueryBinder.bindNativeQueries( ann, mappings, false );
+		}
+		{
+			org.hibernate.annotations.NamedNativeQueries ann = annotatedElement.getAnnotation(
+					org.hibernate.annotations.NamedNativeQueries.class
+			);
+			QueryBinder.bindNativeQueries( ann, mappings );
+		}
+	}
+
+	private static IdGenerator buildIdGenerator(java.lang.annotation.Annotation ann, Mappings mappings) {
+		IdGenerator idGen = new IdGenerator();
+		if ( mappings.getSchemaName() != null ) {
+			idGen.addParam( PersistentIdentifierGenerator.SCHEMA, mappings.getSchemaName() );
+		}
+		if ( mappings.getCatalogName() != null ) {
+			idGen.addParam( PersistentIdentifierGenerator.CATALOG, mappings.getCatalogName() );
+		}
+		if ( ann == null ) {
+			idGen = null;
+		}
+		else if ( ann instanceof TableGenerator ) {
+			TableGenerator tabGen = (TableGenerator) ann;
+			idGen.setName( tabGen.name() );
+			idGen.setIdentifierGeneratorStrategy( MultipleHiLoPerTableGenerator.class.getName() );
+
+			if ( !BinderHelper.isDefault( tabGen.table() ) ) {
+				idGen.addParam( MultipleHiLoPerTableGenerator.ID_TABLE, tabGen.table() );
+			}
+			if ( !BinderHelper.isDefault( tabGen.catalog() ) ) {
+				idGen.addParam( MultipleHiLoPerTableGenerator.CATALOG, tabGen.catalog() );
+			}
+			if ( !BinderHelper.isDefault( tabGen.schema() ) ) {
+				idGen.addParam( MultipleHiLoPerTableGenerator.SCHEMA, tabGen.schema() );
+			}
+			//FIXME implements uniqueconstrains
+
+			if ( !BinderHelper.isDefault( tabGen.pkColumnName() ) ) {
+				idGen.addParam( MultipleHiLoPerTableGenerator.PK_COLUMN_NAME, tabGen.pkColumnName() );
+			}
+			if ( !BinderHelper.isDefault( tabGen.valueColumnName() ) ) {
+				idGen.addParam( MultipleHiLoPerTableGenerator.VALUE_COLUMN_NAME, tabGen.valueColumnName() );
+			}
+			if ( !BinderHelper.isDefault( tabGen.pkColumnValue() ) ) {
+				idGen.addParam( MultipleHiLoPerTableGenerator.PK_VALUE_NAME, tabGen.pkColumnValue() );
+			}
+			idGen.addParam( TableHiLoGenerator.MAX_LO, String.valueOf( tabGen.allocationSize() - 1 ) );
+			log.debug( "Add table generator with name: " + idGen.getName() );
+		}
+		else if ( ann instanceof SequenceGenerator ) {
+			SequenceGenerator seqGen = (SequenceGenerator) ann;
+			idGen.setName( seqGen.name() );
+			idGen.setIdentifierGeneratorStrategy( "seqhilo" );
+
+			if ( !BinderHelper.isDefault( seqGen.sequenceName() ) ) {
+				idGen.addParam( org.hibernate.id.SequenceGenerator.SEQUENCE, seqGen.sequenceName() );
+			}
+			//FIXME: work on initialValue() through SequenceGenerator.PARAMETERS
+			if ( seqGen.initialValue() != 1 ) {
+				log.warn(
+						"Hibernate does not support SequenceGenerator.initialValue()"
+				);
+			}
+			idGen.addParam( SequenceHiLoGenerator.MAX_LO, String.valueOf( seqGen.allocationSize() - 1 ) );
+			log.debug( "Add sequence generator with name: " + idGen.getName() );
+		}
+		else if ( ann instanceof GenericGenerator ) {
+			GenericGenerator genGen = (GenericGenerator) ann;
+			idGen.setName( genGen.name() );
+			idGen.setIdentifierGeneratorStrategy( genGen.strategy() );
+			Parameter[] params = genGen.parameters();
+			for ( Parameter parameter : params ) {
+				idGen.addParam( parameter.name(), parameter.value() );
+			}
+			log.debug( "Add generic generator with name: " + idGen.getName() );
+		}
+		else {
+			throw new AssertionFailure( "Unknown Generator annotation: " + ann );
+		}
+		return idGen;
+	}
+
+	/**
+	 * Bind a class having JSR175 annotations
+	 * The subclasses <b>have to</b> be binded after its mother class
+	 */
+	public static void bindClass(
+			XClass clazzToProcess, Map<XClass, InheritanceState> inheritanceStatePerClass, ExtendedMappings mappings
+	) throws MappingException {
+		//TODO: be more strict with secondarytable allowance (not for ids, not for secondary table join columns etc)
+		InheritanceState inheritanceState = inheritanceStatePerClass.get( clazzToProcess );
+		AnnotatedClassType classType = mappings.getClassType( clazzToProcess );
+		if ( AnnotatedClassType.EMBEDDABLE_SUPERCLASS.equals( classType ) //will be processed by their subentities
+				|| AnnotatedClassType.NONE.equals( classType ) //to be ignored
+				|| AnnotatedClassType.EMBEDDABLE.equals( classType ) //allow embeddable element declaration
+				) {
+			if ( AnnotatedClassType.NONE.equals( classType )
+					&& clazzToProcess.isAnnotationPresent( org.hibernate.annotations.Entity.class ) ) {
+				log.warn("Class annotated @org.hibernate.annotations.Entity but not javax.persistence.Entity "
+						+ "(most likely a user error): " + clazzToProcess.getName() );
+			}
+			return;
+		}
+		if ( !classType.equals( AnnotatedClassType.ENTITY ) ) {
+			//TODO make this test accurate by removing the none elements artifically added
+			throw new AnnotationException(
+					"Annotated class should have a @javax.persistence.Entity, @javax.persistence.Embeddable or @javax.persistence.EmbeddedSuperclass annotation: " + clazzToProcess
+							.getName()
+			);
+		}
+		XAnnotatedElement annotatedClass = clazzToProcess;
+		if ( log.isInfoEnabled() ) log.info( "Binding entity from annotated class: " + clazzToProcess.getName() );
+		InheritanceState superEntityState =
+				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
+			if ( inheritanceState.hasParents ) {
+				throw new AssertionFailure(
+						"Subclass has to be binded after it's mother class: "
+								+ superEntityState.clazz.getName()
+				);
+			}
+		}
+		bindQueries( annotatedClass, mappings );
+		bindFilterDefs( annotatedClass, mappings );
+		bindTypeDefs( annotatedClass, mappings );
+
+		String schema = "";
+		String table = ""; //might be no @Table annotation on the annotated class
+		String catalog = "";
+		String discrimValue = null;
+		List<String[]> uniqueConstraints = new ArrayList<String[]>();
+		Ejb3DiscriminatorColumn discriminatorColumn = null;
+		Ejb3JoinColumn[] inheritanceJoinedColumns = null;
+
+		if ( annotatedClass.isAnnotationPresent( javax.persistence.Table.class ) ) {
+			javax.persistence.Table tabAnn = annotatedClass.getAnnotation( javax.persistence.Table.class );
+			table = tabAnn.name();
+			schema = tabAnn.schema();
+			catalog = tabAnn.catalog();
+			uniqueConstraints = TableBinder.buildUniqueConstraints( tabAnn.uniqueConstraints() );
+		}
+		final boolean hasJoinedColumns = inheritanceState.hasParents
+				&& InheritanceType.JOINED.equals( inheritanceState.type );
+		if ( hasJoinedColumns ) {
+			//@Inheritance(JOINED) subclass need to link back to the super entity
+			PrimaryKeyJoinColumns jcsAnn = annotatedClass.getAnnotation( PrimaryKeyJoinColumns.class );
+			boolean explicitInheritanceJoinedColumns = jcsAnn != null && jcsAnn.value().length != 0;
+			if ( explicitInheritanceJoinedColumns ) {
+				int nbrOfInhJoinedColumns = jcsAnn.value().length;
+				PrimaryKeyJoinColumn jcAnn;
+				inheritanceJoinedColumns = new Ejb3JoinColumn[nbrOfInhJoinedColumns];
+				for ( int colIndex = 0; colIndex < nbrOfInhJoinedColumns; colIndex++ ) {
+					jcAnn = jcsAnn.value()[colIndex];
+					inheritanceJoinedColumns[colIndex] = Ejb3JoinColumn.buildJoinColumn(
+							jcAnn, null, superEntity.getIdentifier(),
+							(Map<String, Join>) null, (PropertyHolder) null, mappings
+					);
+				}
+			}
+			else {
+				PrimaryKeyJoinColumn jcAnn = annotatedClass.getAnnotation( PrimaryKeyJoinColumn.class );
+				inheritanceJoinedColumns = new Ejb3JoinColumn[1];
+				inheritanceJoinedColumns[0] = Ejb3JoinColumn.buildJoinColumn(
+						jcAnn, null, superEntity.getIdentifier(),
+						(Map<String, Join>) null, (PropertyHolder) null, mappings
+				);
+			}
+			log.debug( "Subclass joined column(s) created" );
+		}
+		else {
+			if ( annotatedClass.isAnnotationPresent( javax.persistence.PrimaryKeyJoinColumns.class )
+					|| annotatedClass.isAnnotationPresent( javax.persistence.PrimaryKeyJoinColumn.class ) ) {
+				log.warn( "Root entity should not hold an PrimaryKeyJoinColum(s), will be ignored" );
+			}
+		}
+
+		if ( InheritanceType.SINGLE_TABLE.equals( inheritanceState.type ) ) {
+			javax.persistence.Inheritance inhAnn = annotatedClass.getAnnotation( javax.persistence.Inheritance.class );
+			javax.persistence.DiscriminatorColumn discAnn = annotatedClass.getAnnotation(
+					javax.persistence.DiscriminatorColumn.class
+			);
+			DiscriminatorType discriminatorType = discAnn != null ?
+					discAnn.discriminatorType() :
+					DiscriminatorType.STRING;
+
+			org.hibernate.annotations.DiscriminatorFormula discFormulaAnn = annotatedClass.getAnnotation(
+					org.hibernate.annotations.DiscriminatorFormula.class
+			);
+			if ( !inheritanceState.hasParents ) {
+				discriminatorColumn = Ejb3DiscriminatorColumn.buildDiscriminatorColumn(
+						discriminatorType, discAnn, discFormulaAnn, mappings
+				);
+			}
+			if ( discAnn != null && inheritanceState.hasParents ) {
+				log.warn(
+						"Discriminator column has to be defined in the root entity, it will be ignored in subclass: "
+								+ clazzToProcess.getName()
+				);
+			}
+			discrimValue = annotatedClass.isAnnotationPresent( DiscriminatorValue.class ) ?
+					annotatedClass.getAnnotation( DiscriminatorValue.class ).value() :
+					null;
+		}
+
+		//we now know what kind of persistent entity it is
+		PersistentClass persistentClass;
+		//create persistent class
+		if ( !inheritanceState.hasParents ) {
+			persistentClass = new RootClass();
+		}
+		else if ( InheritanceType.SINGLE_TABLE.equals( inheritanceState.type ) ) {
+			persistentClass = new SingleTableSubclass( superEntity );
+		}
+		else if ( InheritanceType.JOINED.equals( inheritanceState.type ) ) {
+			persistentClass = new JoinedSubclass( superEntity );
+		}
+		else if ( InheritanceType.TABLE_PER_CLASS.equals( inheritanceState.type ) ) {
+			persistentClass = new UnionSubclass( superEntity );
+		}
+		else {
+			throw new AssertionFailure( "Unknown inheritance type: " + inheritanceState.type );
+		}
+		Proxy proxyAnn = annotatedClass.getAnnotation( Proxy.class );
+		BatchSize sizeAnn = annotatedClass.getAnnotation( BatchSize.class );
+		Where whereAnn = annotatedClass.getAnnotation( Where.class );
+		Entity entityAnn = annotatedClass.getAnnotation( Entity.class );
+		org.hibernate.annotations.Entity hibEntityAnn = annotatedClass.getAnnotation(
+				org.hibernate.annotations.Entity.class
+		);
+		org.hibernate.annotations.Cache cacheAnn = annotatedClass.getAnnotation(
+				org.hibernate.annotations.Cache.class
+		);
+		EntityBinder entityBinder = new EntityBinder(
+				entityAnn, hibEntityAnn, clazzToProcess, persistentClass, mappings
+		);
+		entityBinder.setDiscriminatorValue( discrimValue );
+		entityBinder.setBatchSize( sizeAnn );
+		entityBinder.setProxy( proxyAnn );
+		entityBinder.setWhere( whereAnn );
+		entityBinder.setCache( cacheAnn );
+		entityBinder.setInheritanceState( inheritanceState );
+		Filter filterAnn = annotatedClass.getAnnotation( Filter.class );
+		if ( filterAnn != null ) {
+			entityBinder.addFilter( filterAnn.name(), filterAnn.condition() );
+		}
+		Filters filtersAnn = annotatedClass.getAnnotation( Filters.class );
+		if ( filtersAnn != null ) {
+			for ( Filter filter : filtersAnn.value() ) {
+				entityBinder.addFilter( filter.name(), filter.condition() );
+			}
+		}
+		entityBinder.bindEntity();
+
+		if ( inheritanceState.hasTable() ) {
+			Check checkAnn = annotatedClass.getAnnotation( Check.class );
+			String constraints = checkAnn == null ?
+					null :
+					checkAnn.constraints();
+			entityBinder.bindTable(
+					schema, catalog, table, uniqueConstraints,
+					constraints, inheritanceState.hasDenormalizedTable() ?
+					superEntity.getTable() :
+					null
+			);
+		}
+		else {
+			if ( annotatedClass.isAnnotationPresent( Table.class ) ) {
+				log.warn( "Illegal use of @Table in a subclass of a SINGLE_TABLE hierarchy: " + clazzToProcess
+						.getName() );
+			}
+		}
+//		Map<String, Column[]> columnOverride = PropertyHolderBuilder.buildHierarchyColumnOverride(
+//				clazzToProcess,
+//				persistentClass.getClassName()
+//		);
+		PropertyHolder propertyHolder = PropertyHolderBuilder.buildPropertyHolder(
+				clazzToProcess,
+				persistentClass,
+				entityBinder, mappings
+		);
+
+		javax.persistence.SecondaryTable secTabAnn = annotatedClass.getAnnotation(
+				javax.persistence.SecondaryTable.class
+		);
+		javax.persistence.SecondaryTables secTabsAnn = annotatedClass.getAnnotation(
+				javax.persistence.SecondaryTables.class
+		);
+		entityBinder.firstLevelSecondaryTablesBinding( secTabAnn, secTabsAnn );
+
+		OnDelete onDeleteAnn = annotatedClass.getAnnotation( OnDelete.class );
+		boolean onDeleteAppropriate = false;
+		if ( InheritanceType.JOINED.equals( inheritanceState.type ) && inheritanceState.hasParents ) {
+			onDeleteAppropriate = true;
+			final JoinedSubclass jsc = (JoinedSubclass) persistentClass;
+			if ( persistentClass.getEntityPersisterClass() == null ) {
+				persistentClass.getRootClass().setEntityPersisterClass( JoinedSubclassEntityPersister.class );
+			}
+			SimpleValue key = new DependantValue( jsc.getTable(), jsc.getIdentifier() );
+			jsc.setKey( key );
+			ForeignKey fk = annotatedClass.getAnnotation( ForeignKey.class );
+			if (fk != null && ! BinderHelper.isDefault( fk.name() ) ) {
+				key.setForeignKeyName( fk.name() );
+			}
+			if ( onDeleteAnn != null ) {
+				key.setCascadeDeleteEnabled( OnDeleteAction.CASCADE.equals( onDeleteAnn.action() ) );
+			}
+			else {
+				key.setCascadeDeleteEnabled( false );
+			}
+			TableBinder.bindFk( jsc.getSuperclass(), jsc, inheritanceJoinedColumns, key, false, mappings );
+			//no need to handle inSecondPass this is an Etntiy related work
+			mappings.addSecondPass( new CreateKeySecondPass( jsc ) );
+
+		}
+		else if ( InheritanceType.SINGLE_TABLE.equals( inheritanceState.type ) ) {
+			if ( inheritanceState.hasParents ) {
+				if ( persistentClass.getEntityPersisterClass() == null ) {
+					persistentClass.getRootClass().setEntityPersisterClass( SingleTableEntityPersister.class );
+				}
+			}
+			else {
+				if ( inheritanceState.hasSons || !discriminatorColumn.isImplicit() ) {
+					//need a discriminator column
+					bindDiscriminatorToPersistentClass(
+							(RootClass) persistentClass,
+							discriminatorColumn,
+							entityBinder.getSecondaryTables(),
+							propertyHolder
+					);
+					entityBinder.bindDiscriminatorValue();//bind it again since the type might have changed
+				}
+			}
+		}
+		else if ( InheritanceType.TABLE_PER_CLASS.equals( inheritanceState.type ) ) {
+			if ( inheritanceState.hasParents ) {
+				if ( persistentClass.getEntityPersisterClass() == null ) {
+					persistentClass.getRootClass().setEntityPersisterClass( UnionSubclassEntityPersister.class );
+				}
+			}
+		}
+		if ( onDeleteAnn != null && !onDeleteAppropriate ) {
+			log.warn(
+					"Inapropriate use of @OnDelete on entity, annotation ignored: " + propertyHolder.getEntityName()
+			);
+		}
+
+		//try to find class level generators
+		HashMap<String, IdGenerator> classGenerators = buildLocalGenerators( annotatedClass, mappings );
+
+		// check properties
+		List<PropertyData> elements =
+				getElementsToProcess(
+						clazzToProcess, inheritanceStatePerClass, propertyHolder, entityBinder, mappings
+				);
+		if ( elements == null ) {
+			throw new AnnotationException( "No identifier specified for entity: " + propertyHolder.getEntityName() );
+		}
+		final boolean subclassAndSingleTableStrategy = inheritanceState.type == InheritanceType.SINGLE_TABLE
+				&& inheritanceState.hasParents;
+		//process idclass if any
+		Set<String> idProperties = new HashSet<String>();
+		IdClass idClass = null;
+		if ( !inheritanceState.hasParents ) {
+			//look for idClass
+			XClass current = inheritanceState.clazz;
+			InheritanceState state = inheritanceState;
+			do {
+				current = state.clazz;
+				if ( current.isAnnotationPresent( IdClass.class ) ) {
+					idClass = current.getAnnotation( IdClass.class );
+					break;
+				}
+				state = InheritanceState.getSuperclassInheritanceState(
+						current, inheritanceStatePerClass, mappings.getReflectionManager()
+				);
+			}
+			while ( state != null );
+		}
+		if ( idClass != null ) {
+			XClass compositeClass = mappings.getReflectionManager().toXClass( idClass.value() );
+			boolean isComponent = true;
+			boolean propertyAnnotated = entityBinder.isPropertyAnnotated( compositeClass );
+			String propertyAccessor = entityBinder.getPropertyAccessor( compositeClass );
+			String generatorType = "assigned";
+			String generator = BinderHelper.ANNOTATION_STRING_DEFAULT;
+			PropertyData inferredData = new PropertyPreloadedData(
+					entityBinder.getPropertyAccessor(), "id", compositeClass
+			);
+			HashMap<String, IdGenerator> localGenerators = new HashMap<String, IdGenerator>();
+			boolean ignoreIdAnnotations = entityBinder.isIgnoreIdAnnotations();
+			entityBinder.setIgnoreIdAnnotations( true );
+			bindId(
+					generatorType,
+					generator,
+					inferredData,
+					null,
+					propertyHolder,
+					localGenerators,
+					isComponent,
+					propertyAnnotated,
+					propertyAccessor, entityBinder,
+					null,
+					true,
+					false, mappings
+			);
+			inferredData = new PropertyPreloadedData(
+					propertyAccessor, "_identifierMapper", compositeClass
+			);
+			Component mapper = fillComponent(
+					propertyHolder,
+					inferredData,
+					propertyAnnotated,
+					propertyAccessor, false,
+					entityBinder,
+					true, true,
+					false, mappings
+			);
+			entityBinder.setIgnoreIdAnnotations( ignoreIdAnnotations );
+			persistentClass.setIdentifierMapper( mapper );
+			Property property = new Property();
+			property.setName( "_identifierMapper" );
+			property.setNodeName( "id" );
+			property.setUpdateable( false );
+			property.setInsertable( false );
+			property.setValue( mapper );
+			property.setPropertyAccessorName( "embedded" );
+			persistentClass.addProperty( property );
+			entityBinder.setIgnoreIdAnnotations( true );
+
+			Iterator properties = mapper.getPropertyIterator();
+			while ( properties.hasNext() ) {
+				idProperties.add( ( (Property) properties.next() ).getName() );
+			}
+		}
+		Set<String> missingIdProperties = new HashSet<String>( idProperties );
+		for ( PropertyData propertyAnnotatedElement : elements ) {
+			String propertyName = propertyAnnotatedElement.getPropertyName();
+			if ( !idProperties.contains( propertyName ) ) {
+				processElementAnnotations(
+						propertyHolder,
+						subclassAndSingleTableStrategy ?
+								Nullability.FORCED_NULL :
+								Nullability.NO_CONSTRAINT,
+						propertyAnnotatedElement.getProperty(),
+						propertyAnnotatedElement, classGenerators, entityBinder,
+						false, false, false, mappings
+				);
+			}
+			else {
+				missingIdProperties.remove( propertyName );
+			}
+		}
+
+		if ( missingIdProperties.size() != 0 ) {
+			StringBuilder missings = new StringBuilder();
+			for ( String property : missingIdProperties ) {
+				missings.append( property ).append( ", " );
+			}
+			throw new AnnotationException(
+					"Unable to find properties ("
+							+ missings.substring( 0, missings.length() - 2 )
+							+ ") in entity annotated with @IdClass:" + persistentClass.getEntityName()
+			);
+		}
+
+		if ( !inheritanceState.hasParents ) {
+			final RootClass rootClass = (RootClass) persistentClass;
+			//no need to handle inSecondPass this is an Entity related work
+			mappings.addSecondPass( new CreateKeySecondPass( rootClass ) );
+		}
+		else {
+			superEntity.addSubclass( (Subclass) persistentClass );
+		}
+
+		mappings.addClass( persistentClass );
+		entityBinder.finalSecondaryTableBinding( propertyHolder );
+
+		//add process complementary Table definition (index & all)
+		entityBinder.processComplementaryTableDefinitions( annotatedClass.getAnnotation( org.hibernate.annotations.Table.class ) );
+		entityBinder.processComplementaryTableDefinitions( annotatedClass.getAnnotation( org.hibernate.annotations.Tables.class ) );
+
+	}
+
+	/**
+	 * Get the annotated elements
+	 * Guess the annotated element from @Id or @EmbeddedId presence
+	 * Change EntityBinder by side effect
+	 */
+	private static List<PropertyData> getElementsToProcess(
+			XClass clazzToProcess, Map<XClass, InheritanceState> inheritanceStatePerClass,
+			PropertyHolder propertyHolder, EntityBinder entityBinder, ExtendedMappings mappings
+	) {
+		InheritanceState inheritanceState = inheritanceStatePerClass.get( clazzToProcess );
+		List<XClass> classesToProcess = orderClassesToBeProcessed(
+				clazzToProcess, inheritanceStatePerClass, inheritanceState, mappings
+		);
+		List<PropertyData> elements = new ArrayList<PropertyData>();
+		int deep = classesToProcess.size();
+		boolean hasIdentifier = false;
+
+		assert !inheritanceState.isEmbeddableSuperclass;
+		Boolean isExplicitPropertyAnnotated = null;
+		String explicitAccessType = null;
+		if ( inheritanceState.hasParents ) {
+			InheritanceState superEntityState =
+					InheritanceState.getSuperEntityInheritanceState(
+							clazzToProcess, inheritanceStatePerClass, mappings.getReflectionManager()
+					);
+			isExplicitPropertyAnnotated = superEntityState != null ?
+					superEntityState.isPropertyAnnotated :
+					null;
+			explicitAccessType = superEntityState != null ?
+					superEntityState.accessType :
+					null;
+		}
+		else {
+			AccessType access = clazzToProcess.getAnnotation( AccessType.class );
+			explicitAccessType = access != null ?
+					access.value() :
+					null;
+			if ( "property".equals( explicitAccessType ) ) {
+				isExplicitPropertyAnnotated = Boolean.TRUE;
+			}
+			else if ( "field".equals( explicitAccessType ) ) {
+				isExplicitPropertyAnnotated = Boolean.FALSE;
+			}
+		}
+		Boolean isPropertyAnnotated = isExplicitPropertyAnnotated == null ?
+				Boolean.TRUE :
+				//default to property and fallback if needed
+				isExplicitPropertyAnnotated;
+		String accessType = explicitAccessType != null ?
+				explicitAccessType :
+				"property";
+
+		for ( int index = 0; index < deep; index++ ) {
+			XClass clazz = classesToProcess.get( index );
+
+			boolean currentHasIdentifier = addElementsOfAClass(
+					elements, propertyHolder, isPropertyAnnotated,
+					accessType, clazz, mappings
+			);
+			hasIdentifier = hasIdentifier || currentHasIdentifier;
+		}
+
+		if ( !hasIdentifier && !inheritanceState.hasParents ) {
+			if ( isExplicitPropertyAnnotated != null ) return null; //explicit but no @Id
+			isPropertyAnnotated = !isPropertyAnnotated;
+			accessType = "field";
+			elements.clear();
+			for ( int index = 0; index < deep; index++ ) {
+				XClass clazz = classesToProcess.get( index );
+				boolean currentHasIdentifier = addElementsOfAClass(
+						elements, propertyHolder, isPropertyAnnotated,
+						accessType, clazz, mappings
+				);
+				hasIdentifier = hasIdentifier || currentHasIdentifier;
+			}
+		}
+		//TODO set the access type here?
+		entityBinder.setPropertyAnnotated( isPropertyAnnotated );
+		entityBinder.setPropertyAccessor( accessType );
+		inheritanceState.isPropertyAnnotated = isPropertyAnnotated;
+		inheritanceState.accessType = accessType;
+		return hasIdentifier || inheritanceState.hasParents ?
+				elements :
+				null;
+	}
+
+	private static List<XClass> orderClassesToBeProcessed(
+			XClass annotatedClass, Map<XClass, InheritanceState> inheritanceStatePerClass,
+			InheritanceState inheritanceState, ExtendedMappings mappings
+	) {
+		//ordered to allow proper messages on properties subclassing
+		List<XClass> classesToProcess = new ArrayList<XClass>();
+		XClass currentClassInHierarchy = annotatedClass;
+		InheritanceState superclassState;
+		do {
+			classesToProcess.add( 0, currentClassInHierarchy );
+			XClass superClass = currentClassInHierarchy;
+			do {
+				superClass = superClass.getSuperclass();
+				superclassState = inheritanceStatePerClass.get( superClass );
+			}
+			while ( superClass != null && !mappings.getReflectionManager()
+					.equals( superClass, Object.class ) && superclassState == null );
+
+			currentClassInHierarchy = superClass;
+		}
+		while ( superclassState != null && superclassState.isEmbeddableSuperclass );
+
+		return classesToProcess;
+	}
+
+	private static void bindFilterDefs(XAnnotatedElement annotatedElement, ExtendedMappings mappings) {
+		FilterDef defAnn = annotatedElement.getAnnotation( FilterDef.class );
+		FilterDefs defsAnn = annotatedElement.getAnnotation( FilterDefs.class );
+		if ( defAnn != null ) {
+			bindFilterDef( defAnn, mappings );
+		}
+		if ( defsAnn != null ) {
+			for ( FilterDef def : defsAnn.value() ) {
+				bindFilterDef( def, mappings );
+			}
+		}
+	}
+
+	private static void bindFilterDef(FilterDef defAnn, ExtendedMappings mappings) {
+		Map<String, org.hibernate.type.Type> params = new HashMap<String, org.hibernate.type.Type>();
+		for ( ParamDef param : defAnn.parameters() ) {
+			params.put( param.name(), TypeFactory.heuristicType( param.type() ) );
+		}
+		FilterDefinition def = new FilterDefinition( defAnn.name(), defAnn.defaultCondition(), params );
+		if ( log.isInfoEnabled() ) log.info( "Binding filter definition: " + def.getFilterName() );
+		mappings.addFilterDefinition( def );
+	}
+
+	private static void bindTypeDefs(XAnnotatedElement annotatedElement, ExtendedMappings mappings) {
+		TypeDef defAnn = annotatedElement.getAnnotation( TypeDef.class );
+		TypeDefs defsAnn = annotatedElement.getAnnotation( TypeDefs.class );
+		if ( defAnn != null ) {
+			bindTypeDef( defAnn, mappings );
+		}
+		if ( defsAnn != null ) {
+			for ( TypeDef def : defsAnn.value() ) {
+				bindTypeDef( def, mappings );
+			}
+		}
+	}
+
+	private static void bindTypeDef(TypeDef defAnn, ExtendedMappings mappings) {
+		Properties params = new Properties();
+		for ( Parameter param : defAnn.parameters() ) {
+			params.setProperty( param.name(), param.value() );
+		}
+		if ( log.isInfoEnabled() ) log.info( "Binding type definition: " + defAnn.name() );
+		mappings.addTypeDef( defAnn.name(), defAnn.typeClass().getName(), params );
+	}
+
+	private static void bindDiscriminatorToPersistentClass(
+			RootClass rootClass,
+			Ejb3DiscriminatorColumn discriminatorColumn, Map<String, Join> secondaryTables,
+			PropertyHolder propertyHolder
+	) {
+		if ( rootClass.getDiscriminator() == null ) {
+			if ( discriminatorColumn == null ) {
+				throw new AssertionFailure( "discriminator column should have been built" );
+			}
+			discriminatorColumn.setJoins( secondaryTables );
+			discriminatorColumn.setPropertyHolder( propertyHolder );
+			SimpleValue discrim = new SimpleValue( rootClass.getTable() );
+			rootClass.setDiscriminator( discrim );
+			discriminatorColumn.linkWithValue( discrim );
+			discrim.setTypeName( discriminatorColumn.getDiscriminatorTypeName() );
+			rootClass.setPolymorphic( true );
+			log.debug( "Setting discriminator for entity " + rootClass.getEntityName() );
+		}
+	}
+
+	/**
+	 * Add elements of a class
+	 */
+	private static boolean addElementsOfAClass(
+			List<PropertyData> elements, PropertyHolder propertyHolder, boolean isPropertyAnnotated,
+			String propertyAccessor, final XClass annotatedClass, ExtendedMappings mappings
+	) {
+		boolean hasIdentifier = false;
+		AccessType access = annotatedClass.getAnnotation( AccessType.class );
+		String localPropertyAccessor = access != null ?
+				access.value() :
+				null;
+		String accessType = null;
+		if ( "property".equals( localPropertyAccessor ) || "field".equals( localPropertyAccessor ) ) {
+			accessType = localPropertyAccessor;
+		}
+		else {
+			if ( localPropertyAccessor == null ) {
+				localPropertyAccessor = propertyAccessor;
+			}
+
+			if ( isPropertyAnnotated ) {
+				accessType = "property";
+			}
+			else {
+				accessType = "field";
+			}
+		}
+
+		log.debug( "Processing " + propertyHolder.getEntityName() + " " + accessType + " annotation" );
+		List<XProperty> properties = annotatedClass.getDeclaredProperties( accessType );
+		//order so that property are used int he same order when binding native query
+		Collections.sort( properties, new Comparator<XProperty>() {
+			public int compare(XProperty property1, XProperty property2) {
+				return property1.getName().compareTo( property2.getName() );
+			}
+		} );
+		for ( XProperty p : properties ) {
+			if ( !p.isTypeResolved() && !discoverTypeWithoutReflection( p ) && !mustBeSkipped( p, mappings ) ) {
+				throw new AnnotationException(
+						"Property " + StringHelper.qualify( propertyHolder.getEntityName(), p.getName() ) +
+								" has an unbound type and no explicit target entity. Resolve this Generic usage issue" +
+								" or set an explicit target attribute (eg @OneToMany(target=) or use an explicit @Type"
+				);
+			}
+			final boolean currentHasIdentifier = addProperty( p, elements, localPropertyAccessor, mappings );
+			hasIdentifier = hasIdentifier || currentHasIdentifier;
+		}
+		return hasIdentifier;
+	}
+
+	private static boolean discoverTypeWithoutReflection(XProperty p) {
+		if ( p.isAnnotationPresent( OneToOne.class ) && !p.getAnnotation( OneToOne.class )
+				.targetEntity()
+				.equals( void.class ) ) {
+			return true;
+		}
+		else if ( p.isAnnotationPresent( OneToMany.class ) && !p.getAnnotation( OneToMany.class )
+				.targetEntity()
+				.equals( void.class ) ) {
+			return true;
+		}
+		else if ( p.isAnnotationPresent( ManyToOne.class ) && !p.getAnnotation( ManyToOne.class )
+				.targetEntity()
+				.equals( void.class ) ) {
+			return true;
+		}
+		else if ( p.isAnnotationPresent( ManyToMany.class ) && !p.getAnnotation( ManyToMany.class )
+				.targetEntity()
+				.equals( void.class ) ) {
+			return true;
+		}
+		else if ( p.isAnnotationPresent( Type.class ) ) {
+			return true;
+		}
+		else if ( p.isAnnotationPresent( Target.class ) ) {
+			return true;
+		}
+		return false;
+	}
+
+	private static boolean addProperty(
+			XProperty property, List<PropertyData> annElts,
+			String propertyAccessor, ExtendedMappings mappings
+	) {
+		boolean hasIdentifier = false;
+		PropertyData propertyAnnotatedElement = new PropertyInferredData(
+				property, propertyAccessor,
+				mappings.getReflectionManager() );
+		if ( !mustBeSkipped( propertyAnnotatedElement.getProperty(), mappings ) ) {
+			/*
+			 * put element annotated by @Id in front
+			 * since it has to be parsed before any assoctation by Hibernate
+			 */
+			final XAnnotatedElement element = propertyAnnotatedElement.getProperty();
+			if ( element.isAnnotationPresent( Id.class ) || element.isAnnotationPresent( EmbeddedId.class ) ) {
+				annElts.add( 0, propertyAnnotatedElement );
+				hasIdentifier = true;
+			}
+			else {
+				annElts.add( propertyAnnotatedElement );
+				hasIdentifier = false;
+			}
+		}
+		return hasIdentifier;
+	}
+
+	private static boolean mustBeSkipped(XProperty property, ExtendedMappings mappings) {
+		//TODO make those hardcoded tests more portable (through the bytecode provider?)
+		return property.isAnnotationPresent( Transient.class )
+				|| "net.sf.cglib.transform.impl.InterceptFieldCallback".equals( property.getType().getName() )
+				|| "org.hibernate.tool.instrument.javassist.FieldHandler".equals( property.getType().getName() );
+	}
+
+	/**
+	 * Process annotation of a particular property
+	 */
+	private static void processElementAnnotations(
+			PropertyHolder propertyHolder, Nullability nullability, XProperty property,
+			PropertyData inferredData, HashMap<String, IdGenerator> classGenerators,
+			EntityBinder entityBinder, boolean isIdentifierMapper,
+			boolean isComponentEmbedded, boolean inSecondPass, ExtendedMappings mappings
+	)
+			throws MappingException {
+		/**
+		 * inSecondPass can only be used to apply right away the second pass of a composite-element
+		 * Because it's a value type, there is no bidirectional association, hence second pass
+		 * ordering does not matter
+		 */
+		Ejb3Column[] columns = null;
+		Ejb3JoinColumn[] joinColumns = null;
+		if ( log.isDebugEnabled() ) {
+			log.debug(
+					"Processing annotations of " + propertyHolder.getEntityName() + "." + inferredData.getPropertyName()
+			);
+		}
+
+		if ( property.isAnnotationPresent( Parent.class ) ) {
+			if ( propertyHolder.isComponent() ) {
+				propertyHolder.setParentProperty( property.getName() );
+			}
+			else {
+				throw new AnnotationException(
+						"@Parent cannot be applied outside an embeddable object: "
+								+ StringHelper.qualify( propertyHolder.getPath(), property.getName() )
+				);
+			}
+			return;
+		}
+
+		//process @JoinColumn(s) before @Column(s) to handle collection of elements properly
+		{
+			JoinColumn[] anns = null;
+			if ( property.isAnnotationPresent( JoinColumn.class ) ) {
+				anns = new JoinColumn[]{property.getAnnotation( JoinColumn.class )};
+			}
+			else if ( property.isAnnotationPresent( JoinColumns.class ) ) {
+				JoinColumns ann = property.getAnnotation( JoinColumns.class );
+				anns = ann.value();
+				int length = anns.length;
+				if ( length == 0 ) {
+					throw new AnnotationException( "Cannot bind an empty @JoinColumns" );
+				}
+			}
+			if ( anns != null ) {
+				joinColumns = Ejb3JoinColumn.buildJoinColumns(
+						anns, null, entityBinder.getSecondaryTables(),
+						propertyHolder, inferredData.getPropertyName(), mappings
+				);
+			}
+		}
+		if ( property.isAnnotationPresent( Column.class ) || property.isAnnotationPresent( Formula.class ) ) {
+			Column ann = property.getAnnotation( Column.class );
+			Formula formulaAnn = property.getAnnotation( Formula.class );
+			columns = Ejb3Column.buildColumnFromAnnotation(
+					new Column[]{ann}, formulaAnn, nullability, propertyHolder, inferredData,
+					entityBinder.getSecondaryTables(), mappings
+			);
+		}
+		else if ( property.isAnnotationPresent( Columns.class ) ) {
+			Columns anns = property.getAnnotation( Columns.class );
+			columns = Ejb3Column.buildColumnFromAnnotation(
+					anns.columns(), null, nullability, propertyHolder, inferredData, entityBinder.getSecondaryTables(),
+					mappings
+			);
+		}
+
+		//set default values if needed
+		if ( joinColumns == null &&
+				( property.isAnnotationPresent( ManyToOne.class )
+						|| property.isAnnotationPresent( OneToOne.class ) )
+				) {
+			if ( property.isAnnotationPresent( JoinTable.class ) ) {
+				JoinTable joinTableAnn = property.getAnnotation( JoinTable.class );
+				joinColumns = Ejb3JoinColumn.buildJoinColumns(
+						joinTableAnn.inverseJoinColumns(), null, entityBinder.getSecondaryTables(),
+						propertyHolder, inferredData.getPropertyName(), mappings
+				);
+				if ( StringHelper.isEmpty( joinTableAnn.name() ) ) {
+					throw new AnnotationException(
+							"JoinTable.name() on a @ToOne association has to be explicit: "
+									+ StringHelper.qualify( propertyHolder.getPath(), inferredData.getPropertyName() )
+					);
+				}
+			}
+			else {
+				OneToOne oneToOneAnn = property.getAnnotation( OneToOne.class );
+				String mappedBy = oneToOneAnn != null ?
+						oneToOneAnn.mappedBy() :
+						null;
+				joinColumns = Ejb3JoinColumn.buildJoinColumns(
+						(JoinColumn[]) null,
+						mappedBy, entityBinder.getSecondaryTables(),
+						propertyHolder, inferredData.getPropertyName(), mappings
+				);
+			}
+		}
+		else if ( joinColumns == null &&
+				( property.isAnnotationPresent( OneToMany.class )
+						|| property.isAnnotationPresent( CollectionOfElements.class ) ) ) {
+			OneToMany oneToMany = property.getAnnotation( OneToMany.class );
+			String mappedBy = oneToMany != null ?
+					oneToMany.mappedBy() :
+					"";
+			joinColumns = Ejb3JoinColumn.buildJoinColumns(
+					(JoinColumn[]) null,
+					mappedBy, entityBinder.getSecondaryTables(),
+					propertyHolder, inferredData.getPropertyName(), mappings
+			);
+		}
+		if ( columns == null && !property.isAnnotationPresent( ManyToMany.class ) ) {
+			//useful for collection of embedded elements
+			columns = Ejb3Column.buildColumnFromAnnotation(
+					null, null, nullability, propertyHolder, inferredData, entityBinder.getSecondaryTables(), mappings
+			);
+		}
+
+		if ( nullability == Nullability.FORCED_NOT_NULL ) {
+			//force columns to not null
+			for ( Ejb3Column col : columns ) {
+				col.forceNotNull();
+			}
+		}
+
+		final XClass returnedClass = inferredData.getClassOrElement();
+		if ( !entityBinder.isIgnoreIdAnnotations() &&
+				( property.isAnnotationPresent( Id.class )
+						|| property.isAnnotationPresent( EmbeddedId.class ) ) ) {
+			if ( isIdentifierMapper ) {
+				throw new AnnotationException(
+						"@IdClass class should not have @Id nor @EmbeddedId properties"
+				);
+			}
+			log.debug( inferredData.getPropertyName() + " is an id" );
+			//clone classGenerator and override with local values
+			HashMap<String, IdGenerator> localGenerators = (HashMap<String, IdGenerator>) classGenerators.clone();
+			localGenerators.putAll( buildLocalGenerators( property, mappings ) );
+
+			//manage composite related metadata
+			//guess if its a component and find id data access (property, field etc)
+			final boolean isComponent = returnedClass.isAnnotationPresent( Embeddable.class )
+					|| property.isAnnotationPresent( EmbeddedId.class );
+			boolean propertyAnnotated = entityBinder.isPropertyAnnotated( returnedClass );
+			String propertyAccessor = entityBinder.getPropertyAccessor( returnedClass );
+			//if ( isComponent && embeddableAnn != null && embeddableAnn.access() == AccessType.FIELD ) propertyAccess = false;
+
+			GeneratedValue generatedValue = property.getAnnotation( GeneratedValue.class );
+			String generatorType = generatedValue != null ?
+					generatorType( generatedValue.strategy() ) :
+					"assigned";
+			String generator = generatedValue != null ?
+					generatedValue.generator() :
+					BinderHelper.ANNOTATION_STRING_DEFAULT;
+			if ( isComponent ) generatorType = "assigned"; //a component must not have any generator
+			Type typeAnn = property.getAnnotation( Type.class );
+			bindId(
+					generatorType,
+					generator,
+					inferredData,
+					columns,
+					propertyHolder,
+					localGenerators,
+					isComponent,
+					propertyAnnotated,
+					propertyAccessor, entityBinder,
+					typeAnn,
+					false,
+					isIdentifierMapper, mappings
+			);
+			if ( log.isDebugEnabled() ) {
+				log.debug(
+						"Bind " + ( isComponent ?
+								"@EmbeddedId" :
+								"@Id" ) + " on " + inferredData.getPropertyName()
+				);
+			}
+		}
+		else if ( property.isAnnotationPresent( Version.class ) ) {
+			if ( isIdentifierMapper ) {
+				throw new AnnotationException(
+						"@IdClass class should not have @Version property"
+				);
+			}
+			if ( !( propertyHolder.getPersistentClass() instanceof RootClass ) ) {
+				throw new AnnotationException(
+						"Unable to define/override @Version on a subclass: "
+								+ propertyHolder.getEntityName()
+				);
+			}
+			log.debug( inferredData.getPropertyName() + " is a version property" );
+			RootClass rootClass = (RootClass) propertyHolder.getPersistentClass();
+			boolean lazy = false;
+			PropertyBinder propBinder = new PropertyBinder();
+			propBinder.setName( inferredData.getPropertyName() );
+			propBinder.setReturnedClassName( inferredData.getTypeName() );
+			propBinder.setLazy( lazy );
+			propBinder.setPropertyAccessorName( inferredData.getDefaultAccess() );
+			propBinder.setColumns( columns );
+			propBinder.setHolder( propertyHolder ); //PropertyHolderBuilder.buildPropertyHolder(rootClass)
+			propBinder.setProperty( property );
+			propBinder.setReturnedClass( inferredData.getPropertyClass() );
+
+			propBinder.setMappings( mappings );
+			Property prop = propBinder.bind();
+			rootClass.setVersion( prop );
+			SimpleValue simpleValue = (SimpleValue) prop.getValue();
+			if ( !simpleValue.isTypeSpecified() ) simpleValue.setTypeName( "integer" );
+			simpleValue.setNullValue( "undefined" );
+			rootClass.setOptimisticLockMode( Versioning.OPTIMISTIC_LOCK_VERSION );
+			log.debug(
+					"Version name: " + rootClass.getVersion().getName() + ", unsavedValue: " + ( (SimpleValue) rootClass
+							.getVersion()
+							.getValue() ).getNullValue()
+			);
+		}
+		else if ( property.isAnnotationPresent( ManyToOne.class ) ) {
+			ManyToOne ann = property.getAnnotation( ManyToOne.class );
+
+			//check validity
+			if ( property.isAnnotationPresent( Column.class )
+					|| property.isAnnotationPresent( Columns.class ) ) {
+				throw new AnnotationException( "@Column(s) not allowed on a @ManyToOne property: "
+						+ StringHelper.qualify( propertyHolder.getPath(), inferredData.getPropertyName() ) );
+			}
+
+			Cascade hibernateCascade = property.getAnnotation( Cascade.class );
+			NotFound notFound = property.getAnnotation( NotFound.class );
+			boolean ignoreNotFound = notFound != null && notFound.action().equals( NotFoundAction.IGNORE );
+			OnDelete onDeleteAnn = property.getAnnotation( OnDelete.class );
+			boolean onDeleteCascade = onDeleteAnn != null && OnDeleteAction.CASCADE.equals( onDeleteAnn.action() );
+			JoinTable assocTable = property.getAnnotation( JoinTable.class );
+			if ( assocTable != null ) {
+				Join join = propertyHolder.addJoin( assocTable, false );
+				for ( Ejb3JoinColumn joinColumn : joinColumns ) {
+					joinColumn.setSecondaryTableName( join.getTable().getName() );
+				}
+			}
+			bindManyToOne(
+					getCascadeStrategy( ann.cascade(), hibernateCascade ),
+					joinColumns,
+					ann.optional(),
+					ignoreNotFound, onDeleteCascade,
+					mappings.getReflectionManager().toXClass( ann.targetEntity() ),
+					propertyHolder,
+					inferredData, false, isIdentifierMapper, inSecondPass, mappings
+			);
+		}
+		else if ( property.isAnnotationPresent( OneToOne.class ) ) {
+			OneToOne ann = property.getAnnotation( OneToOne.class );
+
+			//check validity
+			if ( property.isAnnotationPresent( Column.class )
+					|| property.isAnnotationPresent( Columns.class ) ) {
+				throw new AnnotationException( "@Column(s) not allowed on a @OneToOne property: "
+						+ StringHelper.qualify( propertyHolder.getPath(), inferredData.getPropertyName() ) );
+			}
+
+			//FIXME support a proper PKJCs
+			boolean trueOneToOne = property.isAnnotationPresent( PrimaryKeyJoinColumn.class )
+					|| property.isAnnotationPresent( PrimaryKeyJoinColumns.class );
+			Cascade hibernateCascade = property.getAnnotation( Cascade.class );
+			NotFound notFound = property.getAnnotation( NotFound.class );
+			boolean ignoreNotFound = notFound != null && notFound.action().equals( NotFoundAction.IGNORE );
+			OnDelete onDeleteAnn = property.getAnnotation( OnDelete.class );
+			boolean onDeleteCascade = onDeleteAnn != null && OnDeleteAction.CASCADE.equals( onDeleteAnn.action() );
+			JoinTable assocTable = property.getAnnotation( JoinTable.class );
+			if ( assocTable != null ) {
+				Join join = propertyHolder.addJoin( assocTable, false );
+				for ( Ejb3JoinColumn joinColumn : joinColumns ) {
+					joinColumn.setSecondaryTableName( join.getTable().getName() );
+				}
+			}
+			bindOneToOne(
+					getCascadeStrategy( ann.cascade(), hibernateCascade ),
+					joinColumns,
+					ann.optional(),
+					getFetchMode( ann.fetch() ),
+					ignoreNotFound, onDeleteCascade,
+					mappings.getReflectionManager().toXClass( ann.targetEntity() ),
+					propertyHolder,
+					inferredData, ann.mappedBy(), trueOneToOne, isIdentifierMapper, inSecondPass, mappings
+			);
+		}
+		else if ( property.isAnnotationPresent( OneToMany.class )
+				|| property.isAnnotationPresent( ManyToMany.class )
+				|| property.isAnnotationPresent( CollectionOfElements.class ) ) {
+			OneToMany oneToManyAnn = property.getAnnotation( OneToMany.class );
+			ManyToMany manyToManyAnn = property.getAnnotation( ManyToMany.class );
+			CollectionOfElements collectionOfElementsAnn = property.getAnnotation( CollectionOfElements.class );
+			org.hibernate.annotations.IndexColumn indexAnn = property.getAnnotation(
+					org.hibernate.annotations.IndexColumn.class
+			);
+			JoinTable assocTable = property.getAnnotation( JoinTable.class );
+
+			IndexColumn indexColumn = IndexColumn.buildColumnFromAnnotation(
+					indexAnn, propertyHolder, inferredData, mappings
+			);
+			CollectionBinder collectionBinder = CollectionBinder.getCollectionBinder(
+					propertyHolder.getEntityName(),
+					property,
+					!indexColumn.isImplicit()
+			);
+			collectionBinder.setIndexColumn( indexColumn );
+			MapKey mapKeyAnn = property.getAnnotation( MapKey.class );
+			collectionBinder.setMapKey( mapKeyAnn );
+			collectionBinder.setPropertyName( inferredData.getPropertyName() );
+			BatchSize batchAnn = property.getAnnotation( BatchSize.class );
+			collectionBinder.setBatchSize( batchAnn );
+			javax.persistence.OrderBy ejb3OrderByAnn = property.getAnnotation( javax.persistence.OrderBy.class );
+			OrderBy orderByAnn = property.getAnnotation( OrderBy.class );
+			collectionBinder.setEjb3OrderBy( ejb3OrderByAnn );
+			collectionBinder.setSqlOrderBy( orderByAnn );
+			Sort sortAnn = property.getAnnotation( Sort.class );
+			collectionBinder.setSort( sortAnn );
+			Cache cachAnn = property.getAnnotation( Cache.class );
+			collectionBinder.setCache( cachAnn );
+			collectionBinder.setPropertyHolder( propertyHolder );
+			Cascade hibernateCascade = property.getAnnotation( Cascade.class );
+			NotFound notFound = property.getAnnotation( NotFound.class );
+			boolean ignoreNotFound = notFound != null && notFound.action().equals( NotFoundAction.IGNORE );
+			collectionBinder.setIgnoreNotFound( ignoreNotFound );
+			collectionBinder.setCollectionType( inferredData.getProperty().getElementClass() );
+			collectionBinder.setMappings( mappings );
+			collectionBinder.setPropertyAccessorName( inferredData.getDefaultAccess() );
+
+			Ejb3Column[] elementColumns = null;
+			PropertyData virtualProperty = new WrappedInferredData( inferredData, "element" );
+			if ( property.isAnnotationPresent( Column.class ) || property.isAnnotationPresent(
+					Formula.class
+			) ) {
+				Column ann = property.getAnnotation( Column.class );
+				Formula formulaAnn = property.getAnnotation( Formula.class );
+				elementColumns = Ejb3Column.buildColumnFromAnnotation(
+						new Column[]{ann},
+						formulaAnn,
+						nullability,
+						propertyHolder,
+						virtualProperty,
+						entityBinder.getSecondaryTables(),
+						mappings
+				);
+			}
+			else if ( property.isAnnotationPresent( Columns.class ) ) {
+				Columns anns = property.getAnnotation( Columns.class );
+				elementColumns = Ejb3Column.buildColumnFromAnnotation(
+						anns.columns(), null, nullability, propertyHolder, virtualProperty,
+						entityBinder.getSecondaryTables(), mappings
+				);
+			}
+			else {
+				elementColumns = Ejb3Column.buildColumnFromAnnotation(
+						null,
+						null,
+						nullability,
+						propertyHolder,
+						virtualProperty,
+						entityBinder.getSecondaryTables(),
+						mappings
+				);
+			}
+
+			org.hibernate.annotations.MapKey hibMapKeyAnn = property.getAnnotation(
+					org.hibernate.annotations.MapKey.class
+			);
+			PropertyData mapKeyVirtualProperty = new WrappedInferredData( inferredData, "mapkey" );
+			Ejb3Column[] mapColumns = Ejb3Column.buildColumnFromAnnotation(
+					hibMapKeyAnn != null && hibMapKeyAnn.columns().length > 0 ?
+							hibMapKeyAnn.columns() :
+							null,
+					null,
+					Nullability.FORCED_NOT_NULL,
+					propertyHolder,
+					mapKeyVirtualProperty,
+					entityBinder.getSecondaryTables(),
+					mappings
+			);
+			collectionBinder.setMapKeyColumns( mapColumns );
+
+			MapKeyManyToMany mapKeyManyToMany = property.getAnnotation( MapKeyManyToMany.class );
+			Ejb3JoinColumn[] mapJoinColumns = Ejb3JoinColumn.buildJoinColumns(
+					mapKeyManyToMany != null ?
+							mapKeyManyToMany.joinColumns() :
+							null,
+					null, entityBinder.getSecondaryTables(),
+					propertyHolder, mapKeyVirtualProperty.getPropertyName(), mappings
+			);
+			collectionBinder.setMapKeyManyToManyColumns( mapJoinColumns );
+
+			//potential element
+			collectionBinder.setEmbedded( property.isAnnotationPresent( Embedded.class ) );
+			collectionBinder.setElementColumns( elementColumns );
+			collectionBinder.setProperty( property );
+
+			if ( oneToManyAnn != null && manyToManyAnn != null ) {
+				throw new AnnotationException(
+						"@OneToMany and @ManyToMany on the same property is not allowed: "
+								+ propertyHolder.getEntityName() + "." + inferredData.getPropertyName()
+				);
+			}
+			String mappedBy = null;
+			if ( oneToManyAnn != null ) {
+				for ( Ejb3JoinColumn column : joinColumns ) {
+					if ( column.isSecondary() ) {
+						throw new NotYetImplementedException( "Collections having FK in secondary table" );
+					}
+				}
+				collectionBinder.setFkJoinColumns( joinColumns );
+				mappedBy = oneToManyAnn.mappedBy();
+				collectionBinder.setTargetEntity(
+						mappings.getReflectionManager().toXClass( oneToManyAnn.targetEntity() )
+				);
+				collectionBinder.setCascadeStrategy( getCascadeStrategy( oneToManyAnn.cascade(), hibernateCascade ) );
+				collectionBinder.setOneToMany( true );
+			}
+			else if ( collectionOfElementsAnn != null ) {
+				for ( Ejb3JoinColumn column : joinColumns ) {
+					if ( column.isSecondary() ) {
+						throw new NotYetImplementedException( "Collections having FK in secondary table" );
+					}
+				}
+				collectionBinder.setFkJoinColumns( joinColumns );
+				mappedBy = "";
+				collectionBinder.setTargetEntity(
+						mappings.getReflectionManager().toXClass( collectionOfElementsAnn.targetElement() )
+				);
+				//collectionBinder.setCascadeStrategy( getCascadeStrategy( embeddedCollectionAnn.cascade(), hibernateCascade ) );
+				collectionBinder.setOneToMany( true );
+			}
+			else if ( manyToManyAnn != null ) {
+				mappedBy = manyToManyAnn.mappedBy();
+				collectionBinder.setTargetEntity(
+						mappings.getReflectionManager().toXClass( manyToManyAnn.targetEntity() )
+				);
+				collectionBinder.setCascadeStrategy( getCascadeStrategy( manyToManyAnn.cascade(), hibernateCascade ) );
+				collectionBinder.setOneToMany( false );
+			}
+			collectionBinder.setMappedBy( mappedBy );
+			bindJoinedTableAssociation(
+					assocTable, mappings, entityBinder, collectionBinder, propertyHolder, inferredData, mappedBy
+			);
+
+			OnDelete onDeleteAnn = property.getAnnotation( OnDelete.class );
+			boolean onDeleteCascade = onDeleteAnn != null && OnDeleteAction.CASCADE.equals( onDeleteAnn.action() );
+			collectionBinder.setCascadeDeleteEnabled( onDeleteCascade );
+			if ( isIdentifierMapper ) {
+				collectionBinder.setInsertable( false );
+				collectionBinder.setUpdatable( false );
+			}
+			if ( property.isAnnotationPresent( CollectionId.class ) ) { //do not compute the generators unless necessary
+				HashMap<String, IdGenerator> localGenerators = (HashMap<String, IdGenerator>) classGenerators.clone();
+				localGenerators.putAll( buildLocalGenerators( property, mappings ) );
+				collectionBinder.setLocalGenerators( localGenerators );
+
+			}
+			collectionBinder.bind();
+
+		}
+		else {
+			//define whether the type is a component or not
+			boolean isComponent = false;
+			Embeddable embeddableAnn = (Embeddable) returnedClass.getAnnotation( Embeddable.class );
+			Embedded embeddedAnn = (Embedded) property.getAnnotation( Embedded.class );
+			isComponent = embeddedAnn != null || embeddableAnn != null;
+
+			if ( isComponent ) {
+				//process component object
+				//boolean propertyAccess = true;
+				//if ( embeddableAnn != null && embeddableAnn.access() == AccessType.FIELD ) propertyAccess = false;
+				boolean propertyAnnotated = entityBinder.isPropertyAnnotated( property );
+				String propertyAccessor = entityBinder.getPropertyAccessor( property );
+				bindComponent(
+						inferredData, propertyHolder, propertyAnnotated, propertyAccessor, entityBinder,
+						isIdentifierMapper,
+						mappings, isComponentEmbedded
+				);
+			}
+			else {
+				//provide the basic property mapping
+				boolean optional = true;
+				boolean lazy = false;
+				if ( property.isAnnotationPresent( Basic.class ) ) {
+					Basic ann = property.getAnnotation( Basic.class );
+					optional = ann.optional();
+					lazy = ann.fetch() == FetchType.LAZY;
+				}
+				//implicit type will check basic types and Serializable classes
+				if ( !optional && nullability != Nullability.FORCED_NULL ) {
+					//force columns to not null
+					for ( Ejb3Column col : columns ) {
+						col.forceNotNull();
+					}
+				}
+
+				PropertyBinder propBinder = new PropertyBinder();
+				propBinder.setName( inferredData.getPropertyName() );
+				propBinder.setReturnedClassName( inferredData.getTypeName() );
+				propBinder.setLazy( lazy );
+				propBinder.setPropertyAccessorName( inferredData.getDefaultAccess() );
+				propBinder.setColumns( columns );
+				propBinder.setHolder( propertyHolder );
+				propBinder.setProperty( property );
+				propBinder.setReturnedClass( inferredData.getPropertyClass() );
+				propBinder.setMappings( mappings );
+				if ( isIdentifierMapper ) {
+					propBinder.setInsertable( false );
+					propBinder.setUpdatable( false );
+				}
+				propBinder.bind();
+			}
+		}
+		//init index
+		//process indexes after everything: in second pass, many to one has to be done before indexes
+		Index index = property.getAnnotation( Index.class );
+		if ( index != null ) {
+			if ( joinColumns != null ) {
+				for ( Ejb3Column column : joinColumns ) {
+					column.addIndex( index, inSecondPass );
+				}
+			}
+			else {
+				for ( Ejb3Column column : columns ) {
+					column.addIndex( index, inSecondPass );
+				}
+			}
+		}
+	}
+
+	//TODO move that to collection binder?
+	private static void bindJoinedTableAssociation(
+			JoinTable joinTableAnn, ExtendedMappings mappings, EntityBinder entityBinder,
+			CollectionBinder collectionBinder, PropertyHolder propertyHolder, PropertyData inferredData,
+			String mappedBy
+	) {
+		TableBinder associationTableBinder = new TableBinder();
+		JoinColumn[] annJoins;
+		JoinColumn[] annInverseJoins;
+		if ( joinTableAnn != null ) {
+			collectionBinder.setExplicitAssociationTable( true );
+			if ( !BinderHelper.isDefault( joinTableAnn.schema() ) )
+				associationTableBinder.setSchema( joinTableAnn.schema() );
+			if ( !BinderHelper.isDefault( joinTableAnn.catalog() ) )
+				associationTableBinder.setCatalog( joinTableAnn.catalog() );
+			if ( !BinderHelper.isDefault( joinTableAnn.name() ) ) associationTableBinder.setName( joinTableAnn.name() );
+			associationTableBinder.setUniqueConstraints( joinTableAnn.uniqueConstraints() );
+
+			//set check constaint in the second pass
+
+			JoinColumn[] joins = joinTableAnn.joinColumns();
+
+			if ( joins.length == 0 ) {
+				annJoins = null;
+			}
+			else {
+				annJoins = joins;
+			}
+
+			JoinColumn[] inverseJoins = joinTableAnn.inverseJoinColumns();
+
+			if ( inverseJoins.length == 0 ) {
+				annInverseJoins = null;
+			}
+			else {
+				annInverseJoins = inverseJoins;
+			}
+		}
+		else {
+			annJoins = null;
+			annInverseJoins = null;
+		}
+		Ejb3JoinColumn[] joinColumns = Ejb3JoinColumn.buildJoinTableJoinColumns(
+				annJoins, entityBinder.getSecondaryTables(), propertyHolder, inferredData.getPropertyName(), mappedBy,
+				mappings
+		);
+		Ejb3JoinColumn[] inverseJoinColumns = Ejb3JoinColumn.buildJoinTableJoinColumns(
+				annInverseJoins, entityBinder.getSecondaryTables(), propertyHolder, inferredData.getPropertyName(),
+				mappedBy, mappings
+		);
+		associationTableBinder.setMappings( mappings );
+		collectionBinder.setTableBinder( associationTableBinder );
+		collectionBinder.setJoinColumns( joinColumns );
+		collectionBinder.setInverseJoinColumns( inverseJoinColumns );
+	}
+
+	private static void bindComponent(
+			PropertyData inferredData,
+			PropertyHolder propertyHolder,
+			boolean propertyAnnotated,
+			String propertyAccessor, EntityBinder entityBinder,
+			boolean isIdentifierMapper,
+			ExtendedMappings mappings, boolean isComponentEmbedded
+	) {
+		Component comp = fillComponent(
+				propertyHolder, inferredData, propertyAnnotated, propertyAccessor, true, entityBinder,
+				isComponentEmbedded, isIdentifierMapper,
+				false, mappings
+		);
+		XProperty property = inferredData.getProperty();
+		setupComponentTuplizer( property, comp );
+
+		PropertyBinder binder = new PropertyBinder();
+		binder.setName( inferredData.getPropertyName() );
+		binder.setValue( comp );
+		binder.setProperty( inferredData.getProperty() );
+		binder.setPropertyAccessorName( inferredData.getDefaultAccess() );
+		Property prop = binder.make();
+		propertyHolder.addProperty( prop );
+	}
+
+	public static Component fillComponent(
+			PropertyHolder propertyHolder, PropertyData inferredData,
+			boolean propertyAnnotated, String propertyAccessor, boolean isNullable,
+			EntityBinder entityBinder,
+			boolean isComponentEmbedded, boolean isIdentifierMapper, boolean inSecondPass, ExtendedMappings mappings
+	) {
+		/**
+		 * inSecondPass can only be used to apply right away the second pass of a composite-element
+		 * Because it's a value type, there is no bidirectional association, hence second pass
+		 * ordering does not matter
+		 */
+		Component comp = new Component( propertyHolder.getPersistentClass() );
+		comp.setEmbedded( isComponentEmbedded );
+		//yuk
+		comp.setTable( propertyHolder.getTable() );
+		if ( !isIdentifierMapper ) {
+			comp.setComponentClassName( inferredData.getClassOrElementName() );
+		}
+		else {
+			comp.setComponentClassName( comp.getOwner().getClassName() );
+		}
+		comp.setNodeName( inferredData.getPropertyName() );
+		String subpath = StringHelper.qualify( propertyHolder.getPath(), inferredData.getPropertyName() );
+		log.debug( "Binding component with path: " + subpath );
+		PropertyHolder subHolder = PropertyHolderBuilder.buildPropertyHolder(
+				comp, subpath,
+				inferredData, propertyHolder, mappings
+		);
+		List<PropertyData> classElements = new ArrayList<PropertyData>();
+		XClass returnedClassOrElement = inferredData.getClassOrElement();
+		addElementsOfAClass(
+				classElements,
+				subHolder,
+				propertyAnnotated,
+				propertyAccessor, returnedClassOrElement, mappings
+		);
+		//add elements of the embeddable superclass
+		XClass superClass = inferredData.getPropertyClass().getSuperclass();
+		while ( superClass != null && superClass.isAnnotationPresent( MappedSuperclass.class ) ) {
+			//FIXME: proper support of typevariables incl var resolved at upper levels
+			addElementsOfAClass(
+					classElements,
+					subHolder,
+					entityBinder.isPropertyAnnotated( superClass ),
+					propertyAccessor, superClass, mappings
+			);
+			superClass = superClass.getSuperclass();
+		}
+		for ( PropertyData propertyAnnotatedElement : classElements ) {
+			processElementAnnotations(
+					subHolder, isNullable ?
+					Nullability.NO_CONSTRAINT :
+					Nullability.FORCED_NOT_NULL,
+					propertyAnnotatedElement.getProperty(), propertyAnnotatedElement,
+					new HashMap<String, IdGenerator>(), entityBinder, isIdentifierMapper, isComponentEmbedded,
+					inSecondPass, mappings
+			);
+		}
+		return comp;
+	}
+
+	private static void bindId(
+			String generatorType, String generatorName,
+			PropertyData inferredData, Ejb3Column[] columns, PropertyHolder propertyHolder,
+			Map<String, IdGenerator> localGenerators,
+			boolean isComposite,
+			boolean isPropertyAnnotated,
+			String propertyAccessor, EntityBinder entityBinder, Type typeAnn, boolean isEmbedded,
+			boolean isIdentifierMapper, ExtendedMappings mappings
+	) {
+		/*
+		 * Fill simple value and property since and Id is a property
+		 */
+		PersistentClass persistentClass = propertyHolder.getPersistentClass();
+		if ( !( persistentClass instanceof RootClass ) ) {
+			throw new AnnotationException(
+					"Unable to define/override @Id(s) on a subclass: "
+							+ propertyHolder.getEntityName()
+			);
+		}
+		RootClass rootClass = (RootClass) persistentClass;
+		String persistentClassName = rootClass == null ?
+				null :
+				rootClass.getClassName();
+		SimpleValue id;
+		if ( isComposite ) {
+			id = fillComponent(
+					propertyHolder, inferredData, isPropertyAnnotated, propertyAccessor,
+					false, entityBinder, isEmbedded, isIdentifierMapper, false, mappings
+			);
+			Component componentId = (Component) id;
+			componentId.setKey( true );
+			if ( componentId.getPropertySpan() == 0 ) {
+				throw new AnnotationException( componentId.getComponentClassName() + " has no persistent id property" );
+			}
+			//tuplizers
+			XProperty property = inferredData.getProperty();
+			setupComponentTuplizer( property, componentId );
+		}
+		else {
+			for ( Ejb3Column column : columns ) {
+				column.forceNotNull(); //this is an id
+			}
+			SimpleValueBinder value = new SimpleValueBinder();
+			value.setPropertyName( inferredData.getPropertyName() );
+			value.setReturnedClassName( inferredData.getTypeName() );
+			value.setColumns( columns );
+			value.setPersistentClassName( persistentClassName );
+			value.setMappings( mappings );
+			value.setExplicitType( typeAnn );
+			id = value.make();
+		}
+		rootClass.setIdentifier( id );
+		BinderHelper.makeIdGenerator( id, generatorType, generatorName, mappings, localGenerators );
+		if ( isEmbedded ) {
+			rootClass.setEmbeddedIdentifier( inferredData.getPropertyClass() == null );
+		}
+		else {
+			PropertyBinder binder = new PropertyBinder();
+			binder.setName( inferredData.getPropertyName() );
+			binder.setValue( id );
+			binder.setPropertyAccessorName( inferredData.getDefaultAccess() );
+			binder.setProperty( inferredData.getProperty() );
+			Property prop = binder.make();
+			rootClass.setIdentifierProperty( prop );
+		}
+	}
+
+	private static void setupComponentTuplizer(XProperty property, Component component) {
+		if ( property == null ) return;
+		if ( property.isAnnotationPresent( Tuplizers.class ) ) {
+			for ( Tuplizer tuplizer : property.getAnnotation( Tuplizers.class ).value() ) {
+				EntityMode mode = EntityMode.parse( tuplizer.entityMode() );
+				component.addTuplizer( mode, tuplizer.impl().getName() );
+			}
+		}
+		if ( property.isAnnotationPresent( Tuplizer.class ) ) {
+			Tuplizer tuplizer = property.getAnnotation( Tuplizer.class );
+			EntityMode mode = EntityMode.parse( tuplizer.entityMode() );
+			component.addTuplizer( mode, tuplizer.impl().getName() );
+		}
+	}
+
+	private static void bindManyToOne(
+			String cascadeStrategy, Ejb3JoinColumn[] columns, boolean optional,
+			boolean ignoreNotFound, boolean cascadeOnDelete,
+			XClass targetEntity, PropertyHolder propertyHolder,
+			PropertyData inferredData, boolean unique, boolean isIdentifierMapper, boolean inSecondPass,
+			ExtendedMappings mappings
+	) {
+		//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, mappings ) ) {
+			value.setReferencedEntityName( inferredData.getClassOrElementName() );
+		}
+		else {
+			value.setReferencedEntityName( targetEntity.getName() );
+		}
+		defineFetchingStrategy( value, inferredData.getProperty() );
+		//value.setFetchMode( fetchMode );
+		value.setIgnoreNotFound( ignoreNotFound );
+		value.setCascadeDeleteEnabled( cascadeOnDelete );
+		//value.setLazy( fetchMode != FetchMode.JOIN );
+		if ( !optional ) {
+			for ( Ejb3JoinColumn column : columns ) {
+				column.setNullable( false );
+			}
+		}
+		value.setTypeName( inferredData.getClassOrElementName() );
+		final String propertyName = inferredData.getPropertyName();
+		value.setTypeUsingReflection( propertyHolder.getClassName(), propertyName );
+
+		ForeignKey fk = inferredData.getProperty().getAnnotation( ForeignKey.class );
+		String fkName = fk != null ?
+				fk.name() :
+				"";
+		if ( !BinderHelper.isDefault( fkName ) ) value.setForeignKeyName( fkName );
+
+		String path = propertyHolder.getPath() + "." + propertyName;
+		FkSecondPass secondPass = new FkSecondPass(
+				value, columns,
+				!optional && unique, //cannot have nullabe and unique on certain DBs like Derby
+				propertyHolder.getEntityOwnerClassName(),
+				path, mappings
+		);
+		if ( inSecondPass ) {
+			secondPass.doSecondPass( mappings.getClasses() );
+		}
+		else {
+			mappings.addSecondPass(
+					secondPass
+			);
+		}
+		Ejb3Column.checkPropertyConsistency( columns, propertyHolder.getEntityName() + propertyName );
+		PropertyBinder binder = new PropertyBinder();
+		binder.setName( propertyName );
+		binder.setValue( value );
+		//binder.setCascade(cascadeStrategy);
+		if ( isIdentifierMapper ) {
+			binder.setInsertable( false );
+			binder.setInsertable( false );
+		}
+		else {
+			binder.setInsertable( columns[0].isInsertable() );
+			binder.setUpdatable( columns[0].isUpdatable() );
+		}
+		binder.setPropertyAccessorName( inferredData.getDefaultAccess() );
+		binder.setCascade( cascadeStrategy );
+		Property prop = binder.make();
+		//composite FK columns are in the same table so its OK
+		propertyHolder.addProperty( prop, columns );
+	}
+
+	protected static void defineFetchingStrategy(ToOne toOne, XProperty property) {
+		LazyToOne lazy = property.getAnnotation( LazyToOne.class );
+		Fetch fetch = property.getAnnotation( Fetch.class );
+		ManyToOne manyToOne = property.getAnnotation( ManyToOne.class );
+		OneToOne oneToOne = property.getAnnotation( OneToOne.class );
+		FetchType fetchType;
+		if ( manyToOne != null ) {
+			fetchType = manyToOne.fetch();
+		}
+		else if ( oneToOne != null ) {
+			fetchType = oneToOne.fetch();
+		}
+		else {
+			throw new AssertionFailure(
+					"Define fetch strategy on a property not annotated with @OneToMany nor @OneToOne"
+			);
+		}
+		if ( lazy != null ) {
+			toOne.setLazy( !( lazy.value() == LazyToOneOption.FALSE ) );
+			toOne.setUnwrapProxy( ( lazy.value() == LazyToOneOption.NO_PROXY ) );
+		}
+		else {
+			toOne.setLazy( fetchType == FetchType.LAZY );
+			toOne.setUnwrapProxy( false );
+		}
+		if ( fetch != null ) {
+			if ( fetch.value() == org.hibernate.annotations.FetchMode.JOIN ) {
+				toOne.setFetchMode( FetchMode.JOIN );
+				toOne.setLazy( false );
+				toOne.setUnwrapProxy( false );
+			}
+			else if ( fetch.value() == org.hibernate.annotations.FetchMode.SELECT ) {
+				toOne.setFetchMode( FetchMode.SELECT );
+			}
+			else if ( fetch.value() == org.hibernate.annotations.FetchMode.SUBSELECT ) {
+				throw new AnnotationException( "Use of FetchMode.SUBSELECT not allowed on ToOne associations" );
+			}
+			else {
+				throw new AssertionFailure( "Unknown FetchMode: " + fetch.value() );
+			}
+		}
+		else {
+			toOne.setFetchMode( getFetchMode( fetchType ) );
+		}
+	}
+
+	private static void bindOneToOne(
+			String cascadeStrategy,
+			Ejb3JoinColumn[] joinColumns,
+			boolean optional,
+			FetchMode fetchMode,
+			boolean ignoreNotFound,
+			boolean cascadeOnDelete,
+			XClass targetEntity,
+			PropertyHolder propertyHolder,
+			PropertyData inferredData, String mappedBy,
+			boolean trueOneToOne,
+			boolean isIdentifierMapper, boolean inSecondPass, ExtendedMappings mappings
+	) {
+		//column.getTable() => persistentClass.getTable()
+		final String propertyName = inferredData.getPropertyName();
+		log.debug( "Fetching " + propertyName + " with " + fetchMode );
+		boolean mapToPK = true;
+		if ( !trueOneToOne ) {
+			//try to find a hidden true one to one (FK == PK columns)
+			Iterator idColumns = propertyHolder.getIdentifier().getColumnIterator();
+			List<String> idColumnNames = new ArrayList<String>();
+			org.hibernate.mapping.Column currentColumn;
+			while ( idColumns.hasNext() ) {
+				currentColumn = (org.hibernate.mapping.Column) idColumns.next();
+				idColumnNames.add( currentColumn.getName() );
+			}
+			for ( Ejb3JoinColumn col : joinColumns ) {
+				if ( !idColumnNames.contains( col.getMappingColumn().getName() ) ) {
+					mapToPK = false;
+					break;
+				}
+			}
+		}
+		if ( trueOneToOne || mapToPK || !BinderHelper.isDefault( mappedBy ) ) {
+			//is a true one-to-one
+			//FIXME referencedColumnName ignored => ordering may fail.
+			OneToOneSecondPass secondPass = new OneToOneSecondPass(
+					mappedBy,
+					propertyHolder.getEntityName(),
+					propertyName,
+					propertyHolder, inferredData, targetEntity, ignoreNotFound, cascadeOnDelete,
+					optional, cascadeStrategy, joinColumns, mappings
+			);
+			if ( inSecondPass ) {
+				secondPass.doSecondPass( mappings.getClasses() );
+			}
+			else {
+				mappings.addSecondPass(
+						secondPass, BinderHelper.isDefault( mappedBy )
+				);
+			}
+		}
+		else {
+			//has a FK on the table
+			bindManyToOne(
+					cascadeStrategy, joinColumns, optional, ignoreNotFound, cascadeOnDelete,
+					targetEntity,
+					propertyHolder, inferredData, true, isIdentifierMapper, inSecondPass, mappings
+			);
+		}
+	}
+
+	private static String generatorType(GenerationType generatorEnum) {
+		switch (generatorEnum) {
+			case IDENTITY:
+				return "identity";
+			case AUTO:
+				return "native";
+			case TABLE:
+				return MultipleHiLoPerTableGenerator.class.getName();
+			case SEQUENCE:
+				return "seqhilo";
+		}
+		throw new AssertionFailure( "Unknown GeneratorType: " + generatorEnum );
+	}
+
+	private static EnumSet<CascadeType> convertToHibernateCascadeType(javax.persistence.CascadeType[] ejbCascades) {
+		EnumSet<CascadeType> hibernateCascadeSet = EnumSet.noneOf( CascadeType.class );
+		if ( ejbCascades != null && ejbCascades.length > 0 ) {
+			for ( javax.persistence.CascadeType cascade : ejbCascades ) {
+				switch (cascade) {
+					case ALL:
+						hibernateCascadeSet.add( CascadeType.ALL );
+						break;
+					case PERSIST:
+						hibernateCascadeSet.add( CascadeType.PERSIST );
+						break;
+					case MERGE:
+						hibernateCascadeSet.add( CascadeType.MERGE );
+						break;
+					case REMOVE:
+						hibernateCascadeSet.add( CascadeType.REMOVE );
+						break;
+					case REFRESH:
+						hibernateCascadeSet.add( CascadeType.REFRESH );
+						break;
+				}
+			}
+		}
+
+		return hibernateCascadeSet;
+	}
+
+	private static String getCascadeStrategy(
+			javax.persistence.CascadeType[] ejbCascades, Cascade hibernateCascadeAnnotation
+	) {
+		EnumSet<CascadeType> hibernateCascadeSet = convertToHibernateCascadeType( ejbCascades );
+		CascadeType[] hibernateCascades = hibernateCascadeAnnotation == null ?
+				null :
+				hibernateCascadeAnnotation.value();
+
+		if ( hibernateCascades != null && hibernateCascades.length > 0 ) {
+			for ( CascadeType cascadeType : hibernateCascades ) {
+				hibernateCascadeSet.add( cascadeType );
+			}
+		}
+
+		StringBuilder cascade = new StringBuilder();
+		Iterator<CascadeType> cascadeType = hibernateCascadeSet.iterator();
+		while ( cascadeType.hasNext() ) {
+			switch (cascadeType.next()) {
+				case ALL:
+					cascade.append( "," ).append( "all" );
+					break;
+				case SAVE_UPDATE:
+					cascade.append( "," ).append( "save-update" );
+					break;
+				case PERSIST:
+					cascade.append( "," ).append( "persist" );
+					break;
+				case MERGE:
+					cascade.append( "," ).append( "merge" );
+					break;
+				case LOCK:
+					cascade.append( "," ).append( "lock" );
+					break;
+				case REFRESH:
+					cascade.append( "," ).append( "refresh" );
+					break;
+				case REPLICATE:
+					cascade.append( "," ).append( "replicate" );
+					break;
+				case EVICT:
+					cascade.append( "," ).append( "evict" );
+					break;
+				case DELETE:
+					cascade.append( "," ).append( "delete" );
+					break;
+				case DELETE_ORPHAN:
+					cascade.append( "," ).append( "delete-orphan" );
+					break;
+				case REMOVE:
+					cascade.append( "," ).append( "delete" );
+					break;
+			}
+		}
+		return cascade.length() > 0 ?
+				cascade.substring( 1 ) :
+				"none";
+	}
+
+	public static FetchMode getFetchMode(FetchType fetch) {
+		if ( fetch == FetchType.EAGER ) {
+			return FetchMode.JOIN;
+		}
+		else {
+			return FetchMode.SELECT;
+		}
+	}
+
+	private static HashMap<String, IdGenerator> buildLocalGenerators(XAnnotatedElement annElt, Mappings mappings) {
+		HashMap<String, IdGenerator> generators = new HashMap<String, IdGenerator>();
+		TableGenerator tabGen = annElt.getAnnotation( TableGenerator.class );
+		SequenceGenerator seqGen = annElt.getAnnotation( SequenceGenerator.class );
+		GenericGenerator genGen = annElt.getAnnotation( GenericGenerator.class );
+		if ( tabGen != null ) {
+			IdGenerator idGen = buildIdGenerator( tabGen, mappings );
+			generators.put( idGen.getName(), idGen );
+		}
+		if ( seqGen != null ) {
+			IdGenerator idGen = buildIdGenerator( seqGen, mappings );
+			generators.put( idGen.getName(), idGen );
+		}
+		if ( genGen != null ) {
+			IdGenerator idGen = buildIdGenerator( genGen, mappings );
+			generators.put( idGen.getName(), idGen );
+		}
+		return generators;
+	}
+
+	public static boolean isDefault(XClass clazz, ExtendedMappings mappings) {
+		return mappings.getReflectionManager().equals( clazz, void.class );
+	}
+
+	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,
+					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,
+						reflectionManager
+				);
+				state.hasParents = superEntityState != null;
+				final boolean nonDefault = state.type != null && !InheritanceType.SINGLE_TABLE.equals( state.type );
+				if ( superclassState.type != null ) {
+					final boolean mixingStrategy = state.type != null && !state.type.equals( superclassState.type );
+					if ( nonDefault && mixingStrategy ) {
+						log.warn(
+								"Mixing inheritance strategy in a entity hierarchy is not allowed, ignoring sub strategy in: " + clazz
+										.getName()
+						);
+					}
+					state.type = superclassState.type;
+				}
+			}
+			inheritanceStatePerClass.put( clazz, state );
+		}
+		return inheritanceStatePerClass;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/AnnotationConfiguration.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/AnnotationConfiguration.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/AnnotationConfiguration.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,922 +0,0 @@
-// $Id$
-package org.hibernate.cfg;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.ResourceBundle;
-import java.util.Set;
-import java.util.SortedSet;
-import java.util.StringTokenizer;
-import java.util.TreeSet;
-import javax.persistence.Entity;
-import javax.persistence.MappedSuperclass;
-
-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.AssertionFailure;
-import org.hibernate.HibernateException;
-import org.hibernate.MappingException;
-import org.hibernate.SessionFactory;
-import org.hibernate.annotations.common.reflection.ReflectionManager;
-import org.hibernate.annotations.common.reflection.XClass;
-import org.hibernate.cfg.annotations.Version;
-import org.hibernate.cfg.annotations.reflection.EJB3ReflectionManager;
-import org.hibernate.event.PreInsertEventListener;
-import org.hibernate.event.PreUpdateEventListener;
-import org.hibernate.event.PostInsertEventListener;
-import org.hibernate.event.PostUpdateEventListener;
-import org.hibernate.event.PostDeleteEventListener;
-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.util.JoinedIterator;
-import org.hibernate.util.ReflectHelper;
-import org.hibernate.util.StringHelper;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
-
-/**
- * Similar to the {@link Configuration} object but handles EJB3 and Hibernate
- * specific annotations as a metadata facility
- *
- * @author Emmanuel Bernard
- */
-public class AnnotationConfiguration extends Configuration {
-	private static Log log = LogFactory.getLog( AnnotationConfiguration.class );
-
-	static {
-		Version.touch(); //touch version
-	}
-
-	public static final String ARTEFACT = "hibernate.mapping.precedence";
-	public static final String DEFAULT_PRECEDENCE = "hbm, class";
-
-	private Map namedGenerators;
-	private Map<String, Map<String, Join>> joins;
-	private Map<String, AnnotatedClassType> classTypes;
-	private Set<String> defaultNamedQueryNames;
-	private Set<String> defaultNamedNativeQueryNames;
-	private Set<String> defaultSqlResulSetMappingNames;
-	private Set<String> defaultNamedGenerators;
-	private Map<String, Properties> generatorTables;
-	private Map<Table, List<String[]>> tableUniqueConstraints;
-	private Map<String, String> mappedByResolver;
-	private Map<String, String> propertyRefResolver;
-	private List<XClass> annotatedClasses;
-	private Map<String, XClass> annotatedClassEntities;
-	private Map<String, Document> hbmEntities;
-	private List<CacheHolder> caches;
-	private List<Document> hbmDocuments; //user ordering matters, hence the list
-	private String precedence = null;
-	private boolean inSecondPass = false;
-	private transient ReflectionManager reflectionManager;
-	private boolean isDefaultProcessed = false;
-
-	public AnnotationConfiguration() {
-		super();
-	}
-
-	public AnnotationConfiguration(SettingsFactory sf) {
-		super( sf );
-	}
-
-	protected List<XClass> orderAndFillHierarchy(List<XClass> original) {
-		//TODO remove embeddable
-		List<XClass> copy = new ArrayList<XClass>( original );
-		//for each class, copy all the relevent hierarchy
-		for ( XClass clazz : original ) {
-			XClass superClass = clazz.getSuperclass();
-			while ( superClass != null && ! reflectionManager.equals( superClass, Object.class ) && ! copy.contains( superClass ) ) {
-				if ( superClass.isAnnotationPresent( Entity.class )
-						|| superClass.isAnnotationPresent( MappedSuperclass.class ) ) {
-					copy.add( superClass );
-				}
-				superClass = superClass.getSuperclass();
-			}
-		}
-		List<XClass> workingCopy = new ArrayList<XClass>( copy );
-		List<XClass> newList = new ArrayList<XClass>( copy.size() );
-		while ( workingCopy.size() > 0 ) {
-			XClass clazz = workingCopy.get( 0 );
-			orderHierarchy( workingCopy, newList, copy, clazz );
-		}
-		return newList;
-	}
-
-	private void orderHierarchy(List<XClass> copy, List<XClass> newList, List<XClass> original, XClass clazz) {
-		if ( clazz == null || reflectionManager.equals( clazz, Object.class ) ) return;
-		//process superclass first
-		orderHierarchy( copy, newList, original, clazz.getSuperclass() );
-		if ( original.contains( clazz ) ) {
-			if ( !newList.contains( clazz ) ) {
-				newList.add( clazz );
-			}
-			copy.remove( clazz );
-		}
-	}
-
-	/**
-	 * Read a mapping from the class annotation metadata (JSR 175).
-	 *
-	 * @param persistentClass the mapped class
-	 * @return the configuration object
-	 */
-	public AnnotationConfiguration addAnnotatedClass(Class persistentClass) throws MappingException {
-		XClass persistentXClass = reflectionManager.toXClass( persistentClass );
-		try {
-			annotatedClasses.add( persistentXClass );
-			return this;
-		}
-		catch (MappingException me) {
-			log.error( "Could not compile the mapping annotations", me );
-			throw me;
-		}
-	}
-
-	/**
-	 * Read package level metadata
-	 *
-	 * @param packageName java package name
-	 * @return the configuration object
-	 */
-	public AnnotationConfiguration addPackage(String packageName) throws MappingException {
-		log.info( "Mapping package " + packageName );
-		try {
-			AnnotationBinder.bindPackage( packageName, createExtendedMappings() );
-			return this;
-		}
-		catch (MappingException me) {
-			log.error( "Could not compile the mapping annotations", me );
-			throw me;
-		}
-	}
-
-	public ExtendedMappings createExtendedMappings() {
-		return new ExtendedMappings(
-				classes,
-				collections,
-				tables,
-				namedQueries,
-				namedSqlQueries,
-				sqlResultSetMappings,
-				defaultNamedQueryNames,
-				defaultNamedNativeQueryNames,
-				defaultSqlResulSetMappingNames,
-				defaultNamedGenerators,
-				imports,
-				secondPasses,
-				propertyReferences,
-				namingStrategy,
-				typeDefs,
-				filterDefinitions,
-				namedGenerators,
-				joins,
-				classTypes,
-				extendsQueue,
-				tableNameBinding, columnNameBindingPerTable, auxiliaryDatabaseObjects,
-				generatorTables,
-				tableUniqueConstraints,
-				mappedByResolver,
-				propertyRefResolver,
-				reflectionManager
-		);
-	}
-
-	@Override
-	public void setCacheConcurrencyStrategy(
-			String clazz, String concurrencyStrategy, String region, boolean cacheLazyProperty
-	) throws MappingException {
-		caches.add( new CacheHolder( clazz, concurrencyStrategy, region, true, cacheLazyProperty ) );
-	}
-
-	@Override
-	public void setCollectionCacheConcurrencyStrategy(String collectionRole, String concurrencyStrategy, String region)
-			throws MappingException {
-		caches.add( new CacheHolder( collectionRole, concurrencyStrategy, region, false, false ) );
-	}
-
-	@Override
-	protected void reset() {
-		super.reset();
-		namedGenerators = new HashMap();
-		joins = new HashMap<String, Map<String, Join>>();
-		classTypes = new HashMap<String, AnnotatedClassType>();
-		generatorTables = new HashMap<String, Properties>();
-		defaultNamedQueryNames = new HashSet<String>();
-		defaultNamedNativeQueryNames = new HashSet<String>();
-		defaultSqlResulSetMappingNames = new HashSet<String>();
-		defaultNamedGenerators = new HashSet<String>();
-		tableUniqueConstraints = new HashMap<Table, List<String[]>>();
-		mappedByResolver = new HashMap<String, String>();
-		propertyRefResolver = new HashMap<String, String>();
-		annotatedClasses = new ArrayList<XClass>();
-		caches = new ArrayList<CacheHolder>();
-		hbmEntities = new HashMap<String, Document>();
-		annotatedClassEntities = new HashMap<String, XClass>();
-		hbmDocuments = new ArrayList<Document>();
-		namingStrategy = EJB3NamingStrategy.INSTANCE;
-		setEntityResolver( new EJB3DTDEntityResolver() );
-		reflectionManager = new EJB3ReflectionManager();
-	}
-
-	@Override
-	protected void secondPassCompile() throws MappingException {
-		log.debug( "Execute first pass mapping processing" );
-		//build annotatedClassEntities
-		{
-			List<XClass> tempAnnotatedClasses = new ArrayList<XClass>( annotatedClasses.size() );
-			for ( XClass clazz : annotatedClasses ) {
-				if ( clazz.isAnnotationPresent( Entity.class ) ) {
-					annotatedClassEntities.put( clazz.getName(), clazz );
-					tempAnnotatedClasses.add( clazz );
-				}
-				else if ( clazz.isAnnotationPresent( MappedSuperclass.class ) ) {
-					tempAnnotatedClasses.add( clazz );
-				}
-				//only keep MappedSuperclasses and Entity in this list
-			}
-			annotatedClasses = tempAnnotatedClasses;
-		}
-
-		//process default values first
-		if ( ! isDefaultProcessed ) {
-			AnnotationBinder.bindDefaults( createExtendedMappings() );
-			isDefaultProcessed = true;
-		}
-
-		//process entities
-		if ( precedence == null ) precedence = getProperties().getProperty( ARTEFACT );
-		if ( precedence == null ) precedence = DEFAULT_PRECEDENCE;
-		StringTokenizer precedences = new StringTokenizer( precedence, ",; ", false );
-		if ( ! precedences.hasMoreElements() ) {
-			throw new MappingException( ARTEFACT + " cannot be empty: " + precedence );
-		}
-		while ( precedences.hasMoreElements() ) {
-			String artifact = (String) precedences.nextElement();
-			removeConflictedArtifact( artifact );
-			processArtifactsOfType( artifact );
-		}
-
-		int cacheNbr = caches.size();
-		for ( int index = 0; index < cacheNbr ; index++ ) {
-			CacheHolder cacheHolder = caches.get( index );
-			if ( cacheHolder.isClass ) {
-				super.setCacheConcurrencyStrategy(
-						cacheHolder.role, cacheHolder.usage, cacheHolder.region, cacheHolder.cacheLazy
-				);
-			}
-			else {
-				super.setCollectionCacheConcurrencyStrategy( cacheHolder.role, cacheHolder.usage, cacheHolder.region );
-			}
-		}
-		caches.clear();
-
-		inSecondPass = true;
-		processFkSecondPassInOrder();
-		Iterator iter = secondPasses.iterator();
-		while ( iter.hasNext() ) {
-			SecondPass sp = (SecondPass) iter.next();
-			//do the second pass of fk before the others and remove them
-			if ( sp instanceof CreateKeySecondPass ) {
-				sp.doSecondPass( classes );
-				iter.remove();
-			}
-		}
-
-		//process OneToManySecondPass in order: first
-		iter = secondPasses.iterator();
-		while ( iter.hasNext() ) {
-			SecondPass sp = (SecondPass) iter.next();
-
-			if ( sp instanceof CreateKeySecondPass ) {
-				sp.doSecondPass( classes );
-				iter.remove();
-			}
-		}
-		super.secondPassCompile();
-		inSecondPass = false;
-		Iterator tables = (Iterator<Map.Entry<Table, List<String[]>>>) tableUniqueConstraints.entrySet().iterator();
-		Table table;
-		Map.Entry entry;
-		String keyName;
-		int uniqueIndexPerTable;
-		while ( tables.hasNext() ) {
-			entry = (Map.Entry) tables.next();
-			table = (Table) entry.getKey();
-			List<String[]> uniqueConstraints = (List<String[]>) entry.getValue();
-			uniqueIndexPerTable = 0;
-			for ( String[] columnNames : uniqueConstraints ) {
-				keyName = "key" + uniqueIndexPerTable++;
-				buildUniqueKeyFromColumnNames( columnNames, table, keyName );
-			}
-		}
-		boolean applyOnDdl = getProperties().getProperty(
-				"hibernate.validator.apply_to_ddl", //org.hibernate.validator.Environment.APPLY_TO_DDL
-				"true" )
-				.equalsIgnoreCase( "true" );
-
-		Constructor validatorCtr = null;
-		Method applyMethod = null;
-		try {
-			Class classValidator = ReflectHelper.classForName("org.hibernate.validator.ClassValidator", this.getClass() );
-			Class messageInterpolator = ReflectHelper.classForName("org.hibernate.validator.MessageInterpolator", this.getClass() );
-			validatorCtr = classValidator.getDeclaredConstructor( new Class[] {
-					Class.class, ResourceBundle.class, messageInterpolator, Map.class, ReflectionManager.class
-					}
-			);
-			applyMethod = classValidator.getMethod( "apply", PersistentClass.class );
-		}
-		catch (ClassNotFoundException e) {
-			log.info( "Hibernate Validator not found: ignoring");
-		}
-		catch (NoSuchMethodException e) {
-			throw new AnnotationException(e);
-		}
-		if ( applyMethod != null && applyOnDdl) {
-			for ( PersistentClass persistentClazz : (Collection<PersistentClass>) classes.values() ) {
-				//integrate the validate framework
-				String className = persistentClazz.getClassName();
-				if ( StringHelper.isNotEmpty( className ) ) {
-					try {
-						Object validator = validatorCtr.newInstance(
-								ReflectHelper.classForName( className ), null, null, null, reflectionManager
-						);
-						applyMethod.invoke( validator, persistentClazz );
-					}
-					catch (Exception e) {
-						log.warn("Unable to apply constraints on DDL for " + className, e);
-					}
-				}
-			}
-		}
-	}
-
-	private void processFkSecondPassInOrder() {
-		log.debug( "processing manytoone fk mappings" );
-		Iterator iter = secondPasses.iterator();
-		/* We need to process FKSecond pass trying to resolve any
-		 * graph circularity (ie PK made of a many to one linking to
-		 * an entity having a PK made of a ManyToOne ...
-		 */
-		SortedSet<FkSecondPass> fkSecondPasses = new TreeSet<FkSecondPass>(
-				new Comparator() {
-					//The comparator implementation has to respect the compare=0 => equals() = true for sets
-					public int compare(Object o1, Object o2) {
-						if (! (o1 instanceof FkSecondPass &&  o2 instanceof FkSecondPass) ) {
-							throw new AssertionFailure("comparint FkSecondPass with non FkSecondPass");
-						}
-						FkSecondPass f1 = (FkSecondPass) o1;
-						FkSecondPass f2 = (FkSecondPass) o2;
-						int compare = f1.getValue().getTable().getQuotedName().compareTo(
-								f2.getValue().getTable().getQuotedName()
-						);
-						if (compare == 0) {
-							//same table, we still need to differenciate true equality
-							if ( f1.hashCode() < f2.hashCode() ) {
-								compare = -1;
-							}
-							else if ( f1.hashCode() == f2.hashCode() ) {
-								compare = 0;
-							}
-							else {
-								compare = 1;
-							}
-						}
-						return compare;
-					}
-				}
-		);
-		while ( iter.hasNext() ) {
-			SecondPass sp = (SecondPass) iter.next();
-			//do the second pass of fk before the others and remove them
-			if ( sp instanceof FkSecondPass ) {
-				fkSecondPasses.add( (FkSecondPass) sp );
-				iter.remove();
-			}
-		}
-		if ( fkSecondPasses.size() > 0 ) {
-			Map<String, Set<String>> isADependencyOf = new HashMap<String, Set<String>>();
-			List orderedFkSecondPasses = new ArrayList( fkSecondPasses.size() );
-			List endOfQueueFkSecondPasses = new ArrayList( fkSecondPasses.size() );
-			List orderedTable = new ArrayList( fkSecondPasses.size() );
-			Iterator it = fkSecondPasses.iterator();
-			while ( it.hasNext() ) {
-				FkSecondPass sp = (FkSecondPass) it.next();
-				String referenceEntityName = sp.getValue().getReferencedEntityName();
-				PersistentClass classMapping = getClassMapping( referenceEntityName );
-				if ( sp.isInPrimaryKey() ) {
-					String dependentTable = classMapping.getTable().getQuotedName();
-					if ( ! isADependencyOf.containsKey( dependentTable ) ) {
-						isADependencyOf.put( dependentTable, new HashSet<String>() );
-					}
-					String table = sp.getValue().getTable().getQuotedName();
-					isADependencyOf.get( dependentTable ).add( table );
-					int beAfter = orderedTable.indexOf( dependentTable );
-					int beBefore = orderedFkSecondPasses.size();
-					Set<String> dependencies = isADependencyOf.get( table );
-					if ( dependencies != null ) {
-						for ( String tableDep : dependencies ) {
-							//for each declared dependency take the lowest index
-							int index = orderedTable.indexOf( tableDep );
-							//index = -1 when we have a self dependency
-							beBefore = index != -1 && index < beBefore ? index : beBefore;
-						}
-					}
-					int currentIndex = orderedTable.indexOf( table );
-					if ( beBefore < beAfter ||
-							( currentIndex != -1 && ( currentIndex < beAfter || currentIndex > beBefore ) )
-							) {
-						StringBuilder sb = new StringBuilder(
-								"Foreign key circularity dependency involving the following tables: "
-						);
-						//TODO deduplicate tables
-						sb.append( table );
-						if ( beAfter > -1 ) sb.append( ", " ).append( dependentTable );
-						if ( beBefore < orderedFkSecondPasses.size() ) {
-							sb.append( ", " ).append( orderedTable.get( beBefore ) );
-						}
-						throw new AnnotationException( sb.toString() );
-					}
-					currentIndex = currentIndex == -1 ? beBefore : currentIndex;
-					orderedTable.add( currentIndex, table );
-					orderedFkSecondPasses.add( currentIndex, sp );
-				}
-				else {
-					endOfQueueFkSecondPasses.add( sp );
-				}
-			}
-			it = orderedFkSecondPasses.listIterator();
-			while ( it.hasNext() ) {
-				( (SecondPass) it.next() ).doSecondPass( classes );
-			}
-			it = endOfQueueFkSecondPasses.listIterator();
-			while ( it.hasNext() ) {
-				( (SecondPass) it.next() ).doSecondPass( classes );
-			}
-		}
-	}
-
-	private void processArtifactsOfType(String artifact) {
-		if ( "hbm".equalsIgnoreCase( artifact ) ) {
-			log.debug( "Process hbm files" );
-			for ( Document document : hbmDocuments ) {
-				super.add( document );
-			}
-			hbmDocuments.clear();
-			hbmEntities.clear();
-		}
-		else if ( "class".equalsIgnoreCase( artifact ) ) {
-			log.debug( "Process annotated classes" );
-			//bind classes in the correct order calculating some inheritance state
-			List<XClass> orderedClasses = orderAndFillHierarchy( annotatedClasses );
-			Map<XClass, InheritanceState> inheritanceStatePerClass = AnnotationBinder.buildInheritanceStates(
-					orderedClasses, reflectionManager
-			);
-			ExtendedMappings mappings = createExtendedMappings();
-			for ( XClass clazz : orderedClasses ) {
-				//todo use the same extended mapping
-				AnnotationBinder.bindClass( clazz, inheritanceStatePerClass, mappings );
-			}
-			annotatedClasses.clear();
-			annotatedClassEntities.clear();
-		}
-		else {
-			log.warn( "Unknown artifact: " + artifact );
-		}
-	}
-
-	private void removeConflictedArtifact(String artifact) {
-		if ( "hbm".equalsIgnoreCase( artifact ) ) {
-			for ( String entity : hbmEntities.keySet() ) {
-				if ( annotatedClassEntities.containsKey( entity ) ) {
-					annotatedClasses.remove( annotatedClassEntities.get( entity ) );
-					annotatedClassEntities.remove( entity );
-				}
-			}
-		}
-		else if ( "class".equalsIgnoreCase( artifact ) ) {
-			for ( String entity : annotatedClassEntities.keySet() ) {
-				if ( hbmEntities.containsKey( entity ) ) {
-					hbmDocuments.remove( hbmEntities.get( entity ) );
-					hbmEntities.remove( entity );
-				}
-			}
-		}
-	}
-
-	private void buildUniqueKeyFromColumnNames(String[] columnNames, Table table, String keyName) {
-		UniqueKey uc;
-		int size = columnNames.length;
-		Column[] columns = new Column[size];
-		Set<Column> unbound = new HashSet<Column>();
-		Set<Column> unboundNoLogical = new HashSet<Column>();
-		ExtendedMappings mappings = createExtendedMappings();
-		for ( int index = 0; index < size ; index++ ) {
-			String columnName;
-			try {
-				columnName = mappings.getPhysicalColumnName( columnNames[index], table );
-				columns[index] = new Column( columnName );
-				unbound.add( columns[index] );
-				//column equals and hashcode is based on column name
-			}
-			catch( MappingException e ) {
-				unboundNoLogical.add( new Column( columnNames[index] ) );
-			}
-		}
-		for ( Column column : columns ) {
-			if ( table.containsColumn( column ) ) {
-				uc = table.getOrCreateUniqueKey( keyName );
-				uc.addColumn( table.getColumn( column ) );
-				unbound.remove( column );
-			}
-		}
-		if ( unbound.size() > 0 || unboundNoLogical.size() > 0 ) {
-			StringBuilder sb = new StringBuilder( "Unable to create unique key constraint (" );
-			for ( String columnName : columnNames ) {
-				sb.append( columnName ).append( ", " );
-			}
-			sb.setLength( sb.length() - 2 );
-			sb.append( ") on table " ).append( table.getName() ).append( ": " );
-			for ( Column column : unbound ) {
-				sb.append( column.getName() ).append( ", " );
-			}
-			for ( Column column : unboundNoLogical ) {
-				sb.append( column.getName() ).append( ", " );
-			}
-			sb.setLength( sb.length() - 2 );
-			sb.append( " not found" );
-			throw new AnnotationException( sb.toString() );
-		}
-	}
-
-	@Override
-	protected void parseMappingElement(Element subelement, String name) {
-		Attribute rsrc = subelement.attribute( "resource" );
-		Attribute file = subelement.attribute( "file" );
-		Attribute jar = subelement.attribute( "jar" );
-		Attribute pckg = subelement.attribute( "package" );
-		Attribute clazz = subelement.attribute( "class" );
-		if ( rsrc != null ) {
-			log.debug( name + "<-" + rsrc );
-			addResource( rsrc.getValue() );
-		}
-		else if ( jar != null ) {
-			log.debug( name + "<-" + jar );
-			addJar( new File( jar.getValue() ) );
-		}
-		else if ( file != null ) {
-			log.debug( name + "<-" + file );
-			addFile( file.getValue() );
-		}
-		else if ( pckg != null ) {
-			log.debug( name + "<-" + pckg );
-			addPackage( pckg.getValue() );
-		}
-		else if ( clazz != null ) {
-			log.debug( name + "<-" + clazz );
-			Class loadedClass = null;
-			try {
-				loadedClass = ReflectHelper.classForName( clazz.getValue() );
-			}
-			catch (ClassNotFoundException cnf) {
-				throw new MappingException(
-						"Unable to load class declared as <mapping class=\"" + clazz.getValue() + "\"/> in the configuration:",
-						cnf
-				);
-			}
-			catch (NoClassDefFoundError ncdf) {
-				throw new MappingException(
-						"Unable to load class declared as <mapping class=\"" + clazz.getValue() + "\"/> in the configuration:",
-						ncdf
-				);
-			}
-
-			addAnnotatedClass( loadedClass );
-		}
-		else {
-			throw new MappingException( "<mapping> element in configuration specifies no attributes" );
-		}
-	}
-
-	@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
-			if ( !ejb3Xml ) super.add( doc );
-		}
-		else {
-			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 );
-			}
-			else {
-				List<String> classnames = ( (EJB3ReflectionManager) reflectionManager ).getXMLContext().addDocument( doc );
-				for ( String classname : classnames ) {
-					try {
-						annotatedClasses.add( reflectionManager.classForName( classname, this.getClass() ) );
-					}
-					catch (ClassNotFoundException e) {
-						throw new AnnotationException( "Unable to load class defined in XML: " + classname, e );
-					}
-				}
-			}
-		}
-	}
-
-	private static void findClassNames(
-			String defaultPackage, final Element startNode,
-			final java.util.Set names
-	) {
-		// if we have some extends we need to check if those classes possibly could be inside the
-		// same hbm.xml file...
-		Iterator[] classes = new Iterator[4];
-		classes[0] = startNode.elementIterator( "class" );
-		classes[1] = startNode.elementIterator( "subclass" );
-		classes[2] = startNode.elementIterator( "joined-subclass" );
-		classes[3] = startNode.elementIterator( "union-subclass" );
-
-		Iterator classIterator = new JoinedIterator( classes );
-		while ( classIterator.hasNext() ) {
-			Element element = (Element) classIterator.next();
-			String entityName = element.attributeValue( "entity-name" );
-			if ( entityName == null ) entityName = getClassName( element.attribute( "name" ), defaultPackage );
-			names.add( entityName );
-			findClassNames( defaultPackage, element, names );
-		}
-	}
-
-	private static String getClassName(Attribute name, String defaultPackage) {
-		if ( name == null ) return null;
-		String unqualifiedName = name.getValue();
-		if ( unqualifiedName == null ) return null;
-		if ( unqualifiedName.indexOf( '.' ) < 0 && defaultPackage != null ) {
-			return defaultPackage + '.' + unqualifiedName;
-		}
-		return unqualifiedName;
-	}
-
-	public void setPrecedence(String precedence) {
-		this.precedence = precedence;
-	}
-
-	private static class CacheHolder {
-		public CacheHolder(String role, String usage, String region, boolean isClass, boolean cacheLazy) {
-			this.role = role;
-			this.usage = usage;
-			this.region = region;
-			this.isClass = isClass;
-			this.cacheLazy = cacheLazy;
-		}
-
-		public String role;
-		public String usage;
-		public String region;
-		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 );
-				//saxReader.setFeature( "http://apache.org/xml/features/validation/dynamic", true );
-				//set the default schema locators
-				saxReader.setProperty(
-						"http://apache.org/xml/properties/schema/external-schemaLocation",
-						"http://java.sun.com/xml/ns/persistence/orm orm_1_0.xsd"
-				);
-			}
-			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 );
-			}
-		}
-	}
-
-	public SessionFactory buildSessionFactory() throws HibernateException {
-		//add validator events if the jar is available
-		boolean enableValidatorListeners = ! "false".equalsIgnoreCase( getProperty( "hibernate.validator.autoregister_listeners" ) );
-		Class validateEventListenerClass = null;
-		try {
-			validateEventListenerClass = ReflectHelper.classForName(
-					"org.hibernate.validator.event.ValidateEventListener",
-					AnnotationConfiguration.class );
-		}
-		catch (ClassNotFoundException e) {
-			//validator is not present
-			log.debug( "Validator not present in classpath, ignoring event listener registration" );
-		}
-		if (enableValidatorListeners && validateEventListenerClass != null) {
-			//TODO so much duplication
-			Object validateEventListener;
-			try {
-				validateEventListener = validateEventListenerClass.newInstance();
-			}
-			catch (Exception e) {
-				throw new AnnotationException("Unable to load Validator event listener", e );
-			}
-			{
-				boolean present = false;
-				PreInsertEventListener[] listeners = getEventListeners().getPreInsertEventListeners();
-				if (listeners != null) {
-					for ( Object eventListener : listeners ) {
-						//not isAssignableFrom since the user could subclass
-						present = present || validateEventListenerClass == eventListener.getClass();
-					}
-					if (!present) {
-						int length = listeners.length + 1;
-						PreInsertEventListener[] newListeners = new PreInsertEventListener[length];
-						for ( int i = 0 ; i < length - 1 ; i++ ) {
-							newListeners[i] = listeners[i];
-						}
-						newListeners[length-1] = (PreInsertEventListener) validateEventListener;
-						getEventListeners().setPreInsertEventListeners(newListeners);
-					}
-				}
-				else {
-					getEventListeners().setPreInsertEventListeners(
-							new PreInsertEventListener[] { (PreInsertEventListener) validateEventListener }
-					);
-				}
-			}
-
-			//update event listener
-			{
-				boolean present = false;
-				PreUpdateEventListener[] listeners = getEventListeners().getPreUpdateEventListeners();
-				if (listeners != null) {
-					for ( Object eventListener : listeners ) {
-						//not isAssignableFrom since the user could subclass
-						present = present || validateEventListenerClass == eventListener.getClass();
-					}
-					if (!present) {
-						int length = listeners.length + 1;
-						PreUpdateEventListener[] newListeners = new PreUpdateEventListener[length];
-						for ( int i = 0 ; i < length - 1 ; i++ ) {
-							newListeners[i] = listeners[i];
-						}
-						newListeners[length-1] = (PreUpdateEventListener) validateEventListener;
-						getEventListeners().setPreUpdateEventListeners(newListeners);
-					}
-				}
-				else {
-					getEventListeners().setPreUpdateEventListeners(
-							new PreUpdateEventListener[] { (PreUpdateEventListener) validateEventListener }
-					);
-				}
-			}
-		}
-
-		//add search events if the jar is available
-		boolean enableSearchListeners = ! "false".equalsIgnoreCase( getProperty( "hibernate.search.autoregister_listeners" ) );
-		Class searchEventListenerClass = null;
-		try {
-			searchEventListenerClass = ReflectHelper.classForName(
-					"org.hibernate.search.event.FullTextIndexEventListener",
-					AnnotationConfiguration.class );
-		}
-		catch (ClassNotFoundException e) {
-			//search is not present
-			log.debug( "Search not present in classpath, ignoring event listener registration" );
-		}
-		if (enableSearchListeners && searchEventListenerClass != null) {
-			//TODO so much duplication
-			Object searchEventListener;
-			try {
-				searchEventListener = searchEventListenerClass.newInstance();
-			}
-			catch (Exception e) {
-				throw new AnnotationException("Unable to load Search event listener", e );
-			}
-			{
-				boolean present = false;
-				PostInsertEventListener[] listeners = getEventListeners().getPostInsertEventListeners();
-				if (listeners != null) {
-					for ( Object eventListener : listeners ) {
-						//not isAssignableFrom since the user could subclass
-						present = present || searchEventListenerClass == eventListener.getClass();
-					}
-					if (!present) {
-						int length = listeners.length + 1;
-						PostInsertEventListener[] newListeners = new PostInsertEventListener[length];
-						for ( int i = 0 ; i < length - 1 ; i++ ) {
-							newListeners[i] = listeners[i];
-						}
-						newListeners[length-1] = (PostInsertEventListener) searchEventListener;
-						getEventListeners().setPostInsertEventListeners(newListeners);
-					}
-				}
-				else {
-					getEventListeners().setPostInsertEventListeners(
-							new PostInsertEventListener[] { (PostInsertEventListener) searchEventListener }
-					);
-				}
-			}
-			{
-				boolean present = false;
-				PostUpdateEventListener[] listeners = getEventListeners().getPostUpdateEventListeners();
-				if (listeners != null) {
-					for ( Object eventListener : listeners ) {
-						//not isAssignableFrom since the user could subclass
-						present = present || searchEventListenerClass == eventListener.getClass();
-					}
-					if (!present) {
-						int length = listeners.length + 1;
-						PostUpdateEventListener[] newListeners = new PostUpdateEventListener[length];
-						for ( int i = 0 ; i < length - 1 ; i++ ) {
-							newListeners[i] = listeners[i];
-						}
-						newListeners[length-1] = (PostUpdateEventListener) searchEventListener;
-						getEventListeners().setPostUpdateEventListeners(newListeners);
-					}
-				}
-				else {
-					getEventListeners().setPostUpdateEventListeners(
-							new PostUpdateEventListener[] { (PostUpdateEventListener) searchEventListener }
-					);
-				}
-			}
-			{
-				boolean present = false;
-				PostDeleteEventListener[] listeners = getEventListeners().getPostDeleteEventListeners();
-				if (listeners != null) {
-					for ( Object eventListener : listeners ) {
-						//not isAssignableFrom since the user could subclass
-						present = present || searchEventListenerClass == eventListener.getClass();
-					}
-					if (!present) {
-						int length = listeners.length + 1;
-						PostDeleteEventListener[] newListeners = new PostDeleteEventListener[length];
-						for ( int i = 0 ; i < length - 1 ; i++ ) {
-							newListeners[i] = listeners[i];
-						}
-						newListeners[length-1] = (PostDeleteEventListener) searchEventListener;
-						getEventListeners().setPostDeleteEventListeners(newListeners);
-					}
-				}
-				else {
-					getEventListeners().setPostDeleteEventListeners(
-							new PostDeleteEventListener[] { (PostDeleteEventListener) searchEventListener }
-					);
-				}
-			}
-		}
-		return super.buildSessionFactory();
-	}
-
-	//not a public API
-	public ReflectionManager getReflectionManager() {
-		return reflectionManager;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/AnnotationConfiguration.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/AnnotationConfiguration.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/AnnotationConfiguration.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/AnnotationConfiguration.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,922 @@
+// $Id$
+package org.hibernate.cfg;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.ResourceBundle;
+import java.util.Set;
+import java.util.SortedSet;
+import java.util.StringTokenizer;
+import java.util.TreeSet;
+import javax.persistence.Entity;
+import javax.persistence.MappedSuperclass;
+
+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.AssertionFailure;
+import org.hibernate.HibernateException;
+import org.hibernate.MappingException;
+import org.hibernate.SessionFactory;
+import org.hibernate.annotations.common.reflection.ReflectionManager;
+import org.hibernate.annotations.common.reflection.XClass;
+import org.hibernate.cfg.annotations.Version;
+import org.hibernate.cfg.annotations.reflection.EJB3ReflectionManager;
+import org.hibernate.event.PreInsertEventListener;
+import org.hibernate.event.PreUpdateEventListener;
+import org.hibernate.event.PostInsertEventListener;
+import org.hibernate.event.PostUpdateEventListener;
+import org.hibernate.event.PostDeleteEventListener;
+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.util.JoinedIterator;
+import org.hibernate.util.ReflectHelper;
+import org.hibernate.util.StringHelper;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+
+/**
+ * Similar to the {@link Configuration} object but handles EJB3 and Hibernate
+ * specific annotations as a metadata facility
+ *
+ * @author Emmanuel Bernard
+ */
+public class AnnotationConfiguration extends Configuration {
+	private static Log log = LogFactory.getLog( AnnotationConfiguration.class );
+
+	static {
+		Version.touch(); //touch version
+	}
+
+	public static final String ARTEFACT = "hibernate.mapping.precedence";
+	public static final String DEFAULT_PRECEDENCE = "hbm, class";
+
+	private Map namedGenerators;
+	private Map<String, Map<String, Join>> joins;
+	private Map<String, AnnotatedClassType> classTypes;
+	private Set<String> defaultNamedQueryNames;
+	private Set<String> defaultNamedNativeQueryNames;
+	private Set<String> defaultSqlResulSetMappingNames;
+	private Set<String> defaultNamedGenerators;
+	private Map<String, Properties> generatorTables;
+	private Map<Table, List<String[]>> tableUniqueConstraints;
+	private Map<String, String> mappedByResolver;
+	private Map<String, String> propertyRefResolver;
+	private List<XClass> annotatedClasses;
+	private Map<String, XClass> annotatedClassEntities;
+	private Map<String, Document> hbmEntities;
+	private List<CacheHolder> caches;
+	private List<Document> hbmDocuments; //user ordering matters, hence the list
+	private String precedence = null;
+	private boolean inSecondPass = false;
+	private transient ReflectionManager reflectionManager;
+	private boolean isDefaultProcessed = false;
+
+	public AnnotationConfiguration() {
+		super();
+	}
+
+	public AnnotationConfiguration(SettingsFactory sf) {
+		super( sf );
+	}
+
+	protected List<XClass> orderAndFillHierarchy(List<XClass> original) {
+		//TODO remove embeddable
+		List<XClass> copy = new ArrayList<XClass>( original );
+		//for each class, copy all the relevent hierarchy
+		for ( XClass clazz : original ) {
+			XClass superClass = clazz.getSuperclass();
+			while ( superClass != null && ! reflectionManager.equals( superClass, Object.class ) && ! copy.contains( superClass ) ) {
+				if ( superClass.isAnnotationPresent( Entity.class )
+						|| superClass.isAnnotationPresent( MappedSuperclass.class ) ) {
+					copy.add( superClass );
+				}
+				superClass = superClass.getSuperclass();
+			}
+		}
+		List<XClass> workingCopy = new ArrayList<XClass>( copy );
+		List<XClass> newList = new ArrayList<XClass>( copy.size() );
+		while ( workingCopy.size() > 0 ) {
+			XClass clazz = workingCopy.get( 0 );
+			orderHierarchy( workingCopy, newList, copy, clazz );
+		}
+		return newList;
+	}
+
+	private void orderHierarchy(List<XClass> copy, List<XClass> newList, List<XClass> original, XClass clazz) {
+		if ( clazz == null || reflectionManager.equals( clazz, Object.class ) ) return;
+		//process superclass first
+		orderHierarchy( copy, newList, original, clazz.getSuperclass() );
+		if ( original.contains( clazz ) ) {
+			if ( !newList.contains( clazz ) ) {
+				newList.add( clazz );
+			}
+			copy.remove( clazz );
+		}
+	}
+
+	/**
+	 * Read a mapping from the class annotation metadata (JSR 175).
+	 *
+	 * @param persistentClass the mapped class
+	 * @return the configuration object
+	 */
+	public AnnotationConfiguration addAnnotatedClass(Class persistentClass) throws MappingException {
+		XClass persistentXClass = reflectionManager.toXClass( persistentClass );
+		try {
+			annotatedClasses.add( persistentXClass );
+			return this;
+		}
+		catch (MappingException me) {
+			log.error( "Could not compile the mapping annotations", me );
+			throw me;
+		}
+	}
+
+	/**
+	 * Read package level metadata
+	 *
+	 * @param packageName java package name
+	 * @return the configuration object
+	 */
+	public AnnotationConfiguration addPackage(String packageName) throws MappingException {
+		log.info( "Mapping package " + packageName );
+		try {
+			AnnotationBinder.bindPackage( packageName, createExtendedMappings() );
+			return this;
+		}
+		catch (MappingException me) {
+			log.error( "Could not compile the mapping annotations", me );
+			throw me;
+		}
+	}
+
+	public ExtendedMappings createExtendedMappings() {
+		return new ExtendedMappings(
+				classes,
+				collections,
+				tables,
+				namedQueries,
+				namedSqlQueries,
+				sqlResultSetMappings,
+				defaultNamedQueryNames,
+				defaultNamedNativeQueryNames,
+				defaultSqlResulSetMappingNames,
+				defaultNamedGenerators,
+				imports,
+				secondPasses,
+				propertyReferences,
+				namingStrategy,
+				typeDefs,
+				filterDefinitions,
+				namedGenerators,
+				joins,
+				classTypes,
+				extendsQueue,
+				tableNameBinding, columnNameBindingPerTable, auxiliaryDatabaseObjects,
+				generatorTables,
+				tableUniqueConstraints,
+				mappedByResolver,
+				propertyRefResolver,
+				reflectionManager
+		);
+	}
+
+	@Override
+	public void setCacheConcurrencyStrategy(
+			String clazz, String concurrencyStrategy, String region, boolean cacheLazyProperty
+	) throws MappingException {
+		caches.add( new CacheHolder( clazz, concurrencyStrategy, region, true, cacheLazyProperty ) );
+	}
+
+	@Override
+	public void setCollectionCacheConcurrencyStrategy(String collectionRole, String concurrencyStrategy, String region)
+			throws MappingException {
+		caches.add( new CacheHolder( collectionRole, concurrencyStrategy, region, false, false ) );
+	}
+
+	@Override
+	protected void reset() {
+		super.reset();
+		namedGenerators = new HashMap();
+		joins = new HashMap<String, Map<String, Join>>();
+		classTypes = new HashMap<String, AnnotatedClassType>();
+		generatorTables = new HashMap<String, Properties>();
+		defaultNamedQueryNames = new HashSet<String>();
+		defaultNamedNativeQueryNames = new HashSet<String>();
+		defaultSqlResulSetMappingNames = new HashSet<String>();
+		defaultNamedGenerators = new HashSet<String>();
+		tableUniqueConstraints = new HashMap<Table, List<String[]>>();
+		mappedByResolver = new HashMap<String, String>();
+		propertyRefResolver = new HashMap<String, String>();
+		annotatedClasses = new ArrayList<XClass>();
+		caches = new ArrayList<CacheHolder>();
+		hbmEntities = new HashMap<String, Document>();
+		annotatedClassEntities = new HashMap<String, XClass>();
+		hbmDocuments = new ArrayList<Document>();
+		namingStrategy = EJB3NamingStrategy.INSTANCE;
+		setEntityResolver( new EJB3DTDEntityResolver() );
+		reflectionManager = new EJB3ReflectionManager();
+	}
+
+	@Override
+	protected void secondPassCompile() throws MappingException {
+		log.debug( "Execute first pass mapping processing" );
+		//build annotatedClassEntities
+		{
+			List<XClass> tempAnnotatedClasses = new ArrayList<XClass>( annotatedClasses.size() );
+			for ( XClass clazz : annotatedClasses ) {
+				if ( clazz.isAnnotationPresent( Entity.class ) ) {
+					annotatedClassEntities.put( clazz.getName(), clazz );
+					tempAnnotatedClasses.add( clazz );
+				}
+				else if ( clazz.isAnnotationPresent( MappedSuperclass.class ) ) {
+					tempAnnotatedClasses.add( clazz );
+				}
+				//only keep MappedSuperclasses and Entity in this list
+			}
+			annotatedClasses = tempAnnotatedClasses;
+		}
+
+		//process default values first
+		if ( ! isDefaultProcessed ) {
+			AnnotationBinder.bindDefaults( createExtendedMappings() );
+			isDefaultProcessed = true;
+		}
+
+		//process entities
+		if ( precedence == null ) precedence = getProperties().getProperty( ARTEFACT );
+		if ( precedence == null ) precedence = DEFAULT_PRECEDENCE;
+		StringTokenizer precedences = new StringTokenizer( precedence, ",; ", false );
+		if ( ! precedences.hasMoreElements() ) {
+			throw new MappingException( ARTEFACT + " cannot be empty: " + precedence );
+		}
+		while ( precedences.hasMoreElements() ) {
+			String artifact = (String) precedences.nextElement();
+			removeConflictedArtifact( artifact );
+			processArtifactsOfType( artifact );
+		}
+
+		int cacheNbr = caches.size();
+		for ( int index = 0; index < cacheNbr ; index++ ) {
+			CacheHolder cacheHolder = caches.get( index );
+			if ( cacheHolder.isClass ) {
+				super.setCacheConcurrencyStrategy(
+						cacheHolder.role, cacheHolder.usage, cacheHolder.region, cacheHolder.cacheLazy
+				);
+			}
+			else {
+				super.setCollectionCacheConcurrencyStrategy( cacheHolder.role, cacheHolder.usage, cacheHolder.region );
+			}
+		}
+		caches.clear();
+
+		inSecondPass = true;
+		processFkSecondPassInOrder();
+		Iterator iter = secondPasses.iterator();
+		while ( iter.hasNext() ) {
+			SecondPass sp = (SecondPass) iter.next();
+			//do the second pass of fk before the others and remove them
+			if ( sp instanceof CreateKeySecondPass ) {
+				sp.doSecondPass( classes );
+				iter.remove();
+			}
+		}
+
+		//process OneToManySecondPass in order: first
+		iter = secondPasses.iterator();
+		while ( iter.hasNext() ) {
+			SecondPass sp = (SecondPass) iter.next();
+
+			if ( sp instanceof CreateKeySecondPass ) {
+				sp.doSecondPass( classes );
+				iter.remove();
+			}
+		}
+		super.secondPassCompile();
+		inSecondPass = false;
+		Iterator tables = (Iterator<Map.Entry<Table, List<String[]>>>) tableUniqueConstraints.entrySet().iterator();
+		Table table;
+		Map.Entry entry;
+		String keyName;
+		int uniqueIndexPerTable;
+		while ( tables.hasNext() ) {
+			entry = (Map.Entry) tables.next();
+			table = (Table) entry.getKey();
+			List<String[]> uniqueConstraints = (List<String[]>) entry.getValue();
+			uniqueIndexPerTable = 0;
+			for ( String[] columnNames : uniqueConstraints ) {
+				keyName = "key" + uniqueIndexPerTable++;
+				buildUniqueKeyFromColumnNames( columnNames, table, keyName );
+			}
+		}
+		boolean applyOnDdl = getProperties().getProperty(
+				"hibernate.validator.apply_to_ddl", //org.hibernate.validator.Environment.APPLY_TO_DDL
+				"true" )
+				.equalsIgnoreCase( "true" );
+
+		Constructor validatorCtr = null;
+		Method applyMethod = null;
+		try {
+			Class classValidator = ReflectHelper.classForName("org.hibernate.validator.ClassValidator", this.getClass() );
+			Class messageInterpolator = ReflectHelper.classForName("org.hibernate.validator.MessageInterpolator", this.getClass() );
+			validatorCtr = classValidator.getDeclaredConstructor( new Class[] {
+					Class.class, ResourceBundle.class, messageInterpolator, Map.class, ReflectionManager.class
+					}
+			);
+			applyMethod = classValidator.getMethod( "apply", PersistentClass.class );
+		}
+		catch (ClassNotFoundException e) {
+			log.info( "Hibernate Validator not found: ignoring");
+		}
+		catch (NoSuchMethodException e) {
+			throw new AnnotationException(e);
+		}
+		if ( applyMethod != null && applyOnDdl) {
+			for ( PersistentClass persistentClazz : (Collection<PersistentClass>) classes.values() ) {
+				//integrate the validate framework
+				String className = persistentClazz.getClassName();
+				if ( StringHelper.isNotEmpty( className ) ) {
+					try {
+						Object validator = validatorCtr.newInstance(
+								ReflectHelper.classForName( className ), null, null, null, reflectionManager
+						);
+						applyMethod.invoke( validator, persistentClazz );
+					}
+					catch (Exception e) {
+						log.warn("Unable to apply constraints on DDL for " + className, e);
+					}
+				}
+			}
+		}
+	}
+
+	private void processFkSecondPassInOrder() {
+		log.debug( "processing manytoone fk mappings" );
+		Iterator iter = secondPasses.iterator();
+		/* We need to process FKSecond pass trying to resolve any
+		 * graph circularity (ie PK made of a many to one linking to
+		 * an entity having a PK made of a ManyToOne ...
+		 */
+		SortedSet<FkSecondPass> fkSecondPasses = new TreeSet<FkSecondPass>(
+				new Comparator() {
+					//The comparator implementation has to respect the compare=0 => equals() = true for sets
+					public int compare(Object o1, Object o2) {
+						if (! (o1 instanceof FkSecondPass &&  o2 instanceof FkSecondPass) ) {
+							throw new AssertionFailure("comparint FkSecondPass with non FkSecondPass");
+						}
+						FkSecondPass f1 = (FkSecondPass) o1;
+						FkSecondPass f2 = (FkSecondPass) o2;
+						int compare = f1.getValue().getTable().getQuotedName().compareTo(
+								f2.getValue().getTable().getQuotedName()
+						);
+						if (compare == 0) {
+							//same table, we still need to differenciate true equality
+							if ( f1.hashCode() < f2.hashCode() ) {
+								compare = -1;
+							}
+							else if ( f1.hashCode() == f2.hashCode() ) {
+								compare = 0;
+							}
+							else {
+								compare = 1;
+							}
+						}
+						return compare;
+					}
+				}
+		);
+		while ( iter.hasNext() ) {
+			SecondPass sp = (SecondPass) iter.next();
+			//do the second pass of fk before the others and remove them
+			if ( sp instanceof FkSecondPass ) {
+				fkSecondPasses.add( (FkSecondPass) sp );
+				iter.remove();
+			}
+		}
+		if ( fkSecondPasses.size() > 0 ) {
+			Map<String, Set<String>> isADependencyOf = new HashMap<String, Set<String>>();
+			List orderedFkSecondPasses = new ArrayList( fkSecondPasses.size() );
+			List endOfQueueFkSecondPasses = new ArrayList( fkSecondPasses.size() );
+			List orderedTable = new ArrayList( fkSecondPasses.size() );
+			Iterator it = fkSecondPasses.iterator();
+			while ( it.hasNext() ) {
+				FkSecondPass sp = (FkSecondPass) it.next();
+				String referenceEntityName = sp.getValue().getReferencedEntityName();
+				PersistentClass classMapping = getClassMapping( referenceEntityName );
+				if ( sp.isInPrimaryKey() ) {
+					String dependentTable = classMapping.getTable().getQuotedName();
+					if ( ! isADependencyOf.containsKey( dependentTable ) ) {
+						isADependencyOf.put( dependentTable, new HashSet<String>() );
+					}
+					String table = sp.getValue().getTable().getQuotedName();
+					isADependencyOf.get( dependentTable ).add( table );
+					int beAfter = orderedTable.indexOf( dependentTable );
+					int beBefore = orderedFkSecondPasses.size();
+					Set<String> dependencies = isADependencyOf.get( table );
+					if ( dependencies != null ) {
+						for ( String tableDep : dependencies ) {
+							//for each declared dependency take the lowest index
+							int index = orderedTable.indexOf( tableDep );
+							//index = -1 when we have a self dependency
+							beBefore = index != -1 && index < beBefore ? index : beBefore;
+						}
+					}
+					int currentIndex = orderedTable.indexOf( table );
+					if ( beBefore < beAfter ||
+							( currentIndex != -1 && ( currentIndex < beAfter || currentIndex > beBefore ) )
+							) {
+						StringBuilder sb = new StringBuilder(
+								"Foreign key circularity dependency involving the following tables: "
+						);
+						//TODO deduplicate tables
+						sb.append( table );
+						if ( beAfter > -1 ) sb.append( ", " ).append( dependentTable );
+						if ( beBefore < orderedFkSecondPasses.size() ) {
+							sb.append( ", " ).append( orderedTable.get( beBefore ) );
+						}
+						throw new AnnotationException( sb.toString() );
+					}
+					currentIndex = currentIndex == -1 ? beBefore : currentIndex;
+					orderedTable.add( currentIndex, table );
+					orderedFkSecondPasses.add( currentIndex, sp );
+				}
+				else {
+					endOfQueueFkSecondPasses.add( sp );
+				}
+			}
+			it = orderedFkSecondPasses.listIterator();
+			while ( it.hasNext() ) {
+				( (SecondPass) it.next() ).doSecondPass( classes );
+			}
+			it = endOfQueueFkSecondPasses.listIterator();
+			while ( it.hasNext() ) {
+				( (SecondPass) it.next() ).doSecondPass( classes );
+			}
+		}
+	}
+
+	private void processArtifactsOfType(String artifact) {
+		if ( "hbm".equalsIgnoreCase( artifact ) ) {
+			log.debug( "Process hbm files" );
+			for ( Document document : hbmDocuments ) {
+				super.add( document );
+			}
+			hbmDocuments.clear();
+			hbmEntities.clear();
+		}
+		else if ( "class".equalsIgnoreCase( artifact ) ) {
+			log.debug( "Process annotated classes" );
+			//bind classes in the correct order calculating some inheritance state
+			List<XClass> orderedClasses = orderAndFillHierarchy( annotatedClasses );
+			Map<XClass, InheritanceState> inheritanceStatePerClass = AnnotationBinder.buildInheritanceStates(
+					orderedClasses, reflectionManager
+			);
+			ExtendedMappings mappings = createExtendedMappings();
+			for ( XClass clazz : orderedClasses ) {
+				//todo use the same extended mapping
+				AnnotationBinder.bindClass( clazz, inheritanceStatePerClass, mappings );
+			}
+			annotatedClasses.clear();
+			annotatedClassEntities.clear();
+		}
+		else {
+			log.warn( "Unknown artifact: " + artifact );
+		}
+	}
+
+	private void removeConflictedArtifact(String artifact) {
+		if ( "hbm".equalsIgnoreCase( artifact ) ) {
+			for ( String entity : hbmEntities.keySet() ) {
+				if ( annotatedClassEntities.containsKey( entity ) ) {
+					annotatedClasses.remove( annotatedClassEntities.get( entity ) );
+					annotatedClassEntities.remove( entity );
+				}
+			}
+		}
+		else if ( "class".equalsIgnoreCase( artifact ) ) {
+			for ( String entity : annotatedClassEntities.keySet() ) {
+				if ( hbmEntities.containsKey( entity ) ) {
+					hbmDocuments.remove( hbmEntities.get( entity ) );
+					hbmEntities.remove( entity );
+				}
+			}
+		}
+	}
+
+	private void buildUniqueKeyFromColumnNames(String[] columnNames, Table table, String keyName) {
+		UniqueKey uc;
+		int size = columnNames.length;
+		Column[] columns = new Column[size];
+		Set<Column> unbound = new HashSet<Column>();
+		Set<Column> unboundNoLogical = new HashSet<Column>();
+		ExtendedMappings mappings = createExtendedMappings();
+		for ( int index = 0; index < size ; index++ ) {
+			String columnName;
+			try {
+				columnName = mappings.getPhysicalColumnName( columnNames[index], table );
+				columns[index] = new Column( columnName );
+				unbound.add( columns[index] );
+				//column equals and hashcode is based on column name
+			}
+			catch( MappingException e ) {
+				unboundNoLogical.add( new Column( columnNames[index] ) );
+			}
+		}
+		for ( Column column : columns ) {
+			if ( table.containsColumn( column ) ) {
+				uc = table.getOrCreateUniqueKey( keyName );
+				uc.addColumn( table.getColumn( column ) );
+				unbound.remove( column );
+			}
+		}
+		if ( unbound.size() > 0 || unboundNoLogical.size() > 0 ) {
+			StringBuilder sb = new StringBuilder( "Unable to create unique key constraint (" );
+			for ( String columnName : columnNames ) {
+				sb.append( columnName ).append( ", " );
+			}
+			sb.setLength( sb.length() - 2 );
+			sb.append( ") on table " ).append( table.getName() ).append( ": " );
+			for ( Column column : unbound ) {
+				sb.append( column.getName() ).append( ", " );
+			}
+			for ( Column column : unboundNoLogical ) {
+				sb.append( column.getName() ).append( ", " );
+			}
+			sb.setLength( sb.length() - 2 );
+			sb.append( " not found" );
+			throw new AnnotationException( sb.toString() );
+		}
+	}
+
+	@Override
+	protected void parseMappingElement(Element subelement, String name) {
+		Attribute rsrc = subelement.attribute( "resource" );
+		Attribute file = subelement.attribute( "file" );
+		Attribute jar = subelement.attribute( "jar" );
+		Attribute pckg = subelement.attribute( "package" );
+		Attribute clazz = subelement.attribute( "class" );
+		if ( rsrc != null ) {
+			log.debug( name + "<-" + rsrc );
+			addResource( rsrc.getValue() );
+		}
+		else if ( jar != null ) {
+			log.debug( name + "<-" + jar );
+			addJar( new File( jar.getValue() ) );
+		}
+		else if ( file != null ) {
+			log.debug( name + "<-" + file );
+			addFile( file.getValue() );
+		}
+		else if ( pckg != null ) {
+			log.debug( name + "<-" + pckg );
+			addPackage( pckg.getValue() );
+		}
+		else if ( clazz != null ) {
+			log.debug( name + "<-" + clazz );
+			Class loadedClass = null;
+			try {
+				loadedClass = ReflectHelper.classForName( clazz.getValue() );
+			}
+			catch (ClassNotFoundException cnf) {
+				throw new MappingException(
+						"Unable to load class declared as <mapping class=\"" + clazz.getValue() + "\"/> in the configuration:",
+						cnf
+				);
+			}
+			catch (NoClassDefFoundError ncdf) {
+				throw new MappingException(
+						"Unable to load class declared as <mapping class=\"" + clazz.getValue() + "\"/> in the configuration:",
+						ncdf
+				);
+			}
+
+			addAnnotatedClass( loadedClass );
+		}
+		else {
+			throw new MappingException( "<mapping> element in configuration specifies no attributes" );
+		}
+	}
+
+	@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
+			if ( !ejb3Xml ) super.add( doc );
+		}
+		else {
+			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 );
+			}
+			else {
+				List<String> classnames = ( (EJB3ReflectionManager) reflectionManager ).getXMLContext().addDocument( doc );
+				for ( String classname : classnames ) {
+					try {
+						annotatedClasses.add( reflectionManager.classForName( classname, this.getClass() ) );
+					}
+					catch (ClassNotFoundException e) {
+						throw new AnnotationException( "Unable to load class defined in XML: " + classname, e );
+					}
+				}
+			}
+		}
+	}
+
+	private static void findClassNames(
+			String defaultPackage, final Element startNode,
+			final java.util.Set names
+	) {
+		// if we have some extends we need to check if those classes possibly could be inside the
+		// same hbm.xml file...
+		Iterator[] classes = new Iterator[4];
+		classes[0] = startNode.elementIterator( "class" );
+		classes[1] = startNode.elementIterator( "subclass" );
+		classes[2] = startNode.elementIterator( "joined-subclass" );
+		classes[3] = startNode.elementIterator( "union-subclass" );
+
+		Iterator classIterator = new JoinedIterator( classes );
+		while ( classIterator.hasNext() ) {
+			Element element = (Element) classIterator.next();
+			String entityName = element.attributeValue( "entity-name" );
+			if ( entityName == null ) entityName = getClassName( element.attribute( "name" ), defaultPackage );
+			names.add( entityName );
+			findClassNames( defaultPackage, element, names );
+		}
+	}
+
+	private static String getClassName(Attribute name, String defaultPackage) {
+		if ( name == null ) return null;
+		String unqualifiedName = name.getValue();
+		if ( unqualifiedName == null ) return null;
+		if ( unqualifiedName.indexOf( '.' ) < 0 && defaultPackage != null ) {
+			return defaultPackage + '.' + unqualifiedName;
+		}
+		return unqualifiedName;
+	}
+
+	public void setPrecedence(String precedence) {
+		this.precedence = precedence;
+	}
+
+	private static class CacheHolder {
+		public CacheHolder(String role, String usage, String region, boolean isClass, boolean cacheLazy) {
+			this.role = role;
+			this.usage = usage;
+			this.region = region;
+			this.isClass = isClass;
+			this.cacheLazy = cacheLazy;
+		}
+
+		public String role;
+		public String usage;
+		public String region;
+		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 );
+				//saxReader.setFeature( "http://apache.org/xml/features/validation/dynamic", true );
+				//set the default schema locators
+				saxReader.setProperty(
+						"http://apache.org/xml/properties/schema/external-schemaLocation",
+						"http://java.sun.com/xml/ns/persistence/orm orm_1_0.xsd"
+				);
+			}
+			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 );
+			}
+		}
+	}
+
+	public SessionFactory buildSessionFactory() throws HibernateException {
+		//add validator events if the jar is available
+		boolean enableValidatorListeners = ! "false".equalsIgnoreCase( getProperty( "hibernate.validator.autoregister_listeners" ) );
+		Class validateEventListenerClass = null;
+		try {
+			validateEventListenerClass = ReflectHelper.classForName(
+					"org.hibernate.validator.event.ValidateEventListener",
+					AnnotationConfiguration.class );
+		}
+		catch (ClassNotFoundException e) {
+			//validator is not present
+			log.debug( "Validator not present in classpath, ignoring event listener registration" );
+		}
+		if (enableValidatorListeners && validateEventListenerClass != null) {
+			//TODO so much duplication
+			Object validateEventListener;
+			try {
+				validateEventListener = validateEventListenerClass.newInstance();
+			}
+			catch (Exception e) {
+				throw new AnnotationException("Unable to load Validator event listener", e );
+			}
+			{
+				boolean present = false;
+				PreInsertEventListener[] listeners = getEventListeners().getPreInsertEventListeners();
+				if (listeners != null) {
+					for ( Object eventListener : listeners ) {
+						//not isAssignableFrom since the user could subclass
+						present = present || validateEventListenerClass == eventListener.getClass();
+					}
+					if (!present) {
+						int length = listeners.length + 1;
+						PreInsertEventListener[] newListeners = new PreInsertEventListener[length];
+						for ( int i = 0 ; i < length - 1 ; i++ ) {
+							newListeners[i] = listeners[i];
+						}
+						newListeners[length-1] = (PreInsertEventListener) validateEventListener;
+						getEventListeners().setPreInsertEventListeners(newListeners);
+					}
+				}
+				else {
+					getEventListeners().setPreInsertEventListeners(
+							new PreInsertEventListener[] { (PreInsertEventListener) validateEventListener }
+					);
+				}
+			}
+
+			//update event listener
+			{
+				boolean present = false;
+				PreUpdateEventListener[] listeners = getEventListeners().getPreUpdateEventListeners();
+				if (listeners != null) {
+					for ( Object eventListener : listeners ) {
+						//not isAssignableFrom since the user could subclass
+						present = present || validateEventListenerClass == eventListener.getClass();
+					}
+					if (!present) {
+						int length = listeners.length + 1;
+						PreUpdateEventListener[] newListeners = new PreUpdateEventListener[length];
+						for ( int i = 0 ; i < length - 1 ; i++ ) {
+							newListeners[i] = listeners[i];
+						}
+						newListeners[length-1] = (PreUpdateEventListener) validateEventListener;
+						getEventListeners().setPreUpdateEventListeners(newListeners);
+					}
+				}
+				else {
+					getEventListeners().setPreUpdateEventListeners(
+							new PreUpdateEventListener[] { (PreUpdateEventListener) validateEventListener }
+					);
+				}
+			}
+		}
+
+		//add search events if the jar is available
+		boolean enableSearchListeners = ! "false".equalsIgnoreCase( getProperty( "hibernate.search.autoregister_listeners" ) );
+		Class searchEventListenerClass = null;
+		try {
+			searchEventListenerClass = ReflectHelper.classForName(
+					"org.hibernate.search.event.FullTextIndexEventListener",
+					AnnotationConfiguration.class );
+		}
+		catch (ClassNotFoundException e) {
+			//search is not present
+			log.debug( "Search not present in classpath, ignoring event listener registration" );
+		}
+		if (enableSearchListeners && searchEventListenerClass != null) {
+			//TODO so much duplication
+			Object searchEventListener;
+			try {
+				searchEventListener = searchEventListenerClass.newInstance();
+			}
+			catch (Exception e) {
+				throw new AnnotationException("Unable to load Search event listener", e );
+			}
+			{
+				boolean present = false;
+				PostInsertEventListener[] listeners = getEventListeners().getPostInsertEventListeners();
+				if (listeners != null) {
+					for ( Object eventListener : listeners ) {
+						//not isAssignableFrom since the user could subclass
+						present = present || searchEventListenerClass == eventListener.getClass();
+					}
+					if (!present) {
+						int length = listeners.length + 1;
+						PostInsertEventListener[] newListeners = new PostInsertEventListener[length];
+						for ( int i = 0 ; i < length - 1 ; i++ ) {
+							newListeners[i] = listeners[i];
+						}
+						newListeners[length-1] = (PostInsertEventListener) searchEventListener;
+						getEventListeners().setPostInsertEventListeners(newListeners);
+					}
+				}
+				else {
+					getEventListeners().setPostInsertEventListeners(
+							new PostInsertEventListener[] { (PostInsertEventListener) searchEventListener }
+					);
+				}
+			}
+			{
+				boolean present = false;
+				PostUpdateEventListener[] listeners = getEventListeners().getPostUpdateEventListeners();
+				if (listeners != null) {
+					for ( Object eventListener : listeners ) {
+						//not isAssignableFrom since the user could subclass
+						present = present || searchEventListenerClass == eventListener.getClass();
+					}
+					if (!present) {
+						int length = listeners.length + 1;
+						PostUpdateEventListener[] newListeners = new PostUpdateEventListener[length];
+						for ( int i = 0 ; i < length - 1 ; i++ ) {
+							newListeners[i] = listeners[i];
+						}
+						newListeners[length-1] = (PostUpdateEventListener) searchEventListener;
+						getEventListeners().setPostUpdateEventListeners(newListeners);
+					}
+				}
+				else {
+					getEventListeners().setPostUpdateEventListeners(
+							new PostUpdateEventListener[] { (PostUpdateEventListener) searchEventListener }
+					);
+				}
+			}
+			{
+				boolean present = false;
+				PostDeleteEventListener[] listeners = getEventListeners().getPostDeleteEventListeners();
+				if (listeners != null) {
+					for ( Object eventListener : listeners ) {
+						//not isAssignableFrom since the user could subclass
+						present = present || searchEventListenerClass == eventListener.getClass();
+					}
+					if (!present) {
+						int length = listeners.length + 1;
+						PostDeleteEventListener[] newListeners = new PostDeleteEventListener[length];
+						for ( int i = 0 ; i < length - 1 ; i++ ) {
+							newListeners[i] = listeners[i];
+						}
+						newListeners[length-1] = (PostDeleteEventListener) searchEventListener;
+						getEventListeners().setPostDeleteEventListeners(newListeners);
+					}
+				}
+				else {
+					getEventListeners().setPostDeleteEventListeners(
+							new PostDeleteEventListener[] { (PostDeleteEventListener) searchEventListener }
+					);
+				}
+			}
+		}
+		return super.buildSessionFactory();
+	}
+
+	//not a public API
+	public ReflectionManager getReflectionManager() {
+		return reflectionManager;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/BinderHelper.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/BinderHelper.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/BinderHelper.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,440 +0,0 @@
-//$Id$
-package org.hibernate.cfg;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.StringTokenizer;
-import java.util.Properties;
-
-import org.hibernate.AnnotationException;
-import org.hibernate.AssertionFailure;
-import org.hibernate.MappingException;
-import org.hibernate.id.PersistentIdentifierGenerator;
-import org.hibernate.id.MultipleHiLoPerTableGenerator;
-import org.hibernate.cfg.annotations.TableBinder;
-import org.hibernate.mapping.Collection;
-import org.hibernate.mapping.Column;
-import org.hibernate.mapping.Component;
-import org.hibernate.mapping.Join;
-import org.hibernate.mapping.PersistentClass;
-import org.hibernate.mapping.Property;
-import org.hibernate.mapping.Table;
-import org.hibernate.mapping.ToOne;
-import org.hibernate.mapping.Value;
-import org.hibernate.mapping.SimpleValue;
-import org.hibernate.mapping.IdGenerator;
-import org.hibernate.util.StringHelper;
-
-/**
- * @author Emmanuel Bernard
- */
-public class BinderHelper {
-
-	public static final String ANNOTATION_STRING_DEFAULT = "";
-
-	private BinderHelper() {
-	}
-
-	static {
-		Set<String> primitiveNames = new HashSet<String>();
-		primitiveNames.add( byte.class.getName() );
-		primitiveNames.add( short.class.getName() );
-		primitiveNames.add( int.class.getName() );
-		primitiveNames.add( long.class.getName() );
-		primitiveNames.add( float.class.getName() );
-		primitiveNames.add( double.class.getName() );
-		primitiveNames.add( char.class.getName() );
-		primitiveNames.add( boolean.class.getName() );
-		PRIMITIVE_NAMES = Collections.unmodifiableSet( primitiveNames );
-	}
-
-	public static final Set<String> PRIMITIVE_NAMES;
-
-	/**
-	 * create a property copy reusing the same value
-	 */
-	public static Property shallowCopy(Property property) {
-		Property clone = new Property();
-		clone.setCascade( property.getCascade() );
-		clone.setInsertable( property.isInsertable() );
-		clone.setLazy( property.isLazy() );
-		clone.setName( property.getName() );
-		clone.setNodeName( property.getNodeName() );
-		clone.setNaturalIdentifier( property.isNaturalIdentifier() );
-		clone.setOptimisticLocked( property.isOptimisticLocked() );
-		clone.setOptional( property.isOptional() );
-		clone.setPersistentClass( property.getPersistentClass() );
-		clone.setPropertyAccessorName( property.getPropertyAccessorName() );
-		clone.setSelectable( property.isSelectable() );
-		clone.setUpdateable( property.isUpdateable() );
-		clone.setValue( property.getValue() );
-		return clone;
-	}
-
-	public static void createSyntheticPropertyReference(
-			Ejb3JoinColumn[] columns,
-			PersistentClass ownerEntity,
-			PersistentClass associatedEntity,
-			Value value,
-			boolean inverse, ExtendedMappings mappings
-	) {
-		//associated entity only used for more precise exception, yuk!
-		if ( columns[0].isImplicit() || StringHelper.isNotEmpty( columns[0].getMappedBy() ) ) return;
-		int fkEnum = Ejb3JoinColumn.checkReferencedColumnsType( columns, ownerEntity, mappings );
-		PersistentClass associatedClass = columns[0].getPropertyHolder() != null ?
-				columns[0].getPropertyHolder().getPersistentClass() :
-				null;
-		if ( Ejb3JoinColumn.NON_PK_REFERENCE == fkEnum ) {
-			/**
-			 * Create a synthetic property to refer to including an
-			 * embedded component value containing all the properties
-			 * mapped to the referenced columns
-			 * We need to shallow copy those properties to mark them
-			 * as non insertable / non updatable
-			 */
-			StringBuilder propertyNameBuffer = new StringBuilder( "_" );
-			propertyNameBuffer.append( associatedClass.getEntityName().replace( '.', '_' ) );
-			propertyNameBuffer.append( "_" ).append( columns[0].getPropertyName() );
-			String syntheticPropertyName = propertyNameBuffer.toString();
-			//find properties associated to a certain column
-			Object columnOwner = findColumnOwner( ownerEntity, columns[0].getReferencedColumn(), mappings );
-			List<Property> properties = findPropertiesByColumns( columnOwner, columns, mappings );
-			//create an embeddable component
-			Property synthProp = null;
-			if ( properties != null ) {
-				//todo how about properties.size() == 1, this should be much simpler
-				Component embeddedComp = columnOwner instanceof PersistentClass ?
-						new Component( (PersistentClass) columnOwner ) :
-						new Component( (Join) columnOwner );
-				embeddedComp.setEmbedded( true );
-				embeddedComp.setNodeName( syntheticPropertyName );
-				embeddedComp.setComponentClassName( embeddedComp.getOwner().getClassName() );
-				for ( Property property : properties ) {
-					Property clone = BinderHelper.shallowCopy( property );
-					clone.setInsertable( false );
-					clone.setUpdateable( false );
-					clone.setNaturalIdentifier( false );
-					embeddedComp.addProperty( clone );
-				}
-				synthProp = new Property();
-				synthProp.setName( syntheticPropertyName );
-				synthProp.setNodeName(syntheticPropertyName);
-				synthProp.setPersistentClass( ownerEntity );
-				synthProp.setUpdateable( false );
-				synthProp.setInsertable( false );
-				synthProp.setValue( embeddedComp );
-				synthProp.setPropertyAccessorName( "embedded" );
-				ownerEntity.addProperty( synthProp );
-				//make it unique
-				TableBinder.createUniqueConstraint( embeddedComp );
-			}
-			else {
-				//TODO use a ToOne type doing a second select
-				StringBuilder columnsList = new StringBuilder();
-				columnsList.append( "referencedColumnNames(" );
-				for ( Ejb3JoinColumn column : columns ) {
-					columnsList.append( column.getReferencedColumn() ).append( ", " );
-				}
-				columnsList.setLength( columnsList.length() - 2 );
-				columnsList.append( ") " );
-
-				if ( associatedEntity != null ) {
-					//overidden destination
-					columnsList.append( "of " )
-							.append( associatedEntity.getEntityName() )
-							.append( "." )
-							.append( columns[0].getPropertyName() )
-							.append( " " );
-				}
-				else {
-					if ( columns[0].getPropertyHolder() != null ) {
-						columnsList.append( "of " )
-								.append( columns[0].getPropertyHolder().getEntityName() )
-								.append( "." )
-								.append( columns[0].getPropertyName() )
-								.append( " " );
-					}
-				}
-				columnsList.append( "referencing " )
-						.append( ownerEntity.getEntityName() )
-						.append( " not mapped to a single property" );
-				throw new AnnotationException( columnsList.toString() );
-			}
-
-			/**
-			 * creating the property ref to the new synthetic property
-			 */
-			if ( value instanceof ToOne ) {
-				( (ToOne) value ).setReferencedPropertyName( syntheticPropertyName );
-				mappings.addUniquePropertyReference( ownerEntity.getEntityName(), syntheticPropertyName );
-			}
-			else if ( value instanceof Collection ) {
-				( (Collection) value ).setReferencedPropertyName( syntheticPropertyName );
-				//not unique because we could create a mtm wo association table
-				mappings.addPropertyReference( ownerEntity.getEntityName(), syntheticPropertyName );
-			}
-			else {
-				throw new AssertionFailure(
-						"Do a property ref on an unexpected Value type: "
-								+ value.getClass().getName()
-				);
-			}
-			mappings.addPropertyReferencedAssociation(
-					( inverse ? "inverse__" : "" ) + associatedClass.getEntityName(),
-					columns[0].getPropertyName(),
-					syntheticPropertyName
-			);
-		}
-	}
-
-
-	private static List<Property> findPropertiesByColumns(
-			Object columnOwner, Ejb3JoinColumn[] columns,
-			ExtendedMappings mappings
-	) {
-		Map<Column, Set<Property>> columnsToProperty = new HashMap<Column, Set<Property>>();
-		List<Column> orderedColumns = new ArrayList<Column>( columns.length );
-		Table referencedTable = null;
-		if ( columnOwner instanceof PersistentClass ) {
-			referencedTable = ( (PersistentClass) columnOwner ).getTable();
-		}
-		else if ( columnOwner instanceof Join ) {
-			referencedTable = ( (Join) columnOwner ).getTable();
-		}
-		else {
-			throw new AssertionFailure(
-					columnOwner == null ?
-							"columnOwner is null" :
-							"columnOwner neither PersistentClass nor Join: " + columnOwner.getClass()
-			);
-		}
-		//build the list of column names
-		for ( Ejb3JoinColumn column1 : columns ) {
-			Column column = new Column(
-					mappings.getPhysicalColumnName( column1.getReferencedColumn(), referencedTable )
-			);
-			orderedColumns.add( column );
-			columnsToProperty.put( column, new HashSet<Property>() );
-		}
-		boolean isPersistentClass = columnOwner instanceof PersistentClass;
-		Iterator it = isPersistentClass ?
-				( (PersistentClass) columnOwner ).getPropertyIterator() :
-				( (Join) columnOwner ).getPropertyIterator();
-		while ( it.hasNext() ) {
-			matchColumnsByProperty( (Property) it.next(), columnsToProperty );
-		}
-		if (isPersistentClass) {
-			matchColumnsByProperty( ( (PersistentClass) columnOwner ).getIdentifierProperty(), columnsToProperty );
-		}
-
-		//first naive implementation
-		//only check 1 columns properties
-		//TODO make it smarter by checking correctly ordered multi column properties
-		List<Property> orderedProperties = new ArrayList<Property>();
-		for ( Column column : orderedColumns ) {
-			boolean found = false;
-			for ( Property property : columnsToProperty.get( column ) ) {
-				if ( property.getColumnSpan() == 1 ) {
-					orderedProperties.add( property );
-					found = true;
-					break;
-				}
-			}
-			if ( !found ) return null; //have to find it the hard way
-		}
-		return orderedProperties;
-	}
-
-	private static void matchColumnsByProperty(Property property, Map<Column, Set<Property>> columnsToProperty) {
-		if ( property == null ) return;
-		if ( "noop".equals( property.getPropertyAccessorName() )
-				|| "embedded".equals( property.getPropertyAccessorName() ) ) {
-			return;
-		}
-// FIXME cannot use subproperties becasue the caller needs top level properties
-//		if ( property.isComposite() ) {
-//			Iterator subProperties = ( (Component) property.getValue() ).getPropertyIterator();
-//			while ( subProperties.hasNext() ) {
-//				matchColumnsByProperty( (Property) subProperties.next(), columnsToProperty );
-//			}
-//		}
-		else {
-			Iterator columnIt = property.getColumnIterator();
-			while ( columnIt.hasNext() ) {
-				Object column = columnIt.next(); //can be a Formula so we don't cast
-				//noinspection SuspiciousMethodCalls
-				if ( columnsToProperty.containsKey( column ) ) {
-					columnsToProperty.get( column ).add( property );
-				}
-			}
-		}
-	}
-
-	/**
-	 * Retrieve the property by path in a recursive way, including IndetifierProperty in the loop
-	 * If propertyName is null or empty, the IdentifierProperty is returned
-	 */
-	public static Property findPropertyByName(PersistentClass associatedClass, String propertyName) {
-		Property property = null;
-		Property idProperty = associatedClass.getIdentifierProperty();
-		String idName = idProperty != null ? idProperty.getName() : null;
-		try {
-			if ( propertyName == null
-					|| propertyName.length() == 0
-					|| propertyName.equals( idName ) ) {
-				//default to id
-				property = idProperty;
-			}
-			else {
-				if ( propertyName.indexOf( idName + "." ) == 0 ) {
-					property = idProperty;
-					propertyName = propertyName.substring( idName.length() + 1 );
-				}
-				StringTokenizer st = new StringTokenizer( propertyName, ".", false );
-				while ( st.hasMoreElements() ) {
-					String element = (String) st.nextElement();
-					if ( property == null ) {
-						property = associatedClass.getProperty( element );
-					}
-					else {
-						if ( ! property.isComposite() ) return null;
-						property = ( (Component) property.getValue() ).getProperty( element );
-					}
-				}
-			}
-		}
-		catch (MappingException e) {
-			try {
-				//if we do not find it try to check the identifier mapper
-				if ( associatedClass.getIdentifierMapper() == null ) return null;
-				StringTokenizer st = new StringTokenizer( propertyName, ".", false );
-				while ( st.hasMoreElements() ) {
-					String element = (String) st.nextElement();
-					if ( property == null ) {
-						property = associatedClass.getIdentifierMapper().getProperty( element );
-					}
-					else {
-						if ( ! property.isComposite() ) return null;
-						property = ( (Component) property.getValue() ).getProperty( element );
-					}
-				}
-			}
-			catch (MappingException ee) {
-				return null;
-			}
-		}
-		return property;
-	}
-
-	public static String getRelativePath(PropertyHolder propertyHolder, String propertyName) {
-		if ( propertyHolder == null ) return propertyName;
-		String path = propertyHolder.getPath();
-		String entityName = propertyHolder.getPersistentClass().getEntityName();
-		if ( path.length() == entityName.length() ) {
-			return propertyName;
-		}
-		else {
-			return StringHelper.qualify( path.substring( entityName.length() + 1 ), propertyName );
-		}
-	}
-
-	/**
-	 * Find the column owner (ie PersistentClass or Join) of columnName.
-	 * If columnName is null or empty, persistentClass is returned
-	 */
-	public static Object findColumnOwner(
-			PersistentClass persistentClass, String columnName, ExtendedMappings mappings
-	) {
-		if ( StringHelper.isEmpty( columnName ) ) {
-			return persistentClass; //shortcut for implicit referenced column names
-		}
-		PersistentClass current = persistentClass;
-		Object result = null;
-		boolean found = false;
-		do {
-			result = current;
-			Table currentTable = current.getTable();
-			try {
-				mappings.getPhysicalColumnName( columnName, currentTable );
-				found = true;
-			}
-			catch (MappingException me) {
-				//swallow it
-			}
-			Iterator joins = current.getJoinIterator();
-			while ( ! found && joins.hasNext() ) {
-				result = joins.next();
-				currentTable = ( (Join) result ).getTable();
-				try {
-					mappings.getPhysicalColumnName( columnName, currentTable );
-					found = true;
-				}
-				catch (MappingException me) {
-					//swallow it
-				}
-			}
-			current = current.getSuperclass();
-		}
-		while ( !found && current != null );
-		return found ? result : null;
-	}
-
-	/** apply an id generator to a SimpleValue */
-	public static void makeIdGenerator(
-			SimpleValue id, String generatorType, String generatorName, ExtendedMappings mappings,
-			Map<String, IdGenerator> localGenerators
-	) {
-		Table table = id.getTable();
-		table.setIdentifierValue( id );
-		//generator settings
-		id.setIdentifierGeneratorStrategy( generatorType );
-		Properties params = new Properties();
-		//always settable
-		params.setProperty(
-				PersistentIdentifierGenerator.TABLE, table.getName()
-		);
-
-		if ( id.getColumnSpan() == 1 ) {
-			params.setProperty(
-					PersistentIdentifierGenerator.PK,
-					( (org.hibernate.mapping.Column) id.getColumnIterator().next() ).getName()
-			);
-		}
-		if ( ! isDefault( generatorName ) ) {
-			//we have a named generator
-			IdGenerator gen = mappings.getGenerator( generatorName, localGenerators );
-			if ( gen == null ) {
-				throw new AnnotationException( "Unknown Id.generator: " + generatorName );
-			}
-			//This is quite vague in the spec but a generator could override the generate choice
-			String identifierGeneratorStrategy = gen.getIdentifierGeneratorStrategy();
-			//yuk! this is a hack not to override 'AUTO' even if generator is set
-			final boolean avoidOverriding =
-					identifierGeneratorStrategy.equals( "identity" )
-							|| identifierGeneratorStrategy.equals( "seqhilo" )
-							|| identifierGeneratorStrategy.equals( MultipleHiLoPerTableGenerator.class.getName() );
-			if ( generatorType == null || ! avoidOverriding ) {
-				id.setIdentifierGeneratorStrategy( identifierGeneratorStrategy );
-			}
-			//checkIfMatchingGenerator(gen, generatorType, generatorName);
-			Iterator genParams = gen.getParams().entrySet().iterator();
-			while ( genParams.hasNext() ) {
-				Map.Entry elt = (Map.Entry) genParams.next();
-				params.setProperty( (String) elt.getKey(), (String) elt.getValue() );
-			}
-		}
-		if ( "assigned".equals( generatorType ) ) id.setNullValue( "undefined" );
-		id.setIdentifierGeneratorProperties( params );
-	}
-
-	public static boolean isDefault(String annotationString) {
-		return annotationString != null && annotationString.length() == 0;
-		//equivalent to (but faster) ANNOTATION_STRING_DEFAULT.equals( annotationString );
-	}
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/BinderHelper.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/BinderHelper.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/BinderHelper.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/BinderHelper.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,440 @@
+//$Id$
+package org.hibernate.cfg;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.StringTokenizer;
+import java.util.Properties;
+
+import org.hibernate.AnnotationException;
+import org.hibernate.AssertionFailure;
+import org.hibernate.MappingException;
+import org.hibernate.id.PersistentIdentifierGenerator;
+import org.hibernate.id.MultipleHiLoPerTableGenerator;
+import org.hibernate.cfg.annotations.TableBinder;
+import org.hibernate.mapping.Collection;
+import org.hibernate.mapping.Column;
+import org.hibernate.mapping.Component;
+import org.hibernate.mapping.Join;
+import org.hibernate.mapping.PersistentClass;
+import org.hibernate.mapping.Property;
+import org.hibernate.mapping.Table;
+import org.hibernate.mapping.ToOne;
+import org.hibernate.mapping.Value;
+import org.hibernate.mapping.SimpleValue;
+import org.hibernate.mapping.IdGenerator;
+import org.hibernate.util.StringHelper;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class BinderHelper {
+
+	public static final String ANNOTATION_STRING_DEFAULT = "";
+
+	private BinderHelper() {
+	}
+
+	static {
+		Set<String> primitiveNames = new HashSet<String>();
+		primitiveNames.add( byte.class.getName() );
+		primitiveNames.add( short.class.getName() );
+		primitiveNames.add( int.class.getName() );
+		primitiveNames.add( long.class.getName() );
+		primitiveNames.add( float.class.getName() );
+		primitiveNames.add( double.class.getName() );
+		primitiveNames.add( char.class.getName() );
+		primitiveNames.add( boolean.class.getName() );
+		PRIMITIVE_NAMES = Collections.unmodifiableSet( primitiveNames );
+	}
+
+	public static final Set<String> PRIMITIVE_NAMES;
+
+	/**
+	 * create a property copy reusing the same value
+	 */
+	public static Property shallowCopy(Property property) {
+		Property clone = new Property();
+		clone.setCascade( property.getCascade() );
+		clone.setInsertable( property.isInsertable() );
+		clone.setLazy( property.isLazy() );
+		clone.setName( property.getName() );
+		clone.setNodeName( property.getNodeName() );
+		clone.setNaturalIdentifier( property.isNaturalIdentifier() );
+		clone.setOptimisticLocked( property.isOptimisticLocked() );
+		clone.setOptional( property.isOptional() );
+		clone.setPersistentClass( property.getPersistentClass() );
+		clone.setPropertyAccessorName( property.getPropertyAccessorName() );
+		clone.setSelectable( property.isSelectable() );
+		clone.setUpdateable( property.isUpdateable() );
+		clone.setValue( property.getValue() );
+		return clone;
+	}
+
+	public static void createSyntheticPropertyReference(
+			Ejb3JoinColumn[] columns,
+			PersistentClass ownerEntity,
+			PersistentClass associatedEntity,
+			Value value,
+			boolean inverse, ExtendedMappings mappings
+	) {
+		//associated entity only used for more precise exception, yuk!
+		if ( columns[0].isImplicit() || StringHelper.isNotEmpty( columns[0].getMappedBy() ) ) return;
+		int fkEnum = Ejb3JoinColumn.checkReferencedColumnsType( columns, ownerEntity, mappings );
+		PersistentClass associatedClass = columns[0].getPropertyHolder() != null ?
+				columns[0].getPropertyHolder().getPersistentClass() :
+				null;
+		if ( Ejb3JoinColumn.NON_PK_REFERENCE == fkEnum ) {
+			/**
+			 * Create a synthetic property to refer to including an
+			 * embedded component value containing all the properties
+			 * mapped to the referenced columns
+			 * We need to shallow copy those properties to mark them
+			 * as non insertable / non updatable
+			 */
+			StringBuilder propertyNameBuffer = new StringBuilder( "_" );
+			propertyNameBuffer.append( associatedClass.getEntityName().replace( '.', '_' ) );
+			propertyNameBuffer.append( "_" ).append( columns[0].getPropertyName() );
+			String syntheticPropertyName = propertyNameBuffer.toString();
+			//find properties associated to a certain column
+			Object columnOwner = findColumnOwner( ownerEntity, columns[0].getReferencedColumn(), mappings );
+			List<Property> properties = findPropertiesByColumns( columnOwner, columns, mappings );
+			//create an embeddable component
+			Property synthProp = null;
+			if ( properties != null ) {
+				//todo how about properties.size() == 1, this should be much simpler
+				Component embeddedComp = columnOwner instanceof PersistentClass ?
+						new Component( (PersistentClass) columnOwner ) :
+						new Component( (Join) columnOwner );
+				embeddedComp.setEmbedded( true );
+				embeddedComp.setNodeName( syntheticPropertyName );
+				embeddedComp.setComponentClassName( embeddedComp.getOwner().getClassName() );
+				for ( Property property : properties ) {
+					Property clone = BinderHelper.shallowCopy( property );
+					clone.setInsertable( false );
+					clone.setUpdateable( false );
+					clone.setNaturalIdentifier( false );
+					embeddedComp.addProperty( clone );
+				}
+				synthProp = new Property();
+				synthProp.setName( syntheticPropertyName );
+				synthProp.setNodeName(syntheticPropertyName);
+				synthProp.setPersistentClass( ownerEntity );
+				synthProp.setUpdateable( false );
+				synthProp.setInsertable( false );
+				synthProp.setValue( embeddedComp );
+				synthProp.setPropertyAccessorName( "embedded" );
+				ownerEntity.addProperty( synthProp );
+				//make it unique
+				TableBinder.createUniqueConstraint( embeddedComp );
+			}
+			else {
+				//TODO use a ToOne type doing a second select
+				StringBuilder columnsList = new StringBuilder();
+				columnsList.append( "referencedColumnNames(" );
+				for ( Ejb3JoinColumn column : columns ) {
+					columnsList.append( column.getReferencedColumn() ).append( ", " );
+				}
+				columnsList.setLength( columnsList.length() - 2 );
+				columnsList.append( ") " );
+
+				if ( associatedEntity != null ) {
+					//overidden destination
+					columnsList.append( "of " )
+							.append( associatedEntity.getEntityName() )
+							.append( "." )
+							.append( columns[0].getPropertyName() )
+							.append( " " );
+				}
+				else {
+					if ( columns[0].getPropertyHolder() != null ) {
+						columnsList.append( "of " )
+								.append( columns[0].getPropertyHolder().getEntityName() )
+								.append( "." )
+								.append( columns[0].getPropertyName() )
+								.append( " " );
+					}
+				}
+				columnsList.append( "referencing " )
+						.append( ownerEntity.getEntityName() )
+						.append( " not mapped to a single property" );
+				throw new AnnotationException( columnsList.toString() );
+			}
+
+			/**
+			 * creating the property ref to the new synthetic property
+			 */
+			if ( value instanceof ToOne ) {
+				( (ToOne) value ).setReferencedPropertyName( syntheticPropertyName );
+				mappings.addUniquePropertyReference( ownerEntity.getEntityName(), syntheticPropertyName );
+			}
+			else if ( value instanceof Collection ) {
+				( (Collection) value ).setReferencedPropertyName( syntheticPropertyName );
+				//not unique because we could create a mtm wo association table
+				mappings.addPropertyReference( ownerEntity.getEntityName(), syntheticPropertyName );
+			}
+			else {
+				throw new AssertionFailure(
+						"Do a property ref on an unexpected Value type: "
+								+ value.getClass().getName()
+				);
+			}
+			mappings.addPropertyReferencedAssociation(
+					( inverse ? "inverse__" : "" ) + associatedClass.getEntityName(),
+					columns[0].getPropertyName(),
+					syntheticPropertyName
+			);
+		}
+	}
+
+
+	private static List<Property> findPropertiesByColumns(
+			Object columnOwner, Ejb3JoinColumn[] columns,
+			ExtendedMappings mappings
+	) {
+		Map<Column, Set<Property>> columnsToProperty = new HashMap<Column, Set<Property>>();
+		List<Column> orderedColumns = new ArrayList<Column>( columns.length );
+		Table referencedTable = null;
+		if ( columnOwner instanceof PersistentClass ) {
+			referencedTable = ( (PersistentClass) columnOwner ).getTable();
+		}
+		else if ( columnOwner instanceof Join ) {
+			referencedTable = ( (Join) columnOwner ).getTable();
+		}
+		else {
+			throw new AssertionFailure(
+					columnOwner == null ?
+							"columnOwner is null" :
+							"columnOwner neither PersistentClass nor Join: " + columnOwner.getClass()
+			);
+		}
+		//build the list of column names
+		for ( Ejb3JoinColumn column1 : columns ) {
+			Column column = new Column(
+					mappings.getPhysicalColumnName( column1.getReferencedColumn(), referencedTable )
+			);
+			orderedColumns.add( column );
+			columnsToProperty.put( column, new HashSet<Property>() );
+		}
+		boolean isPersistentClass = columnOwner instanceof PersistentClass;
+		Iterator it = isPersistentClass ?
+				( (PersistentClass) columnOwner ).getPropertyIterator() :
+				( (Join) columnOwner ).getPropertyIterator();
+		while ( it.hasNext() ) {
+			matchColumnsByProperty( (Property) it.next(), columnsToProperty );
+		}
+		if (isPersistentClass) {
+			matchColumnsByProperty( ( (PersistentClass) columnOwner ).getIdentifierProperty(), columnsToProperty );
+		}
+
+		//first naive implementation
+		//only check 1 columns properties
+		//TODO make it smarter by checking correctly ordered multi column properties
+		List<Property> orderedProperties = new ArrayList<Property>();
+		for ( Column column : orderedColumns ) {
+			boolean found = false;
+			for ( Property property : columnsToProperty.get( column ) ) {
+				if ( property.getColumnSpan() == 1 ) {
+					orderedProperties.add( property );
+					found = true;
+					break;
+				}
+			}
+			if ( !found ) return null; //have to find it the hard way
+		}
+		return orderedProperties;
+	}
+
+	private static void matchColumnsByProperty(Property property, Map<Column, Set<Property>> columnsToProperty) {
+		if ( property == null ) return;
+		if ( "noop".equals( property.getPropertyAccessorName() )
+				|| "embedded".equals( property.getPropertyAccessorName() ) ) {
+			return;
+		}
+// FIXME cannot use subproperties becasue the caller needs top level properties
+//		if ( property.isComposite() ) {
+//			Iterator subProperties = ( (Component) property.getValue() ).getPropertyIterator();
+//			while ( subProperties.hasNext() ) {
+//				matchColumnsByProperty( (Property) subProperties.next(), columnsToProperty );
+//			}
+//		}
+		else {
+			Iterator columnIt = property.getColumnIterator();
+			while ( columnIt.hasNext() ) {
+				Object column = columnIt.next(); //can be a Formula so we don't cast
+				//noinspection SuspiciousMethodCalls
+				if ( columnsToProperty.containsKey( column ) ) {
+					columnsToProperty.get( column ).add( property );
+				}
+			}
+		}
+	}
+
+	/**
+	 * Retrieve the property by path in a recursive way, including IndetifierProperty in the loop
+	 * If propertyName is null or empty, the IdentifierProperty is returned
+	 */
+	public static Property findPropertyByName(PersistentClass associatedClass, String propertyName) {
+		Property property = null;
+		Property idProperty = associatedClass.getIdentifierProperty();
+		String idName = idProperty != null ? idProperty.getName() : null;
+		try {
+			if ( propertyName == null
+					|| propertyName.length() == 0
+					|| propertyName.equals( idName ) ) {
+				//default to id
+				property = idProperty;
+			}
+			else {
+				if ( propertyName.indexOf( idName + "." ) == 0 ) {
+					property = idProperty;
+					propertyName = propertyName.substring( idName.length() + 1 );
+				}
+				StringTokenizer st = new StringTokenizer( propertyName, ".", false );
+				while ( st.hasMoreElements() ) {
+					String element = (String) st.nextElement();
+					if ( property == null ) {
+						property = associatedClass.getProperty( element );
+					}
+					else {
+						if ( ! property.isComposite() ) return null;
+						property = ( (Component) property.getValue() ).getProperty( element );
+					}
+				}
+			}
+		}
+		catch (MappingException e) {
+			try {
+				//if we do not find it try to check the identifier mapper
+				if ( associatedClass.getIdentifierMapper() == null ) return null;
+				StringTokenizer st = new StringTokenizer( propertyName, ".", false );
+				while ( st.hasMoreElements() ) {
+					String element = (String) st.nextElement();
+					if ( property == null ) {
+						property = associatedClass.getIdentifierMapper().getProperty( element );
+					}
+					else {
+						if ( ! property.isComposite() ) return null;
+						property = ( (Component) property.getValue() ).getProperty( element );
+					}
+				}
+			}
+			catch (MappingException ee) {
+				return null;
+			}
+		}
+		return property;
+	}
+
+	public static String getRelativePath(PropertyHolder propertyHolder, String propertyName) {
+		if ( propertyHolder == null ) return propertyName;
+		String path = propertyHolder.getPath();
+		String entityName = propertyHolder.getPersistentClass().getEntityName();
+		if ( path.length() == entityName.length() ) {
+			return propertyName;
+		}
+		else {
+			return StringHelper.qualify( path.substring( entityName.length() + 1 ), propertyName );
+		}
+	}
+
+	/**
+	 * Find the column owner (ie PersistentClass or Join) of columnName.
+	 * If columnName is null or empty, persistentClass is returned
+	 */
+	public static Object findColumnOwner(
+			PersistentClass persistentClass, String columnName, ExtendedMappings mappings
+	) {
+		if ( StringHelper.isEmpty( columnName ) ) {
+			return persistentClass; //shortcut for implicit referenced column names
+		}
+		PersistentClass current = persistentClass;
+		Object result = null;
+		boolean found = false;
+		do {
+			result = current;
+			Table currentTable = current.getTable();
+			try {
+				mappings.getPhysicalColumnName( columnName, currentTable );
+				found = true;
+			}
+			catch (MappingException me) {
+				//swallow it
+			}
+			Iterator joins = current.getJoinIterator();
+			while ( ! found && joins.hasNext() ) {
+				result = joins.next();
+				currentTable = ( (Join) result ).getTable();
+				try {
+					mappings.getPhysicalColumnName( columnName, currentTable );
+					found = true;
+				}
+				catch (MappingException me) {
+					//swallow it
+				}
+			}
+			current = current.getSuperclass();
+		}
+		while ( !found && current != null );
+		return found ? result : null;
+	}
+
+	/** apply an id generator to a SimpleValue */
+	public static void makeIdGenerator(
+			SimpleValue id, String generatorType, String generatorName, ExtendedMappings mappings,
+			Map<String, IdGenerator> localGenerators
+	) {
+		Table table = id.getTable();
+		table.setIdentifierValue( id );
+		//generator settings
+		id.setIdentifierGeneratorStrategy( generatorType );
+		Properties params = new Properties();
+		//always settable
+		params.setProperty(
+				PersistentIdentifierGenerator.TABLE, table.getName()
+		);
+
+		if ( id.getColumnSpan() == 1 ) {
+			params.setProperty(
+					PersistentIdentifierGenerator.PK,
+					( (org.hibernate.mapping.Column) id.getColumnIterator().next() ).getName()
+			);
+		}
+		if ( ! isDefault( generatorName ) ) {
+			//we have a named generator
+			IdGenerator gen = mappings.getGenerator( generatorName, localGenerators );
+			if ( gen == null ) {
+				throw new AnnotationException( "Unknown Id.generator: " + generatorName );
+			}
+			//This is quite vague in the spec but a generator could override the generate choice
+			String identifierGeneratorStrategy = gen.getIdentifierGeneratorStrategy();
+			//yuk! this is a hack not to override 'AUTO' even if generator is set
+			final boolean avoidOverriding =
+					identifierGeneratorStrategy.equals( "identity" )
+							|| identifierGeneratorStrategy.equals( "seqhilo" )
+							|| identifierGeneratorStrategy.equals( MultipleHiLoPerTableGenerator.class.getName() );
+			if ( generatorType == null || ! avoidOverriding ) {
+				id.setIdentifierGeneratorStrategy( identifierGeneratorStrategy );
+			}
+			//checkIfMatchingGenerator(gen, generatorType, generatorName);
+			Iterator genParams = gen.getParams().entrySet().iterator();
+			while ( genParams.hasNext() ) {
+				Map.Entry elt = (Map.Entry) genParams.next();
+				params.setProperty( (String) elt.getKey(), (String) elt.getValue() );
+			}
+		}
+		if ( "assigned".equals( generatorType ) ) id.setNullValue( "undefined" );
+		id.setIdentifierGeneratorProperties( params );
+	}
+
+	public static boolean isDefault(String annotationString) {
+		return annotationString != null && annotationString.length() == 0;
+		//equivalent to (but faster) ANNOTATION_STRING_DEFAULT.equals( annotationString );
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/ClassPropertyHolder.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/ClassPropertyHolder.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/ClassPropertyHolder.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,116 +0,0 @@
-//$Id$
-package org.hibernate.cfg;
-
-import java.util.HashMap;
-import java.util.Map;
-import javax.persistence.JoinTable;
-
-import org.hibernate.cfg.annotations.EntityBinder;
-import org.hibernate.mapping.Component;
-import org.hibernate.mapping.Join;
-import org.hibernate.mapping.KeyValue;
-import org.hibernate.mapping.PersistentClass;
-import org.hibernate.mapping.Property;
-import org.hibernate.mapping.Table;
-import org.hibernate.annotations.common.reflection.XClass;
-
-/**
- * @author Emmanuel Bernard
- */
-public class ClassPropertyHolder extends AbstractPropertyHolder {
-	private PersistentClass persistentClass;
-	private Map<String, Join> joins;
-	private transient Map<String, Join> joinsPerRealTableName;
-	private EntityBinder entityBinder;
-
-	public ClassPropertyHolder(
-			PersistentClass persistentClass, XClass clazzToProcess, Map<String, Join> joins, ExtendedMappings mappings
-	) {
-		super( persistentClass.getEntityName(), null, clazzToProcess, mappings );
-		this.persistentClass = persistentClass;
-		this.joins = joins;
-	}
-
-	public ClassPropertyHolder(
-			PersistentClass persistentClass, XClass clazzToProcess, EntityBinder entityBinder,
-			ExtendedMappings mappings
-	) {
-		this( persistentClass, clazzToProcess, entityBinder.getSecondaryTables(), mappings );
-		this.entityBinder = entityBinder;
-	}
-
-	public String getEntityName() {
-		return persistentClass.getEntityName();
-	}
-
-	public void addProperty(Property prop, Ejb3Column[] columns) {
-		//Ejb3Column.checkPropertyConsistency( ); //already called earlier
-		if ( columns[0].isSecondary() ) {
-			//TODO move the getJoin() code here?
-			columns[0].getJoin().addProperty( prop );
-		}
-		else {
-			addProperty( prop );
-		}
-	}
-
-	public Join addJoin(JoinTable joinTableAnn, boolean noDelayInPkColumnCreation) {
-		Join join = entityBinder.addJoin( joinTableAnn, this, noDelayInPkColumnCreation );
-		this.joins = entityBinder.getSecondaryTables();
-		return join;
-	}
-
-	public void addProperty(Property prop) {
-		if ( prop.getValue() instanceof Component ) {
-			//TODO handle quote and non quote table comparison
-			String tableName = prop.getValue().getTable().getName();
-			if ( getJoinsPerRealTableName().containsKey( tableName ) ) {
-				getJoinsPerRealTableName().get( tableName ).addProperty( prop );
-			}
-			else {
-				persistentClass.addProperty( prop );
-			}
-		}
-		else {
-			persistentClass.addProperty( prop );
-		}
-	}
-
-	/**
-	 * Needed for proper compliance with naming strategy, the property table
-	 * can be overriden if the properties are part of secondary tables
-	 */
-	private Map<String, Join> getJoinsPerRealTableName() {
-		if ( joinsPerRealTableName == null ) {
-			joinsPerRealTableName = new HashMap<String, Join>( joins.size() );
-			for ( Join join : joins.values() ) {
-				joinsPerRealTableName.put( join.getTable().getName(), join );
-			}
-		}
-		return joinsPerRealTableName;
-	}
-
-	public String getClassName() {
-		return persistentClass.getClassName();
-	}
-
-	public String getEntityOwnerClassName() {
-		return getClassName();
-	}
-
-	public Table getTable() {
-		return persistentClass.getTable();
-	}
-
-	public boolean isComponent() {
-		return false;
-	}
-
-	public PersistentClass getPersistentClass() {
-		return persistentClass;
-	}
-
-	public KeyValue getIdentifier() {
-		return persistentClass.getIdentifier();
-	}
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/ClassPropertyHolder.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/ClassPropertyHolder.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/ClassPropertyHolder.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/ClassPropertyHolder.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,116 @@
+//$Id$
+package org.hibernate.cfg;
+
+import java.util.HashMap;
+import java.util.Map;
+import javax.persistence.JoinTable;
+
+import org.hibernate.cfg.annotations.EntityBinder;
+import org.hibernate.mapping.Component;
+import org.hibernate.mapping.Join;
+import org.hibernate.mapping.KeyValue;
+import org.hibernate.mapping.PersistentClass;
+import org.hibernate.mapping.Property;
+import org.hibernate.mapping.Table;
+import org.hibernate.annotations.common.reflection.XClass;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class ClassPropertyHolder extends AbstractPropertyHolder {
+	private PersistentClass persistentClass;
+	private Map<String, Join> joins;
+	private transient Map<String, Join> joinsPerRealTableName;
+	private EntityBinder entityBinder;
+
+	public ClassPropertyHolder(
+			PersistentClass persistentClass, XClass clazzToProcess, Map<String, Join> joins, ExtendedMappings mappings
+	) {
+		super( persistentClass.getEntityName(), null, clazzToProcess, mappings );
+		this.persistentClass = persistentClass;
+		this.joins = joins;
+	}
+
+	public ClassPropertyHolder(
+			PersistentClass persistentClass, XClass clazzToProcess, EntityBinder entityBinder,
+			ExtendedMappings mappings
+	) {
+		this( persistentClass, clazzToProcess, entityBinder.getSecondaryTables(), mappings );
+		this.entityBinder = entityBinder;
+	}
+
+	public String getEntityName() {
+		return persistentClass.getEntityName();
+	}
+
+	public void addProperty(Property prop, Ejb3Column[] columns) {
+		//Ejb3Column.checkPropertyConsistency( ); //already called earlier
+		if ( columns[0].isSecondary() ) {
+			//TODO move the getJoin() code here?
+			columns[0].getJoin().addProperty( prop );
+		}
+		else {
+			addProperty( prop );
+		}
+	}
+
+	public Join addJoin(JoinTable joinTableAnn, boolean noDelayInPkColumnCreation) {
+		Join join = entityBinder.addJoin( joinTableAnn, this, noDelayInPkColumnCreation );
+		this.joins = entityBinder.getSecondaryTables();
+		return join;
+	}
+
+	public void addProperty(Property prop) {
+		if ( prop.getValue() instanceof Component ) {
+			//TODO handle quote and non quote table comparison
+			String tableName = prop.getValue().getTable().getName();
+			if ( getJoinsPerRealTableName().containsKey( tableName ) ) {
+				getJoinsPerRealTableName().get( tableName ).addProperty( prop );
+			}
+			else {
+				persistentClass.addProperty( prop );
+			}
+		}
+		else {
+			persistentClass.addProperty( prop );
+		}
+	}
+
+	/**
+	 * Needed for proper compliance with naming strategy, the property table
+	 * can be overriden if the properties are part of secondary tables
+	 */
+	private Map<String, Join> getJoinsPerRealTableName() {
+		if ( joinsPerRealTableName == null ) {
+			joinsPerRealTableName = new HashMap<String, Join>( joins.size() );
+			for ( Join join : joins.values() ) {
+				joinsPerRealTableName.put( join.getTable().getName(), join );
+			}
+		}
+		return joinsPerRealTableName;
+	}
+
+	public String getClassName() {
+		return persistentClass.getClassName();
+	}
+
+	public String getEntityOwnerClassName() {
+		return getClassName();
+	}
+
+	public Table getTable() {
+		return persistentClass.getTable();
+	}
+
+	public boolean isComponent() {
+		return false;
+	}
+
+	public PersistentClass getPersistentClass() {
+		return persistentClass;
+	}
+
+	public KeyValue getIdentifier() {
+		return persistentClass.getIdentifier();
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/CollectionPropertyHolder.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/CollectionPropertyHolder.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/CollectionPropertyHolder.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,71 +0,0 @@
-//$Id$
-package org.hibernate.cfg;
-
-import javax.persistence.JoinTable;
-
-import org.hibernate.AssertionFailure;
-import org.hibernate.mapping.Collection;
-import org.hibernate.mapping.Join;
-import org.hibernate.mapping.KeyValue;
-import org.hibernate.mapping.PersistentClass;
-import org.hibernate.mapping.Property;
-import org.hibernate.mapping.Table;
-import org.hibernate.annotations.common.reflection.XClass;
-import org.hibernate.annotations.common.reflection.XProperty;
-
-/**
- * @author Emmanuel Bernard
- */
-public class CollectionPropertyHolder extends AbstractPropertyHolder {
-	Collection collection;
-
-	public CollectionPropertyHolder(
-			Collection collection, String path, XClass clazzToProcess, XProperty property,
-			PropertyHolder parentPropertyHolder, ExtendedMappings mappings
-	) {
-		super( path, parentPropertyHolder, clazzToProcess, mappings );
-		this.collection = collection;
-		setCurrentProperty( property );
-	}
-
-	public String getClassName() {
-		throw new AssertionFailure( "Collection property holder does not have a class name" );
-	}
-
-	public String getEntityOwnerClassName() {
-		return null;
-	}
-
-	public Table getTable() {
-		return collection.getCollectionTable();
-	}
-
-	public void addProperty(Property prop) {
-		throw new AssertionFailure( "Cannot add property to a collection" );
-	}
-
-	public KeyValue getIdentifier() {
-		throw new AssertionFailure( "Identifier collection not yet managed" );
-	}
-
-	public PersistentClass getPersistentClass() {
-		return collection.getOwner();
-	}
-
-	public boolean isComponent() {
-		return false;
-	}
-
-	public String getEntityName() {
-		return collection.getOwner().getEntityName();
-	}
-
-	public void addProperty(Property prop, Ejb3Column[] columns) {
-		//Ejb3Column.checkPropertyConsistency( ); //already called earlier
-		throw new AssertionFailure( "addProperty to a join table of a collection: does it make sense?" );
-	}
-
-	public Join addJoin(JoinTable joinTableAnn, boolean noDelayInPkColumnCreation) {
-		throw new AssertionFailure( "Add a <join> in a second pass" );
-	}
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/CollectionPropertyHolder.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/CollectionPropertyHolder.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/CollectionPropertyHolder.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/CollectionPropertyHolder.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,71 @@
+//$Id$
+package org.hibernate.cfg;
+
+import javax.persistence.JoinTable;
+
+import org.hibernate.AssertionFailure;
+import org.hibernate.mapping.Collection;
+import org.hibernate.mapping.Join;
+import org.hibernate.mapping.KeyValue;
+import org.hibernate.mapping.PersistentClass;
+import org.hibernate.mapping.Property;
+import org.hibernate.mapping.Table;
+import org.hibernate.annotations.common.reflection.XClass;
+import org.hibernate.annotations.common.reflection.XProperty;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class CollectionPropertyHolder extends AbstractPropertyHolder {
+	Collection collection;
+
+	public CollectionPropertyHolder(
+			Collection collection, String path, XClass clazzToProcess, XProperty property,
+			PropertyHolder parentPropertyHolder, ExtendedMappings mappings
+	) {
+		super( path, parentPropertyHolder, clazzToProcess, mappings );
+		this.collection = collection;
+		setCurrentProperty( property );
+	}
+
+	public String getClassName() {
+		throw new AssertionFailure( "Collection property holder does not have a class name" );
+	}
+
+	public String getEntityOwnerClassName() {
+		return null;
+	}
+
+	public Table getTable() {
+		return collection.getCollectionTable();
+	}
+
+	public void addProperty(Property prop) {
+		throw new AssertionFailure( "Cannot add property to a collection" );
+	}
+
+	public KeyValue getIdentifier() {
+		throw new AssertionFailure( "Identifier collection not yet managed" );
+	}
+
+	public PersistentClass getPersistentClass() {
+		return collection.getOwner();
+	}
+
+	public boolean isComponent() {
+		return false;
+	}
+
+	public String getEntityName() {
+		return collection.getOwner().getEntityName();
+	}
+
+	public void addProperty(Property prop, Ejb3Column[] columns) {
+		//Ejb3Column.checkPropertyConsistency( ); //already called earlier
+		throw new AssertionFailure( "addProperty to a join table of a collection: does it make sense?" );
+	}
+
+	public Join addJoin(JoinTable joinTableAnn, boolean noDelayInPkColumnCreation) {
+		throw new AssertionFailure( "Add a <join> in a second pass" );
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/ComponentPropertyHolder.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/ComponentPropertyHolder.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/ComponentPropertyHolder.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,132 +0,0 @@
-//$Id$
-package org.hibernate.cfg;
-
-import javax.persistence.Column;
-import javax.persistence.JoinColumn;
-import javax.persistence.JoinTable;
-
-import org.hibernate.AnnotationException;
-import org.hibernate.mapping.Component;
-import org.hibernate.mapping.KeyValue;
-import org.hibernate.mapping.PersistentClass;
-import org.hibernate.mapping.Property;
-import org.hibernate.mapping.Table;
-import org.hibernate.mapping.Join;
-
-/**
- * Component implementation of property holder
- *
- * @author Emmanuel Bernard
- */
-public class ComponentPropertyHolder extends AbstractPropertyHolder {
-	//TODO introduce a overrideTable() method for columns held by sec table rather than the hack
-	//     joinsPerRealTableName in ClassPropertyHolder
-	private Component component;
-
-	public String getEntityName() {
-		return component.getComponentClassName();
-	}
-
-	public void addProperty(Property prop, Ejb3Column[] columns) {
-		//Ejb3Column.checkPropertyConsistency( ); //already called earlier
-		/*
-		 * Check table matches between the component and the columns
-		 * if not, change the component table if no properties are set
-		 * if a property is set already the core cannot support that
-		 */
-		Table table = columns[0].getTable();
-		if ( ! table.equals( component.getTable() ) ) {
-			if ( component.getPropertySpan() == 0 ) {
-				component.setTable( table );
-			}
-			else {
-				throw new AnnotationException(
-						"A component cannot hold properties split into 2 different tables: "
-								+ this.getPath()
-				);
-			}
-		}
-		addProperty( prop );
-	}
-
-	public Join addJoin(JoinTable joinTableAnn, boolean noDelayInPkColumnCreation) {
-		return parent.addJoin( joinTableAnn, noDelayInPkColumnCreation );
-
-	}
-
-	public ComponentPropertyHolder(
-			Component component, String path, PropertyData inferredData, PropertyHolder parent,
-			ExtendedMappings mappings
-	) {
-		super( path, parent, inferredData.getPropertyClass(), mappings );
-		setCurrentProperty( inferredData.getProperty() );
-		this.component = component;
-	}
-
-	public String getClassName() {
-		return component.getComponentClassName();
-	}
-
-	public String getEntityOwnerClassName() {
-		return component.getOwner().getClassName();
-	}
-
-	public Table getTable() {
-		return component.getTable();
-	}
-
-	public void addProperty(Property prop) {
-		component.addProperty( prop );
-	}
-
-	public KeyValue getIdentifier() {
-		return component.getOwner().getIdentifier();
-	}
-
-	public PersistentClass getPersistentClass() {
-		return component.getOwner();
-	}
-
-	public boolean isComponent() {
-		return true;
-	}
-
-	public void setParentProperty(String parentProperty) {
-		component.setParentProperty( parentProperty );
-	}
-
-	@Override
-	public Column[] getOverriddenColumn(String propertyName) {
-		//FIXME this is yukky
-		Column[] result = super.getOverriddenColumn( propertyName );
-		if ( result == null ) {
-			String userPropertyName = extractUserPropertyName( "id", propertyName );
-			if ( userPropertyName != null ) result = super.getOverriddenColumn( userPropertyName );
-		}
-		if ( result == null ) {
-			String userPropertyName = extractUserPropertyName( "_identifierMapper", propertyName );
-			if ( userPropertyName != null ) result = super.getOverriddenColumn( userPropertyName );
-		}
-		return result;
-	}
-
-	private String extractUserPropertyName(String redundantString, String propertyName) {
-		String result = null;
-		String className = component.getOwner().getClassName();
-		if ( propertyName.startsWith( className )
-				&& propertyName.length() > className.length() + 2 + redundantString.length() // .id.
-				&& propertyName.substring(
-				className.length() + 1, className.length() + 1 + redundantString.length()
-		).equals( redundantString )
-				) {
-			//remove id we might be in a @IdCLass case
-			result = className + propertyName.substring( className.length() + 1 + redundantString.length() );
-		}
-		return result;
-	}
-
-	@Override
-	public JoinColumn[] getOverriddenJoinColumn(String propertyName) {
-		return super.getOverriddenJoinColumn( propertyName );
-	}
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/ComponentPropertyHolder.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/ComponentPropertyHolder.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/ComponentPropertyHolder.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/ComponentPropertyHolder.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,132 @@
+//$Id$
+package org.hibernate.cfg;
+
+import javax.persistence.Column;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
+
+import org.hibernate.AnnotationException;
+import org.hibernate.mapping.Component;
+import org.hibernate.mapping.KeyValue;
+import org.hibernate.mapping.PersistentClass;
+import org.hibernate.mapping.Property;
+import org.hibernate.mapping.Table;
+import org.hibernate.mapping.Join;
+
+/**
+ * Component implementation of property holder
+ *
+ * @author Emmanuel Bernard
+ */
+public class ComponentPropertyHolder extends AbstractPropertyHolder {
+	//TODO introduce a overrideTable() method for columns held by sec table rather than the hack
+	//     joinsPerRealTableName in ClassPropertyHolder
+	private Component component;
+
+	public String getEntityName() {
+		return component.getComponentClassName();
+	}
+
+	public void addProperty(Property prop, Ejb3Column[] columns) {
+		//Ejb3Column.checkPropertyConsistency( ); //already called earlier
+		/*
+		 * Check table matches between the component and the columns
+		 * if not, change the component table if no properties are set
+		 * if a property is set already the core cannot support that
+		 */
+		Table table = columns[0].getTable();
+		if ( ! table.equals( component.getTable() ) ) {
+			if ( component.getPropertySpan() == 0 ) {
+				component.setTable( table );
+			}
+			else {
+				throw new AnnotationException(
+						"A component cannot hold properties split into 2 different tables: "
+								+ this.getPath()
+				);
+			}
+		}
+		addProperty( prop );
+	}
+
+	public Join addJoin(JoinTable joinTableAnn, boolean noDelayInPkColumnCreation) {
+		return parent.addJoin( joinTableAnn, noDelayInPkColumnCreation );
+
+	}
+
+	public ComponentPropertyHolder(
+			Component component, String path, PropertyData inferredData, PropertyHolder parent,
+			ExtendedMappings mappings
+	) {
+		super( path, parent, inferredData.getPropertyClass(), mappings );
+		setCurrentProperty( inferredData.getProperty() );
+		this.component = component;
+	}
+
+	public String getClassName() {
+		return component.getComponentClassName();
+	}
+
+	public String getEntityOwnerClassName() {
+		return component.getOwner().getClassName();
+	}
+
+	public Table getTable() {
+		return component.getTable();
+	}
+
+	public void addProperty(Property prop) {
+		component.addProperty( prop );
+	}
+
+	public KeyValue getIdentifier() {
+		return component.getOwner().getIdentifier();
+	}
+
+	public PersistentClass getPersistentClass() {
+		return component.getOwner();
+	}
+
+	public boolean isComponent() {
+		return true;
+	}
+
+	public void setParentProperty(String parentProperty) {
+		component.setParentProperty( parentProperty );
+	}
+
+	@Override
+	public Column[] getOverriddenColumn(String propertyName) {
+		//FIXME this is yukky
+		Column[] result = super.getOverriddenColumn( propertyName );
+		if ( result == null ) {
+			String userPropertyName = extractUserPropertyName( "id", propertyName );
+			if ( userPropertyName != null ) result = super.getOverriddenColumn( userPropertyName );
+		}
+		if ( result == null ) {
+			String userPropertyName = extractUserPropertyName( "_identifierMapper", propertyName );
+			if ( userPropertyName != null ) result = super.getOverriddenColumn( userPropertyName );
+		}
+		return result;
+	}
+
+	private String extractUserPropertyName(String redundantString, String propertyName) {
+		String result = null;
+		String className = component.getOwner().getClassName();
+		if ( propertyName.startsWith( className )
+				&& propertyName.length() > className.length() + 2 + redundantString.length() // .id.
+				&& propertyName.substring(
+				className.length() + 1, className.length() + 1 + redundantString.length()
+		).equals( redundantString )
+				) {
+			//remove id we might be in a @IdCLass case
+			result = className + propertyName.substring( className.length() + 1 + redundantString.length() );
+		}
+		return result;
+	}
+
+	@Override
+	public JoinColumn[] getOverriddenJoinColumn(String propertyName) {
+		return super.getOverriddenJoinColumn( propertyName );
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/CreateKeySecondPass.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/CreateKeySecondPass.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/CreateKeySecondPass.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,37 +0,0 @@
-//$Id: $
-package org.hibernate.cfg;
-
-import java.util.Map;
-
-import org.hibernate.MappingException;
-import org.hibernate.mapping.JoinedSubclass;
-import org.hibernate.mapping.RootClass;
-
-/**
- * @author Emmanuel Bernard
- */
-public class CreateKeySecondPass implements SecondPass {
-	private RootClass rootClass;
-	private JoinedSubclass joinedSubClass;
-
-	public CreateKeySecondPass(RootClass rootClass) {
-		this.rootClass = rootClass;
-	}
-
-	public CreateKeySecondPass(JoinedSubclass joinedSubClass) {
-		this.joinedSubClass = joinedSubClass;
-	}
-
-	public void doSecondPass(Map persistentClasses) throws MappingException {
-		if ( rootClass != null ) {
-			rootClass.createPrimaryKey();
-		}
-		else if ( joinedSubClass != null ) {
-			joinedSubClass.createPrimaryKey();
-			joinedSubClass.createForeignKey();
-		}
-		else {
-			throw new AssertionError( "rootClass and joinedSubClass are null" );
-		}
-	}
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/CreateKeySecondPass.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/CreateKeySecondPass.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/CreateKeySecondPass.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/CreateKeySecondPass.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,37 @@
+//$Id: $
+package org.hibernate.cfg;
+
+import java.util.Map;
+
+import org.hibernate.MappingException;
+import org.hibernate.mapping.JoinedSubclass;
+import org.hibernate.mapping.RootClass;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class CreateKeySecondPass implements SecondPass {
+	private RootClass rootClass;
+	private JoinedSubclass joinedSubClass;
+
+	public CreateKeySecondPass(RootClass rootClass) {
+		this.rootClass = rootClass;
+	}
+
+	public CreateKeySecondPass(JoinedSubclass joinedSubClass) {
+		this.joinedSubClass = joinedSubClass;
+	}
+
+	public void doSecondPass(Map persistentClasses) throws MappingException {
+		if ( rootClass != null ) {
+			rootClass.createPrimaryKey();
+		}
+		else if ( joinedSubClass != null ) {
+			joinedSubClass.createPrimaryKey();
+			joinedSubClass.createForeignKey();
+		}
+		else {
+			throw new AssertionError( "rootClass and joinedSubClass are null" );
+		}
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/DefaultComponentSafeNamingStrategy.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/DefaultComponentSafeNamingStrategy.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/DefaultComponentSafeNamingStrategy.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,77 +0,0 @@
-//$Id$
-package org.hibernate.cfg;
-
-import org.hibernate.AssertionFailure;
-import org.hibernate.util.StringHelper;
-
-/**
- * @author Emmanuel Bernard
- */
-public class DefaultComponentSafeNamingStrategy extends EJB3NamingStrategy {
-	public static final NamingStrategy INSTANCE = new DefaultComponentSafeNamingStrategy();
-
-	protected static String addUnderscores(String name) {
-		return name.replace( '.', '_' ).toLowerCase();
-	}
-
-	@Override
-	public String propertyToColumnName(String propertyName) {
-		return addUnderscores( propertyName );
-	}
-
-	@Override
-	public String collectionTableName(
-			String ownerEntity, String ownerEntityTable, String associatedEntity, String associatedEntityTable,
-			String propertyName
-	) {
-		return tableName(
-				new StringBuilder( ownerEntityTable ).append( "_" )
-						.append(
-								associatedEntityTable != null ?
-										associatedEntityTable :
-										addUnderscores( propertyName )
-						).toString()
-		);
-	}
-
-
-	public String foreignKeyColumnName(
-			String propertyName, String propertyEntityName, String propertyTableName, String referencedColumnName
-	) {
-		String header = propertyName != null ? addUnderscores( propertyName ) : propertyTableName;
-		if ( header == null ) throw new AssertionFailure( "NamingStrategy not properly filled" );
-		return columnName( header + "_" + referencedColumnName );
-	}
-
-	@Override
-	public String logicalColumnName(String columnName, String propertyName) {
-		return StringHelper.isNotEmpty( columnName ) ? columnName : propertyName;
-	}
-
-	@Override
-	public String logicalCollectionTableName(
-			String tableName, String ownerEntityTable, String associatedEntityTable, String propertyName
-	) {
-		if ( tableName != null ) {
-			return tableName;
-		}
-		else {
-			//use of a stringbuffer to workaround a JDK bug
-			return new StringBuffer( ownerEntityTable ).append( "_" )
-					.append(
-							associatedEntityTable != null ?
-									associatedEntityTable :
-									propertyName
-					).toString();
-		}
-
-	}
-
-	@Override
-	public String logicalCollectionColumnName(String columnName, String propertyName, String referencedColumn) {
-		return StringHelper.isNotEmpty( columnName ) ?
-				columnName :
-				propertyName + "_" + referencedColumn;
-	}
-
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/DefaultComponentSafeNamingStrategy.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/DefaultComponentSafeNamingStrategy.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/DefaultComponentSafeNamingStrategy.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/DefaultComponentSafeNamingStrategy.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,77 @@
+//$Id$
+package org.hibernate.cfg;
+
+import org.hibernate.AssertionFailure;
+import org.hibernate.util.StringHelper;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class DefaultComponentSafeNamingStrategy extends EJB3NamingStrategy {
+	public static final NamingStrategy INSTANCE = new DefaultComponentSafeNamingStrategy();
+
+	protected static String addUnderscores(String name) {
+		return name.replace( '.', '_' ).toLowerCase();
+	}
+
+	@Override
+	public String propertyToColumnName(String propertyName) {
+		return addUnderscores( propertyName );
+	}
+
+	@Override
+	public String collectionTableName(
+			String ownerEntity, String ownerEntityTable, String associatedEntity, String associatedEntityTable,
+			String propertyName
+	) {
+		return tableName(
+				new StringBuilder( ownerEntityTable ).append( "_" )
+						.append(
+								associatedEntityTable != null ?
+										associatedEntityTable :
+										addUnderscores( propertyName )
+						).toString()
+		);
+	}
+
+
+	public String foreignKeyColumnName(
+			String propertyName, String propertyEntityName, String propertyTableName, String referencedColumnName
+	) {
+		String header = propertyName != null ? addUnderscores( propertyName ) : propertyTableName;
+		if ( header == null ) throw new AssertionFailure( "NamingStrategy not properly filled" );
+		return columnName( header + "_" + referencedColumnName );
+	}
+
+	@Override
+	public String logicalColumnName(String columnName, String propertyName) {
+		return StringHelper.isNotEmpty( columnName ) ? columnName : propertyName;
+	}
+
+	@Override
+	public String logicalCollectionTableName(
+			String tableName, String ownerEntityTable, String associatedEntityTable, String propertyName
+	) {
+		if ( tableName != null ) {
+			return tableName;
+		}
+		else {
+			//use of a stringbuffer to workaround a JDK bug
+			return new StringBuffer( ownerEntityTable ).append( "_" )
+					.append(
+							associatedEntityTable != null ?
+									associatedEntityTable :
+									propertyName
+					).toString();
+		}
+
+	}
+
+	@Override
+	public String logicalCollectionColumnName(String columnName, String propertyName, String referencedColumn) {
+		return StringHelper.isNotEmpty( columnName ) ?
+				columnName :
+				propertyName + "_" + referencedColumn;
+	}
+
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/EJB3DTDEntityResolver.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/EJB3DTDEntityResolver.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/EJB3DTDEntityResolver.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,75 +0,0 @@
-//$Id: $
-package org.hibernate.cfg;
-
-import java.io.InputStream;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.hibernate.util.DTDEntityResolver;
-import org.xml.sax.EntityResolver;
-import org.xml.sax.InputSource;
-
-/**
- * @author Emmanuel Bernard
- */
-public class EJB3DTDEntityResolver extends DTDEntityResolver {
-	public static final EntityResolver INSTANCE = new EJB3DTDEntityResolver();
-
-	private static final Log log = LogFactory.getLog( EJB3DTDEntityResolver.class );
-
-	boolean resolved = false;
-
-	public boolean isResolved() {
-		return resolved;
-	}
-
-	public InputSource resolveEntity(String publicId, String systemId) {
-		InputSource is = super.resolveEntity( publicId, systemId );
-		if ( is == null ) {
-			if ( systemId != null ) {
-				if ( systemId.endsWith( "orm_1_0.xsd" ) ) {
-					log.debug(
-							"recognized EJB3 ORM namespace; attempting to resolve on classpath under org/hibernate/ejb"
-					);
-					String path = "org/hibernate/ejb/" + "orm_1_0.xsd";
-					InputStream dtdStream = resolveInHibernateNamespace( path );
-					if ( dtdStream == null ) {
-						log.debug( "unable to locate [" + systemId + "] on classpath" );
-					}
-					else {
-						log.debug( "located [" + systemId + "] in classpath" );
-						InputSource source = new InputSource( dtdStream );
-						source.setPublicId( publicId );
-						source.setSystemId( systemId );
-						resolved = false;
-						return source;
-					}
-				}
-				else if ( systemId.endsWith( "persistence_1_0.xsd" ) ) {
-					log.debug(
-							"recognized EJB3 ORM namespace; attempting to resolve on classpath under org/hibernate/ejb"
-					);
-					String path = "org/hibernate/ejb/" + "persistence_1_0.xsd";
-					InputStream dtdStream = resolveInHibernateNamespace( path );
-					if ( dtdStream == null ) {
-						log.debug( "unable to locate [" + systemId + "] on classpath" );
-					}
-					else {
-						log.debug( "located [" + systemId + "] in classpath" );
-						InputSource source = new InputSource( dtdStream );
-						source.setPublicId( publicId );
-						source.setSystemId( systemId );
-						resolved = true;
-						return source;
-					}
-				}
-			}
-		}
-		else {
-			resolved = true;
-			return is;
-		}
-		//use the default behavior
-		return null;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/EJB3DTDEntityResolver.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/EJB3DTDEntityResolver.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/EJB3DTDEntityResolver.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/EJB3DTDEntityResolver.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,75 @@
+//$Id: $
+package org.hibernate.cfg;
+
+import java.io.InputStream;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.hibernate.util.DTDEntityResolver;
+import org.xml.sax.EntityResolver;
+import org.xml.sax.InputSource;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class EJB3DTDEntityResolver extends DTDEntityResolver {
+	public static final EntityResolver INSTANCE = new EJB3DTDEntityResolver();
+
+	private static final Log log = LogFactory.getLog( EJB3DTDEntityResolver.class );
+
+	boolean resolved = false;
+
+	public boolean isResolved() {
+		return resolved;
+	}
+
+	public InputSource resolveEntity(String publicId, String systemId) {
+		InputSource is = super.resolveEntity( publicId, systemId );
+		if ( is == null ) {
+			if ( systemId != null ) {
+				if ( systemId.endsWith( "orm_1_0.xsd" ) ) {
+					log.debug(
+							"recognized EJB3 ORM namespace; attempting to resolve on classpath under org/hibernate/ejb"
+					);
+					String path = "org/hibernate/ejb/" + "orm_1_0.xsd";
+					InputStream dtdStream = resolveInHibernateNamespace( path );
+					if ( dtdStream == null ) {
+						log.debug( "unable to locate [" + systemId + "] on classpath" );
+					}
+					else {
+						log.debug( "located [" + systemId + "] in classpath" );
+						InputSource source = new InputSource( dtdStream );
+						source.setPublicId( publicId );
+						source.setSystemId( systemId );
+						resolved = false;
+						return source;
+					}
+				}
+				else if ( systemId.endsWith( "persistence_1_0.xsd" ) ) {
+					log.debug(
+							"recognized EJB3 ORM namespace; attempting to resolve on classpath under org/hibernate/ejb"
+					);
+					String path = "org/hibernate/ejb/" + "persistence_1_0.xsd";
+					InputStream dtdStream = resolveInHibernateNamespace( path );
+					if ( dtdStream == null ) {
+						log.debug( "unable to locate [" + systemId + "] on classpath" );
+					}
+					else {
+						log.debug( "located [" + systemId + "] in classpath" );
+						InputSource source = new InputSource( dtdStream );
+						source.setPublicId( publicId );
+						source.setSystemId( systemId );
+						resolved = true;
+						return source;
+					}
+				}
+			}
+		}
+		else {
+			resolved = true;
+			return is;
+		}
+		//use the default behavior
+		return null;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/EJB3NamingStrategy.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/EJB3NamingStrategy.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/EJB3NamingStrategy.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,86 +0,0 @@
-//$Id$
-package org.hibernate.cfg;
-
-import java.io.Serializable;
-
-import org.hibernate.AssertionFailure;
-import org.hibernate.util.StringHelper;
-
-/**
- * NAming strategy implementing the EJB3 standards
- *
- * @author Emmanuel Bernard
- */
-public class EJB3NamingStrategy implements NamingStrategy, Serializable {
-	public static final NamingStrategy INSTANCE = new EJB3NamingStrategy();
-
-	public String classToTableName(String className) {
-		return StringHelper.unqualify( className );
-	}
-
-	public String propertyToColumnName(String propertyName) {
-		return StringHelper.unqualify( propertyName );
-	}
-
-	public String tableName(String tableName) {
-		return tableName;
-	}
-
-	public String columnName(String columnName) {
-		return columnName;
-	}
-
-	public String collectionTableName(
-			String ownerEntity, String ownerEntityTable, String associatedEntity, String associatedEntityTable,
-			String propertyName
-	) {
-		return tableName(
-				new StringBuilder( ownerEntityTable ).append( "_" )
-						.append(
-								associatedEntityTable != null ?
-										associatedEntityTable :
-										StringHelper.unqualify( propertyName )
-						).toString()
-		);
-	}
-
-	public String joinKeyColumnName(String joinedColumn, String joinedTable) {
-		return columnName( joinedColumn );
-	}
-
-	public String foreignKeyColumnName(
-			String propertyName, String propertyEntityName, String propertyTableName, String referencedColumnName
-	) {
-		String header = propertyName != null ? StringHelper.unqualify( propertyName ) : propertyTableName;
-		if ( header == null ) throw new AssertionFailure( "NamingStrategy not properly filled" );
-		return columnName( header + "_" + referencedColumnName );
-	}
-
-	public String logicalColumnName(String columnName, String propertyName) {
-		return StringHelper.isNotEmpty( columnName ) ? columnName : StringHelper.unqualify( propertyName );
-	}
-
-	public String logicalCollectionTableName(
-			String tableName,
-			String ownerEntityTable, String associatedEntityTable, String propertyName
-	) {
-		if ( tableName != null ) {
-			return tableName;
-		}
-		else {
-			//use of a stringbuffer to workaround a JDK bug
-			return new StringBuffer( ownerEntityTable ).append( "_" )
-					.append(
-							associatedEntityTable != null ?
-									associatedEntityTable :
-									StringHelper.unqualify( propertyName )
-					).toString();
-		}
-	}
-
-	public String logicalCollectionColumnName(String columnName, String propertyName, String referencedColumn) {
-		return StringHelper.isNotEmpty( columnName ) ?
-				columnName :
-				StringHelper.unqualify( propertyName ) + "_" + referencedColumn;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/EJB3NamingStrategy.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/EJB3NamingStrategy.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/EJB3NamingStrategy.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/EJB3NamingStrategy.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,86 @@
+//$Id$
+package org.hibernate.cfg;
+
+import java.io.Serializable;
+
+import org.hibernate.AssertionFailure;
+import org.hibernate.util.StringHelper;
+
+/**
+ * NAming strategy implementing the EJB3 standards
+ *
+ * @author Emmanuel Bernard
+ */
+public class EJB3NamingStrategy implements NamingStrategy, Serializable {
+	public static final NamingStrategy INSTANCE = new EJB3NamingStrategy();
+
+	public String classToTableName(String className) {
+		return StringHelper.unqualify( className );
+	}
+
+	public String propertyToColumnName(String propertyName) {
+		return StringHelper.unqualify( propertyName );
+	}
+
+	public String tableName(String tableName) {
+		return tableName;
+	}
+
+	public String columnName(String columnName) {
+		return columnName;
+	}
+
+	public String collectionTableName(
+			String ownerEntity, String ownerEntityTable, String associatedEntity, String associatedEntityTable,
+			String propertyName
+	) {
+		return tableName(
+				new StringBuilder( ownerEntityTable ).append( "_" )
+						.append(
+								associatedEntityTable != null ?
+										associatedEntityTable :
+										StringHelper.unqualify( propertyName )
+						).toString()
+		);
+	}
+
+	public String joinKeyColumnName(String joinedColumn, String joinedTable) {
+		return columnName( joinedColumn );
+	}
+
+	public String foreignKeyColumnName(
+			String propertyName, String propertyEntityName, String propertyTableName, String referencedColumnName
+	) {
+		String header = propertyName != null ? StringHelper.unqualify( propertyName ) : propertyTableName;
+		if ( header == null ) throw new AssertionFailure( "NamingStrategy not properly filled" );
+		return columnName( header + "_" + referencedColumnName );
+	}
+
+	public String logicalColumnName(String columnName, String propertyName) {
+		return StringHelper.isNotEmpty( columnName ) ? columnName : StringHelper.unqualify( propertyName );
+	}
+
+	public String logicalCollectionTableName(
+			String tableName,
+			String ownerEntityTable, String associatedEntityTable, String propertyName
+	) {
+		if ( tableName != null ) {
+			return tableName;
+		}
+		else {
+			//use of a stringbuffer to workaround a JDK bug
+			return new StringBuffer( ownerEntityTable ).append( "_" )
+					.append(
+							associatedEntityTable != null ?
+									associatedEntityTable :
+									StringHelper.unqualify( propertyName )
+					).toString();
+		}
+	}
+
+	public String logicalCollectionColumnName(String columnName, String propertyName, String referencedColumn) {
+		return StringHelper.isNotEmpty( columnName ) ?
+				columnName :
+				StringHelper.unqualify( propertyName ) + "_" + referencedColumn;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/Ejb3Column.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/Ejb3Column.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/Ejb3Column.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,444 +0,0 @@
-//$Id$
-package org.hibernate.cfg;
-
-import java.util.Map;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.hibernate.AnnotationException;
-import org.hibernate.AssertionFailure;
-import org.hibernate.annotations.Index;
-import org.hibernate.cfg.annotations.Nullability;
-import org.hibernate.mapping.Column;
-import org.hibernate.mapping.Formula;
-import org.hibernate.mapping.Join;
-import org.hibernate.mapping.SimpleValue;
-import org.hibernate.mapping.Table;
-import org.hibernate.util.StringHelper;
-
-/**
- * Wrap state of an EJB3 @Column annotation
- * and build the Hibernate column mapping element
- *
- * @author Emmanuel Bernard
- */
-public class Ejb3Column {
-	private static final Log log = LogFactory.getLog( Ejb3Column.class );
-	private Column mappingColumn;
-	private boolean insertable = true;
-	private boolean updatable = true;
-	private String secondaryTableName;
-	protected Map<String, Join> joins;
-	protected PropertyHolder propertyHolder;
-	private ExtendedMappings mappings;
-	private boolean isImplicit;
-	public static final int DEFAULT_COLUMN_LENGTH = 255;
-	public String sqlType;
-	private int length = DEFAULT_COLUMN_LENGTH;
-	private int precision;
-	private int scale;
-	private String logicalColumnName;
-	private String propertyName;
-	private boolean unique;
-	private boolean nullable = true;
-	private String formulaString;
-	private Formula formula;
-	private Table table;
-
-	public void setTable(Table table) {
-		this.table = table;
-	}
-
-	public String getLogicalColumnName() {
-		return logicalColumnName;
-	}
-
-	public String getSqlType() {
-		return sqlType;
-	}
-
-	public int getLength() {
-		return length;
-	}
-
-	public int getPrecision() {
-		return precision;
-	}
-
-	public int getScale() {
-		return scale;
-	}
-
-	public boolean isUnique() {
-		return unique;
-	}
-
-	public String getFormulaString() {
-		return formulaString;
-	}
-
-	public String getSecondaryTableName() {
-		return secondaryTableName;
-	}
-
-	public void setFormula(String formula) {
-		this.formulaString = formula;
-	}
-
-	public boolean isImplicit() {
-		return isImplicit;
-	}
-
-	public void setInsertable(boolean insertable) {
-		this.insertable = insertable;
-	}
-
-	public void setUpdatable(boolean updatable) {
-		this.updatable = updatable;
-	}
-
-	protected ExtendedMappings getMappings() {
-		return mappings;
-	}
-
-	public void setMappings(ExtendedMappings mappings) {
-		this.mappings = mappings;
-	}
-
-	public void setImplicit(boolean implicit) {
-		isImplicit = implicit;
-	}
-
-	public void setSqlType(String sqlType) {
-		this.sqlType = sqlType;
-	}
-
-	public void setLength(int length) {
-		this.length = length;
-	}
-
-	public void setPrecision(int precision) {
-		this.precision = precision;
-	}
-
-	public void setScale(int scale) {
-		this.scale = scale;
-	}
-
-	public void setLogicalColumnName(String logicalColumnName) {
-		this.logicalColumnName = logicalColumnName;
-	}
-
-	public void setPropertyName(String propertyName) {
-		this.propertyName = propertyName;
-	}
-
-	public String getPropertyName() {
-		return propertyName;
-	}
-
-	public void setUnique(boolean unique) {
-		this.unique = unique;
-	}
-
-	public boolean isNullable() {
-		return mappingColumn.isNullable();
-	}
-
-	public Ejb3Column() {
-	}
-
-	public void bind() {
-		if ( StringHelper.isNotEmpty( formulaString ) ) {
-			log.debug( "binding formula " + formulaString );
-			formula = new Formula();
-			formula.setFormula( formulaString );
-		}
-		else {
-			initMappingColumn(
-					logicalColumnName, propertyName, length, precision, scale, nullable, sqlType, unique, true
-			);
-			log.debug( "Binding column " + mappingColumn.getName() + " unique " + unique );
-		}
-	}
-
-	protected void initMappingColumn(
-			String columnName, String propertyName, int length, int precision, int scale, boolean nullable,
-			String sqlType, boolean unique, boolean applyNamingStrategy
-	) {
-		this.mappingColumn = new Column();
-		redefineColumnName( columnName, propertyName, applyNamingStrategy );
-		this.mappingColumn.setLength( length );
-		if ( precision > 0 ) {  //revelent precision
-			this.mappingColumn.setPrecision( precision );
-			this.mappingColumn.setScale( scale );
-		}
-		this.mappingColumn.setNullable( nullable );
-		this.mappingColumn.setSqlType( sqlType );
-		this.mappingColumn.setUnique( unique );
-	}
-
-	public boolean isNameDeferred() {
-		return mappingColumn == null || StringHelper.isEmpty( mappingColumn.getName() );
-	}
-
-	public void redefineColumnName(String columnName, String propertyName, boolean applyNamingStrategy) {
-		if ( applyNamingStrategy ) {
-			if ( StringHelper.isEmpty( columnName ) ) {
-				if ( propertyName != null ) {
-					mappingColumn.setName( mappings.getNamingStrategy().propertyToColumnName( propertyName ) );
-				}
-				//Do nothing otherwise
-			}
-			else {
-				mappingColumn.setName( mappings.getNamingStrategy().columnName( columnName ) );
-			}
-		}
-		else {
-			if ( StringHelper.isNotEmpty( columnName ) ) mappingColumn.setName( columnName );
-		}
-	}
-
-	public String getName() {
-		return mappingColumn.getName();
-	}
-
-	public Column getMappingColumn() {
-		return mappingColumn;
-	}
-
-	public boolean isInsertable() {
-		return insertable;
-	}
-
-	public boolean isUpdatable() {
-		return updatable;
-	}
-
-	public void setNullable(boolean nullable) {
-		if ( mappingColumn != null ) {
-			mappingColumn.setNullable( nullable );
-		}
-		else {
-			this.nullable = nullable;
-		}
-	}
-
-	public void setJoins(Map<String, Join> joins) {
-		this.joins = joins;
-	}
-
-	public PropertyHolder getPropertyHolder() {
-		return propertyHolder;
-	}
-
-	public void setPropertyHolder(PropertyHolder propertyHolder) {
-		this.propertyHolder = propertyHolder;
-	}
-
-	protected void setMappingColumn(Column mappingColumn) {
-		this.mappingColumn = mappingColumn;
-	}
-
-	public void linkWithValue(SimpleValue value) {
-		if ( formula != null ) {
-			value.addFormula( formula );
-		}
-		else {
-			getMappingColumn().setValue( value );
-			value.addColumn( getMappingColumn() );
-			value.getTable().addColumn( getMappingColumn() );
-			addColumnBinding( value );
-			table = value.getTable();
-		}
-	}
-
-	protected void addColumnBinding(SimpleValue value) {
-		String logicalColumnName = mappings.getNamingStrategy()
-				.logicalColumnName( this.logicalColumnName, propertyName );
-		mappings.addColumnBinding( logicalColumnName, getMappingColumn(), value.getTable() );
-	}
-
-	/**
-	 * Find appropriate table of the column.
-	 * It can come from a secondary table or from the main table of the persistent class
-	 *
-	 * @return appropriate table
-	 * @throws AnnotationException missing secondary table
-	 */
-	public Table getTable() {
-		if ( table != null ) return table; //association table
-		if ( isSecondary() ) {
-			return getJoin().getTable();
-		}
-		else {
-			return propertyHolder.getTable();
-		}
-	}
-
-	public boolean isSecondary() {
-		if ( propertyHolder == null ) {
-			throw new AssertionFailure( "Should not call getTable() on column wo persistent class defined" );
-		}
-		if ( StringHelper.isNotEmpty( secondaryTableName ) ) {
-			return true;
-		}
-		// else {
-		return false;
-	}
-
-	public Join getJoin() {
-		Join join = joins.get( secondaryTableName );
-		if ( join == null ) {
-			throw new AnnotationException(
-					"Cannot find the expected secondary table: no "
-							+ secondaryTableName + " available for " + propertyHolder.getClassName()
-			);
-		}
-		else {
-			return join;
-		}
-	}
-
-	public void forceNotNull() {
-		mappingColumn.setNullable( false );
-	}
-
-	public void setSecondaryTableName(String secondaryTableName) {
-		this.secondaryTableName = secondaryTableName;
-	}
-
-	public static Ejb3Column[] buildColumnFromAnnotation(
-			javax.persistence.Column[] anns,
-			org.hibernate.annotations.Formula formulaAnn, Nullability nullability, PropertyHolder propertyHolder,
-			PropertyData inferredData,
-			Map<String, Join> secondaryTables,
-			ExtendedMappings mappings
-	) {
-		Ejb3Column[] columns;
-		if ( formulaAnn != null ) {
-			Ejb3Column formulaColumn = new Ejb3Column();
-			formulaColumn.setFormula( formulaAnn.value() );
-			formulaColumn.setImplicit( false );
-			formulaColumn.setMappings( mappings );
-			formulaColumn.setPropertyHolder( propertyHolder );
-			formulaColumn.bind();
-			columns = new Ejb3Column[]{formulaColumn};
-		}
-		else {
-			javax.persistence.Column[] actualCols = anns;
-			javax.persistence.Column[] overriddenCols = propertyHolder.getOverriddenColumn(
-					StringHelper.qualify( propertyHolder.getPath(), inferredData.getPropertyName() )
-			);
-			if ( overriddenCols != null ) {
-				//check for overridden first
-				if ( anns != null && overriddenCols.length != anns.length ) {
-					throw new AnnotationException( "AttributeOverride.column() should override all columns for now" );
-				}
-				actualCols = overriddenCols.length == 0 ? null : overriddenCols;
-				log.debug( "Column(s) overridden for property " + inferredData.getPropertyName() );
-			}
-			if ( actualCols == null ) {
-				columns = buildImplicitColumn( inferredData, secondaryTables, propertyHolder, nullability, mappings );
-			}
-			else {
-				final int length = actualCols.length;
-				columns = new Ejb3Column[length];
-				for ( int index = 0; index < length ; index++ ) {
-					javax.persistence.Column col = actualCols[index];
-					String sqlType = col.columnDefinition().equals( "" ) ? null : col.columnDefinition();
-					Ejb3Column column = new Ejb3Column();
-					column.setImplicit( false );
-					column.setSqlType( sqlType );
-					column.setLength( col.length() );
-					column.setPrecision( col.precision() );
-					column.setScale( col.scale() );
-					column.setLogicalColumnName( col.name() );
-					column.setPropertyName(
-							BinderHelper.getRelativePath( propertyHolder, inferredData.getPropertyName() )
-					);
-					column.setNullable(
-							col.nullable()
-					); //TODO force to not null if available? This is a (bad) user choice.
-					column.setUnique( col.unique() );
-					column.setInsertable( col.insertable() );
-					column.setUpdatable( col.updatable() );
-					column.setSecondaryTableName( col.table() );
-					column.setPropertyHolder( propertyHolder );
-					column.setJoins( secondaryTables );
-					column.setMappings( mappings );
-					column.bind();
-					columns[index] = column;
-				}
-			}
-		}
-		return columns;
-	}
-
-	private static Ejb3Column[] buildImplicitColumn(
-			PropertyData inferredData, Map<String, Join> secondaryTables, PropertyHolder propertyHolder,
-			Nullability nullability, ExtendedMappings mappings
-	) {
-		Ejb3Column[] columns;
-		columns = new Ejb3Column[1];
-		Ejb3Column column = new Ejb3Column();
-		column.setImplicit( false );
-		//not following the spec but more clean
-		if ( nullability != Nullability.FORCED_NULL
-				&& inferredData.getClassOrElement().isPrimitive()
-				&& ! inferredData.getProperty().isArray() ) {
-			column.setNullable( false );
-		}
-		column.setLength( DEFAULT_COLUMN_LENGTH );
-		column.setPropertyName(
-				BinderHelper.getRelativePath( propertyHolder, inferredData.getPropertyName() )
-		);
-		column.setPropertyHolder( propertyHolder );
-		column.setJoins( secondaryTables );
-		column.setMappings( mappings );
-		column.bind();
-		columns[0] = column;
-		return columns;
-	}
-
-	public static void checkPropertyConsistency(Ejb3Column[] columns, String propertyName) {
-		int nbrOfColumns = columns.length;
-		if ( nbrOfColumns > 1 ) {
-			for ( int currentIndex = 1; currentIndex < nbrOfColumns ; currentIndex++ ) {
-				if ( columns[currentIndex].isInsertable() != columns[currentIndex - 1].isInsertable() ) {
-					throw new AnnotationException(
-							"Mixing insertable and non insertable columns in a property is not allowed: " + propertyName
-					);
-				}
-				if ( columns[currentIndex].isNullable() != columns[currentIndex - 1].isNullable() ) {
-					throw new AnnotationException(
-							"Mixing nullable and non nullable columns in a property is not allowed: " + propertyName
-					);
-				}
-				if ( columns[currentIndex].isUpdatable() != columns[currentIndex - 1].isUpdatable() ) {
-					throw new AnnotationException(
-							"Mixing updatable and non updatable columns in a property is not allowed: " + propertyName
-					);
-				}
-				if ( ! columns[currentIndex].getTable().equals( columns[currentIndex - 1].getTable() ) ) {
-					throw new AnnotationException(
-							"Mixing different tables in a property is not allowed: " + propertyName
-					);
-				}
-			}
-		}
-	}
-
-	public void addIndex(Index index, boolean inSecondPass) {
-		if ( index == null ) return;
-		IndexSecondPass secondPass = new IndexSecondPass( index.name(), this, mappings );
-		if (inSecondPass) {
-			secondPass.doSecondPass( mappings.getClasses() );
-		}
-		else {
-			mappings.addSecondPass(
-					secondPass
-			);
-		}
-	}
-}
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/Ejb3Column.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/Ejb3Column.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/Ejb3Column.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/Ejb3Column.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,444 @@
+//$Id$
+package org.hibernate.cfg;
+
+import java.util.Map;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.hibernate.AnnotationException;
+import org.hibernate.AssertionFailure;
+import org.hibernate.annotations.Index;
+import org.hibernate.cfg.annotations.Nullability;
+import org.hibernate.mapping.Column;
+import org.hibernate.mapping.Formula;
+import org.hibernate.mapping.Join;
+import org.hibernate.mapping.SimpleValue;
+import org.hibernate.mapping.Table;
+import org.hibernate.util.StringHelper;
+
+/**
+ * Wrap state of an EJB3 @Column annotation
+ * and build the Hibernate column mapping element
+ *
+ * @author Emmanuel Bernard
+ */
+public class Ejb3Column {
+	private static final Log log = LogFactory.getLog( Ejb3Column.class );
+	private Column mappingColumn;
+	private boolean insertable = true;
+	private boolean updatable = true;
+	private String secondaryTableName;
+	protected Map<String, Join> joins;
+	protected PropertyHolder propertyHolder;
+	private ExtendedMappings mappings;
+	private boolean isImplicit;
+	public static final int DEFAULT_COLUMN_LENGTH = 255;
+	public String sqlType;
+	private int length = DEFAULT_COLUMN_LENGTH;
+	private int precision;
+	private int scale;
+	private String logicalColumnName;
+	private String propertyName;
+	private boolean unique;
+	private boolean nullable = true;
+	private String formulaString;
+	private Formula formula;
+	private Table table;
+
+	public void setTable(Table table) {
+		this.table = table;
+	}
+
+	public String getLogicalColumnName() {
+		return logicalColumnName;
+	}
+
+	public String getSqlType() {
+		return sqlType;
+	}
+
+	public int getLength() {
+		return length;
+	}
+
+	public int getPrecision() {
+		return precision;
+	}
+
+	public int getScale() {
+		return scale;
+	}
+
+	public boolean isUnique() {
+		return unique;
+	}
+
+	public String getFormulaString() {
+		return formulaString;
+	}
+
+	public String getSecondaryTableName() {
+		return secondaryTableName;
+	}
+
+	public void setFormula(String formula) {
+		this.formulaString = formula;
+	}
+
+	public boolean isImplicit() {
+		return isImplicit;
+	}
+
+	public void setInsertable(boolean insertable) {
+		this.insertable = insertable;
+	}
+
+	public void setUpdatable(boolean updatable) {
+		this.updatable = updatable;
+	}
+
+	protected ExtendedMappings getMappings() {
+		return mappings;
+	}
+
+	public void setMappings(ExtendedMappings mappings) {
+		this.mappings = mappings;
+	}
+
+	public void setImplicit(boolean implicit) {
+		isImplicit = implicit;
+	}
+
+	public void setSqlType(String sqlType) {
+		this.sqlType = sqlType;
+	}
+
+	public void setLength(int length) {
+		this.length = length;
+	}
+
+	public void setPrecision(int precision) {
+		this.precision = precision;
+	}
+
+	public void setScale(int scale) {
+		this.scale = scale;
+	}
+
+	public void setLogicalColumnName(String logicalColumnName) {
+		this.logicalColumnName = logicalColumnName;
+	}
+
+	public void setPropertyName(String propertyName) {
+		this.propertyName = propertyName;
+	}
+
+	public String getPropertyName() {
+		return propertyName;
+	}
+
+	public void setUnique(boolean unique) {
+		this.unique = unique;
+	}
+
+	public boolean isNullable() {
+		return mappingColumn.isNullable();
+	}
+
+	public Ejb3Column() {
+	}
+
+	public void bind() {
+		if ( StringHelper.isNotEmpty( formulaString ) ) {
+			log.debug( "binding formula " + formulaString );
+			formula = new Formula();
+			formula.setFormula( formulaString );
+		}
+		else {
+			initMappingColumn(
+					logicalColumnName, propertyName, length, precision, scale, nullable, sqlType, unique, true
+			);
+			log.debug( "Binding column " + mappingColumn.getName() + " unique " + unique );
+		}
+	}
+
+	protected void initMappingColumn(
+			String columnName, String propertyName, int length, int precision, int scale, boolean nullable,
+			String sqlType, boolean unique, boolean applyNamingStrategy
+	) {
+		this.mappingColumn = new Column();
+		redefineColumnName( columnName, propertyName, applyNamingStrategy );
+		this.mappingColumn.setLength( length );
+		if ( precision > 0 ) {  //revelent precision
+			this.mappingColumn.setPrecision( precision );
+			this.mappingColumn.setScale( scale );
+		}
+		this.mappingColumn.setNullable( nullable );
+		this.mappingColumn.setSqlType( sqlType );
+		this.mappingColumn.setUnique( unique );
+	}
+
+	public boolean isNameDeferred() {
+		return mappingColumn == null || StringHelper.isEmpty( mappingColumn.getName() );
+	}
+
+	public void redefineColumnName(String columnName, String propertyName, boolean applyNamingStrategy) {
+		if ( applyNamingStrategy ) {
+			if ( StringHelper.isEmpty( columnName ) ) {
+				if ( propertyName != null ) {
+					mappingColumn.setName( mappings.getNamingStrategy().propertyToColumnName( propertyName ) );
+				}
+				//Do nothing otherwise
+			}
+			else {
+				mappingColumn.setName( mappings.getNamingStrategy().columnName( columnName ) );
+			}
+		}
+		else {
+			if ( StringHelper.isNotEmpty( columnName ) ) mappingColumn.setName( columnName );
+		}
+	}
+
+	public String getName() {
+		return mappingColumn.getName();
+	}
+
+	public Column getMappingColumn() {
+		return mappingColumn;
+	}
+
+	public boolean isInsertable() {
+		return insertable;
+	}
+
+	public boolean isUpdatable() {
+		return updatable;
+	}
+
+	public void setNullable(boolean nullable) {
+		if ( mappingColumn != null ) {
+			mappingColumn.setNullable( nullable );
+		}
+		else {
+			this.nullable = nullable;
+		}
+	}
+
+	public void setJoins(Map<String, Join> joins) {
+		this.joins = joins;
+	}
+
+	public PropertyHolder getPropertyHolder() {
+		return propertyHolder;
+	}
+
+	public void setPropertyHolder(PropertyHolder propertyHolder) {
+		this.propertyHolder = propertyHolder;
+	}
+
+	protected void setMappingColumn(Column mappingColumn) {
+		this.mappingColumn = mappingColumn;
+	}
+
+	public void linkWithValue(SimpleValue value) {
+		if ( formula != null ) {
+			value.addFormula( formula );
+		}
+		else {
+			getMappingColumn().setValue( value );
+			value.addColumn( getMappingColumn() );
+			value.getTable().addColumn( getMappingColumn() );
+			addColumnBinding( value );
+			table = value.getTable();
+		}
+	}
+
+	protected void addColumnBinding(SimpleValue value) {
+		String logicalColumnName = mappings.getNamingStrategy()
+				.logicalColumnName( this.logicalColumnName, propertyName );
+		mappings.addColumnBinding( logicalColumnName, getMappingColumn(), value.getTable() );
+	}
+
+	/**
+	 * Find appropriate table of the column.
+	 * It can come from a secondary table or from the main table of the persistent class
+	 *
+	 * @return appropriate table
+	 * @throws AnnotationException missing secondary table
+	 */
+	public Table getTable() {
+		if ( table != null ) return table; //association table
+		if ( isSecondary() ) {
+			return getJoin().getTable();
+		}
+		else {
+			return propertyHolder.getTable();
+		}
+	}
+
+	public boolean isSecondary() {
+		if ( propertyHolder == null ) {
+			throw new AssertionFailure( "Should not call getTable() on column wo persistent class defined" );
+		}
+		if ( StringHelper.isNotEmpty( secondaryTableName ) ) {
+			return true;
+		}
+		// else {
+		return false;
+	}
+
+	public Join getJoin() {
+		Join join = joins.get( secondaryTableName );
+		if ( join == null ) {
+			throw new AnnotationException(
+					"Cannot find the expected secondary table: no "
+							+ secondaryTableName + " available for " + propertyHolder.getClassName()
+			);
+		}
+		else {
+			return join;
+		}
+	}
+
+	public void forceNotNull() {
+		mappingColumn.setNullable( false );
+	}
+
+	public void setSecondaryTableName(String secondaryTableName) {
+		this.secondaryTableName = secondaryTableName;
+	}
+
+	public static Ejb3Column[] buildColumnFromAnnotation(
+			javax.persistence.Column[] anns,
+			org.hibernate.annotations.Formula formulaAnn, Nullability nullability, PropertyHolder propertyHolder,
+			PropertyData inferredData,
+			Map<String, Join> secondaryTables,
+			ExtendedMappings mappings
+	) {
+		Ejb3Column[] columns;
+		if ( formulaAnn != null ) {
+			Ejb3Column formulaColumn = new Ejb3Column();
+			formulaColumn.setFormula( formulaAnn.value() );
+			formulaColumn.setImplicit( false );
+			formulaColumn.setMappings( mappings );
+			formulaColumn.setPropertyHolder( propertyHolder );
+			formulaColumn.bind();
+			columns = new Ejb3Column[]{formulaColumn};
+		}
+		else {
+			javax.persistence.Column[] actualCols = anns;
+			javax.persistence.Column[] overriddenCols = propertyHolder.getOverriddenColumn(
+					StringHelper.qualify( propertyHolder.getPath(), inferredData.getPropertyName() )
+			);
+			if ( overriddenCols != null ) {
+				//check for overridden first
+				if ( anns != null && overriddenCols.length != anns.length ) {
+					throw new AnnotationException( "AttributeOverride.column() should override all columns for now" );
+				}
+				actualCols = overriddenCols.length == 0 ? null : overriddenCols;
+				log.debug( "Column(s) overridden for property " + inferredData.getPropertyName() );
+			}
+			if ( actualCols == null ) {
+				columns = buildImplicitColumn( inferredData, secondaryTables, propertyHolder, nullability, mappings );
+			}
+			else {
+				final int length = actualCols.length;
+				columns = new Ejb3Column[length];
+				for ( int index = 0; index < length ; index++ ) {
+					javax.persistence.Column col = actualCols[index];
+					String sqlType = col.columnDefinition().equals( "" ) ? null : col.columnDefinition();
+					Ejb3Column column = new Ejb3Column();
+					column.setImplicit( false );
+					column.setSqlType( sqlType );
+					column.setLength( col.length() );
+					column.setPrecision( col.precision() );
+					column.setScale( col.scale() );
+					column.setLogicalColumnName( col.name() );
+					column.setPropertyName(
+							BinderHelper.getRelativePath( propertyHolder, inferredData.getPropertyName() )
+					);
+					column.setNullable(
+							col.nullable()
+					); //TODO force to not null if available? This is a (bad) user choice.
+					column.setUnique( col.unique() );
+					column.setInsertable( col.insertable() );
+					column.setUpdatable( col.updatable() );
+					column.setSecondaryTableName( col.table() );
+					column.setPropertyHolder( propertyHolder );
+					column.setJoins( secondaryTables );
+					column.setMappings( mappings );
+					column.bind();
+					columns[index] = column;
+				}
+			}
+		}
+		return columns;
+	}
+
+	private static Ejb3Column[] buildImplicitColumn(
+			PropertyData inferredData, Map<String, Join> secondaryTables, PropertyHolder propertyHolder,
+			Nullability nullability, ExtendedMappings mappings
+	) {
+		Ejb3Column[] columns;
+		columns = new Ejb3Column[1];
+		Ejb3Column column = new Ejb3Column();
+		column.setImplicit( false );
+		//not following the spec but more clean
+		if ( nullability != Nullability.FORCED_NULL
+				&& inferredData.getClassOrElement().isPrimitive()
+				&& ! inferredData.getProperty().isArray() ) {
+			column.setNullable( false );
+		}
+		column.setLength( DEFAULT_COLUMN_LENGTH );
+		column.setPropertyName(
+				BinderHelper.getRelativePath( propertyHolder, inferredData.getPropertyName() )
+		);
+		column.setPropertyHolder( propertyHolder );
+		column.setJoins( secondaryTables );
+		column.setMappings( mappings );
+		column.bind();
+		columns[0] = column;
+		return columns;
+	}
+
+	public static void checkPropertyConsistency(Ejb3Column[] columns, String propertyName) {
+		int nbrOfColumns = columns.length;
+		if ( nbrOfColumns > 1 ) {
+			for ( int currentIndex = 1; currentIndex < nbrOfColumns ; currentIndex++ ) {
+				if ( columns[currentIndex].isInsertable() != columns[currentIndex - 1].isInsertable() ) {
+					throw new AnnotationException(
+							"Mixing insertable and non insertable columns in a property is not allowed: " + propertyName
+					);
+				}
+				if ( columns[currentIndex].isNullable() != columns[currentIndex - 1].isNullable() ) {
+					throw new AnnotationException(
+							"Mixing nullable and non nullable columns in a property is not allowed: " + propertyName
+					);
+				}
+				if ( columns[currentIndex].isUpdatable() != columns[currentIndex - 1].isUpdatable() ) {
+					throw new AnnotationException(
+							"Mixing updatable and non updatable columns in a property is not allowed: " + propertyName
+					);
+				}
+				if ( ! columns[currentIndex].getTable().equals( columns[currentIndex - 1].getTable() ) ) {
+					throw new AnnotationException(
+							"Mixing different tables in a property is not allowed: " + propertyName
+					);
+				}
+			}
+		}
+	}
+
+	public void addIndex(Index index, boolean inSecondPass) {
+		if ( index == null ) return;
+		IndexSecondPass secondPass = new IndexSecondPass( index.name(), this, mappings );
+		if (inSecondPass) {
+			secondPass.doSecondPass( mappings.getClasses() );
+		}
+		else {
+			mappings.addSecondPass(
+					secondPass
+			);
+		}
+	}
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/Ejb3DiscriminatorColumn.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/Ejb3DiscriminatorColumn.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/Ejb3DiscriminatorColumn.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,82 +0,0 @@
-//$Id$
-package org.hibernate.cfg;
-
-import javax.persistence.DiscriminatorColumn;
-import javax.persistence.DiscriminatorType;
-
-import org.hibernate.AssertionFailure;
-import org.hibernate.annotations.DiscriminatorFormula;
-
-/**
- * Discriminator column
- *
- * @author Emmanuel Bernard
- */
-public class Ejb3DiscriminatorColumn extends Ejb3Column {
-
-
-	private static final String DEFAULT_DISCRIMINATOR_COLUMN_NAME = "DTYPE";
-	private static final String DEFAULT_DISCRIMINATOR_TYPE = "string";
-
-	private String discriminatorTypeName;
-	private static final int DEFAULT_DISCRIMINATOR_LENGTH = 31;
-
-	public Ejb3DiscriminatorColumn() {
-		//discriminator default value
-		super();
-		setLogicalColumnName( DEFAULT_DISCRIMINATOR_COLUMN_NAME );
-		setNullable( false );
-		setDiscriminatorTypeName( DEFAULT_DISCRIMINATOR_TYPE );
-		setLength( DEFAULT_DISCRIMINATOR_LENGTH );
-	}
-
-	public String getDiscriminatorTypeName() {
-		return discriminatorTypeName;
-	}
-
-	public void setDiscriminatorTypeName(String discriminatorTypeName) {
-		this.discriminatorTypeName = discriminatorTypeName;
-	}
-
-	public static Ejb3DiscriminatorColumn buildDiscriminatorColumn(
-			DiscriminatorType type, DiscriminatorColumn discAnn, DiscriminatorFormula discFormulaAnn,
-			ExtendedMappings mappings
-	) {
-		Ejb3DiscriminatorColumn discriminatorColumn = new Ejb3DiscriminatorColumn();
-		discriminatorColumn.setMappings( mappings );
-		discriminatorColumn.setImplicit( true );
-		if ( discFormulaAnn != null ) {
-			discriminatorColumn.setImplicit( false );
-			discriminatorColumn.setFormula( discFormulaAnn.value() );
-		}
-		else if ( discAnn != null ) {
-			discriminatorColumn.setImplicit( false );
-			if ( ! BinderHelper.isDefault( discAnn.columnDefinition() ) ) {
-				discriminatorColumn.setSqlType(
-						discAnn.columnDefinition()
-				);
-			}
-			if ( ! BinderHelper.isDefault( discAnn.name() ) ) {
-				discriminatorColumn.setLogicalColumnName( discAnn.name() );
-			}
-			discriminatorColumn.setNullable( false );
-		}
-		if ( DiscriminatorType.CHAR.equals( type ) ) {
-			discriminatorColumn.setDiscriminatorTypeName( "character" );
-			discriminatorColumn.setImplicit( false );
-		}
-		else if ( DiscriminatorType.INTEGER.equals( type ) ) {
-			discriminatorColumn.setDiscriminatorTypeName( "integer" );
-			discriminatorColumn.setImplicit( false );
-		}
-		else if ( DiscriminatorType.STRING.equals( type ) || type == null ) {
-			if ( discAnn != null ) discriminatorColumn.setLength( discAnn.length() );
-			discriminatorColumn.setDiscriminatorTypeName( "string" );
-		}
-		else {
-			throw new AssertionFailure( "Unknown discriminator type: " + type );
-		}
-		discriminatorColumn.bind();
-		return discriminatorColumn;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/Ejb3DiscriminatorColumn.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/Ejb3DiscriminatorColumn.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/Ejb3DiscriminatorColumn.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/Ejb3DiscriminatorColumn.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,82 @@
+//$Id$
+package org.hibernate.cfg;
+
+import javax.persistence.DiscriminatorColumn;
+import javax.persistence.DiscriminatorType;
+
+import org.hibernate.AssertionFailure;
+import org.hibernate.annotations.DiscriminatorFormula;
+
+/**
+ * Discriminator column
+ *
+ * @author Emmanuel Bernard
+ */
+public class Ejb3DiscriminatorColumn extends Ejb3Column {
+
+
+	private static final String DEFAULT_DISCRIMINATOR_COLUMN_NAME = "DTYPE";
+	private static final String DEFAULT_DISCRIMINATOR_TYPE = "string";
+
+	private String discriminatorTypeName;
+	private static final int DEFAULT_DISCRIMINATOR_LENGTH = 31;
+
+	public Ejb3DiscriminatorColumn() {
+		//discriminator default value
+		super();
+		setLogicalColumnName( DEFAULT_DISCRIMINATOR_COLUMN_NAME );
+		setNullable( false );
+		setDiscriminatorTypeName( DEFAULT_DISCRIMINATOR_TYPE );
+		setLength( DEFAULT_DISCRIMINATOR_LENGTH );
+	}
+
+	public String getDiscriminatorTypeName() {
+		return discriminatorTypeName;
+	}
+
+	public void setDiscriminatorTypeName(String discriminatorTypeName) {
+		this.discriminatorTypeName = discriminatorTypeName;
+	}
+
+	public static Ejb3DiscriminatorColumn buildDiscriminatorColumn(
+			DiscriminatorType type, DiscriminatorColumn discAnn, DiscriminatorFormula discFormulaAnn,
+			ExtendedMappings mappings
+	) {
+		Ejb3DiscriminatorColumn discriminatorColumn = new Ejb3DiscriminatorColumn();
+		discriminatorColumn.setMappings( mappings );
+		discriminatorColumn.setImplicit( true );
+		if ( discFormulaAnn != null ) {
+			discriminatorColumn.setImplicit( false );
+			discriminatorColumn.setFormula( discFormulaAnn.value() );
+		}
+		else if ( discAnn != null ) {
+			discriminatorColumn.setImplicit( false );
+			if ( ! BinderHelper.isDefault( discAnn.columnDefinition() ) ) {
+				discriminatorColumn.setSqlType(
+						discAnn.columnDefinition()
+				);
+			}
+			if ( ! BinderHelper.isDefault( discAnn.name() ) ) {
+				discriminatorColumn.setLogicalColumnName( discAnn.name() );
+			}
+			discriminatorColumn.setNullable( false );
+		}
+		if ( DiscriminatorType.CHAR.equals( type ) ) {
+			discriminatorColumn.setDiscriminatorTypeName( "character" );
+			discriminatorColumn.setImplicit( false );
+		}
+		else if ( DiscriminatorType.INTEGER.equals( type ) ) {
+			discriminatorColumn.setDiscriminatorTypeName( "integer" );
+			discriminatorColumn.setImplicit( false );
+		}
+		else if ( DiscriminatorType.STRING.equals( type ) || type == null ) {
+			if ( discAnn != null ) discriminatorColumn.setLength( discAnn.length() );
+			discriminatorColumn.setDiscriminatorTypeName( "string" );
+		}
+		else {
+			throw new AssertionFailure( "Unknown discriminator type: " + type );
+		}
+		discriminatorColumn.bind();
+		return discriminatorColumn;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/Ejb3JoinColumn.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/Ejb3JoinColumn.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/Ejb3JoinColumn.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,510 +0,0 @@
-//$Id$
-package org.hibernate.cfg;
-
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-import javax.persistence.JoinColumn;
-import javax.persistence.PrimaryKeyJoinColumn;
-
-import org.hibernate.AnnotationException;
-import org.hibernate.MappingException;
-import org.hibernate.annotations.common.util.StringHelper;
-import org.hibernate.mapping.Column;
-import org.hibernate.mapping.Join;
-import org.hibernate.mapping.PersistentClass;
-import org.hibernate.mapping.SimpleValue;
-import org.hibernate.mapping.Table;
-import org.hibernate.mapping.Value;
-
-/**
- * Wrap state of an EJB3 @JoinColumn annotation
- * and build the Hibernate column mapping element
- *
- * @author Emmanuel Bernard
- */
-public class Ejb3JoinColumn extends Ejb3Column {
-	/**
-	 * property name repated to this column
-	 */
-	private String referencedColumn;
-	private String mappedBy;
-	//property name on the mapped by side if any
-	private String mappedByPropertyName;
-	//table name on the mapped by side if any
-	private String mappedByTableName;
-	private String mappedByEntityName;
-
-	//FIXME hacky solution to get the information at proeprty ref resolution
-	public String getManyToManyOwnerSideEntityName() {
-		return manyToManyOwnerSideEntityName;
-	}
-
-	public void setManyToManyOwnerSideEntityName(String manyToManyOwnerSideEntityName) {
-		this.manyToManyOwnerSideEntityName = manyToManyOwnerSideEntityName;
-	}
-
-	private String manyToManyOwnerSideEntityName;
-
-	public void setReferencedColumn(String referencedColumn) {
-		this.referencedColumn = referencedColumn;
-	}
-
-	public String getMappedBy() {
-		return mappedBy;
-	}
-
-	public void setMappedBy(String mappedBy) {
-		this.mappedBy = mappedBy;
-	}
-
-	//Due to @AnnotationOverride overriding rules, I don't want the constructor to be public
-	private Ejb3JoinColumn() {
-		setMappedBy( BinderHelper.ANNOTATION_STRING_DEFAULT );
-	}
-
-	//Due to @AnnotationOverride overriding rules, I don't want the constructor to be public
-	//TODO get rid of it and use setters
-	private Ejb3JoinColumn(
-			String sqlType,
-			String name,
-			boolean nullable,
-			boolean unique,
-			boolean insertable,
-			boolean updatable,
-			String referencedColumn,
-			String secondaryTable,
-			Map<String, Join> joins,
-			PropertyHolder propertyHolder,
-			String propertyName,
-			String mappedBy,
-			boolean isImplicit,
-			ExtendedMappings mappings
-	) {
-		super();
-		setImplicit( isImplicit );
-		setSqlType( sqlType );
-		setLogicalColumnName( name );
-		setNullable( nullable );
-		setUnique( unique );
-		setInsertable( insertable );
-		setUpdatable( updatable );
-		setSecondaryTableName( secondaryTable );
-		setPropertyHolder( propertyHolder );
-		setJoins( joins );
-		setMappings( mappings );
-		setPropertyName( BinderHelper.getRelativePath( propertyHolder, propertyName ) );
-		bind();
-		this.referencedColumn = referencedColumn;
-		this.mappedBy = mappedBy;
-	}
-
-	public String getReferencedColumn() {
-		return referencedColumn;
-	}
-
-	public static Ejb3JoinColumn[] buildJoinColumns(
-			JoinColumn[] anns,
-			String mappedBy, Map<String, Join> joins,
-			PropertyHolder propertyHolder,
-			String propertyName,
-			ExtendedMappings mappings
-	) {
-		JoinColumn[] actualColumns = propertyHolder.getOverriddenJoinColumn(
-				StringHelper.qualify( propertyHolder.getPath(), propertyName )
-		);
-		if ( actualColumns == null ) actualColumns = anns;
-		if ( actualColumns == null || actualColumns.length == 0 ) {
-			return new Ejb3JoinColumn[]{
-					buildJoinColumn( (JoinColumn) null, mappedBy, joins, propertyHolder, propertyName, mappings )
-			};
-		}
-		else {
-			int size = actualColumns.length;
-			Ejb3JoinColumn[] result = new Ejb3JoinColumn[ size ];
-			for ( int index = 0; index < size ; index++ ) {
-				result[index] = buildJoinColumn(
-						actualColumns[index],
-						mappedBy,
-						joins,
-						propertyHolder,
-						propertyName,
-						mappings
-				);
-			}
-			return result;
-		}
-	}
-
-	/**
-	 * build join column for SecondaryTables
-	 */
-	private static Ejb3JoinColumn buildJoinColumn(
-			JoinColumn ann,
-			String mappedBy, Map<String, Join> joins,
-			PropertyHolder propertyHolder,
-			String propertyName,
-			ExtendedMappings mappings
-	) {
-		if ( ann != null ) {
-			if ( BinderHelper.isDefault( mappedBy ) ) {
-				throw new AnnotationException(
-						"Illegal attempt to define a @JoinColumn with a mappedBy association: "
-								+ BinderHelper.getRelativePath( propertyHolder, propertyName )
-				);
-			}
-			Ejb3JoinColumn joinColumn = new Ejb3JoinColumn();
-			joinColumn.setJoinAnnotation( ann, null );
-			joinColumn.setJoins( joins );
-			joinColumn.setPropertyHolder( propertyHolder );
-			joinColumn.setPropertyName( BinderHelper.getRelativePath( propertyHolder, propertyName ) );
-			joinColumn.setImplicit( false );
-			joinColumn.setMappings( mappings );
-			joinColumn.bind();
-			return joinColumn;
-		}
-		else {
-			Ejb3JoinColumn joinColumn = new Ejb3JoinColumn();
-			joinColumn.setMappedBy( mappedBy );
-			joinColumn.setJoins( joins );
-			joinColumn.setPropertyHolder( propertyHolder );
-			joinColumn.setPropertyName( BinderHelper.getRelativePath( propertyHolder, propertyName ) );
-			joinColumn.setImplicit( true );
-			joinColumn.setMappings( mappings );
-			joinColumn.bind();
-			return joinColumn;
-		}
-	}
-
-
-	//FIXME default name still useful in association table
-	public void setJoinAnnotation(JoinColumn annJoin, String defaultName) {
-		if ( annJoin == null ) {
-			setImplicit( true );
-		}
-		else {
-			setImplicit( false );
-			if ( ! BinderHelper.isDefault( annJoin.columnDefinition() ) ) setSqlType( annJoin.columnDefinition() );
-			if ( ! BinderHelper.isDefault( annJoin.name() ) ) setLogicalColumnName( annJoin.name() );
-			setNullable( annJoin.nullable() );
-			setUnique( annJoin.unique() );
-			setInsertable( annJoin.insertable() );
-			setUpdatable( annJoin.updatable() );
-			setReferencedColumn( annJoin.referencedColumnName() );
-			setSecondaryTableName( annJoin.table() );
-		}
-	}
-
-	/**
-	 * Build JoinColumn for a JOINED hierarchy
-	 */
-	public static Ejb3JoinColumn buildJoinColumn(
-			PrimaryKeyJoinColumn pkJoinAnn,
-			JoinColumn joinAnn,
-			Value identifier,
-			Map<String, Join> joins,
-			PropertyHolder propertyHolder, ExtendedMappings mappings
-	) {
-
-		Column col = (Column) identifier.getColumnIterator().next();
-		String defaultName = mappings.getLogicalColumnName( col.getName(), identifier.getTable() );
-		if ( pkJoinAnn != null || joinAnn != null ) {
-			String colName;
-			String columnDefinition;
-			String referencedColumnName;
-			if ( pkJoinAnn != null ) {
-				colName = pkJoinAnn.name();
-				columnDefinition = pkJoinAnn.columnDefinition();
-				referencedColumnName = pkJoinAnn.referencedColumnName();
-			}
-			else {
-				colName = joinAnn.name();
-				columnDefinition = joinAnn.columnDefinition();
-				referencedColumnName = joinAnn.referencedColumnName();
-			}
-			String sqlType = "".equals( columnDefinition ) ? null : columnDefinition;
-			String name = "".equals( colName ) ? defaultName : colName;
-			return new Ejb3JoinColumn(
-					sqlType,
-					name, false, false,
-					true, true,
-					referencedColumnName,
-					null, joins,
-					propertyHolder, null, null, false, mappings
-			);
-		}
-		else {
-			return new Ejb3JoinColumn(
-					(String) null, defaultName,
-					false, false, true, true, null, (String) null,
-					joins, propertyHolder, null, null, true, mappings
-			);
-		}
-	}
-
-	/**
-	 * Override persistent class on oneToMany Cases for late settings
-	 * Must only be used on second level pass binding
-	 */
-	public void setPersistentClass(PersistentClass persistentClass, Map<String, Join> joins) {
-		//FIXME shouldn't we deduce the classname from the persistentclasS?
-		this.propertyHolder = PropertyHolderBuilder.buildPropertyHolder( persistentClass, joins, getMappings() );
-	}
-
-	public static void checkIfJoinColumn(Object columns, PropertyHolder holder, PropertyData property) {
-		if ( ! ( columns instanceof Ejb3JoinColumn[] ) ) {
-			throw new AnnotationException(
-					"@Column cannot be used on an association property: "
-							+ holder.getEntityName()
-							+ "."
-							+ property.getPropertyName()
-			);
-		}
-	}
-
-	public void linkValueUsingDefaultColumnNaming(
-			Column referencedColumn, PersistentClass referencedEntity, SimpleValue value
-	) {
-		String columnName;
-		String logicalReferencedColumn = getMappings().getLogicalColumnName(
-				referencedColumn.getName(), referencedEntity.getTable()
-		);
-		boolean mappedBySide = mappedByTableName != null || mappedByPropertyName != null;
-		boolean ownerSide = getPropertyName() != null;
-
-		Boolean isRefColumnQuoted = StringHelper.isQuoted( logicalReferencedColumn );
-		String unquotedLogicalReferenceColumn = isRefColumnQuoted ?
-				StringHelper.unquote( logicalReferencedColumn ) :
-				logicalReferencedColumn;
-
-		if ( mappedBySide ) {
-			String unquotedMappedbyTable = StringHelper.unquote( mappedByTableName );
-			columnName = getMappings().getNamingStrategy().foreignKeyColumnName(
-					mappedByPropertyName,
-					mappedByEntityName,
-					unquotedMappedbyTable,
-					unquotedLogicalReferenceColumn
-			);
-			//one element was quoted so we quote
-			if ( isRefColumnQuoted || StringHelper.isQuoted( mappedByTableName ) ) {
-				columnName = StringHelper.quote( columnName );
-			}
-		}
-		else if ( ownerSide ) {
-			String logicalTableName = getMappings().getLogicalTableName( referencedEntity.getTable() );
-			String unquotedLogicalTableName = StringHelper.unquote( logicalTableName );
-			columnName = getMappings().getNamingStrategy().foreignKeyColumnName(
-					getPropertyName(),
-					referencedEntity.getEntityName(),
-					unquotedLogicalTableName,
-					unquotedLogicalReferenceColumn
-			);
-			//one element was quoted so we quote
-			if ( isRefColumnQuoted || StringHelper.isQuoted( logicalTableName ) ) {
-				columnName = StringHelper.quote( columnName );
-			}
-		}
-		else {
-			//is an intra-entity hierarchy table join so copy the name by default
-			String logicalTableName = getMappings().getLogicalTableName( referencedEntity.getTable() );
-			String unquotedLogicalTableName = StringHelper.unquote( logicalTableName );
-			columnName = getMappings().getNamingStrategy().joinKeyColumnName(
-					unquotedLogicalReferenceColumn,
-					unquotedLogicalTableName
-			);
-			//one element was quoted so we quote
-			if ( isRefColumnQuoted || StringHelper.isQuoted( logicalTableName ) ) {
-				columnName = StringHelper.quote( columnName );
-			}
-		}
-		//yuk side effect on an implicit column
-		setLogicalColumnName( columnName );
-		setReferencedColumn( logicalReferencedColumn );
-		initMappingColumn(
-				columnName,
-				null, referencedColumn.getLength(),
-				referencedColumn.getPrecision(),
-				referencedColumn.getScale(),
-				getMappingColumn().isNullable(),
-				referencedColumn.getSqlType(),
-				getMappingColumn().isUnique(), false
-		);
-		linkWithValue( value );
-	}
-
-	/**
-	 * used for mappedBy cases
-	 */
-	public void linkValueUsingAColumnCopy(Column column, SimpleValue value) {
-		initMappingColumn(
-				//column.getName(),
-				column.getQuotedName(),
-				null, column.getLength(),
-				column.getPrecision(),
-				column.getScale(),
-				getMappingColumn().isNullable(),
-				column.getSqlType(),
-				getMappingColumn().isUnique(),
-				false //We do copy no strategy here
-		);
-		linkWithValue( value );
-	}
-
-	protected void addColumnBinding(SimpleValue value) {
-		if ( StringHelper.isEmpty( mappedBy ) ) {
-			String unquotedLogColName = StringHelper.unquote( getLogicalColumnName() );
-			String unquotedRefColumn = StringHelper.unquote( getReferencedColumn() );
-			String logicalColumnName = getMappings().getNamingStrategy()
-					.logicalCollectionColumnName( unquotedLogColName, getPropertyName(), unquotedRefColumn );
-			if ( StringHelper.isQuoted( getLogicalColumnName() ) || StringHelper.isQuoted( getLogicalColumnName() ) ) {
-				logicalColumnName = StringHelper.quote( logicalColumnName );
-			}
-			getMappings().addColumnBinding( logicalColumnName, getMappingColumn(), value.getTable() );
-		}
-	}
-
-	//keep it JDK 1.4 compliant
-	//implicit way
-	public static final int NO_REFERENCE = 0;
-	//reference to the pk in an explicit order
-	public static final int PK_REFERENCE = 1;
-	//reference to non pk columns
-	public static final int NON_PK_REFERENCE = 2;
-
-	public static int checkReferencedColumnsType(
-			Ejb3JoinColumn[] columns, PersistentClass referencedEntity,
-			ExtendedMappings mappings
-	) {
-		//convenient container to find whether a column is an id one or not
-		Set<Column> idColumns = new HashSet<Column>();
-		Iterator idColumnsIt = referencedEntity.getKey().getColumnIterator();
-		while ( idColumnsIt.hasNext() ) {
-			idColumns.add( (Column) idColumnsIt.next() );
-		}
-
-		boolean isFkReferencedColumnName = false;
-		boolean noReferencedColumn = true;
-		//build the list of potential tables
-		if ( columns.length == 0 ) return NO_REFERENCE; //shortcut
-		Object columnOwner = BinderHelper.findColumnOwner(
-				referencedEntity, columns[0].getReferencedColumn(), mappings
-		);
-		if ( columnOwner == null ) {
-			throw new MappingException(
-					"Unable to find column with logical name: "
-							+ columns[0].getReferencedColumn() + " in " + referencedEntity.getTable() + " and its related "
-							+ "supertables and secondary tables"
-			);
-		}
-		Table matchingTable = columnOwner instanceof PersistentClass ?
-				( (PersistentClass) columnOwner ).getTable() :
-				( (Join) columnOwner ).getTable();
-		//check each referenced column
-		for ( Ejb3JoinColumn ejb3Column : columns ) {
-			String logicalReferencedColumnName = ejb3Column.getReferencedColumn();
-			if ( StringHelper.isNotEmpty( logicalReferencedColumnName ) ) {
-				String referencedColumnName = null;
-				try {
-					referencedColumnName = mappings.getPhysicalColumnName( logicalReferencedColumnName, matchingTable );
-				}
-				catch (MappingException me) {
-					//rewrite the exception
-					throw new MappingException(
-							"Unable to find column with logical name: "
-									+ logicalReferencedColumnName + " in " + matchingTable.getName()
-					);
-				}
-				noReferencedColumn = false;
-				Column refCol = new Column( referencedColumnName );
-				boolean contains = idColumns.contains( refCol );
-				if ( ! contains ) {
-					isFkReferencedColumnName = true;
-					break; //we know the state
-				}
-			}
-		}
-		if ( isFkReferencedColumnName ) {
-			return NON_PK_REFERENCE;
-		}
-		else if ( noReferencedColumn ) {
-			return NO_REFERENCE;
-		}
-		else if ( idColumns.size() != columns.length ) {
-			//reference use PK but is a subset or a superset
-			return NON_PK_REFERENCE;
-		} else {
-			return PK_REFERENCE;
-		}
-	}
-
-	public void overrideSqlTypeIfNecessary(org.hibernate.mapping.Column column) {
-		if ( StringHelper.isEmpty( sqlType ) ) {
-			sqlType = column.getSqlType();
-			if ( getMappingColumn() != null ) getMappingColumn().setSqlType( sqlType );
-		}
-	}
-
-	@Override
-	public void redefineColumnName(String columnName, String propertyName, boolean applyNamingStrategy) {
-		if ( StringHelper.isNotEmpty( columnName ) ) {
-			getMappingColumn().setName(
-					applyNamingStrategy ?
-							getMappings().getNamingStrategy().columnName( columnName ) :
-							columnName
-			);
-		}
-	}
-
-	public static Ejb3JoinColumn[] buildJoinTableJoinColumns(
-			JoinColumn[] annJoins, Map<String, Join> secondaryTables,
-			PropertyHolder propertyHolder, String propertyName, String mappedBy, ExtendedMappings mappings
-	) {
-		Ejb3JoinColumn[] joinColumns;
-		if ( annJoins == null ) {
-			Ejb3JoinColumn currentJoinColumn = new Ejb3JoinColumn();
-			currentJoinColumn.setImplicit( true );
-			currentJoinColumn.setNullable( false ); //I break the spec, but it's for good
-			currentJoinColumn.setPropertyHolder( propertyHolder );
-			currentJoinColumn.setJoins( secondaryTables );
-			currentJoinColumn.setMappings( mappings );
-			currentJoinColumn.setPropertyName(
-					BinderHelper.getRelativePath( propertyHolder, propertyName )
-			);
-			currentJoinColumn.setMappedBy( mappedBy );
-			currentJoinColumn.bind();
-
-			joinColumns = new Ejb3JoinColumn[]{
-					currentJoinColumn
-
-			};
-		}
-		else {
-			joinColumns = new Ejb3JoinColumn[annJoins.length];
-			JoinColumn annJoin;
-			int length = annJoins.length;
-			for ( int index = 0; index < length ; index++ ) {
-				annJoin = annJoins[index];
-				Ejb3JoinColumn currentJoinColumn = new Ejb3JoinColumn();
-				currentJoinColumn.setImplicit( true );
-				currentJoinColumn.setPropertyHolder( propertyHolder );
-				currentJoinColumn.setJoins( secondaryTables );
-				currentJoinColumn.setMappings( mappings );
-				currentJoinColumn.setPropertyName( BinderHelper.getRelativePath( propertyHolder, propertyName ) );
-				currentJoinColumn.setMappedBy( mappedBy );
-				currentJoinColumn.setJoinAnnotation( annJoin, propertyName );
-				currentJoinColumn.setNullable( false ); //I break the spec, but it's for good
-				//done after the annotation to override it
-				currentJoinColumn.bind();
-				joinColumns[index] = currentJoinColumn;
-			}
-		}
-		return joinColumns;
-	}
-
-	public void setMappedBy(String entityName, String logicalTableName, String mappedByProperty) {
-		this.mappedByEntityName = entityName;
-		this.mappedByTableName = logicalTableName;
-		this.mappedByPropertyName = mappedByProperty;
-	}
-}
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/Ejb3JoinColumn.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/Ejb3JoinColumn.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/Ejb3JoinColumn.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/Ejb3JoinColumn.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,510 @@
+//$Id$
+package org.hibernate.cfg;
+
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+import javax.persistence.JoinColumn;
+import javax.persistence.PrimaryKeyJoinColumn;
+
+import org.hibernate.AnnotationException;
+import org.hibernate.MappingException;
+import org.hibernate.annotations.common.util.StringHelper;
+import org.hibernate.mapping.Column;
+import org.hibernate.mapping.Join;
+import org.hibernate.mapping.PersistentClass;
+import org.hibernate.mapping.SimpleValue;
+import org.hibernate.mapping.Table;
+import org.hibernate.mapping.Value;
+
+/**
+ * Wrap state of an EJB3 @JoinColumn annotation
+ * and build the Hibernate column mapping element
+ *
+ * @author Emmanuel Bernard
+ */
+public class Ejb3JoinColumn extends Ejb3Column {
+	/**
+	 * property name repated to this column
+	 */
+	private String referencedColumn;
+	private String mappedBy;
+	//property name on the mapped by side if any
+	private String mappedByPropertyName;
+	//table name on the mapped by side if any
+	private String mappedByTableName;
+	private String mappedByEntityName;
+
+	//FIXME hacky solution to get the information at proeprty ref resolution
+	public String getManyToManyOwnerSideEntityName() {
+		return manyToManyOwnerSideEntityName;
+	}
+
+	public void setManyToManyOwnerSideEntityName(String manyToManyOwnerSideEntityName) {
+		this.manyToManyOwnerSideEntityName = manyToManyOwnerSideEntityName;
+	}
+
+	private String manyToManyOwnerSideEntityName;
+
+	public void setReferencedColumn(String referencedColumn) {
+		this.referencedColumn = referencedColumn;
+	}
+
+	public String getMappedBy() {
+		return mappedBy;
+	}
+
+	public void setMappedBy(String mappedBy) {
+		this.mappedBy = mappedBy;
+	}
+
+	//Due to @AnnotationOverride overriding rules, I don't want the constructor to be public
+	private Ejb3JoinColumn() {
+		setMappedBy( BinderHelper.ANNOTATION_STRING_DEFAULT );
+	}
+
+	//Due to @AnnotationOverride overriding rules, I don't want the constructor to be public
+	//TODO get rid of it and use setters
+	private Ejb3JoinColumn(
+			String sqlType,
+			String name,
+			boolean nullable,
+			boolean unique,
+			boolean insertable,
+			boolean updatable,
+			String referencedColumn,
+			String secondaryTable,
+			Map<String, Join> joins,
+			PropertyHolder propertyHolder,
+			String propertyName,
+			String mappedBy,
+			boolean isImplicit,
+			ExtendedMappings mappings
+	) {
+		super();
+		setImplicit( isImplicit );
+		setSqlType( sqlType );
+		setLogicalColumnName( name );
+		setNullable( nullable );
+		setUnique( unique );
+		setInsertable( insertable );
+		setUpdatable( updatable );
+		setSecondaryTableName( secondaryTable );
+		setPropertyHolder( propertyHolder );
+		setJoins( joins );
+		setMappings( mappings );
+		setPropertyName( BinderHelper.getRelativePath( propertyHolder, propertyName ) );
+		bind();
+		this.referencedColumn = referencedColumn;
+		this.mappedBy = mappedBy;
+	}
+
+	public String getReferencedColumn() {
+		return referencedColumn;
+	}
+
+	public static Ejb3JoinColumn[] buildJoinColumns(
+			JoinColumn[] anns,
+			String mappedBy, Map<String, Join> joins,
+			PropertyHolder propertyHolder,
+			String propertyName,
+			ExtendedMappings mappings
+	) {
+		JoinColumn[] actualColumns = propertyHolder.getOverriddenJoinColumn(
+				StringHelper.qualify( propertyHolder.getPath(), propertyName )
+		);
+		if ( actualColumns == null ) actualColumns = anns;
+		if ( actualColumns == null || actualColumns.length == 0 ) {
+			return new Ejb3JoinColumn[]{
+					buildJoinColumn( (JoinColumn) null, mappedBy, joins, propertyHolder, propertyName, mappings )
+			};
+		}
+		else {
+			int size = actualColumns.length;
+			Ejb3JoinColumn[] result = new Ejb3JoinColumn[ size ];
+			for ( int index = 0; index < size ; index++ ) {
+				result[index] = buildJoinColumn(
+						actualColumns[index],
+						mappedBy,
+						joins,
+						propertyHolder,
+						propertyName,
+						mappings
+				);
+			}
+			return result;
+		}
+	}
+
+	/**
+	 * build join column for SecondaryTables
+	 */
+	private static Ejb3JoinColumn buildJoinColumn(
+			JoinColumn ann,
+			String mappedBy, Map<String, Join> joins,
+			PropertyHolder propertyHolder,
+			String propertyName,
+			ExtendedMappings mappings
+	) {
+		if ( ann != null ) {
+			if ( BinderHelper.isDefault( mappedBy ) ) {
+				throw new AnnotationException(
+						"Illegal attempt to define a @JoinColumn with a mappedBy association: "
+								+ BinderHelper.getRelativePath( propertyHolder, propertyName )
+				);
+			}
+			Ejb3JoinColumn joinColumn = new Ejb3JoinColumn();
+			joinColumn.setJoinAnnotation( ann, null );
+			joinColumn.setJoins( joins );
+			joinColumn.setPropertyHolder( propertyHolder );
+			joinColumn.setPropertyName( BinderHelper.getRelativePath( propertyHolder, propertyName ) );
+			joinColumn.setImplicit( false );
+			joinColumn.setMappings( mappings );
+			joinColumn.bind();
+			return joinColumn;
+		}
+		else {
+			Ejb3JoinColumn joinColumn = new Ejb3JoinColumn();
+			joinColumn.setMappedBy( mappedBy );
+			joinColumn.setJoins( joins );
+			joinColumn.setPropertyHolder( propertyHolder );
+			joinColumn.setPropertyName( BinderHelper.getRelativePath( propertyHolder, propertyName ) );
+			joinColumn.setImplicit( true );
+			joinColumn.setMappings( mappings );
+			joinColumn.bind();
+			return joinColumn;
+		}
+	}
+
+
+	//FIXME default name still useful in association table
+	public void setJoinAnnotation(JoinColumn annJoin, String defaultName) {
+		if ( annJoin == null ) {
+			setImplicit( true );
+		}
+		else {
+			setImplicit( false );
+			if ( ! BinderHelper.isDefault( annJoin.columnDefinition() ) ) setSqlType( annJoin.columnDefinition() );
+			if ( ! BinderHelper.isDefault( annJoin.name() ) ) setLogicalColumnName( annJoin.name() );
+			setNullable( annJoin.nullable() );
+			setUnique( annJoin.unique() );
+			setInsertable( annJoin.insertable() );
+			setUpdatable( annJoin.updatable() );
+			setReferencedColumn( annJoin.referencedColumnName() );
+			setSecondaryTableName( annJoin.table() );
+		}
+	}
+
+	/**
+	 * Build JoinColumn for a JOINED hierarchy
+	 */
+	public static Ejb3JoinColumn buildJoinColumn(
+			PrimaryKeyJoinColumn pkJoinAnn,
+			JoinColumn joinAnn,
+			Value identifier,
+			Map<String, Join> joins,
+			PropertyHolder propertyHolder, ExtendedMappings mappings
+	) {
+
+		Column col = (Column) identifier.getColumnIterator().next();
+		String defaultName = mappings.getLogicalColumnName( col.getName(), identifier.getTable() );
+		if ( pkJoinAnn != null || joinAnn != null ) {
+			String colName;
+			String columnDefinition;
+			String referencedColumnName;
+			if ( pkJoinAnn != null ) {
+				colName = pkJoinAnn.name();
+				columnDefinition = pkJoinAnn.columnDefinition();
+				referencedColumnName = pkJoinAnn.referencedColumnName();
+			}
+			else {
+				colName = joinAnn.name();
+				columnDefinition = joinAnn.columnDefinition();
+				referencedColumnName = joinAnn.referencedColumnName();
+			}
+			String sqlType = "".equals( columnDefinition ) ? null : columnDefinition;
+			String name = "".equals( colName ) ? defaultName : colName;
+			return new Ejb3JoinColumn(
+					sqlType,
+					name, false, false,
+					true, true,
+					referencedColumnName,
+					null, joins,
+					propertyHolder, null, null, false, mappings
+			);
+		}
+		else {
+			return new Ejb3JoinColumn(
+					(String) null, defaultName,
+					false, false, true, true, null, (String) null,
+					joins, propertyHolder, null, null, true, mappings
+			);
+		}
+	}
+
+	/**
+	 * Override persistent class on oneToMany Cases for late settings
+	 * Must only be used on second level pass binding
+	 */
+	public void setPersistentClass(PersistentClass persistentClass, Map<String, Join> joins) {
+		//FIXME shouldn't we deduce the classname from the persistentclasS?
+		this.propertyHolder = PropertyHolderBuilder.buildPropertyHolder( persistentClass, joins, getMappings() );
+	}
+
+	public static void checkIfJoinColumn(Object columns, PropertyHolder holder, PropertyData property) {
+		if ( ! ( columns instanceof Ejb3JoinColumn[] ) ) {
+			throw new AnnotationException(
+					"@Column cannot be used on an association property: "
+							+ holder.getEntityName()
+							+ "."
+							+ property.getPropertyName()
+			);
+		}
+	}
+
+	public void linkValueUsingDefaultColumnNaming(
+			Column referencedColumn, PersistentClass referencedEntity, SimpleValue value
+	) {
+		String columnName;
+		String logicalReferencedColumn = getMappings().getLogicalColumnName(
+				referencedColumn.getName(), referencedEntity.getTable()
+		);
+		boolean mappedBySide = mappedByTableName != null || mappedByPropertyName != null;
+		boolean ownerSide = getPropertyName() != null;
+
+		Boolean isRefColumnQuoted = StringHelper.isQuoted( logicalReferencedColumn );
+		String unquotedLogicalReferenceColumn = isRefColumnQuoted ?
+				StringHelper.unquote( logicalReferencedColumn ) :
+				logicalReferencedColumn;
+
+		if ( mappedBySide ) {
+			String unquotedMappedbyTable = StringHelper.unquote( mappedByTableName );
+			columnName = getMappings().getNamingStrategy().foreignKeyColumnName(
+					mappedByPropertyName,
+					mappedByEntityName,
+					unquotedMappedbyTable,
+					unquotedLogicalReferenceColumn
+			);
+			//one element was quoted so we quote
+			if ( isRefColumnQuoted || StringHelper.isQuoted( mappedByTableName ) ) {
+				columnName = StringHelper.quote( columnName );
+			}
+		}
+		else if ( ownerSide ) {
+			String logicalTableName = getMappings().getLogicalTableName( referencedEntity.getTable() );
+			String unquotedLogicalTableName = StringHelper.unquote( logicalTableName );
+			columnName = getMappings().getNamingStrategy().foreignKeyColumnName(
+					getPropertyName(),
+					referencedEntity.getEntityName(),
+					unquotedLogicalTableName,
+					unquotedLogicalReferenceColumn
+			);
+			//one element was quoted so we quote
+			if ( isRefColumnQuoted || StringHelper.isQuoted( logicalTableName ) ) {
+				columnName = StringHelper.quote( columnName );
+			}
+		}
+		else {
+			//is an intra-entity hierarchy table join so copy the name by default
+			String logicalTableName = getMappings().getLogicalTableName( referencedEntity.getTable() );
+			String unquotedLogicalTableName = StringHelper.unquote( logicalTableName );
+			columnName = getMappings().getNamingStrategy().joinKeyColumnName(
+					unquotedLogicalReferenceColumn,
+					unquotedLogicalTableName
+			);
+			//one element was quoted so we quote
+			if ( isRefColumnQuoted || StringHelper.isQuoted( logicalTableName ) ) {
+				columnName = StringHelper.quote( columnName );
+			}
+		}
+		//yuk side effect on an implicit column
+		setLogicalColumnName( columnName );
+		setReferencedColumn( logicalReferencedColumn );
+		initMappingColumn(
+				columnName,
+				null, referencedColumn.getLength(),
+				referencedColumn.getPrecision(),
+				referencedColumn.getScale(),
+				getMappingColumn().isNullable(),
+				referencedColumn.getSqlType(),
+				getMappingColumn().isUnique(), false
+		);
+		linkWithValue( value );
+	}
+
+	/**
+	 * used for mappedBy cases
+	 */
+	public void linkValueUsingAColumnCopy(Column column, SimpleValue value) {
+		initMappingColumn(
+				//column.getName(),
+				column.getQuotedName(),
+				null, column.getLength(),
+				column.getPrecision(),
+				column.getScale(),
+				getMappingColumn().isNullable(),
+				column.getSqlType(),
+				getMappingColumn().isUnique(),
+				false //We do copy no strategy here
+		);
+		linkWithValue( value );
+	}
+
+	protected void addColumnBinding(SimpleValue value) {
+		if ( StringHelper.isEmpty( mappedBy ) ) {
+			String unquotedLogColName = StringHelper.unquote( getLogicalColumnName() );
+			String unquotedRefColumn = StringHelper.unquote( getReferencedColumn() );
+			String logicalColumnName = getMappings().getNamingStrategy()
+					.logicalCollectionColumnName( unquotedLogColName, getPropertyName(), unquotedRefColumn );
+			if ( StringHelper.isQuoted( getLogicalColumnName() ) || StringHelper.isQuoted( getLogicalColumnName() ) ) {
+				logicalColumnName = StringHelper.quote( logicalColumnName );
+			}
+			getMappings().addColumnBinding( logicalColumnName, getMappingColumn(), value.getTable() );
+		}
+	}
+
+	//keep it JDK 1.4 compliant
+	//implicit way
+	public static final int NO_REFERENCE = 0;
+	//reference to the pk in an explicit order
+	public static final int PK_REFERENCE = 1;
+	//reference to non pk columns
+	public static final int NON_PK_REFERENCE = 2;
+
+	public static int checkReferencedColumnsType(
+			Ejb3JoinColumn[] columns, PersistentClass referencedEntity,
+			ExtendedMappings mappings
+	) {
+		//convenient container to find whether a column is an id one or not
+		Set<Column> idColumns = new HashSet<Column>();
+		Iterator idColumnsIt = referencedEntity.getKey().getColumnIterator();
+		while ( idColumnsIt.hasNext() ) {
+			idColumns.add( (Column) idColumnsIt.next() );
+		}
+
+		boolean isFkReferencedColumnName = false;
+		boolean noReferencedColumn = true;
+		//build the list of potential tables
+		if ( columns.length == 0 ) return NO_REFERENCE; //shortcut
+		Object columnOwner = BinderHelper.findColumnOwner(
+				referencedEntity, columns[0].getReferencedColumn(), mappings
+		);
+		if ( columnOwner == null ) {
+			throw new MappingException(
+					"Unable to find column with logical name: "
+							+ columns[0].getReferencedColumn() + " in " + referencedEntity.getTable() + " and its related "
+							+ "supertables and secondary tables"
+			);
+		}
+		Table matchingTable = columnOwner instanceof PersistentClass ?
+				( (PersistentClass) columnOwner ).getTable() :
+				( (Join) columnOwner ).getTable();
+		//check each referenced column
+		for ( Ejb3JoinColumn ejb3Column : columns ) {
+			String logicalReferencedColumnName = ejb3Column.getReferencedColumn();
+			if ( StringHelper.isNotEmpty( logicalReferencedColumnName ) ) {
+				String referencedColumnName = null;
+				try {
+					referencedColumnName = mappings.getPhysicalColumnName( logicalReferencedColumnName, matchingTable );
+				}
+				catch (MappingException me) {
+					//rewrite the exception
+					throw new MappingException(
+							"Unable to find column with logical name: "
+									+ logicalReferencedColumnName + " in " + matchingTable.getName()
+					);
+				}
+				noReferencedColumn = false;
+				Column refCol = new Column( referencedColumnName );
+				boolean contains = idColumns.contains( refCol );
+				if ( ! contains ) {
+					isFkReferencedColumnName = true;
+					break; //we know the state
+				}
+			}
+		}
+		if ( isFkReferencedColumnName ) {
+			return NON_PK_REFERENCE;
+		}
+		else if ( noReferencedColumn ) {
+			return NO_REFERENCE;
+		}
+		else if ( idColumns.size() != columns.length ) {
+			//reference use PK but is a subset or a superset
+			return NON_PK_REFERENCE;
+		} else {
+			return PK_REFERENCE;
+		}
+	}
+
+	public void overrideSqlTypeIfNecessary(org.hibernate.mapping.Column column) {
+		if ( StringHelper.isEmpty( sqlType ) ) {
+			sqlType = column.getSqlType();
+			if ( getMappingColumn() != null ) getMappingColumn().setSqlType( sqlType );
+		}
+	}
+
+	@Override
+	public void redefineColumnName(String columnName, String propertyName, boolean applyNamingStrategy) {
+		if ( StringHelper.isNotEmpty( columnName ) ) {
+			getMappingColumn().setName(
+					applyNamingStrategy ?
+							getMappings().getNamingStrategy().columnName( columnName ) :
+							columnName
+			);
+		}
+	}
+
+	public static Ejb3JoinColumn[] buildJoinTableJoinColumns(
+			JoinColumn[] annJoins, Map<String, Join> secondaryTables,
+			PropertyHolder propertyHolder, String propertyName, String mappedBy, ExtendedMappings mappings
+	) {
+		Ejb3JoinColumn[] joinColumns;
+		if ( annJoins == null ) {
+			Ejb3JoinColumn currentJoinColumn = new Ejb3JoinColumn();
+			currentJoinColumn.setImplicit( true );
+			currentJoinColumn.setNullable( false ); //I break the spec, but it's for good
+			currentJoinColumn.setPropertyHolder( propertyHolder );
+			currentJoinColumn.setJoins( secondaryTables );
+			currentJoinColumn.setMappings( mappings );
+			currentJoinColumn.setPropertyName(
+					BinderHelper.getRelativePath( propertyHolder, propertyName )
+			);
+			currentJoinColumn.setMappedBy( mappedBy );
+			currentJoinColumn.bind();
+
+			joinColumns = new Ejb3JoinColumn[]{
+					currentJoinColumn
+
+			};
+		}
+		else {
+			joinColumns = new Ejb3JoinColumn[annJoins.length];
+			JoinColumn annJoin;
+			int length = annJoins.length;
+			for ( int index = 0; index < length ; index++ ) {
+				annJoin = annJoins[index];
+				Ejb3JoinColumn currentJoinColumn = new Ejb3JoinColumn();
+				currentJoinColumn.setImplicit( true );
+				currentJoinColumn.setPropertyHolder( propertyHolder );
+				currentJoinColumn.setJoins( secondaryTables );
+				currentJoinColumn.setMappings( mappings );
+				currentJoinColumn.setPropertyName( BinderHelper.getRelativePath( propertyHolder, propertyName ) );
+				currentJoinColumn.setMappedBy( mappedBy );
+				currentJoinColumn.setJoinAnnotation( annJoin, propertyName );
+				currentJoinColumn.setNullable( false ); //I break the spec, but it's for good
+				//done after the annotation to override it
+				currentJoinColumn.bind();
+				joinColumns[index] = currentJoinColumn;
+			}
+		}
+		return joinColumns;
+	}
+
+	public void setMappedBy(String entityName, String logicalTableName, String mappedByProperty) {
+		this.mappedByEntityName = entityName;
+		this.mappedByTableName = logicalTableName;
+		this.mappedByPropertyName = mappedByProperty;
+	}
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/ExtendedMappings.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/ExtendedMappings.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/ExtendedMappings.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,266 +0,0 @@
-//$Id$
-package org.hibernate.cfg;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-import javax.persistence.Embeddable;
-import javax.persistence.Entity;
-import javax.persistence.MappedSuperclass;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.hibernate.MappingException;
-import org.hibernate.engine.NamedQueryDefinition;
-import org.hibernate.engine.NamedSQLQueryDefinition;
-import org.hibernate.engine.ResultSetMappingDefinition;
-import org.hibernate.mapping.IdGenerator;
-import org.hibernate.mapping.Join;
-import org.hibernate.mapping.PersistentClass;
-import org.hibernate.mapping.Table;
-import org.hibernate.annotations.common.reflection.ReflectionManager;
-import org.hibernate.annotations.common.reflection.XClass;
-
-/**
- * Allow annotation related mappings
- * <p/>
- * at least for named generators
- *
- * @author Emmanuel Bernard
- */
-public class ExtendedMappings extends Mappings {
-
-	private static final Log log = LogFactory.getLog( ExtendedMappings.class );
-
-	private final Map<String, IdGenerator> namedGenerators;
-	private final Map<String, Map<String, Join>> joins;
-	private final Map<String, AnnotatedClassType> classTypes;
-	private final Map<String, Properties> generatorTables;
-	private final Map<Table, List<String[]>> tableUniqueConstraints;
-	private final Map<String, String> mappedByResolver;
-	private final Map<String, String> propertyRefResolver;
-	private final ReflectionManager reflectionManager;
-	private final Set<String> defaultNamedQueryNames;
-	private final Set<String> defaultNamedNativeQueryNames;
-	private final Set<String> defaultSqlResulSetMappingNames;
-	private final Set<String> defaultNamedGenerators;
-
-	ExtendedMappings(
-			Map classes, Map collections, Map tables, Map queries, Map sqlqueries, Map sqlResultSetMappings,
-			Set<String> defaultNamedQueryNames, Set<String> defaultNamedNativeQueryNames,
-			Set<String> defaultSqlResulSetMappingNames, Set<String> defaultNamedGenerators,	Map imports,
-			List secondPasses, List propertyReferences, NamingStrategy namingStrategy, Map typeDefs,
-			Map filterDefinitions, Map namedGenerators, Map<String, Map<String, Join>> joins, Map<String,
-			AnnotatedClassType> classTypes, Map extendsQueue, Map<String, TableDescription> tableNameBinding,
-											Map<Table, ColumnNames> columnNameBindingPerTable,
-											final List auxiliaryDatabaseObjects,
-											Map<String, Properties> generatorTables,
-											Map<Table, List<String[]>> tableUniqueConstraints,
-											Map<String, String> mappedByResolver,
-											Map<String, String> propertyRefResolver,
-											ReflectionManager reflectionManager
-	) {
-		super(
-				classes,
-				collections,
-				tables,
-				queries,
-				sqlqueries,
-				sqlResultSetMappings,
-				imports,
-				secondPasses,
-				propertyReferences,
-				namingStrategy,
-				typeDefs,
-				filterDefinitions,
-				extendsQueue,
-				auxiliaryDatabaseObjects,
-				tableNameBinding,
-				columnNameBindingPerTable
-		);
-		this.namedGenerators = namedGenerators;
-		this.joins = joins;
-		this.classTypes = classTypes;
-		this.generatorTables = generatorTables;
-		this.tableUniqueConstraints = tableUniqueConstraints;
-		this.mappedByResolver = mappedByResolver;
-		this.propertyRefResolver = propertyRefResolver;
-		this.reflectionManager = reflectionManager;
-		this.defaultNamedQueryNames = defaultNamedQueryNames;
-		this.defaultNamedNativeQueryNames = defaultNamedNativeQueryNames;
-		this.defaultSqlResulSetMappingNames = defaultSqlResulSetMappingNames;
-		this.defaultNamedGenerators = defaultNamedGenerators;
-	}
-
-	public void addGenerator(IdGenerator generator) throws MappingException {
-		if ( ! defaultNamedGenerators.contains( generator.getName() ) ) {
-			Object old = namedGenerators.put( generator.getName(), generator );
-			if ( old != null ) log.warn( "duplicate generator name: " + generator.getName() );
-		}
-	}
-
-	public void addJoins(PersistentClass persistentClass, Map<String, Join> joins) throws MappingException {
-		Object old = this.joins.put( persistentClass.getEntityName(), joins );
-		if ( old != null ) log.warn( "duplicate joins for class: " + persistentClass.getEntityName() );
-	}
-
-	public AnnotatedClassType addClassType(XClass clazz) {
-		AnnotatedClassType type;
-		if ( clazz.isAnnotationPresent( Entity.class ) ) {
-			type = AnnotatedClassType.ENTITY;
-		}
-		else if ( clazz.isAnnotationPresent( Embeddable.class ) ) {
-			type = AnnotatedClassType.EMBEDDABLE;
-		}
-		else if ( clazz.isAnnotationPresent( MappedSuperclass.class ) ) {
-			type = AnnotatedClassType.EMBEDDABLE_SUPERCLASS;
-		}
-		else {
-			type = AnnotatedClassType.NONE;
-		}
-		classTypes.put( clazz.getName(), type );
-		return type;
-	}
-
-	/**
-	 * get and maintain a cache of class type.
-	 * A class can be an entity, a embedded objet or nothing.
-	 */
-	public AnnotatedClassType getClassType(XClass clazz) {
-		AnnotatedClassType type = classTypes.get( clazz.getName() );
-		if ( type == null ) {
-			return addClassType( clazz );
-		}
-		else {
-			return type;
-		}
-	}
-
-	public IdGenerator getGenerator(String name) {
-		return getGenerator( name, null );
-	}
-
-	public Map<String, Join> getJoins(String persistentClass) {
-		return joins.get( persistentClass );
-	}
-
-	/**
-	 * Try to find the generator from the localGenerators
-	 * and then from the global generator list
-	 *
-	 * @param name			generator name
-	 * @param localGenerators local generators to find to
-	 * @return the appropriate idgenerator or null if not found
-	 */
-	public IdGenerator getGenerator(String name, Map<String, IdGenerator> localGenerators) {
-		if ( localGenerators != null ) {
-			IdGenerator result = localGenerators.get( name );
-			if ( result != null ) return result;
-		}
-		return namedGenerators.get( name );
-	}
-
-	public void addGeneratorTable(String name, Properties params) {
-		Object old = generatorTables.put( name, params );
-		if ( old != null ) log.warn( "duplicate generator table: " + name );
-	}
-
-	public Properties getGeneratorTableProperties(String name, Map<String, Properties> localGeneratorTables) {
-		if ( localGeneratorTables != null ) {
-			Properties result = localGeneratorTables.get( name );
-			if ( result != null ) return result;
-		}
-		return generatorTables.get( name );
-	}
-
-	public void addUniqueConstraints(Table table, List uniqueConstraints) {
-		List oldConstraints = tableUniqueConstraints.get( table );
-		if ( oldConstraints == null ) {
-			oldConstraints = new ArrayList();
-			tableUniqueConstraints.put( table, oldConstraints );
-		}
-		oldConstraints.addAll( uniqueConstraints );
-	}
-
-	public Map<Table, List<String[]>> getTableUniqueConstraints() {
-		return tableUniqueConstraints;
-	}
-
-	public void addMappedBy(String entityName, String propertyName, String inversePropertyName) {
-		mappedByResolver.put( entityName + "." + propertyName, inversePropertyName );
-	}
-
-	public String getFromMappedBy(String entityName, String propertyName) {
-		return mappedByResolver.get( entityName + "." + propertyName );
-	}
-
-	public void addPropertyReferencedAssociation(String entityName, String propertyName, String propertyRef) {
-		propertyRefResolver.put( entityName + "." + propertyName, propertyRef );
-	}
-
-	public String getPropertyReferencedAssociation(String entityName, String propertyName) {
-		return propertyRefResolver.get( entityName + "." + propertyName );
-	}
-
-	@Override
-	public void addUniquePropertyReference(String referencedClass, String propertyName) {
-		super.addUniquePropertyReference( referencedClass, propertyName );
-	}
-
-	@Override
-	public void addPropertyReference(String referencedClass, String propertyName) {
-		super.addPropertyReference( referencedClass, propertyName );
-	}
-
-	public ReflectionManager getReflectionManager() {
-		return reflectionManager;
-	}
-
-	public void addDefaultQuery(String name, NamedQueryDefinition query) {
-		super.addQuery(name, query);
-		defaultNamedQueryNames.add( name );
-	}
-
-	public void addDefaultSQLQuery(String name, NamedSQLQueryDefinition query) {
-		super.addSQLQuery(name, query);
-		defaultNamedNativeQueryNames.add( name );
-	}
-
-	public void addDefaultGenerator(IdGenerator idGen) {
-		this.addGenerator(idGen);
-		defaultNamedGenerators.add( idGen.getName() );
-
-	}
-
-	public void addDefaultResultSetMapping(ResultSetMappingDefinition definition) {
-		final String name = definition.getName();
-		if ( ! defaultSqlResulSetMappingNames.contains( name )
-				&& super.getResultSetMapping( name ) != null ) {
-			resultSetMappings.remove( name );
-		}
-		super.addResultSetMapping(definition);
-		defaultSqlResulSetMappingNames.add( name );
-	}
-
-	@Override
-	public void addQuery(String name, NamedQueryDefinition query) throws MappingException {
-		if ( ! defaultNamedQueryNames.contains( name ) ) super.addQuery( name, query );
-	}
-
-	@Override
-	public void addResultSetMapping(ResultSetMappingDefinition definition) {
-		if ( ! defaultSqlResulSetMappingNames.contains( definition.getName() ) )
-			super.addResultSetMapping( definition );
-	}
-
-	@Override
-	public void addSQLQuery(String name, NamedSQLQueryDefinition query) throws MappingException {
-		if ( ! defaultNamedNativeQueryNames.contains( name ) ) super.addSQLQuery( name, query );
-	}
-
-	public Map getClasses() {
-		return classes;
-	}
-}
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/ExtendedMappings.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/ExtendedMappings.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/ExtendedMappings.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/ExtendedMappings.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,266 @@
+//$Id$
+package org.hibernate.cfg;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+import javax.persistence.Embeddable;
+import javax.persistence.Entity;
+import javax.persistence.MappedSuperclass;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.hibernate.MappingException;
+import org.hibernate.engine.NamedQueryDefinition;
+import org.hibernate.engine.NamedSQLQueryDefinition;
+import org.hibernate.engine.ResultSetMappingDefinition;
+import org.hibernate.mapping.IdGenerator;
+import org.hibernate.mapping.Join;
+import org.hibernate.mapping.PersistentClass;
+import org.hibernate.mapping.Table;
+import org.hibernate.annotations.common.reflection.ReflectionManager;
+import org.hibernate.annotations.common.reflection.XClass;
+
+/**
+ * Allow annotation related mappings
+ * <p/>
+ * at least for named generators
+ *
+ * @author Emmanuel Bernard
+ */
+public class ExtendedMappings extends Mappings {
+
+	private static final Log log = LogFactory.getLog( ExtendedMappings.class );
+
+	private final Map<String, IdGenerator> namedGenerators;
+	private final Map<String, Map<String, Join>> joins;
+	private final Map<String, AnnotatedClassType> classTypes;
+	private final Map<String, Properties> generatorTables;
+	private final Map<Table, List<String[]>> tableUniqueConstraints;
+	private final Map<String, String> mappedByResolver;
+	private final Map<String, String> propertyRefResolver;
+	private final ReflectionManager reflectionManager;
+	private final Set<String> defaultNamedQueryNames;
+	private final Set<String> defaultNamedNativeQueryNames;
+	private final Set<String> defaultSqlResulSetMappingNames;
+	private final Set<String> defaultNamedGenerators;
+
+	ExtendedMappings(
+			Map classes, Map collections, Map tables, Map queries, Map sqlqueries, Map sqlResultSetMappings,
+			Set<String> defaultNamedQueryNames, Set<String> defaultNamedNativeQueryNames,
+			Set<String> defaultSqlResulSetMappingNames, Set<String> defaultNamedGenerators,	Map imports,
+			List secondPasses, List propertyReferences, NamingStrategy namingStrategy, Map typeDefs,
+			Map filterDefinitions, Map namedGenerators, Map<String, Map<String, Join>> joins, Map<String,
+			AnnotatedClassType> classTypes, Map extendsQueue, Map<String, TableDescription> tableNameBinding,
+											Map<Table, ColumnNames> columnNameBindingPerTable,
+											final List auxiliaryDatabaseObjects,
+											Map<String, Properties> generatorTables,
+											Map<Table, List<String[]>> tableUniqueConstraints,
+											Map<String, String> mappedByResolver,
+											Map<String, String> propertyRefResolver,
+											ReflectionManager reflectionManager
+	) {
+		super(
+				classes,
+				collections,
+				tables,
+				queries,
+				sqlqueries,
+				sqlResultSetMappings,
+				imports,
+				secondPasses,
+				propertyReferences,
+				namingStrategy,
+				typeDefs,
+				filterDefinitions,
+				extendsQueue,
+				auxiliaryDatabaseObjects,
+				tableNameBinding,
+				columnNameBindingPerTable
+		);
+		this.namedGenerators = namedGenerators;
+		this.joins = joins;
+		this.classTypes = classTypes;
+		this.generatorTables = generatorTables;
+		this.tableUniqueConstraints = tableUniqueConstraints;
+		this.mappedByResolver = mappedByResolver;
+		this.propertyRefResolver = propertyRefResolver;
+		this.reflectionManager = reflectionManager;
+		this.defaultNamedQueryNames = defaultNamedQueryNames;
+		this.defaultNamedNativeQueryNames = defaultNamedNativeQueryNames;
+		this.defaultSqlResulSetMappingNames = defaultSqlResulSetMappingNames;
+		this.defaultNamedGenerators = defaultNamedGenerators;
+	}
+
+	public void addGenerator(IdGenerator generator) throws MappingException {
+		if ( ! defaultNamedGenerators.contains( generator.getName() ) ) {
+			Object old = namedGenerators.put( generator.getName(), generator );
+			if ( old != null ) log.warn( "duplicate generator name: " + generator.getName() );
+		}
+	}
+
+	public void addJoins(PersistentClass persistentClass, Map<String, Join> joins) throws MappingException {
+		Object old = this.joins.put( persistentClass.getEntityName(), joins );
+		if ( old != null ) log.warn( "duplicate joins for class: " + persistentClass.getEntityName() );
+	}
+
+	public AnnotatedClassType addClassType(XClass clazz) {
+		AnnotatedClassType type;
+		if ( clazz.isAnnotationPresent( Entity.class ) ) {
+			type = AnnotatedClassType.ENTITY;
+		}
+		else if ( clazz.isAnnotationPresent( Embeddable.class ) ) {
+			type = AnnotatedClassType.EMBEDDABLE;
+		}
+		else if ( clazz.isAnnotationPresent( MappedSuperclass.class ) ) {
+			type = AnnotatedClassType.EMBEDDABLE_SUPERCLASS;
+		}
+		else {
+			type = AnnotatedClassType.NONE;
+		}
+		classTypes.put( clazz.getName(), type );
+		return type;
+	}
+
+	/**
+	 * get and maintain a cache of class type.
+	 * A class can be an entity, a embedded objet or nothing.
+	 */
+	public AnnotatedClassType getClassType(XClass clazz) {
+		AnnotatedClassType type = classTypes.get( clazz.getName() );
+		if ( type == null ) {
+			return addClassType( clazz );
+		}
+		else {
+			return type;
+		}
+	}
+
+	public IdGenerator getGenerator(String name) {
+		return getGenerator( name, null );
+	}
+
+	public Map<String, Join> getJoins(String persistentClass) {
+		return joins.get( persistentClass );
+	}
+
+	/**
+	 * Try to find the generator from the localGenerators
+	 * and then from the global generator list
+	 *
+	 * @param name			generator name
+	 * @param localGenerators local generators to find to
+	 * @return the appropriate idgenerator or null if not found
+	 */
+	public IdGenerator getGenerator(String name, Map<String, IdGenerator> localGenerators) {
+		if ( localGenerators != null ) {
+			IdGenerator result = localGenerators.get( name );
+			if ( result != null ) return result;
+		}
+		return namedGenerators.get( name );
+	}
+
+	public void addGeneratorTable(String name, Properties params) {
+		Object old = generatorTables.put( name, params );
+		if ( old != null ) log.warn( "duplicate generator table: " + name );
+	}
+
+	public Properties getGeneratorTableProperties(String name, Map<String, Properties> localGeneratorTables) {
+		if ( localGeneratorTables != null ) {
+			Properties result = localGeneratorTables.get( name );
+			if ( result != null ) return result;
+		}
+		return generatorTables.get( name );
+	}
+
+	public void addUniqueConstraints(Table table, List uniqueConstraints) {
+		List oldConstraints = tableUniqueConstraints.get( table );
+		if ( oldConstraints == null ) {
+			oldConstraints = new ArrayList();
+			tableUniqueConstraints.put( table, oldConstraints );
+		}
+		oldConstraints.addAll( uniqueConstraints );
+	}
+
+	public Map<Table, List<String[]>> getTableUniqueConstraints() {
+		return tableUniqueConstraints;
+	}
+
+	public void addMappedBy(String entityName, String propertyName, String inversePropertyName) {
+		mappedByResolver.put( entityName + "." + propertyName, inversePropertyName );
+	}
+
+	public String getFromMappedBy(String entityName, String propertyName) {
+		return mappedByResolver.get( entityName + "." + propertyName );
+	}
+
+	public void addPropertyReferencedAssociation(String entityName, String propertyName, String propertyRef) {
+		propertyRefResolver.put( entityName + "." + propertyName, propertyRef );
+	}
+
+	public String getPropertyReferencedAssociation(String entityName, String propertyName) {
+		return propertyRefResolver.get( entityName + "." + propertyName );
+	}
+
+	@Override
+	public void addUniquePropertyReference(String referencedClass, String propertyName) {
+		super.addUniquePropertyReference( referencedClass, propertyName );
+	}
+
+	@Override
+	public void addPropertyReference(String referencedClass, String propertyName) {
+		super.addPropertyReference( referencedClass, propertyName );
+	}
+
+	public ReflectionManager getReflectionManager() {
+		return reflectionManager;
+	}
+
+	public void addDefaultQuery(String name, NamedQueryDefinition query) {
+		super.addQuery(name, query);
+		defaultNamedQueryNames.add( name );
+	}
+
+	public void addDefaultSQLQuery(String name, NamedSQLQueryDefinition query) {
+		super.addSQLQuery(name, query);
+		defaultNamedNativeQueryNames.add( name );
+	}
+
+	public void addDefaultGenerator(IdGenerator idGen) {
+		this.addGenerator(idGen);
+		defaultNamedGenerators.add( idGen.getName() );
+
+	}
+
+	public void addDefaultResultSetMapping(ResultSetMappingDefinition definition) {
+		final String name = definition.getName();
+		if ( ! defaultSqlResulSetMappingNames.contains( name )
+				&& super.getResultSetMapping( name ) != null ) {
+			resultSetMappings.remove( name );
+		}
+		super.addResultSetMapping(definition);
+		defaultSqlResulSetMappingNames.add( name );
+	}
+
+	@Override
+	public void addQuery(String name, NamedQueryDefinition query) throws MappingException {
+		if ( ! defaultNamedQueryNames.contains( name ) ) super.addQuery( name, query );
+	}
+
+	@Override
+	public void addResultSetMapping(ResultSetMappingDefinition definition) {
+		if ( ! defaultSqlResulSetMappingNames.contains( definition.getName() ) )
+			super.addResultSetMapping( definition );
+	}
+
+	@Override
+	public void addSQLQuery(String name, NamedSQLQueryDefinition query) throws MappingException {
+		if ( ! defaultNamedNativeQueryNames.contains( name ) ) super.addSQLQuery( name, query );
+	}
+
+	public Map getClasses() {
+		return classes;
+	}
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/FkSecondPass.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/FkSecondPass.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/FkSecondPass.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,77 +0,0 @@
-// $Id$
-package org.hibernate.cfg;
-
-import org.hibernate.AnnotationException;
-import org.hibernate.AssertionFailure;
-import org.hibernate.MappingException;
-import org.hibernate.util.StringHelper;
-import org.hibernate.cfg.annotations.TableBinder;
-import org.hibernate.mapping.ManyToOne;
-import org.hibernate.mapping.OneToOne;
-import org.hibernate.mapping.PersistentClass;
-import org.hibernate.mapping.ToOne;
-import org.hibernate.mapping.Property;
-
-/**
- * Enable a proper set of the FK columns in respect with the id column order
- * Allow the correct implementation of the default EJB3 values which needs both
- * sides of the association to be resolved
- *
- * @author Emmanuel Bernard
- */
-public class FkSecondPass implements SecondPass {
-	private ToOne value;
-	private Ejb3JoinColumn[] columns;
-	private boolean unique;
-	private ExtendedMappings mappings;
-	private String path;
-	private String entityClassName;
-
-	FkSecondPass(
-			ToOne value, Ejb3JoinColumn[] columns, boolean unique, String entityClassName, String path, ExtendedMappings mappings
-	) {
-		this.mappings = mappings;
-		this.value = value;
-		this.columns = columns;
-		this.unique = unique;
-		this.entityClassName = entityClassName;
-		this.path = entityClassName != null ? path.substring( entityClassName.length() + 1 ) : path;
-	}
-
-	public ToOne getValue() {
-		return value;
-	}
-
-	public boolean isInPrimaryKey() {
-		if (entityClassName == null) return false;
-		Property property = mappings.getClass( entityClassName ).getIdentifierProperty();
-		return property != null && path != null && path.startsWith( property.getName() );
-	}
-
-	public void doSecondPass(java.util.Map persistentClasses) throws MappingException {
-		if ( value instanceof ManyToOne ) {
-			ManyToOne manyToOne = (ManyToOne) value;
-			PersistentClass ref = (PersistentClass) persistentClasses.get( manyToOne.getReferencedEntityName() );
-			if ( ref == null ) {
-				throw new AnnotationException(
-						"@OneToOne or @ManyToOne on "
-								+ StringHelper.qualify(entityClassName, path)
-								+ " references an unknown entity: "
-								+ manyToOne.getReferencedEntityName()
-				);
-			}
-			BinderHelper.createSyntheticPropertyReference( columns, ref, null, manyToOne, false, mappings );
-			TableBinder.bindFk( ref, null, columns, manyToOne, unique, mappings );
-			/*
-			 * HbmBinder does this only when property-ref != null, but IMO, it makes sense event if it is null
-			 */
-			if ( ! manyToOne.isIgnoreNotFound() ) manyToOne.createPropertyRefConstraints( persistentClasses );
-		}
-		else if ( value instanceof OneToOne ) {
-			( (OneToOne) value ).createForeignKey();
-		}
-		else {
-			throw new AssertionFailure( "FkSecondPass for a wrong value type: " + value.getClass().getName() );
-		}
-	}
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/FkSecondPass.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/FkSecondPass.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/FkSecondPass.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/FkSecondPass.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,77 @@
+// $Id$
+package org.hibernate.cfg;
+
+import org.hibernate.AnnotationException;
+import org.hibernate.AssertionFailure;
+import org.hibernate.MappingException;
+import org.hibernate.util.StringHelper;
+import org.hibernate.cfg.annotations.TableBinder;
+import org.hibernate.mapping.ManyToOne;
+import org.hibernate.mapping.OneToOne;
+import org.hibernate.mapping.PersistentClass;
+import org.hibernate.mapping.ToOne;
+import org.hibernate.mapping.Property;
+
+/**
+ * Enable a proper set of the FK columns in respect with the id column order
+ * Allow the correct implementation of the default EJB3 values which needs both
+ * sides of the association to be resolved
+ *
+ * @author Emmanuel Bernard
+ */
+public class FkSecondPass implements SecondPass {
+	private ToOne value;
+	private Ejb3JoinColumn[] columns;
+	private boolean unique;
+	private ExtendedMappings mappings;
+	private String path;
+	private String entityClassName;
+
+	FkSecondPass(
+			ToOne value, Ejb3JoinColumn[] columns, boolean unique, String entityClassName, String path, ExtendedMappings mappings
+	) {
+		this.mappings = mappings;
+		this.value = value;
+		this.columns = columns;
+		this.unique = unique;
+		this.entityClassName = entityClassName;
+		this.path = entityClassName != null ? path.substring( entityClassName.length() + 1 ) : path;
+	}
+
+	public ToOne getValue() {
+		return value;
+	}
+
+	public boolean isInPrimaryKey() {
+		if (entityClassName == null) return false;
+		Property property = mappings.getClass( entityClassName ).getIdentifierProperty();
+		return property != null && path != null && path.startsWith( property.getName() );
+	}
+
+	public void doSecondPass(java.util.Map persistentClasses) throws MappingException {
+		if ( value instanceof ManyToOne ) {
+			ManyToOne manyToOne = (ManyToOne) value;
+			PersistentClass ref = (PersistentClass) persistentClasses.get( manyToOne.getReferencedEntityName() );
+			if ( ref == null ) {
+				throw new AnnotationException(
+						"@OneToOne or @ManyToOne on "
+								+ StringHelper.qualify(entityClassName, path)
+								+ " references an unknown entity: "
+								+ manyToOne.getReferencedEntityName()
+				);
+			}
+			BinderHelper.createSyntheticPropertyReference( columns, ref, null, manyToOne, false, mappings );
+			TableBinder.bindFk( ref, null, columns, manyToOne, unique, mappings );
+			/*
+			 * HbmBinder does this only when property-ref != null, but IMO, it makes sense event if it is null
+			 */
+			if ( ! manyToOne.isIgnoreNotFound() ) manyToOne.createPropertyRefConstraints( persistentClasses );
+		}
+		else if ( value instanceof OneToOne ) {
+			( (OneToOne) value ).createForeignKey();
+		}
+		else {
+			throw new AssertionFailure( "FkSecondPass for a wrong value type: " + value.getClass().getName() );
+		}
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/IndexColumn.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/IndexColumn.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/IndexColumn.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,87 +0,0 @@
-package org.hibernate.cfg;
-
-import java.util.Map;
-
-import org.hibernate.mapping.Join;
-
-/**
- * index column
- *
- * @author inger
- */
-public class IndexColumn
-		extends Ejb3Column {
-
-	private int base;
-
-	//FIXME move to a getter setter strategy for readeability
-	public IndexColumn(
-			boolean isImplicit,
-			String sqlType,
-			int length,
-			int precision,
-			int scale,
-			String name,
-			boolean nullable,
-			boolean unique,
-			boolean insertable,
-			boolean updatable,
-			String secondaryTableName,
-			Map<String, Join> joins,
-			PropertyHolder propertyHolder,
-			ExtendedMappings mappings
-	) {
-		super();
-		setImplicit( isImplicit );
-		setSqlType( sqlType );
-		setLength( length );
-		setPrecision( precision );
-		setScale( scale );
-		setLogicalColumnName( name );
-		setNullable( nullable );
-		setUnique( unique );
-		setInsertable( insertable );
-		setUpdatable( updatable );
-		setSecondaryTableName( secondaryTableName );
-		setPropertyHolder( propertyHolder );
-		setJoins( joins );
-		setMappings( mappings );
-		bind();
-		//super(isImplicit, sqlType, length, precision, scale, name, nullable, unique, insertable, updatable, secondaryTableName, joins, propertyHolder, mappings);
-
-	}
-
-	public int getBase() {
-		return base;
-	}
-
-	public void setBase(int base) {
-		this.base = base;
-	}
-
-	public static IndexColumn buildColumnFromAnnotation(
-			org.hibernate.annotations.IndexColumn ann,
-			PropertyHolder propertyHolder,
-			PropertyData inferredData,
-			ExtendedMappings mappings
-	) {
-		IndexColumn column;
-		if ( ann != null ) {
-			String sqlType = BinderHelper.isDefault( ann.columnDefinition() ) ? null : ann.columnDefinition();
-			String name = BinderHelper.isDefault( ann.name() ) ? inferredData.getPropertyName() : ann.name();
-			//TODO move it to a getter based system and remove the constructor
-			column = new IndexColumn(
-					false, sqlType, 0, 0, 0, name, ann.nullable(),
-					false, true, true, null, null, propertyHolder, mappings
-			);
-			column.setBase( ann.base() );
-		}
-		else {
-			column = new IndexColumn(
-					true, null, 0, 0, 0, null, true,
-					false, true, true, null, null, propertyHolder, mappings
-			);
-		}
-		return column;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/IndexColumn.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/IndexColumn.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/IndexColumn.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/IndexColumn.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,87 @@
+package org.hibernate.cfg;
+
+import java.util.Map;
+
+import org.hibernate.mapping.Join;
+
+/**
+ * index column
+ *
+ * @author inger
+ */
+public class IndexColumn
+		extends Ejb3Column {
+
+	private int base;
+
+	//FIXME move to a getter setter strategy for readeability
+	public IndexColumn(
+			boolean isImplicit,
+			String sqlType,
+			int length,
+			int precision,
+			int scale,
+			String name,
+			boolean nullable,
+			boolean unique,
+			boolean insertable,
+			boolean updatable,
+			String secondaryTableName,
+			Map<String, Join> joins,
+			PropertyHolder propertyHolder,
+			ExtendedMappings mappings
+	) {
+		super();
+		setImplicit( isImplicit );
+		setSqlType( sqlType );
+		setLength( length );
+		setPrecision( precision );
+		setScale( scale );
+		setLogicalColumnName( name );
+		setNullable( nullable );
+		setUnique( unique );
+		setInsertable( insertable );
+		setUpdatable( updatable );
+		setSecondaryTableName( secondaryTableName );
+		setPropertyHolder( propertyHolder );
+		setJoins( joins );
+		setMappings( mappings );
+		bind();
+		//super(isImplicit, sqlType, length, precision, scale, name, nullable, unique, insertable, updatable, secondaryTableName, joins, propertyHolder, mappings);
+
+	}
+
+	public int getBase() {
+		return base;
+	}
+
+	public void setBase(int base) {
+		this.base = base;
+	}
+
+	public static IndexColumn buildColumnFromAnnotation(
+			org.hibernate.annotations.IndexColumn ann,
+			PropertyHolder propertyHolder,
+			PropertyData inferredData,
+			ExtendedMappings mappings
+	) {
+		IndexColumn column;
+		if ( ann != null ) {
+			String sqlType = BinderHelper.isDefault( ann.columnDefinition() ) ? null : ann.columnDefinition();
+			String name = BinderHelper.isDefault( ann.name() ) ? inferredData.getPropertyName() : ann.name();
+			//TODO move it to a getter based system and remove the constructor
+			column = new IndexColumn(
+					false, sqlType, 0, 0, 0, name, ann.nullable(),
+					false, true, true, null, null, propertyHolder, mappings
+			);
+			column.setBase( ann.base() );
+		}
+		else {
+			column = new IndexColumn(
+					true, null, 0, 0, 0, null, true,
+					false, true, true, null, null, propertyHolder, mappings
+			);
+		}
+		return column;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/IndexSecondPass.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/IndexSecondPass.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/IndexSecondPass.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,61 +0,0 @@
-//$Id$
-package org.hibernate.cfg;
-
-import java.util.Map;
-
-import org.hibernate.AnnotationException;
-import org.hibernate.MappingException;
-import org.hibernate.mapping.Column;
-import org.hibernate.mapping.Table;
-
-/**
- * @author Emmanuel Bernard
- */
-public class IndexSecondPass implements SecondPass {
-	private Table table;
-	private final String indexName;
-	private final String[] columns;
-	private final ExtendedMappings mappings;
-	private final Ejb3Column column;
-
-	public IndexSecondPass(Table table, String indexName, String[] columns, ExtendedMappings mappings) {
-		this.table = table;
-		this.indexName = indexName;
-		this.columns = columns;
-		this.mappings = mappings;
-		this.column = null;
-	}
-
-	public IndexSecondPass(String indexName, Ejb3Column column, ExtendedMappings mappings) {
-		this.indexName = indexName;
-		this.column = column;
-		this.columns = null;
-		this.mappings = mappings;
-	}
-
-	public void doSecondPass(Map persistentClasses) throws MappingException {
-		if ( columns != null ) {
-			for ( String columnName : columns ) {
-				addIndexToColumn( columnName );
-			}
-		}
-		if ( column != null ) {
-			this.table = column.getTable();
-			addIndexToColumn( mappings.getLogicalColumnName( column.getName(), table ) );
-		}
-	}
-
-	private void addIndexToColumn(String columnName) {
-		Column column = table.getColumn(
-				new Column(
-						mappings.getPhysicalColumnName( columnName, table )
-				)
-		);
-		if ( column == null ) {
-			throw new AnnotationException(
-					"@Index references a unknown column: " + columnName
-			);
-		}
-		table.getOrCreateIndex( indexName ).addColumn( column );
-	}
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/IndexSecondPass.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/IndexSecondPass.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/IndexSecondPass.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/IndexSecondPass.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,61 @@
+//$Id$
+package org.hibernate.cfg;
+
+import java.util.Map;
+
+import org.hibernate.AnnotationException;
+import org.hibernate.MappingException;
+import org.hibernate.mapping.Column;
+import org.hibernate.mapping.Table;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class IndexSecondPass implements SecondPass {
+	private Table table;
+	private final String indexName;
+	private final String[] columns;
+	private final ExtendedMappings mappings;
+	private final Ejb3Column column;
+
+	public IndexSecondPass(Table table, String indexName, String[] columns, ExtendedMappings mappings) {
+		this.table = table;
+		this.indexName = indexName;
+		this.columns = columns;
+		this.mappings = mappings;
+		this.column = null;
+	}
+
+	public IndexSecondPass(String indexName, Ejb3Column column, ExtendedMappings mappings) {
+		this.indexName = indexName;
+		this.column = column;
+		this.columns = null;
+		this.mappings = mappings;
+	}
+
+	public void doSecondPass(Map persistentClasses) throws MappingException {
+		if ( columns != null ) {
+			for ( String columnName : columns ) {
+				addIndexToColumn( columnName );
+			}
+		}
+		if ( column != null ) {
+			this.table = column.getTable();
+			addIndexToColumn( mappings.getLogicalColumnName( column.getName(), table ) );
+		}
+	}
+
+	private void addIndexToColumn(String columnName) {
+		Column column = table.getColumn(
+				new Column(
+						mappings.getPhysicalColumnName( columnName, table )
+				)
+		);
+		if ( column == null ) {
+			throw new AnnotationException(
+					"@Index references a unknown column: " + columnName
+			);
+		}
+		table.getOrCreateIndex( indexName ).addColumn( column );
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/InheritanceState.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/InheritanceState.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/InheritanceState.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,90 +0,0 @@
-//$Id$
-package org.hibernate.cfg;
-
-import java.util.Map;
-import javax.persistence.Inheritance;
-import javax.persistence.InheritanceType;
-import javax.persistence.MappedSuperclass;
-
-import org.hibernate.annotations.common.reflection.ReflectionManager;
-import org.hibernate.annotations.common.reflection.XAnnotatedElement;
-import org.hibernate.annotations.common.reflection.XClass;
-
-/**
- * Some extra data to the inheritance position of a class
- *
- * @author Emmanuel Bernard
- */
-public class InheritanceState {
-	public InheritanceState(XClass clazz) {
-		this.clazz = clazz;
-		extractInheritanceType();
-	}
-
-	public XClass clazz;
-	/**
-	 * has son either mappedsuperclass son or entity son
-	 */
-	public boolean hasSons = false;
-	/**
-	 * a mother entity is available
-	 */
-	public boolean hasParents = false;
-	public InheritanceType type;
-	public boolean isEmbeddableSuperclass = false;
-
-	/**
-	 * only defined on embedded superclasses
-	 */
-	public String accessType = null;
-	public Boolean isPropertyAnnotated;
-
-	private void extractInheritanceType() {
-		XAnnotatedElement element = clazz;
-		Inheritance inhAnn = element.getAnnotation( Inheritance.class );
-		MappedSuperclass mappedSuperClass = element.getAnnotation( MappedSuperclass.class );
-		if ( mappedSuperClass != null ) {
-			isEmbeddableSuperclass = true;
-			type = inhAnn == null ? null : inhAnn.strategy();
-		}
-		else {
-			type = inhAnn == null ? InheritanceType.SINGLE_TABLE : inhAnn.strategy();
-		}
-	}
-
-	boolean hasTable() {
-		return !hasParents || !InheritanceType.SINGLE_TABLE.equals( type );
-	}
-
-	boolean hasDenormalizedTable() {
-		return hasParents && InheritanceType.TABLE_PER_CLASS.equals( type );
-	}
-
-	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 ( superclass != null && ! reflectionManager.equals( superclass, Object.class ) );
-		return null;
-	}
-
-	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 ( superclass != null && ! reflectionManager.equals( superclass, Object.class ) );
-		return null;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/InheritanceState.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/InheritanceState.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/InheritanceState.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/InheritanceState.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,90 @@
+//$Id$
+package org.hibernate.cfg;
+
+import java.util.Map;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+import javax.persistence.MappedSuperclass;
+
+import org.hibernate.annotations.common.reflection.ReflectionManager;
+import org.hibernate.annotations.common.reflection.XAnnotatedElement;
+import org.hibernate.annotations.common.reflection.XClass;
+
+/**
+ * Some extra data to the inheritance position of a class
+ *
+ * @author Emmanuel Bernard
+ */
+public class InheritanceState {
+	public InheritanceState(XClass clazz) {
+		this.clazz = clazz;
+		extractInheritanceType();
+	}
+
+	public XClass clazz;
+	/**
+	 * has son either mappedsuperclass son or entity son
+	 */
+	public boolean hasSons = false;
+	/**
+	 * a mother entity is available
+	 */
+	public boolean hasParents = false;
+	public InheritanceType type;
+	public boolean isEmbeddableSuperclass = false;
+
+	/**
+	 * only defined on embedded superclasses
+	 */
+	public String accessType = null;
+	public Boolean isPropertyAnnotated;
+
+	private void extractInheritanceType() {
+		XAnnotatedElement element = clazz;
+		Inheritance inhAnn = element.getAnnotation( Inheritance.class );
+		MappedSuperclass mappedSuperClass = element.getAnnotation( MappedSuperclass.class );
+		if ( mappedSuperClass != null ) {
+			isEmbeddableSuperclass = true;
+			type = inhAnn == null ? null : inhAnn.strategy();
+		}
+		else {
+			type = inhAnn == null ? InheritanceType.SINGLE_TABLE : inhAnn.strategy();
+		}
+	}
+
+	boolean hasTable() {
+		return !hasParents || !InheritanceType.SINGLE_TABLE.equals( type );
+	}
+
+	boolean hasDenormalizedTable() {
+		return hasParents && InheritanceType.TABLE_PER_CLASS.equals( type );
+	}
+
+	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 ( superclass != null && ! reflectionManager.equals( superclass, Object.class ) );
+		return null;
+	}
+
+	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 ( superclass != null && ! reflectionManager.equals( superclass, Object.class ) );
+		return null;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/NotYetImplementedException.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/NotYetImplementedException.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/NotYetImplementedException.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,25 +0,0 @@
-//$Id$
-package org.hibernate.cfg;
-
-import org.hibernate.MappingException;
-
-/**
- * Mapping not yet implemented
- *
- * @author Emmanuel Bernard
- */
-public class NotYetImplementedException extends MappingException {
-
-	public NotYetImplementedException(String msg, Throwable root) {
-		super( msg, root );
-	}
-
-	public NotYetImplementedException(Throwable root) {
-		super( root );
-	}
-
-	public NotYetImplementedException(String s) {
-		super( s );
-	}
-
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/NotYetImplementedException.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/NotYetImplementedException.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/NotYetImplementedException.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/NotYetImplementedException.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,25 @@
+//$Id$
+package org.hibernate.cfg;
+
+import org.hibernate.MappingException;
+
+/**
+ * Mapping not yet implemented
+ *
+ * @author Emmanuel Bernard
+ */
+public class NotYetImplementedException extends MappingException {
+
+	public NotYetImplementedException(String msg, Throwable root) {
+		super( msg, root );
+	}
+
+	public NotYetImplementedException(Throwable root) {
+		super( root );
+	}
+
+	public NotYetImplementedException(String s) {
+		super( s );
+	}
+
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/OneToOneSecondPass.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/OneToOneSecondPass.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/OneToOneSecondPass.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,249 +0,0 @@
-//$Id$
-package org.hibernate.cfg;
-
-import java.util.Iterator;
-import java.util.Map;
-
-import org.hibernate.AnnotationException;
-import org.hibernate.MappingException;
-import org.hibernate.annotations.ForeignKey;
-import org.hibernate.cfg.annotations.PropertyBinder;
-import org.hibernate.mapping.Column;
-import org.hibernate.mapping.DependantValue;
-import org.hibernate.mapping.Join;
-import org.hibernate.mapping.ManyToOne;
-import org.hibernate.mapping.OneToOne;
-import org.hibernate.mapping.PersistentClass;
-import org.hibernate.mapping.Property;
-import org.hibernate.mapping.SimpleValue;
-import org.hibernate.annotations.common.reflection.XClass;
-import org.hibernate.type.ForeignKeyDirection;
-import org.hibernate.util.StringHelper;
-
-/**
- * We have to handle OneToOne in a second pass because:
- * -
- */
-public class OneToOneSecondPass implements SecondPass {
-	private String mappedBy;
-	private ExtendedMappings mappings;
-	private String ownerEntity;
-	private String ownerProperty;
-	private PropertyHolder propertyHolder;
-	private boolean ignoreNotFound;
-	private PropertyData inferredData;
-	private XClass targetEntity;
-	private boolean cascadeOnDelete;
-	private boolean optional;
-	private String cascadeStrategy;
-	private Ejb3JoinColumn[] joinColumns;
-
-	//that suck, we should read that from the property mainly
-	public OneToOneSecondPass(
-			String mappedBy, String ownerEntity, String ownerProperty,
-			PropertyHolder propertyHolder, PropertyData inferredData, XClass targetEntity, boolean ignoreNotFound,
-			boolean cascadeOnDelete, boolean optional, String cascadeStrategy, Ejb3JoinColumn[] columns,
-			ExtendedMappings mappings
-	) {
-		this.ownerEntity = ownerEntity;
-		this.ownerProperty = ownerProperty;
-		this.mappedBy = mappedBy;
-		this.propertyHolder = propertyHolder;
-		this.mappings = mappings;
-		this.ignoreNotFound = ignoreNotFound;
-		this.inferredData = inferredData;
-		this.targetEntity = targetEntity;
-		this.cascadeOnDelete = cascadeOnDelete;
-		this.optional = optional;
-		this.cascadeStrategy = cascadeStrategy;
-		this.joinColumns = columns;
-	}
-
-	//TODO refactor this code, there is a lot of duplication in this method
-	public void doSecondPass(Map persistentClasses) throws MappingException {
-		org.hibernate.mapping.OneToOne value = new org.hibernate.mapping.OneToOne(
-				propertyHolder.getTable(), propertyHolder.getPersistentClass()
-		);
-		final String propertyName = inferredData.getPropertyName();
-		value.setPropertyName( propertyName );
-		String referencedEntityName;
-		if ( AnnotationBinder.isDefault( targetEntity, mappings ) ) {
-			referencedEntityName = inferredData.getClassOrElementName();
-		}
-		else {
-			referencedEntityName = targetEntity.getName();
-		}
-		value.setReferencedEntityName( referencedEntityName );
-		AnnotationBinder.defineFetchingStrategy( value, inferredData.getProperty() );
-		//value.setFetchMode( fetchMode );
-		value.setCascadeDeleteEnabled( cascadeOnDelete );
-		//value.setLazy( fetchMode != FetchMode.JOIN );
-
-		if ( !optional ) value.setConstrained( true );
-		value.setForeignKeyType(
-				value.isConstrained() ?
-						ForeignKeyDirection.FOREIGN_KEY_FROM_PARENT :
-						ForeignKeyDirection.FOREIGN_KEY_TO_PARENT
-		);
-		PropertyBinder binder = new PropertyBinder();
-		binder.setName( propertyName );
-		binder.setValue( value );
-		binder.setCascade( cascadeStrategy );
-		binder.setPropertyAccessorName( inferredData.getDefaultAccess() );
-		Property prop = binder.make();
-		if ( BinderHelper.isDefault( mappedBy ) ) {
-			/*
-			 * we need to check if the columns are in the right order
-			 * if not, then we need to create a many to one and formula
-			 * but actually, since entities linked by a one to one need
-			 * to share the same composite id class, this cannot happen in hibernate
-			 */
-			boolean rightOrder = true;
-
-			if (rightOrder) {
-				String path = StringHelper.qualify( propertyHolder.getPath(), propertyName );
-				( new FkSecondPass(
-						value, joinColumns,
-						!optional, //cannot have nullabe and unique on certain DBs
-						propertyHolder.getEntityOwnerClassName(),
-						path, mappings
-				) ).doSecondPass( persistentClasses );
-				//no column associated since its a one to one
-				propertyHolder.addProperty( prop );
-			}
-			else {
-				//this is a many to one with Formula
-
-			}
-		}
-		else {
-			PersistentClass otherSide = (PersistentClass) persistentClasses.get( value.getReferencedEntityName() );
-			Property otherSideProperty;
-			try {
-				if ( otherSide == null ) {
-					throw new MappingException( "Unable to find entity: " + value.getReferencedEntityName() );
-				}
-				otherSideProperty = BinderHelper.findPropertyByName( otherSide, mappedBy );
-			}
-			catch (MappingException e) {
-				throw new AnnotationException(
-						"Unknown mappedBy in: " + StringHelper.qualify( ownerEntity, ownerProperty )
-								+ ", referenced property unknown: "
-								+ StringHelper.qualify( value.getReferencedEntityName(), mappedBy )
-				);
-			}
-			if ( otherSideProperty.getValue() instanceof OneToOne ) {
-				propertyHolder.addProperty( prop );
-			}
-			else if ( otherSideProperty.getValue() instanceof ManyToOne ) {
-				Iterator it = otherSide.getJoinIterator();
-				Join otherSideJoin = null;
-				while ( it.hasNext() ) {
-					otherSideJoin = (Join) it.next();
-					if ( otherSideJoin.containsProperty( otherSideProperty ) ) {
-						break;
-					}
-				}
-				if ( otherSideJoin != null ) {
-					//@OneToOne @JoinTable
-					Join mappedByJoin = buildJoin(
-							(PersistentClass) persistentClasses.get( ownerEntity ), otherSideProperty, otherSideJoin
-					);
-					ManyToOne manyToOne = new ManyToOne( mappedByJoin.getTable() );
-					//FIXME use ignore not found here
-					manyToOne.setIgnoreNotFound( ignoreNotFound );
-					manyToOne.setCascadeDeleteEnabled( value.isCascadeDeleteEnabled() );
-					manyToOne.setEmbedded( value.isEmbedded() );
-					manyToOne.setFetchMode( value.getFetchMode() );
-					manyToOne.setLazy( value.isLazy() );
-					manyToOne.setReferencedEntityName( value.getReferencedEntityName() );
-					manyToOne.setUnwrapProxy( value.isUnwrapProxy() );
-					prop.setValue( manyToOne );
-					Iterator otherSideJoinKeyColumns = otherSideJoin.getKey().getColumnIterator();
-					while ( otherSideJoinKeyColumns.hasNext() ) {
-						Column column = (Column) otherSideJoinKeyColumns.next();
-						Column copy = new Column();
-						copy.setLength( column.getLength() );
-						copy.setScale( column.getScale() );
-						copy.setValue( manyToOne );
-						copy.setName( column.getQuotedName() );
-						copy.setNullable( column.isNullable() );
-						copy.setPrecision( column.getPrecision() );
-						copy.setUnique( column.isUnique() );
-						copy.setSqlType( column.getSqlType() );
-						copy.setCheckConstraint( column.getCheckConstraint() );
-						copy.setComment( column.getComment() );
-						copy.setDefaultValue( column.getDefaultValue() );
-						manyToOne.addColumn( copy );
-					}
-					mappedByJoin.addProperty( prop );
-				}
-				else {
-					propertyHolder.addProperty( prop );
-				}
-
-				value.setReferencedPropertyName( mappedBy );
-
-				String propertyRef = value.getReferencedPropertyName();
-				if ( propertyRef != null ) {
-					mappings.addUniquePropertyReference(
-							value.getReferencedEntityName(),
-							propertyRef
-					);
-				}
-			}
-			else {
-				throw new AnnotationException(
-						"Referenced property not a (One|Many)ToOne: "
-								+ StringHelper.qualify(
-								otherSide.getEntityName(), mappedBy
-						)
-								+ " in mappedBy of "
-								+ StringHelper.qualify( ownerEntity, ownerProperty )
-				);
-			}
-		}
-		ForeignKey fk = inferredData.getProperty().getAnnotation( ForeignKey.class );
-		String fkName = fk != null ? fk.name() : "";
-		if ( ! BinderHelper.isDefault( fkName ) ) value.setForeignKeyName( fkName );
-	}
-
-	//dirty dupe of EntityBinder.bindSecondaryTable
-	private Join buildJoin(PersistentClass persistentClass, Property otherSideProperty, Join originalJoin) {
-		Join join = new Join();
-		join.setPersistentClass( persistentClass );
-
-		//no check constraints available on joins
-		join.setTable( originalJoin.getTable() );
-		join.setInverse( true );
-		SimpleValue key = new DependantValue( join.getTable(), persistentClass.getIdentifier() );
-		//TODO support @ForeignKey
-		join.setKey( key );
-		join.setSequentialSelect( false );
-		//TODO support for inverse and optional
-		join.setOptional( true ); //perhaps not quite per-spec, but a Good Thing anyway
-		key.setCascadeDeleteEnabled( false );
-		Iterator mappedByColumns = otherSideProperty.getValue().getColumnIterator();
-		while ( mappedByColumns.hasNext() ) {
-			Column column = (Column) mappedByColumns.next();
-			Column copy = new Column();
-			copy.setLength( column.getLength() );
-			copy.setScale( column.getScale() );
-			copy.setValue( key );
-			copy.setName( column.getQuotedName() );
-			copy.setNullable( column.isNullable() );
-			copy.setPrecision( column.getPrecision() );
-			copy.setUnique( column.isUnique() );
-			copy.setSqlType( column.getSqlType() );
-			copy.setCheckConstraint( column.getCheckConstraint() );
-			copy.setComment( column.getComment() );
-			copy.setDefaultValue( column.getDefaultValue() );
-			key.addColumn( copy );
-		}
-		join.createPrimaryKey();
-		join.createForeignKey();
-		persistentClass.addJoin( join );
-		return join;
-	}
-}
-

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/OneToOneSecondPass.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/OneToOneSecondPass.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/OneToOneSecondPass.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/OneToOneSecondPass.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,249 @@
+//$Id$
+package org.hibernate.cfg;
+
+import java.util.Iterator;
+import java.util.Map;
+
+import org.hibernate.AnnotationException;
+import org.hibernate.MappingException;
+import org.hibernate.annotations.ForeignKey;
+import org.hibernate.cfg.annotations.PropertyBinder;
+import org.hibernate.mapping.Column;
+import org.hibernate.mapping.DependantValue;
+import org.hibernate.mapping.Join;
+import org.hibernate.mapping.ManyToOne;
+import org.hibernate.mapping.OneToOne;
+import org.hibernate.mapping.PersistentClass;
+import org.hibernate.mapping.Property;
+import org.hibernate.mapping.SimpleValue;
+import org.hibernate.annotations.common.reflection.XClass;
+import org.hibernate.type.ForeignKeyDirection;
+import org.hibernate.util.StringHelper;
+
+/**
+ * We have to handle OneToOne in a second pass because:
+ * -
+ */
+public class OneToOneSecondPass implements SecondPass {
+	private String mappedBy;
+	private ExtendedMappings mappings;
+	private String ownerEntity;
+	private String ownerProperty;
+	private PropertyHolder propertyHolder;
+	private boolean ignoreNotFound;
+	private PropertyData inferredData;
+	private XClass targetEntity;
+	private boolean cascadeOnDelete;
+	private boolean optional;
+	private String cascadeStrategy;
+	private Ejb3JoinColumn[] joinColumns;
+
+	//that suck, we should read that from the property mainly
+	public OneToOneSecondPass(
+			String mappedBy, String ownerEntity, String ownerProperty,
+			PropertyHolder propertyHolder, PropertyData inferredData, XClass targetEntity, boolean ignoreNotFound,
+			boolean cascadeOnDelete, boolean optional, String cascadeStrategy, Ejb3JoinColumn[] columns,
+			ExtendedMappings mappings
+	) {
+		this.ownerEntity = ownerEntity;
+		this.ownerProperty = ownerProperty;
+		this.mappedBy = mappedBy;
+		this.propertyHolder = propertyHolder;
+		this.mappings = mappings;
+		this.ignoreNotFound = ignoreNotFound;
+		this.inferredData = inferredData;
+		this.targetEntity = targetEntity;
+		this.cascadeOnDelete = cascadeOnDelete;
+		this.optional = optional;
+		this.cascadeStrategy = cascadeStrategy;
+		this.joinColumns = columns;
+	}
+
+	//TODO refactor this code, there is a lot of duplication in this method
+	public void doSecondPass(Map persistentClasses) throws MappingException {
+		org.hibernate.mapping.OneToOne value = new org.hibernate.mapping.OneToOne(
+				propertyHolder.getTable(), propertyHolder.getPersistentClass()
+		);
+		final String propertyName = inferredData.getPropertyName();
+		value.setPropertyName( propertyName );
+		String referencedEntityName;
+		if ( AnnotationBinder.isDefault( targetEntity, mappings ) ) {
+			referencedEntityName = inferredData.getClassOrElementName();
+		}
+		else {
+			referencedEntityName = targetEntity.getName();
+		}
+		value.setReferencedEntityName( referencedEntityName );
+		AnnotationBinder.defineFetchingStrategy( value, inferredData.getProperty() );
+		//value.setFetchMode( fetchMode );
+		value.setCascadeDeleteEnabled( cascadeOnDelete );
+		//value.setLazy( fetchMode != FetchMode.JOIN );
+
+		if ( !optional ) value.setConstrained( true );
+		value.setForeignKeyType(
+				value.isConstrained() ?
+						ForeignKeyDirection.FOREIGN_KEY_FROM_PARENT :
+						ForeignKeyDirection.FOREIGN_KEY_TO_PARENT
+		);
+		PropertyBinder binder = new PropertyBinder();
+		binder.setName( propertyName );
+		binder.setValue( value );
+		binder.setCascade( cascadeStrategy );
+		binder.setPropertyAccessorName( inferredData.getDefaultAccess() );
+		Property prop = binder.make();
+		if ( BinderHelper.isDefault( mappedBy ) ) {
+			/*
+			 * we need to check if the columns are in the right order
+			 * if not, then we need to create a many to one and formula
+			 * but actually, since entities linked by a one to one need
+			 * to share the same composite id class, this cannot happen in hibernate
+			 */
+			boolean rightOrder = true;
+
+			if (rightOrder) {
+				String path = StringHelper.qualify( propertyHolder.getPath(), propertyName );
+				( new FkSecondPass(
+						value, joinColumns,
+						!optional, //cannot have nullabe and unique on certain DBs
+						propertyHolder.getEntityOwnerClassName(),
+						path, mappings
+				) ).doSecondPass( persistentClasses );
+				//no column associated since its a one to one
+				propertyHolder.addProperty( prop );
+			}
+			else {
+				//this is a many to one with Formula
+
+			}
+		}
+		else {
+			PersistentClass otherSide = (PersistentClass) persistentClasses.get( value.getReferencedEntityName() );
+			Property otherSideProperty;
+			try {
+				if ( otherSide == null ) {
+					throw new MappingException( "Unable to find entity: " + value.getReferencedEntityName() );
+				}
+				otherSideProperty = BinderHelper.findPropertyByName( otherSide, mappedBy );
+			}
+			catch (MappingException e) {
+				throw new AnnotationException(
+						"Unknown mappedBy in: " + StringHelper.qualify( ownerEntity, ownerProperty )
+								+ ", referenced property unknown: "
+								+ StringHelper.qualify( value.getReferencedEntityName(), mappedBy )
+				);
+			}
+			if ( otherSideProperty.getValue() instanceof OneToOne ) {
+				propertyHolder.addProperty( prop );
+			}
+			else if ( otherSideProperty.getValue() instanceof ManyToOne ) {
+				Iterator it = otherSide.getJoinIterator();
+				Join otherSideJoin = null;
+				while ( it.hasNext() ) {
+					otherSideJoin = (Join) it.next();
+					if ( otherSideJoin.containsProperty( otherSideProperty ) ) {
+						break;
+					}
+				}
+				if ( otherSideJoin != null ) {
+					//@OneToOne @JoinTable
+					Join mappedByJoin = buildJoin(
+							(PersistentClass) persistentClasses.get( ownerEntity ), otherSideProperty, otherSideJoin
+					);
+					ManyToOne manyToOne = new ManyToOne( mappedByJoin.getTable() );
+					//FIXME use ignore not found here
+					manyToOne.setIgnoreNotFound( ignoreNotFound );
+					manyToOne.setCascadeDeleteEnabled( value.isCascadeDeleteEnabled() );
+					manyToOne.setEmbedded( value.isEmbedded() );
+					manyToOne.setFetchMode( value.getFetchMode() );
+					manyToOne.setLazy( value.isLazy() );
+					manyToOne.setReferencedEntityName( value.getReferencedEntityName() );
+					manyToOne.setUnwrapProxy( value.isUnwrapProxy() );
+					prop.setValue( manyToOne );
+					Iterator otherSideJoinKeyColumns = otherSideJoin.getKey().getColumnIterator();
+					while ( otherSideJoinKeyColumns.hasNext() ) {
+						Column column = (Column) otherSideJoinKeyColumns.next();
+						Column copy = new Column();
+						copy.setLength( column.getLength() );
+						copy.setScale( column.getScale() );
+						copy.setValue( manyToOne );
+						copy.setName( column.getQuotedName() );
+						copy.setNullable( column.isNullable() );
+						copy.setPrecision( column.getPrecision() );
+						copy.setUnique( column.isUnique() );
+						copy.setSqlType( column.getSqlType() );
+						copy.setCheckConstraint( column.getCheckConstraint() );
+						copy.setComment( column.getComment() );
+						copy.setDefaultValue( column.getDefaultValue() );
+						manyToOne.addColumn( copy );
+					}
+					mappedByJoin.addProperty( prop );
+				}
+				else {
+					propertyHolder.addProperty( prop );
+				}
+
+				value.setReferencedPropertyName( mappedBy );
+
+				String propertyRef = value.getReferencedPropertyName();
+				if ( propertyRef != null ) {
+					mappings.addUniquePropertyReference(
+							value.getReferencedEntityName(),
+							propertyRef
+					);
+				}
+			}
+			else {
+				throw new AnnotationException(
+						"Referenced property not a (One|Many)ToOne: "
+								+ StringHelper.qualify(
+								otherSide.getEntityName(), mappedBy
+						)
+								+ " in mappedBy of "
+								+ StringHelper.qualify( ownerEntity, ownerProperty )
+				);
+			}
+		}
+		ForeignKey fk = inferredData.getProperty().getAnnotation( ForeignKey.class );
+		String fkName = fk != null ? fk.name() : "";
+		if ( ! BinderHelper.isDefault( fkName ) ) value.setForeignKeyName( fkName );
+	}
+
+	//dirty dupe of EntityBinder.bindSecondaryTable
+	private Join buildJoin(PersistentClass persistentClass, Property otherSideProperty, Join originalJoin) {
+		Join join = new Join();
+		join.setPersistentClass( persistentClass );
+
+		//no check constraints available on joins
+		join.setTable( originalJoin.getTable() );
+		join.setInverse( true );
+		SimpleValue key = new DependantValue( join.getTable(), persistentClass.getIdentifier() );
+		//TODO support @ForeignKey
+		join.setKey( key );
+		join.setSequentialSelect( false );
+		//TODO support for inverse and optional
+		join.setOptional( true ); //perhaps not quite per-spec, but a Good Thing anyway
+		key.setCascadeDeleteEnabled( false );
+		Iterator mappedByColumns = otherSideProperty.getValue().getColumnIterator();
+		while ( mappedByColumns.hasNext() ) {
+			Column column = (Column) mappedByColumns.next();
+			Column copy = new Column();
+			copy.setLength( column.getLength() );
+			copy.setScale( column.getScale() );
+			copy.setValue( key );
+			copy.setName( column.getQuotedName() );
+			copy.setNullable( column.isNullable() );
+			copy.setPrecision( column.getPrecision() );
+			copy.setUnique( column.isUnique() );
+			copy.setSqlType( column.getSqlType() );
+			copy.setCheckConstraint( column.getCheckConstraint() );
+			copy.setComment( column.getComment() );
+			copy.setDefaultValue( column.getDefaultValue() );
+			key.addColumn( copy );
+		}
+		join.createPrimaryKey();
+		join.createForeignKey();
+		persistentClass.addJoin( join );
+		return join;
+	}
+}
+

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/PropertyData.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/PropertyData.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/PropertyData.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,42 +0,0 @@
-package org.hibernate.cfg;
-
-import org.hibernate.MappingException;
-import org.hibernate.annotations.common.reflection.XClass;
-import org.hibernate.annotations.common.reflection.XProperty;
-
-public interface PropertyData {
-
-	/**
-	 * @return default member access (whether field or property)
-	 * @throws MappingException No getter or field found or wrong JavaBean spec usage
-	 */
-	public String getDefaultAccess();
-
-	/**
-	 * @return property name
-	 * @throws MappingException No getter or field found or wrong JavaBean spec usage
-	 */
-	public String getPropertyName() throws MappingException;
-
-	/**
-	 * Returns the returned class itself or the element type if an array
-	 */
-	public XClass getClassOrElement() throws MappingException;
-
-	/**
-	 * Return the class itself
-	 */
-	public XClass getPropertyClass() throws MappingException;
-
-	/**
-	 * Returns the returned class name itself or the element type if an array
-	 */
-	public String getClassOrElementName() throws MappingException;
-
-	/**
-	 * Returns the returned class name itself
-	 */
-	public String getTypeName() throws MappingException;
-
-	public XProperty getProperty();
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/PropertyData.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/PropertyData.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/PropertyData.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/PropertyData.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,42 @@
+package org.hibernate.cfg;
+
+import org.hibernate.MappingException;
+import org.hibernate.annotations.common.reflection.XClass;
+import org.hibernate.annotations.common.reflection.XProperty;
+
+public interface PropertyData {
+
+	/**
+	 * @return default member access (whether field or property)
+	 * @throws MappingException No getter or field found or wrong JavaBean spec usage
+	 */
+	public String getDefaultAccess();
+
+	/**
+	 * @return property name
+	 * @throws MappingException No getter or field found or wrong JavaBean spec usage
+	 */
+	public String getPropertyName() throws MappingException;
+
+	/**
+	 * Returns the returned class itself or the element type if an array
+	 */
+	public XClass getClassOrElement() throws MappingException;
+
+	/**
+	 * Return the class itself
+	 */
+	public XClass getPropertyClass() throws MappingException;
+
+	/**
+	 * Returns the returned class name itself or the element type if an array
+	 */
+	public String getClassOrElementName() throws MappingException;
+
+	/**
+	 * Returns the returned class name itself
+	 */
+	public String getTypeName() throws MappingException;
+
+	public XProperty getProperty();
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/PropertyHolder.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/PropertyHolder.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/PropertyHolder.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,52 +0,0 @@
-package org.hibernate.cfg;
-
-import javax.persistence.Column;
-import javax.persistence.JoinColumn;
-import javax.persistence.JoinTable;
-
-import org.hibernate.mapping.KeyValue;
-import org.hibernate.mapping.PersistentClass;
-import org.hibernate.mapping.Property;
-import org.hibernate.mapping.Table;
-import org.hibernate.mapping.Join;
-
-/**
- * Property holder abstract property containers from their direct implementation
- *
- * @author Emmanuel Bernard
- */
-public interface PropertyHolder {
-	String getClassName();
-
-	String getEntityOwnerClassName();
-
-	Table getTable();
-
-	void addProperty(Property prop);
-
-	KeyValue getIdentifier();
-
-	PersistentClass getPersistentClass();
-
-	boolean isComponent();
-
-	void setParentProperty(String parentProperty);
-
-	String getPath();
-
-	/**
-	 * return null if the column is not overridden, or an array of column if true
-	 */
-	Column[] getOverriddenColumn(String propertyName);
-
-	/**
-	 * return null if the column is not overridden, or an array of column if true
-	 */
-	JoinColumn[] getOverriddenJoinColumn(String propertyName);
-
-	String getEntityName();
-
-	void addProperty(Property prop, Ejb3Column[] columns);
-
-	Join addJoin(JoinTable joinTableAnn, boolean noDelayInPkColumnCreation);
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/PropertyHolder.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/PropertyHolder.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/PropertyHolder.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/PropertyHolder.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,52 @@
+package org.hibernate.cfg;
+
+import javax.persistence.Column;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
+
+import org.hibernate.mapping.KeyValue;
+import org.hibernate.mapping.PersistentClass;
+import org.hibernate.mapping.Property;
+import org.hibernate.mapping.Table;
+import org.hibernate.mapping.Join;
+
+/**
+ * Property holder abstract property containers from their direct implementation
+ *
+ * @author Emmanuel Bernard
+ */
+public interface PropertyHolder {
+	String getClassName();
+
+	String getEntityOwnerClassName();
+
+	Table getTable();
+
+	void addProperty(Property prop);
+
+	KeyValue getIdentifier();
+
+	PersistentClass getPersistentClass();
+
+	boolean isComponent();
+
+	void setParentProperty(String parentProperty);
+
+	String getPath();
+
+	/**
+	 * return null if the column is not overridden, or an array of column if true
+	 */
+	Column[] getOverriddenColumn(String propertyName);
+
+	/**
+	 * return null if the column is not overridden, or an array of column if true
+	 */
+	JoinColumn[] getOverriddenJoinColumn(String propertyName);
+
+	String getEntityName();
+
+	void addProperty(Property prop, Ejb3Column[] columns);
+
+	Join addJoin(JoinTable joinTableAnn, boolean noDelayInPkColumnCreation);
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/PropertyHolderBuilder.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/PropertyHolderBuilder.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/PropertyHolderBuilder.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,67 +0,0 @@
-//$Id$
-package org.hibernate.cfg;
-
-import java.util.Map;
-
-import org.hibernate.cfg.annotations.EntityBinder;
-import org.hibernate.mapping.Collection;
-import org.hibernate.mapping.Component;
-import org.hibernate.mapping.Join;
-import org.hibernate.mapping.PersistentClass;
-import org.hibernate.annotations.common.reflection.XClass;
-import org.hibernate.annotations.common.reflection.XProperty;
-
-/**
- * This factory is here ot build a PropertyHolder and prevent .mapping interface adding
- *
- * @author Emmanuel Bernard
- */
-public final class PropertyHolderBuilder {
-	private PropertyHolderBuilder() {
-	}
-
-	public static PropertyHolder buildPropertyHolder(
-			XClass clazzToProcess,
-			PersistentClass persistentClass,
-			EntityBinder entityBinder,
-			//Map<String, Join> joins,
-			ExtendedMappings mappings
-	) {
-		return (PropertyHolder) new ClassPropertyHolder( persistentClass, clazzToProcess, entityBinder, mappings );
-	}
-
-	/**
-	 * build a component property holder
-	 *
-	 * @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,
-			ExtendedMappings mappings
-	) {
-		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,
-			PropertyHolder parentPropertyHolder, ExtendedMappings mappings
-	) {
-		return new CollectionPropertyHolder( collection, path, clazzToProcess, property, parentPropertyHolder, mappings );
-	}
-
-	/**
-	 * must only be used on second level phases (<join> has to be settled already)
-	 */
-	public static PropertyHolder buildPropertyHolder(
-			PersistentClass persistentClass, Map<String, Join> joins,
-			ExtendedMappings mappings
-	) {
-		return (PropertyHolder) new ClassPropertyHolder( persistentClass, null, joins, mappings );
-	}
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/PropertyHolderBuilder.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/PropertyHolderBuilder.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/PropertyHolderBuilder.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/PropertyHolderBuilder.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,67 @@
+//$Id$
+package org.hibernate.cfg;
+
+import java.util.Map;
+
+import org.hibernate.cfg.annotations.EntityBinder;
+import org.hibernate.mapping.Collection;
+import org.hibernate.mapping.Component;
+import org.hibernate.mapping.Join;
+import org.hibernate.mapping.PersistentClass;
+import org.hibernate.annotations.common.reflection.XClass;
+import org.hibernate.annotations.common.reflection.XProperty;
+
+/**
+ * This factory is here ot build a PropertyHolder and prevent .mapping interface adding
+ *
+ * @author Emmanuel Bernard
+ */
+public final class PropertyHolderBuilder {
+	private PropertyHolderBuilder() {
+	}
+
+	public static PropertyHolder buildPropertyHolder(
+			XClass clazzToProcess,
+			PersistentClass persistentClass,
+			EntityBinder entityBinder,
+			//Map<String, Join> joins,
+			ExtendedMappings mappings
+	) {
+		return (PropertyHolder) new ClassPropertyHolder( persistentClass, clazzToProcess, entityBinder, mappings );
+	}
+
+	/**
+	 * build a component property holder
+	 *
+	 * @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,
+			ExtendedMappings mappings
+	) {
+		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,
+			PropertyHolder parentPropertyHolder, ExtendedMappings mappings
+	) {
+		return new CollectionPropertyHolder( collection, path, clazzToProcess, property, parentPropertyHolder, mappings );
+	}
+
+	/**
+	 * must only be used on second level phases (<join> has to be settled already)
+	 */
+	public static PropertyHolder buildPropertyHolder(
+			PersistentClass persistentClass, Map<String, Join> joins,
+			ExtendedMappings mappings
+	) {
+		return (PropertyHolder) new ClassPropertyHolder( persistentClass, null, joins, mappings );
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/PropertyInferredData.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/PropertyInferredData.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/PropertyInferredData.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,72 +0,0 @@
-//$Id$
-package org.hibernate.cfg;
-
-import org.hibernate.MappingException;
-import org.hibernate.annotations.AccessType;
-import org.hibernate.annotations.Target;
-import org.hibernate.annotations.common.reflection.XClass;
-import org.hibernate.annotations.common.reflection.XProperty;
-import org.hibernate.annotations.common.reflection.ReflectionManager;
-
-/**
- * Retrieve all inferred data from an annnoted element
- *
- * @author Emmanuel Bernard
- * @author Paolo Perrotta
- */
-public class PropertyInferredData implements PropertyData {
-	private final String defaultAccess;
-
-	private final XProperty property;
-	private final ReflectionManager reflectionManager;
-
-	/**
-	 * Take the annoted element for lazy process
-	 */
-	public PropertyInferredData(XProperty property, String propertyAccessor, ReflectionManager reflectionManager) {
-		this.property = property;
-		this.defaultAccess = propertyAccessor;
-		this.reflectionManager = reflectionManager;
-	}
-
-	public String getDefaultAccess() throws MappingException {
-		// if(skip())
-		// return defaultAccess;
-		AccessType access = property.getAnnotation( AccessType.class );
-		return access != null ? access.value() : defaultAccess;
-	}
-
-	public String getPropertyName() throws MappingException {
-		return property.getName();
-	}
-
-	public XClass getPropertyClass() throws MappingException {
-		if ( property.isAnnotationPresent( Target.class ) ) {
-			return reflectionManager.toXClass( property.getAnnotation( Target.class ).value() );
-		}
-		else {
-			return property.getType();
-		}
-	}
-
-	public XClass getClassOrElement() throws MappingException {
-		if ( property.isAnnotationPresent( Target.class ) ) {
-			return reflectionManager.toXClass( property.getAnnotation( Target.class ).value() );
-		}
-		else {
-			return property.getClassOrElementClass();
-		}
-	}
-
-	public String getClassOrElementName() throws MappingException {
-		return getClassOrElement().getName();
-	}
-
-	public String getTypeName() throws MappingException {
-		return getPropertyClass().getName();
-	}
-
-	public XProperty getProperty() {
-		return property;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/PropertyInferredData.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/PropertyInferredData.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/PropertyInferredData.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/PropertyInferredData.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,72 @@
+//$Id$
+package org.hibernate.cfg;
+
+import org.hibernate.MappingException;
+import org.hibernate.annotations.AccessType;
+import org.hibernate.annotations.Target;
+import org.hibernate.annotations.common.reflection.XClass;
+import org.hibernate.annotations.common.reflection.XProperty;
+import org.hibernate.annotations.common.reflection.ReflectionManager;
+
+/**
+ * Retrieve all inferred data from an annnoted element
+ *
+ * @author Emmanuel Bernard
+ * @author Paolo Perrotta
+ */
+public class PropertyInferredData implements PropertyData {
+	private final String defaultAccess;
+
+	private final XProperty property;
+	private final ReflectionManager reflectionManager;
+
+	/**
+	 * Take the annoted element for lazy process
+	 */
+	public PropertyInferredData(XProperty property, String propertyAccessor, ReflectionManager reflectionManager) {
+		this.property = property;
+		this.defaultAccess = propertyAccessor;
+		this.reflectionManager = reflectionManager;
+	}
+
+	public String getDefaultAccess() throws MappingException {
+		// if(skip())
+		// return defaultAccess;
+		AccessType access = property.getAnnotation( AccessType.class );
+		return access != null ? access.value() : defaultAccess;
+	}
+
+	public String getPropertyName() throws MappingException {
+		return property.getName();
+	}
+
+	public XClass getPropertyClass() throws MappingException {
+		if ( property.isAnnotationPresent( Target.class ) ) {
+			return reflectionManager.toXClass( property.getAnnotation( Target.class ).value() );
+		}
+		else {
+			return property.getType();
+		}
+	}
+
+	public XClass getClassOrElement() throws MappingException {
+		if ( property.isAnnotationPresent( Target.class ) ) {
+			return reflectionManager.toXClass( property.getAnnotation( Target.class ).value() );
+		}
+		else {
+			return property.getClassOrElementClass();
+		}
+	}
+
+	public String getClassOrElementName() throws MappingException {
+		return getClassOrElement().getName();
+	}
+
+	public String getTypeName() throws MappingException {
+		return getPropertyClass().getName();
+	}
+
+	public XProperty getProperty() {
+		return property;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/PropertyPreloadedData.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/PropertyPreloadedData.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/PropertyPreloadedData.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,48 +0,0 @@
-//$Id$
-package org.hibernate.cfg;
-
-import org.hibernate.MappingException;
-import org.hibernate.annotations.common.reflection.XClass;
-import org.hibernate.annotations.common.reflection.XProperty;
-
-public class PropertyPreloadedData implements PropertyData {
-	private final String defaultAccess;
-
-	private final String propertyName;
-
-	private final XClass returnedClass;
-
-	public PropertyPreloadedData(String defaultAccess, String propertyName, XClass returnedClass) {
-		this.defaultAccess = defaultAccess;
-		this.propertyName = propertyName;
-		this.returnedClass = returnedClass;
-	}
-
-	public String getDefaultAccess() throws MappingException {
-		return defaultAccess;
-	}
-
-	public String getPropertyName() throws MappingException {
-		return propertyName;
-	}
-
-	public XClass getClassOrElement() throws MappingException {
-		return getPropertyClass();
-	}
-
-	public XClass getPropertyClass() throws MappingException {
-		return returnedClass;
-	}
-
-	public String getClassOrElementName() throws MappingException {
-		return getTypeName();
-	}
-
-	public String getTypeName() throws MappingException {
-		return returnedClass == null ? null : returnedClass.getName();
-	}
-
-	public XProperty getProperty() {
-		return null; //instead of UnsupportedOperationException
-	}
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/PropertyPreloadedData.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/PropertyPreloadedData.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/PropertyPreloadedData.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/PropertyPreloadedData.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,48 @@
+//$Id$
+package org.hibernate.cfg;
+
+import org.hibernate.MappingException;
+import org.hibernate.annotations.common.reflection.XClass;
+import org.hibernate.annotations.common.reflection.XProperty;
+
+public class PropertyPreloadedData implements PropertyData {
+	private final String defaultAccess;
+
+	private final String propertyName;
+
+	private final XClass returnedClass;
+
+	public PropertyPreloadedData(String defaultAccess, String propertyName, XClass returnedClass) {
+		this.defaultAccess = defaultAccess;
+		this.propertyName = propertyName;
+		this.returnedClass = returnedClass;
+	}
+
+	public String getDefaultAccess() throws MappingException {
+		return defaultAccess;
+	}
+
+	public String getPropertyName() throws MappingException {
+		return propertyName;
+	}
+
+	public XClass getClassOrElement() throws MappingException {
+		return getPropertyClass();
+	}
+
+	public XClass getPropertyClass() throws MappingException {
+		return returnedClass;
+	}
+
+	public String getClassOrElementName() throws MappingException {
+		return getTypeName();
+	}
+
+	public String getTypeName() throws MappingException {
+		return returnedClass == null ? null : returnedClass.getName();
+	}
+
+	public XProperty getProperty() {
+		return null; //instead of UnsupportedOperationException
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/WrappedInferredData.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/WrappedInferredData.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/WrappedInferredData.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,48 +0,0 @@
-//$Id: $
-package org.hibernate.cfg;
-
-import org.hibernate.annotations.common.reflection.XClass;
-import org.hibernate.annotations.common.reflection.XProperty;
-import org.hibernate.MappingException;
-import org.hibernate.util.StringHelper;
-
-/**
- * @author Emmanuel Bernard
- */
-public class WrappedInferredData implements PropertyData {
-	private PropertyData wrappedInferredData;
-	private String propertyName;
-
-	public XClass getClassOrElement() throws MappingException {
-		return wrappedInferredData.getClassOrElement();
-	}
-
-	public String getClassOrElementName() throws MappingException {
-		return wrappedInferredData.getClassOrElementName();
-	}
-
-	public String getDefaultAccess() {
-		return wrappedInferredData.getDefaultAccess();
-	}
-
-	public XProperty getProperty() {
-		return wrappedInferredData.getProperty();
-	}
-
-	public XClass getPropertyClass() throws MappingException {
-		return wrappedInferredData.getPropertyClass();
-	}
-
-	public String getPropertyName() throws MappingException {
-		return propertyName;
-	}
-
-	public String getTypeName() throws MappingException {
-		return wrappedInferredData.getTypeName();
-	}
-
-	public WrappedInferredData(PropertyData inferredData, String suffix) {
-		this.wrappedInferredData = inferredData;
-		this.propertyName = StringHelper.qualify( inferredData.getPropertyName(), suffix );
-	}
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/WrappedInferredData.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/WrappedInferredData.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/WrappedInferredData.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/WrappedInferredData.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,48 @@
+//$Id: $
+package org.hibernate.cfg;
+
+import org.hibernate.annotations.common.reflection.XClass;
+import org.hibernate.annotations.common.reflection.XProperty;
+import org.hibernate.MappingException;
+import org.hibernate.util.StringHelper;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class WrappedInferredData implements PropertyData {
+	private PropertyData wrappedInferredData;
+	private String propertyName;
+
+	public XClass getClassOrElement() throws MappingException {
+		return wrappedInferredData.getClassOrElement();
+	}
+
+	public String getClassOrElementName() throws MappingException {
+		return wrappedInferredData.getClassOrElementName();
+	}
+
+	public String getDefaultAccess() {
+		return wrappedInferredData.getDefaultAccess();
+	}
+
+	public XProperty getProperty() {
+		return wrappedInferredData.getProperty();
+	}
+
+	public XClass getPropertyClass() throws MappingException {
+		return wrappedInferredData.getPropertyClass();
+	}
+
+	public String getPropertyName() throws MappingException {
+		return propertyName;
+	}
+
+	public String getTypeName() throws MappingException {
+		return wrappedInferredData.getTypeName();
+	}
+
+	public WrappedInferredData(PropertyData inferredData, String suffix) {
+		this.wrappedInferredData = inferredData;
+		this.propertyName = StringHelper.qualify( inferredData.getPropertyName(), suffix );
+	}
+}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations)

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/ArrayBinder.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/ArrayBinder.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/ArrayBinder.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,20 +0,0 @@
-package org.hibernate.cfg.annotations;
-
-import org.hibernate.mapping.Array;
-import org.hibernate.mapping.Collection;
-import org.hibernate.mapping.PersistentClass;
-
-/**
- * Bind an Array
- *
- * @author Anthony Patricio
- */
-public class ArrayBinder extends ListBinder {
-
-	public ArrayBinder() {
-	}
-
-	protected Collection createCollection(PersistentClass persistentClass) {
-		return new Array( persistentClass );
-	}
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/ArrayBinder.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/ArrayBinder.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/ArrayBinder.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/ArrayBinder.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,20 @@
+package org.hibernate.cfg.annotations;
+
+import org.hibernate.mapping.Array;
+import org.hibernate.mapping.Collection;
+import org.hibernate.mapping.PersistentClass;
+
+/**
+ * Bind an Array
+ *
+ * @author Anthony Patricio
+ */
+public class ArrayBinder extends ListBinder {
+
+	public ArrayBinder() {
+	}
+
+	protected Collection createCollection(PersistentClass persistentClass) {
+		return new Array( persistentClass );
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/BagBinder.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/BagBinder.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/BagBinder.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,19 +0,0 @@
-package org.hibernate.cfg.annotations;
-
-import org.hibernate.mapping.Collection;
-import org.hibernate.mapping.PersistentClass;
-
-/**
- * Bind a bag.
- *
- * @author Matthew Inger
- */
-public class BagBinder extends CollectionBinder {
-
-	public BagBinder() {
-	}
-
-	protected Collection createCollection(PersistentClass persistentClass) {
-		return new org.hibernate.mapping.Bag( persistentClass );
-	}
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/BagBinder.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/BagBinder.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/BagBinder.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/BagBinder.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,19 @@
+package org.hibernate.cfg.annotations;
+
+import org.hibernate.mapping.Collection;
+import org.hibernate.mapping.PersistentClass;
+
+/**
+ * Bind a bag.
+ *
+ * @author Matthew Inger
+ */
+public class BagBinder extends CollectionBinder {
+
+	public BagBinder() {
+	}
+
+	protected Collection createCollection(PersistentClass persistentClass) {
+		return new org.hibernate.mapping.Bag( persistentClass );
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/CollectionBinder.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/CollectionBinder.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/CollectionBinder.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,1369 +0,0 @@
-package org.hibernate.cfg.annotations;
-
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.Iterator;
-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.JoinTable;
-import javax.persistence.ManyToMany;
-import javax.persistence.MapKey;
-import javax.persistence.OneToMany;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.hibernate.AnnotationException;
-import org.hibernate.AssertionFailure;
-import org.hibernate.FetchMode;
-import org.hibernate.MappingException;
-import org.hibernate.engine.ExecuteUpdateResultCheckStyle;
-import org.hibernate.annotations.BatchSize;
-import org.hibernate.annotations.Cache;
-import org.hibernate.annotations.CollectionId;
-import org.hibernate.annotations.CollectionOfElements;
-import org.hibernate.annotations.Fetch;
-import org.hibernate.annotations.Filter;
-import org.hibernate.annotations.FilterJoinTable;
-import org.hibernate.annotations.FilterJoinTables;
-import org.hibernate.annotations.Filters;
-import org.hibernate.annotations.ForeignKey;
-import org.hibernate.annotations.LazyCollection;
-import org.hibernate.annotations.LazyCollectionOption;
-import org.hibernate.annotations.OrderBy;
-import org.hibernate.annotations.Sort;
-import org.hibernate.annotations.SortType;
-import org.hibernate.annotations.Where;
-import org.hibernate.annotations.WhereJoinTable;
-import org.hibernate.annotations.SQLInsert;
-import org.hibernate.annotations.SQLUpdate;
-import org.hibernate.annotations.SQLDelete;
-import org.hibernate.annotations.SQLDeleteAll;
-import org.hibernate.annotations.Loader;
-import org.hibernate.annotations.Immutable;
-import org.hibernate.annotations.OptimisticLock;
-import org.hibernate.annotations.Persister;
-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.IndexColumn;
-import org.hibernate.cfg.PropertyData;
-import org.hibernate.cfg.PropertyHolder;
-import org.hibernate.cfg.PropertyHolderBuilder;
-import org.hibernate.cfg.PropertyPreloadedData;
-import org.hibernate.cfg.SecondPass;
-import org.hibernate.mapping.Backref;
-import org.hibernate.mapping.Collection;
-import org.hibernate.mapping.Column;
-import org.hibernate.mapping.Component;
-import org.hibernate.mapping.DependantValue;
-import org.hibernate.mapping.IdGenerator;
-import org.hibernate.mapping.Join;
-import org.hibernate.mapping.KeyValue;
-import org.hibernate.mapping.ManyToOne;
-import org.hibernate.mapping.PersistentClass;
-import org.hibernate.mapping.Property;
-import org.hibernate.mapping.Selectable;
-import org.hibernate.mapping.SimpleValue;
-import org.hibernate.mapping.Table;
-import org.hibernate.annotations.common.reflection.XClass;
-import org.hibernate.annotations.common.reflection.XProperty;
-import org.hibernate.util.StringHelper;
-
-/**
- * Collection binder
- *
- * @author inger
- * @author Emmanuel Bernard
- */
-public abstract class CollectionBinder {
-
-	private static final Log log = LogFactory.getLog( CollectionBinder.class );
-
-	protected Collection collection;
-	protected String propertyName;
-	PropertyHolder propertyHolder;
-	int batchSize;
-	private String mappedBy;
-	private XClass collectionType;
-	private XClass targetEntity;
-	private ExtendedMappings mappings;
-	private Ejb3JoinColumn[] inverseJoinColumns;
-	private String cascadeStrategy;
-	String cacheConcurrencyStrategy;
-	String cacheRegionName;
-	private boolean oneToMany;
-	protected IndexColumn indexColumn;
-	private String orderBy;
-	protected String hqlOrderBy;
-	private boolean isSorted;
-	private Class comparator;
-	private boolean hasToBeSorted;
-	protected boolean cascadeDeleteEnabled;
-	protected String mapKeyPropertyName;
-	private boolean insertable = true;
-	private boolean updatable = true;
-	private Ejb3JoinColumn[] fkJoinColumns;
-	private boolean isExplicitAssociationTable;
-	private Ejb3Column[] elementColumns;
-	private boolean isEmbedded;
-	private XProperty property;
-	private boolean ignoreNotFound;
-	private TableBinder tableBinder;
-	private Ejb3Column[] mapKeyColumns;
-	private Ejb3JoinColumn[] mapKeyManyToManyColumns;
-	protected HashMap<String, IdGenerator> localGenerators;
-
-	public void setUpdatable(boolean updatable) {
-		this.updatable = updatable;
-	}
-
-	public void setInsertable(boolean insertable) {
-		this.insertable = insertable;
-	}
-
-
-	public void setCascadeStrategy(String cascadeStrategy) {
-		this.cascadeStrategy = cascadeStrategy;
-	}
-
-	public void setPropertyAccessorName(String propertyAccessorName) {
-		this.propertyAccessorName = propertyAccessorName;
-	}
-
-	private String propertyAccessorName;
-
-	public void setInverseJoinColumns(Ejb3JoinColumn[] inverseJoinColumns) {
-		this.inverseJoinColumns = inverseJoinColumns;
-	}
-
-	public void setJoinColumns(Ejb3JoinColumn[] joinColumns) {
-		this.joinColumns = joinColumns;
-	}
-
-	private Ejb3JoinColumn[] joinColumns;
-
-	public void setPropertyHolder(PropertyHolder propertyHolder) {
-		this.propertyHolder = propertyHolder;
-	}
-
-	public void setBatchSize(BatchSize batchSize) {
-		this.batchSize = batchSize == null ? -1 : batchSize.size();
-	}
-
-	public void setEjb3OrderBy(javax.persistence.OrderBy orderByAnn) {
-		if ( orderByAnn != null ) {
-			hqlOrderBy = orderByAnn.value();
-		}
-	}
-
-	public void setSqlOrderBy(OrderBy orderByAnn) {
-		if ( orderByAnn != null ) {
-			if ( ! BinderHelper.isDefault( orderByAnn.clause() ) ) orderBy = orderByAnn.clause();
-		}
-	}
-
-	public void setSort(Sort sortAnn) {
-		if ( sortAnn != null ) {
-			isSorted = ! SortType.UNSORTED.equals( sortAnn.type() );
-			if ( isSorted && SortType.COMPARATOR.equals( sortAnn.type() ) ) {
-				comparator = sortAnn.comparator();
-			}
-		}
-	}
-
-	/**
-	 * collection binder factory
-	 */
-	public static CollectionBinder getCollectionBinder(
-			String entityName, XProperty property,
-			boolean isIndexed
-	) {
-		if ( property.isArray() ) {
-			if ( property.getElementClass().isPrimitive() ) {
-				return new PrimitiveArrayBinder();
-			}
-			else {
-				return new ArrayBinder();
-			}
-		}
-		else if ( property.isCollection() ) {
-			//TODO consider using an XClass
-			Class returnedClass = property.getCollectionClass();
-			if ( java.util.Set.class.equals( returnedClass ) ) {
-				return new SetBinder();
-			}
-			else if ( java.util.SortedSet.class.equals( returnedClass ) ) {
-				return new SetBinder( true );
-			}
-			else if ( java.util.Map.class.equals( returnedClass ) ) {
-				return new MapBinder();
-			}
-			else if ( java.util.SortedMap.class.equals( returnedClass ) ) {
-				return new MapBinder(true);
-			}
-			else if ( java.util.Collection.class.equals( returnedClass ) ) {
-				if ( property.isAnnotationPresent( CollectionId.class ) ) {
-					return new IdBagBinder();
-				}
-				else {
-					return new BagBinder();
-				}
-			}
-			else if ( java.util.List.class.equals( returnedClass ) ) {
-				if ( isIndexed ) {
-					return new ListBinder();
-				}
-				else if ( property.isAnnotationPresent( CollectionId.class ) ) {
-					return new IdBagBinder();
-				}
-				else {
-					return new BagBinder();
-				}
-			}
-			else {
-				throw new AnnotationException(
-						returnedClass.getName() + " collection not yet supported: "
-								+ StringHelper.qualify( entityName, property.getName() )
-				);
-			}
-		}
-		else {
-			throw new AnnotationException(
-					"Illegal attempt to map a non collection as a @OneToMany, @ManyToMany or @CollectionOfElements: "
-							+ StringHelper.qualify( entityName, property.getName() )
-			);
-		}
-	}
-
-	protected CollectionBinder() {
-	}
-
-	protected CollectionBinder(boolean sorted) {
-		this.hasToBeSorted = sorted;
-	}
-
-	public void setMappedBy(String mappedBy) {
-		this.mappedBy = mappedBy;
-	}
-
-	public void setTableBinder(TableBinder tableBinder) {
-		this.tableBinder = tableBinder;
-	}
-
-	public void setCollectionType(XClass collectionType) {
-		this.collectionType = collectionType;
-	}
-
-	public void setTargetEntity(XClass targetEntity) {
-		this.targetEntity = targetEntity;
-	}
-
-	public void setMappings(ExtendedMappings mappings) {
-		this.mappings = mappings;
-	}
-
-	protected abstract Collection createCollection(PersistentClass persistentClass);
-
-	public Collection getCollection() {
-		return collection;
-	}
-
-	public void setPropertyName(String propertyName) {
-		this.propertyName = propertyName;
-	}
-
-	public void bind() {
-		this.collection = createCollection( propertyHolder.getPersistentClass() );
-		log.debug( "Collection role: " + StringHelper.qualify( propertyHolder.getPath(), propertyName ) );
-		collection.setRole( StringHelper.qualify( propertyHolder.getPath(), propertyName ) );
-		collection.setNodeName( propertyName );
-
-		if ( property.isAnnotationPresent( org.hibernate.annotations.MapKey.class ) && mapKeyPropertyName != null ) {
-			throw new AnnotationException(
-					"Cannot mix @javax.persistence.MapKey and @org.hibernate.annotations.MapKey "
-							+ "on the same collection: " + StringHelper.qualify(
-							propertyHolder.getPath(), propertyName
-					)
-			);
-		}
-
-		//set laziness
-		defineFetchingStrategy();
-		//collection.setFetchMode( fetchMode );
-		//collection.setLazy( fetchMode == FetchMode.SELECT );
-		collection.setBatchSize( batchSize );
-		if ( orderBy != null && hqlOrderBy != null ) {
-			throw new AnnotationException(
-					"Cannot use sql order by clause in conjunction of EJB3 order by clause: " + safeCollectionRole()
-			);
-		}
-
-		collection.setMutable( ! property.isAnnotationPresent( Immutable.class ) );
-		OptimisticLock lockAnn = property.getAnnotation( OptimisticLock.class );
-		if (lockAnn != null) collection.setOptimisticLocked( ! lockAnn.excluded() );
-		Persister persisterAnn = property.getAnnotation( Persister.class );
-		if ( persisterAnn != null ) collection.setCollectionPersisterClass( persisterAnn.impl() );		
-
-		// set ordering
-		if ( orderBy != null ) collection.setOrderBy( orderBy );
-		if ( isSorted ) {
-			collection.setSorted( true );
-			if ( comparator != null ) {
-				try {
-					collection.setComparator( (Comparator) comparator.newInstance() );
-				}
-				catch (ClassCastException e) {
-					throw new AnnotationException(
-							"Comparator not implementing java.util.Comparator class: "
-									+ comparator.getName() + "(" + safeCollectionRole() + ")"
-					);
-				}
-				catch (Exception e) {
-					throw new AnnotationException(
-							"Could not instantiate comparator class: "
-									+ comparator.getName() + "(" + safeCollectionRole() + ")"
-					);
-				}
-			}
-		}
-		else {
-			if ( hasToBeSorted ) {
-				throw new AnnotationException(
-						"A sorted collection has to define @Sort: "
-								+ safeCollectionRole()
-				);
-			}
-		}
-
-		//set cache
-		if ( StringHelper.isNotEmpty( cacheConcurrencyStrategy ) ) {
-			collection.setCacheConcurrencyStrategy( cacheConcurrencyStrategy );
-			collection.setCacheRegionName( cacheRegionName );
-		}
-
-		//SQL overriding
-		SQLInsert sqlInsert = property.getAnnotation( SQLInsert.class );
-		SQLUpdate sqlUpdate = property.getAnnotation( SQLUpdate.class );
-		SQLDelete sqlDelete = property.getAnnotation( SQLDelete.class );
-		SQLDeleteAll sqlDeleteAll = property.getAnnotation( SQLDeleteAll.class );
-		Loader loader = property.getAnnotation( Loader.class );
-		if ( sqlInsert != null ) {
-			collection.setCustomSQLInsert( sqlInsert.sql().trim(), sqlInsert.callable(),
-					ExecuteUpdateResultCheckStyle.parse( sqlInsert.check().toString().toLowerCase() )
-			);
-
-		}
-		if ( sqlUpdate != null ) {
-			collection.setCustomSQLUpdate( sqlUpdate.sql(), sqlUpdate.callable(),
-					ExecuteUpdateResultCheckStyle.parse( sqlUpdate.check().toString().toLowerCase() )
-			);
-		}
-		if ( sqlDelete != null ) {
-			collection.setCustomSQLDelete( sqlDelete.sql(), sqlDelete.callable(),
-					ExecuteUpdateResultCheckStyle.parse( sqlDelete.check().toString().toLowerCase() )
-			);
-		}
-		if ( sqlDeleteAll != null ) {
-			collection.setCustomSQLDeleteAll( sqlDeleteAll.sql(), sqlDeleteAll.callable(),
-					ExecuteUpdateResultCheckStyle.parse( sqlDeleteAll.check().toString().toLowerCase() )
-			);
-		}
-		if ( loader != null ) {
-			collection.setLoaderName( loader.namedQuery() );
-		}
-
-		//work on association
-		boolean isMappedBy = ! BinderHelper.isDefault( mappedBy );
-		collection.setInverse( isMappedBy );
-		
-		//many to many may need some second pass informations
-		if ( ! oneToMany && isMappedBy ) {
-			mappings.addMappedBy( getCollectionType().getName(), mappedBy, propertyName );
-		}
-		//TODO reducce tableBinder != null and oneToMany
-		//FIXME collection of elements shouldn't be executed as a secondpass
-		SecondPass sp = getSecondPass(
-				fkJoinColumns,
-				joinColumns,
-				inverseJoinColumns,
-				elementColumns,
-				mapKeyColumns, mapKeyManyToManyColumns, isEmbedded,
-				property, getCollectionType(),
-				ignoreNotFound, oneToMany,
-				tableBinder, mappings
-		);
-		XClass collectionType = getCollectionType();
-		if ( collectionType.isAnnotationPresent( Embeddable.class )
-				|| property.isAnnotationPresent( CollectionOfElements.class ) ) {
-			// do it right away, otherwise @ManyToon on composite element call addSecondPass 
-			// and raise a ConcurrentModificationException
-			//sp.doSecondPass( CollectionHelper.EMPTY_MAP );
-			mappings.addSecondPass( sp, ! isMappedBy );
-		}
-		else {
-			mappings.addSecondPass( sp, ! isMappedBy );
-		}
-
-		mappings.addCollection( collection );
-
-		//property building
-		PropertyBinder binder = new PropertyBinder();
-		binder.setName( propertyName );
-		binder.setValue( collection );
-		binder.setCascade( cascadeStrategy );
-		if ( cascadeStrategy != null && cascadeStrategy.indexOf( "delete-orphan" ) >= 0 ) {
-			collection.setOrphanDelete( true );
-		}
-		binder.setPropertyAccessorName( propertyAccessorName );
-		binder.setProperty( property );
-		binder.setInsertable( insertable );
-		binder.setUpdatable( updatable );
-		Property prop = binder.make();
-		//we don't care about the join stuffs because the column is on the association table.
-		propertyHolder.addProperty( prop );
-	}
-
-	private void defineFetchingStrategy() {
-		LazyCollection lazy = property.getAnnotation( LazyCollection.class );
-		Fetch fetch = property.getAnnotation( Fetch.class );
-		OneToMany oneToMany = property.getAnnotation( OneToMany.class );
-		ManyToMany manyToMany = property.getAnnotation( ManyToMany.class );
-		CollectionOfElements elements = property.getAnnotation( CollectionOfElements.class );
-		FetchType fetchType;
-		if ( oneToMany != null ) {
-			fetchType = oneToMany.fetch();
-		}
-		else if ( manyToMany != null ) {
-			fetchType = manyToMany.fetch();
-		}
-		else if ( elements != null ) {
-			fetchType = elements.fetch();
-		}
-		else {
-			throw new AssertionFailure(
-					"Define fetch strategy on a property not annotated with @ManyToOne nor @OneToMany nor @CollectionOfElements"
-			);
-		}
-		if ( lazy != null ) {
-			collection.setLazy( ! ( lazy.value() == LazyCollectionOption.FALSE ) );
-			collection.setExtraLazy( lazy.value() == LazyCollectionOption.EXTRA );
-		}
-		else {
-			collection.setLazy( fetchType == FetchType.LAZY );
-			collection.setExtraLazy( false );
-		}
-		if ( fetch != null ) {
-			if ( fetch.value() == org.hibernate.annotations.FetchMode.JOIN ) {
-				collection.setFetchMode( FetchMode.JOIN );
-				collection.setLazy( false );
-			}
-			else if ( fetch.value() == org.hibernate.annotations.FetchMode.SELECT ) {
-				collection.setFetchMode( FetchMode.SELECT );
-			}
-			else if ( fetch.value() == org.hibernate.annotations.FetchMode.SUBSELECT ) {
-				collection.setFetchMode( FetchMode.SELECT );
-				collection.setSubselectLoadable( true );
-				collection.getOwner().setSubselectLoadableCollections( true );
-			}
-			else {
-				throw new AssertionFailure( "Unknown FetchMode: " + fetch.value() );
-			}
-		}
-		else {
-			collection.setFetchMode( AnnotationBinder.getFetchMode( fetchType ) );
-		}
-	}
-
-	private XClass getCollectionType() {
-		if ( AnnotationBinder.isDefault( targetEntity, mappings ) ) {
-			if ( collectionType != null ) {
-				return collectionType;
-			}
-			else {
-				String errorMsg = "Collection has neither generic type or OneToMany.targetEntity() defined: "
-						+ safeCollectionRole();
-				throw new AnnotationException( errorMsg );
-			}
-		}
-		else {
-			return targetEntity;
-		}
-	}
-
-	public SecondPass getSecondPass(
-			final Ejb3JoinColumn[] fkJoinColumns, final Ejb3JoinColumn[] keyColumns,
-			final Ejb3JoinColumn[] inverseColumns,
-			final Ejb3Column[] elementColumns,
-			final Ejb3Column[] mapKeyColumns, final Ejb3JoinColumn[] mapKeyManyToManyColumns, final boolean isEmbedded,
-			final XProperty property, final XClass collType,
-			final boolean ignoreNotFound, final boolean unique,
-			final TableBinder assocTableBinder, final ExtendedMappings mappings
-	) {
-
-		return new CollectionSecondPass( mappings, collection ) {
-
-			public void secondPass(java.util.Map persistentClasses, java.util.Map inheritedMetas)
-					throws MappingException {
-				bindStarToManySecondPass(
-						persistentClasses, collType, fkJoinColumns, keyColumns, inverseColumns, elementColumns,
-						isEmbedded, property, unique, assocTableBinder, ignoreNotFound, mappings
-				);
-
-			}
-		};
-	}
-
-	/**
-	 * return true if it's a Fk, false if it's an association table
-	 */
-	protected boolean bindStarToManySecondPass(
-			Map persistentClasses, XClass collType, Ejb3JoinColumn[] fkJoinColumns,
-			Ejb3JoinColumn[] keyColumns, Ejb3JoinColumn[] inverseColumns, Ejb3Column[] elementColumns,
-			boolean isEmbedded,
-			XProperty property, boolean unique,
-			TableBinder associationTableBinder, boolean ignoreNotFound, ExtendedMappings mappings
-	) {
-		PersistentClass persistentClass = (PersistentClass) persistentClasses.get( collType.getName() );
-		boolean reversePropertyInJoin = false;
-		if ( persistentClass != null && StringHelper.isNotEmpty( this.mappedBy ) ) {
-			try {
-				reversePropertyInJoin = 0 != persistentClass.getJoinNumber(
-						persistentClass.getRecursiveProperty( this.mappedBy )
-				);
-			}
-			catch (MappingException e) {
-				StringBuilder error = new StringBuilder( 80 );
-				error.append( "mappedBy reference an unknown target entity property: " )
-						.append( collType ).append( "." ).append( this.mappedBy )
-						.append( " in " )
-						.append( collection.getOwnerEntityName() )
-						.append( "." )
-						.append( property.getName() );
-				throw new AnnotationException( error.toString() );
-			}
-		}
-		if ( persistentClass != null
-				&& ! reversePropertyInJoin
-				&& oneToMany
-				&& ! this.isExplicitAssociationTable
-				&& ( joinColumns[0].isImplicit() && ! BinderHelper.isDefault( this.mappedBy ) //implicit @JoinColumn
-				|| ! fkJoinColumns[0].isImplicit() ) //this is an explicit @JoinColumn
-				) {
-			//this is a Foreign key
-			bindOneToManySecondPass(
-					getCollection(),
-					persistentClasses,
-					fkJoinColumns,
-					collType,
-					cascadeDeleteEnabled,
-					ignoreNotFound, hqlOrderBy,
-					mappings
-			);
-			return true;
-		}
-		else {
-			//this is an association table
-			bindManyToManySecondPass(
-					this.collection,
-					persistentClasses,
-					keyColumns,
-					inverseColumns,
-					elementColumns,
-					isEmbedded, collType,
-					ignoreNotFound, unique,
-					cascadeDeleteEnabled,
-					associationTableBinder, property, propertyHolder, hqlOrderBy, mappings
-			);
-			return false;
-		}
-	}
-
-	protected void bindOneToManySecondPass(
-			Collection collection, Map persistentClasses, Ejb3JoinColumn[] fkJoinColumns,
-            XClass collectionType,
-			boolean cascadeDeleteEnabled, boolean ignoreNotFound, String hqlOrderBy, ExtendedMappings extendedMappings
-	) {
-		if ( log.isDebugEnabled() ) {
-			log.debug(
-					"Binding a OneToMany: " + propertyHolder.getEntityName() + "." + propertyName + " through a foreign key"
-			);
-		}
-		org.hibernate.mapping.OneToMany oneToMany = new org.hibernate.mapping.OneToMany( collection.getOwner() );
-		collection.setElement( oneToMany );
-		oneToMany.setReferencedEntityName( collectionType.getName() );
-		oneToMany.setIgnoreNotFound( ignoreNotFound );
-
-		String assocClass = oneToMany.getReferencedEntityName();
-		PersistentClass associatedClass = (PersistentClass) persistentClasses.get( assocClass );
-		String orderBy = buildOrderByClauseFromHql( hqlOrderBy, associatedClass, collection.getRole() );
-		if ( orderBy != null ) collection.setOrderBy( orderBy );
-		if ( mappings == null ) {
-			throw new AssertionFailure(
-					"CollectionSecondPass for oneToMany should not be called with null mappings"
-			);
-		}
-		Map<String, Join> joins = mappings.getJoins( assocClass );
-		if ( associatedClass == null ) {
-			throw new MappingException(
-					"Association references unmapped class: " + assocClass
-			);
-		}
-		oneToMany.setAssociatedClass( associatedClass );
-		for ( Ejb3JoinColumn column : fkJoinColumns ) {
-			column.setPersistentClass( associatedClass, joins );
-			column.setJoins( joins );
-			collection.setCollectionTable( column.getTable() );
-		}
-		log.info(
-				"Mapping collection: " + collection.getRole() + " -> " + collection.getCollectionTable().getName()
-		);
-		bindFilters(false);
-		bindCollectionSecondPass( collection, null, fkJoinColumns, cascadeDeleteEnabled, property, mappings );
-		if ( !collection.isInverse()
-				&& !collection.getKey().isNullable() ) {
-			// for non-inverse one-to-many, with a not-null fk, add a backref!
-			String entityName = oneToMany.getReferencedEntityName();
-			PersistentClass referenced = mappings.getClass( entityName );
-			Backref prop = new Backref();
-			prop.setName( '_' + fkJoinColumns[0].getPropertyName() + "Backref" );
-			prop.setUpdateable( false );
-			prop.setSelectable( false );
-			prop.setCollectionRole( collection.getRole() );
-			prop.setEntityName( collection.getOwner().getEntityName() );
-			prop.setValue( collection.getKey() );
-			referenced.addProperty( prop );
-		}
-	}
-
-	private void bindFilters(boolean hasAssociationTable) {
-		Filter simpleFilter = property.getAnnotation( Filter.class );
-		//set filtering
-		//test incompatible choices
-		//if ( StringHelper.isNotEmpty( where ) ) collection.setWhere( where );
-		if (simpleFilter != null) {
-			if (hasAssociationTable) {
-				collection.addManyToManyFilter( simpleFilter.name(), getCondition( simpleFilter ) );
-			}
-			else {
-				collection.addFilter( simpleFilter.name(), getCondition( simpleFilter ) );
-			}
-		}
-		Filters filters = property.getAnnotation( Filters.class );
-		if (filters != null) {
-			for ( Filter filter : filters.value() ) {
-				if (hasAssociationTable) {
-					collection.addManyToManyFilter( filter.name(), getCondition( filter ) );
-				}
-				else {
-					collection.addFilter( filter.name(), getCondition( filter ) );
-				}
-			}
-		}
-		FilterJoinTable simpleFilterJoinTable = property.getAnnotation( FilterJoinTable.class );
-		if (simpleFilterJoinTable != null) {
-			if (hasAssociationTable) {
-				collection.addFilter( simpleFilterJoinTable.name(), getCondition( simpleFilterJoinTable ) );
-			}
-			else {
-				throw new AnnotationException(
-						"Illegal use of @FilterJoinTable on an association without join table:"
-								+ StringHelper.qualify( propertyHolder.getPath(), propertyName )
-				);
-			}
-		}
-		FilterJoinTables filterJoinTables = property.getAnnotation( FilterJoinTables.class );
-		if (filterJoinTables != null) {
-			for ( FilterJoinTable filter : filterJoinTables.value() ) {
-				if (hasAssociationTable) {
-					collection.addFilter( filter.name(), getCondition( filter ) );
-				}
-				else {
-					throw new AnnotationException(
-							"Illegal use of @FilterJoinTable on an association without join table:"
-									+ StringHelper.qualify( propertyHolder.getPath(), propertyName )
-					);
-				}
-			}
-		}
-
-		Where where = property.getAnnotation( Where.class );
-		String whereClause = where == null ? null : where.clause();
-		if ( StringHelper.isNotEmpty( whereClause ) ) {
-			if (hasAssociationTable) {
-				collection.setManyToManyWhere( whereClause );
-			}
-			else {
-				collection.setWhere( whereClause );
-			}
-		}
-
-		WhereJoinTable whereJoinTable = property.getAnnotation( WhereJoinTable.class );
-		String whereJoinTableClause = whereJoinTable == null ? null : whereJoinTable.clause();
-		if ( StringHelper.isNotEmpty( whereJoinTableClause ) ) {
-			if (hasAssociationTable) {
-				collection.setWhere( whereJoinTableClause );
-			}
-			else {
-				throw new AnnotationException(
-						"Illegal use of @WhereJoinTable on an association without join table:"
-								+ StringHelper.qualify( propertyHolder.getPath(), propertyName )
-				);
-			}
-		}
-//		This cannot happen in annotations since the second fetch is hardcoded to join
-//		if ( ( ! collection.getManyToManyFilterMap().isEmpty() || collection.getManyToManyWhere() != null ) &&
-//		        collection.getFetchMode() == FetchMode.JOIN &&
-//		        collection.getElement().getFetchMode() != FetchMode.JOIN ) {
-//			throw new MappingException(
-//			        "association with join table  defining filter or where without join fetching " +
-//			        "not valid within collection using join fetching [" + collection.getRole() + "]"
-//				);
-//		}
-	}
-
-	private String getCondition(FilterJoinTable filter) {
-		//set filtering
-		String name = filter.name();
-		String cond = filter.condition();
-		return getCondition( cond, name );
-	}
-
-	private String getCondition(Filter filter) {
-		//set filtering
-		String name = filter.name();
-		String cond = filter.condition();
-		return getCondition( cond, name );
-	}
-
-	private String getCondition(String cond, String name) {
-		if ( BinderHelper.isDefault( cond ) ) {
-			cond = mappings.getFilterDefinition( name ).getDefaultFilterCondition();
-			if ( StringHelper.isEmpty( cond ) ) {
-				throw new AnnotationException(
-						"no filter condition found for filter " + name + " in "
-								+ StringHelper.qualify( propertyHolder.getPath(), propertyName )
-				);
-			}
-		}
-		return cond;
-	}
-
-	public void setCache(Cache cacheAnn) {
-		if ( cacheAnn != null ) {
-			cacheRegionName = BinderHelper.isDefault( cacheAnn.region() ) ? null : cacheAnn.region();
-			cacheConcurrencyStrategy = EntityBinder.getCacheConcurrencyStrategy( cacheAnn.usage() );
-		}
-		else {
-			cacheConcurrencyStrategy = null;
-			cacheRegionName = null;
-		}
-	}
-
-	public void setOneToMany(boolean oneToMany) {
-		this.oneToMany = oneToMany;
-	}
-
-	public void setIndexColumn(IndexColumn indexColumn) {
-		this.indexColumn = indexColumn;
-	}
-
-	public void setMapKey(MapKey key) {
-		if ( key != null ) {
-			mapKeyPropertyName = key.name();
-		}
-	}
-
-	private static String buildOrderByClauseFromHql(String hqlOrderBy, PersistentClass associatedClass, String role) {
-		String orderByString = null;
-		if ( hqlOrderBy != null ) {
-			List<String> properties = new ArrayList<String>();
-			List<String> ordering = new ArrayList<String>();
-			StringBuilder orderByBuffer = new StringBuilder();
-			if ( hqlOrderBy.length() == 0 ) {
-				//order by id
-				Iterator it = associatedClass.getIdentifier().getColumnIterator();
-				while ( it.hasNext() ) {
-					Selectable col = (Selectable) it.next();
-					orderByBuffer.append( col.getText() ).append( " asc" ).append( ", " );
-				}
-			}
-			else {
-				StringTokenizer st = new StringTokenizer( hqlOrderBy, " ,", false );
-				String currentOrdering = null;
-				//FIXME make this code decent
-				while ( st.hasMoreTokens() ) {
-					String token = st.nextToken();
-					if ( isNonPropertyToken( token ) ) {
-						if ( currentOrdering != null ) {
-							throw new AnnotationException(
-									"Error while parsing HQL orderBy clause: " + hqlOrderBy
-											+ " (" + role + ")"
-							);
-						}
-						currentOrdering = token;
-					}
-					else {
-						//Add ordering of the previous
-						if ( currentOrdering == null ) {
-							//default ordering
-							ordering.add( "asc" );
-						}
-						else {
-							ordering.add( currentOrdering );
-							currentOrdering = null;
-						}
-						properties.add( token );
-					}
-				}
-				ordering.remove( 0 ); //first one is the algorithm starter
-				// add last one ordering
-				if ( currentOrdering == null ) {
-					//default ordering
-					ordering.add( "asc" );
-				}
-				else {
-					ordering.add( currentOrdering );
-					currentOrdering = null;
-				}
-				int index = 0;
-
-				for ( String property : properties ) {
-					Property p = BinderHelper.findPropertyByName( associatedClass, property );
-					if ( p == null ) {
-						throw new AnnotationException(
-								"property from @OrderBy clause not found: "
-										+ associatedClass.getEntityName() + "." + property
-						);
-					}
-					PersistentClass pc = p.getPersistentClass();
-					String table;
-					if (pc != associatedClass) {
-						table = pc.getTable().getQuotedName() + ".";
-					}
-					else {
-						table = "";
-					}
-					Iterator propertyColumns = p.getColumnIterator();
-					while ( propertyColumns.hasNext() ) {
-						Selectable column = (Selectable) propertyColumns.next();
-						orderByBuffer.append( table )
-								.append( column.getText() )
-								.append( " " )
-								.append( ordering.get( index ) )
-								.append( ", " );
-					}
-					index++;
-				}
-			}
-			orderByString = orderByBuffer.substring( 0, orderByBuffer.length() - 2 );
-		}
-		return orderByString;
-	}
-
-	private static String buildOrderByClauseFromHql(String hqlOrderBy, Component component, String role) {
-		String orderByString = null;
-		if ( hqlOrderBy != null ) {
-			List<String> properties = new ArrayList<String>();
-			List<String> ordering = new ArrayList<String>();
-			StringBuilder orderByBuffer = new StringBuilder();
-			if ( hqlOrderBy.length() == 0 ) {
-				//TODO : Check that. Maybe order by key for maps
-			}
-			else {
-				StringTokenizer st = new StringTokenizer( hqlOrderBy, " ,", false );
-				String currentOrdering = null;
-				//FIXME make this code decent
-				while ( st.hasMoreTokens() ) {
-					String token = st.nextToken();
-					if ( isNonPropertyToken( token ) ) {
-						if ( currentOrdering != null ) {
-							throw new AnnotationException(
-									"Error while parsing HQL orderBy clause: " + hqlOrderBy
-											+ " (" + role + ")"
-							);
-						}
-						currentOrdering = token;
-					}
-					else {
-						//Add ordering of the previous
-						if ( currentOrdering == null ) {
-							//default ordering
-							ordering.add( "asc" );
-						}
-						else {
-							ordering.add( currentOrdering );
-							currentOrdering = null;
-						}
-						properties.add( token );
-					}
-				}
-				ordering.remove( 0 ); //first one is the algorithm starter
-				// add last one ordering
-				if ( currentOrdering == null ) {
-					//default ordering
-					ordering.add( "asc" );
-				}
-				else {
-					ordering.add( currentOrdering );
-					currentOrdering = null;
-				}
-				int index = 0;
-
-				for ( String property : properties ) {
-					Property p = component.getProperty( property );
-					if ( p == null ) {
-						throw new AnnotationException(
-								"property from @OrderBy clause not found: "
-										+ role + "." + property
-						);
-					}
-
-					Iterator propertyColumns = p.getColumnIterator();
-					while ( propertyColumns.hasNext() ) {
-						Selectable column = (Selectable) propertyColumns.next();
-						orderByBuffer.append( column.getText() )
-								.append( " " )
-								.append( ordering.get( index ) )
-								.append( ", " );
-					}
-					index++;
-				}
-
-				if ( orderByBuffer.length() >= 2 ) {
-					orderByString = orderByBuffer.substring( 0, orderByBuffer.length() - 2 );
-				}
-			}
-		}
-		return orderByString;
-	}
-
-	private static boolean isNonPropertyToken(String token) {
-		if ( " ".equals( token ) ) return true;
-		if ( ",".equals( token ) ) return true;
-		if ( token.equalsIgnoreCase( "desc" ) ) return true;
-		if ( token.equalsIgnoreCase( "asc" ) ) return true;
-		return false;
-	}
-
-	private static SimpleValue buildCollectionKey(
-			Collection collValue, Ejb3JoinColumn[] joinColumns, boolean cascadeDeleteEnabled,
-			XProperty property, ExtendedMappings mappings
-	) {
-		//binding key reference using column
-		KeyValue keyVal;
-		//give a chance to override the referenced property name
-		//has to do that here because the referencedProperty creation happens in a FKSecondPass for Many to one yuk!
-		if ( joinColumns.length > 0 && StringHelper.isNotEmpty( joinColumns[0].getMappedBy() ) ) {
-			String entityName = joinColumns[0].getManyToManyOwnerSideEntityName() != null ?
-					"inverse__" + joinColumns[0].getManyToManyOwnerSideEntityName() :
-					joinColumns[0].getPropertyHolder().getEntityName();
-			String propRef = mappings.getPropertyReferencedAssociation(
-					entityName,
-					joinColumns[0].getMappedBy()
-			);
-			if ( propRef != null ) {
-				collValue.setReferencedPropertyName( propRef );
-				mappings.addPropertyReference( collValue.getOwnerEntityName(), propRef );
-			}
-		}
-		String propRef = collValue.getReferencedPropertyName();
-		if ( propRef == null ) {
-			keyVal = collValue.getOwner().getIdentifier();
-		}
-		else {
-			keyVal = (KeyValue) collValue.getOwner()
-					.getRecursiveProperty( propRef )
-					.getValue();
-		}
-		DependantValue key = new DependantValue( collValue.getCollectionTable(), keyVal );
-		key.setTypeName( null );
-		Ejb3Column.checkPropertyConsistency( joinColumns, collValue.getOwnerEntityName() );
-		key.setNullable( joinColumns.length == 0 || joinColumns[0].isNullable() );
-		key.setUpdateable( joinColumns.length == 0 || joinColumns[0].isUpdatable() );
-		key.setCascadeDeleteEnabled( cascadeDeleteEnabled );
-		collValue.setKey( key );
-		ForeignKey fk = property != null ? property.getAnnotation( ForeignKey.class ) : null;
-		String fkName = fk != null ? fk.name() : "";
-		if ( ! BinderHelper.isDefault( fkName ) ) key.setForeignKeyName( fkName );
-		return key;
-	}
-
-	protected void bindManyToManySecondPass(
-			Collection collValue,
-			Map persistentClasses,
-			Ejb3JoinColumn[] joinColumns,
-			Ejb3JoinColumn[] inverseJoinColumns,
-			Ejb3Column[] elementColumns,
-			boolean isEmbedded,
-            XClass collType,
-			boolean ignoreNotFound, boolean unique,
-			boolean cascadeDeleteEnabled,
-			TableBinder associationTableBinder, XProperty property, PropertyHolder parentPropertyHolder,
-			String hqlOrderBy, ExtendedMappings mappings
-	) throws MappingException {
-
-		PersistentClass collectionEntity = (PersistentClass) persistentClasses.get( collType.getName() );
-		boolean isCollectionOfEntities = collectionEntity != null;
-		if ( log.isDebugEnabled() ) {
-			String path = collValue.getOwnerEntityName() + "." + joinColumns[0].getPropertyName();
-			if ( isCollectionOfEntities && unique ) {
-				log.debug( "Binding a OneToMany: " + path + " through an association table" );
-			}
-			else if ( isCollectionOfEntities ) {
-				log.debug( "Binding as ManyToMany: " + path );
-			}
-			else {
-				log.debug( "Binding a collection of element: " + path );
-			}
-		}
-		//check for user error
-		if ( ! isCollectionOfEntities ) {
-			if ( property.isAnnotationPresent( ManyToMany.class ) || property.isAnnotationPresent( OneToMany.class ) ) {
-				String path = collValue.getOwnerEntityName() + "." + joinColumns[0].getPropertyName();
-				throw new AnnotationException(
-						"Use of @OneToMany or @ManyToMany targeting an unmapped class: " + path + "[" + collType + "]"
-				);
-			}
-			else {
-				JoinTable joinTableAnn = property.getAnnotation( JoinTable.class );
-				if ( joinTableAnn != null && joinTableAnn.inverseJoinColumns().length > 0 ) {
-					String path = collValue.getOwnerEntityName() + "." + joinColumns[0].getPropertyName();
-					throw new AnnotationException(
-							"Use of @JoinTable.inverseJoinColumns targeting an unmapped class: " + path + "[" + collType + "]"
-					);
-				}
-			}
-		}
-
-		boolean mappedBy = ! BinderHelper.isDefault( joinColumns[0].getMappedBy() );
-		if ( mappedBy ) {
-			if ( ! isCollectionOfEntities ) {
-				StringBuilder error = new StringBuilder( 80 )
-						.append(
-								"Collection of elements must not have mappedBy or association reference an unmapped entity: "
-						)
-						.append( collValue.getOwnerEntityName() )
-						.append( "." )
-						.append( joinColumns[0].getPropertyName() );
-				throw new AnnotationException( error.toString() );
-			}
-			Property otherSideProperty;
-			try {
-				otherSideProperty = collectionEntity.getRecursiveProperty( joinColumns[0].getMappedBy() );
-			}
-			catch (MappingException e) {
-				StringBuilder error = new StringBuilder( 80 );
-				error.append( "mappedBy reference an unknown target entity property: " )
-						.append( collType ).append( "." ).append( joinColumns[0].getMappedBy() )
-						.append( " in " )
-						.append( collValue.getOwnerEntityName() )
-						.append( "." )
-						.append( joinColumns[0].getPropertyName() );
-				throw new AnnotationException( error.toString() );
-			}
-			Table table;
-			if ( otherSideProperty.getValue() instanceof Collection ) {
-				//this is a collection on the other side
-				table = ( (Collection) otherSideProperty.getValue() ).getCollectionTable();
-			}
-			else {
-				//This is a ToOne with a @JoinTable or a regular property
-				table = otherSideProperty.getValue().getTable();
-			}
-			collValue.setCollectionTable( table );
-			String entityName = collectionEntity.getEntityName();
-			for ( Ejb3JoinColumn column : joinColumns ) {
-				//column.setDefaultColumnHeader( joinColumns[0].getMappedBy() ); //seems not to be used, make sense
-				column.setManyToManyOwnerSideEntityName( entityName );
-			}
-		}
-		else {
-			//TODO: only for implicit columns?
-			//FIXME NamingStrategy
-			for ( Ejb3JoinColumn column : joinColumns ) {
-				String mappedByProperty = mappings.getFromMappedBy(
-						collValue.getOwnerEntityName(), column.getPropertyName()
-				);
-				Table ownerTable = collValue.getOwner().getTable();
-				column.setMappedBy(
-						collValue.getOwner().getEntityName(), mappings.getLogicalTableName( ownerTable ),
-						mappedByProperty
-				);
-//				String header = ( mappedByProperty == null ) ? mappings.getLogicalTableName( ownerTable ) : mappedByProperty;
-//				column.setDefaultColumnHeader( header );
-			}
-			if ( StringHelper.isEmpty( associationTableBinder.getName() ) ) {
-				//default value
-				associationTableBinder.setDefaultName(
-						collValue.getOwner().getEntityName(),
-						mappings.getLogicalTableName( collValue.getOwner().getTable() ),
-						collectionEntity != null ? collectionEntity.getEntityName() : null,
-						collectionEntity != null ? mappings.getLogicalTableName( collectionEntity.getTable() ) : null,
-						joinColumns[0].getPropertyName()
-				);
-			}
-			collValue.setCollectionTable( associationTableBinder.bind() );
-		}
-		bindFilters( isCollectionOfEntities );
-		bindCollectionSecondPass( collValue, collectionEntity, joinColumns, cascadeDeleteEnabled, property, mappings );
-
-		ManyToOne element = null;
-		if ( isCollectionOfEntities ) {
-			element =
-					new ManyToOne( collValue.getCollectionTable() );
-			collValue.setElement( element );
-			element.setReferencedEntityName( collType.getName() );
-			//element.setFetchMode( fetchMode );
-			//element.setLazy( fetchMode != FetchMode.JOIN );
-			//make the second join non lazy
-			element.setFetchMode( FetchMode.JOIN );
-			element.setLazy( false );
-			element.setIgnoreNotFound( ignoreNotFound );
-			if ( StringHelper.isNotEmpty( hqlOrderBy ) ) {
-				collValue.setManyToManyOrdering(
-						buildOrderByClauseFromHql( hqlOrderBy, collectionEntity, collValue.getRole() )
-				);
-			}
-			ForeignKey fk = property != null ? property.getAnnotation( ForeignKey.class ) : null;
-			String fkName = fk != null ? fk.inverseName() : "";
-			if ( ! BinderHelper.isDefault( fkName ) ) element.setForeignKeyName( fkName );
-		}
-		else {
-			XClass elementClass;
-			AnnotatedClassType classType;
-//			Map<String, javax.persistence.Column[]> columnOverrides = PropertyHolderBuilder.buildColumnOverride(
-//					property, StringHelper.qualify( collValue.getRole(), "element" )
-//			);
-			//FIXME the "element" is lost
-			PropertyHolder holder = null;
-			if ( BinderHelper.PRIMITIVE_NAMES.contains( collType.getName() ) ) {
-				classType = AnnotatedClassType.NONE;
-				elementClass = null;
-			}
-			else {
-				elementClass = collType;
-				classType = mappings.getClassType( elementClass );
-
-				holder = PropertyHolderBuilder.buildPropertyHolder(
-						collValue,
-						collValue.getRole(), // + ".element",
-						elementClass,
-						property, parentPropertyHolder, mappings
-				);
-				//force in case of attribute override
-				boolean attributeOverride = property.isAnnotationPresent( AttributeOverride.class )
-						|| property.isAnnotationPresent( AttributeOverrides.class );
-				if ( isEmbedded || attributeOverride ) {
-					classType = AnnotatedClassType.EMBEDDABLE;
-				}
-			}
-
-			if ( AnnotatedClassType.EMBEDDABLE.equals( classType ) ) {
-				EntityBinder entityBinder = new EntityBinder();
-				PersistentClass owner = collValue.getOwner();
-				boolean isPropertyAnnotated;
-				//FIXME support @Access for collection of elements
-				//String accessType = access != null ? access.value() : null;
-				if ( owner.getIdentifierProperty() != null ) {
-					isPropertyAnnotated = owner.getIdentifierProperty().getPropertyAccessorName().equals( "property" );
-				}
-				else if ( owner.getIdentifierMapper() != null && owner.getIdentifierMapper().getPropertySpan() > 0 ) {
-					Property prop = (Property) owner.getIdentifierMapper().getPropertyIterator().next();
-					isPropertyAnnotated = prop.getPropertyAccessorName().equals( "property" );
-				}
-				else {
-					throw new AssertionFailure( "Unable to guess collection property accessor name" );
-				}
-
-				//boolean propertyAccess = embeddable == null || AccessType.PROPERTY.equals( embeddable.access() );
-				PropertyData inferredData = new PropertyPreloadedData( "property", "element", elementClass );
-				//TODO be smart with isNullable
-				Component component = AnnotationBinder.fillComponent(
-						holder, inferredData, isPropertyAnnotated, isPropertyAnnotated ? "property" : "field", true,
-						entityBinder, false, false,
-						true, mappings
-				);
-
-				collValue.setElement( component );
-
-				if ( StringHelper.isNotEmpty( hqlOrderBy ) ) {
-					String path = collValue.getOwnerEntityName() + "." + joinColumns[0].getPropertyName();
-					String orderBy = buildOrderByClauseFromHql( hqlOrderBy, component, path );
-					if ( orderBy != null ) {
-						collValue.setOrderBy( orderBy );
-					}
-				}
-			}
-			else {
-				SimpleValueBinder elementBinder = new SimpleValueBinder();
-				elementBinder.setMappings( mappings );
-				elementBinder.setReturnedClassName( collType.getName() );
-				if ( elementColumns == null || elementColumns.length == 0 ) {
-					elementColumns = new Ejb3Column[1];
-					Ejb3Column column = new Ejb3Column();
-					column.setImplicit( false );
-					//not following the spec but more clean
-					column.setNullable( true );
-					column.setLength( Ejb3Column.DEFAULT_COLUMN_LENGTH );
-					column.setLogicalColumnName( Collection.DEFAULT_ELEMENT_COLUMN_NAME );
-					//TODO create an EMPTY_JOINS collection
-					column.setJoins( new HashMap<String, Join>() );
-					column.setMappings( mappings );
-					column.bind();
-					elementColumns[0] = column;
-				}
-				//override the table
-				for ( Ejb3Column column : elementColumns ) {
-					column.setTable( collValue.getCollectionTable() );
-				}
-				elementBinder.setColumns( elementColumns );
-				elementBinder.setType( property, elementClass );
-				collValue.setElement( elementBinder.make() );
-			}
-		}
-
-		checkFilterConditions( collValue );
-
-		//FIXME: do optional = false
-		if ( isCollectionOfEntities ) {
-			bindManytoManyInverseFk( collectionEntity, inverseJoinColumns, element, unique, mappings );
-		}
-
-	}
-
-	private static void checkFilterConditions(Collection collValue) {
-		//for now it can't happen, but sometime soon...
-		if ( ( collValue.getFilterMap().size() != 0 || StringHelper.isNotEmpty( collValue.getWhere() ) ) &&
-				collValue.getFetchMode() == FetchMode.JOIN &&
-				collValue.getElement().getFetchMode() != FetchMode.JOIN ) {
-			throw new MappingException(
-					"@ManyToMany or @CollectionOfElements defining filter or where without join fetching "
-							+ "not valid within collection using join fetching[" + collValue.getRole() + "]"
-			);
-		}
-	}
-
-	private static void bindCollectionSecondPass(
-			Collection collValue, PersistentClass collectionEntity, Ejb3JoinColumn[] joinColumns,
-			boolean cascadeDeleteEnabled, XProperty property,
-			ExtendedMappings mappings
-	) {
-		BinderHelper.createSyntheticPropertyReference(
-				joinColumns, collValue.getOwner(), collectionEntity, collValue, false, mappings
-		);
-		SimpleValue key = buildCollectionKey( collValue, joinColumns, cascadeDeleteEnabled, property, mappings );
-		TableBinder.bindFk( collValue.getOwner(), collectionEntity, joinColumns, key, false, mappings );
-	}
-
-	public void setCascadeDeleteEnabled(boolean onDeleteCascade) {
-		this.cascadeDeleteEnabled = onDeleteCascade;
-	}
-
-	private String safeCollectionRole() {
-		if ( propertyHolder != null ) {
-			return propertyHolder.getEntityName() + "." + propertyName;
-		}
-		else {
-			return "";
-		}
-	}
-
-
-	/**
-	 * bind the inverse FK of a ManyToMany
-	 * If we are in a mappedBy case, read the columns from the associated
-	 * colletion element
-	 * Otherwise delegates to the usual algorithm
-	 */
-	public static void bindManytoManyInverseFk(
-			PersistentClass referencedEntity, Ejb3JoinColumn[] columns, SimpleValue value, boolean unique,
-			ExtendedMappings mappings
-	) {
-		final String mappedBy = columns[0].getMappedBy();
-		if ( StringHelper.isNotEmpty( mappedBy ) ) {
-			final Property property = referencedEntity.getRecursiveProperty( mappedBy );
-			Iterator mappedByColumns;
-			if ( property.getValue() instanceof Collection ) {
-				mappedByColumns = ( (Collection) property.getValue() ).getKey().getColumnIterator();
-			}
-			else {
-				//find the appropriate reference key, can be in a join
-				Iterator joinsIt = referencedEntity.getJoinIterator();
-				KeyValue key = null;
-				while ( joinsIt.hasNext() ) {
-					Join join = (Join) joinsIt.next();
-					if ( join.containsProperty( property ) ) {
-						key = join.getKey();
-						break;
-					}
-				}
-				if ( key == null ) key = property.getPersistentClass().getIdentifier();
-				mappedByColumns = key.getColumnIterator();
-			}
-			while ( mappedByColumns.hasNext() ) {
-				Column column = (Column) mappedByColumns.next();
-				columns[0].linkValueUsingAColumnCopy( column, value );
-			}
-			String referencedPropertyName =
-					mappings.getPropertyReferencedAssociation(
-							"inverse__" + referencedEntity.getEntityName(), mappedBy
-					);
-			if ( referencedPropertyName != null ) {
-				//TODO always a many to one?
-				( (ManyToOne) value ).setReferencedPropertyName( referencedPropertyName );
-				mappings.addUniquePropertyReference( referencedEntity.getEntityName(), referencedPropertyName );
-			}
-			value.createForeignKey();
-		}
-		else {
-			BinderHelper.createSyntheticPropertyReference( columns, referencedEntity, null, value, true, mappings );
-			TableBinder.bindFk( referencedEntity, null, columns, value, unique, mappings );
-		}
-	}
-
-	public void setFkJoinColumns(Ejb3JoinColumn[] ejb3JoinColumns) {
-		this.fkJoinColumns = ejb3JoinColumns;
-	}
-
-	public void setExplicitAssociationTable(boolean explicitAssocTable) {
-		this.isExplicitAssociationTable = explicitAssocTable;
-	}
-
-	public void setElementColumns(Ejb3Column[] elementColumns) {
-		this.elementColumns = elementColumns;
-	}
-
-	public void setEmbedded(boolean annotationPresent) {
-		this.isEmbedded = annotationPresent;
-	}
-
-	public void setProperty(XProperty property) {
-		this.property = property;
-	}
-
-	public void setIgnoreNotFound(boolean ignoreNotFound) {
-		this.ignoreNotFound = ignoreNotFound;
-	}
-
-	public void setMapKeyColumns(Ejb3Column[] mapKeyColumns) {
-		this.mapKeyColumns = mapKeyColumns;
-	}
-
-	public void setMapKeyManyToManyColumns(Ejb3JoinColumn[] mapJoinColumns) {
-		this.mapKeyManyToManyColumns = mapJoinColumns;
-	}
-
-	public void setLocalGenerators(HashMap<String, IdGenerator> localGenerators) {
-		this.localGenerators = localGenerators;
-	}
-}
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/CollectionBinder.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/CollectionBinder.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/CollectionBinder.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/CollectionBinder.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,1369 @@
+package org.hibernate.cfg.annotations;
+
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.Iterator;
+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.JoinTable;
+import javax.persistence.ManyToMany;
+import javax.persistence.MapKey;
+import javax.persistence.OneToMany;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.hibernate.AnnotationException;
+import org.hibernate.AssertionFailure;
+import org.hibernate.FetchMode;
+import org.hibernate.MappingException;
+import org.hibernate.engine.ExecuteUpdateResultCheckStyle;
+import org.hibernate.annotations.BatchSize;
+import org.hibernate.annotations.Cache;
+import org.hibernate.annotations.CollectionId;
+import org.hibernate.annotations.CollectionOfElements;
+import org.hibernate.annotations.Fetch;
+import org.hibernate.annotations.Filter;
+import org.hibernate.annotations.FilterJoinTable;
+import org.hibernate.annotations.FilterJoinTables;
+import org.hibernate.annotations.Filters;
+import org.hibernate.annotations.ForeignKey;
+import org.hibernate.annotations.LazyCollection;
+import org.hibernate.annotations.LazyCollectionOption;
+import org.hibernate.annotations.OrderBy;
+import org.hibernate.annotations.Sort;
+import org.hibernate.annotations.SortType;
+import org.hibernate.annotations.Where;
+import org.hibernate.annotations.WhereJoinTable;
+import org.hibernate.annotations.SQLInsert;
+import org.hibernate.annotations.SQLUpdate;
+import org.hibernate.annotations.SQLDelete;
+import org.hibernate.annotations.SQLDeleteAll;
+import org.hibernate.annotations.Loader;
+import org.hibernate.annotations.Immutable;
+import org.hibernate.annotations.OptimisticLock;
+import org.hibernate.annotations.Persister;
+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.IndexColumn;
+import org.hibernate.cfg.PropertyData;
+import org.hibernate.cfg.PropertyHolder;
+import org.hibernate.cfg.PropertyHolderBuilder;
+import org.hibernate.cfg.PropertyPreloadedData;
+import org.hibernate.cfg.SecondPass;
+import org.hibernate.mapping.Backref;
+import org.hibernate.mapping.Collection;
+import org.hibernate.mapping.Column;
+import org.hibernate.mapping.Component;
+import org.hibernate.mapping.DependantValue;
+import org.hibernate.mapping.IdGenerator;
+import org.hibernate.mapping.Join;
+import org.hibernate.mapping.KeyValue;
+import org.hibernate.mapping.ManyToOne;
+import org.hibernate.mapping.PersistentClass;
+import org.hibernate.mapping.Property;
+import org.hibernate.mapping.Selectable;
+import org.hibernate.mapping.SimpleValue;
+import org.hibernate.mapping.Table;
+import org.hibernate.annotations.common.reflection.XClass;
+import org.hibernate.annotations.common.reflection.XProperty;
+import org.hibernate.util.StringHelper;
+
+/**
+ * Collection binder
+ *
+ * @author inger
+ * @author Emmanuel Bernard
+ */
+public abstract class CollectionBinder {
+
+	private static final Log log = LogFactory.getLog( CollectionBinder.class );
+
+	protected Collection collection;
+	protected String propertyName;
+	PropertyHolder propertyHolder;
+	int batchSize;
+	private String mappedBy;
+	private XClass collectionType;
+	private XClass targetEntity;
+	private ExtendedMappings mappings;
+	private Ejb3JoinColumn[] inverseJoinColumns;
+	private String cascadeStrategy;
+	String cacheConcurrencyStrategy;
+	String cacheRegionName;
+	private boolean oneToMany;
+	protected IndexColumn indexColumn;
+	private String orderBy;
+	protected String hqlOrderBy;
+	private boolean isSorted;
+	private Class comparator;
+	private boolean hasToBeSorted;
+	protected boolean cascadeDeleteEnabled;
+	protected String mapKeyPropertyName;
+	private boolean insertable = true;
+	private boolean updatable = true;
+	private Ejb3JoinColumn[] fkJoinColumns;
+	private boolean isExplicitAssociationTable;
+	private Ejb3Column[] elementColumns;
+	private boolean isEmbedded;
+	private XProperty property;
+	private boolean ignoreNotFound;
+	private TableBinder tableBinder;
+	private Ejb3Column[] mapKeyColumns;
+	private Ejb3JoinColumn[] mapKeyManyToManyColumns;
+	protected HashMap<String, IdGenerator> localGenerators;
+
+	public void setUpdatable(boolean updatable) {
+		this.updatable = updatable;
+	}
+
+	public void setInsertable(boolean insertable) {
+		this.insertable = insertable;
+	}
+
+
+	public void setCascadeStrategy(String cascadeStrategy) {
+		this.cascadeStrategy = cascadeStrategy;
+	}
+
+	public void setPropertyAccessorName(String propertyAccessorName) {
+		this.propertyAccessorName = propertyAccessorName;
+	}
+
+	private String propertyAccessorName;
+
+	public void setInverseJoinColumns(Ejb3JoinColumn[] inverseJoinColumns) {
+		this.inverseJoinColumns = inverseJoinColumns;
+	}
+
+	public void setJoinColumns(Ejb3JoinColumn[] joinColumns) {
+		this.joinColumns = joinColumns;
+	}
+
+	private Ejb3JoinColumn[] joinColumns;
+
+	public void setPropertyHolder(PropertyHolder propertyHolder) {
+		this.propertyHolder = propertyHolder;
+	}
+
+	public void setBatchSize(BatchSize batchSize) {
+		this.batchSize = batchSize == null ? -1 : batchSize.size();
+	}
+
+	public void setEjb3OrderBy(javax.persistence.OrderBy orderByAnn) {
+		if ( orderByAnn != null ) {
+			hqlOrderBy = orderByAnn.value();
+		}
+	}
+
+	public void setSqlOrderBy(OrderBy orderByAnn) {
+		if ( orderByAnn != null ) {
+			if ( ! BinderHelper.isDefault( orderByAnn.clause() ) ) orderBy = orderByAnn.clause();
+		}
+	}
+
+	public void setSort(Sort sortAnn) {
+		if ( sortAnn != null ) {
+			isSorted = ! SortType.UNSORTED.equals( sortAnn.type() );
+			if ( isSorted && SortType.COMPARATOR.equals( sortAnn.type() ) ) {
+				comparator = sortAnn.comparator();
+			}
+		}
+	}
+
+	/**
+	 * collection binder factory
+	 */
+	public static CollectionBinder getCollectionBinder(
+			String entityName, XProperty property,
+			boolean isIndexed
+	) {
+		if ( property.isArray() ) {
+			if ( property.getElementClass().isPrimitive() ) {
+				return new PrimitiveArrayBinder();
+			}
+			else {
+				return new ArrayBinder();
+			}
+		}
+		else if ( property.isCollection() ) {
+			//TODO consider using an XClass
+			Class returnedClass = property.getCollectionClass();
+			if ( java.util.Set.class.equals( returnedClass ) ) {
+				return new SetBinder();
+			}
+			else if ( java.util.SortedSet.class.equals( returnedClass ) ) {
+				return new SetBinder( true );
+			}
+			else if ( java.util.Map.class.equals( returnedClass ) ) {
+				return new MapBinder();
+			}
+			else if ( java.util.SortedMap.class.equals( returnedClass ) ) {
+				return new MapBinder(true);
+			}
+			else if ( java.util.Collection.class.equals( returnedClass ) ) {
+				if ( property.isAnnotationPresent( CollectionId.class ) ) {
+					return new IdBagBinder();
+				}
+				else {
+					return new BagBinder();
+				}
+			}
+			else if ( java.util.List.class.equals( returnedClass ) ) {
+				if ( isIndexed ) {
+					return new ListBinder();
+				}
+				else if ( property.isAnnotationPresent( CollectionId.class ) ) {
+					return new IdBagBinder();
+				}
+				else {
+					return new BagBinder();
+				}
+			}
+			else {
+				throw new AnnotationException(
+						returnedClass.getName() + " collection not yet supported: "
+								+ StringHelper.qualify( entityName, property.getName() )
+				);
+			}
+		}
+		else {
+			throw new AnnotationException(
+					"Illegal attempt to map a non collection as a @OneToMany, @ManyToMany or @CollectionOfElements: "
+							+ StringHelper.qualify( entityName, property.getName() )
+			);
+		}
+	}
+
+	protected CollectionBinder() {
+	}
+
+	protected CollectionBinder(boolean sorted) {
+		this.hasToBeSorted = sorted;
+	}
+
+	public void setMappedBy(String mappedBy) {
+		this.mappedBy = mappedBy;
+	}
+
+	public void setTableBinder(TableBinder tableBinder) {
+		this.tableBinder = tableBinder;
+	}
+
+	public void setCollectionType(XClass collectionType) {
+		this.collectionType = collectionType;
+	}
+
+	public void setTargetEntity(XClass targetEntity) {
+		this.targetEntity = targetEntity;
+	}
+
+	public void setMappings(ExtendedMappings mappings) {
+		this.mappings = mappings;
+	}
+
+	protected abstract Collection createCollection(PersistentClass persistentClass);
+
+	public Collection getCollection() {
+		return collection;
+	}
+
+	public void setPropertyName(String propertyName) {
+		this.propertyName = propertyName;
+	}
+
+	public void bind() {
+		this.collection = createCollection( propertyHolder.getPersistentClass() );
+		log.debug( "Collection role: " + StringHelper.qualify( propertyHolder.getPath(), propertyName ) );
+		collection.setRole( StringHelper.qualify( propertyHolder.getPath(), propertyName ) );
+		collection.setNodeName( propertyName );
+
+		if ( property.isAnnotationPresent( org.hibernate.annotations.MapKey.class ) && mapKeyPropertyName != null ) {
+			throw new AnnotationException(
+					"Cannot mix @javax.persistence.MapKey and @org.hibernate.annotations.MapKey "
+							+ "on the same collection: " + StringHelper.qualify(
+							propertyHolder.getPath(), propertyName
+					)
+			);
+		}
+
+		//set laziness
+		defineFetchingStrategy();
+		//collection.setFetchMode( fetchMode );
+		//collection.setLazy( fetchMode == FetchMode.SELECT );
+		collection.setBatchSize( batchSize );
+		if ( orderBy != null && hqlOrderBy != null ) {
+			throw new AnnotationException(
+					"Cannot use sql order by clause in conjunction of EJB3 order by clause: " + safeCollectionRole()
+			);
+		}
+
+		collection.setMutable( ! property.isAnnotationPresent( Immutable.class ) );
+		OptimisticLock lockAnn = property.getAnnotation( OptimisticLock.class );
+		if (lockAnn != null) collection.setOptimisticLocked( ! lockAnn.excluded() );
+		Persister persisterAnn = property.getAnnotation( Persister.class );
+		if ( persisterAnn != null ) collection.setCollectionPersisterClass( persisterAnn.impl() );		
+
+		// set ordering
+		if ( orderBy != null ) collection.setOrderBy( orderBy );
+		if ( isSorted ) {
+			collection.setSorted( true );
+			if ( comparator != null ) {
+				try {
+					collection.setComparator( (Comparator) comparator.newInstance() );
+				}
+				catch (ClassCastException e) {
+					throw new AnnotationException(
+							"Comparator not implementing java.util.Comparator class: "
+									+ comparator.getName() + "(" + safeCollectionRole() + ")"
+					);
+				}
+				catch (Exception e) {
+					throw new AnnotationException(
+							"Could not instantiate comparator class: "
+									+ comparator.getName() + "(" + safeCollectionRole() + ")"
+					);
+				}
+			}
+		}
+		else {
+			if ( hasToBeSorted ) {
+				throw new AnnotationException(
+						"A sorted collection has to define @Sort: "
+								+ safeCollectionRole()
+				);
+			}
+		}
+
+		//set cache
+		if ( StringHelper.isNotEmpty( cacheConcurrencyStrategy ) ) {
+			collection.setCacheConcurrencyStrategy( cacheConcurrencyStrategy );
+			collection.setCacheRegionName( cacheRegionName );
+		}
+
+		//SQL overriding
+		SQLInsert sqlInsert = property.getAnnotation( SQLInsert.class );
+		SQLUpdate sqlUpdate = property.getAnnotation( SQLUpdate.class );
+		SQLDelete sqlDelete = property.getAnnotation( SQLDelete.class );
+		SQLDeleteAll sqlDeleteAll = property.getAnnotation( SQLDeleteAll.class );
+		Loader loader = property.getAnnotation( Loader.class );
+		if ( sqlInsert != null ) {
+			collection.setCustomSQLInsert( sqlInsert.sql().trim(), sqlInsert.callable(),
+					ExecuteUpdateResultCheckStyle.parse( sqlInsert.check().toString().toLowerCase() )
+			);
+
+		}
+		if ( sqlUpdate != null ) {
+			collection.setCustomSQLUpdate( sqlUpdate.sql(), sqlUpdate.callable(),
+					ExecuteUpdateResultCheckStyle.parse( sqlUpdate.check().toString().toLowerCase() )
+			);
+		}
+		if ( sqlDelete != null ) {
+			collection.setCustomSQLDelete( sqlDelete.sql(), sqlDelete.callable(),
+					ExecuteUpdateResultCheckStyle.parse( sqlDelete.check().toString().toLowerCase() )
+			);
+		}
+		if ( sqlDeleteAll != null ) {
+			collection.setCustomSQLDeleteAll( sqlDeleteAll.sql(), sqlDeleteAll.callable(),
+					ExecuteUpdateResultCheckStyle.parse( sqlDeleteAll.check().toString().toLowerCase() )
+			);
+		}
+		if ( loader != null ) {
+			collection.setLoaderName( loader.namedQuery() );
+		}
+
+		//work on association
+		boolean isMappedBy = ! BinderHelper.isDefault( mappedBy );
+		collection.setInverse( isMappedBy );
+		
+		//many to many may need some second pass informations
+		if ( ! oneToMany && isMappedBy ) {
+			mappings.addMappedBy( getCollectionType().getName(), mappedBy, propertyName );
+		}
+		//TODO reducce tableBinder != null and oneToMany
+		//FIXME collection of elements shouldn't be executed as a secondpass
+		SecondPass sp = getSecondPass(
+				fkJoinColumns,
+				joinColumns,
+				inverseJoinColumns,
+				elementColumns,
+				mapKeyColumns, mapKeyManyToManyColumns, isEmbedded,
+				property, getCollectionType(),
+				ignoreNotFound, oneToMany,
+				tableBinder, mappings
+		);
+		XClass collectionType = getCollectionType();
+		if ( collectionType.isAnnotationPresent( Embeddable.class )
+				|| property.isAnnotationPresent( CollectionOfElements.class ) ) {
+			// do it right away, otherwise @ManyToon on composite element call addSecondPass 
+			// and raise a ConcurrentModificationException
+			//sp.doSecondPass( CollectionHelper.EMPTY_MAP );
+			mappings.addSecondPass( sp, ! isMappedBy );
+		}
+		else {
+			mappings.addSecondPass( sp, ! isMappedBy );
+		}
+
+		mappings.addCollection( collection );
+
+		//property building
+		PropertyBinder binder = new PropertyBinder();
+		binder.setName( propertyName );
+		binder.setValue( collection );
+		binder.setCascade( cascadeStrategy );
+		if ( cascadeStrategy != null && cascadeStrategy.indexOf( "delete-orphan" ) >= 0 ) {
+			collection.setOrphanDelete( true );
+		}
+		binder.setPropertyAccessorName( propertyAccessorName );
+		binder.setProperty( property );
+		binder.setInsertable( insertable );
+		binder.setUpdatable( updatable );
+		Property prop = binder.make();
+		//we don't care about the join stuffs because the column is on the association table.
+		propertyHolder.addProperty( prop );
+	}
+
+	private void defineFetchingStrategy() {
+		LazyCollection lazy = property.getAnnotation( LazyCollection.class );
+		Fetch fetch = property.getAnnotation( Fetch.class );
+		OneToMany oneToMany = property.getAnnotation( OneToMany.class );
+		ManyToMany manyToMany = property.getAnnotation( ManyToMany.class );
+		CollectionOfElements elements = property.getAnnotation( CollectionOfElements.class );
+		FetchType fetchType;
+		if ( oneToMany != null ) {
+			fetchType = oneToMany.fetch();
+		}
+		else if ( manyToMany != null ) {
+			fetchType = manyToMany.fetch();
+		}
+		else if ( elements != null ) {
+			fetchType = elements.fetch();
+		}
+		else {
+			throw new AssertionFailure(
+					"Define fetch strategy on a property not annotated with @ManyToOne nor @OneToMany nor @CollectionOfElements"
+			);
+		}
+		if ( lazy != null ) {
+			collection.setLazy( ! ( lazy.value() == LazyCollectionOption.FALSE ) );
+			collection.setExtraLazy( lazy.value() == LazyCollectionOption.EXTRA );
+		}
+		else {
+			collection.setLazy( fetchType == FetchType.LAZY );
+			collection.setExtraLazy( false );
+		}
+		if ( fetch != null ) {
+			if ( fetch.value() == org.hibernate.annotations.FetchMode.JOIN ) {
+				collection.setFetchMode( FetchMode.JOIN );
+				collection.setLazy( false );
+			}
+			else if ( fetch.value() == org.hibernate.annotations.FetchMode.SELECT ) {
+				collection.setFetchMode( FetchMode.SELECT );
+			}
+			else if ( fetch.value() == org.hibernate.annotations.FetchMode.SUBSELECT ) {
+				collection.setFetchMode( FetchMode.SELECT );
+				collection.setSubselectLoadable( true );
+				collection.getOwner().setSubselectLoadableCollections( true );
+			}
+			else {
+				throw new AssertionFailure( "Unknown FetchMode: " + fetch.value() );
+			}
+		}
+		else {
+			collection.setFetchMode( AnnotationBinder.getFetchMode( fetchType ) );
+		}
+	}
+
+	private XClass getCollectionType() {
+		if ( AnnotationBinder.isDefault( targetEntity, mappings ) ) {
+			if ( collectionType != null ) {
+				return collectionType;
+			}
+			else {
+				String errorMsg = "Collection has neither generic type or OneToMany.targetEntity() defined: "
+						+ safeCollectionRole();
+				throw new AnnotationException( errorMsg );
+			}
+		}
+		else {
+			return targetEntity;
+		}
+	}
+
+	public SecondPass getSecondPass(
+			final Ejb3JoinColumn[] fkJoinColumns, final Ejb3JoinColumn[] keyColumns,
+			final Ejb3JoinColumn[] inverseColumns,
+			final Ejb3Column[] elementColumns,
+			final Ejb3Column[] mapKeyColumns, final Ejb3JoinColumn[] mapKeyManyToManyColumns, final boolean isEmbedded,
+			final XProperty property, final XClass collType,
+			final boolean ignoreNotFound, final boolean unique,
+			final TableBinder assocTableBinder, final ExtendedMappings mappings
+	) {
+
+		return new CollectionSecondPass( mappings, collection ) {
+
+			public void secondPass(java.util.Map persistentClasses, java.util.Map inheritedMetas)
+					throws MappingException {
+				bindStarToManySecondPass(
+						persistentClasses, collType, fkJoinColumns, keyColumns, inverseColumns, elementColumns,
+						isEmbedded, property, unique, assocTableBinder, ignoreNotFound, mappings
+				);
+
+			}
+		};
+	}
+
+	/**
+	 * return true if it's a Fk, false if it's an association table
+	 */
+	protected boolean bindStarToManySecondPass(
+			Map persistentClasses, XClass collType, Ejb3JoinColumn[] fkJoinColumns,
+			Ejb3JoinColumn[] keyColumns, Ejb3JoinColumn[] inverseColumns, Ejb3Column[] elementColumns,
+			boolean isEmbedded,
+			XProperty property, boolean unique,
+			TableBinder associationTableBinder, boolean ignoreNotFound, ExtendedMappings mappings
+	) {
+		PersistentClass persistentClass = (PersistentClass) persistentClasses.get( collType.getName() );
+		boolean reversePropertyInJoin = false;
+		if ( persistentClass != null && StringHelper.isNotEmpty( this.mappedBy ) ) {
+			try {
+				reversePropertyInJoin = 0 != persistentClass.getJoinNumber(
+						persistentClass.getRecursiveProperty( this.mappedBy )
+				);
+			}
+			catch (MappingException e) {
+				StringBuilder error = new StringBuilder( 80 );
+				error.append( "mappedBy reference an unknown target entity property: " )
+						.append( collType ).append( "." ).append( this.mappedBy )
+						.append( " in " )
+						.append( collection.getOwnerEntityName() )
+						.append( "." )
+						.append( property.getName() );
+				throw new AnnotationException( error.toString() );
+			}
+		}
+		if ( persistentClass != null
+				&& ! reversePropertyInJoin
+				&& oneToMany
+				&& ! this.isExplicitAssociationTable
+				&& ( joinColumns[0].isImplicit() && ! BinderHelper.isDefault( this.mappedBy ) //implicit @JoinColumn
+				|| ! fkJoinColumns[0].isImplicit() ) //this is an explicit @JoinColumn
+				) {
+			//this is a Foreign key
+			bindOneToManySecondPass(
+					getCollection(),
+					persistentClasses,
+					fkJoinColumns,
+					collType,
+					cascadeDeleteEnabled,
+					ignoreNotFound, hqlOrderBy,
+					mappings
+			);
+			return true;
+		}
+		else {
+			//this is an association table
+			bindManyToManySecondPass(
+					this.collection,
+					persistentClasses,
+					keyColumns,
+					inverseColumns,
+					elementColumns,
+					isEmbedded, collType,
+					ignoreNotFound, unique,
+					cascadeDeleteEnabled,
+					associationTableBinder, property, propertyHolder, hqlOrderBy, mappings
+			);
+			return false;
+		}
+	}
+
+	protected void bindOneToManySecondPass(
+			Collection collection, Map persistentClasses, Ejb3JoinColumn[] fkJoinColumns,
+            XClass collectionType,
+			boolean cascadeDeleteEnabled, boolean ignoreNotFound, String hqlOrderBy, ExtendedMappings extendedMappings
+	) {
+		if ( log.isDebugEnabled() ) {
+			log.debug(
+					"Binding a OneToMany: " + propertyHolder.getEntityName() + "." + propertyName + " through a foreign key"
+			);
+		}
+		org.hibernate.mapping.OneToMany oneToMany = new org.hibernate.mapping.OneToMany( collection.getOwner() );
+		collection.setElement( oneToMany );
+		oneToMany.setReferencedEntityName( collectionType.getName() );
+		oneToMany.setIgnoreNotFound( ignoreNotFound );
+
+		String assocClass = oneToMany.getReferencedEntityName();
+		PersistentClass associatedClass = (PersistentClass) persistentClasses.get( assocClass );
+		String orderBy = buildOrderByClauseFromHql( hqlOrderBy, associatedClass, collection.getRole() );
+		if ( orderBy != null ) collection.setOrderBy( orderBy );
+		if ( mappings == null ) {
+			throw new AssertionFailure(
+					"CollectionSecondPass for oneToMany should not be called with null mappings"
+			);
+		}
+		Map<String, Join> joins = mappings.getJoins( assocClass );
+		if ( associatedClass == null ) {
+			throw new MappingException(
+					"Association references unmapped class: " + assocClass
+			);
+		}
+		oneToMany.setAssociatedClass( associatedClass );
+		for ( Ejb3JoinColumn column : fkJoinColumns ) {
+			column.setPersistentClass( associatedClass, joins );
+			column.setJoins( joins );
+			collection.setCollectionTable( column.getTable() );
+		}
+		log.info(
+				"Mapping collection: " + collection.getRole() + " -> " + collection.getCollectionTable().getName()
+		);
+		bindFilters(false);
+		bindCollectionSecondPass( collection, null, fkJoinColumns, cascadeDeleteEnabled, property, mappings );
+		if ( !collection.isInverse()
+				&& !collection.getKey().isNullable() ) {
+			// for non-inverse one-to-many, with a not-null fk, add a backref!
+			String entityName = oneToMany.getReferencedEntityName();
+			PersistentClass referenced = mappings.getClass( entityName );
+			Backref prop = new Backref();
+			prop.setName( '_' + fkJoinColumns[0].getPropertyName() + "Backref" );
+			prop.setUpdateable( false );
+			prop.setSelectable( false );
+			prop.setCollectionRole( collection.getRole() );
+			prop.setEntityName( collection.getOwner().getEntityName() );
+			prop.setValue( collection.getKey() );
+			referenced.addProperty( prop );
+		}
+	}
+
+	private void bindFilters(boolean hasAssociationTable) {
+		Filter simpleFilter = property.getAnnotation( Filter.class );
+		//set filtering
+		//test incompatible choices
+		//if ( StringHelper.isNotEmpty( where ) ) collection.setWhere( where );
+		if (simpleFilter != null) {
+			if (hasAssociationTable) {
+				collection.addManyToManyFilter( simpleFilter.name(), getCondition( simpleFilter ) );
+			}
+			else {
+				collection.addFilter( simpleFilter.name(), getCondition( simpleFilter ) );
+			}
+		}
+		Filters filters = property.getAnnotation( Filters.class );
+		if (filters != null) {
+			for ( Filter filter : filters.value() ) {
+				if (hasAssociationTable) {
+					collection.addManyToManyFilter( filter.name(), getCondition( filter ) );
+				}
+				else {
+					collection.addFilter( filter.name(), getCondition( filter ) );
+				}
+			}
+		}
+		FilterJoinTable simpleFilterJoinTable = property.getAnnotation( FilterJoinTable.class );
+		if (simpleFilterJoinTable != null) {
+			if (hasAssociationTable) {
+				collection.addFilter( simpleFilterJoinTable.name(), getCondition( simpleFilterJoinTable ) );
+			}
+			else {
+				throw new AnnotationException(
+						"Illegal use of @FilterJoinTable on an association without join table:"
+								+ StringHelper.qualify( propertyHolder.getPath(), propertyName )
+				);
+			}
+		}
+		FilterJoinTables filterJoinTables = property.getAnnotation( FilterJoinTables.class );
+		if (filterJoinTables != null) {
+			for ( FilterJoinTable filter : filterJoinTables.value() ) {
+				if (hasAssociationTable) {
+					collection.addFilter( filter.name(), getCondition( filter ) );
+				}
+				else {
+					throw new AnnotationException(
+							"Illegal use of @FilterJoinTable on an association without join table:"
+									+ StringHelper.qualify( propertyHolder.getPath(), propertyName )
+					);
+				}
+			}
+		}
+
+		Where where = property.getAnnotation( Where.class );
+		String whereClause = where == null ? null : where.clause();
+		if ( StringHelper.isNotEmpty( whereClause ) ) {
+			if (hasAssociationTable) {
+				collection.setManyToManyWhere( whereClause );
+			}
+			else {
+				collection.setWhere( whereClause );
+			}
+		}
+
+		WhereJoinTable whereJoinTable = property.getAnnotation( WhereJoinTable.class );
+		String whereJoinTableClause = whereJoinTable == null ? null : whereJoinTable.clause();
+		if ( StringHelper.isNotEmpty( whereJoinTableClause ) ) {
+			if (hasAssociationTable) {
+				collection.setWhere( whereJoinTableClause );
+			}
+			else {
+				throw new AnnotationException(
+						"Illegal use of @WhereJoinTable on an association without join table:"
+								+ StringHelper.qualify( propertyHolder.getPath(), propertyName )
+				);
+			}
+		}
+//		This cannot happen in annotations since the second fetch is hardcoded to join
+//		if ( ( ! collection.getManyToManyFilterMap().isEmpty() || collection.getManyToManyWhere() != null ) &&
+//		        collection.getFetchMode() == FetchMode.JOIN &&
+//		        collection.getElement().getFetchMode() != FetchMode.JOIN ) {
+//			throw new MappingException(
+//			        "association with join table  defining filter or where without join fetching " +
+//			        "not valid within collection using join fetching [" + collection.getRole() + "]"
+//				);
+//		}
+	}
+
+	private String getCondition(FilterJoinTable filter) {
+		//set filtering
+		String name = filter.name();
+		String cond = filter.condition();
+		return getCondition( cond, name );
+	}
+
+	private String getCondition(Filter filter) {
+		//set filtering
+		String name = filter.name();
+		String cond = filter.condition();
+		return getCondition( cond, name );
+	}
+
+	private String getCondition(String cond, String name) {
+		if ( BinderHelper.isDefault( cond ) ) {
+			cond = mappings.getFilterDefinition( name ).getDefaultFilterCondition();
+			if ( StringHelper.isEmpty( cond ) ) {
+				throw new AnnotationException(
+						"no filter condition found for filter " + name + " in "
+								+ StringHelper.qualify( propertyHolder.getPath(), propertyName )
+				);
+			}
+		}
+		return cond;
+	}
+
+	public void setCache(Cache cacheAnn) {
+		if ( cacheAnn != null ) {
+			cacheRegionName = BinderHelper.isDefault( cacheAnn.region() ) ? null : cacheAnn.region();
+			cacheConcurrencyStrategy = EntityBinder.getCacheConcurrencyStrategy( cacheAnn.usage() );
+		}
+		else {
+			cacheConcurrencyStrategy = null;
+			cacheRegionName = null;
+		}
+	}
+
+	public void setOneToMany(boolean oneToMany) {
+		this.oneToMany = oneToMany;
+	}
+
+	public void setIndexColumn(IndexColumn indexColumn) {
+		this.indexColumn = indexColumn;
+	}
+
+	public void setMapKey(MapKey key) {
+		if ( key != null ) {
+			mapKeyPropertyName = key.name();
+		}
+	}
+
+	private static String buildOrderByClauseFromHql(String hqlOrderBy, PersistentClass associatedClass, String role) {
+		String orderByString = null;
+		if ( hqlOrderBy != null ) {
+			List<String> properties = new ArrayList<String>();
+			List<String> ordering = new ArrayList<String>();
+			StringBuilder orderByBuffer = new StringBuilder();
+			if ( hqlOrderBy.length() == 0 ) {
+				//order by id
+				Iterator it = associatedClass.getIdentifier().getColumnIterator();
+				while ( it.hasNext() ) {
+					Selectable col = (Selectable) it.next();
+					orderByBuffer.append( col.getText() ).append( " asc" ).append( ", " );
+				}
+			}
+			else {
+				StringTokenizer st = new StringTokenizer( hqlOrderBy, " ,", false );
+				String currentOrdering = null;
+				//FIXME make this code decent
+				while ( st.hasMoreTokens() ) {
+					String token = st.nextToken();
+					if ( isNonPropertyToken( token ) ) {
+						if ( currentOrdering != null ) {
+							throw new AnnotationException(
+									"Error while parsing HQL orderBy clause: " + hqlOrderBy
+											+ " (" + role + ")"
+							);
+						}
+						currentOrdering = token;
+					}
+					else {
+						//Add ordering of the previous
+						if ( currentOrdering == null ) {
+							//default ordering
+							ordering.add( "asc" );
+						}
+						else {
+							ordering.add( currentOrdering );
+							currentOrdering = null;
+						}
+						properties.add( token );
+					}
+				}
+				ordering.remove( 0 ); //first one is the algorithm starter
+				// add last one ordering
+				if ( currentOrdering == null ) {
+					//default ordering
+					ordering.add( "asc" );
+				}
+				else {
+					ordering.add( currentOrdering );
+					currentOrdering = null;
+				}
+				int index = 0;
+
+				for ( String property : properties ) {
+					Property p = BinderHelper.findPropertyByName( associatedClass, property );
+					if ( p == null ) {
+						throw new AnnotationException(
+								"property from @OrderBy clause not found: "
+										+ associatedClass.getEntityName() + "." + property
+						);
+					}
+					PersistentClass pc = p.getPersistentClass();
+					String table;
+					if (pc != associatedClass) {
+						table = pc.getTable().getQuotedName() + ".";
+					}
+					else {
+						table = "";
+					}
+					Iterator propertyColumns = p.getColumnIterator();
+					while ( propertyColumns.hasNext() ) {
+						Selectable column = (Selectable) propertyColumns.next();
+						orderByBuffer.append( table )
+								.append( column.getText() )
+								.append( " " )
+								.append( ordering.get( index ) )
+								.append( ", " );
+					}
+					index++;
+				}
+			}
+			orderByString = orderByBuffer.substring( 0, orderByBuffer.length() - 2 );
+		}
+		return orderByString;
+	}
+
+	private static String buildOrderByClauseFromHql(String hqlOrderBy, Component component, String role) {
+		String orderByString = null;
+		if ( hqlOrderBy != null ) {
+			List<String> properties = new ArrayList<String>();
+			List<String> ordering = new ArrayList<String>();
+			StringBuilder orderByBuffer = new StringBuilder();
+			if ( hqlOrderBy.length() == 0 ) {
+				//TODO : Check that. Maybe order by key for maps
+			}
+			else {
+				StringTokenizer st = new StringTokenizer( hqlOrderBy, " ,", false );
+				String currentOrdering = null;
+				//FIXME make this code decent
+				while ( st.hasMoreTokens() ) {
+					String token = st.nextToken();
+					if ( isNonPropertyToken( token ) ) {
+						if ( currentOrdering != null ) {
+							throw new AnnotationException(
+									"Error while parsing HQL orderBy clause: " + hqlOrderBy
+											+ " (" + role + ")"
+							);
+						}
+						currentOrdering = token;
+					}
+					else {
+						//Add ordering of the previous
+						if ( currentOrdering == null ) {
+							//default ordering
+							ordering.add( "asc" );
+						}
+						else {
+							ordering.add( currentOrdering );
+							currentOrdering = null;
+						}
+						properties.add( token );
+					}
+				}
+				ordering.remove( 0 ); //first one is the algorithm starter
+				// add last one ordering
+				if ( currentOrdering == null ) {
+					//default ordering
+					ordering.add( "asc" );
+				}
+				else {
+					ordering.add( currentOrdering );
+					currentOrdering = null;
+				}
+				int index = 0;
+
+				for ( String property : properties ) {
+					Property p = component.getProperty( property );
+					if ( p == null ) {
+						throw new AnnotationException(
+								"property from @OrderBy clause not found: "
+										+ role + "." + property
+						);
+					}
+
+					Iterator propertyColumns = p.getColumnIterator();
+					while ( propertyColumns.hasNext() ) {
+						Selectable column = (Selectable) propertyColumns.next();
+						orderByBuffer.append( column.getText() )
+								.append( " " )
+								.append( ordering.get( index ) )
+								.append( ", " );
+					}
+					index++;
+				}
+
+				if ( orderByBuffer.length() >= 2 ) {
+					orderByString = orderByBuffer.substring( 0, orderByBuffer.length() - 2 );
+				}
+			}
+		}
+		return orderByString;
+	}
+
+	private static boolean isNonPropertyToken(String token) {
+		if ( " ".equals( token ) ) return true;
+		if ( ",".equals( token ) ) return true;
+		if ( token.equalsIgnoreCase( "desc" ) ) return true;
+		if ( token.equalsIgnoreCase( "asc" ) ) return true;
+		return false;
+	}
+
+	private static SimpleValue buildCollectionKey(
+			Collection collValue, Ejb3JoinColumn[] joinColumns, boolean cascadeDeleteEnabled,
+			XProperty property, ExtendedMappings mappings
+	) {
+		//binding key reference using column
+		KeyValue keyVal;
+		//give a chance to override the referenced property name
+		//has to do that here because the referencedProperty creation happens in a FKSecondPass for Many to one yuk!
+		if ( joinColumns.length > 0 && StringHelper.isNotEmpty( joinColumns[0].getMappedBy() ) ) {
+			String entityName = joinColumns[0].getManyToManyOwnerSideEntityName() != null ?
+					"inverse__" + joinColumns[0].getManyToManyOwnerSideEntityName() :
+					joinColumns[0].getPropertyHolder().getEntityName();
+			String propRef = mappings.getPropertyReferencedAssociation(
+					entityName,
+					joinColumns[0].getMappedBy()
+			);
+			if ( propRef != null ) {
+				collValue.setReferencedPropertyName( propRef );
+				mappings.addPropertyReference( collValue.getOwnerEntityName(), propRef );
+			}
+		}
+		String propRef = collValue.getReferencedPropertyName();
+		if ( propRef == null ) {
+			keyVal = collValue.getOwner().getIdentifier();
+		}
+		else {
+			keyVal = (KeyValue) collValue.getOwner()
+					.getRecursiveProperty( propRef )
+					.getValue();
+		}
+		DependantValue key = new DependantValue( collValue.getCollectionTable(), keyVal );
+		key.setTypeName( null );
+		Ejb3Column.checkPropertyConsistency( joinColumns, collValue.getOwnerEntityName() );
+		key.setNullable( joinColumns.length == 0 || joinColumns[0].isNullable() );
+		key.setUpdateable( joinColumns.length == 0 || joinColumns[0].isUpdatable() );
+		key.setCascadeDeleteEnabled( cascadeDeleteEnabled );
+		collValue.setKey( key );
+		ForeignKey fk = property != null ? property.getAnnotation( ForeignKey.class ) : null;
+		String fkName = fk != null ? fk.name() : "";
+		if ( ! BinderHelper.isDefault( fkName ) ) key.setForeignKeyName( fkName );
+		return key;
+	}
+
+	protected void bindManyToManySecondPass(
+			Collection collValue,
+			Map persistentClasses,
+			Ejb3JoinColumn[] joinColumns,
+			Ejb3JoinColumn[] inverseJoinColumns,
+			Ejb3Column[] elementColumns,
+			boolean isEmbedded,
+            XClass collType,
+			boolean ignoreNotFound, boolean unique,
+			boolean cascadeDeleteEnabled,
+			TableBinder associationTableBinder, XProperty property, PropertyHolder parentPropertyHolder,
+			String hqlOrderBy, ExtendedMappings mappings
+	) throws MappingException {
+
+		PersistentClass collectionEntity = (PersistentClass) persistentClasses.get( collType.getName() );
+		boolean isCollectionOfEntities = collectionEntity != null;
+		if ( log.isDebugEnabled() ) {
+			String path = collValue.getOwnerEntityName() + "." + joinColumns[0].getPropertyName();
+			if ( isCollectionOfEntities && unique ) {
+				log.debug( "Binding a OneToMany: " + path + " through an association table" );
+			}
+			else if ( isCollectionOfEntities ) {
+				log.debug( "Binding as ManyToMany: " + path );
+			}
+			else {
+				log.debug( "Binding a collection of element: " + path );
+			}
+		}
+		//check for user error
+		if ( ! isCollectionOfEntities ) {
+			if ( property.isAnnotationPresent( ManyToMany.class ) || property.isAnnotationPresent( OneToMany.class ) ) {
+				String path = collValue.getOwnerEntityName() + "." + joinColumns[0].getPropertyName();
+				throw new AnnotationException(
+						"Use of @OneToMany or @ManyToMany targeting an unmapped class: " + path + "[" + collType + "]"
+				);
+			}
+			else {
+				JoinTable joinTableAnn = property.getAnnotation( JoinTable.class );
+				if ( joinTableAnn != null && joinTableAnn.inverseJoinColumns().length > 0 ) {
+					String path = collValue.getOwnerEntityName() + "." + joinColumns[0].getPropertyName();
+					throw new AnnotationException(
+							"Use of @JoinTable.inverseJoinColumns targeting an unmapped class: " + path + "[" + collType + "]"
+					);
+				}
+			}
+		}
+
+		boolean mappedBy = ! BinderHelper.isDefault( joinColumns[0].getMappedBy() );
+		if ( mappedBy ) {
+			if ( ! isCollectionOfEntities ) {
+				StringBuilder error = new StringBuilder( 80 )
+						.append(
+								"Collection of elements must not have mappedBy or association reference an unmapped entity: "
+						)
+						.append( collValue.getOwnerEntityName() )
+						.append( "." )
+						.append( joinColumns[0].getPropertyName() );
+				throw new AnnotationException( error.toString() );
+			}
+			Property otherSideProperty;
+			try {
+				otherSideProperty = collectionEntity.getRecursiveProperty( joinColumns[0].getMappedBy() );
+			}
+			catch (MappingException e) {
+				StringBuilder error = new StringBuilder( 80 );
+				error.append( "mappedBy reference an unknown target entity property: " )
+						.append( collType ).append( "." ).append( joinColumns[0].getMappedBy() )
+						.append( " in " )
+						.append( collValue.getOwnerEntityName() )
+						.append( "." )
+						.append( joinColumns[0].getPropertyName() );
+				throw new AnnotationException( error.toString() );
+			}
+			Table table;
+			if ( otherSideProperty.getValue() instanceof Collection ) {
+				//this is a collection on the other side
+				table = ( (Collection) otherSideProperty.getValue() ).getCollectionTable();
+			}
+			else {
+				//This is a ToOne with a @JoinTable or a regular property
+				table = otherSideProperty.getValue().getTable();
+			}
+			collValue.setCollectionTable( table );
+			String entityName = collectionEntity.getEntityName();
+			for ( Ejb3JoinColumn column : joinColumns ) {
+				//column.setDefaultColumnHeader( joinColumns[0].getMappedBy() ); //seems not to be used, make sense
+				column.setManyToManyOwnerSideEntityName( entityName );
+			}
+		}
+		else {
+			//TODO: only for implicit columns?
+			//FIXME NamingStrategy
+			for ( Ejb3JoinColumn column : joinColumns ) {
+				String mappedByProperty = mappings.getFromMappedBy(
+						collValue.getOwnerEntityName(), column.getPropertyName()
+				);
+				Table ownerTable = collValue.getOwner().getTable();
+				column.setMappedBy(
+						collValue.getOwner().getEntityName(), mappings.getLogicalTableName( ownerTable ),
+						mappedByProperty
+				);
+//				String header = ( mappedByProperty == null ) ? mappings.getLogicalTableName( ownerTable ) : mappedByProperty;
+//				column.setDefaultColumnHeader( header );
+			}
+			if ( StringHelper.isEmpty( associationTableBinder.getName() ) ) {
+				//default value
+				associationTableBinder.setDefaultName(
+						collValue.getOwner().getEntityName(),
+						mappings.getLogicalTableName( collValue.getOwner().getTable() ),
+						collectionEntity != null ? collectionEntity.getEntityName() : null,
+						collectionEntity != null ? mappings.getLogicalTableName( collectionEntity.getTable() ) : null,
+						joinColumns[0].getPropertyName()
+				);
+			}
+			collValue.setCollectionTable( associationTableBinder.bind() );
+		}
+		bindFilters( isCollectionOfEntities );
+		bindCollectionSecondPass( collValue, collectionEntity, joinColumns, cascadeDeleteEnabled, property, mappings );
+
+		ManyToOne element = null;
+		if ( isCollectionOfEntities ) {
+			element =
+					new ManyToOne( collValue.getCollectionTable() );
+			collValue.setElement( element );
+			element.setReferencedEntityName( collType.getName() );
+			//element.setFetchMode( fetchMode );
+			//element.setLazy( fetchMode != FetchMode.JOIN );
+			//make the second join non lazy
+			element.setFetchMode( FetchMode.JOIN );
+			element.setLazy( false );
+			element.setIgnoreNotFound( ignoreNotFound );
+			if ( StringHelper.isNotEmpty( hqlOrderBy ) ) {
+				collValue.setManyToManyOrdering(
+						buildOrderByClauseFromHql( hqlOrderBy, collectionEntity, collValue.getRole() )
+				);
+			}
+			ForeignKey fk = property != null ? property.getAnnotation( ForeignKey.class ) : null;
+			String fkName = fk != null ? fk.inverseName() : "";
+			if ( ! BinderHelper.isDefault( fkName ) ) element.setForeignKeyName( fkName );
+		}
+		else {
+			XClass elementClass;
+			AnnotatedClassType classType;
+//			Map<String, javax.persistence.Column[]> columnOverrides = PropertyHolderBuilder.buildColumnOverride(
+//					property, StringHelper.qualify( collValue.getRole(), "element" )
+//			);
+			//FIXME the "element" is lost
+			PropertyHolder holder = null;
+			if ( BinderHelper.PRIMITIVE_NAMES.contains( collType.getName() ) ) {
+				classType = AnnotatedClassType.NONE;
+				elementClass = null;
+			}
+			else {
+				elementClass = collType;
+				classType = mappings.getClassType( elementClass );
+
+				holder = PropertyHolderBuilder.buildPropertyHolder(
+						collValue,
+						collValue.getRole(), // + ".element",
+						elementClass,
+						property, parentPropertyHolder, mappings
+				);
+				//force in case of attribute override
+				boolean attributeOverride = property.isAnnotationPresent( AttributeOverride.class )
+						|| property.isAnnotationPresent( AttributeOverrides.class );
+				if ( isEmbedded || attributeOverride ) {
+					classType = AnnotatedClassType.EMBEDDABLE;
+				}
+			}
+
+			if ( AnnotatedClassType.EMBEDDABLE.equals( classType ) ) {
+				EntityBinder entityBinder = new EntityBinder();
+				PersistentClass owner = collValue.getOwner();
+				boolean isPropertyAnnotated;
+				//FIXME support @Access for collection of elements
+				//String accessType = access != null ? access.value() : null;
+				if ( owner.getIdentifierProperty() != null ) {
+					isPropertyAnnotated = owner.getIdentifierProperty().getPropertyAccessorName().equals( "property" );
+				}
+				else if ( owner.getIdentifierMapper() != null && owner.getIdentifierMapper().getPropertySpan() > 0 ) {
+					Property prop = (Property) owner.getIdentifierMapper().getPropertyIterator().next();
+					isPropertyAnnotated = prop.getPropertyAccessorName().equals( "property" );
+				}
+				else {
+					throw new AssertionFailure( "Unable to guess collection property accessor name" );
+				}
+
+				//boolean propertyAccess = embeddable == null || AccessType.PROPERTY.equals( embeddable.access() );
+				PropertyData inferredData = new PropertyPreloadedData( "property", "element", elementClass );
+				//TODO be smart with isNullable
+				Component component = AnnotationBinder.fillComponent(
+						holder, inferredData, isPropertyAnnotated, isPropertyAnnotated ? "property" : "field", true,
+						entityBinder, false, false,
+						true, mappings
+				);
+
+				collValue.setElement( component );
+
+				if ( StringHelper.isNotEmpty( hqlOrderBy ) ) {
+					String path = collValue.getOwnerEntityName() + "." + joinColumns[0].getPropertyName();
+					String orderBy = buildOrderByClauseFromHql( hqlOrderBy, component, path );
+					if ( orderBy != null ) {
+						collValue.setOrderBy( orderBy );
+					}
+				}
+			}
+			else {
+				SimpleValueBinder elementBinder = new SimpleValueBinder();
+				elementBinder.setMappings( mappings );
+				elementBinder.setReturnedClassName( collType.getName() );
+				if ( elementColumns == null || elementColumns.length == 0 ) {
+					elementColumns = new Ejb3Column[1];
+					Ejb3Column column = new Ejb3Column();
+					column.setImplicit( false );
+					//not following the spec but more clean
+					column.setNullable( true );
+					column.setLength( Ejb3Column.DEFAULT_COLUMN_LENGTH );
+					column.setLogicalColumnName( Collection.DEFAULT_ELEMENT_COLUMN_NAME );
+					//TODO create an EMPTY_JOINS collection
+					column.setJoins( new HashMap<String, Join>() );
+					column.setMappings( mappings );
+					column.bind();
+					elementColumns[0] = column;
+				}
+				//override the table
+				for ( Ejb3Column column : elementColumns ) {
+					column.setTable( collValue.getCollectionTable() );
+				}
+				elementBinder.setColumns( elementColumns );
+				elementBinder.setType( property, elementClass );
+				collValue.setElement( elementBinder.make() );
+			}
+		}
+
+		checkFilterConditions( collValue );
+
+		//FIXME: do optional = false
+		if ( isCollectionOfEntities ) {
+			bindManytoManyInverseFk( collectionEntity, inverseJoinColumns, element, unique, mappings );
+		}
+
+	}
+
+	private static void checkFilterConditions(Collection collValue) {
+		//for now it can't happen, but sometime soon...
+		if ( ( collValue.getFilterMap().size() != 0 || StringHelper.isNotEmpty( collValue.getWhere() ) ) &&
+				collValue.getFetchMode() == FetchMode.JOIN &&
+				collValue.getElement().getFetchMode() != FetchMode.JOIN ) {
+			throw new MappingException(
+					"@ManyToMany or @CollectionOfElements defining filter or where without join fetching "
+							+ "not valid within collection using join fetching[" + collValue.getRole() + "]"
+			);
+		}
+	}
+
+	private static void bindCollectionSecondPass(
+			Collection collValue, PersistentClass collectionEntity, Ejb3JoinColumn[] joinColumns,
+			boolean cascadeDeleteEnabled, XProperty property,
+			ExtendedMappings mappings
+	) {
+		BinderHelper.createSyntheticPropertyReference(
+				joinColumns, collValue.getOwner(), collectionEntity, collValue, false, mappings
+		);
+		SimpleValue key = buildCollectionKey( collValue, joinColumns, cascadeDeleteEnabled, property, mappings );
+		TableBinder.bindFk( collValue.getOwner(), collectionEntity, joinColumns, key, false, mappings );
+	}
+
+	public void setCascadeDeleteEnabled(boolean onDeleteCascade) {
+		this.cascadeDeleteEnabled = onDeleteCascade;
+	}
+
+	private String safeCollectionRole() {
+		if ( propertyHolder != null ) {
+			return propertyHolder.getEntityName() + "." + propertyName;
+		}
+		else {
+			return "";
+		}
+	}
+
+
+	/**
+	 * bind the inverse FK of a ManyToMany
+	 * If we are in a mappedBy case, read the columns from the associated
+	 * colletion element
+	 * Otherwise delegates to the usual algorithm
+	 */
+	public static void bindManytoManyInverseFk(
+			PersistentClass referencedEntity, Ejb3JoinColumn[] columns, SimpleValue value, boolean unique,
+			ExtendedMappings mappings
+	) {
+		final String mappedBy = columns[0].getMappedBy();
+		if ( StringHelper.isNotEmpty( mappedBy ) ) {
+			final Property property = referencedEntity.getRecursiveProperty( mappedBy );
+			Iterator mappedByColumns;
+			if ( property.getValue() instanceof Collection ) {
+				mappedByColumns = ( (Collection) property.getValue() ).getKey().getColumnIterator();
+			}
+			else {
+				//find the appropriate reference key, can be in a join
+				Iterator joinsIt = referencedEntity.getJoinIterator();
+				KeyValue key = null;
+				while ( joinsIt.hasNext() ) {
+					Join join = (Join) joinsIt.next();
+					if ( join.containsProperty( property ) ) {
+						key = join.getKey();
+						break;
+					}
+				}
+				if ( key == null ) key = property.getPersistentClass().getIdentifier();
+				mappedByColumns = key.getColumnIterator();
+			}
+			while ( mappedByColumns.hasNext() ) {
+				Column column = (Column) mappedByColumns.next();
+				columns[0].linkValueUsingAColumnCopy( column, value );
+			}
+			String referencedPropertyName =
+					mappings.getPropertyReferencedAssociation(
+							"inverse__" + referencedEntity.getEntityName(), mappedBy
+					);
+			if ( referencedPropertyName != null ) {
+				//TODO always a many to one?
+				( (ManyToOne) value ).setReferencedPropertyName( referencedPropertyName );
+				mappings.addUniquePropertyReference( referencedEntity.getEntityName(), referencedPropertyName );
+			}
+			value.createForeignKey();
+		}
+		else {
+			BinderHelper.createSyntheticPropertyReference( columns, referencedEntity, null, value, true, mappings );
+			TableBinder.bindFk( referencedEntity, null, columns, value, unique, mappings );
+		}
+	}
+
+	public void setFkJoinColumns(Ejb3JoinColumn[] ejb3JoinColumns) {
+		this.fkJoinColumns = ejb3JoinColumns;
+	}
+
+	public void setExplicitAssociationTable(boolean explicitAssocTable) {
+		this.isExplicitAssociationTable = explicitAssocTable;
+	}
+
+	public void setElementColumns(Ejb3Column[] elementColumns) {
+		this.elementColumns = elementColumns;
+	}
+
+	public void setEmbedded(boolean annotationPresent) {
+		this.isEmbedded = annotationPresent;
+	}
+
+	public void setProperty(XProperty property) {
+		this.property = property;
+	}
+
+	public void setIgnoreNotFound(boolean ignoreNotFound) {
+		this.ignoreNotFound = ignoreNotFound;
+	}
+
+	public void setMapKeyColumns(Ejb3Column[] mapKeyColumns) {
+		this.mapKeyColumns = mapKeyColumns;
+	}
+
+	public void setMapKeyManyToManyColumns(Ejb3JoinColumn[] mapJoinColumns) {
+		this.mapKeyManyToManyColumns = mapJoinColumns;
+	}
+
+	public void setLocalGenerators(HashMap<String, IdGenerator> localGenerators) {
+		this.localGenerators = localGenerators;
+	}
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/EntityBinder.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/EntityBinder.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/EntityBinder.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,798 +0,0 @@
-//$Id$
-package org.hibernate.cfg.annotations;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import javax.persistence.Entity;
-import javax.persistence.JoinColumn;
-import javax.persistence.JoinTable;
-import javax.persistence.PrimaryKeyJoinColumn;
-import javax.persistence.SecondaryTable;
-import javax.persistence.SecondaryTables;
-import javax.persistence.UniqueConstraint;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.hibernate.AnnotationException;
-import org.hibernate.AssertionFailure;
-import org.hibernate.MappingException;
-import org.hibernate.EntityMode;
-import org.hibernate.annotations.AccessType;
-import org.hibernate.annotations.BatchSize;
-import org.hibernate.annotations.Cache;
-import org.hibernate.annotations.CacheConcurrencyStrategy;
-import org.hibernate.annotations.ForceDiscriminator;
-import org.hibernate.annotations.Loader;
-import org.hibernate.annotations.OptimisticLockType;
-import org.hibernate.annotations.PolymorphismType;
-import org.hibernate.annotations.Proxy;
-import org.hibernate.annotations.SQLDelete;
-import org.hibernate.annotations.SQLInsert;
-import org.hibernate.annotations.SQLUpdate;
-import org.hibernate.annotations.Tables;
-import org.hibernate.annotations.Where;
-import org.hibernate.annotations.SQLDeleteAll;
-import org.hibernate.annotations.Tuplizers;
-import org.hibernate.annotations.Tuplizer;
-import org.hibernate.annotations.Immutable;
-import org.hibernate.annotations.FetchMode;
-import org.hibernate.annotations.Persister;
-import org.hibernate.cache.CacheFactory;
-import org.hibernate.cfg.AnnotationBinder;
-import org.hibernate.cfg.BinderHelper;
-import org.hibernate.cfg.Ejb3JoinColumn;
-import org.hibernate.cfg.ExtendedMappings;
-import org.hibernate.cfg.InheritanceState;
-import org.hibernate.cfg.PropertyHolder;
-import org.hibernate.engine.Versioning;
-import org.hibernate.engine.ExecuteUpdateResultCheckStyle;
-import org.hibernate.engine.FilterDefinition;
-import org.hibernate.mapping.DependantValue;
-import org.hibernate.mapping.Join;
-import org.hibernate.mapping.PersistentClass;
-import org.hibernate.mapping.RootClass;
-import org.hibernate.mapping.SimpleValue;
-import org.hibernate.mapping.Table;
-import org.hibernate.mapping.TableOwner;
-import org.hibernate.mapping.Value;
-import org.hibernate.annotations.common.reflection.XAnnotatedElement;
-import org.hibernate.annotations.common.reflection.XClass;
-import org.hibernate.util.ReflectHelper;
-import org.hibernate.util.StringHelper;
-
-/**
- * Stateful holder and processor for binding Entity information
- *
- * @author Emmanuel Bernard
- */
-public class EntityBinder {
-	private String name;
-	private XClass annotatedClass;
-	private PersistentClass persistentClass;
-	private ExtendedMappings mappings;
-	private static Log log = LogFactory.getLog( EntityBinder.class );
-	private String discriminatorValue = "";
-	private boolean isPropertyAnnotated = false;
-	private boolean dynamicInsert;
-	private boolean dynamicUpdate;
-	private boolean explicitHibernateEntityAnnotation;
-	private OptimisticLockType optimisticLockType;
-	private PolymorphismType polymorphismType;
-	private boolean selectBeforeUpdate;
-	private int batchSize;
-	private boolean lazy;
-	private XClass proxyClass;
-	private String where;
-	private java.util.Map<String, Join> secondaryTables = new HashMap<String, Join>();
-	private java.util.Map<String, Object> secondaryTableJoins = new HashMap<String, Object>();
-	private String cacheConcurrentStrategy;
-	private String cacheRegion;
-	private java.util.Map<String, String> filters = new HashMap<String, String>();
-	private InheritanceState inheritanceState;
-	private boolean ignoreIdAnnotations;
-	private boolean cacheLazyProperty;
-	private String propertyAccessor;
-
-	public boolean isPropertyAnnotated() {
-		return isPropertyAnnotated;
-	}
-
-	/**
-	 * Use as a fake one for Collection of elements
-	 */
-	public EntityBinder() {
-	}
-
-	public EntityBinder(
-			Entity ejb3Ann, org.hibernate.annotations.Entity hibAnn,
-			XClass annotatedClass, PersistentClass persistentClass,
-			ExtendedMappings mappings
-	) {
-		this.mappings = mappings;
-		this.persistentClass = persistentClass;
-		this.annotatedClass = annotatedClass;
-		bindEjb3Annotation( ejb3Ann );
-		bindHibernateAnnotation( hibAnn );
-	}
-
-	private void bindHibernateAnnotation(org.hibernate.annotations.Entity hibAnn) {
-		if ( hibAnn != null ) {
-			dynamicInsert = hibAnn.dynamicInsert();
-			dynamicUpdate = hibAnn.dynamicUpdate();
-			optimisticLockType = hibAnn.optimisticLock();
-			selectBeforeUpdate = hibAnn.selectBeforeUpdate();
-			polymorphismType = hibAnn.polymorphism();
-			explicitHibernateEntityAnnotation = true;
-			//persister handled in bind
-		}
-		else {
-			//default values when the annotation is not there
-			dynamicInsert = false;
-			dynamicUpdate = false;
-			optimisticLockType = OptimisticLockType.VERSION;
-			polymorphismType = PolymorphismType.IMPLICIT;
-			selectBeforeUpdate = false;
-		}
-	}
-
-	private void bindEjb3Annotation(Entity ejb3Ann) {
-		if ( ejb3Ann == null ) throw new AssertionFailure( "@Entity should always be not null" );
-		if ( BinderHelper.isDefault( ejb3Ann.name() ) ) {
-			name = StringHelper.unqualify( annotatedClass.getName() );
-		}
-		else {
-			name = ejb3Ann.name();
-		}
-	}
-
-	public void setDiscriminatorValue(String discriminatorValue) {
-		this.discriminatorValue = discriminatorValue;
-	}
-
-	public void bindEntity() {
-		persistentClass.setAbstract( annotatedClass.isAbstract() );
-		persistentClass.setClassName( annotatedClass.getName() );
-		persistentClass.setNodeName( name );
-		//persistentClass.setDynamic(false); //no longer needed with the Entity name refactoring?
-		persistentClass.setEntityName( annotatedClass.getName() );
-		bindDiscriminatorValue();
-
-		persistentClass.setLazy( lazy );
-		if ( proxyClass != null ) {
-			persistentClass.setProxyInterfaceName( proxyClass.getName() );
-		}
-		persistentClass.setDynamicInsert( dynamicInsert );
-		persistentClass.setDynamicUpdate( dynamicUpdate );
-
-		if ( persistentClass instanceof RootClass ) {
-			RootClass rootClass = (RootClass) persistentClass;
-			boolean mutable = true;
-			//priority on @Immutable, then @Entity.mutable()
-			if ( annotatedClass.isAnnotationPresent( Immutable.class ) ) {
-				mutable = false;
-			}
-			else {
-				org.hibernate.annotations.Entity entityAnn =
-						annotatedClass.getAnnotation( org.hibernate.annotations.Entity.class );
-				if ( entityAnn != null ) {
-					mutable = entityAnn.mutable();
-				}
-			}
-			rootClass.setMutable( mutable );
-			rootClass.setExplicitPolymorphism( isExplicitPolymorphism( polymorphismType ) );
-			if ( StringHelper.isNotEmpty( where ) ) rootClass.setWhere( where );
-			if ( cacheConcurrentStrategy != null ) {
-				rootClass.setCacheConcurrencyStrategy( cacheConcurrentStrategy );
-				rootClass.setCacheRegionName( cacheRegion );
-				rootClass.setLazyPropertiesCacheable( cacheLazyProperty );
-			}
-			rootClass.setForceDiscriminator( annotatedClass.isAnnotationPresent( ForceDiscriminator.class ) );
-		}
-		else {
-			if ( explicitHibernateEntityAnnotation ) {
-				log.warn( "@org.hibernate.annotations.Entity used on a non root entity: ignored for "
-						+ annotatedClass.getName() );
-			}
-		}
-		persistentClass.setOptimisticLockMode( getVersioning( optimisticLockType ) );
-		persistentClass.setSelectBeforeUpdate( selectBeforeUpdate );
-
-		//set persister if needed
-		//@Persister has precedence over @Entity.persister
-		Persister persisterAnn = annotatedClass.getAnnotation( Persister.class );
-		Class persister = null;
-		if ( persisterAnn!= null ) {
-			persister = persisterAnn.impl();
-		}
-		else {
-			org.hibernate.annotations.Entity entityAnn = annotatedClass.getAnnotation( org.hibernate.annotations.Entity.class );
-			if (entityAnn != null && !BinderHelper.isDefault( entityAnn.persister() ) ) {
-				try {
-					persister = ReflectHelper.classForName( entityAnn.persister() );
-				}
-				catch (ClassNotFoundException cnfe) {
-					throw new AnnotationException( "Could not find persister class: " + persister );
-				}
-			}
-		}
-		if ( persister != null ) persistentClass.setEntityPersisterClass(persister);
-
-		persistentClass.setBatchSize( batchSize );
-
-		//SQL overriding
-		SQLInsert sqlInsert = annotatedClass.getAnnotation( SQLInsert.class );
-		SQLUpdate sqlUpdate = annotatedClass.getAnnotation( SQLUpdate.class );
-		SQLDelete sqlDelete = annotatedClass.getAnnotation( SQLDelete.class );
-		SQLDeleteAll sqlDeleteAll = annotatedClass.getAnnotation( SQLDeleteAll.class );
-		Loader loader = annotatedClass.getAnnotation( Loader.class );
-		if ( sqlInsert != null ) {
-			persistentClass.setCustomSQLInsert( sqlInsert.sql().trim(), sqlInsert.callable(),
-					ExecuteUpdateResultCheckStyle.parse( sqlInsert.check().toString().toLowerCase() )
-			);
-
-		}
-		if ( sqlUpdate != null ) {
-			persistentClass.setCustomSQLUpdate( sqlUpdate.sql(), sqlUpdate.callable(),
-					ExecuteUpdateResultCheckStyle.parse( sqlUpdate.check().toString().toLowerCase() )
-			);
-		}
-		if ( sqlDelete != null ) {
-			persistentClass.setCustomSQLDelete( sqlDelete.sql(), sqlDelete.callable(),
-					ExecuteUpdateResultCheckStyle.parse( sqlDelete.check().toString().toLowerCase() )
-			);
-		}
-		if ( sqlDeleteAll != null ) {
-			persistentClass.setCustomSQLDelete( sqlDeleteAll.sql(), sqlDeleteAll.callable(),
-					ExecuteUpdateResultCheckStyle.parse( sqlDeleteAll.check().toString().toLowerCase() )
-			);
-		}
-		if ( loader != null ) {
-			persistentClass.setLoaderName( loader.namedQuery() );
-		}
-
-		//tuplizers
-		if ( annotatedClass.isAnnotationPresent( Tuplizers.class ) ) {
-			for ( Tuplizer tuplizer : annotatedClass.getAnnotation( Tuplizers.class ).value() ) {
-				EntityMode mode = EntityMode.parse( tuplizer.entityMode() );
-				persistentClass.addTuplizer( mode, tuplizer.impl().getName() );
-			}
-		}
-		if ( annotatedClass.isAnnotationPresent( Tuplizer.class ) ) {
-			Tuplizer tuplizer = annotatedClass.getAnnotation( Tuplizer.class );
-			EntityMode mode = EntityMode.parse( tuplizer.entityMode() );
-			persistentClass.addTuplizer( mode, tuplizer.impl().getName() );
-		}
-
-		if ( !inheritanceState.hasParents ) {
-			Iterator<Map.Entry<String, String>> iter = filters.entrySet().iterator();
-			while ( iter.hasNext() ) {
-				Map.Entry<String, String> filter = iter.next();
-				String filterName = filter.getKey();
-				String cond = filter.getValue();
-				if ( BinderHelper.isDefault( cond ) ) {
-					FilterDefinition definition = mappings.getFilterDefinition( filterName );
-					cond = definition == null ? null : definition.getDefaultFilterCondition();
-					if ( StringHelper.isEmpty( cond ) ) {
-						throw new AnnotationException(
-								"no filter condition found for filter " + filterName + " in " + this.name
-						);
-					}
-				}
-				persistentClass.addFilter( filterName, cond );
-			}
-		}
-		else {
-			if ( filters.size() > 0 ) {
-				log.warn( "@Filter not allowed on subclasses (ignored): " + persistentClass.getEntityName() );
-			}
-		}
-		log.debug( "Import with entity name=" + name );
-		try {
-			mappings.addImport( persistentClass.getEntityName(), name );
-			String entityName = persistentClass.getEntityName();
-			if ( !entityName.equals( name ) ) {
-				mappings.addImport( entityName, entityName );
-			}
-		}
-		catch (MappingException me) {
-			throw new AnnotationException( "Use of the same entity name twice: " + name, me );
-		}
-	}
-
-	public void bindDiscriminatorValue() {
-		if ( StringHelper.isEmpty( discriminatorValue ) ) {
-			Value discriminator = persistentClass.getDiscriminator();
-			if ( discriminator == null ) {
-				persistentClass.setDiscriminatorValue( name );
-			}
-			else if ( "character".equals( discriminator.getType().getName() ) ) {
-				throw new AnnotationException(
-						"Using default @DiscriminatorValue for a discriminator of type CHAR is not safe"
-				);
-			}
-			else if ( "integer".equals( discriminator.getType().getName() ) ) {
-				persistentClass.setDiscriminatorValue( String.valueOf( name.hashCode() ) );
-			}
-			else {
-				persistentClass.setDiscriminatorValue( name ); //Spec compliant
-			}
-		}
-		else {
-			//persistentClass.getDiscriminator()
-			persistentClass.setDiscriminatorValue( discriminatorValue );
-		}
-	}
-
-	int getVersioning(OptimisticLockType type) {
-		switch (type) {
-			case VERSION:
-				return Versioning.OPTIMISTIC_LOCK_VERSION;
-			case NONE:
-				return Versioning.OPTIMISTIC_LOCK_NONE;
-			case DIRTY:
-				return Versioning.OPTIMISTIC_LOCK_DIRTY;
-			case ALL:
-				return Versioning.OPTIMISTIC_LOCK_ALL;
-			default:
-				throw new AssertionFailure( "optimistic locking not supported: " + type );
-		}
-	}
-
-	private boolean isExplicitPolymorphism(PolymorphismType type) {
-		switch (type) {
-			case IMPLICIT:
-				return false;
-			case EXPLICIT:
-				return true;
-			default:
-				throw new AssertionFailure( "Unknown polymorphism type: " + type );
-		}
-	}
-
-	public void setBatchSize(BatchSize sizeAnn) {
-		if ( sizeAnn != null ) {
-			batchSize = sizeAnn.size();
-		}
-		else {
-			batchSize = -1;
-		}
-	}
-
-	public void setProxy(Proxy proxy) {
-		if ( proxy != null ) {
-			lazy = proxy.lazy();
-			if ( !lazy ) {
-				proxyClass = null;
-			}
-			else {
-				if ( AnnotationBinder.isDefault(
-						mappings.getReflectionManager().toXClass( proxy.proxyClass() ), mappings
-				) ) {
-					proxyClass = annotatedClass;
-				}
-				else {
-					proxyClass = mappings.getReflectionManager().toXClass( proxy.proxyClass() );
-				}
-			}
-		}
-		else {
-			lazy = true; //needed to allow association lazy loading.
-			proxyClass = annotatedClass;
-		}
-	}
-
-	public void setWhere(Where whereAnn) {
-		if ( whereAnn != null ) {
-			where = whereAnn.clause();
-		}
-	}
-
-	private String getClassTableName(String tableName) {
-		if ( StringHelper.isEmpty( tableName ) ) {
-			return mappings.getNamingStrategy().classToTableName( name );
-		}
-		else {
-			return mappings.getNamingStrategy().tableName( tableName );
-		}
-	}
-
-	public void bindTable(
-			String schema, String catalog,
-			String tableName, List uniqueConstraints,
-			String constraints, Table denormalizedSuperclassTable
-	) {
-		String logicalName = StringHelper.isNotEmpty( tableName ) ?
-				tableName :
-				StringHelper.unqualify( name );
-		Table table = TableBinder.fillTable(
-				schema, catalog,
-				getClassTableName( tableName ),
-				logicalName,
-				persistentClass.isAbstract(), uniqueConstraints, constraints,
-				denormalizedSuperclassTable, mappings
-		);
-
-		if ( persistentClass instanceof TableOwner ) {
-			if ( log.isInfoEnabled() ) {
-				log.info( "Bind entity " + persistentClass.getEntityName() + " on table " + table.getName() );
-			}
-			( (TableOwner) persistentClass ).setTable( table );
-		}
-		else {
-			throw new AssertionFailure( "binding a table for a subclass" );
-		}
-	}
-
-	public void finalSecondaryTableBinding(PropertyHolder propertyHolder) {
-		/*
-		 * Those operations has to be done after the id definition of the persistence class.
-		 * ie after the properties parsing
-		 */
-		Iterator joins = secondaryTables.values().iterator();
-		Iterator joinColumns = secondaryTableJoins.values().iterator();
-
-		while ( joins.hasNext() ) {
-			Object uncastedColumn = joinColumns.next();
-			Join join = (Join) joins.next();
-			createPrimaryColumnsToSecondaryTable( uncastedColumn, propertyHolder, join );
-		}
-		mappings.addJoins( persistentClass, secondaryTables );
-	}
-
-	private void createPrimaryColumnsToSecondaryTable(Object uncastedColumn, PropertyHolder propertyHolder, Join join) {
-		Ejb3JoinColumn[] ejb3JoinColumns;
-		PrimaryKeyJoinColumn[] pkColumnsAnn = null;
-		JoinColumn[] joinColumnsAnn = null;
-		if ( uncastedColumn instanceof PrimaryKeyJoinColumn[] ) {
-			pkColumnsAnn = (PrimaryKeyJoinColumn[]) uncastedColumn;
-		}
-		if ( uncastedColumn instanceof JoinColumn[] ) {
-			joinColumnsAnn = (JoinColumn[]) uncastedColumn;
-		}
-		if ( pkColumnsAnn == null && joinColumnsAnn == null ) {
-			ejb3JoinColumns = new Ejb3JoinColumn[1];
-			ejb3JoinColumns[0] = Ejb3JoinColumn.buildJoinColumn(
-					null,
-					null,
-					persistentClass.getIdentifier(),
-					secondaryTables,
-					propertyHolder, mappings
-			);
-		}
-		else {
-			int nbrOfJoinColumns = pkColumnsAnn != null ?
-					pkColumnsAnn.length :
-					joinColumnsAnn.length;
-			if ( nbrOfJoinColumns == 0 ) {
-				ejb3JoinColumns = new Ejb3JoinColumn[1];
-				ejb3JoinColumns[0] = Ejb3JoinColumn.buildJoinColumn(
-						null,
-						null,
-						persistentClass.getIdentifier(),
-						secondaryTables,
-						propertyHolder, mappings
-				);
-			}
-			else {
-				ejb3JoinColumns = new Ejb3JoinColumn[nbrOfJoinColumns];
-				if ( pkColumnsAnn != null ) {
-					for ( int colIndex = 0; colIndex < nbrOfJoinColumns; colIndex++ ) {
-						ejb3JoinColumns[colIndex] = Ejb3JoinColumn.buildJoinColumn(
-								pkColumnsAnn[colIndex],
-								null,
-								persistentClass.getIdentifier(),
-								secondaryTables,
-								propertyHolder, mappings
-						);
-					}
-				}
-				else {
-					for ( int colIndex = 0; colIndex < nbrOfJoinColumns; colIndex++ ) {
-						ejb3JoinColumns[colIndex] = Ejb3JoinColumn.buildJoinColumn(
-								null,
-								joinColumnsAnn[colIndex],
-								persistentClass.getIdentifier(),
-								secondaryTables,
-								propertyHolder, mappings
-						);
-					}
-				}
-			}
-		}
-
-		for ( Ejb3JoinColumn joinColumn : ejb3JoinColumns ) {
-			joinColumn.forceNotNull();
-		}
-		bindJoinToPersistentClass( join, ejb3JoinColumns );
-	}
-
-	private void bindJoinToPersistentClass(
-			Join join, Ejb3JoinColumn[] ejb3JoinColumns
-	) {
-		SimpleValue key = new DependantValue( join.getTable(), persistentClass.getIdentifier() );
-		join.setKey( key );
-		setFKNameIfDefined(join);
-		key.setCascadeDeleteEnabled( false );
-		TableBinder.bindFk( persistentClass, null, ejb3JoinColumns, key, false, mappings );
-		join.createPrimaryKey();
-		join.createForeignKey();
-		persistentClass.addJoin( join );
-	}
-
-	private void setFKNameIfDefined(Join join) {
-		org.hibernate.annotations.Table matchingTable = findMatchingComplimentTableAnnotation( join );
-		if (matchingTable != null && ! BinderHelper.isDefault( matchingTable.foreignKey().name() ) ) {
-			( (SimpleValue) join.getKey() ).setForeignKeyName( matchingTable.foreignKey().name() );
-		}
-	}
-
-	private org.hibernate.annotations.Table findMatchingComplimentTableAnnotation(Join join) {
-		String tableName = join.getTable().getQuotedName();
-		org.hibernate.annotations.Table table = annotatedClass.getAnnotation( org.hibernate.annotations.Table.class );
-		org.hibernate.annotations.Table matchingTable = null;
-		if ( table != null && tableName.equals( table.appliesTo() ) ) {
-			matchingTable = table;
-		}
-		else {
-			Tables tables = annotatedClass.getAnnotation( Tables.class );
-			if ( tables != null) {
-				for (org.hibernate.annotations.Table current : tables.value() ) {
-					if ( tableName.equals( current.appliesTo() ) ) {
-						matchingTable = current;
-						break;
-					}
-				}
-			}
-		}
-		return matchingTable;
-	}
-
-	public void firstLevelSecondaryTablesBinding(
-			SecondaryTable secTable, SecondaryTables secTables
-	) {
-		if ( secTables != null ) {
-			//loop through it
-			for ( SecondaryTable tab : secTables.value() ) {
-				addJoin( tab, null, null, false );
-			}
-		}
-		else {
-			if ( secTable != null ) addJoin( secTable, null, null, false );
-		}
-	}
-
-	//Used for @*ToMany @JoinTable
-	public Join addJoin(JoinTable joinTable, PropertyHolder holder, boolean noDelayInPkColumnCreation) {
-		return addJoin( null, joinTable, holder, noDelayInPkColumnCreation );
-	}
-
-	/**
-	 * A non null propertyHolder means than we process the Pk creation without delay
-	 */
-	private Join addJoin(
-			SecondaryTable secondaryTable, JoinTable joinTable, PropertyHolder propertyHolder,
-			boolean noDelayInPkColumnCreation
-	) {
-		Join join = new Join();
-		join.setPersistentClass( persistentClass );
-		String schema;
-		String catalog;
-		String table;
-		String realTable;
-		UniqueConstraint[] uniqueConstraintsAnn;
-		if ( secondaryTable != null ) {
-			schema = secondaryTable.schema();
-			catalog = secondaryTable.catalog();
-			table = secondaryTable.name();
-			realTable = mappings.getNamingStrategy().tableName( table ); //always an explicit table name
-			uniqueConstraintsAnn = secondaryTable.uniqueConstraints();
-		}
-		else if ( joinTable != null ) {
-			schema = joinTable.schema();
-			catalog = joinTable.catalog();
-			table = joinTable.name();
-			realTable = mappings.getNamingStrategy().tableName( table ); //always an explicit table name
-			uniqueConstraintsAnn = joinTable.uniqueConstraints();
-		}
-		else {
-			throw new AssertionFailure( "Both JoinTable and SecondaryTable are null" );
-		}
-		List uniqueConstraints = new ArrayList( uniqueConstraintsAnn == null ?
-				0 :
-				uniqueConstraintsAnn.length );
-		if ( uniqueConstraintsAnn != null && uniqueConstraintsAnn.length != 0 ) {
-			for ( UniqueConstraint uc : uniqueConstraintsAnn ) {
-				uniqueConstraints.add( uc.columnNames() );
-			}
-		}
-		Table tableMapping = TableBinder.fillTable(
-				schema,
-				catalog,
-				realTable,
-				table, false, uniqueConstraints, null, null, mappings
-		);
-		//no check constraints available on joins
-		join.setTable( tableMapping );
-
-		//somehow keep joins() for later.
-		//Has to do the work later because it needs persistentClass id!
-		Object joinColumns = null;
-		//get the appropriate pk columns
-		if ( secondaryTable != null ) {
-			joinColumns = secondaryTable.pkJoinColumns();
-		}
-		else if ( joinTable != null ) {
-			joinColumns = joinTable.joinColumns();
-		}
-		if ( log.isInfoEnabled() ) {
-			log.info(
-					"Adding secondary table to entity " + persistentClass.getEntityName() + " -> " + join.getTable()
-							.getName()
-			);
-		}
-
-		org.hibernate.annotations.Table matchingTable = findMatchingComplimentTableAnnotation( join );
-		if (matchingTable != null) {
-			join.setSequentialSelect( FetchMode.JOIN != matchingTable.fetch() );
-			join.setInverse( matchingTable.inverse() );
-			join.setOptional( matchingTable.optional() );
-			if ( ! BinderHelper.isDefault( matchingTable.sqlInsert().sql() ) ) {
-				join.setCustomSQLInsert( matchingTable.sqlInsert().sql().trim(),
-						matchingTable.sqlInsert().callable(),
-						ExecuteUpdateResultCheckStyle.parse( matchingTable.sqlInsert().check().toString().toLowerCase() )
-				);
-			}
-			if ( ! BinderHelper.isDefault( matchingTable.sqlUpdate().sql() ) ) {
-				join.setCustomSQLUpdate( matchingTable.sqlUpdate().sql().trim(), 
-						matchingTable.sqlUpdate().callable(),
-						ExecuteUpdateResultCheckStyle.parse( matchingTable.sqlUpdate().check().toString().toLowerCase() )
-				);
-			}
-			if ( ! BinderHelper.isDefault( matchingTable.sqlDelete().sql() ) ) {
-				join.setCustomSQLDelete( matchingTable.sqlDelete().sql().trim(),
-						matchingTable.sqlDelete().callable(),
-						ExecuteUpdateResultCheckStyle.parse( matchingTable.sqlDelete().check().toString().toLowerCase() )
-				);
-			}
-		}
-		else {
-			//default
-			join.setSequentialSelect( false );
-			join.setInverse( false );
-			join.setOptional( true ); //perhaps not quite per-spec, but a Good Thing anyway
-		}
-
-		if ( noDelayInPkColumnCreation ) {
-			createPrimaryColumnsToSecondaryTable( joinColumns, propertyHolder, join );
-		}
-		else {
-			secondaryTables.put( table, join );
-			secondaryTableJoins.put( table, joinColumns );
-		}
-		return join;
-	}
-
-	public java.util.Map<String, Join> getSecondaryTables() {
-		return secondaryTables;
-	}
-
-	public void setCache(Cache cacheAnn) {
-		if ( cacheAnn != null ) {
-			cacheRegion = BinderHelper.isDefault( cacheAnn.region() ) ?
-					null :
-					cacheAnn.region();
-			cacheConcurrentStrategy = getCacheConcurrencyStrategy( cacheAnn.usage() );
-			if ( "all".equalsIgnoreCase( cacheAnn.include() ) ) {
-				cacheLazyProperty = true;
-			}
-			else if ( "non-lazy".equalsIgnoreCase( cacheAnn.include() ) ) {
-				cacheLazyProperty = false;
-			}
-			else {
-				throw new AnnotationException( "Unknown lazy property annotations: " + cacheAnn.include() );
-			}
-		}
-		else {
-			cacheConcurrentStrategy = null;
-			cacheRegion = null;
-			cacheLazyProperty = true;
-		}
-	}
-
-	public static String getCacheConcurrencyStrategy(CacheConcurrencyStrategy strategy) {
-		switch (strategy) {
-			case NONE:
-				return null;
-			case READ_ONLY:
-				return CacheFactory.READ_ONLY;
-			case READ_WRITE:
-				return CacheFactory.READ_WRITE;
-			case NONSTRICT_READ_WRITE:
-				return CacheFactory.NONSTRICT_READ_WRITE;
-			case TRANSACTIONAL:
-				return CacheFactory.TRANSACTIONAL;
-			default:
-				throw new AssertionFailure( "CacheConcurrencyStrategy unknown: " + strategy );
-		}
-	}
-
-	public void addFilter(String name, String condition) {
-		filters.put( name, condition );
-	}
-
-	public void setInheritanceState(InheritanceState inheritanceState) {
-		this.inheritanceState = inheritanceState;
-	}
-
-	public boolean isIgnoreIdAnnotations() {
-		return ignoreIdAnnotations;
-	}
-
-	public void setIgnoreIdAnnotations(boolean ignoreIdAnnotations) {
-		this.ignoreIdAnnotations = ignoreIdAnnotations;
-	}
-
-	public void processComplementaryTableDefinitions(org.hibernate.annotations.Table table) {
-		if ( table == null ) return;
-		String appliedTable = table.appliesTo();
-		Iterator tables = persistentClass.getTableClosureIterator();
-		Table hibTable = null;
-		while ( tables.hasNext() ) {
-			hibTable = (Table) tables.next();
-			if ( hibTable.getQuotedName().equals( appliedTable ) ) {
-				//we are in the correct table to find columns
-				break;
-			}
-		}
-		if ( hibTable == null ) {
-			throw new AnnotationException(
-					"@org.hibernate.annotations.Table references an unknown table: " + appliedTable
-			);
-		}
-		if ( ! BinderHelper.isDefault( table.comment() ) ) hibTable.setComment( table.comment() );
-		TableBinder.addIndexes( hibTable, table.indexes(), mappings );
-	}
-
-	public void processComplementaryTableDefinitions(Tables tables) {
-		if ( tables == null ) return;
-		for ( org.hibernate.annotations.Table table : tables.value() ) {
-			processComplementaryTableDefinitions( table );
-		}
-	}
-
-	public void setPropertyAnnotated(boolean propertyAnnotated) {
-		this.isPropertyAnnotated = propertyAnnotated;
-	}
-
-	public String getPropertyAccessor() {
-		return propertyAccessor;
-	}
-
-	public void setPropertyAccessor(String propertyAccessor) {
-		this.propertyAccessor = propertyAccessor;
-	}
-
-	public boolean isPropertyAnnotated(XAnnotatedElement element) {
-		AccessType access = element.getAnnotation( AccessType.class );
-		if ( access == null ) return isPropertyAnnotated;
-		String propertyAccessor = access.value();
-		if ( "property".equals( propertyAccessor ) ) {
-			return Boolean.TRUE;
-		}
-		else if ( "field".equals( propertyAccessor ) ) {
-			return Boolean.FALSE;
-		}
-		else {
-			return isPropertyAnnotated;
-		}
-	}
-
-	public String getPropertyAccessor(XAnnotatedElement element) {
-		AccessType access = element.getAnnotation( AccessType.class );
-		if ( access == null ) return propertyAccessor;
-		return access.value();
-	}
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/EntityBinder.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/EntityBinder.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/EntityBinder.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/EntityBinder.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,798 @@
+//$Id$
+package org.hibernate.cfg.annotations;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
+import javax.persistence.PrimaryKeyJoinColumn;
+import javax.persistence.SecondaryTable;
+import javax.persistence.SecondaryTables;
+import javax.persistence.UniqueConstraint;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.hibernate.AnnotationException;
+import org.hibernate.AssertionFailure;
+import org.hibernate.MappingException;
+import org.hibernate.EntityMode;
+import org.hibernate.annotations.AccessType;
+import org.hibernate.annotations.BatchSize;
+import org.hibernate.annotations.Cache;
+import org.hibernate.annotations.CacheConcurrencyStrategy;
+import org.hibernate.annotations.ForceDiscriminator;
+import org.hibernate.annotations.Loader;
+import org.hibernate.annotations.OptimisticLockType;
+import org.hibernate.annotations.PolymorphismType;
+import org.hibernate.annotations.Proxy;
+import org.hibernate.annotations.SQLDelete;
+import org.hibernate.annotations.SQLInsert;
+import org.hibernate.annotations.SQLUpdate;
+import org.hibernate.annotations.Tables;
+import org.hibernate.annotations.Where;
+import org.hibernate.annotations.SQLDeleteAll;
+import org.hibernate.annotations.Tuplizers;
+import org.hibernate.annotations.Tuplizer;
+import org.hibernate.annotations.Immutable;
+import org.hibernate.annotations.FetchMode;
+import org.hibernate.annotations.Persister;
+import org.hibernate.cache.CacheFactory;
+import org.hibernate.cfg.AnnotationBinder;
+import org.hibernate.cfg.BinderHelper;
+import org.hibernate.cfg.Ejb3JoinColumn;
+import org.hibernate.cfg.ExtendedMappings;
+import org.hibernate.cfg.InheritanceState;
+import org.hibernate.cfg.PropertyHolder;
+import org.hibernate.engine.Versioning;
+import org.hibernate.engine.ExecuteUpdateResultCheckStyle;
+import org.hibernate.engine.FilterDefinition;
+import org.hibernate.mapping.DependantValue;
+import org.hibernate.mapping.Join;
+import org.hibernate.mapping.PersistentClass;
+import org.hibernate.mapping.RootClass;
+import org.hibernate.mapping.SimpleValue;
+import org.hibernate.mapping.Table;
+import org.hibernate.mapping.TableOwner;
+import org.hibernate.mapping.Value;
+import org.hibernate.annotations.common.reflection.XAnnotatedElement;
+import org.hibernate.annotations.common.reflection.XClass;
+import org.hibernate.util.ReflectHelper;
+import org.hibernate.util.StringHelper;
+
+/**
+ * Stateful holder and processor for binding Entity information
+ *
+ * @author Emmanuel Bernard
+ */
+public class EntityBinder {
+	private String name;
+	private XClass annotatedClass;
+	private PersistentClass persistentClass;
+	private ExtendedMappings mappings;
+	private static Log log = LogFactory.getLog( EntityBinder.class );
+	private String discriminatorValue = "";
+	private boolean isPropertyAnnotated = false;
+	private boolean dynamicInsert;
+	private boolean dynamicUpdate;
+	private boolean explicitHibernateEntityAnnotation;
+	private OptimisticLockType optimisticLockType;
+	private PolymorphismType polymorphismType;
+	private boolean selectBeforeUpdate;
+	private int batchSize;
+	private boolean lazy;
+	private XClass proxyClass;
+	private String where;
+	private java.util.Map<String, Join> secondaryTables = new HashMap<String, Join>();
+	private java.util.Map<String, Object> secondaryTableJoins = new HashMap<String, Object>();
+	private String cacheConcurrentStrategy;
+	private String cacheRegion;
+	private java.util.Map<String, String> filters = new HashMap<String, String>();
+	private InheritanceState inheritanceState;
+	private boolean ignoreIdAnnotations;
+	private boolean cacheLazyProperty;
+	private String propertyAccessor;
+
+	public boolean isPropertyAnnotated() {
+		return isPropertyAnnotated;
+	}
+
+	/**
+	 * Use as a fake one for Collection of elements
+	 */
+	public EntityBinder() {
+	}
+
+	public EntityBinder(
+			Entity ejb3Ann, org.hibernate.annotations.Entity hibAnn,
+			XClass annotatedClass, PersistentClass persistentClass,
+			ExtendedMappings mappings
+	) {
+		this.mappings = mappings;
+		this.persistentClass = persistentClass;
+		this.annotatedClass = annotatedClass;
+		bindEjb3Annotation( ejb3Ann );
+		bindHibernateAnnotation( hibAnn );
+	}
+
+	private void bindHibernateAnnotation(org.hibernate.annotations.Entity hibAnn) {
+		if ( hibAnn != null ) {
+			dynamicInsert = hibAnn.dynamicInsert();
+			dynamicUpdate = hibAnn.dynamicUpdate();
+			optimisticLockType = hibAnn.optimisticLock();
+			selectBeforeUpdate = hibAnn.selectBeforeUpdate();
+			polymorphismType = hibAnn.polymorphism();
+			explicitHibernateEntityAnnotation = true;
+			//persister handled in bind
+		}
+		else {
+			//default values when the annotation is not there
+			dynamicInsert = false;
+			dynamicUpdate = false;
+			optimisticLockType = OptimisticLockType.VERSION;
+			polymorphismType = PolymorphismType.IMPLICIT;
+			selectBeforeUpdate = false;
+		}
+	}
+
+	private void bindEjb3Annotation(Entity ejb3Ann) {
+		if ( ejb3Ann == null ) throw new AssertionFailure( "@Entity should always be not null" );
+		if ( BinderHelper.isDefault( ejb3Ann.name() ) ) {
+			name = StringHelper.unqualify( annotatedClass.getName() );
+		}
+		else {
+			name = ejb3Ann.name();
+		}
+	}
+
+	public void setDiscriminatorValue(String discriminatorValue) {
+		this.discriminatorValue = discriminatorValue;
+	}
+
+	public void bindEntity() {
+		persistentClass.setAbstract( annotatedClass.isAbstract() );
+		persistentClass.setClassName( annotatedClass.getName() );
+		persistentClass.setNodeName( name );
+		//persistentClass.setDynamic(false); //no longer needed with the Entity name refactoring?
+		persistentClass.setEntityName( annotatedClass.getName() );
+		bindDiscriminatorValue();
+
+		persistentClass.setLazy( lazy );
+		if ( proxyClass != null ) {
+			persistentClass.setProxyInterfaceName( proxyClass.getName() );
+		}
+		persistentClass.setDynamicInsert( dynamicInsert );
+		persistentClass.setDynamicUpdate( dynamicUpdate );
+
+		if ( persistentClass instanceof RootClass ) {
+			RootClass rootClass = (RootClass) persistentClass;
+			boolean mutable = true;
+			//priority on @Immutable, then @Entity.mutable()
+			if ( annotatedClass.isAnnotationPresent( Immutable.class ) ) {
+				mutable = false;
+			}
+			else {
+				org.hibernate.annotations.Entity entityAnn =
+						annotatedClass.getAnnotation( org.hibernate.annotations.Entity.class );
+				if ( entityAnn != null ) {
+					mutable = entityAnn.mutable();
+				}
+			}
+			rootClass.setMutable( mutable );
+			rootClass.setExplicitPolymorphism( isExplicitPolymorphism( polymorphismType ) );
+			if ( StringHelper.isNotEmpty( where ) ) rootClass.setWhere( where );
+			if ( cacheConcurrentStrategy != null ) {
+				rootClass.setCacheConcurrencyStrategy( cacheConcurrentStrategy );
+				rootClass.setCacheRegionName( cacheRegion );
+				rootClass.setLazyPropertiesCacheable( cacheLazyProperty );
+			}
+			rootClass.setForceDiscriminator( annotatedClass.isAnnotationPresent( ForceDiscriminator.class ) );
+		}
+		else {
+			if ( explicitHibernateEntityAnnotation ) {
+				log.warn( "@org.hibernate.annotations.Entity used on a non root entity: ignored for "
+						+ annotatedClass.getName() );
+			}
+		}
+		persistentClass.setOptimisticLockMode( getVersioning( optimisticLockType ) );
+		persistentClass.setSelectBeforeUpdate( selectBeforeUpdate );
+
+		//set persister if needed
+		//@Persister has precedence over @Entity.persister
+		Persister persisterAnn = annotatedClass.getAnnotation( Persister.class );
+		Class persister = null;
+		if ( persisterAnn!= null ) {
+			persister = persisterAnn.impl();
+		}
+		else {
+			org.hibernate.annotations.Entity entityAnn = annotatedClass.getAnnotation( org.hibernate.annotations.Entity.class );
+			if (entityAnn != null && !BinderHelper.isDefault( entityAnn.persister() ) ) {
+				try {
+					persister = ReflectHelper.classForName( entityAnn.persister() );
+				}
+				catch (ClassNotFoundException cnfe) {
+					throw new AnnotationException( "Could not find persister class: " + persister );
+				}
+			}
+		}
+		if ( persister != null ) persistentClass.setEntityPersisterClass(persister);
+
+		persistentClass.setBatchSize( batchSize );
+
+		//SQL overriding
+		SQLInsert sqlInsert = annotatedClass.getAnnotation( SQLInsert.class );
+		SQLUpdate sqlUpdate = annotatedClass.getAnnotation( SQLUpdate.class );
+		SQLDelete sqlDelete = annotatedClass.getAnnotation( SQLDelete.class );
+		SQLDeleteAll sqlDeleteAll = annotatedClass.getAnnotation( SQLDeleteAll.class );
+		Loader loader = annotatedClass.getAnnotation( Loader.class );
+		if ( sqlInsert != null ) {
+			persistentClass.setCustomSQLInsert( sqlInsert.sql().trim(), sqlInsert.callable(),
+					ExecuteUpdateResultCheckStyle.parse( sqlInsert.check().toString().toLowerCase() )
+			);
+
+		}
+		if ( sqlUpdate != null ) {
+			persistentClass.setCustomSQLUpdate( sqlUpdate.sql(), sqlUpdate.callable(),
+					ExecuteUpdateResultCheckStyle.parse( sqlUpdate.check().toString().toLowerCase() )
+			);
+		}
+		if ( sqlDelete != null ) {
+			persistentClass.setCustomSQLDelete( sqlDelete.sql(), sqlDelete.callable(),
+					ExecuteUpdateResultCheckStyle.parse( sqlDelete.check().toString().toLowerCase() )
+			);
+		}
+		if ( sqlDeleteAll != null ) {
+			persistentClass.setCustomSQLDelete( sqlDeleteAll.sql(), sqlDeleteAll.callable(),
+					ExecuteUpdateResultCheckStyle.parse( sqlDeleteAll.check().toString().toLowerCase() )
+			);
+		}
+		if ( loader != null ) {
+			persistentClass.setLoaderName( loader.namedQuery() );
+		}
+
+		//tuplizers
+		if ( annotatedClass.isAnnotationPresent( Tuplizers.class ) ) {
+			for ( Tuplizer tuplizer : annotatedClass.getAnnotation( Tuplizers.class ).value() ) {
+				EntityMode mode = EntityMode.parse( tuplizer.entityMode() );
+				persistentClass.addTuplizer( mode, tuplizer.impl().getName() );
+			}
+		}
+		if ( annotatedClass.isAnnotationPresent( Tuplizer.class ) ) {
+			Tuplizer tuplizer = annotatedClass.getAnnotation( Tuplizer.class );
+			EntityMode mode = EntityMode.parse( tuplizer.entityMode() );
+			persistentClass.addTuplizer( mode, tuplizer.impl().getName() );
+		}
+
+		if ( !inheritanceState.hasParents ) {
+			Iterator<Map.Entry<String, String>> iter = filters.entrySet().iterator();
+			while ( iter.hasNext() ) {
+				Map.Entry<String, String> filter = iter.next();
+				String filterName = filter.getKey();
+				String cond = filter.getValue();
+				if ( BinderHelper.isDefault( cond ) ) {
+					FilterDefinition definition = mappings.getFilterDefinition( filterName );
+					cond = definition == null ? null : definition.getDefaultFilterCondition();
+					if ( StringHelper.isEmpty( cond ) ) {
+						throw new AnnotationException(
+								"no filter condition found for filter " + filterName + " in " + this.name
+						);
+					}
+				}
+				persistentClass.addFilter( filterName, cond );
+			}
+		}
+		else {
+			if ( filters.size() > 0 ) {
+				log.warn( "@Filter not allowed on subclasses (ignored): " + persistentClass.getEntityName() );
+			}
+		}
+		log.debug( "Import with entity name=" + name );
+		try {
+			mappings.addImport( persistentClass.getEntityName(), name );
+			String entityName = persistentClass.getEntityName();
+			if ( !entityName.equals( name ) ) {
+				mappings.addImport( entityName, entityName );
+			}
+		}
+		catch (MappingException me) {
+			throw new AnnotationException( "Use of the same entity name twice: " + name, me );
+		}
+	}
+
+	public void bindDiscriminatorValue() {
+		if ( StringHelper.isEmpty( discriminatorValue ) ) {
+			Value discriminator = persistentClass.getDiscriminator();
+			if ( discriminator == null ) {
+				persistentClass.setDiscriminatorValue( name );
+			}
+			else if ( "character".equals( discriminator.getType().getName() ) ) {
+				throw new AnnotationException(
+						"Using default @DiscriminatorValue for a discriminator of type CHAR is not safe"
+				);
+			}
+			else if ( "integer".equals( discriminator.getType().getName() ) ) {
+				persistentClass.setDiscriminatorValue( String.valueOf( name.hashCode() ) );
+			}
+			else {
+				persistentClass.setDiscriminatorValue( name ); //Spec compliant
+			}
+		}
+		else {
+			//persistentClass.getDiscriminator()
+			persistentClass.setDiscriminatorValue( discriminatorValue );
+		}
+	}
+
+	int getVersioning(OptimisticLockType type) {
+		switch (type) {
+			case VERSION:
+				return Versioning.OPTIMISTIC_LOCK_VERSION;
+			case NONE:
+				return Versioning.OPTIMISTIC_LOCK_NONE;
+			case DIRTY:
+				return Versioning.OPTIMISTIC_LOCK_DIRTY;
+			case ALL:
+				return Versioning.OPTIMISTIC_LOCK_ALL;
+			default:
+				throw new AssertionFailure( "optimistic locking not supported: " + type );
+		}
+	}
+
+	private boolean isExplicitPolymorphism(PolymorphismType type) {
+		switch (type) {
+			case IMPLICIT:
+				return false;
+			case EXPLICIT:
+				return true;
+			default:
+				throw new AssertionFailure( "Unknown polymorphism type: " + type );
+		}
+	}
+
+	public void setBatchSize(BatchSize sizeAnn) {
+		if ( sizeAnn != null ) {
+			batchSize = sizeAnn.size();
+		}
+		else {
+			batchSize = -1;
+		}
+	}
+
+	public void setProxy(Proxy proxy) {
+		if ( proxy != null ) {
+			lazy = proxy.lazy();
+			if ( !lazy ) {
+				proxyClass = null;
+			}
+			else {
+				if ( AnnotationBinder.isDefault(
+						mappings.getReflectionManager().toXClass( proxy.proxyClass() ), mappings
+				) ) {
+					proxyClass = annotatedClass;
+				}
+				else {
+					proxyClass = mappings.getReflectionManager().toXClass( proxy.proxyClass() );
+				}
+			}
+		}
+		else {
+			lazy = true; //needed to allow association lazy loading.
+			proxyClass = annotatedClass;
+		}
+	}
+
+	public void setWhere(Where whereAnn) {
+		if ( whereAnn != null ) {
+			where = whereAnn.clause();
+		}
+	}
+
+	private String getClassTableName(String tableName) {
+		if ( StringHelper.isEmpty( tableName ) ) {
+			return mappings.getNamingStrategy().classToTableName( name );
+		}
+		else {
+			return mappings.getNamingStrategy().tableName( tableName );
+		}
+	}
+
+	public void bindTable(
+			String schema, String catalog,
+			String tableName, List uniqueConstraints,
+			String constraints, Table denormalizedSuperclassTable
+	) {
+		String logicalName = StringHelper.isNotEmpty( tableName ) ?
+				tableName :
+				StringHelper.unqualify( name );
+		Table table = TableBinder.fillTable(
+				schema, catalog,
+				getClassTableName( tableName ),
+				logicalName,
+				persistentClass.isAbstract(), uniqueConstraints, constraints,
+				denormalizedSuperclassTable, mappings
+		);
+
+		if ( persistentClass instanceof TableOwner ) {
+			if ( log.isInfoEnabled() ) {
+				log.info( "Bind entity " + persistentClass.getEntityName() + " on table " + table.getName() );
+			}
+			( (TableOwner) persistentClass ).setTable( table );
+		}
+		else {
+			throw new AssertionFailure( "binding a table for a subclass" );
+		}
+	}
+
+	public void finalSecondaryTableBinding(PropertyHolder propertyHolder) {
+		/*
+		 * Those operations has to be done after the id definition of the persistence class.
+		 * ie after the properties parsing
+		 */
+		Iterator joins = secondaryTables.values().iterator();
+		Iterator joinColumns = secondaryTableJoins.values().iterator();
+
+		while ( joins.hasNext() ) {
+			Object uncastedColumn = joinColumns.next();
+			Join join = (Join) joins.next();
+			createPrimaryColumnsToSecondaryTable( uncastedColumn, propertyHolder, join );
+		}
+		mappings.addJoins( persistentClass, secondaryTables );
+	}
+
+	private void createPrimaryColumnsToSecondaryTable(Object uncastedColumn, PropertyHolder propertyHolder, Join join) {
+		Ejb3JoinColumn[] ejb3JoinColumns;
+		PrimaryKeyJoinColumn[] pkColumnsAnn = null;
+		JoinColumn[] joinColumnsAnn = null;
+		if ( uncastedColumn instanceof PrimaryKeyJoinColumn[] ) {
+			pkColumnsAnn = (PrimaryKeyJoinColumn[]) uncastedColumn;
+		}
+		if ( uncastedColumn instanceof JoinColumn[] ) {
+			joinColumnsAnn = (JoinColumn[]) uncastedColumn;
+		}
+		if ( pkColumnsAnn == null && joinColumnsAnn == null ) {
+			ejb3JoinColumns = new Ejb3JoinColumn[1];
+			ejb3JoinColumns[0] = Ejb3JoinColumn.buildJoinColumn(
+					null,
+					null,
+					persistentClass.getIdentifier(),
+					secondaryTables,
+					propertyHolder, mappings
+			);
+		}
+		else {
+			int nbrOfJoinColumns = pkColumnsAnn != null ?
+					pkColumnsAnn.length :
+					joinColumnsAnn.length;
+			if ( nbrOfJoinColumns == 0 ) {
+				ejb3JoinColumns = new Ejb3JoinColumn[1];
+				ejb3JoinColumns[0] = Ejb3JoinColumn.buildJoinColumn(
+						null,
+						null,
+						persistentClass.getIdentifier(),
+						secondaryTables,
+						propertyHolder, mappings
+				);
+			}
+			else {
+				ejb3JoinColumns = new Ejb3JoinColumn[nbrOfJoinColumns];
+				if ( pkColumnsAnn != null ) {
+					for ( int colIndex = 0; colIndex < nbrOfJoinColumns; colIndex++ ) {
+						ejb3JoinColumns[colIndex] = Ejb3JoinColumn.buildJoinColumn(
+								pkColumnsAnn[colIndex],
+								null,
+								persistentClass.getIdentifier(),
+								secondaryTables,
+								propertyHolder, mappings
+						);
+					}
+				}
+				else {
+					for ( int colIndex = 0; colIndex < nbrOfJoinColumns; colIndex++ ) {
+						ejb3JoinColumns[colIndex] = Ejb3JoinColumn.buildJoinColumn(
+								null,
+								joinColumnsAnn[colIndex],
+								persistentClass.getIdentifier(),
+								secondaryTables,
+								propertyHolder, mappings
+						);
+					}
+				}
+			}
+		}
+
+		for ( Ejb3JoinColumn joinColumn : ejb3JoinColumns ) {
+			joinColumn.forceNotNull();
+		}
+		bindJoinToPersistentClass( join, ejb3JoinColumns );
+	}
+
+	private void bindJoinToPersistentClass(
+			Join join, Ejb3JoinColumn[] ejb3JoinColumns
+	) {
+		SimpleValue key = new DependantValue( join.getTable(), persistentClass.getIdentifier() );
+		join.setKey( key );
+		setFKNameIfDefined(join);
+		key.setCascadeDeleteEnabled( false );
+		TableBinder.bindFk( persistentClass, null, ejb3JoinColumns, key, false, mappings );
+		join.createPrimaryKey();
+		join.createForeignKey();
+		persistentClass.addJoin( join );
+	}
+
+	private void setFKNameIfDefined(Join join) {
+		org.hibernate.annotations.Table matchingTable = findMatchingComplimentTableAnnotation( join );
+		if (matchingTable != null && ! BinderHelper.isDefault( matchingTable.foreignKey().name() ) ) {
+			( (SimpleValue) join.getKey() ).setForeignKeyName( matchingTable.foreignKey().name() );
+		}
+	}
+
+	private org.hibernate.annotations.Table findMatchingComplimentTableAnnotation(Join join) {
+		String tableName = join.getTable().getQuotedName();
+		org.hibernate.annotations.Table table = annotatedClass.getAnnotation( org.hibernate.annotations.Table.class );
+		org.hibernate.annotations.Table matchingTable = null;
+		if ( table != null && tableName.equals( table.appliesTo() ) ) {
+			matchingTable = table;
+		}
+		else {
+			Tables tables = annotatedClass.getAnnotation( Tables.class );
+			if ( tables != null) {
+				for (org.hibernate.annotations.Table current : tables.value() ) {
+					if ( tableName.equals( current.appliesTo() ) ) {
+						matchingTable = current;
+						break;
+					}
+				}
+			}
+		}
+		return matchingTable;
+	}
+
+	public void firstLevelSecondaryTablesBinding(
+			SecondaryTable secTable, SecondaryTables secTables
+	) {
+		if ( secTables != null ) {
+			//loop through it
+			for ( SecondaryTable tab : secTables.value() ) {
+				addJoin( tab, null, null, false );
+			}
+		}
+		else {
+			if ( secTable != null ) addJoin( secTable, null, null, false );
+		}
+	}
+
+	//Used for @*ToMany @JoinTable
+	public Join addJoin(JoinTable joinTable, PropertyHolder holder, boolean noDelayInPkColumnCreation) {
+		return addJoin( null, joinTable, holder, noDelayInPkColumnCreation );
+	}
+
+	/**
+	 * A non null propertyHolder means than we process the Pk creation without delay
+	 */
+	private Join addJoin(
+			SecondaryTable secondaryTable, JoinTable joinTable, PropertyHolder propertyHolder,
+			boolean noDelayInPkColumnCreation
+	) {
+		Join join = new Join();
+		join.setPersistentClass( persistentClass );
+		String schema;
+		String catalog;
+		String table;
+		String realTable;
+		UniqueConstraint[] uniqueConstraintsAnn;
+		if ( secondaryTable != null ) {
+			schema = secondaryTable.schema();
+			catalog = secondaryTable.catalog();
+			table = secondaryTable.name();
+			realTable = mappings.getNamingStrategy().tableName( table ); //always an explicit table name
+			uniqueConstraintsAnn = secondaryTable.uniqueConstraints();
+		}
+		else if ( joinTable != null ) {
+			schema = joinTable.schema();
+			catalog = joinTable.catalog();
+			table = joinTable.name();
+			realTable = mappings.getNamingStrategy().tableName( table ); //always an explicit table name
+			uniqueConstraintsAnn = joinTable.uniqueConstraints();
+		}
+		else {
+			throw new AssertionFailure( "Both JoinTable and SecondaryTable are null" );
+		}
+		List uniqueConstraints = new ArrayList( uniqueConstraintsAnn == null ?
+				0 :
+				uniqueConstraintsAnn.length );
+		if ( uniqueConstraintsAnn != null && uniqueConstraintsAnn.length != 0 ) {
+			for ( UniqueConstraint uc : uniqueConstraintsAnn ) {
+				uniqueConstraints.add( uc.columnNames() );
+			}
+		}
+		Table tableMapping = TableBinder.fillTable(
+				schema,
+				catalog,
+				realTable,
+				table, false, uniqueConstraints, null, null, mappings
+		);
+		//no check constraints available on joins
+		join.setTable( tableMapping );
+
+		//somehow keep joins() for later.
+		//Has to do the work later because it needs persistentClass id!
+		Object joinColumns = null;
+		//get the appropriate pk columns
+		if ( secondaryTable != null ) {
+			joinColumns = secondaryTable.pkJoinColumns();
+		}
+		else if ( joinTable != null ) {
+			joinColumns = joinTable.joinColumns();
+		}
+		if ( log.isInfoEnabled() ) {
+			log.info(
+					"Adding secondary table to entity " + persistentClass.getEntityName() + " -> " + join.getTable()
+							.getName()
+			);
+		}
+
+		org.hibernate.annotations.Table matchingTable = findMatchingComplimentTableAnnotation( join );
+		if (matchingTable != null) {
+			join.setSequentialSelect( FetchMode.JOIN != matchingTable.fetch() );
+			join.setInverse( matchingTable.inverse() );
+			join.setOptional( matchingTable.optional() );
+			if ( ! BinderHelper.isDefault( matchingTable.sqlInsert().sql() ) ) {
+				join.setCustomSQLInsert( matchingTable.sqlInsert().sql().trim(),
+						matchingTable.sqlInsert().callable(),
+						ExecuteUpdateResultCheckStyle.parse( matchingTable.sqlInsert().check().toString().toLowerCase() )
+				);
+			}
+			if ( ! BinderHelper.isDefault( matchingTable.sqlUpdate().sql() ) ) {
+				join.setCustomSQLUpdate( matchingTable.sqlUpdate().sql().trim(), 
+						matchingTable.sqlUpdate().callable(),
+						ExecuteUpdateResultCheckStyle.parse( matchingTable.sqlUpdate().check().toString().toLowerCase() )
+				);
+			}
+			if ( ! BinderHelper.isDefault( matchingTable.sqlDelete().sql() ) ) {
+				join.setCustomSQLDelete( matchingTable.sqlDelete().sql().trim(),
+						matchingTable.sqlDelete().callable(),
+						ExecuteUpdateResultCheckStyle.parse( matchingTable.sqlDelete().check().toString().toLowerCase() )
+				);
+			}
+		}
+		else {
+			//default
+			join.setSequentialSelect( false );
+			join.setInverse( false );
+			join.setOptional( true ); //perhaps not quite per-spec, but a Good Thing anyway
+		}
+
+		if ( noDelayInPkColumnCreation ) {
+			createPrimaryColumnsToSecondaryTable( joinColumns, propertyHolder, join );
+		}
+		else {
+			secondaryTables.put( table, join );
+			secondaryTableJoins.put( table, joinColumns );
+		}
+		return join;
+	}
+
+	public java.util.Map<String, Join> getSecondaryTables() {
+		return secondaryTables;
+	}
+
+	public void setCache(Cache cacheAnn) {
+		if ( cacheAnn != null ) {
+			cacheRegion = BinderHelper.isDefault( cacheAnn.region() ) ?
+					null :
+					cacheAnn.region();
+			cacheConcurrentStrategy = getCacheConcurrencyStrategy( cacheAnn.usage() );
+			if ( "all".equalsIgnoreCase( cacheAnn.include() ) ) {
+				cacheLazyProperty = true;
+			}
+			else if ( "non-lazy".equalsIgnoreCase( cacheAnn.include() ) ) {
+				cacheLazyProperty = false;
+			}
+			else {
+				throw new AnnotationException( "Unknown lazy property annotations: " + cacheAnn.include() );
+			}
+		}
+		else {
+			cacheConcurrentStrategy = null;
+			cacheRegion = null;
+			cacheLazyProperty = true;
+		}
+	}
+
+	public static String getCacheConcurrencyStrategy(CacheConcurrencyStrategy strategy) {
+		switch (strategy) {
+			case NONE:
+				return null;
+			case READ_ONLY:
+				return CacheFactory.READ_ONLY;
+			case READ_WRITE:
+				return CacheFactory.READ_WRITE;
+			case NONSTRICT_READ_WRITE:
+				return CacheFactory.NONSTRICT_READ_WRITE;
+			case TRANSACTIONAL:
+				return CacheFactory.TRANSACTIONAL;
+			default:
+				throw new AssertionFailure( "CacheConcurrencyStrategy unknown: " + strategy );
+		}
+	}
+
+	public void addFilter(String name, String condition) {
+		filters.put( name, condition );
+	}
+
+	public void setInheritanceState(InheritanceState inheritanceState) {
+		this.inheritanceState = inheritanceState;
+	}
+
+	public boolean isIgnoreIdAnnotations() {
+		return ignoreIdAnnotations;
+	}
+
+	public void setIgnoreIdAnnotations(boolean ignoreIdAnnotations) {
+		this.ignoreIdAnnotations = ignoreIdAnnotations;
+	}
+
+	public void processComplementaryTableDefinitions(org.hibernate.annotations.Table table) {
+		if ( table == null ) return;
+		String appliedTable = table.appliesTo();
+		Iterator tables = persistentClass.getTableClosureIterator();
+		Table hibTable = null;
+		while ( tables.hasNext() ) {
+			hibTable = (Table) tables.next();
+			if ( hibTable.getQuotedName().equals( appliedTable ) ) {
+				//we are in the correct table to find columns
+				break;
+			}
+		}
+		if ( hibTable == null ) {
+			throw new AnnotationException(
+					"@org.hibernate.annotations.Table references an unknown table: " + appliedTable
+			);
+		}
+		if ( ! BinderHelper.isDefault( table.comment() ) ) hibTable.setComment( table.comment() );
+		TableBinder.addIndexes( hibTable, table.indexes(), mappings );
+	}
+
+	public void processComplementaryTableDefinitions(Tables tables) {
+		if ( tables == null ) return;
+		for ( org.hibernate.annotations.Table table : tables.value() ) {
+			processComplementaryTableDefinitions( table );
+		}
+	}
+
+	public void setPropertyAnnotated(boolean propertyAnnotated) {
+		this.isPropertyAnnotated = propertyAnnotated;
+	}
+
+	public String getPropertyAccessor() {
+		return propertyAccessor;
+	}
+
+	public void setPropertyAccessor(String propertyAccessor) {
+		this.propertyAccessor = propertyAccessor;
+	}
+
+	public boolean isPropertyAnnotated(XAnnotatedElement element) {
+		AccessType access = element.getAnnotation( AccessType.class );
+		if ( access == null ) return isPropertyAnnotated;
+		String propertyAccessor = access.value();
+		if ( "property".equals( propertyAccessor ) ) {
+			return Boolean.TRUE;
+		}
+		else if ( "field".equals( propertyAccessor ) ) {
+			return Boolean.FALSE;
+		}
+		else {
+			return isPropertyAnnotated;
+		}
+	}
+
+	public String getPropertyAccessor(XAnnotatedElement element) {
+		AccessType access = element.getAnnotation( AccessType.class );
+		if ( access == null ) return propertyAccessor;
+		return access.value();
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/IdBagBinder.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/IdBagBinder.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/IdBagBinder.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,89 +0,0 @@
-//$Id: $
-package org.hibernate.cfg.annotations;
-
-import java.util.Collections;
-import java.util.Map;
-
-import org.hibernate.AnnotationException;
-import org.hibernate.annotations.CollectionId;
-import org.hibernate.annotations.Type;
-import org.hibernate.cfg.BinderHelper;
-import org.hibernate.cfg.Ejb3Column;
-import org.hibernate.cfg.Ejb3JoinColumn;
-import org.hibernate.cfg.ExtendedMappings;
-import org.hibernate.cfg.PropertyData;
-import org.hibernate.cfg.PropertyInferredData;
-import org.hibernate.cfg.WrappedInferredData;
-import org.hibernate.mapping.Collection;
-import org.hibernate.mapping.IdentifierCollection;
-import org.hibernate.mapping.PersistentClass;
-import org.hibernate.mapping.SimpleValue;
-import org.hibernate.mapping.Table;
-import org.hibernate.annotations.common.reflection.XClass;
-import org.hibernate.annotations.common.reflection.XProperty;
-import org.hibernate.util.StringHelper;
-
-/**
- * @author Emmanuel Bernard
- */
-public class IdBagBinder extends BagBinder {
-	protected Collection createCollection(PersistentClass persistentClass) {
-		return new org.hibernate.mapping.IdentifierBag( persistentClass );
-	}
-
-	@Override
-	protected boolean bindStarToManySecondPass(
-			Map persistentClasses, XClass collType, Ejb3JoinColumn[] fkJoinColumns, Ejb3JoinColumn[] keyColumns,
-			Ejb3JoinColumn[] inverseColumns, Ejb3Column[] elementColumns, boolean isEmbedded, XProperty property,
-			boolean unique, TableBinder associationTableBinder, boolean ignoreNotFound, ExtendedMappings mappings
-	) {
-		boolean result = super.bindStarToManySecondPass(
-				persistentClasses, collType, fkJoinColumns, keyColumns, inverseColumns, elementColumns, isEmbedded,
-				property, unique, associationTableBinder, ignoreNotFound, mappings
-		);
-		CollectionId collectionIdAnn = property.getAnnotation( CollectionId.class );
-		if (collectionIdAnn != null) {
-			SimpleValueBinder simpleValue = new SimpleValueBinder();
-
-			PropertyData propertyData = new WrappedInferredData(
-					new PropertyInferredData(property, null, //default access should not be useful
-							mappings.getReflectionManager() ),
-					"id" );
-			Ejb3Column[] idColumns = Ejb3Column.buildColumnFromAnnotation(
-					collectionIdAnn.columns(),
-					null,
-					Nullability.FORCED_NOT_NULL,
-					propertyHolder,
-					propertyData,
-					Collections.EMPTY_MAP,
-					mappings
-			);
-			Table table = collection.getCollectionTable();
-			simpleValue.setTable( table );
-			simpleValue.setColumns( idColumns );
-			Type typeAnn = collectionIdAnn.type();
-			if ( typeAnn != null && ! BinderHelper.isDefault( typeAnn.type() ) ) {
-				simpleValue.setExplicitType( typeAnn );
-			}
-			else {
-				throw new AnnotationException("@CollectionId is missing type: "
-						+ StringHelper.qualify( propertyHolder.getPath(), propertyName ) );
-			}
-			simpleValue.setMappings( mappings );
-			SimpleValue id = simpleValue.make();
-			( (IdentifierCollection) collection ).setIdentifier( id );
-			String generator = collectionIdAnn.generator();
-			String generatorType;
-			if ( "identity".equals( generator ) || "assigned".equals( generator )
-					|| "sequence".equals( generator ) || "native".equals( generator ) ) {
-				generatorType = generator;
-				generator = "";
-			}
-			else {
-				generatorType = null;
-			}
-			BinderHelper.makeIdGenerator( id, generatorType, generator, mappings, localGenerators);
-		}
-		return result;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/IdBagBinder.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/IdBagBinder.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/IdBagBinder.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/IdBagBinder.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,89 @@
+//$Id: $
+package org.hibernate.cfg.annotations;
+
+import java.util.Collections;
+import java.util.Map;
+
+import org.hibernate.AnnotationException;
+import org.hibernate.annotations.CollectionId;
+import org.hibernate.annotations.Type;
+import org.hibernate.cfg.BinderHelper;
+import org.hibernate.cfg.Ejb3Column;
+import org.hibernate.cfg.Ejb3JoinColumn;
+import org.hibernate.cfg.ExtendedMappings;
+import org.hibernate.cfg.PropertyData;
+import org.hibernate.cfg.PropertyInferredData;
+import org.hibernate.cfg.WrappedInferredData;
+import org.hibernate.mapping.Collection;
+import org.hibernate.mapping.IdentifierCollection;
+import org.hibernate.mapping.PersistentClass;
+import org.hibernate.mapping.SimpleValue;
+import org.hibernate.mapping.Table;
+import org.hibernate.annotations.common.reflection.XClass;
+import org.hibernate.annotations.common.reflection.XProperty;
+import org.hibernate.util.StringHelper;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class IdBagBinder extends BagBinder {
+	protected Collection createCollection(PersistentClass persistentClass) {
+		return new org.hibernate.mapping.IdentifierBag( persistentClass );
+	}
+
+	@Override
+	protected boolean bindStarToManySecondPass(
+			Map persistentClasses, XClass collType, Ejb3JoinColumn[] fkJoinColumns, Ejb3JoinColumn[] keyColumns,
+			Ejb3JoinColumn[] inverseColumns, Ejb3Column[] elementColumns, boolean isEmbedded, XProperty property,
+			boolean unique, TableBinder associationTableBinder, boolean ignoreNotFound, ExtendedMappings mappings
+	) {
+		boolean result = super.bindStarToManySecondPass(
+				persistentClasses, collType, fkJoinColumns, keyColumns, inverseColumns, elementColumns, isEmbedded,
+				property, unique, associationTableBinder, ignoreNotFound, mappings
+		);
+		CollectionId collectionIdAnn = property.getAnnotation( CollectionId.class );
+		if (collectionIdAnn != null) {
+			SimpleValueBinder simpleValue = new SimpleValueBinder();
+
+			PropertyData propertyData = new WrappedInferredData(
+					new PropertyInferredData(property, null, //default access should not be useful
+							mappings.getReflectionManager() ),
+					"id" );
+			Ejb3Column[] idColumns = Ejb3Column.buildColumnFromAnnotation(
+					collectionIdAnn.columns(),
+					null,
+					Nullability.FORCED_NOT_NULL,
+					propertyHolder,
+					propertyData,
+					Collections.EMPTY_MAP,
+					mappings
+			);
+			Table table = collection.getCollectionTable();
+			simpleValue.setTable( table );
+			simpleValue.setColumns( idColumns );
+			Type typeAnn = collectionIdAnn.type();
+			if ( typeAnn != null && ! BinderHelper.isDefault( typeAnn.type() ) ) {
+				simpleValue.setExplicitType( typeAnn );
+			}
+			else {
+				throw new AnnotationException("@CollectionId is missing type: "
+						+ StringHelper.qualify( propertyHolder.getPath(), propertyName ) );
+			}
+			simpleValue.setMappings( mappings );
+			SimpleValue id = simpleValue.make();
+			( (IdentifierCollection) collection ).setIdentifier( id );
+			String generator = collectionIdAnn.generator();
+			String generatorType;
+			if ( "identity".equals( generator ) || "assigned".equals( generator )
+					|| "sequence".equals( generator ) || "native".equals( generator ) ) {
+				generatorType = generator;
+				generator = "";
+			}
+			else {
+				generatorType = null;
+			}
+			BinderHelper.makeIdGenerator( id, generatorType, generator, mappings, localGenerators);
+		}
+		return result;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/ListBinder.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/ListBinder.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/ListBinder.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,114 +0,0 @@
-package org.hibernate.cfg.annotations;
-
-import java.util.Map;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.hibernate.AnnotationException;
-import org.hibernate.MappingException;
-import org.hibernate.util.StringHelper;
-import org.hibernate.annotations.OrderBy;
-import org.hibernate.annotations.Sort;
-import org.hibernate.cfg.CollectionSecondPass;
-import org.hibernate.cfg.Ejb3Column;
-import org.hibernate.cfg.Ejb3JoinColumn;
-import org.hibernate.cfg.ExtendedMappings;
-import org.hibernate.cfg.PropertyHolder;
-import org.hibernate.cfg.PropertyHolderBuilder;
-import org.hibernate.cfg.SecondPass;
-import org.hibernate.mapping.Collection;
-import org.hibernate.mapping.IndexBackref;
-import org.hibernate.mapping.List;
-import org.hibernate.mapping.OneToMany;
-import org.hibernate.mapping.PersistentClass;
-import org.hibernate.mapping.SimpleValue;
-import org.hibernate.annotations.common.reflection.XClass;
-import org.hibernate.annotations.common.reflection.XProperty;
-
-/**
- * Bind a list
- *
- * @author Matthew Inger
- * @author Emmanuel Bernard
- */
-public class ListBinder extends CollectionBinder {
-	private static Log log = LogFactory.getLog( ListBinder.class );
-
-	public ListBinder() {
-	}
-
-	protected Collection createCollection(PersistentClass persistentClass) {
-		return new org.hibernate.mapping.List( persistentClass );
-	}
-
-	public void setSqlOrderBy(OrderBy orderByAnn) {
-		if ( orderByAnn != null ) log.warn( "@OrderBy not allowed for a indexed collection, annotation ignored." );
-	}
-
-	public void setSort(Sort sortAnn) {
-		if ( sortAnn != null ) log.warn( "@Sort not allowed for a indexed collection, annotation ignored." );
-	}
-
-	@Override
-	public SecondPass getSecondPass(
-			final Ejb3JoinColumn[] fkJoinColumns, final Ejb3JoinColumn[] keyColumns,
-			final Ejb3JoinColumn[] inverseColumns,
-			final Ejb3Column[] elementColumns,
-			Ejb3Column[] mapKeyColumns, final Ejb3JoinColumn[] mapKeyManyToManyColumns, final boolean isEmbedded,
-			final XProperty property, final XClass collType,
-			final boolean ignoreNotFound, final boolean unique,
-			final TableBinder assocTableBinder, final ExtendedMappings mappings
-	) {
-		return new CollectionSecondPass( mappings, ListBinder.this.collection ) {
-			public void secondPass(Map persistentClasses, Map inheritedMetas)
-					throws MappingException {
-				bindStarToManySecondPass(
-						persistentClasses, collType, fkJoinColumns, keyColumns, inverseColumns, elementColumns,
-						isEmbedded, property, unique, assocTableBinder, ignoreNotFound, mappings
-				);
-				bindIndex( mappings );
-			}
-		};
-	}
-
-	private void bindIndex(final ExtendedMappings mappings) {
-		if ( indexColumn.isImplicit() == false ) {
-			PropertyHolder valueHolder = PropertyHolderBuilder.buildPropertyHolder(
-					this.collection,
-					StringHelper.qualify( this.collection.getRole(), "key" ),
-					(XClass) null,
-					(XProperty) null, propertyHolder, mappings
-			);
-			List list = (List) this.collection;
-			if ( ! list.isOneToMany() ) indexColumn.forceNotNull();
-			indexColumn.setPropertyHolder( valueHolder );
-			SimpleValueBinder value = new SimpleValueBinder();
-			value.setColumns( new Ejb3Column[]{indexColumn} );
-			value.setExplicitType( "integer" );
-			value.setMappings( mappings );
-			SimpleValue indexValue = value.make();
-			indexColumn.linkWithValue( indexValue );
-			list.setIndex( indexValue );
-			list.setBaseIndex( indexColumn.getBase() );
-			if ( list.isOneToMany() && !list.getKey().isNullable() && !list.isInverse() ) {
-				String entityName = ( (OneToMany) list.getElement() ).getReferencedEntityName();
-				PersistentClass referenced = mappings.getClass( entityName );
-				IndexBackref ib = new IndexBackref();
-				ib.setName( '_' + propertyName + "IndexBackref" );
-				ib.setUpdateable( false );
-				ib.setSelectable( false );
-				ib.setCollectionRole( list.getRole() );
-				ib.setEntityName( list.getOwner().getEntityName() );
-				ib.setValue( list.getIndex() );
-				referenced.addProperty( ib );
-			}
-		}
-		else {
-			Collection coll = this.collection;
-			throw new AnnotationException(
-					"List/array has to be annotated with an @IndexColumn: "
-							+ coll.getRole()
-			);
-		}
-	}
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/ListBinder.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/ListBinder.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/ListBinder.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/ListBinder.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,114 @@
+package org.hibernate.cfg.annotations;
+
+import java.util.Map;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.hibernate.AnnotationException;
+import org.hibernate.MappingException;
+import org.hibernate.util.StringHelper;
+import org.hibernate.annotations.OrderBy;
+import org.hibernate.annotations.Sort;
+import org.hibernate.cfg.CollectionSecondPass;
+import org.hibernate.cfg.Ejb3Column;
+import org.hibernate.cfg.Ejb3JoinColumn;
+import org.hibernate.cfg.ExtendedMappings;
+import org.hibernate.cfg.PropertyHolder;
+import org.hibernate.cfg.PropertyHolderBuilder;
+import org.hibernate.cfg.SecondPass;
+import org.hibernate.mapping.Collection;
+import org.hibernate.mapping.IndexBackref;
+import org.hibernate.mapping.List;
+import org.hibernate.mapping.OneToMany;
+import org.hibernate.mapping.PersistentClass;
+import org.hibernate.mapping.SimpleValue;
+import org.hibernate.annotations.common.reflection.XClass;
+import org.hibernate.annotations.common.reflection.XProperty;
+
+/**
+ * Bind a list
+ *
+ * @author Matthew Inger
+ * @author Emmanuel Bernard
+ */
+public class ListBinder extends CollectionBinder {
+	private static Log log = LogFactory.getLog( ListBinder.class );
+
+	public ListBinder() {
+	}
+
+	protected Collection createCollection(PersistentClass persistentClass) {
+		return new org.hibernate.mapping.List( persistentClass );
+	}
+
+	public void setSqlOrderBy(OrderBy orderByAnn) {
+		if ( orderByAnn != null ) log.warn( "@OrderBy not allowed for a indexed collection, annotation ignored." );
+	}
+
+	public void setSort(Sort sortAnn) {
+		if ( sortAnn != null ) log.warn( "@Sort not allowed for a indexed collection, annotation ignored." );
+	}
+
+	@Override
+	public SecondPass getSecondPass(
+			final Ejb3JoinColumn[] fkJoinColumns, final Ejb3JoinColumn[] keyColumns,
+			final Ejb3JoinColumn[] inverseColumns,
+			final Ejb3Column[] elementColumns,
+			Ejb3Column[] mapKeyColumns, final Ejb3JoinColumn[] mapKeyManyToManyColumns, final boolean isEmbedded,
+			final XProperty property, final XClass collType,
+			final boolean ignoreNotFound, final boolean unique,
+			final TableBinder assocTableBinder, final ExtendedMappings mappings
+	) {
+		return new CollectionSecondPass( mappings, ListBinder.this.collection ) {
+			public void secondPass(Map persistentClasses, Map inheritedMetas)
+					throws MappingException {
+				bindStarToManySecondPass(
+						persistentClasses, collType, fkJoinColumns, keyColumns, inverseColumns, elementColumns,
+						isEmbedded, property, unique, assocTableBinder, ignoreNotFound, mappings
+				);
+				bindIndex( mappings );
+			}
+		};
+	}
+
+	private void bindIndex(final ExtendedMappings mappings) {
+		if ( indexColumn.isImplicit() == false ) {
+			PropertyHolder valueHolder = PropertyHolderBuilder.buildPropertyHolder(
+					this.collection,
+					StringHelper.qualify( this.collection.getRole(), "key" ),
+					(XClass) null,
+					(XProperty) null, propertyHolder, mappings
+			);
+			List list = (List) this.collection;
+			if ( ! list.isOneToMany() ) indexColumn.forceNotNull();
+			indexColumn.setPropertyHolder( valueHolder );
+			SimpleValueBinder value = new SimpleValueBinder();
+			value.setColumns( new Ejb3Column[]{indexColumn} );
+			value.setExplicitType( "integer" );
+			value.setMappings( mappings );
+			SimpleValue indexValue = value.make();
+			indexColumn.linkWithValue( indexValue );
+			list.setIndex( indexValue );
+			list.setBaseIndex( indexColumn.getBase() );
+			if ( list.isOneToMany() && !list.getKey().isNullable() && !list.isInverse() ) {
+				String entityName = ( (OneToMany) list.getElement() ).getReferencedEntityName();
+				PersistentClass referenced = mappings.getClass( entityName );
+				IndexBackref ib = new IndexBackref();
+				ib.setName( '_' + propertyName + "IndexBackref" );
+				ib.setUpdateable( false );
+				ib.setSelectable( false );
+				ib.setCollectionRole( list.getRole() );
+				ib.setEntityName( list.getOwner().getEntityName() );
+				ib.setValue( list.getIndex() );
+				referenced.addProperty( ib );
+			}
+		}
+		else {
+			Collection coll = this.collection;
+			throw new AnnotationException(
+					"List/array has to be annotated with an @IndexColumn: "
+							+ coll.getRole()
+			);
+		}
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/MapBinder.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/MapBinder.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/MapBinder.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,383 +0,0 @@
-//$Id$
-package org.hibernate.cfg.annotations;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Random;
-import javax.persistence.AttributeOverride;
-import javax.persistence.AttributeOverrides;
-
-import org.hibernate.AnnotationException;
-import org.hibernate.AssertionFailure;
-import org.hibernate.FetchMode;
-import org.hibernate.MappingException;
-import org.hibernate.annotations.MapKeyManyToMany;
-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.PropertyData;
-import org.hibernate.cfg.PropertyHolder;
-import org.hibernate.cfg.PropertyHolderBuilder;
-import org.hibernate.cfg.PropertyPreloadedData;
-import org.hibernate.cfg.SecondPass;
-import org.hibernate.dialect.HSQLDialect;
-import org.hibernate.mapping.Collection;
-import org.hibernate.mapping.Column;
-import org.hibernate.mapping.Component;
-import org.hibernate.mapping.DependantValue;
-import org.hibernate.mapping.Formula;
-import org.hibernate.mapping.Join;
-import org.hibernate.mapping.ManyToOne;
-import org.hibernate.mapping.OneToMany;
-import org.hibernate.mapping.PersistentClass;
-import org.hibernate.mapping.Property;
-import org.hibernate.mapping.SimpleValue;
-import org.hibernate.mapping.ToOne;
-import org.hibernate.mapping.Value;
-import org.hibernate.annotations.common.reflection.XClass;
-import org.hibernate.annotations.common.reflection.XProperty;
-import org.hibernate.annotations.common.reflection.ReflectionManager;
-import org.hibernate.sql.Template;
-import org.hibernate.util.StringHelper;
-
-/**
- * Implementation to bind a Map
- *
- * @author Emmanuel Bernard
- */
-public class MapBinder extends CollectionBinder {
-	public MapBinder(boolean sorted) {
-		super(sorted);
-	}
-
-	public MapBinder() {
-		super();
-	}
-
-	protected Collection createCollection(PersistentClass persistentClass) {
-		return new org.hibernate.mapping.Map( persistentClass );
-	}
-
-	@Override
-	public SecondPass getSecondPass(
-			final Ejb3JoinColumn[] fkJoinColumns, final Ejb3JoinColumn[] keyColumns,
-			final Ejb3JoinColumn[] inverseColumns,
-			final Ejb3Column[] elementColumns,
-			final Ejb3Column[] mapKeyColumns, final Ejb3JoinColumn[] mapKeyManyToManyColumns, final boolean isEmbedded,
-			final XProperty property, final XClass collType,
-			final boolean ignoreNotFound, final boolean unique,
-			final TableBinder assocTableBinder, final ExtendedMappings mappings
-	) {
-		return new CollectionSecondPass( mappings, MapBinder.this.collection ) {
-			public void secondPass(Map persistentClasses, Map inheritedMetas)
-					throws MappingException {
-				bindStarToManySecondPass(
-						persistentClasses, collType, fkJoinColumns, keyColumns, inverseColumns, elementColumns,
-						isEmbedded, property, unique, assocTableBinder, ignoreNotFound, mappings
-				);
-				bindKeyFromAssociationTable(
-						collType, persistentClasses, mapKeyPropertyName, property, isEmbedded, mappings,
-						mapKeyColumns, mapKeyManyToManyColumns,
-						inverseColumns != null ? inverseColumns[0].getPropertyName() : null
-				);
-			}
-		};
-	}
-
-	private void bindKeyFromAssociationTable(
-            XClass collType, Map persistentClasses, String mapKeyPropertyName, XProperty property,
-			boolean isEmbedded, ExtendedMappings mappings, Ejb3Column[] mapKeyColumns,
-			Ejb3JoinColumn[] mapKeyManyToManyColumns, String targetPropertyName
-	) {
-		if ( mapKeyPropertyName != null ) {
-			//this is an EJB3 @MapKey
-			PersistentClass associatedClass = (PersistentClass) persistentClasses.get( collType.getName() );
-			if ( associatedClass == null ) throw new AnnotationException( "Associated class not found: " + collType );
-			Property mapProperty = BinderHelper.findPropertyByName( associatedClass, mapKeyPropertyName );
-			if ( mapProperty == null ) {
-				throw new AnnotationException(
-						"Map key property not found: " + collType + "." + mapKeyPropertyName
-				);
-			}
-			org.hibernate.mapping.Map map = (org.hibernate.mapping.Map) this.collection;
-			Value indexValue = createFormulatedValue( mapProperty.getValue(), map, targetPropertyName, associatedClass );
-			map.setIndex( indexValue );
-		}
-		else {
-			//this is a true Map mapping
-			//TODO ugly copy/pastle from CollectionBinder.bindManyToManySecondPass
-			String mapKeyType;
-			Class target = void.class;
-			/*
-			 * target has priority over reflection for the map key type
-			 */
-			if ( property.isAnnotationPresent( org.hibernate.annotations.MapKey.class ) ) {
-				target = property.getAnnotation( org.hibernate.annotations.MapKey.class ).targetElement();
-			}
-			else if ( property.isAnnotationPresent( MapKeyManyToMany.class ) ) {
-				target = property.getAnnotation( MapKeyManyToMany.class ).targetEntity();
-			}
-			if ( ! void.class.equals( target ) ) {
-				mapKeyType = target.getName();
-			}
-			else {
-				mapKeyType = property.getMapKey().getName();
-			}
-			PersistentClass collectionEntity = (PersistentClass) persistentClasses.get( mapKeyType );
-			boolean isIndexOfEntities = collectionEntity != null;
-			ManyToOne element = null;
-			org.hibernate.mapping.Map mapValue = (org.hibernate.mapping.Map) this.collection;
-			if ( isIndexOfEntities ) {
-				element = new ManyToOne( mapValue.getCollectionTable() );
-				mapValue.setIndex( element );
-				element.setReferencedEntityName( mapKeyType );
-				//element.setFetchMode( fetchMode );
-				//element.setLazy( fetchMode != FetchMode.JOIN );
-				//make the second join non lazy
-				element.setFetchMode( FetchMode.JOIN );
-				element.setLazy( false );
-				//does not make sense for a map key element.setIgnoreNotFound( ignoreNotFound );
-			}
-			else {
-				XClass elementClass;
-				AnnotatedClassType classType;
-				//			Map<String, javax.persistence.Column[]> columnOverrides = PropertyHolderBuilder.buildColumnOverride(
-				//					property, StringHelper.qualify( collValue.getRole(), "element" )
-				//			);
-				//FIXME the "element" is lost
-				PropertyHolder holder = null;
-				if ( BinderHelper.PRIMITIVE_NAMES.contains( mapKeyType ) ) {
-					classType = AnnotatedClassType.NONE;
-					elementClass = null;
-				}
-				else {
-					try {
-						elementClass = mappings.getReflectionManager().classForName( mapKeyType, MapBinder.class );
-					}
-					catch (ClassNotFoundException e) {
-						throw new AnnotationException( "Unable to find class: " + mapKeyType, e );
-					}
-					classType = mappings.getClassType( elementClass );
-
-					holder = PropertyHolderBuilder.buildPropertyHolder(
-							mapValue,
-							StringHelper.qualify( mapValue.getRole(), "mapkey" ),
-							elementClass,
-							property, propertyHolder, mappings
-					);
-					//force in case of attribute override
-					boolean attributeOverride = property.isAnnotationPresent( AttributeOverride.class )
-							|| property.isAnnotationPresent( AttributeOverrides.class );
-					if ( isEmbedded || attributeOverride ) {
-						classType = AnnotatedClassType.EMBEDDABLE;
-					}
-				}
-
-				if ( AnnotatedClassType.EMBEDDABLE.equals( classType ) ) {
-					EntityBinder entityBinder = new EntityBinder();
-					PersistentClass owner = mapValue.getOwner();
-					boolean isPropertyAnnotated;
-					//FIXME support @Access for collection of elements
-					//String accessType = access != null ? access.value() : null;
-					if ( owner.getIdentifierProperty() != null ) {
-						isPropertyAnnotated = owner.getIdentifierProperty()
-								.getPropertyAccessorName()
-								.equals( "property" );
-					}
-					else
-					if ( owner.getIdentifierMapper() != null && owner.getIdentifierMapper().getPropertySpan() > 0 ) {
-						Property prop = (Property) owner.getIdentifierMapper().getPropertyIterator().next();
-						isPropertyAnnotated = prop.getPropertyAccessorName().equals( "property" );
-					}
-					else {
-						throw new AssertionFailure( "Unable to guess collection property accessor name" );
-					}
-
-					//boolean propertyAccess = embeddable == null || AccessType.PROPERTY.equals( embeddable.access() );
-					//FIXME "index" is it right?
-					PropertyData inferredData = new PropertyPreloadedData( "property", "index", elementClass );
-					//TODO be smart with isNullable
-					Component component = AnnotationBinder.fillComponent(
-							holder, inferredData, isPropertyAnnotated, isPropertyAnnotated ? "property" : "field", true,
-							entityBinder, false, false,
-							true, mappings
-					);
-					mapValue.setIndex( component );
-				}
-				else {
-					SimpleValueBinder elementBinder = new SimpleValueBinder();
-					elementBinder.setMappings( mappings );
-					elementBinder.setReturnedClassName( mapKeyType );
-
-					Ejb3Column[] elementColumns = mapKeyColumns;
-					if ( elementColumns == null || elementColumns.length == 0 ) {
-						elementColumns = new Ejb3Column[1];
-						Ejb3Column column = new Ejb3Column();
-						column.setImplicit( false );
-						column.setNullable( true );
-						column.setLength( Ejb3Column.DEFAULT_COLUMN_LENGTH );
-						column.setLogicalColumnName( Collection.DEFAULT_KEY_COLUMN_NAME );
-						//TODO create an EMPTY_JOINS collection
-						column.setJoins( new HashMap<String, Join>() );
-						column.setMappings( mappings );
-						column.bind();
-						elementColumns[0] = column;
-					}
-					//override the table
-					for ( Ejb3Column column : elementColumns ) {
-						column.setTable( mapValue.getCollectionTable() );
-					}
-					elementBinder.setColumns( elementColumns );
-					elementBinder.setType( property, elementClass );
-					mapValue.setIndex( elementBinder.make() );
-				}
-			}
-			//FIXME pass the Index Entity JoinColumns
-			if ( ! collection.isOneToMany() ) {
-				//index column shoud not be null
-				for ( Ejb3JoinColumn col : mapKeyManyToManyColumns ) {
-					col.forceNotNull();
-				}
-			}
-			if ( isIndexOfEntities ) {
-				bindManytoManyInverseFk(
-						collectionEntity,
-						mapKeyManyToManyColumns,
-						element,
-						false, //a map key column has no unique constraint
-						mappings
-				);
-			}
-		}
-	}
-
-	protected Value createFormulatedValue(
-			Value value, Collection collection, String targetPropertyName, PersistentClass associatedClass
-	) {
-		Value element = collection.getElement();
-		String fromAndWhere = null;
-		if ( ! ( element instanceof OneToMany ) ) {
-			String referencedPropertyName= null;
-			if ( element instanceof ToOne ) {
-				referencedPropertyName = ( (ToOne) element ).getReferencedPropertyName();
-			}
-			else if ( element instanceof DependantValue ) {
-				//TODO this never happen I think
-				if ( propertyName != null ) {
-					referencedPropertyName = collection.getReferencedPropertyName();
-				}
-				else {
-					throw new AnnotationException( "SecondaryTable JoinColumn cannot reference a non primary key" );
-				}
-			}
-			Iterator referencedEntityColumns;
-			if (referencedPropertyName == null) {
-				referencedEntityColumns = associatedClass.getIdentifier().getColumnIterator();
-			}
-			else {
-				Property referencedProperty = associatedClass.getRecursiveProperty( referencedPropertyName );
-				referencedEntityColumns = referencedProperty.getColumnIterator();
-			}
-			String alias = "$alias$";
-			StringBuilder fromAndWhereSb = new StringBuilder( " from " )
-					.append( associatedClass.getTable().getName() )
-					//.append(" as ") //Oracle doesn't support it in subqueries
-					.append(" ")
-					.append(alias).append(" where ");
-			Iterator collectionTableColumns = element.getColumnIterator();
-			while ( collectionTableColumns.hasNext() ) {
-				Column colColumn = (Column) collectionTableColumns.next();
-				Column refColumn = (Column) referencedEntityColumns.next();
-				fromAndWhereSb.append(alias).append('.').append( refColumn.getQuotedName() )
-						.append('=').append( colColumn.getQuotedName() ).append(" and ");
-			}
-			fromAndWhere = fromAndWhereSb.substring(0, fromAndWhereSb.length() - 5 );
-		}
-
-		if ( value instanceof Component ) {
-			Component component = (Component) value;
-			Iterator properties = component.getPropertyIterator();
-			Component indexComponent = new Component( collection );
-			indexComponent.setComponentClassName( component.getComponentClassName() );
-			//TODO I don't know if this is appropriate
-			indexComponent.setNodeName( "index" );
-			while ( properties.hasNext() ) {
-				Property current = (Property) properties.next();
-				Property newProperty = new Property();
-				newProperty.setCascade( current.getCascade() );
-				newProperty.setGeneration( current.getGeneration() );
-				newProperty.setInsertable( false );
-				newProperty.setUpdateable( false );
-				newProperty.setMetaAttributes( current.getMetaAttributes() );
-				newProperty.setName( current.getName() );
-				newProperty.setNodeName( current.getNodeName() );
-				newProperty.setNaturalIdentifier( false );
-				//newProperty.setOptimisticLocked( false );
-				newProperty.setOptional( false );
-				newProperty.setPersistentClass( current.getPersistentClass() );
-				newProperty.setPropertyAccessorName( current.getPropertyAccessorName() );
-				newProperty.setSelectable( current.isSelectable() );
-				newProperty.setValue( createFormulatedValue( current.getValue(), collection, targetPropertyName,
-						associatedClass
-				) );
-				indexComponent.addProperty( newProperty );
-			}
-			return indexComponent;
-		}
-		else if ( value instanceof SimpleValue ) {
-			SimpleValue sourceValue = (SimpleValue) value;
-			SimpleValue targetValue;
-			if( value instanceof ManyToOne ) {
-				ManyToOne sourceManyToOne = (ManyToOne) sourceValue;
-				ManyToOne targetManyToOne = new ManyToOne( collection.getCollectionTable() );
-				targetManyToOne.setFetchMode( FetchMode.DEFAULT );
-				targetManyToOne.setLazy( true );
-				//targetValue.setIgnoreNotFound( ); does not make sense for a map key
-				targetManyToOne.setReferencedEntityName( sourceManyToOne.getReferencedEntityName() );
-				targetValue = targetManyToOne;
-			}
-			else {
-				targetValue = new SimpleValue( collection.getCollectionTable() );
-				targetValue.setTypeName( sourceValue.getTypeName() );
-				targetValue.setTypeParameters( sourceValue.getTypeParameters() );
-			}
-			Iterator columns = sourceValue.getColumnIterator();
-			Random random = new Random();
-			while ( columns.hasNext() ) {
-				Object current = columns.next();
-				Formula formula = new Formula();
-				String formulaString;
-				if ( current instanceof Column ) {
-					formulaString = ( (Column) current ).getQuotedName();
-				}
-				else if ( current instanceof Formula ) {
-					formulaString =  ( (Formula) current ).getFormula();
-				}
-				else {
-					throw new AssertionFailure( "Unknown element in column iterator: " + current.getClass() );
-				}
-				if (fromAndWhere != null) {
-					formulaString = Template.renderWhereStringTemplate( formulaString, "$alias$", new HSQLDialect() );
-					formulaString = "(select " +  formulaString + fromAndWhere + ")";
-					formulaString = StringHelper.replace(
-							formulaString,
-							"$alias$",
-							"a" + random.nextInt( 16 )
-					);
-				}
-				formula.setFormula( formulaString );
-				targetValue.addFormula( formula );
-
-			}
-			return targetValue;
-		}
-		else {
-			throw new AssertionFailure( "Unknown type encounters for map key: " + value.getClass() );
-		}
-	}
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/MapBinder.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/MapBinder.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/MapBinder.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/MapBinder.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,383 @@
+//$Id$
+package org.hibernate.cfg.annotations;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Random;
+import javax.persistence.AttributeOverride;
+import javax.persistence.AttributeOverrides;
+
+import org.hibernate.AnnotationException;
+import org.hibernate.AssertionFailure;
+import org.hibernate.FetchMode;
+import org.hibernate.MappingException;
+import org.hibernate.annotations.MapKeyManyToMany;
+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.PropertyData;
+import org.hibernate.cfg.PropertyHolder;
+import org.hibernate.cfg.PropertyHolderBuilder;
+import org.hibernate.cfg.PropertyPreloadedData;
+import org.hibernate.cfg.SecondPass;
+import org.hibernate.dialect.HSQLDialect;
+import org.hibernate.mapping.Collection;
+import org.hibernate.mapping.Column;
+import org.hibernate.mapping.Component;
+import org.hibernate.mapping.DependantValue;
+import org.hibernate.mapping.Formula;
+import org.hibernate.mapping.Join;
+import org.hibernate.mapping.ManyToOne;
+import org.hibernate.mapping.OneToMany;
+import org.hibernate.mapping.PersistentClass;
+import org.hibernate.mapping.Property;
+import org.hibernate.mapping.SimpleValue;
+import org.hibernate.mapping.ToOne;
+import org.hibernate.mapping.Value;
+import org.hibernate.annotations.common.reflection.XClass;
+import org.hibernate.annotations.common.reflection.XProperty;
+import org.hibernate.annotations.common.reflection.ReflectionManager;
+import org.hibernate.sql.Template;
+import org.hibernate.util.StringHelper;
+
+/**
+ * Implementation to bind a Map
+ *
+ * @author Emmanuel Bernard
+ */
+public class MapBinder extends CollectionBinder {
+	public MapBinder(boolean sorted) {
+		super(sorted);
+	}
+
+	public MapBinder() {
+		super();
+	}
+
+	protected Collection createCollection(PersistentClass persistentClass) {
+		return new org.hibernate.mapping.Map( persistentClass );
+	}
+
+	@Override
+	public SecondPass getSecondPass(
+			final Ejb3JoinColumn[] fkJoinColumns, final Ejb3JoinColumn[] keyColumns,
+			final Ejb3JoinColumn[] inverseColumns,
+			final Ejb3Column[] elementColumns,
+			final Ejb3Column[] mapKeyColumns, final Ejb3JoinColumn[] mapKeyManyToManyColumns, final boolean isEmbedded,
+			final XProperty property, final XClass collType,
+			final boolean ignoreNotFound, final boolean unique,
+			final TableBinder assocTableBinder, final ExtendedMappings mappings
+	) {
+		return new CollectionSecondPass( mappings, MapBinder.this.collection ) {
+			public void secondPass(Map persistentClasses, Map inheritedMetas)
+					throws MappingException {
+				bindStarToManySecondPass(
+						persistentClasses, collType, fkJoinColumns, keyColumns, inverseColumns, elementColumns,
+						isEmbedded, property, unique, assocTableBinder, ignoreNotFound, mappings
+				);
+				bindKeyFromAssociationTable(
+						collType, persistentClasses, mapKeyPropertyName, property, isEmbedded, mappings,
+						mapKeyColumns, mapKeyManyToManyColumns,
+						inverseColumns != null ? inverseColumns[0].getPropertyName() : null
+				);
+			}
+		};
+	}
+
+	private void bindKeyFromAssociationTable(
+            XClass collType, Map persistentClasses, String mapKeyPropertyName, XProperty property,
+			boolean isEmbedded, ExtendedMappings mappings, Ejb3Column[] mapKeyColumns,
+			Ejb3JoinColumn[] mapKeyManyToManyColumns, String targetPropertyName
+	) {
+		if ( mapKeyPropertyName != null ) {
+			//this is an EJB3 @MapKey
+			PersistentClass associatedClass = (PersistentClass) persistentClasses.get( collType.getName() );
+			if ( associatedClass == null ) throw new AnnotationException( "Associated class not found: " + collType );
+			Property mapProperty = BinderHelper.findPropertyByName( associatedClass, mapKeyPropertyName );
+			if ( mapProperty == null ) {
+				throw new AnnotationException(
+						"Map key property not found: " + collType + "." + mapKeyPropertyName
+				);
+			}
+			org.hibernate.mapping.Map map = (org.hibernate.mapping.Map) this.collection;
+			Value indexValue = createFormulatedValue( mapProperty.getValue(), map, targetPropertyName, associatedClass );
+			map.setIndex( indexValue );
+		}
+		else {
+			//this is a true Map mapping
+			//TODO ugly copy/pastle from CollectionBinder.bindManyToManySecondPass
+			String mapKeyType;
+			Class target = void.class;
+			/*
+			 * target has priority over reflection for the map key type
+			 */
+			if ( property.isAnnotationPresent( org.hibernate.annotations.MapKey.class ) ) {
+				target = property.getAnnotation( org.hibernate.annotations.MapKey.class ).targetElement();
+			}
+			else if ( property.isAnnotationPresent( MapKeyManyToMany.class ) ) {
+				target = property.getAnnotation( MapKeyManyToMany.class ).targetEntity();
+			}
+			if ( ! void.class.equals( target ) ) {
+				mapKeyType = target.getName();
+			}
+			else {
+				mapKeyType = property.getMapKey().getName();
+			}
+			PersistentClass collectionEntity = (PersistentClass) persistentClasses.get( mapKeyType );
+			boolean isIndexOfEntities = collectionEntity != null;
+			ManyToOne element = null;
+			org.hibernate.mapping.Map mapValue = (org.hibernate.mapping.Map) this.collection;
+			if ( isIndexOfEntities ) {
+				element = new ManyToOne( mapValue.getCollectionTable() );
+				mapValue.setIndex( element );
+				element.setReferencedEntityName( mapKeyType );
+				//element.setFetchMode( fetchMode );
+				//element.setLazy( fetchMode != FetchMode.JOIN );
+				//make the second join non lazy
+				element.setFetchMode( FetchMode.JOIN );
+				element.setLazy( false );
+				//does not make sense for a map key element.setIgnoreNotFound( ignoreNotFound );
+			}
+			else {
+				XClass elementClass;
+				AnnotatedClassType classType;
+				//			Map<String, javax.persistence.Column[]> columnOverrides = PropertyHolderBuilder.buildColumnOverride(
+				//					property, StringHelper.qualify( collValue.getRole(), "element" )
+				//			);
+				//FIXME the "element" is lost
+				PropertyHolder holder = null;
+				if ( BinderHelper.PRIMITIVE_NAMES.contains( mapKeyType ) ) {
+					classType = AnnotatedClassType.NONE;
+					elementClass = null;
+				}
+				else {
+					try {
+						elementClass = mappings.getReflectionManager().classForName( mapKeyType, MapBinder.class );
+					}
+					catch (ClassNotFoundException e) {
+						throw new AnnotationException( "Unable to find class: " + mapKeyType, e );
+					}
+					classType = mappings.getClassType( elementClass );
+
+					holder = PropertyHolderBuilder.buildPropertyHolder(
+							mapValue,
+							StringHelper.qualify( mapValue.getRole(), "mapkey" ),
+							elementClass,
+							property, propertyHolder, mappings
+					);
+					//force in case of attribute override
+					boolean attributeOverride = property.isAnnotationPresent( AttributeOverride.class )
+							|| property.isAnnotationPresent( AttributeOverrides.class );
+					if ( isEmbedded || attributeOverride ) {
+						classType = AnnotatedClassType.EMBEDDABLE;
+					}
+				}
+
+				if ( AnnotatedClassType.EMBEDDABLE.equals( classType ) ) {
+					EntityBinder entityBinder = new EntityBinder();
+					PersistentClass owner = mapValue.getOwner();
+					boolean isPropertyAnnotated;
+					//FIXME support @Access for collection of elements
+					//String accessType = access != null ? access.value() : null;
+					if ( owner.getIdentifierProperty() != null ) {
+						isPropertyAnnotated = owner.getIdentifierProperty()
+								.getPropertyAccessorName()
+								.equals( "property" );
+					}
+					else
+					if ( owner.getIdentifierMapper() != null && owner.getIdentifierMapper().getPropertySpan() > 0 ) {
+						Property prop = (Property) owner.getIdentifierMapper().getPropertyIterator().next();
+						isPropertyAnnotated = prop.getPropertyAccessorName().equals( "property" );
+					}
+					else {
+						throw new AssertionFailure( "Unable to guess collection property accessor name" );
+					}
+
+					//boolean propertyAccess = embeddable == null || AccessType.PROPERTY.equals( embeddable.access() );
+					//FIXME "index" is it right?
+					PropertyData inferredData = new PropertyPreloadedData( "property", "index", elementClass );
+					//TODO be smart with isNullable
+					Component component = AnnotationBinder.fillComponent(
+							holder, inferredData, isPropertyAnnotated, isPropertyAnnotated ? "property" : "field", true,
+							entityBinder, false, false,
+							true, mappings
+					);
+					mapValue.setIndex( component );
+				}
+				else {
+					SimpleValueBinder elementBinder = new SimpleValueBinder();
+					elementBinder.setMappings( mappings );
+					elementBinder.setReturnedClassName( mapKeyType );
+
+					Ejb3Column[] elementColumns = mapKeyColumns;
+					if ( elementColumns == null || elementColumns.length == 0 ) {
+						elementColumns = new Ejb3Column[1];
+						Ejb3Column column = new Ejb3Column();
+						column.setImplicit( false );
+						column.setNullable( true );
+						column.setLength( Ejb3Column.DEFAULT_COLUMN_LENGTH );
+						column.setLogicalColumnName( Collection.DEFAULT_KEY_COLUMN_NAME );
+						//TODO create an EMPTY_JOINS collection
+						column.setJoins( new HashMap<String, Join>() );
+						column.setMappings( mappings );
+						column.bind();
+						elementColumns[0] = column;
+					}
+					//override the table
+					for ( Ejb3Column column : elementColumns ) {
+						column.setTable( mapValue.getCollectionTable() );
+					}
+					elementBinder.setColumns( elementColumns );
+					elementBinder.setType( property, elementClass );
+					mapValue.setIndex( elementBinder.make() );
+				}
+			}
+			//FIXME pass the Index Entity JoinColumns
+			if ( ! collection.isOneToMany() ) {
+				//index column shoud not be null
+				for ( Ejb3JoinColumn col : mapKeyManyToManyColumns ) {
+					col.forceNotNull();
+				}
+			}
+			if ( isIndexOfEntities ) {
+				bindManytoManyInverseFk(
+						collectionEntity,
+						mapKeyManyToManyColumns,
+						element,
+						false, //a map key column has no unique constraint
+						mappings
+				);
+			}
+		}
+	}
+
+	protected Value createFormulatedValue(
+			Value value, Collection collection, String targetPropertyName, PersistentClass associatedClass
+	) {
+		Value element = collection.getElement();
+		String fromAndWhere = null;
+		if ( ! ( element instanceof OneToMany ) ) {
+			String referencedPropertyName= null;
+			if ( element instanceof ToOne ) {
+				referencedPropertyName = ( (ToOne) element ).getReferencedPropertyName();
+			}
+			else if ( element instanceof DependantValue ) {
+				//TODO this never happen I think
+				if ( propertyName != null ) {
+					referencedPropertyName = collection.getReferencedPropertyName();
+				}
+				else {
+					throw new AnnotationException( "SecondaryTable JoinColumn cannot reference a non primary key" );
+				}
+			}
+			Iterator referencedEntityColumns;
+			if (referencedPropertyName == null) {
+				referencedEntityColumns = associatedClass.getIdentifier().getColumnIterator();
+			}
+			else {
+				Property referencedProperty = associatedClass.getRecursiveProperty( referencedPropertyName );
+				referencedEntityColumns = referencedProperty.getColumnIterator();
+			}
+			String alias = "$alias$";
+			StringBuilder fromAndWhereSb = new StringBuilder( " from " )
+					.append( associatedClass.getTable().getName() )
+					//.append(" as ") //Oracle doesn't support it in subqueries
+					.append(" ")
+					.append(alias).append(" where ");
+			Iterator collectionTableColumns = element.getColumnIterator();
+			while ( collectionTableColumns.hasNext() ) {
+				Column colColumn = (Column) collectionTableColumns.next();
+				Column refColumn = (Column) referencedEntityColumns.next();
+				fromAndWhereSb.append(alias).append('.').append( refColumn.getQuotedName() )
+						.append('=').append( colColumn.getQuotedName() ).append(" and ");
+			}
+			fromAndWhere = fromAndWhereSb.substring(0, fromAndWhereSb.length() - 5 );
+		}
+
+		if ( value instanceof Component ) {
+			Component component = (Component) value;
+			Iterator properties = component.getPropertyIterator();
+			Component indexComponent = new Component( collection );
+			indexComponent.setComponentClassName( component.getComponentClassName() );
+			//TODO I don't know if this is appropriate
+			indexComponent.setNodeName( "index" );
+			while ( properties.hasNext() ) {
+				Property current = (Property) properties.next();
+				Property newProperty = new Property();
+				newProperty.setCascade( current.getCascade() );
+				newProperty.setGeneration( current.getGeneration() );
+				newProperty.setInsertable( false );
+				newProperty.setUpdateable( false );
+				newProperty.setMetaAttributes( current.getMetaAttributes() );
+				newProperty.setName( current.getName() );
+				newProperty.setNodeName( current.getNodeName() );
+				newProperty.setNaturalIdentifier( false );
+				//newProperty.setOptimisticLocked( false );
+				newProperty.setOptional( false );
+				newProperty.setPersistentClass( current.getPersistentClass() );
+				newProperty.setPropertyAccessorName( current.getPropertyAccessorName() );
+				newProperty.setSelectable( current.isSelectable() );
+				newProperty.setValue( createFormulatedValue( current.getValue(), collection, targetPropertyName,
+						associatedClass
+				) );
+				indexComponent.addProperty( newProperty );
+			}
+			return indexComponent;
+		}
+		else if ( value instanceof SimpleValue ) {
+			SimpleValue sourceValue = (SimpleValue) value;
+			SimpleValue targetValue;
+			if( value instanceof ManyToOne ) {
+				ManyToOne sourceManyToOne = (ManyToOne) sourceValue;
+				ManyToOne targetManyToOne = new ManyToOne( collection.getCollectionTable() );
+				targetManyToOne.setFetchMode( FetchMode.DEFAULT );
+				targetManyToOne.setLazy( true );
+				//targetValue.setIgnoreNotFound( ); does not make sense for a map key
+				targetManyToOne.setReferencedEntityName( sourceManyToOne.getReferencedEntityName() );
+				targetValue = targetManyToOne;
+			}
+			else {
+				targetValue = new SimpleValue( collection.getCollectionTable() );
+				targetValue.setTypeName( sourceValue.getTypeName() );
+				targetValue.setTypeParameters( sourceValue.getTypeParameters() );
+			}
+			Iterator columns = sourceValue.getColumnIterator();
+			Random random = new Random();
+			while ( columns.hasNext() ) {
+				Object current = columns.next();
+				Formula formula = new Formula();
+				String formulaString;
+				if ( current instanceof Column ) {
+					formulaString = ( (Column) current ).getQuotedName();
+				}
+				else if ( current instanceof Formula ) {
+					formulaString =  ( (Formula) current ).getFormula();
+				}
+				else {
+					throw new AssertionFailure( "Unknown element in column iterator: " + current.getClass() );
+				}
+				if (fromAndWhere != null) {
+					formulaString = Template.renderWhereStringTemplate( formulaString, "$alias$", new HSQLDialect() );
+					formulaString = "(select " +  formulaString + fromAndWhere + ")";
+					formulaString = StringHelper.replace(
+							formulaString,
+							"$alias$",
+							"a" + random.nextInt( 16 )
+					);
+				}
+				formula.setFormula( formulaString );
+				targetValue.addFormula( formula );
+
+			}
+			return targetValue;
+		}
+		else {
+			throw new AssertionFailure( "Unknown type encounters for map key: " + value.getClass() );
+		}
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/Nullability.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/Nullability.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/Nullability.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,12 +0,0 @@
-package org.hibernate.cfg.annotations;
-
-/**
- * Are the columns forced to null, not null or not forced
- *
- * @author Emmanuel Bernard
- */
-public enum Nullability {
-	FORCED_NULL,
-	FORCED_NOT_NULL,
-	NO_CONSTRAINT
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/Nullability.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/Nullability.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/Nullability.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/Nullability.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,12 @@
+package org.hibernate.cfg.annotations;
+
+/**
+ * Are the columns forced to null, not null or not forced
+ *
+ * @author Emmanuel Bernard
+ */
+public enum Nullability {
+	FORCED_NULL,
+	FORCED_NOT_NULL,
+	NO_CONSTRAINT
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/PrimitiveArrayBinder.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/PrimitiveArrayBinder.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/PrimitiveArrayBinder.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,16 +0,0 @@
-//$Id$
-package org.hibernate.cfg.annotations;
-
-import org.hibernate.mapping.Collection;
-import org.hibernate.mapping.PersistentClass;
-import org.hibernate.mapping.PrimitiveArray;
-
-/**
- * @author Emmanuel Bernard
- */
-public class PrimitiveArrayBinder extends ArrayBinder {
-	@Override
-	protected Collection createCollection(PersistentClass persistentClass) {
-		return new PrimitiveArray( persistentClass );
-	}
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/PrimitiveArrayBinder.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/PrimitiveArrayBinder.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/PrimitiveArrayBinder.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/PrimitiveArrayBinder.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,16 @@
+//$Id$
+package org.hibernate.cfg.annotations;
+
+import org.hibernate.mapping.Collection;
+import org.hibernate.mapping.PersistentClass;
+import org.hibernate.mapping.PrimitiveArray;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class PrimitiveArrayBinder extends ArrayBinder {
+	@Override
+	protected Collection createCollection(PersistentClass persistentClass) {
+		return new PrimitiveArray( persistentClass );
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/PropertyBinder.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/PropertyBinder.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/PropertyBinder.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,183 +0,0 @@
-//$Id$
-package org.hibernate.cfg.annotations;
-
-import javax.persistence.Id;
-import javax.persistence.EmbeddedId;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.hibernate.AnnotationException;
-import org.hibernate.annotations.Generated;
-import org.hibernate.annotations.GenerationTime;
-import org.hibernate.annotations.OptimisticLock;
-import org.hibernate.cfg.Ejb3Column;
-import org.hibernate.cfg.ExtendedMappings;
-import org.hibernate.cfg.PropertyHolder;
-import org.hibernate.mapping.Property;
-import org.hibernate.mapping.PropertyGeneration;
-import org.hibernate.mapping.SimpleValue;
-import org.hibernate.mapping.Value;
-import org.hibernate.annotations.common.reflection.XClass;
-import org.hibernate.annotations.common.reflection.XProperty;
-import org.hibernate.util.StringHelper;
-
-/**
- * @author Emmanuel Bernard
- */
-public class PropertyBinder {
-	private static Log log = LogFactory.getLog( PropertyBinder.class );
-	private String name;
-	private String returnedClassName;
-	private boolean lazy;
-	private String propertyAccessorName;
-	private Ejb3Column[] columns;
-	private PropertyHolder holder;
-	private ExtendedMappings mappings;
-	private Value value;
-	private boolean insertable = true;
-	private boolean updatable = true;
-	private String cascade;
-	/*
-	 * property can be null
-	 * prefer propertyName to property.getName() since some are overloaded
-	 */
-	private XProperty property;
-	private XClass returnedClass;
-
-	public void setInsertable(boolean insertable) {
-		this.insertable = insertable;
-	}
-
-	public void setUpdatable(boolean updatable) {
-		this.updatable = updatable;
-	}
-
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	public void setReturnedClassName(String returnedClassName) {
-		this.returnedClassName = returnedClassName;
-	}
-
-	public void setLazy(boolean lazy) {
-		this.lazy = lazy;
-	}
-
-	public void setPropertyAccessorName(String propertyAccessorName) {
-		this.propertyAccessorName = propertyAccessorName;
-	}
-
-	public void setColumns(Ejb3Column[] columns) {
-		insertable = columns[0].isInsertable();
-		updatable = columns[0].isUpdatable();
-		//concsistency is checked later when we know the proeprty name
-		this.columns = columns;
-	}
-
-	public void setHolder(PropertyHolder holder) {
-		this.holder = holder;
-	}
-
-	public void setValue(Value value) {
-		this.value = value;
-	}
-
-	public void setCascade(String cascadeStrategy) {
-		this.cascade = cascadeStrategy;
-	}
-
-	public void setMappings(ExtendedMappings mappings) {
-		this.mappings = mappings;
-	}
-
-	private void validateBind() {
-		//TODO check necessary params for a bind		
-	}
-
-	private void validateMake() {
-		//TODO check necessary params for a make
-	}
-
-	public Property bind() {
-		validateBind();
-		if ( log.isDebugEnabled() ) {
-			log.debug( "binding property " + name + " with lazy=" + lazy );
-		}
-		String containerClassName = holder == null ?
-				null :
-				holder.getClassName();
-		SimpleValueBinder value = new SimpleValueBinder();
-		value.setMappings( mappings );
-		value.setPropertyName( name );
-		value.setReturnedClassName( returnedClassName );
-		value.setColumns( columns );
-		value.setPersistentClassName( containerClassName );
-		value.setType( property, returnedClass );
-		value.setMappings( mappings );
-		SimpleValue propertyValue = value.make();
-		setValue( propertyValue );
-		Property prop = make();
-		holder.addProperty( prop, columns );
-		return prop;
-	}
-
-	public Property make() {
-		validateMake();
-		log.debug( "Building property " + name );
-		Property prop = new Property();
-		prop.setName( name );
-		prop.setNodeName( name );
-		prop.setValue( value );
-		prop.setLazy( lazy );
-		prop.setCascade( cascade );
-		prop.setPropertyAccessorName( propertyAccessorName );
-		Generated ann = property != null ?
-				property.getAnnotation( Generated.class ) :
-				null;
-		GenerationTime generated = ann != null ?
-				ann.value() :
-				null;
-		if ( generated != null ) {
-			if ( !GenerationTime.NEVER.equals( generated ) ) {
-				if ( property.isAnnotationPresent( javax.persistence.Version.class )
-						&& GenerationTime.INSERT.equals( generated ) ) {
-					throw new AnnotationException( "@Generated(INSERT) on a @Version property not allowed, use ALWAYS: "
-							+ StringHelper.qualify( holder.getPath(), name ) );
-				}
-				insertable = false;
-				if ( GenerationTime.ALWAYS.equals( generated ) ) {
-					updatable = false;
-				}
-				prop.setGeneration( PropertyGeneration.parse( generated.toString().toLowerCase() ) );
-			}
-		}
-		prop.setInsertable( insertable );
-		prop.setUpdateable( updatable );
-		OptimisticLock lockAnn = property != null ?
-				property.getAnnotation( OptimisticLock.class ) :
-				null;
-		if ( lockAnn != null) {
-			prop.setOptimisticLocked( ! lockAnn.excluded() );
-			//TODO this should go to the core as a mapping validation checking
-			if ( lockAnn.excluded() && (
-					property.isAnnotationPresent( javax.persistence.Version.class )
-					|| property.isAnnotationPresent( Id.class )
-					|| property.isAnnotationPresent( EmbeddedId.class ) ) ) {
-				throw new AnnotationException("@OptimisticLock.exclude=true incompatible with @Id, @EmbeddedId and @Version: "
-						+ StringHelper.qualify( holder.getPath(), name ) );
-			}
-		}
-		log.trace( "Cascading " + name + " with " + cascade );
-		return prop;
-	}
-
-	public void setProperty(XProperty property) {
-		this.property = property;
-	}
-
-	public void setReturnedClass(XClass returnedClass) {
-		this.returnedClass = returnedClass;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/PropertyBinder.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/PropertyBinder.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/PropertyBinder.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/PropertyBinder.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,183 @@
+//$Id$
+package org.hibernate.cfg.annotations;
+
+import javax.persistence.Id;
+import javax.persistence.EmbeddedId;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.hibernate.AnnotationException;
+import org.hibernate.annotations.Generated;
+import org.hibernate.annotations.GenerationTime;
+import org.hibernate.annotations.OptimisticLock;
+import org.hibernate.cfg.Ejb3Column;
+import org.hibernate.cfg.ExtendedMappings;
+import org.hibernate.cfg.PropertyHolder;
+import org.hibernate.mapping.Property;
+import org.hibernate.mapping.PropertyGeneration;
+import org.hibernate.mapping.SimpleValue;
+import org.hibernate.mapping.Value;
+import org.hibernate.annotations.common.reflection.XClass;
+import org.hibernate.annotations.common.reflection.XProperty;
+import org.hibernate.util.StringHelper;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class PropertyBinder {
+	private static Log log = LogFactory.getLog( PropertyBinder.class );
+	private String name;
+	private String returnedClassName;
+	private boolean lazy;
+	private String propertyAccessorName;
+	private Ejb3Column[] columns;
+	private PropertyHolder holder;
+	private ExtendedMappings mappings;
+	private Value value;
+	private boolean insertable = true;
+	private boolean updatable = true;
+	private String cascade;
+	/*
+	 * property can be null
+	 * prefer propertyName to property.getName() since some are overloaded
+	 */
+	private XProperty property;
+	private XClass returnedClass;
+
+	public void setInsertable(boolean insertable) {
+		this.insertable = insertable;
+	}
+
+	public void setUpdatable(boolean updatable) {
+		this.updatable = updatable;
+	}
+
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public void setReturnedClassName(String returnedClassName) {
+		this.returnedClassName = returnedClassName;
+	}
+
+	public void setLazy(boolean lazy) {
+		this.lazy = lazy;
+	}
+
+	public void setPropertyAccessorName(String propertyAccessorName) {
+		this.propertyAccessorName = propertyAccessorName;
+	}
+
+	public void setColumns(Ejb3Column[] columns) {
+		insertable = columns[0].isInsertable();
+		updatable = columns[0].isUpdatable();
+		//concsistency is checked later when we know the proeprty name
+		this.columns = columns;
+	}
+
+	public void setHolder(PropertyHolder holder) {
+		this.holder = holder;
+	}
+
+	public void setValue(Value value) {
+		this.value = value;
+	}
+
+	public void setCascade(String cascadeStrategy) {
+		this.cascade = cascadeStrategy;
+	}
+
+	public void setMappings(ExtendedMappings mappings) {
+		this.mappings = mappings;
+	}
+
+	private void validateBind() {
+		//TODO check necessary params for a bind		
+	}
+
+	private void validateMake() {
+		//TODO check necessary params for a make
+	}
+
+	public Property bind() {
+		validateBind();
+		if ( log.isDebugEnabled() ) {
+			log.debug( "binding property " + name + " with lazy=" + lazy );
+		}
+		String containerClassName = holder == null ?
+				null :
+				holder.getClassName();
+		SimpleValueBinder value = new SimpleValueBinder();
+		value.setMappings( mappings );
+		value.setPropertyName( name );
+		value.setReturnedClassName( returnedClassName );
+		value.setColumns( columns );
+		value.setPersistentClassName( containerClassName );
+		value.setType( property, returnedClass );
+		value.setMappings( mappings );
+		SimpleValue propertyValue = value.make();
+		setValue( propertyValue );
+		Property prop = make();
+		holder.addProperty( prop, columns );
+		return prop;
+	}
+
+	public Property make() {
+		validateMake();
+		log.debug( "Building property " + name );
+		Property prop = new Property();
+		prop.setName( name );
+		prop.setNodeName( name );
+		prop.setValue( value );
+		prop.setLazy( lazy );
+		prop.setCascade( cascade );
+		prop.setPropertyAccessorName( propertyAccessorName );
+		Generated ann = property != null ?
+				property.getAnnotation( Generated.class ) :
+				null;
+		GenerationTime generated = ann != null ?
+				ann.value() :
+				null;
+		if ( generated != null ) {
+			if ( !GenerationTime.NEVER.equals( generated ) ) {
+				if ( property.isAnnotationPresent( javax.persistence.Version.class )
+						&& GenerationTime.INSERT.equals( generated ) ) {
+					throw new AnnotationException( "@Generated(INSERT) on a @Version property not allowed, use ALWAYS: "
+							+ StringHelper.qualify( holder.getPath(), name ) );
+				}
+				insertable = false;
+				if ( GenerationTime.ALWAYS.equals( generated ) ) {
+					updatable = false;
+				}
+				prop.setGeneration( PropertyGeneration.parse( generated.toString().toLowerCase() ) );
+			}
+		}
+		prop.setInsertable( insertable );
+		prop.setUpdateable( updatable );
+		OptimisticLock lockAnn = property != null ?
+				property.getAnnotation( OptimisticLock.class ) :
+				null;
+		if ( lockAnn != null) {
+			prop.setOptimisticLocked( ! lockAnn.excluded() );
+			//TODO this should go to the core as a mapping validation checking
+			if ( lockAnn.excluded() && (
+					property.isAnnotationPresent( javax.persistence.Version.class )
+					|| property.isAnnotationPresent( Id.class )
+					|| property.isAnnotationPresent( EmbeddedId.class ) ) ) {
+				throw new AnnotationException("@OptimisticLock.exclude=true incompatible with @Id, @EmbeddedId and @Version: "
+						+ StringHelper.qualify( holder.getPath(), name ) );
+			}
+		}
+		log.trace( "Cascading " + name + " with " + cascade );
+		return prop;
+	}
+
+	public void setProperty(XProperty property) {
+		this.property = property;
+	}
+
+	public void setReturnedClass(XClass returnedClass) {
+		this.returnedClass = returnedClass;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/QueryBinder.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/QueryBinder.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/QueryBinder.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,389 +0,0 @@
-//$Id$
-package org.hibernate.cfg.annotations;
-
-import java.util.HashMap;
-import javax.persistence.NamedNativeQueries;
-import javax.persistence.NamedNativeQuery;
-import javax.persistence.NamedQueries;
-import javax.persistence.NamedQuery;
-import javax.persistence.QueryHint;
-import javax.persistence.SqlResultSetMapping;
-import javax.persistence.SqlResultSetMappings;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.hibernate.AnnotationException;
-import org.hibernate.AssertionFailure;
-import org.hibernate.CacheMode;
-import org.hibernate.FlushMode;
-import org.hibernate.LockMode;
-import org.hibernate.annotations.CacheModeType;
-import org.hibernate.annotations.FlushModeType;
-import org.hibernate.cfg.BinderHelper;
-import org.hibernate.cfg.ExtendedMappings;
-import org.hibernate.cfg.NotYetImplementedException;
-import org.hibernate.engine.NamedQueryDefinition;
-import org.hibernate.engine.NamedSQLQueryDefinition;
-import org.hibernate.engine.query.sql.NativeSQLQueryReturn;
-import org.hibernate.engine.query.sql.NativeSQLQueryRootReturn;
-
-/**
- * Query binder
- *
- * @author Emmanuel Bernard
- */
-public abstract class QueryBinder {
-	private static Log log = LogFactory.getLog( QueryBinder.class );
-
-	public static void bindQuery(NamedQuery queryAnn, ExtendedMappings mappings, boolean isDefault) {
-		if ( queryAnn == null ) return;
-		if ( BinderHelper.isDefault( queryAnn.name() ) ) {
-			throw new AnnotationException( "A named query must have a name when used in class or package level" );
-		}
-		//EJBQL Query
-		QueryHint[] hints = queryAnn.hints();
-		String queryName = queryAnn.query();
-		NamedQueryDefinition query = new NamedQueryDefinition(
-				queryName,
-				getBoolean( queryName, "org.hibernate.cacheable", hints ),
-				getString( queryName, "org.hibernate.cacheRegion", hints ),
-				getInteger( queryName, "org.hibernate.timeout", hints ),
-				getInteger( queryName, "org.hibernate.fetchSize", hints ),
-				getFlushMode( queryName, hints ),
-				getCacheMode( queryName, hints ),
-				getBoolean( queryName, "org.hibernate.readOnly", hints ),
-				getString( queryName, "org.hibernate.comment", hints ),
-				null
-		);
-		if (isDefault) {
-			mappings.addDefaultQuery( queryAnn.name(), query );
-		}
-		else {
-			mappings.addQuery( queryAnn.name(), query );
-		}
-		if ( log.isInfoEnabled() ) log.info( "Binding Named query: " + queryAnn.name() + " => " + queryAnn.query() );
-	}
-
-
-	public static void bindNativeQuery(NamedNativeQuery queryAnn, ExtendedMappings mappings, boolean isDefault) {
-		if ( queryAnn == null ) return;
-		//ResultSetMappingDefinition mappingDefinition = mappings.getResultSetMapping( queryAnn.resultSetMapping() );
-		if ( BinderHelper.isDefault( queryAnn.name() ) ) {
-			throw new AnnotationException( "A named query must have a name when used in class or package level" );
-		}
-		NamedSQLQueryDefinition query;
-		String resultSetMapping = queryAnn.resultSetMapping();
-		QueryHint[] hints = queryAnn.hints();
-		String queryName = queryAnn.query();
-		if ( ! BinderHelper.isDefault( resultSetMapping ) ) {
-			//sql result set usage
-			query = new NamedSQLQueryDefinition(
-					queryName,
-					resultSetMapping,
-					null,
-					getBoolean( queryName, "org.hibernate.cacheable", hints ),
-					getString( queryName, "org.hibernate.cacheRegion", hints ),
-					getInteger( queryName, "org.hibernate.timeout", hints ),
-					getInteger( queryName, "org.hibernate.fetchSize", hints ),
-					getFlushMode( queryName, hints ),
-					getCacheMode( queryName, hints ),
-					getBoolean( queryName, "org.hibernate.readOnly", hints ),
-					getString( queryName, "org.hibernate.comment", hints ),
-					null,
-					getBoolean( queryName, "org.hibernate.callable", hints )
-			);
-		}
-		else if ( ! void.class.equals( queryAnn.resultClass() ) ) {
-			//class mapping usage
-			//FIXME should be done in a second pass due to entity name?
-			final NativeSQLQueryRootReturn entityQueryReturn =
-					new NativeSQLQueryRootReturn( "alias1", queryAnn.resultClass().getName(), new HashMap(), LockMode.READ );
-			query = new NamedSQLQueryDefinition(
-					queryName,
-					new NativeSQLQueryReturn[]{entityQueryReturn},
-					null,
-					getBoolean( queryName, "org.hibernate.cacheable", hints ),
-					getString( queryName, "org.hibernate.cacheRegion", hints ),
-					getInteger( queryName, "org.hibernate.timeout", hints ),
-					getInteger( queryName, "org.hibernate.fetchSize", hints ),
-					getFlushMode( queryName, hints ),
-					getCacheMode( queryName, hints ),
-					getBoolean( queryName, "org.hibernate.readOnly", hints ),
-					getString( queryName, "org.hibernate.comment", hints ),
-					null,
-					getBoolean( queryName, "org.hibernate.callable", hints )
-			);
-		}
-		else {
-			throw new NotYetImplementedException( "Pure native scalar queries are not yet supported" );
-		}
-		if (isDefault) {
-			mappings.addDefaultSQLQuery( queryAnn.name(), query );
-		}
-		else {
-			mappings.addSQLQuery( queryAnn.name(), query );
-		}
-		if ( log.isInfoEnabled() ) {
-			log.info( "Binding named native query: " + queryAnn.name() + " => " + queryAnn.query() );
-		}
-	}
-
-	public static void bindNativeQuery(org.hibernate.annotations.NamedNativeQuery queryAnn, ExtendedMappings mappings) {
-		if ( queryAnn == null ) return;
-		//ResultSetMappingDefinition mappingDefinition = mappings.getResultSetMapping( queryAnn.resultSetMapping() );
-		if ( BinderHelper.isDefault( queryAnn.name() ) ) {
-			throw new AnnotationException( "A named query must have a name when used in class or package level" );
-		}
-		NamedSQLQueryDefinition query;
-		String resultSetMapping = queryAnn.resultSetMapping();
-		if ( ! BinderHelper.isDefault( resultSetMapping ) ) {
-			//sql result set usage
-			query = new NamedSQLQueryDefinition(
-					queryAnn.query(),
-					resultSetMapping,
-					null,
-					queryAnn.cacheable(),
-					BinderHelper.isDefault( queryAnn.cacheRegion() ) ? null : queryAnn.cacheRegion(),
-					queryAnn.timeout() < 0 ? null : queryAnn.timeout(),
-					queryAnn.fetchSize() < 0 ? null : queryAnn.fetchSize(),
-					getFlushMode( queryAnn.flushMode() ),
-					getCacheMode( queryAnn.cacheMode() ),
-					queryAnn.readOnly(),
-					BinderHelper.isDefault( queryAnn.comment() ) ? null : queryAnn.comment(),
-					null,
-					queryAnn.callable()
-			);
-		}
-		else if ( ! void.class.equals( queryAnn.resultClass() ) ) {
-			//class mapping usage
-			//FIXME should be done in a second pass due to entity name?
-			final NativeSQLQueryRootReturn entityQueryReturn =
-					new NativeSQLQueryRootReturn( "alias1", queryAnn.resultClass().getName(), new HashMap(), LockMode.READ );
-			query = new NamedSQLQueryDefinition(
-					queryAnn.query(),
-					new NativeSQLQueryReturn[]{entityQueryReturn},
-					null,
-					queryAnn.cacheable(),
-					BinderHelper.isDefault( queryAnn.cacheRegion() ) ? null : queryAnn.cacheRegion(),
-					queryAnn.timeout() < 0 ? null : queryAnn.timeout(),
-					queryAnn.fetchSize() < 0 ? null : queryAnn.fetchSize(),
-					getFlushMode( queryAnn.flushMode() ),
-					getCacheMode( queryAnn.cacheMode() ),
-					queryAnn.readOnly(),
-					BinderHelper.isDefault( queryAnn.comment() ) ? null : queryAnn.comment(),
-					null,
-					queryAnn.callable()
-			);
-		}
-		else {
-			throw new NotYetImplementedException( "Pure native scalar queries are not yet supported" );
-		}
-		mappings.addSQLQuery( queryAnn.name(), query );
-		if ( log.isInfoEnabled() ) {
-			log.info( "Binding named native query: " + queryAnn.name() + " => " + queryAnn.query() );
-		}
-	}
-
-	public static void bindQueries(NamedQueries queriesAnn, ExtendedMappings mappings, boolean isDefault) {
-		if ( queriesAnn == null ) return;
-		for ( NamedQuery q : queriesAnn.value() ) {
-			bindQuery( q, mappings, isDefault );
-		}
-	}
-
-	public static void bindNativeQueries(NamedNativeQueries queriesAnn, ExtendedMappings mappings, boolean isDefault) {
-		if ( queriesAnn == null ) return;
-		for ( NamedNativeQuery q : queriesAnn.value() ) {
-			bindNativeQuery( q, mappings, isDefault );
-		}
-	}
-
-	public static void bindNativeQueries(
-			org.hibernate.annotations.NamedNativeQueries queriesAnn, ExtendedMappings mappings
-	) {
-		if ( queriesAnn == null ) return;
-		for ( org.hibernate.annotations.NamedNativeQuery q : queriesAnn.value() ) {
-			bindNativeQuery( q, mappings );
-		}
-	}
-
-	public static void bindQuery(org.hibernate.annotations.NamedQuery queryAnn, ExtendedMappings mappings) {
-		if ( queryAnn == null ) return;
-		if ( BinderHelper.isDefault( queryAnn.name() ) ) {
-			throw new AnnotationException( "A named query must have a name when used in class or package level" );
-		}
-
-		FlushMode flushMode;
-		flushMode = getFlushMode( queryAnn.flushMode() );
-
-		NamedQueryDefinition query = new NamedQueryDefinition(
-				queryAnn.query(),
-				queryAnn.cacheable(),
-				BinderHelper.isDefault( queryAnn.cacheRegion() ) ? null : queryAnn.cacheRegion(),
-				queryAnn.timeout() < 0 ? null : queryAnn.timeout(),
-				queryAnn.fetchSize() < 0 ? null : queryAnn.fetchSize(),
-				flushMode,
-				getCacheMode( queryAnn.cacheMode() ),
-				queryAnn.readOnly(),
-				BinderHelper.isDefault( queryAnn.comment() ) ? null : queryAnn.comment(),
-				null
-		);
-
-		mappings.addQuery( queryAnn.name(), query );
-		if ( log.isInfoEnabled() ) log.info( "Binding named query: " + queryAnn.name() + " => " + queryAnn.query() );
-	}
-
-	private static FlushMode getFlushMode(FlushModeType flushModeType) {
-		FlushMode flushMode;
-		switch ( flushModeType ) {
-			case ALWAYS:
-				flushMode = FlushMode.ALWAYS;
-				break;
-			case AUTO:
-				flushMode = FlushMode.AUTO;
-				break;
-			case COMMIT:
-				flushMode = FlushMode.COMMIT;
-				break;
-			case NEVER:
-				flushMode = FlushMode.MANUAL;
-				break;
-			case MANUAL:
-				flushMode = FlushMode.MANUAL;
-				break;
-			default:
-				throw new AssertionFailure( "Unknown flushModeType: " + flushModeType );
-		}
-		return flushMode;
-	}
-
-	private static CacheMode getCacheMode(CacheModeType cacheModeType) {
-		switch ( cacheModeType ) {
-			case GET:
-				return CacheMode.GET;
-			case IGNORE:
-				return CacheMode.IGNORE;
-			case NORMAL:
-				return CacheMode.NORMAL;
-			case PUT:
-				return CacheMode.PUT;
-			case REFRESH:
-				return CacheMode.REFRESH;
-			default:
-				throw new AssertionFailure( "Unknown cacheModeType: " + cacheModeType );
-		}
-	}
-
-
-	public static void bindQueries(org.hibernate.annotations.NamedQueries queriesAnn, ExtendedMappings mappings) {
-		if ( queriesAnn == null ) return;
-		for ( org.hibernate.annotations.NamedQuery q : queriesAnn.value() ) {
-			bindQuery( q, mappings );
-		}
-	}
-
-	public static void bindSqlResultsetMappings(SqlResultSetMappings ann, ExtendedMappings mappings, boolean isDefault) {
-		if ( ann == null ) return;
-		for ( SqlResultSetMapping rs : ann.value() ) {
-			//no need to handle inSecondPass
-			mappings.addSecondPass( new ResultsetMappingSecondPass( rs, mappings, true ) );
-		}
-	}
-
-	public static void bindSqlResultsetMapping(SqlResultSetMapping ann, ExtendedMappings mappings, boolean isDefault) {
-		//no need to handle inSecondPass
-		mappings.addSecondPass( new ResultsetMappingSecondPass( ann, mappings, isDefault ) );
-	}
-
-	private static CacheMode getCacheMode(String query, QueryHint[] hints) {
-		for ( QueryHint hint : hints ) {
-			if ( "org.hibernate.cacheMode".equals( hint.name() ) ) {
-				if ( hint.value().equalsIgnoreCase( CacheMode.GET.toString() ) ) {
-					return CacheMode.GET;
-				}
-				else if ( hint.value().equalsIgnoreCase( CacheMode.IGNORE.toString() ) ) {
-					return CacheMode.IGNORE;
-				}
-				else if ( hint.value().equalsIgnoreCase( CacheMode.NORMAL.toString() ) ) {
-					return CacheMode.NORMAL;
-				}
-				else if ( hint.value().equalsIgnoreCase( CacheMode.PUT.toString() ) ) {
-					return CacheMode.PUT;
-				}
-				else if ( hint.value().equalsIgnoreCase( CacheMode.REFRESH.toString() ) ) {
-					return CacheMode.REFRESH;
-				}
-				else {
-					throw new AnnotationException( "Unknown CacheMode in hint: " + query + ":" + hint.name() );
-				}
-			}
-		}
-		return null;
-	}
-
-	private static FlushMode getFlushMode(String query, QueryHint[] hints) {
-		for ( QueryHint hint : hints ) {
-			if ( "org.hibernate.flushMode".equals( hint.name() ) ) {
-				if ( hint.value().equalsIgnoreCase( FlushMode.ALWAYS.toString() ) ) {
-					return FlushMode.ALWAYS;
-				}
-				else if ( hint.value().equalsIgnoreCase( FlushMode.AUTO.toString() ) ) {
-					return FlushMode.AUTO;
-				}
-				else if ( hint.value().equalsIgnoreCase( FlushMode.COMMIT.toString() ) ) {
-					return FlushMode.COMMIT;
-				}
-				else if ( hint.value().equalsIgnoreCase( FlushMode.NEVER.toString() ) ) {
-					return FlushMode.MANUAL;
-				}
-				else if ( hint.value().equalsIgnoreCase( FlushMode.MANUAL.toString() ) ) {
-					return FlushMode.MANUAL;
-				}
-				else {
-					throw new AnnotationException( "Unknown FlushMode in hint: " + query + ":" + hint.name() );
-				}
-			}
-		}
-		return null;
-	}
-
-	private static boolean getBoolean(String query, String hintName, QueryHint[] hints) {
-		for ( QueryHint hint : hints ) {
-			if ( hintName.equals( hint.name() ) ) {
-				if ( hint.value().equalsIgnoreCase( "true" ) ) {
-					return true;
-				}
-				else if ( hint.value().equalsIgnoreCase( "false" ) ) {
-					return false;
-				}
-				else {
-					throw new AnnotationException( "Not a boolean in hint: " + query + ":" + hint.name() );
-				}
-			}
-		}
-		return false;
-	}
-
-	private static String getString(String query, String hintName, QueryHint[] hints) {
-		for ( QueryHint hint : hints ) {
-			if ( hintName.equals( hint.name() ) ) {
-				return hint.value();
-			}
-		}
-		return null;
-	}
-
-	private static Integer getInteger(String query, String hintName, QueryHint[] hints) {
-		for ( QueryHint hint : hints ) {
-			if ( hintName.equals( hint.name() ) ) {
-				try {
-					return Integer.decode( hint.value() );
-				}
-				catch (NumberFormatException nfe) {
-					throw new AnnotationException( "Not an integer in hint: " + query + ":" + hint.name(), nfe );
-				}
-			}
-		}
-		return null;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/QueryBinder.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/QueryBinder.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/QueryBinder.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/QueryBinder.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,389 @@
+//$Id$
+package org.hibernate.cfg.annotations;
+
+import java.util.HashMap;
+import javax.persistence.NamedNativeQueries;
+import javax.persistence.NamedNativeQuery;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.QueryHint;
+import javax.persistence.SqlResultSetMapping;
+import javax.persistence.SqlResultSetMappings;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.hibernate.AnnotationException;
+import org.hibernate.AssertionFailure;
+import org.hibernate.CacheMode;
+import org.hibernate.FlushMode;
+import org.hibernate.LockMode;
+import org.hibernate.annotations.CacheModeType;
+import org.hibernate.annotations.FlushModeType;
+import org.hibernate.cfg.BinderHelper;
+import org.hibernate.cfg.ExtendedMappings;
+import org.hibernate.cfg.NotYetImplementedException;
+import org.hibernate.engine.NamedQueryDefinition;
+import org.hibernate.engine.NamedSQLQueryDefinition;
+import org.hibernate.engine.query.sql.NativeSQLQueryReturn;
+import org.hibernate.engine.query.sql.NativeSQLQueryRootReturn;
+
+/**
+ * Query binder
+ *
+ * @author Emmanuel Bernard
+ */
+public abstract class QueryBinder {
+	private static Log log = LogFactory.getLog( QueryBinder.class );
+
+	public static void bindQuery(NamedQuery queryAnn, ExtendedMappings mappings, boolean isDefault) {
+		if ( queryAnn == null ) return;
+		if ( BinderHelper.isDefault( queryAnn.name() ) ) {
+			throw new AnnotationException( "A named query must have a name when used in class or package level" );
+		}
+		//EJBQL Query
+		QueryHint[] hints = queryAnn.hints();
+		String queryName = queryAnn.query();
+		NamedQueryDefinition query = new NamedQueryDefinition(
+				queryName,
+				getBoolean( queryName, "org.hibernate.cacheable", hints ),
+				getString( queryName, "org.hibernate.cacheRegion", hints ),
+				getInteger( queryName, "org.hibernate.timeout", hints ),
+				getInteger( queryName, "org.hibernate.fetchSize", hints ),
+				getFlushMode( queryName, hints ),
+				getCacheMode( queryName, hints ),
+				getBoolean( queryName, "org.hibernate.readOnly", hints ),
+				getString( queryName, "org.hibernate.comment", hints ),
+				null
+		);
+		if (isDefault) {
+			mappings.addDefaultQuery( queryAnn.name(), query );
+		}
+		else {
+			mappings.addQuery( queryAnn.name(), query );
+		}
+		if ( log.isInfoEnabled() ) log.info( "Binding Named query: " + queryAnn.name() + " => " + queryAnn.query() );
+	}
+
+
+	public static void bindNativeQuery(NamedNativeQuery queryAnn, ExtendedMappings mappings, boolean isDefault) {
+		if ( queryAnn == null ) return;
+		//ResultSetMappingDefinition mappingDefinition = mappings.getResultSetMapping( queryAnn.resultSetMapping() );
+		if ( BinderHelper.isDefault( queryAnn.name() ) ) {
+			throw new AnnotationException( "A named query must have a name when used in class or package level" );
+		}
+		NamedSQLQueryDefinition query;
+		String resultSetMapping = queryAnn.resultSetMapping();
+		QueryHint[] hints = queryAnn.hints();
+		String queryName = queryAnn.query();
+		if ( ! BinderHelper.isDefault( resultSetMapping ) ) {
+			//sql result set usage
+			query = new NamedSQLQueryDefinition(
+					queryName,
+					resultSetMapping,
+					null,
+					getBoolean( queryName, "org.hibernate.cacheable", hints ),
+					getString( queryName, "org.hibernate.cacheRegion", hints ),
+					getInteger( queryName, "org.hibernate.timeout", hints ),
+					getInteger( queryName, "org.hibernate.fetchSize", hints ),
+					getFlushMode( queryName, hints ),
+					getCacheMode( queryName, hints ),
+					getBoolean( queryName, "org.hibernate.readOnly", hints ),
+					getString( queryName, "org.hibernate.comment", hints ),
+					null,
+					getBoolean( queryName, "org.hibernate.callable", hints )
+			);
+		}
+		else if ( ! void.class.equals( queryAnn.resultClass() ) ) {
+			//class mapping usage
+			//FIXME should be done in a second pass due to entity name?
+			final NativeSQLQueryRootReturn entityQueryReturn =
+					new NativeSQLQueryRootReturn( "alias1", queryAnn.resultClass().getName(), new HashMap(), LockMode.READ );
+			query = new NamedSQLQueryDefinition(
+					queryName,
+					new NativeSQLQueryReturn[]{entityQueryReturn},
+					null,
+					getBoolean( queryName, "org.hibernate.cacheable", hints ),
+					getString( queryName, "org.hibernate.cacheRegion", hints ),
+					getInteger( queryName, "org.hibernate.timeout", hints ),
+					getInteger( queryName, "org.hibernate.fetchSize", hints ),
+					getFlushMode( queryName, hints ),
+					getCacheMode( queryName, hints ),
+					getBoolean( queryName, "org.hibernate.readOnly", hints ),
+					getString( queryName, "org.hibernate.comment", hints ),
+					null,
+					getBoolean( queryName, "org.hibernate.callable", hints )
+			);
+		}
+		else {
+			throw new NotYetImplementedException( "Pure native scalar queries are not yet supported" );
+		}
+		if (isDefault) {
+			mappings.addDefaultSQLQuery( queryAnn.name(), query );
+		}
+		else {
+			mappings.addSQLQuery( queryAnn.name(), query );
+		}
+		if ( log.isInfoEnabled() ) {
+			log.info( "Binding named native query: " + queryAnn.name() + " => " + queryAnn.query() );
+		}
+	}
+
+	public static void bindNativeQuery(org.hibernate.annotations.NamedNativeQuery queryAnn, ExtendedMappings mappings) {
+		if ( queryAnn == null ) return;
+		//ResultSetMappingDefinition mappingDefinition = mappings.getResultSetMapping( queryAnn.resultSetMapping() );
+		if ( BinderHelper.isDefault( queryAnn.name() ) ) {
+			throw new AnnotationException( "A named query must have a name when used in class or package level" );
+		}
+		NamedSQLQueryDefinition query;
+		String resultSetMapping = queryAnn.resultSetMapping();
+		if ( ! BinderHelper.isDefault( resultSetMapping ) ) {
+			//sql result set usage
+			query = new NamedSQLQueryDefinition(
+					queryAnn.query(),
+					resultSetMapping,
+					null,
+					queryAnn.cacheable(),
+					BinderHelper.isDefault( queryAnn.cacheRegion() ) ? null : queryAnn.cacheRegion(),
+					queryAnn.timeout() < 0 ? null : queryAnn.timeout(),
+					queryAnn.fetchSize() < 0 ? null : queryAnn.fetchSize(),
+					getFlushMode( queryAnn.flushMode() ),
+					getCacheMode( queryAnn.cacheMode() ),
+					queryAnn.readOnly(),
+					BinderHelper.isDefault( queryAnn.comment() ) ? null : queryAnn.comment(),
+					null,
+					queryAnn.callable()
+			);
+		}
+		else if ( ! void.class.equals( queryAnn.resultClass() ) ) {
+			//class mapping usage
+			//FIXME should be done in a second pass due to entity name?
+			final NativeSQLQueryRootReturn entityQueryReturn =
+					new NativeSQLQueryRootReturn( "alias1", queryAnn.resultClass().getName(), new HashMap(), LockMode.READ );
+			query = new NamedSQLQueryDefinition(
+					queryAnn.query(),
+					new NativeSQLQueryReturn[]{entityQueryReturn},
+					null,
+					queryAnn.cacheable(),
+					BinderHelper.isDefault( queryAnn.cacheRegion() ) ? null : queryAnn.cacheRegion(),
+					queryAnn.timeout() < 0 ? null : queryAnn.timeout(),
+					queryAnn.fetchSize() < 0 ? null : queryAnn.fetchSize(),
+					getFlushMode( queryAnn.flushMode() ),
+					getCacheMode( queryAnn.cacheMode() ),
+					queryAnn.readOnly(),
+					BinderHelper.isDefault( queryAnn.comment() ) ? null : queryAnn.comment(),
+					null,
+					queryAnn.callable()
+			);
+		}
+		else {
+			throw new NotYetImplementedException( "Pure native scalar queries are not yet supported" );
+		}
+		mappings.addSQLQuery( queryAnn.name(), query );
+		if ( log.isInfoEnabled() ) {
+			log.info( "Binding named native query: " + queryAnn.name() + " => " + queryAnn.query() );
+		}
+	}
+
+	public static void bindQueries(NamedQueries queriesAnn, ExtendedMappings mappings, boolean isDefault) {
+		if ( queriesAnn == null ) return;
+		for ( NamedQuery q : queriesAnn.value() ) {
+			bindQuery( q, mappings, isDefault );
+		}
+	}
+
+	public static void bindNativeQueries(NamedNativeQueries queriesAnn, ExtendedMappings mappings, boolean isDefault) {
+		if ( queriesAnn == null ) return;
+		for ( NamedNativeQuery q : queriesAnn.value() ) {
+			bindNativeQuery( q, mappings, isDefault );
+		}
+	}
+
+	public static void bindNativeQueries(
+			org.hibernate.annotations.NamedNativeQueries queriesAnn, ExtendedMappings mappings
+	) {
+		if ( queriesAnn == null ) return;
+		for ( org.hibernate.annotations.NamedNativeQuery q : queriesAnn.value() ) {
+			bindNativeQuery( q, mappings );
+		}
+	}
+
+	public static void bindQuery(org.hibernate.annotations.NamedQuery queryAnn, ExtendedMappings mappings) {
+		if ( queryAnn == null ) return;
+		if ( BinderHelper.isDefault( queryAnn.name() ) ) {
+			throw new AnnotationException( "A named query must have a name when used in class or package level" );
+		}
+
+		FlushMode flushMode;
+		flushMode = getFlushMode( queryAnn.flushMode() );
+
+		NamedQueryDefinition query = new NamedQueryDefinition(
+				queryAnn.query(),
+				queryAnn.cacheable(),
+				BinderHelper.isDefault( queryAnn.cacheRegion() ) ? null : queryAnn.cacheRegion(),
+				queryAnn.timeout() < 0 ? null : queryAnn.timeout(),
+				queryAnn.fetchSize() < 0 ? null : queryAnn.fetchSize(),
+				flushMode,
+				getCacheMode( queryAnn.cacheMode() ),
+				queryAnn.readOnly(),
+				BinderHelper.isDefault( queryAnn.comment() ) ? null : queryAnn.comment(),
+				null
+		);
+
+		mappings.addQuery( queryAnn.name(), query );
+		if ( log.isInfoEnabled() ) log.info( "Binding named query: " + queryAnn.name() + " => " + queryAnn.query() );
+	}
+
+	private static FlushMode getFlushMode(FlushModeType flushModeType) {
+		FlushMode flushMode;
+		switch ( flushModeType ) {
+			case ALWAYS:
+				flushMode = FlushMode.ALWAYS;
+				break;
+			case AUTO:
+				flushMode = FlushMode.AUTO;
+				break;
+			case COMMIT:
+				flushMode = FlushMode.COMMIT;
+				break;
+			case NEVER:
+				flushMode = FlushMode.MANUAL;
+				break;
+			case MANUAL:
+				flushMode = FlushMode.MANUAL;
+				break;
+			default:
+				throw new AssertionFailure( "Unknown flushModeType: " + flushModeType );
+		}
+		return flushMode;
+	}
+
+	private static CacheMode getCacheMode(CacheModeType cacheModeType) {
+		switch ( cacheModeType ) {
+			case GET:
+				return CacheMode.GET;
+			case IGNORE:
+				return CacheMode.IGNORE;
+			case NORMAL:
+				return CacheMode.NORMAL;
+			case PUT:
+				return CacheMode.PUT;
+			case REFRESH:
+				return CacheMode.REFRESH;
+			default:
+				throw new AssertionFailure( "Unknown cacheModeType: " + cacheModeType );
+		}
+	}
+
+
+	public static void bindQueries(org.hibernate.annotations.NamedQueries queriesAnn, ExtendedMappings mappings) {
+		if ( queriesAnn == null ) return;
+		for ( org.hibernate.annotations.NamedQuery q : queriesAnn.value() ) {
+			bindQuery( q, mappings );
+		}
+	}
+
+	public static void bindSqlResultsetMappings(SqlResultSetMappings ann, ExtendedMappings mappings, boolean isDefault) {
+		if ( ann == null ) return;
+		for ( SqlResultSetMapping rs : ann.value() ) {
+			//no need to handle inSecondPass
+			mappings.addSecondPass( new ResultsetMappingSecondPass( rs, mappings, true ) );
+		}
+	}
+
+	public static void bindSqlResultsetMapping(SqlResultSetMapping ann, ExtendedMappings mappings, boolean isDefault) {
+		//no need to handle inSecondPass
+		mappings.addSecondPass( new ResultsetMappingSecondPass( ann, mappings, isDefault ) );
+	}
+
+	private static CacheMode getCacheMode(String query, QueryHint[] hints) {
+		for ( QueryHint hint : hints ) {
+			if ( "org.hibernate.cacheMode".equals( hint.name() ) ) {
+				if ( hint.value().equalsIgnoreCase( CacheMode.GET.toString() ) ) {
+					return CacheMode.GET;
+				}
+				else if ( hint.value().equalsIgnoreCase( CacheMode.IGNORE.toString() ) ) {
+					return CacheMode.IGNORE;
+				}
+				else if ( hint.value().equalsIgnoreCase( CacheMode.NORMAL.toString() ) ) {
+					return CacheMode.NORMAL;
+				}
+				else if ( hint.value().equalsIgnoreCase( CacheMode.PUT.toString() ) ) {
+					return CacheMode.PUT;
+				}
+				else if ( hint.value().equalsIgnoreCase( CacheMode.REFRESH.toString() ) ) {
+					return CacheMode.REFRESH;
+				}
+				else {
+					throw new AnnotationException( "Unknown CacheMode in hint: " + query + ":" + hint.name() );
+				}
+			}
+		}
+		return null;
+	}
+
+	private static FlushMode getFlushMode(String query, QueryHint[] hints) {
+		for ( QueryHint hint : hints ) {
+			if ( "org.hibernate.flushMode".equals( hint.name() ) ) {
+				if ( hint.value().equalsIgnoreCase( FlushMode.ALWAYS.toString() ) ) {
+					return FlushMode.ALWAYS;
+				}
+				else if ( hint.value().equalsIgnoreCase( FlushMode.AUTO.toString() ) ) {
+					return FlushMode.AUTO;
+				}
+				else if ( hint.value().equalsIgnoreCase( FlushMode.COMMIT.toString() ) ) {
+					return FlushMode.COMMIT;
+				}
+				else if ( hint.value().equalsIgnoreCase( FlushMode.NEVER.toString() ) ) {
+					return FlushMode.MANUAL;
+				}
+				else if ( hint.value().equalsIgnoreCase( FlushMode.MANUAL.toString() ) ) {
+					return FlushMode.MANUAL;
+				}
+				else {
+					throw new AnnotationException( "Unknown FlushMode in hint: " + query + ":" + hint.name() );
+				}
+			}
+		}
+		return null;
+	}
+
+	private static boolean getBoolean(String query, String hintName, QueryHint[] hints) {
+		for ( QueryHint hint : hints ) {
+			if ( hintName.equals( hint.name() ) ) {
+				if ( hint.value().equalsIgnoreCase( "true" ) ) {
+					return true;
+				}
+				else if ( hint.value().equalsIgnoreCase( "false" ) ) {
+					return false;
+				}
+				else {
+					throw new AnnotationException( "Not a boolean in hint: " + query + ":" + hint.name() );
+				}
+			}
+		}
+		return false;
+	}
+
+	private static String getString(String query, String hintName, QueryHint[] hints) {
+		for ( QueryHint hint : hints ) {
+			if ( hintName.equals( hint.name() ) ) {
+				return hint.value();
+			}
+		}
+		return null;
+	}
+
+	private static Integer getInteger(String query, String hintName, QueryHint[] hints) {
+		for ( QueryHint hint : hints ) {
+			if ( hintName.equals( hint.name() ) ) {
+				try {
+					return Integer.decode( hint.value() );
+				}
+				catch (NumberFormatException nfe) {
+					throw new AnnotationException( "Not an integer in hint: " + query + ":" + hint.name(), nfe );
+				}
+			}
+		}
+		return null;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/ResultsetMappingSecondPass.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/ResultsetMappingSecondPass.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/ResultsetMappingSecondPass.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,231 +0,0 @@
-//$Id$
-package org.hibernate.cfg.annotations;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import javax.persistence.ColumnResult;
-import javax.persistence.EntityResult;
-import javax.persistence.FieldResult;
-import javax.persistence.SqlResultSetMapping;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.hibernate.LockMode;
-import org.hibernate.MappingException;
-import org.hibernate.cfg.BinderHelper;
-import org.hibernate.cfg.ExtendedMappings;
-import org.hibernate.cfg.QuerySecondPass;
-import org.hibernate.engine.ResultSetMappingDefinition;
-import org.hibernate.engine.query.sql.NativeSQLQueryRootReturn;
-import org.hibernate.engine.query.sql.NativeSQLQueryScalarReturn;
-import org.hibernate.mapping.Component;
-import org.hibernate.mapping.PersistentClass;
-import org.hibernate.mapping.Property;
-import org.hibernate.mapping.ToOne;
-import org.hibernate.mapping.Value;
-import org.hibernate.util.CollectionHelper;
-import org.hibernate.util.StringHelper;
-
-/**
- * @author Emmanuel Bernard
- */
-public class ResultsetMappingSecondPass implements QuerySecondPass {
-	private static Log log = LogFactory.getLog( ResultsetMappingSecondPass.class );
-	private SqlResultSetMapping ann;
-	private ExtendedMappings mappings;
-	private boolean isDefault;
-
-	public ResultsetMappingSecondPass(SqlResultSetMapping ann, ExtendedMappings mappings, boolean isDefault) {
-		this.ann = ann;
-		this.mappings = mappings;
-		this.isDefault = isDefault;
-	}
-
-	public void doSecondPass(Map persistentClasses) throws MappingException {
-		//TODO add parameters checkings
-		if ( ann == null ) return;
-		ResultSetMappingDefinition definition = new ResultSetMappingDefinition( ann.name() );
-		if ( log.isInfoEnabled() ) log.info( "Binding resultset mapping: " + definition.getName() );
-
-		int entityAliasIndex = 0;
-
-		for ( EntityResult entity : ann.entities() ) {
-			//TODO parameterize lock mode?
-			List properties = new ArrayList();
-			List propertyNames = new ArrayList();
-			Map propertyresults = new HashMap();
-			for ( FieldResult field : entity.fields() ) {
-				//use an ArrayList cause we might have several columns per root property
-				String name = field.name();
-				if ( name.indexOf( '.' ) == -1 ) {
-					//regular property
-					properties.add( field );
-					propertyNames.add( name );
-				}
-				else {
-					/**
-					 * Reorder properties
-					 * 1. get the parent property
-					 * 2. list all the properties following the expected one in the parent property
-					 * 3. calculate the lowest index and insert the property
-					 */
-					PersistentClass pc = mappings.getClass( entity.entityClass().getName() );
-					if ( pc == null ) {
-						throw new MappingException(
-								"Entity not found " + entity.entityClass().getName()
-										+ " in SqlResultsetMapping " + ann.name()
-						);
-					}
-					int dotIndex = name.lastIndexOf( '.' );
-					String reducedName = name.substring( 0, dotIndex );
-					Iterator parentPropIter = getSubPropertyIterator( pc, reducedName );
-					List followers = getFollowers( parentPropIter, reducedName, name );
-
-					int index = propertyNames.size();
-					int followersSize = followers.size();
-					for ( int loop = 0; loop < followersSize ; loop++ ) {
-						String follower = (String) followers.get( loop );
-						int currentIndex = getIndexOfFirstMatchingProperty( propertyNames, follower );
-						index = currentIndex != -1 && currentIndex < index ? currentIndex : index;
-					}
-					propertyNames.add( index, name );
-					properties.add( index, field );
-				}
-			}
-
-			Set uniqueReturnProperty = new HashSet();
-			Iterator iterator = properties.iterator();
-			while ( iterator.hasNext() ) {
-				FieldResult propertyresult = (FieldResult) iterator.next();
-				String name = propertyresult.name();
-				if ( "class".equals( name ) ) {
-					throw new MappingException(
-							"class is not a valid property name to use in a @FieldResult, use @Entity(discriminatorColumn) instead"
-					);
-				}
-				ArrayList allResultColumns = new ArrayList();
-				allResultColumns.add( propertyresult.column() );
-
-				if ( uniqueReturnProperty.contains( name ) ) {
-					throw new MappingException(
-							"duplicate @FieldResult for property " + name +
-									" on @Entity " + entity.entityClass().getName() + " in " + ann.name()
-					);
-				}
-				uniqueReturnProperty.add( name );
-				String key = StringHelper.root( name );
-				ArrayList intermediateResults = (ArrayList) propertyresults.get( key );
-				if ( intermediateResults == null ) {
-					propertyresults.put( key, allResultColumns );
-				}
-				else {
-					intermediateResults.addAll( allResultColumns );
-				}
-			}
-			Iterator entries = propertyresults.entrySet().iterator();
-			while ( entries.hasNext() ) {
-				Map.Entry entry = (Map.Entry) entries.next();
-				if ( entry.getValue() instanceof ArrayList ) {
-					ArrayList list = (ArrayList) entry.getValue();
-					entry.setValue( list.toArray( new String[ list.size() ] ) );
-				}
-			}
-
-			if ( ! BinderHelper.isDefault( entity.discriminatorColumn() ) ) {
-				propertyresults.put( "class", new String[]{entity.discriminatorColumn()} );
-			}
-
-			propertyresults = propertyresults.isEmpty() ? CollectionHelper.EMPTY_MAP : propertyresults;
-			NativeSQLQueryRootReturn result =
-					new NativeSQLQueryRootReturn(
-							"alias" + entityAliasIndex++, entity.entityClass().getName(), propertyresults, LockMode.READ
-					);
-			definition.addQueryReturn( result );
-		}
-
-		for ( ColumnResult column : ann.columns() ) {
-			definition.addQueryReturn( new NativeSQLQueryScalarReturn( column.name(), null ) );
-		}
-
-		if (isDefault) {
-			mappings.addDefaultResultSetMapping( definition );
-		}
-		else {
-			mappings.addResultSetMapping( definition );
-		}
-	}
-
-	private List getFollowers(Iterator parentPropIter, String reducedName, String name) {
-		boolean hasFollowers = false;
-		List followers = new ArrayList();
-		while ( parentPropIter.hasNext() ) {
-			String currentPropertyName = ( (Property) parentPropIter.next() ).getName();
-			String currentName = reducedName + '.' + currentPropertyName;
-			if ( hasFollowers ) {
-				followers.add( currentName );
-			}
-			if ( name.equals( currentName ) ) hasFollowers = true;
-		}
-		return followers;
-	}
-
-	private Iterator getSubPropertyIterator(PersistentClass pc, String reducedName) {
-		Value value = pc.getRecursiveProperty( reducedName ).getValue();
-		Iterator parentPropIter;
-		if ( value instanceof Component ) {
-			Component comp = (Component) value;
-			parentPropIter = comp.getPropertyIterator();
-		}
-		else if ( value instanceof ToOne ) {
-			ToOne toOne = (ToOne) value;
-			PersistentClass referencedPc = mappings.getClass( toOne.getReferencedEntityName() );
-			if ( toOne.getReferencedPropertyName() != null ) {
-				try {
-					parentPropIter = ( (Component) referencedPc.getRecursiveProperty(
-							toOne.getReferencedPropertyName()
-					).getValue() ).getPropertyIterator();
-				}
-				catch (ClassCastException e) {
-					throw new MappingException(
-							"dotted notation reference neither a component nor a many/one to one", e
-					);
-				}
-			}
-			else {
-				try {
-					if ( referencedPc.getIdentifierMapper() == null ) {
-						parentPropIter = ( (Component) referencedPc.getIdentifierProperty()
-								.getValue() ).getPropertyIterator();
-					}
-					else {
-						parentPropIter = referencedPc.getIdentifierMapper().getPropertyIterator();
-					}
-				}
-				catch (ClassCastException e) {
-					throw new MappingException(
-							"dotted notation reference neither a component nor a many/one to one", e
-					);
-				}
-			}
-		}
-		else {
-			throw new MappingException( "dotted notation reference neither a component nor a many/one to one" );
-		}
-		return parentPropIter;
-	}
-
-	private static int getIndexOfFirstMatchingProperty(List propertyNames, String follower) {
-		int propertySize = propertyNames.size();
-		for ( int propIndex = 0; propIndex < propertySize ; propIndex++ ) {
-			if ( ( (String) propertyNames.get( propIndex ) ).startsWith( follower ) ) {
-				return propIndex;
-			}
-		}
-		return -1;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/ResultsetMappingSecondPass.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/ResultsetMappingSecondPass.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/ResultsetMappingSecondPass.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/ResultsetMappingSecondPass.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,231 @@
+//$Id$
+package org.hibernate.cfg.annotations;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import javax.persistence.ColumnResult;
+import javax.persistence.EntityResult;
+import javax.persistence.FieldResult;
+import javax.persistence.SqlResultSetMapping;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.hibernate.LockMode;
+import org.hibernate.MappingException;
+import org.hibernate.cfg.BinderHelper;
+import org.hibernate.cfg.ExtendedMappings;
+import org.hibernate.cfg.QuerySecondPass;
+import org.hibernate.engine.ResultSetMappingDefinition;
+import org.hibernate.engine.query.sql.NativeSQLQueryRootReturn;
+import org.hibernate.engine.query.sql.NativeSQLQueryScalarReturn;
+import org.hibernate.mapping.Component;
+import org.hibernate.mapping.PersistentClass;
+import org.hibernate.mapping.Property;
+import org.hibernate.mapping.ToOne;
+import org.hibernate.mapping.Value;
+import org.hibernate.util.CollectionHelper;
+import org.hibernate.util.StringHelper;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class ResultsetMappingSecondPass implements QuerySecondPass {
+	private static Log log = LogFactory.getLog( ResultsetMappingSecondPass.class );
+	private SqlResultSetMapping ann;
+	private ExtendedMappings mappings;
+	private boolean isDefault;
+
+	public ResultsetMappingSecondPass(SqlResultSetMapping ann, ExtendedMappings mappings, boolean isDefault) {
+		this.ann = ann;
+		this.mappings = mappings;
+		this.isDefault = isDefault;
+	}
+
+	public void doSecondPass(Map persistentClasses) throws MappingException {
+		//TODO add parameters checkings
+		if ( ann == null ) return;
+		ResultSetMappingDefinition definition = new ResultSetMappingDefinition( ann.name() );
+		if ( log.isInfoEnabled() ) log.info( "Binding resultset mapping: " + definition.getName() );
+
+		int entityAliasIndex = 0;
+
+		for ( EntityResult entity : ann.entities() ) {
+			//TODO parameterize lock mode?
+			List properties = new ArrayList();
+			List propertyNames = new ArrayList();
+			Map propertyresults = new HashMap();
+			for ( FieldResult field : entity.fields() ) {
+				//use an ArrayList cause we might have several columns per root property
+				String name = field.name();
+				if ( name.indexOf( '.' ) == -1 ) {
+					//regular property
+					properties.add( field );
+					propertyNames.add( name );
+				}
+				else {
+					/**
+					 * Reorder properties
+					 * 1. get the parent property
+					 * 2. list all the properties following the expected one in the parent property
+					 * 3. calculate the lowest index and insert the property
+					 */
+					PersistentClass pc = mappings.getClass( entity.entityClass().getName() );
+					if ( pc == null ) {
+						throw new MappingException(
+								"Entity not found " + entity.entityClass().getName()
+										+ " in SqlResultsetMapping " + ann.name()
+						);
+					}
+					int dotIndex = name.lastIndexOf( '.' );
+					String reducedName = name.substring( 0, dotIndex );
+					Iterator parentPropIter = getSubPropertyIterator( pc, reducedName );
+					List followers = getFollowers( parentPropIter, reducedName, name );
+
+					int index = propertyNames.size();
+					int followersSize = followers.size();
+					for ( int loop = 0; loop < followersSize ; loop++ ) {
+						String follower = (String) followers.get( loop );
+						int currentIndex = getIndexOfFirstMatchingProperty( propertyNames, follower );
+						index = currentIndex != -1 && currentIndex < index ? currentIndex : index;
+					}
+					propertyNames.add( index, name );
+					properties.add( index, field );
+				}
+			}
+
+			Set uniqueReturnProperty = new HashSet();
+			Iterator iterator = properties.iterator();
+			while ( iterator.hasNext() ) {
+				FieldResult propertyresult = (FieldResult) iterator.next();
+				String name = propertyresult.name();
+				if ( "class".equals( name ) ) {
+					throw new MappingException(
+							"class is not a valid property name to use in a @FieldResult, use @Entity(discriminatorColumn) instead"
+					);
+				}
+				ArrayList allResultColumns = new ArrayList();
+				allResultColumns.add( propertyresult.column() );
+
+				if ( uniqueReturnProperty.contains( name ) ) {
+					throw new MappingException(
+							"duplicate @FieldResult for property " + name +
+									" on @Entity " + entity.entityClass().getName() + " in " + ann.name()
+					);
+				}
+				uniqueReturnProperty.add( name );
+				String key = StringHelper.root( name );
+				ArrayList intermediateResults = (ArrayList) propertyresults.get( key );
+				if ( intermediateResults == null ) {
+					propertyresults.put( key, allResultColumns );
+				}
+				else {
+					intermediateResults.addAll( allResultColumns );
+				}
+			}
+			Iterator entries = propertyresults.entrySet().iterator();
+			while ( entries.hasNext() ) {
+				Map.Entry entry = (Map.Entry) entries.next();
+				if ( entry.getValue() instanceof ArrayList ) {
+					ArrayList list = (ArrayList) entry.getValue();
+					entry.setValue( list.toArray( new String[ list.size() ] ) );
+				}
+			}
+
+			if ( ! BinderHelper.isDefault( entity.discriminatorColumn() ) ) {
+				propertyresults.put( "class", new String[]{entity.discriminatorColumn()} );
+			}
+
+			propertyresults = propertyresults.isEmpty() ? CollectionHelper.EMPTY_MAP : propertyresults;
+			NativeSQLQueryRootReturn result =
+					new NativeSQLQueryRootReturn(
+							"alias" + entityAliasIndex++, entity.entityClass().getName(), propertyresults, LockMode.READ
+					);
+			definition.addQueryReturn( result );
+		}
+
+		for ( ColumnResult column : ann.columns() ) {
+			definition.addQueryReturn( new NativeSQLQueryScalarReturn( column.name(), null ) );
+		}
+
+		if (isDefault) {
+			mappings.addDefaultResultSetMapping( definition );
+		}
+		else {
+			mappings.addResultSetMapping( definition );
+		}
+	}
+
+	private List getFollowers(Iterator parentPropIter, String reducedName, String name) {
+		boolean hasFollowers = false;
+		List followers = new ArrayList();
+		while ( parentPropIter.hasNext() ) {
+			String currentPropertyName = ( (Property) parentPropIter.next() ).getName();
+			String currentName = reducedName + '.' + currentPropertyName;
+			if ( hasFollowers ) {
+				followers.add( currentName );
+			}
+			if ( name.equals( currentName ) ) hasFollowers = true;
+		}
+		return followers;
+	}
+
+	private Iterator getSubPropertyIterator(PersistentClass pc, String reducedName) {
+		Value value = pc.getRecursiveProperty( reducedName ).getValue();
+		Iterator parentPropIter;
+		if ( value instanceof Component ) {
+			Component comp = (Component) value;
+			parentPropIter = comp.getPropertyIterator();
+		}
+		else if ( value instanceof ToOne ) {
+			ToOne toOne = (ToOne) value;
+			PersistentClass referencedPc = mappings.getClass( toOne.getReferencedEntityName() );
+			if ( toOne.getReferencedPropertyName() != null ) {
+				try {
+					parentPropIter = ( (Component) referencedPc.getRecursiveProperty(
+							toOne.getReferencedPropertyName()
+					).getValue() ).getPropertyIterator();
+				}
+				catch (ClassCastException e) {
+					throw new MappingException(
+							"dotted notation reference neither a component nor a many/one to one", e
+					);
+				}
+			}
+			else {
+				try {
+					if ( referencedPc.getIdentifierMapper() == null ) {
+						parentPropIter = ( (Component) referencedPc.getIdentifierProperty()
+								.getValue() ).getPropertyIterator();
+					}
+					else {
+						parentPropIter = referencedPc.getIdentifierMapper().getPropertyIterator();
+					}
+				}
+				catch (ClassCastException e) {
+					throw new MappingException(
+							"dotted notation reference neither a component nor a many/one to one", e
+					);
+				}
+			}
+		}
+		else {
+			throw new MappingException( "dotted notation reference neither a component nor a many/one to one" );
+		}
+		return parentPropIter;
+	}
+
+	private static int getIndexOfFirstMatchingProperty(List propertyNames, String follower) {
+		int propertySize = propertyNames.size();
+		for ( int propIndex = 0; propIndex < propertySize ; propIndex++ ) {
+			if ( ( (String) propertyNames.get( propIndex ) ).startsWith( follower ) ) {
+				return propIndex;
+			}
+		}
+		return -1;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/SetBinder.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/SetBinder.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/SetBinder.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,39 +0,0 @@
-package org.hibernate.cfg.annotations;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.hibernate.annotations.OrderBy;
-import org.hibernate.cfg.Environment;
-import org.hibernate.mapping.Collection;
-import org.hibernate.mapping.PersistentClass;
-
-/**
- * Bind a set.
- *
- * @author Matthew Inger
- */
-public class SetBinder extends CollectionBinder {
-	private static Log log = LogFactory.getLog( SetBinder.class );
-
-	public SetBinder() {
-	}
-
-	public SetBinder(boolean sorted) {
-		super( sorted );
-	}
-
-	protected Collection createCollection(PersistentClass persistentClass) {
-		return new org.hibernate.mapping.Set( persistentClass );
-	}
-
-	public void setSqlOrderBy(OrderBy orderByAnn) {
-		if ( orderByAnn != null ) {
-			if ( Environment.jvmSupportsLinkedHashCollections() ) {
-				super.setSqlOrderBy( orderByAnn );
-			}
-			else {
-				log.warn( "Attribute \"order-by\" ignored in JDK1.3 or less" );
-			}
-		}
-	}
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/SetBinder.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/SetBinder.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/SetBinder.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/SetBinder.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,39 @@
+package org.hibernate.cfg.annotations;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.hibernate.annotations.OrderBy;
+import org.hibernate.cfg.Environment;
+import org.hibernate.mapping.Collection;
+import org.hibernate.mapping.PersistentClass;
+
+/**
+ * Bind a set.
+ *
+ * @author Matthew Inger
+ */
+public class SetBinder extends CollectionBinder {
+	private static Log log = LogFactory.getLog( SetBinder.class );
+
+	public SetBinder() {
+	}
+
+	public SetBinder(boolean sorted) {
+		super( sorted );
+	}
+
+	protected Collection createCollection(PersistentClass persistentClass) {
+		return new org.hibernate.mapping.Set( persistentClass );
+	}
+
+	public void setSqlOrderBy(OrderBy orderByAnn) {
+		if ( orderByAnn != null ) {
+			if ( Environment.jvmSupportsLinkedHashCollections() ) {
+				super.setSqlOrderBy( orderByAnn );
+			}
+			else {
+				log.warn( "Attribute \"order-by\" ignored in JDK1.3 or less" );
+			}
+		}
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/SimpleValueBinder.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/SimpleValueBinder.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/SimpleValueBinder.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,248 +0,0 @@
-//$Id$
-package org.hibernate.cfg.annotations;
-
-import java.io.Serializable;
-import java.sql.Types;
-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.AnnotationException;
-import org.hibernate.AssertionFailure;
-import org.hibernate.annotations.Parameter;
-import org.hibernate.annotations.Type;
-import org.hibernate.cfg.BinderHelper;
-import org.hibernate.cfg.Ejb3Column;
-import org.hibernate.cfg.ExtendedMappings;
-import org.hibernate.cfg.NotYetImplementedException;
-import org.hibernate.mapping.SimpleValue;
-import org.hibernate.mapping.Table;
-import org.hibernate.annotations.common.reflection.XClass;
-import org.hibernate.annotations.common.reflection.XProperty;
-import org.hibernate.type.ByteArrayBlobType;
-import org.hibernate.type.CharacterArrayClobType;
-import org.hibernate.type.EnumType;
-import org.hibernate.type.PrimitiveByteArrayBlobType;
-import org.hibernate.type.PrimitiveCharacterArrayClobType;
-import org.hibernate.type.SerializableToBlobType;
-import org.hibernate.type.StringClobType;
-import org.hibernate.util.StringHelper;
-
-/**
- * @author Emmanuel Bernard
- */
-public class SimpleValueBinder {
-	private static Log log = LogFactory.getLog( SimpleValueBinder.class );
-	private String propertyName;
-	private String returnedClassName;
-	private Ejb3Column[] columns;
-	private String persistentClassName;
-	private String explicitType = "";
-	private Properties typeParameters = new Properties();
-	private ExtendedMappings mappings;
-	private Table table;
-
-	public void setPropertyName(String propertyName) {
-		this.propertyName = propertyName;
-	}
-
-	public void setReturnedClassName(String returnedClassName) {
-		this.returnedClassName = returnedClassName;
-	}
-
-	public void setTable(Table table) {
-		this.table = table;
-	}
-
-	public void setColumns(Ejb3Column[] columns) {
-		this.columns = columns;
-	}
-
-
-	public void setPersistentClassName(String persistentClassName) {
-		this.persistentClassName = persistentClassName;
-	}
-
-	//TODO execute it lazily to be order safe
-	public void setType(XProperty property, XClass returnedClass) {
-		if ( returnedClass == null ) return; //we cannot guess anything
-		XClass returnedClassOrElement = returnedClass;
-		boolean isArray = false;
-		if ( property.isArray() ) {
-			returnedClassOrElement = property.getElementClass();
-			isArray = true;
-		}
-		Properties typeParameters = this.typeParameters;
-		typeParameters.clear();
-		String type = BinderHelper.ANNOTATION_STRING_DEFAULT;
-		if ( property.isAnnotationPresent( Temporal.class ) ) {
-			Temporal ann = property.getAnnotation( Temporal.class );
-			boolean isDate;
-			if ( mappings.getReflectionManager().equals( returnedClassOrElement, Date.class ) ) {
-				isDate = true;
-			}
-			else if ( mappings.getReflectionManager().equals( returnedClassOrElement, Calendar.class ) ) {
-				isDate = false;
-			}
-			else {
-				throw new AnnotationException(
-						"@Temporal should be set on a java.util.Date or java.util.Calendar property: "
-								+ StringHelper.qualify( persistentClassName, propertyName )
-				);
-			}
-
-			switch ( ann.value() ) {
-				case DATE:
-					type = isDate ? "date" : "calendar_date";
-					break;
-				case TIME:
-					type = "time";
-					if ( ! isDate ) {
-						throw new NotYetImplementedException(
-								"Calendar cannot persist TIME only"
-										+ StringHelper.qualify( persistentClassName, propertyName )
-						);
-					}
-					break;
-				case TIMESTAMP:
-					type = isDate ? "timestamp" : "calendar";
-					break;
-				default:
-					throw new AssertionFailure( "Unknown temporal type: " + ann.value() );
-			}
-		}
-		else if ( property.isAnnotationPresent( Lob.class ) ) {
-
-			if ( mappings.getReflectionManager().equals( returnedClassOrElement, java.sql.Clob.class ) ) {
-				type = "clob";
-			}
-			else if ( mappings.getReflectionManager().equals( returnedClassOrElement, java.sql.Blob.class ) ) {
-				type = "blob";
-			}
-			else if ( mappings.getReflectionManager().equals( returnedClassOrElement, String.class ) ) {
-				type = StringClobType.class.getName();
-			}
-			else if ( mappings.getReflectionManager().equals( returnedClassOrElement, Character.class ) && isArray ) {
-				type = CharacterArrayClobType.class.getName();
-			}
-			else if ( mappings.getReflectionManager().equals( returnedClassOrElement, char.class ) && isArray ) {
-				type = PrimitiveCharacterArrayClobType.class.getName();
-			}
-			else if ( mappings.getReflectionManager().equals( returnedClassOrElement, Byte.class ) && isArray ) {
-				type = ByteArrayBlobType.class.getName();
-			}
-			else if ( mappings.getReflectionManager().equals( returnedClassOrElement, byte.class ) && isArray ) {
-				type = PrimitiveByteArrayBlobType.class.getName();
-			}
-			else if ( mappings.getReflectionManager()
-					.toXClass( Serializable.class )
-					.isAssignableFrom( returnedClassOrElement ) ) {
-				type = SerializableToBlobType.class.getName();
-				//typeParameters = new Properties();
-				typeParameters.setProperty(
-						SerializableToBlobType.CLASS_NAME,
-						returnedClassOrElement.getName()
-				);
-			}
-			else {
-				type = "blob";
-			}
-		}
-		//implicit type will check basic types and Serializable classes
-		if ( columns == null ) {
-			throw new AssertionFailure( "SimpleValueBinder.setColumns should be set before SimpleValueBinder.setType" );
-		}
-		if ( BinderHelper.ANNOTATION_STRING_DEFAULT.equals( type ) ) {
-			if ( returnedClassOrElement.isEnum() ) {
-				type = EnumType.class.getName();
-				typeParameters = new Properties();
-				typeParameters.setProperty( EnumType.ENUM, returnedClassOrElement.getName() );
-				String schema = columns[0].getTable().getSchema();
-				schema = schema == null ? "" : schema;
-				String catalog = columns[0].getTable().getCatalog();
-				catalog = catalog == null ? "" : catalog;
-				typeParameters.setProperty( EnumType.SCHEMA, schema );
-				typeParameters.setProperty( EnumType.CATALOG, catalog );
-				typeParameters.setProperty( EnumType.TABLE, columns[0].getTable().getName() );
-				typeParameters.setProperty( EnumType.COLUMN, columns[0].getName() );
-				Enumerated enumAnn = property.getAnnotation( Enumerated.class );
-				if ( enumAnn != null ) {
-					javax.persistence.EnumType enumType = enumAnn.value();
-					if ( javax.persistence.EnumType.ORDINAL.equals( enumType ) ) {
-						typeParameters.setProperty( EnumType.TYPE, String.valueOf( Types.INTEGER ) );
-					}
-					else if ( javax.persistence.EnumType.STRING.equals( enumType ) ) {
-						typeParameters.setProperty( EnumType.TYPE, String.valueOf( Types.VARCHAR ) );
-					}
-					else {
-						throw new AssertionFailure( "Unknown EnumType: " + enumType );
-					}
-				}
-			}
-		}
-		explicitType = type;
-		this.typeParameters = typeParameters;
-		Type annType = (Type) property.getAnnotation( Type.class );
-		setExplicitType( annType );
-	}
-
-	public void setExplicitType(String explicitType) {
-		this.explicitType = explicitType;
-	}
-
-	//FIXME raise an assertion failure  if setExplicitType(String) and setExplicitType(Type) are use at the same time
-	public void setExplicitType(Type typeAnn) {
-		if ( typeAnn != null ) {
-			explicitType = typeAnn.type();
-			typeParameters.clear();
-			for ( Parameter param : typeAnn.parameters() ) {
-				typeParameters.setProperty( param.name(), param.value() );
-			}
-		}
-	}
-
-	public void setMappings(ExtendedMappings mappings) {
-		this.mappings = mappings;
-	}
-
-	private void validate() {
-		//TODO check necessary params
-		Ejb3Column.checkPropertyConsistency( columns, propertyName );
-	}
-
-	public SimpleValue make() {
-		validate();
-		log.debug( "building SimpleValue for " + propertyName );
-		if (table == null) {
-			table = columns[0].getTable();
-		}
-		SimpleValue simpleValue = new SimpleValue( table );
-		return fillSimpleValue( simpleValue );
-	}
-
-	public SimpleValue fillSimpleValue(SimpleValue simpleValue) {
-		String type = BinderHelper.isDefault( explicitType ) ? returnedClassName : explicitType;
-		org.hibernate.mapping.TypeDef typeDef = mappings.getTypeDef( type );
-		if ( typeDef != null ) {
-			type = typeDef.getTypeClass();
-			simpleValue.setTypeParameters( typeDef.getParameters() );
-		}
-		if ( typeParameters != null && typeParameters.size() != 0 ) {
-			//explicit type params takes precedence over type def params
-			simpleValue.setTypeParameters( typeParameters );
-		}
-		simpleValue.setTypeName( type );
-		if ( persistentClassName != null ) {
-			simpleValue.setTypeUsingReflection( persistentClassName, propertyName );
-		}
-		for ( Ejb3Column column : columns ) {
-			column.linkWithValue( simpleValue );
-		}
-		return simpleValue;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/SimpleValueBinder.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/SimpleValueBinder.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/SimpleValueBinder.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/SimpleValueBinder.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,248 @@
+//$Id$
+package org.hibernate.cfg.annotations;
+
+import java.io.Serializable;
+import java.sql.Types;
+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.AnnotationException;
+import org.hibernate.AssertionFailure;
+import org.hibernate.annotations.Parameter;
+import org.hibernate.annotations.Type;
+import org.hibernate.cfg.BinderHelper;
+import org.hibernate.cfg.Ejb3Column;
+import org.hibernate.cfg.ExtendedMappings;
+import org.hibernate.cfg.NotYetImplementedException;
+import org.hibernate.mapping.SimpleValue;
+import org.hibernate.mapping.Table;
+import org.hibernate.annotations.common.reflection.XClass;
+import org.hibernate.annotations.common.reflection.XProperty;
+import org.hibernate.type.ByteArrayBlobType;
+import org.hibernate.type.CharacterArrayClobType;
+import org.hibernate.type.EnumType;
+import org.hibernate.type.PrimitiveByteArrayBlobType;
+import org.hibernate.type.PrimitiveCharacterArrayClobType;
+import org.hibernate.type.SerializableToBlobType;
+import org.hibernate.type.StringClobType;
+import org.hibernate.util.StringHelper;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class SimpleValueBinder {
+	private static Log log = LogFactory.getLog( SimpleValueBinder.class );
+	private String propertyName;
+	private String returnedClassName;
+	private Ejb3Column[] columns;
+	private String persistentClassName;
+	private String explicitType = "";
+	private Properties typeParameters = new Properties();
+	private ExtendedMappings mappings;
+	private Table table;
+
+	public void setPropertyName(String propertyName) {
+		this.propertyName = propertyName;
+	}
+
+	public void setReturnedClassName(String returnedClassName) {
+		this.returnedClassName = returnedClassName;
+	}
+
+	public void setTable(Table table) {
+		this.table = table;
+	}
+
+	public void setColumns(Ejb3Column[] columns) {
+		this.columns = columns;
+	}
+
+
+	public void setPersistentClassName(String persistentClassName) {
+		this.persistentClassName = persistentClassName;
+	}
+
+	//TODO execute it lazily to be order safe
+	public void setType(XProperty property, XClass returnedClass) {
+		if ( returnedClass == null ) return; //we cannot guess anything
+		XClass returnedClassOrElement = returnedClass;
+		boolean isArray = false;
+		if ( property.isArray() ) {
+			returnedClassOrElement = property.getElementClass();
+			isArray = true;
+		}
+		Properties typeParameters = this.typeParameters;
+		typeParameters.clear();
+		String type = BinderHelper.ANNOTATION_STRING_DEFAULT;
+		if ( property.isAnnotationPresent( Temporal.class ) ) {
+			Temporal ann = property.getAnnotation( Temporal.class );
+			boolean isDate;
+			if ( mappings.getReflectionManager().equals( returnedClassOrElement, Date.class ) ) {
+				isDate = true;
+			}
+			else if ( mappings.getReflectionManager().equals( returnedClassOrElement, Calendar.class ) ) {
+				isDate = false;
+			}
+			else {
+				throw new AnnotationException(
+						"@Temporal should be set on a java.util.Date or java.util.Calendar property: "
+								+ StringHelper.qualify( persistentClassName, propertyName )
+				);
+			}
+
+			switch ( ann.value() ) {
+				case DATE:
+					type = isDate ? "date" : "calendar_date";
+					break;
+				case TIME:
+					type = "time";
+					if ( ! isDate ) {
+						throw new NotYetImplementedException(
+								"Calendar cannot persist TIME only"
+										+ StringHelper.qualify( persistentClassName, propertyName )
+						);
+					}
+					break;
+				case TIMESTAMP:
+					type = isDate ? "timestamp" : "calendar";
+					break;
+				default:
+					throw new AssertionFailure( "Unknown temporal type: " + ann.value() );
+			}
+		}
+		else if ( property.isAnnotationPresent( Lob.class ) ) {
+
+			if ( mappings.getReflectionManager().equals( returnedClassOrElement, java.sql.Clob.class ) ) {
+				type = "clob";
+			}
+			else if ( mappings.getReflectionManager().equals( returnedClassOrElement, java.sql.Blob.class ) ) {
+				type = "blob";
+			}
+			else if ( mappings.getReflectionManager().equals( returnedClassOrElement, String.class ) ) {
+				type = StringClobType.class.getName();
+			}
+			else if ( mappings.getReflectionManager().equals( returnedClassOrElement, Character.class ) && isArray ) {
+				type = CharacterArrayClobType.class.getName();
+			}
+			else if ( mappings.getReflectionManager().equals( returnedClassOrElement, char.class ) && isArray ) {
+				type = PrimitiveCharacterArrayClobType.class.getName();
+			}
+			else if ( mappings.getReflectionManager().equals( returnedClassOrElement, Byte.class ) && isArray ) {
+				type = ByteArrayBlobType.class.getName();
+			}
+			else if ( mappings.getReflectionManager().equals( returnedClassOrElement, byte.class ) && isArray ) {
+				type = PrimitiveByteArrayBlobType.class.getName();
+			}
+			else if ( mappings.getReflectionManager()
+					.toXClass( Serializable.class )
+					.isAssignableFrom( returnedClassOrElement ) ) {
+				type = SerializableToBlobType.class.getName();
+				//typeParameters = new Properties();
+				typeParameters.setProperty(
+						SerializableToBlobType.CLASS_NAME,
+						returnedClassOrElement.getName()
+				);
+			}
+			else {
+				type = "blob";
+			}
+		}
+		//implicit type will check basic types and Serializable classes
+		if ( columns == null ) {
+			throw new AssertionFailure( "SimpleValueBinder.setColumns should be set before SimpleValueBinder.setType" );
+		}
+		if ( BinderHelper.ANNOTATION_STRING_DEFAULT.equals( type ) ) {
+			if ( returnedClassOrElement.isEnum() ) {
+				type = EnumType.class.getName();
+				typeParameters = new Properties();
+				typeParameters.setProperty( EnumType.ENUM, returnedClassOrElement.getName() );
+				String schema = columns[0].getTable().getSchema();
+				schema = schema == null ? "" : schema;
+				String catalog = columns[0].getTable().getCatalog();
+				catalog = catalog == null ? "" : catalog;
+				typeParameters.setProperty( EnumType.SCHEMA, schema );
+				typeParameters.setProperty( EnumType.CATALOG, catalog );
+				typeParameters.setProperty( EnumType.TABLE, columns[0].getTable().getName() );
+				typeParameters.setProperty( EnumType.COLUMN, columns[0].getName() );
+				Enumerated enumAnn = property.getAnnotation( Enumerated.class );
+				if ( enumAnn != null ) {
+					javax.persistence.EnumType enumType = enumAnn.value();
+					if ( javax.persistence.EnumType.ORDINAL.equals( enumType ) ) {
+						typeParameters.setProperty( EnumType.TYPE, String.valueOf( Types.INTEGER ) );
+					}
+					else if ( javax.persistence.EnumType.STRING.equals( enumType ) ) {
+						typeParameters.setProperty( EnumType.TYPE, String.valueOf( Types.VARCHAR ) );
+					}
+					else {
+						throw new AssertionFailure( "Unknown EnumType: " + enumType );
+					}
+				}
+			}
+		}
+		explicitType = type;
+		this.typeParameters = typeParameters;
+		Type annType = (Type) property.getAnnotation( Type.class );
+		setExplicitType( annType );
+	}
+
+	public void setExplicitType(String explicitType) {
+		this.explicitType = explicitType;
+	}
+
+	//FIXME raise an assertion failure  if setExplicitType(String) and setExplicitType(Type) are use at the same time
+	public void setExplicitType(Type typeAnn) {
+		if ( typeAnn != null ) {
+			explicitType = typeAnn.type();
+			typeParameters.clear();
+			for ( Parameter param : typeAnn.parameters() ) {
+				typeParameters.setProperty( param.name(), param.value() );
+			}
+		}
+	}
+
+	public void setMappings(ExtendedMappings mappings) {
+		this.mappings = mappings;
+	}
+
+	private void validate() {
+		//TODO check necessary params
+		Ejb3Column.checkPropertyConsistency( columns, propertyName );
+	}
+
+	public SimpleValue make() {
+		validate();
+		log.debug( "building SimpleValue for " + propertyName );
+		if (table == null) {
+			table = columns[0].getTable();
+		}
+		SimpleValue simpleValue = new SimpleValue( table );
+		return fillSimpleValue( simpleValue );
+	}
+
+	public SimpleValue fillSimpleValue(SimpleValue simpleValue) {
+		String type = BinderHelper.isDefault( explicitType ) ? returnedClassName : explicitType;
+		org.hibernate.mapping.TypeDef typeDef = mappings.getTypeDef( type );
+		if ( typeDef != null ) {
+			type = typeDef.getTypeClass();
+			simpleValue.setTypeParameters( typeDef.getParameters() );
+		}
+		if ( typeParameters != null && typeParameters.size() != 0 ) {
+			//explicit type params takes precedence over type def params
+			simpleValue.setTypeParameters( typeParameters );
+		}
+		simpleValue.setTypeName( type );
+		if ( persistentClassName != null ) {
+			simpleValue.setTypeUsingReflection( persistentClassName, propertyName );
+		}
+		for ( Ejb3Column column : columns ) {
+			column.linkWithValue( simpleValue );
+		}
+		return simpleValue;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/TableBinder.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/TableBinder.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/TableBinder.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,389 +0,0 @@
-//$Id$
-package org.hibernate.cfg.annotations;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import javax.persistence.UniqueConstraint;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.hibernate.AnnotationException;
-import org.hibernate.AssertionFailure;
-import org.hibernate.annotations.Index;
-import org.hibernate.annotations.common.util.StringHelper;
-import org.hibernate.cfg.BinderHelper;
-import org.hibernate.cfg.Ejb3JoinColumn;
-import org.hibernate.cfg.ExtendedMappings;
-import org.hibernate.cfg.IndexSecondPass;
-import org.hibernate.mapping.Collection;
-import org.hibernate.mapping.Column;
-import org.hibernate.mapping.DependantValue;
-import org.hibernate.mapping.JoinedSubclass;
-import org.hibernate.mapping.PersistentClass;
-import org.hibernate.mapping.Property;
-import org.hibernate.mapping.SimpleValue;
-import org.hibernate.mapping.Table;
-import org.hibernate.mapping.ToOne;
-import org.hibernate.mapping.Value;
-
-/**
- * Table related operations
- *
- * @author Emmanuel Bernard
- */
-public class TableBinder {
-	//TODO move it to a getter/setter strategy
-	private static Log log = LogFactory.getLog( TableBinder.class );
-	private String schema;
-	private String catalog;
-	private String name;
-	private boolean isAbstract;
-	private List<String[]> uniqueConstraints;
-	String constraints;
-	Table denormalizedSuperTable;
-	ExtendedMappings mappings;
-	private String ownerEntityTable;
-	private String associatedEntityTable;
-	private String propertyName;
-	private String ownerEntity;
-	private String associatedEntity;
-
-	public void setSchema(String schema) {
-		this.schema = schema;
-	}
-
-	public void setCatalog(String catalog) {
-		this.catalog = catalog;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	public void setAbstract(boolean anAbstract) {
-		isAbstract = anAbstract;
-	}
-
-	public void setUniqueConstraints(UniqueConstraint[] uniqueConstraints) {
-		this.uniqueConstraints = TableBinder.buildUniqueConstraints( uniqueConstraints );
-	}
-
-	public void setConstraints(String constraints) {
-		this.constraints = constraints;
-	}
-
-	public void setDenormalizedSuperTable(Table denormalizedSuperTable) {
-		this.denormalizedSuperTable = denormalizedSuperTable;
-	}
-
-	public void setMappings(ExtendedMappings mappings) {
-		this.mappings = mappings;
-	}
-
-	// only bind association table currently
-	public Table bind() {
-		//logicalName only accurate for assoc table...
-		String unquotedOwnerTable = StringHelper.unquote( ownerEntityTable );
-		String unquotedAssocTable = StringHelper.unquote( associatedEntityTable );
-
-		String logicalName = mappings.getNamingStrategy()
-				.logicalCollectionTableName(
-						name,
-						unquotedOwnerTable,
-						unquotedAssocTable,
-						propertyName );
-		if ( StringHelper.isQuoted( ownerEntityTable ) || StringHelper.isQuoted( associatedEntityTable ) ) {
-			logicalName = StringHelper.quote( logicalName );
-		}
-		String extendedName;
-		if ( name != null ) {
-			extendedName = mappings.getNamingStrategy().tableName( name );
-		}
-		else {
-			extendedName = mappings.getNamingStrategy()
-				.collectionTableName(
-						ownerEntity,
-						unquotedOwnerTable,
-						associatedEntity,
-						unquotedAssocTable,
-						propertyName
-				);
-			if ( StringHelper.isQuoted( ownerEntityTable ) || StringHelper.isQuoted( associatedEntityTable ) ) {
-				extendedName = StringHelper.quote( extendedName );
-			}
-		}
-		return fillTable(
-				schema, catalog,
-				extendedName, logicalName, isAbstract, uniqueConstraints, constraints,
-				denormalizedSuperTable, mappings
-		);
-	}
-
-	public static Table fillTable(
-			String schema, String catalog, String realTableName, String logicalName, boolean isAbstract,
-			List uniqueConstraints, String constraints, Table denormalizedSuperTable, ExtendedMappings mappings
-	) {
-		schema = BinderHelper.isDefault( schema ) ? mappings.getSchemaName() : schema;
-		catalog = BinderHelper.isDefault( catalog ) ? mappings.getCatalogName() : catalog;
-		Table table;
-		if ( denormalizedSuperTable != null ) {
-			table = mappings.addDenormalizedTable(
-					schema,
-					catalog,
-					realTableName,
-					isAbstract,
-					null, //subselect
-					denormalizedSuperTable
-			);
-		}
-		else {
-			table = mappings.addTable(
-					schema,
-					catalog,
-					realTableName,
-					null, //subselect
-					isAbstract
-			);
-		}
-		if ( uniqueConstraints != null && uniqueConstraints.size() > 0 ) {
-			mappings.addUniqueConstraints( table, uniqueConstraints );
-		}
-		if ( constraints != null ) table.addCheckConstraint( constraints );
-		//logicalName is null if we are in the second pass
-		if ( logicalName != null ) {
-			mappings.addTableBinding( schema, catalog, logicalName, realTableName, denormalizedSuperTable );
-		}
-		return table;
-	}
-
-	public static void bindFk(
-			PersistentClass referencedEntity, PersistentClass destinationEntity, Ejb3JoinColumn[] columns,
-			SimpleValue value,
-			boolean unique, ExtendedMappings mappings
-	) {
-		PersistentClass associatedClass;
-		if ( destinationEntity != null ) {
-			//overidden destination
-			associatedClass = destinationEntity;
-		}
-		else {
-			associatedClass = columns[0].getPropertyHolder() == null ? null : columns[0].getPropertyHolder()
-					.getPersistentClass();
-		}
-		final String mappedByProperty = columns[0].getMappedBy();
-		if ( StringHelper.isNotEmpty( mappedByProperty ) ) {
-			/**
-			 * Get the columns of the mapped-by property
-			 * copy them and link the copy to the actual value
-			 */
-			if ( log.isDebugEnabled() ) {
-				log.debug(
-						"Retrieving property " + associatedClass.getEntityName() + "." + mappedByProperty
-				);
-			}
-
-			final Property property = associatedClass.getRecursiveProperty( columns[0].getMappedBy() );
-			Iterator mappedByColumns;
-			if ( property.getValue() instanceof Collection ) {
-				Collection collection = ( (Collection) property.getValue() );
-				Value element = collection.getElement();
-				if ( element == null ) {
-					throw new AnnotationException(
-							"Illegal use of mappedBy on both sides of the relationship: "
-									+ associatedClass.getEntityName() + "." + mappedByProperty
-					);
-				}
-				mappedByColumns = element.getColumnIterator();
-			}
-			else {
-				mappedByColumns = property.getValue().getColumnIterator();
-			}
-			while ( mappedByColumns.hasNext() ) {
-				Column column = (Column) mappedByColumns.next();
-				columns[0].overrideSqlTypeIfNecessary( column );
-				columns[0].linkValueUsingAColumnCopy( column, value );
-			}
-		}
-		else if ( columns[0].isImplicit() ) {
-			/**
-			 * if columns are implicit, then create the columns based on the
-			 * referenced entity id columns
-			 */
-			Iterator idColumns;
-			if ( referencedEntity instanceof JoinedSubclass ) {
-				idColumns = ( (JoinedSubclass) referencedEntity ).getKey().getColumnIterator();
-			}
-			else {
-				idColumns = referencedEntity.getIdentifier().getColumnIterator();
-			}
-			while ( idColumns.hasNext() ) {
-				Column column = (Column) idColumns.next();
-				columns[0].overrideSqlTypeIfNecessary( column );
-				columns[0].linkValueUsingDefaultColumnNaming( column, referencedEntity, value );
-			}
-		}
-		else {
-			int fkEnum = Ejb3JoinColumn.checkReferencedColumnsType( columns, referencedEntity, mappings );
-
-			if ( Ejb3JoinColumn.NON_PK_REFERENCE == fkEnum ) {
-				String referencedPropertyName;
-				if ( value instanceof ToOne ) {
-					referencedPropertyName = ( (ToOne) value ).getReferencedPropertyName();
-				}
-				else if ( value instanceof DependantValue ) {
-					String propertyName = columns[0].getPropertyName();
-					if ( propertyName != null ) {
-						Collection collection = (Collection) referencedEntity.getRecursiveProperty( propertyName )
-								.getValue();
-						referencedPropertyName = collection.getReferencedPropertyName();
-					}
-					else {
-						throw new AnnotationException( "SecondaryTable JoinColumn cannot reference a non primary key" );
-					}
-
-				}
-				else {
-					throw new AssertionFailure(
-							"Do a property ref on an unexpected Value type: "
-									+ value.getClass().getName()
-					);
-				}
-				if ( referencedPropertyName == null ) {
-					throw new AssertionFailure(
-							"No property ref found while expected"
-					);
-				}
-				Property synthProp = referencedEntity.getRecursiveProperty( referencedPropertyName );
-				if ( synthProp == null ) {
-					throw new AssertionFailure(
-							"Cannot find synthProp: " + referencedEntity.getEntityName() + "." + referencedPropertyName
-					);
-				}
-				linkJoinColumnWithValueOverridingNameIfImplicit(
-						referencedEntity, synthProp.getColumnIterator(), columns, value
-				);
-
-			}
-			else {
-				if ( Ejb3JoinColumn.NO_REFERENCE == fkEnum ) {
-					//implicit case, we hope PK and FK columns are in the same order
-					if ( columns.length != referencedEntity.getIdentifier().getColumnSpan() ) {
-						throw new AnnotationException(
-								"A Foreign key refering " + referencedEntity.getEntityName()
-										+ " from " + associatedClass.getEntityName()
-										+ " has the wrong number of column. should be " + referencedEntity.getIdentifier()
-										.getColumnSpan()
-						);
-					}
-					linkJoinColumnWithValueOverridingNameIfImplicit(
-							referencedEntity,
-							referencedEntity.getIdentifier().getColumnIterator(),
-							columns,
-							value
-					);
-				}
-				else {
-					//explicit referencedColumnName
-					Iterator idColItr = referencedEntity.getKey().getColumnIterator();
-					org.hibernate.mapping.Column col;
-					Table table = referencedEntity.getTable(); //works cause the pk has to be on the primary table
-					if ( ! idColItr.hasNext() ) log.debug( "No column in the identifier!" );
-					while ( idColItr.hasNext() ) {
-						boolean match = false;
-						//for each PK column, find the associated FK column.
-						col = (org.hibernate.mapping.Column) idColItr.next();
-						for ( Ejb3JoinColumn joinCol : columns ) {
-							String referencedColumn = joinCol.getReferencedColumn();
-							referencedColumn = mappings.getPhysicalColumnName( referencedColumn, table );
-							if ( referencedColumn.equals( col.getName() ) ) {
-								//proper join column
-								if ( joinCol.isNameDeferred() ) {
-									joinCol.linkValueUsingDefaultColumnNaming(
-											col, referencedEntity, value
-									);
-								}
-								else {
-									joinCol.linkWithValue( value );
-								}
-								joinCol.overrideSqlTypeIfNecessary( col );
-								match = true;
-								break;
-							}
-						}
-						if ( !match ) {
-							throw new AnnotationException(
-									"Column name " + col.getName() + " of "
-											+ referencedEntity.getEntityName() + " not found in JoinColumns.referencedColumnName"
-							);
-						}
-					}
-				}
-			}
-		}
-		value.createForeignKey();
-		if ( unique == true ) {
-			createUniqueConstraint( value );
-		}
-	}
-
-	private static void linkJoinColumnWithValueOverridingNameIfImplicit(
-			PersistentClass referencedEntity, Iterator columnIterator, Ejb3JoinColumn[] columns, SimpleValue value
-	) {
-		for ( Ejb3JoinColumn joinCol : columns ) {
-			Column synthCol = (Column) columnIterator.next();
-			if ( joinCol.isNameDeferred() ) {
-				//this has to be the default value
-				joinCol.linkValueUsingDefaultColumnNaming( synthCol, referencedEntity, value );
-			}
-			else {
-				joinCol.linkWithValue( value );
-			}
-			joinCol.overrideSqlTypeIfNecessary( synthCol );
-		}
-	}
-
-	public static void createUniqueConstraint(Value value) {
-		Iterator iter = value.getColumnIterator();
-		ArrayList cols = new ArrayList();
-		while ( iter.hasNext() ) {
-			cols.add( iter.next() );
-		}
-		value.getTable().createUniqueKey( cols );
-	}
-
-	public static void addIndexes(Table hibTable, Index[] indexes, ExtendedMappings mappings) {
-		for ( Index index : indexes ) {
-			//no need to handle inSecondPass here since it is only called from EntityBinder
-			mappings.addSecondPass(
-					new IndexSecondPass( hibTable, index.name(), index.columnNames(), mappings )
-			);
-		}
-	}
-
-	public static List<String[]> buildUniqueConstraints(UniqueConstraint[] constraintsArray) {
-		List<String[]> result = new ArrayList<String[]>();
-		if ( constraintsArray.length != 0 ) {
-			for ( UniqueConstraint uc : constraintsArray ) {
-				result.add( uc.columnNames() );
-			}
-		}
-		return result;
-	}
-
-	public void setDefaultName(
-			String ownerEntity, String ownerEntityTable, String associatedEntity, String associatedEntityTable,
-			String propertyName
-	) {
-		this.ownerEntity = ownerEntity;
-		this.ownerEntityTable = ownerEntityTable;
-		this.associatedEntity = associatedEntity;
-		this.associatedEntityTable = associatedEntityTable;
-		this.propertyName = propertyName;
-		this.name = null;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/TableBinder.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/TableBinder.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/TableBinder.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/TableBinder.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,389 @@
+//$Id$
+package org.hibernate.cfg.annotations;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import javax.persistence.UniqueConstraint;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.hibernate.AnnotationException;
+import org.hibernate.AssertionFailure;
+import org.hibernate.annotations.Index;
+import org.hibernate.annotations.common.util.StringHelper;
+import org.hibernate.cfg.BinderHelper;
+import org.hibernate.cfg.Ejb3JoinColumn;
+import org.hibernate.cfg.ExtendedMappings;
+import org.hibernate.cfg.IndexSecondPass;
+import org.hibernate.mapping.Collection;
+import org.hibernate.mapping.Column;
+import org.hibernate.mapping.DependantValue;
+import org.hibernate.mapping.JoinedSubclass;
+import org.hibernate.mapping.PersistentClass;
+import org.hibernate.mapping.Property;
+import org.hibernate.mapping.SimpleValue;
+import org.hibernate.mapping.Table;
+import org.hibernate.mapping.ToOne;
+import org.hibernate.mapping.Value;
+
+/**
+ * Table related operations
+ *
+ * @author Emmanuel Bernard
+ */
+public class TableBinder {
+	//TODO move it to a getter/setter strategy
+	private static Log log = LogFactory.getLog( TableBinder.class );
+	private String schema;
+	private String catalog;
+	private String name;
+	private boolean isAbstract;
+	private List<String[]> uniqueConstraints;
+	String constraints;
+	Table denormalizedSuperTable;
+	ExtendedMappings mappings;
+	private String ownerEntityTable;
+	private String associatedEntityTable;
+	private String propertyName;
+	private String ownerEntity;
+	private String associatedEntity;
+
+	public void setSchema(String schema) {
+		this.schema = schema;
+	}
+
+	public void setCatalog(String catalog) {
+		this.catalog = catalog;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public void setAbstract(boolean anAbstract) {
+		isAbstract = anAbstract;
+	}
+
+	public void setUniqueConstraints(UniqueConstraint[] uniqueConstraints) {
+		this.uniqueConstraints = TableBinder.buildUniqueConstraints( uniqueConstraints );
+	}
+
+	public void setConstraints(String constraints) {
+		this.constraints = constraints;
+	}
+
+	public void setDenormalizedSuperTable(Table denormalizedSuperTable) {
+		this.denormalizedSuperTable = denormalizedSuperTable;
+	}
+
+	public void setMappings(ExtendedMappings mappings) {
+		this.mappings = mappings;
+	}
+
+	// only bind association table currently
+	public Table bind() {
+		//logicalName only accurate for assoc table...
+		String unquotedOwnerTable = StringHelper.unquote( ownerEntityTable );
+		String unquotedAssocTable = StringHelper.unquote( associatedEntityTable );
+
+		String logicalName = mappings.getNamingStrategy()
+				.logicalCollectionTableName(
+						name,
+						unquotedOwnerTable,
+						unquotedAssocTable,
+						propertyName );
+		if ( StringHelper.isQuoted( ownerEntityTable ) || StringHelper.isQuoted( associatedEntityTable ) ) {
+			logicalName = StringHelper.quote( logicalName );
+		}
+		String extendedName;
+		if ( name != null ) {
+			extendedName = mappings.getNamingStrategy().tableName( name );
+		}
+		else {
+			extendedName = mappings.getNamingStrategy()
+				.collectionTableName(
+						ownerEntity,
+						unquotedOwnerTable,
+						associatedEntity,
+						unquotedAssocTable,
+						propertyName
+				);
+			if ( StringHelper.isQuoted( ownerEntityTable ) || StringHelper.isQuoted( associatedEntityTable ) ) {
+				extendedName = StringHelper.quote( extendedName );
+			}
+		}
+		return fillTable(
+				schema, catalog,
+				extendedName, logicalName, isAbstract, uniqueConstraints, constraints,
+				denormalizedSuperTable, mappings
+		);
+	}
+
+	public static Table fillTable(
+			String schema, String catalog, String realTableName, String logicalName, boolean isAbstract,
+			List uniqueConstraints, String constraints, Table denormalizedSuperTable, ExtendedMappings mappings
+	) {
+		schema = BinderHelper.isDefault( schema ) ? mappings.getSchemaName() : schema;
+		catalog = BinderHelper.isDefault( catalog ) ? mappings.getCatalogName() : catalog;
+		Table table;
+		if ( denormalizedSuperTable != null ) {
+			table = mappings.addDenormalizedTable(
+					schema,
+					catalog,
+					realTableName,
+					isAbstract,
+					null, //subselect
+					denormalizedSuperTable
+			);
+		}
+		else {
+			table = mappings.addTable(
+					schema,
+					catalog,
+					realTableName,
+					null, //subselect
+					isAbstract
+			);
+		}
+		if ( uniqueConstraints != null && uniqueConstraints.size() > 0 ) {
+			mappings.addUniqueConstraints( table, uniqueConstraints );
+		}
+		if ( constraints != null ) table.addCheckConstraint( constraints );
+		//logicalName is null if we are in the second pass
+		if ( logicalName != null ) {
+			mappings.addTableBinding( schema, catalog, logicalName, realTableName, denormalizedSuperTable );
+		}
+		return table;
+	}
+
+	public static void bindFk(
+			PersistentClass referencedEntity, PersistentClass destinationEntity, Ejb3JoinColumn[] columns,
+			SimpleValue value,
+			boolean unique, ExtendedMappings mappings
+	) {
+		PersistentClass associatedClass;
+		if ( destinationEntity != null ) {
+			//overidden destination
+			associatedClass = destinationEntity;
+		}
+		else {
+			associatedClass = columns[0].getPropertyHolder() == null ? null : columns[0].getPropertyHolder()
+					.getPersistentClass();
+		}
+		final String mappedByProperty = columns[0].getMappedBy();
+		if ( StringHelper.isNotEmpty( mappedByProperty ) ) {
+			/**
+			 * Get the columns of the mapped-by property
+			 * copy them and link the copy to the actual value
+			 */
+			if ( log.isDebugEnabled() ) {
+				log.debug(
+						"Retrieving property " + associatedClass.getEntityName() + "." + mappedByProperty
+				);
+			}
+
+			final Property property = associatedClass.getRecursiveProperty( columns[0].getMappedBy() );
+			Iterator mappedByColumns;
+			if ( property.getValue() instanceof Collection ) {
+				Collection collection = ( (Collection) property.getValue() );
+				Value element = collection.getElement();
+				if ( element == null ) {
+					throw new AnnotationException(
+							"Illegal use of mappedBy on both sides of the relationship: "
+									+ associatedClass.getEntityName() + "." + mappedByProperty
+					);
+				}
+				mappedByColumns = element.getColumnIterator();
+			}
+			else {
+				mappedByColumns = property.getValue().getColumnIterator();
+			}
+			while ( mappedByColumns.hasNext() ) {
+				Column column = (Column) mappedByColumns.next();
+				columns[0].overrideSqlTypeIfNecessary( column );
+				columns[0].linkValueUsingAColumnCopy( column, value );
+			}
+		}
+		else if ( columns[0].isImplicit() ) {
+			/**
+			 * if columns are implicit, then create the columns based on the
+			 * referenced entity id columns
+			 */
+			Iterator idColumns;
+			if ( referencedEntity instanceof JoinedSubclass ) {
+				idColumns = ( (JoinedSubclass) referencedEntity ).getKey().getColumnIterator();
+			}
+			else {
+				idColumns = referencedEntity.getIdentifier().getColumnIterator();
+			}
+			while ( idColumns.hasNext() ) {
+				Column column = (Column) idColumns.next();
+				columns[0].overrideSqlTypeIfNecessary( column );
+				columns[0].linkValueUsingDefaultColumnNaming( column, referencedEntity, value );
+			}
+		}
+		else {
+			int fkEnum = Ejb3JoinColumn.checkReferencedColumnsType( columns, referencedEntity, mappings );
+
+			if ( Ejb3JoinColumn.NON_PK_REFERENCE == fkEnum ) {
+				String referencedPropertyName;
+				if ( value instanceof ToOne ) {
+					referencedPropertyName = ( (ToOne) value ).getReferencedPropertyName();
+				}
+				else if ( value instanceof DependantValue ) {
+					String propertyName = columns[0].getPropertyName();
+					if ( propertyName != null ) {
+						Collection collection = (Collection) referencedEntity.getRecursiveProperty( propertyName )
+								.getValue();
+						referencedPropertyName = collection.getReferencedPropertyName();
+					}
+					else {
+						throw new AnnotationException( "SecondaryTable JoinColumn cannot reference a non primary key" );
+					}
+
+				}
+				else {
+					throw new AssertionFailure(
+							"Do a property ref on an unexpected Value type: "
+									+ value.getClass().getName()
+					);
+				}
+				if ( referencedPropertyName == null ) {
+					throw new AssertionFailure(
+							"No property ref found while expected"
+					);
+				}
+				Property synthProp = referencedEntity.getRecursiveProperty( referencedPropertyName );
+				if ( synthProp == null ) {
+					throw new AssertionFailure(
+							"Cannot find synthProp: " + referencedEntity.getEntityName() + "." + referencedPropertyName
+					);
+				}
+				linkJoinColumnWithValueOverridingNameIfImplicit(
+						referencedEntity, synthProp.getColumnIterator(), columns, value
+				);
+
+			}
+			else {
+				if ( Ejb3JoinColumn.NO_REFERENCE == fkEnum ) {
+					//implicit case, we hope PK and FK columns are in the same order
+					if ( columns.length != referencedEntity.getIdentifier().getColumnSpan() ) {
+						throw new AnnotationException(
+								"A Foreign key refering " + referencedEntity.getEntityName()
+										+ " from " + associatedClass.getEntityName()
+										+ " has the wrong number of column. should be " + referencedEntity.getIdentifier()
+										.getColumnSpan()
+						);
+					}
+					linkJoinColumnWithValueOverridingNameIfImplicit(
+							referencedEntity,
+							referencedEntity.getIdentifier().getColumnIterator(),
+							columns,
+							value
+					);
+				}
+				else {
+					//explicit referencedColumnName
+					Iterator idColItr = referencedEntity.getKey().getColumnIterator();
+					org.hibernate.mapping.Column col;
+					Table table = referencedEntity.getTable(); //works cause the pk has to be on the primary table
+					if ( ! idColItr.hasNext() ) log.debug( "No column in the identifier!" );
+					while ( idColItr.hasNext() ) {
+						boolean match = false;
+						//for each PK column, find the associated FK column.
+						col = (org.hibernate.mapping.Column) idColItr.next();
+						for ( Ejb3JoinColumn joinCol : columns ) {
+							String referencedColumn = joinCol.getReferencedColumn();
+							referencedColumn = mappings.getPhysicalColumnName( referencedColumn, table );
+							if ( referencedColumn.equals( col.getName() ) ) {
+								//proper join column
+								if ( joinCol.isNameDeferred() ) {
+									joinCol.linkValueUsingDefaultColumnNaming(
+											col, referencedEntity, value
+									);
+								}
+								else {
+									joinCol.linkWithValue( value );
+								}
+								joinCol.overrideSqlTypeIfNecessary( col );
+								match = true;
+								break;
+							}
+						}
+						if ( !match ) {
+							throw new AnnotationException(
+									"Column name " + col.getName() + " of "
+											+ referencedEntity.getEntityName() + " not found in JoinColumns.referencedColumnName"
+							);
+						}
+					}
+				}
+			}
+		}
+		value.createForeignKey();
+		if ( unique == true ) {
+			createUniqueConstraint( value );
+		}
+	}
+
+	private static void linkJoinColumnWithValueOverridingNameIfImplicit(
+			PersistentClass referencedEntity, Iterator columnIterator, Ejb3JoinColumn[] columns, SimpleValue value
+	) {
+		for ( Ejb3JoinColumn joinCol : columns ) {
+			Column synthCol = (Column) columnIterator.next();
+			if ( joinCol.isNameDeferred() ) {
+				//this has to be the default value
+				joinCol.linkValueUsingDefaultColumnNaming( synthCol, referencedEntity, value );
+			}
+			else {
+				joinCol.linkWithValue( value );
+			}
+			joinCol.overrideSqlTypeIfNecessary( synthCol );
+		}
+	}
+
+	public static void createUniqueConstraint(Value value) {
+		Iterator iter = value.getColumnIterator();
+		ArrayList cols = new ArrayList();
+		while ( iter.hasNext() ) {
+			cols.add( iter.next() );
+		}
+		value.getTable().createUniqueKey( cols );
+	}
+
+	public static void addIndexes(Table hibTable, Index[] indexes, ExtendedMappings mappings) {
+		for ( Index index : indexes ) {
+			//no need to handle inSecondPass here since it is only called from EntityBinder
+			mappings.addSecondPass(
+					new IndexSecondPass( hibTable, index.name(), index.columnNames(), mappings )
+			);
+		}
+	}
+
+	public static List<String[]> buildUniqueConstraints(UniqueConstraint[] constraintsArray) {
+		List<String[]> result = new ArrayList<String[]>();
+		if ( constraintsArray.length != 0 ) {
+			for ( UniqueConstraint uc : constraintsArray ) {
+				result.add( uc.columnNames() );
+			}
+		}
+		return result;
+	}
+
+	public void setDefaultName(
+			String ownerEntity, String ownerEntityTable, String associatedEntity, String associatedEntityTable,
+			String propertyName
+	) {
+		this.ownerEntity = ownerEntity;
+		this.ownerEntityTable = ownerEntityTable;
+		this.associatedEntity = associatedEntity;
+		this.associatedEntityTable = associatedEntityTable;
+		this.propertyName = propertyName;
+		this.name = null;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/Version.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/Version.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/Version.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,20 +0,0 @@
-//$Id: $
-package org.hibernate.cfg.annotations;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * @author Emmanuel Bernard
- */
-public class Version {
-	public static final String VERSION = "3.2.1.GA";
-	private static Log log = LogFactory.getLog( Version.class );
-
-	static {
-		log.info( "Hibernate Annotations " + VERSION );
-	}
-
-	public static void touch() {
-	}
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/Version.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/Version.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/Version.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/Version.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,20 @@
+//$Id: $
+package org.hibernate.cfg.annotations;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Version {
+	public static final String VERSION = "3.2.1.GA";
+	private static Log log = LogFactory.getLog( Version.class );
+
+	static {
+		log.info( "Hibernate Annotations " + VERSION );
+	}
+
+	public static void touch() {
+	}
+}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/reflection (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/reflection)

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/reflection/EJB3OverridenAnnotationReader.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/reflection/EJB3OverridenAnnotationReader.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/reflection/EJB3OverridenAnnotationReader.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,2080 +0,0 @@
-package org.hibernate.cfg.annotations.reflection;
-
-import java.beans.Introspector;
-import java.lang.annotation.Annotation;
-import java.lang.reflect.AccessibleObject;
-import java.lang.reflect.AnnotatedElement;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.HashSet;
-
-import javax.persistence.AssociationOverride;
-import javax.persistence.AssociationOverrides;
-import javax.persistence.AttributeOverride;
-import javax.persistence.AttributeOverrides;
-import javax.persistence.Basic;
-import javax.persistence.CascadeType;
-import javax.persistence.Column;
-import javax.persistence.ColumnResult;
-import javax.persistence.DiscriminatorColumn;
-import javax.persistence.DiscriminatorType;
-import javax.persistence.DiscriminatorValue;
-import javax.persistence.Embeddable;
-import javax.persistence.Embedded;
-import javax.persistence.EmbeddedId;
-import javax.persistence.Entity;
-import javax.persistence.EntityListeners;
-import javax.persistence.EntityResult;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
-import javax.persistence.ExcludeDefaultListeners;
-import javax.persistence.ExcludeSuperclassListeners;
-import javax.persistence.FetchType;
-import javax.persistence.FieldResult;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.IdClass;
-import javax.persistence.Inheritance;
-import javax.persistence.InheritanceType;
-import javax.persistence.JoinColumn;
-import javax.persistence.JoinColumns;
-import javax.persistence.JoinTable;
-import javax.persistence.Lob;
-import javax.persistence.ManyToMany;
-import javax.persistence.ManyToOne;
-import javax.persistence.MapKey;
-import javax.persistence.MappedSuperclass;
-import javax.persistence.NamedNativeQueries;
-import javax.persistence.NamedNativeQuery;
-import javax.persistence.NamedQueries;
-import javax.persistence.NamedQuery;
-import javax.persistence.OneToMany;
-import javax.persistence.OneToOne;
-import javax.persistence.OrderBy;
-import javax.persistence.PostLoad;
-import javax.persistence.PostPersist;
-import javax.persistence.PostRemove;
-import javax.persistence.PostUpdate;
-import javax.persistence.PrePersist;
-import javax.persistence.PreRemove;
-import javax.persistence.PreUpdate;
-import javax.persistence.PrimaryKeyJoinColumn;
-import javax.persistence.PrimaryKeyJoinColumns;
-import javax.persistence.QueryHint;
-import javax.persistence.SecondaryTable;
-import javax.persistence.SecondaryTables;
-import javax.persistence.SequenceGenerator;
-import javax.persistence.SqlResultSetMapping;
-import javax.persistence.SqlResultSetMappings;
-import javax.persistence.Table;
-import javax.persistence.TableGenerator;
-import javax.persistence.Temporal;
-import javax.persistence.TemporalType;
-import javax.persistence.Transient;
-import javax.persistence.UniqueConstraint;
-import javax.persistence.Version;
-
-import org.dom4j.Attribute;
-import org.dom4j.Element;
-import org.hibernate.AnnotationException;
-import org.hibernate.annotations.common.annotationfactory.AnnotationDescriptor;
-import org.hibernate.annotations.common.annotationfactory.AnnotationFactory;
-import org.hibernate.annotations.AccessType;
-import org.hibernate.annotations.CollectionOfElements;
-import org.hibernate.annotations.Columns;
-import org.hibernate.annotations.common.reflection.AnnotationReader;
-import org.hibernate.annotations.common.reflection.Filter;
-import org.hibernate.annotations.common.reflection.ReflectionUtil;
-import org.hibernate.annotations.common.AssertionFailure;
-import org.hibernate.util.ReflectHelper;
-import org.hibernate.util.StringHelper;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * Encapsulates the overriding of Java annotations from an EJB 3.0 descriptor.
- *
- * @author Paolo Perrotta
- * @author Davide Marchignoli
- * @author Emmanuel Bernard
- */
-public class EJB3OverridenAnnotationReader implements AnnotationReader {
-	private static Log log = LogFactory.getLog( EJB3OverridenAnnotationReader.class );
-	private static final Map<Class, String> annotationToXml;
-	private static final String SCHEMA_VALIDATION = "Activate schema validation for more informations";
-	private static final Filter FILTER = new Filter() {
-		public boolean returnStatic() {
-			return false;
-		}
-
-		public boolean returnTransient() {
-			return false;
-		}
-	};
-
-	static {
-		annotationToXml = new HashMap<Class, String>();
-		annotationToXml.put( Entity.class, "entity" );
-		annotationToXml.put( MappedSuperclass.class, "mapped-superclass" );
-		annotationToXml.put( Embeddable.class, "embeddable" );
-		annotationToXml.put( Table.class, "table" );
-		annotationToXml.put( SecondaryTable.class, "secondary-table" );
-		annotationToXml.put( SecondaryTables.class, "secondary-table" );
-		annotationToXml.put( PrimaryKeyJoinColumn.class, "primary-key-join-column" );
-		annotationToXml.put( PrimaryKeyJoinColumns.class, "primary-key-join-column" );
-		annotationToXml.put( IdClass.class, "id-class" );
-		annotationToXml.put( Inheritance.class, "inheritance" );
-		annotationToXml.put( DiscriminatorValue.class, "discriminator-value" );
-		annotationToXml.put( DiscriminatorColumn.class, "discriminator-column" );
-		annotationToXml.put( SequenceGenerator.class, "sequence-generator" );
-		annotationToXml.put( TableGenerator.class, "table-generator" );
-		annotationToXml.put( NamedQuery.class, "named-query" );
-		annotationToXml.put( NamedQueries.class, "named-query" );
-		annotationToXml.put( NamedNativeQuery.class, "named-native-query" );
-		annotationToXml.put( NamedNativeQueries.class, "named-native-query" );
-		annotationToXml.put( SqlResultSetMapping.class, "sql-result-set-mapping" );
-		annotationToXml.put( SqlResultSetMappings.class, "sql-result-set-mapping" );
-		annotationToXml.put( ExcludeDefaultListeners.class, "exclude-default-listeners" );
-		annotationToXml.put( ExcludeSuperclassListeners.class, "exclude-superclass-listeners" );
-		annotationToXml.put( AccessType.class, "access" );
-		annotationToXml.put( AttributeOverride.class, "attribute-override" );
-		annotationToXml.put( AttributeOverrides.class, "attribute-override" );
-		annotationToXml.put( AttributeOverride.class, "association-override" );
-		annotationToXml.put( AttributeOverrides.class, "association-override" );
-		annotationToXml.put( Id.class, "id" );
-		annotationToXml.put( EmbeddedId.class, "embedded-id" );
-		annotationToXml.put( GeneratedValue.class, "generated-value" );
-		annotationToXml.put( Column.class, "column" );
-		annotationToXml.put( Columns.class, "column" );
-		annotationToXml.put( Temporal.class, "temporal" );
-		annotationToXml.put( Lob.class, "lob" );
-		annotationToXml.put( Enumerated.class, "enumerated" );
-		annotationToXml.put( Version.class, "version" );
-		annotationToXml.put( Transient.class, "transient" );
-		annotationToXml.put( Basic.class, "basic" );
-		annotationToXml.put( Embedded.class, "embedded" );
-		annotationToXml.put( ManyToOne.class, "many-to-one" );
-		annotationToXml.put( OneToOne.class, "one-to-one" );
-		annotationToXml.put( OneToMany.class, "one-to-many" );
-		annotationToXml.put( ManyToMany.class, "many-to-many" );
-		annotationToXml.put( JoinTable.class, "join-table" );
-		annotationToXml.put( JoinColumn.class, "join-column" );
-		annotationToXml.put( JoinColumns.class, "join-column" );
-		annotationToXml.put( MapKey.class, "map-key" );
-		annotationToXml.put( OrderBy.class, "order-by" );
-		annotationToXml.put( EntityListeners.class, "entity-listeners" );
-		annotationToXml.put( PrePersist.class, "pre-persist" );
-		annotationToXml.put( PreRemove.class, "pre-remove" );
-		annotationToXml.put( PreUpdate.class, "pre-update" );
-		annotationToXml.put( PostPersist.class, "post-persist" );
-		annotationToXml.put( PostRemove.class, "post-remove" );
-		annotationToXml.put( PostUpdate.class, "post-update" );
-		annotationToXml.put( PostLoad.class, "post-load" );
-	}
-
-	private XMLContext xmlContext;
-	private String className;
-	private String propertyName;
-	private PropertyType propertyType;
-	private transient Annotation[] annotations;
-    private transient Map<Class, Annotation> annotationsMap;
-    private static final String WORD_SEPARATOR = "-";
-	private transient List<Element> elementsForProperty;
-	private AccessibleObject mirroredAttribute;
-    private final AnnotatedElement element;
-
-	private enum PropertyType {
-		PROPERTY,
-		FIELD,
-		METHOD
-	}
-
-	public EJB3OverridenAnnotationReader(AnnotatedElement el, XMLContext xmlContext) {
-        this.element = el;
-		this.xmlContext = xmlContext;
-		if ( el instanceof Class ) {
-			Class clazz = (Class) el;
-			className = clazz.getName();
-		}
-		else if ( el instanceof Field ) {
-			Field field = (Field) el;
-			className = field.getDeclaringClass().getName();
-			propertyName = field.getName();
-			propertyType = PropertyType.FIELD;
-			String expectedGetter = "get" + Character.toUpperCase( propertyName.charAt( 0 ) ) + propertyName.substring(
-					1
-			);
-			try {
-				mirroredAttribute = field.getDeclaringClass().getDeclaredMethod( expectedGetter );
-			}
-			catch (NoSuchMethodException e) {
-				//no method
-			}
-		}
-		else if ( el instanceof Method ) {
-			Method method = (Method) el;
-			className = method.getDeclaringClass().getName();
-			propertyName = method.getName();
-			if ( ReflectionUtil.isProperty(
-					method,
-					null, //this is yukky!! we'd rather get the TypeEnvironment()
-					FILTER
-			) ) {
-				if ( propertyName.startsWith( "get" ) ) {
-					propertyName = Introspector.decapitalize( propertyName.substring( "get".length() ) );
-				}
-				else if ( propertyName.startsWith( "is" ) ) {
-					propertyName = Introspector.decapitalize( propertyName.substring( "is".length() ) );
-				}
-				else {
-					throw new RuntimeException( "Method " + propertyName + " is not a property getter" );
-				}
-				propertyType = PropertyType.PROPERTY;
-				try {
-					mirroredAttribute = method.getDeclaringClass().getDeclaredField( propertyName );
-				}
-				catch (NoSuchFieldException e) {
-					//no method
-				}
-			}
-			else {
-				propertyType = PropertyType.METHOD;
-			}
-		}
-		else {
-			className = null;
-			propertyName = null;
-		}
-	}
-
-	public <T extends Annotation> T getAnnotation(Class<T> annotationType) {
-		initAnnotations();
-        return (T) annotationsMap.get( annotationType );
-	}
-
-	public <T extends Annotation> boolean isAnnotationPresent(Class<T> annotationType) {
-		initAnnotations();
-		return (T) annotationsMap.get( annotationType ) != null;
-	}
-
-	public Annotation[] getAnnotations() {
-		initAnnotations();
-		return annotations;
-	}
-
-	private void initAnnotations() {
-		if ( annotations == null ) {
-            XMLContext.Default defaults = xmlContext.getDefault( className );
-			if ( className != null && propertyName == null ) {
-				//is a class
-				Element tree = xmlContext.getXMLTree( className, null );
-                Annotation[] annotations = getJavaAnnotations();
-				List<Annotation> annotationList = new ArrayList<Annotation>( annotations.length + 5 );
-                annotationsMap = new HashMap<Class, Annotation>( annotations.length + 5 );
-                for ( Annotation annotation : annotations ) {
-					if ( ! annotationToXml.containsKey( annotation.annotationType() ) ) {
-						//unknown annotations are left over
-						annotationList.add( annotation );
-					}
-				}
-				addIfNotNull( annotationList, getEntity( tree, defaults ) );
-				addIfNotNull( annotationList, getMappedSuperclass( tree, defaults ) );
-				addIfNotNull( annotationList, getEmbeddable( tree, defaults ) );
-				addIfNotNull( annotationList, getTable( tree, defaults ) );
-				addIfNotNull( annotationList, getSecondaryTables( tree, defaults ) );
-				addIfNotNull( annotationList, getPrimaryKeyJoinColumns( tree, defaults ) );
-				addIfNotNull( annotationList, getIdClass( tree, defaults ) );
-				addIfNotNull( annotationList, getInheritance( tree, defaults ) );
-				addIfNotNull( annotationList, getDiscriminatorValue( tree, defaults ) );
-				addIfNotNull( annotationList, getDiscriminatorColumn( tree, defaults ) );
-				addIfNotNull( annotationList, getSequenceGenerator( tree, defaults ) );
-				addIfNotNull( annotationList, getTableGenerator( tree, defaults ) );
-				addIfNotNull( annotationList, getNamedQueries( tree, defaults ) );
-				addIfNotNull( annotationList, getNamedNativeQueries( tree, defaults ) );
-				addIfNotNull( annotationList, getSqlResultSetMappings( tree, defaults ) );
-				addIfNotNull( annotationList, getExcludeDefaultListeners( tree, defaults ) );
-				addIfNotNull( annotationList, getExcludeSuperclassListeners( tree, defaults ) );
-				addIfNotNull( annotationList, getAccessType( tree, defaults ) );
-				addIfNotNull( annotationList, getAttributeOverrides( tree, defaults ) );
-				addIfNotNull( annotationList, getAssociationOverrides( tree, defaults ) );
-				addIfNotNull( annotationList, getEntityListeners( tree, defaults ) );
-                //FIXME use annotationsMap rather than annotationList this will be faster since the annotation type is usually known at put() time
-                this.annotations = annotationList.toArray( new Annotation[ annotationList.size() ] );
-                for (Annotation ann : this.annotations) {
-                    annotationsMap.put( ann.annotationType(), ann );
-                }
-				checkForOrphanProperties(tree);
-			}
-			else if ( className != null ) { //&& propertyName != null ) { //always true but less confusing
-				Element tree = xmlContext.getXMLTree( className, propertyName );
-				Annotation[] annotations = getJavaAnnotations();
-				List<Annotation> annotationList = new ArrayList<Annotation>( annotations.length + 5 );
-                annotationsMap = new HashMap<Class, Annotation>( annotations.length + 5 );
-                for ( Annotation annotation : annotations ) {
-					if ( ! annotationToXml.containsKey( annotation.annotationType() ) ) {
-						//unknown annotations are left over
-						annotationList.add( annotation );
-					}
-				}
-				preCalculateElementsForProperty( tree );
-				Transient transientAnn = getTransient( defaults );
-				if ( transientAnn != null ) {
-					annotationList.add( transientAnn );
-				}
-				else {
-					if ( defaults.canUseJavaAnnotations() ) {
-						Annotation annotation = getJavaAnnotation( AccessType.class );
-						addIfNotNull(annotationList, annotation);
-					}
-					getId( annotationList, defaults );
-					getEmbeddedId( annotationList, defaults );
-					getEmbedded( annotationList, defaults );
-					getBasic( annotationList, defaults );
-					getVersion( annotationList, defaults );
-					getAssociation( ManyToOne.class, annotationList, defaults );
-					getAssociation( OneToOne.class, annotationList, defaults );
-					getAssociation( OneToMany.class, annotationList, defaults );
-					getAssociation( ManyToMany.class, annotationList, defaults );
-					addIfNotNull(annotationList, getSequenceGenerator( elementsForProperty, defaults ));
-					addIfNotNull(annotationList, getTableGenerator( elementsForProperty, defaults ));
-					addIfNotNull(annotationList, getAttributeOverrides( elementsForProperty, defaults ));
-
-				}
-				processEventAnnotations(annotationList, defaults);
-				//FIXME use annotationsMap rather than annotationList this will be faster since the annotation type is usually known at put() time
-                this.annotations = annotationList.toArray( new Annotation[ annotationList.size() ] );
-                for (Annotation ann : this.annotations) {
-                    annotationsMap.put( ann.annotationType(), ann );
-                }
-            }
-			else {
-				this.annotations = getJavaAnnotations();
-                for (Annotation ann : this.annotations) {
-                    annotationsMap.put( ann.annotationType(), ann );
-                }
-            }
-		}
-	}
-
-	private void checkForOrphanProperties(Element tree) {
-		Class clazz;
-		try {
-			clazz = ReflectHelper.classForName( className, this.getClass() );
-		}
-		catch (ClassNotFoundException e) {
-			return; //a primitive type most likely
-		}
-		Element element = tree != null ? tree.element( "attributes" ) : null;
-		//put entity.attributes elements
-		if ( element != null ) {
-			//precompute the list of properties
-			//TODO is it really useful...
-			Set<String> properties = new HashSet<String>();
-			for (Field field : clazz.getFields() ) {
-				properties.add( field.getName() );
-			}
-			for (Method method : clazz.getMethods() ) {
-				String name = method.getName();
-				if ( name.startsWith( "get" ) ) {
-					properties.add( Introspector.decapitalize( name.substring( "get".length() ) ) );
-				}
-				else if ( name.startsWith( "is" ) ) {
-					properties.add( Introspector.decapitalize( name.substring( "is".length() ) ) );
-				}
-			}
-			for ( Element subelement : (List<Element>) element.elements() ) {
-				String propertyName = subelement.attributeValue( "name" );
-				if ( ! properties.contains( propertyName ) ) {
-					log.warn("Property " + StringHelper.qualify( className, propertyName ) + " not found in class"
-							+ " but described in <mapping-file/> (possible typo error)");
-				}
-			}
-		}
-	}
-
-	/**
-     * Addes the Annotation to the list (only if it's not null) and then returns it.
-     */
-    private Annotation addIfNotNull(List<Annotation> annotationList, Annotation element) {
-        if ( element != null ) {
-            annotationList.add( element );
-        }
-        return element;
-    }
-
-    //TODO mutualize the next 2 methods
-    private Annotation getTableGenerator(List<Element> elementsForProperty, XMLContext.Default defaults) {
-        for (Element element : elementsForProperty) {
-            Element subelement = element != null ? element.element( annotationToXml.get( TableGenerator.class ) ) : null;
-            if ( subelement != null ) {
-                return buildTableGeneratorAnnotation( subelement, defaults );
-            }
-        }
-        if ( elementsForProperty.size() == 0 && defaults.canUseJavaAnnotations() ) {
-            return getJavaAnnotation( TableGenerator.class );
-		}
-		else {
-			return null;
-		}
-    }
-
-
-    private Annotation getSequenceGenerator(List<Element> elementsForProperty, XMLContext.Default defaults) {
-        for (Element element : elementsForProperty) {
-            Element subelement = element != null ? element.element( annotationToXml.get( SequenceGenerator.class ) ) : null;
-            if ( subelement != null ) {
-                return buildSequenceGeneratorAnnotation( subelement );
-            }
-        }
-        if ( elementsForProperty.size() == 0 && defaults.canUseJavaAnnotations() ) {
-            return getJavaAnnotation( SequenceGenerator.class );
-		}
-		else {
-			return null;
-		}
-    }
-
-    private void processEventAnnotations(List<Annotation> annotationList, XMLContext.Default defaults) {
-		boolean eventElement = false;
-		for ( Element element : elementsForProperty ) {
-			String elementName = element.getName();
-			if ( "pre-persist".equals( elementName ) ) {
-				AnnotationDescriptor ad = new AnnotationDescriptor( PrePersist.class );
-				annotationList.add( AnnotationFactory.create( ad ) );
-				eventElement = true;
-			}
-			else if ( "pre-remove".equals( elementName ) ) {
-				AnnotationDescriptor ad = new AnnotationDescriptor( PreRemove.class );
-				annotationList.add( AnnotationFactory.create( ad ) );
-				eventElement = true;
-			}
-			else if ( "pre-update".equals( elementName ) ) {
-				AnnotationDescriptor ad = new AnnotationDescriptor( PreUpdate.class );
-				annotationList.add( AnnotationFactory.create( ad ) );
-				eventElement = true;
-			}
-			else if ( "post-persist".equals( elementName ) ) {
-				AnnotationDescriptor ad = new AnnotationDescriptor( PostPersist.class );
-				annotationList.add( AnnotationFactory.create( ad ) );
-				eventElement = true;
-			}
-			else if ( "post-remove".equals( elementName ) ) {
-				AnnotationDescriptor ad = new AnnotationDescriptor( PostRemove.class );
-				annotationList.add( AnnotationFactory.create( ad ) );
-				eventElement = true;
-			}
-			else if ( "post-update".equals( elementName ) ) {
-				AnnotationDescriptor ad = new AnnotationDescriptor( PostUpdate.class );
-				annotationList.add( AnnotationFactory.create( ad ) );
-				eventElement = true;
-			}
-			else if ( "post-load".equals( elementName ) ) {
-				AnnotationDescriptor ad = new AnnotationDescriptor( PostLoad.class );
-				annotationList.add( AnnotationFactory.create( ad ) );
-				eventElement = true;
-			}
-		}
-		if ( ! eventElement && defaults.canUseJavaAnnotations() ) {
-			Annotation ann = getJavaAnnotation(PrePersist.class);
-			addIfNotNull(annotationList, ann);
-			ann = getJavaAnnotation(PreRemove.class);
-			addIfNotNull(annotationList, ann);
-			ann = getJavaAnnotation(PreUpdate.class);
-			addIfNotNull(annotationList, ann);
-			ann = getJavaAnnotation(PostPersist.class);
-			addIfNotNull(annotationList, ann);
-			ann = getJavaAnnotation(PostRemove.class);
-			addIfNotNull(annotationList, ann);
-			ann = getJavaAnnotation(PostUpdate.class);
-			addIfNotNull(annotationList, ann);
-			ann = getJavaAnnotation(PostLoad.class);
-			addIfNotNull(annotationList, ann);
-		}
-	}
-
-	private EntityListeners getEntityListeners(Element tree, XMLContext.Default defaults) {
-		Element element = tree != null ? tree.element( "entity-listeners" ) : null;
-		if ( element != null) {
-			List<Class> entityListenerClasses = new ArrayList<Class>();
-			for (Element subelement : (List<Element>) element.elements( "entity-listener" ) ) {
-				String className = subelement.attributeValue( "class" );
-				try {
-					entityListenerClasses.add(
-							ReflectHelper.classForName(
-									XMLContext.buildSafeClassName( className, defaults ),
-									this.getClass()
-							)
-					);
-				}
-				catch (ClassNotFoundException e) {
-					throw new AnnotationException(
-							"Unable to find " + element.getPath() + ".class: " + className, e
-					);
-				}
-			}
-			AnnotationDescriptor ad = new AnnotationDescriptor( EntityListeners.class );
-			ad.setValue( "value", entityListenerClasses.toArray( new Class[ entityListenerClasses.size() ] ) );
-			return AnnotationFactory.create( ad );
-		}
-		else if ( defaults.canUseJavaAnnotations() ) {
-			return getJavaAnnotation( EntityListeners.class );
-		}
-		else {
-			return null;
-		}
-	}
-
-	private JoinTable overridesDefaultsInJoinTable(Annotation annotation, XMLContext.Default defaults) {
-		//no element but might have some default or some annotation
-		boolean defaultToJoinTable = ! ( isJavaAnnotationPresent( JoinColumn.class )
-				|| isJavaAnnotationPresent( JoinColumns.class ) );
-        final Class<? extends Annotation> annotationClass = annotation.annotationType();
-        defaultToJoinTable = defaultToJoinTable &&
-				( ( annotationClass == ManyToMany.class && StringHelper.isEmpty( ( (ManyToMany) annotation).mappedBy() ) )
-				  || ( annotationClass == OneToMany.class && StringHelper.isEmpty( ( (OneToMany) annotation).mappedBy() ) )
-				  || ( annotationClass == CollectionOfElements.class )
-				);
-		final Class<JoinTable> annotationType = JoinTable.class;
-		if ( defaultToJoinTable
-				&& ( StringHelper.isNotEmpty( defaults.getCatalog() )
-					|| StringHelper.isNotEmpty( defaults.getSchema() ) ) ) {
-			AnnotationDescriptor ad = new AnnotationDescriptor( annotationType );
-			if ( defaults.canUseJavaAnnotations() ) {
-				JoinTable table = getJavaAnnotation( annotationType );
-				if ( table != null ) {
-					ad.setValue( "name", table.name() );
-					ad.setValue( "schema", table.schema() );
-					ad.setValue( "catalog", table.catalog() );
-					ad.setValue( "uniqueConstraints", table.uniqueConstraints() );
-					ad.setValue( "joinColumns", table.joinColumns() );
-					ad.setValue( "inverseJoinColumns", table.inverseJoinColumns() );
-				}
-			}
-			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() ) {
-			return getJavaAnnotation( annotationType );
-		}
-		else {
-			return null;
-		}
-	}
-
-	/*
-	 * no partial overriding possible
-	 */
-	private void getJoinTable(List<Annotation> annotationList, Element tree, XMLContext.Default defaults) {
-		Element subelement = tree == null ? null : tree.element( "join-table" );
-		final Class<JoinTable> annotationType = JoinTable.class;
-		if ( subelement != null ) {
-			//ignore java annotation, an element is defined
-			AnnotationDescriptor annotation = new AnnotationDescriptor( annotationType );
-			copyStringAttribute( annotation, subelement, "name", false );
-			copyStringAttribute( annotation, subelement, "catalog", false );
-			if ( StringHelper.isNotEmpty( defaults.getCatalog() )
-					&& StringHelper.isEmpty( (String) annotation.valueOf( "catalog" ) ) ) {
-				annotation.setValue( "catalog", defaults.getCatalog() );
-			}
-			copyStringAttribute( annotation, subelement, "schema", false );
-			if ( StringHelper.isNotEmpty( defaults.getSchema() )
-					&& StringHelper.isEmpty( (String) annotation.valueOf( "schema" ) ) ) {
-				annotation.setValue( "schema", defaults.getSchema() );
-			}
-			buildUniqueConstraints( annotation, subelement );
-			annotation.setValue( "joinColumns", getJoinColumns( subelement, false ) );
-			annotation.setValue( "inverseJoinColumns", getJoinColumns( subelement, true ) );
-			annotationList.add( AnnotationFactory.create( annotation ) );
-		}
-	}
-
-	private void getAssociation(
-			Class<? extends Annotation> annotationType, List<Annotation> annotationList, XMLContext.Default defaults
-	) {
-		String xmlName = annotationToXml.get( annotationType );
-		for ( Element element : elementsForProperty ) {
-			if ( xmlName.equals( element.getName() ) ) {
-				AnnotationDescriptor ad = new AnnotationDescriptor( annotationType );
-				String className = element.attributeValue( "target-entity" );
-				if ( className != null ) {
-					Class clazz;
-					try {
-						clazz = ReflectHelper.classForName(
-								XMLContext.buildSafeClassName( className, defaults ),
-								this.getClass()
-						);
-					}
-					catch (ClassNotFoundException e) {
-						throw new AnnotationException(
-								"Unable to find " + element.getPath() + "target-entity: " + className, e
-						);
-					}
-					ad.setValue( "targetEntity", clazz );
-				}
-				getFetchType( ad, element );
-				getCascades( ad, element, defaults );
-				getJoinTable( annotationList, element, defaults );
-				buildJoinColumns( annotationList, element, defaults );
-				Annotation annotation = getPrimaryKeyJoinColumns( element, defaults );
-				addIfNotNull(annotationList, annotation);
-				copyBooleanAttribute( ad, element, "optional" );
-				copyStringAttribute( ad, element, "mapped-by", false );
-				getOrderBy( annotationList, element, defaults );
-				getMapKey( annotationList, element, defaults );
-				annotationList.add( AnnotationFactory.create( ad ) );
-			}
-		}
-		if ( elementsForProperty.size() == 0 && defaults.canUseJavaAnnotations() ) {
-			Annotation annotation = getJavaAnnotation( annotationType );
-			if ( annotation != null ) {
-				annotationList.add( annotation );
-				annotation = overridesDefaultsInJoinTable( annotation, defaults );
-				addIfNotNull(annotationList, annotation);
-				annotation = getJavaAnnotation( JoinColumn.class );
-				addIfNotNull(annotationList, annotation);
-				annotation = getJavaAnnotation( JoinColumns.class );
-				addIfNotNull(annotationList, annotation);
-				annotation = getJavaAnnotation( PrimaryKeyJoinColumn.class );
-				addIfNotNull(annotationList, annotation);
-				annotation = getJavaAnnotation( PrimaryKeyJoinColumns.class );
-				addIfNotNull(annotationList, annotation);
-				annotation = getJavaAnnotation( MapKey.class );
-				addIfNotNull(annotationList, annotation);
-				annotation = getJavaAnnotation( OrderBy.class );
-				addIfNotNull(annotationList, annotation);
-				annotation = getJavaAnnotation( AttributeOverride.class );
-				addIfNotNull(annotationList, annotation);
-				annotation = getJavaAnnotation( AttributeOverrides.class );
-				addIfNotNull(annotationList, annotation);
-				annotation = getJavaAnnotation( AssociationOverride.class );
-				addIfNotNull(annotationList, annotation);
-				annotation = getJavaAnnotation( AssociationOverrides.class );
-				addIfNotNull(annotationList, annotation);
-				annotation = getJavaAnnotation( Lob.class );
-				addIfNotNull(annotationList, annotation);
-				annotation = getJavaAnnotation( Enumerated.class );
-				addIfNotNull(annotationList, annotation);
-				annotation = getJavaAnnotation( Temporal.class );
-				addIfNotNull(annotationList, annotation);
-				annotation = getJavaAnnotation( Column.class );
-				addIfNotNull(annotationList, annotation);
-				annotation = getJavaAnnotation( Columns.class );
-				addIfNotNull(annotationList, annotation);
-			}
-			else if ( isJavaAnnotationPresent( CollectionOfElements.class ) ) {
-				annotation = overridesDefaultsInJoinTable( getJavaAnnotation( CollectionOfElements.class ), defaults );
-				addIfNotNull(annotationList, annotation);
-				annotation = getJavaAnnotation( JoinColumn.class );
-				addIfNotNull(annotationList, annotation);
-				annotation = getJavaAnnotation( JoinColumns.class );
-				addIfNotNull(annotationList, annotation);
-				annotation = getJavaAnnotation( PrimaryKeyJoinColumn.class );
-				addIfNotNull(annotationList, annotation);
-				annotation = getJavaAnnotation( PrimaryKeyJoinColumns.class );
-				addIfNotNull(annotationList, annotation);
-				annotation = getJavaAnnotation( MapKey.class );
-				addIfNotNull(annotationList, annotation);
-				annotation = getJavaAnnotation( OrderBy.class );
-				addIfNotNull(annotationList, annotation);
-				annotation = getJavaAnnotation( AttributeOverride.class );
-				addIfNotNull(annotationList, annotation);
-				annotation = getJavaAnnotation( AttributeOverrides.class );
-				addIfNotNull(annotationList, annotation);
-				annotation = getJavaAnnotation( AssociationOverride.class );
-				addIfNotNull(annotationList, annotation);
-				annotation = getJavaAnnotation( AssociationOverrides.class );
-				addIfNotNull(annotationList, annotation);
-				annotation = getJavaAnnotation( Lob.class );
-				addIfNotNull(annotationList, annotation);
-				annotation = getJavaAnnotation( Enumerated.class );
-				addIfNotNull(annotationList, annotation);
-				annotation = getJavaAnnotation( Temporal.class );
-				addIfNotNull(annotationList, annotation);
-				annotation = getJavaAnnotation( Column.class );
-				addIfNotNull(annotationList, annotation);
-				annotation = getJavaAnnotation( Columns.class );
-				addIfNotNull(annotationList, annotation);
-			}
-		}
-	}
-
-	private void getOrderBy(List<Annotation> annotationList, Element element, XMLContext.Default defaults) {
-		Element subelement = element != null ? element.element( "order-by" ) : null;
-		if ( subelement != null ) {
-			String orderByString = subelement.getTextTrim();
-			AnnotationDescriptor ad = new AnnotationDescriptor( OrderBy.class );
-			if ( StringHelper.isNotEmpty( orderByString ) ) ad.setValue( "value", orderByString );
-			annotationList.add( AnnotationFactory.create( ad ) );
-		}
-	}
-
-	private void getMapKey(List<Annotation> annotationList, Element element, XMLContext.Default defaults) {
-		Element subelement = element != null ? element.element( "map-key" ) : null;
-		if ( subelement != null ) {
-			String mapKeyString = subelement.attributeValue( "name" );
-			AnnotationDescriptor ad = new AnnotationDescriptor( MapKey.class );
-			if ( StringHelper.isNotEmpty( mapKeyString ) ) ad.setValue( "name", mapKeyString );
-			annotationList.add( AnnotationFactory.create( ad ) );
-		}
-	}
-
-	private void buildJoinColumns(List<Annotation> annotationList, Element element, XMLContext.Default defaults) {
-		JoinColumn[] joinColumns = getJoinColumns( element, false );
-		if ( joinColumns.length > 0 ) {
-			AnnotationDescriptor ad = new AnnotationDescriptor( JoinColumns.class );
-			ad.setValue( "value", joinColumns );
-			annotationList.add( AnnotationFactory.create( ad ) );
-		}
-	}
-
-	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 ) {
-			if ( subelement.element( "cascade-all" ) != null ) cascades.add( CascadeType.ALL );
-			if ( subelement.element( "cascade-persist" ) != null ) cascades.add( CascadeType.PERSIST );
-			if ( subelement.element( "cascade-merge" ) != null ) cascades.add( CascadeType.MERGE );
-			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() ] ) );
-		}
-	}
-
-	private void getEmbedded(List<Annotation> annotationList, XMLContext.Default defaults) {
-		for ( Element element : elementsForProperty ) {
-			if ( "embedded".equals( element.getName() ) ) {
-				AnnotationDescriptor ad = new AnnotationDescriptor( Embedded.class );
-				annotationList.add( AnnotationFactory.create( ad ) );
-			}
-		}
-		if ( elementsForProperty.size() == 0 && defaults.canUseJavaAnnotations() ) {
-			Annotation annotation = getJavaAnnotation( Embedded.class );
-			if ( annotation != null ) {
-				annotationList.add( annotation );
-				annotation = getJavaAnnotation( AttributeOverride.class );
-				addIfNotNull(annotationList, annotation);
-				annotation = getJavaAnnotation( AttributeOverrides.class );
-				addIfNotNull(annotationList, annotation);
-				annotation = getJavaAnnotation( AssociationOverride.class );
-				addIfNotNull(annotationList, annotation);
-				annotation = getJavaAnnotation( AssociationOverrides.class );
-				addIfNotNull(annotationList, annotation);
-			}
-		}
-	}
-
-	private Transient getTransient(XMLContext.Default defaults) {
-		for ( Element element : elementsForProperty ) {
-			if ( "transient".equals( element.getName() ) ) {
-				AnnotationDescriptor ad = new AnnotationDescriptor( Transient.class );
-				return AnnotationFactory.create( ad );
-			}
-		}
-		if ( elementsForProperty.size() == 0 && defaults.canUseJavaAnnotations() ) {
-			return getJavaAnnotation( Transient.class );
-		}
-		else {
-			return null;
-		}
-	}
-
-	private void getVersion(List<Annotation> annotationList, XMLContext.Default defaults) {
-		for ( Element element : elementsForProperty ) {
-			if ( "version".equals( element.getName() ) ) {
-				Annotation annotation = buildColumns( element );
-				addIfNotNull(annotationList, annotation);
-				getTemporal( annotationList, element );
-				AnnotationDescriptor basic = new AnnotationDescriptor( Version.class );
-				annotationList.add( AnnotationFactory.create( basic ) );
-			}
-		}
-		if ( elementsForProperty.size() == 0 && defaults.canUseJavaAnnotations() ) {
-			//we have nothing, so Java annotations might occurs
-			Annotation annotation = getJavaAnnotation( Version.class );
-			if ( annotation != null ) {
-				annotationList.add( annotation );
-				annotation = getJavaAnnotation( Column.class );
-				addIfNotNull(annotationList, annotation);
-				annotation = getJavaAnnotation( Columns.class );
-				addIfNotNull(annotationList, annotation);
-				annotation = getJavaAnnotation( Temporal.class );
-				addIfNotNull(annotationList, annotation);
-			}
-		}
-	}
-
-	private void getBasic(List<Annotation> annotationList, XMLContext.Default defaults) {
-		for ( Element element : elementsForProperty ) {
-			if ( "basic".equals( element.getName() ) ) {
-				Annotation annotation = buildColumns( element );
-				addIfNotNull(annotationList, annotation);
-				getTemporal( annotationList, element );
-				getLob( annotationList, element );
-				getEnumerated( annotationList, element );
-				AnnotationDescriptor basic = new AnnotationDescriptor( Basic.class );
-				getFetchType( basic, element );
-				copyBooleanAttribute( basic, element, "optional" );
-				annotationList.add( AnnotationFactory.create( basic ) );
-			}
-		}
-		if ( elementsForProperty.size() == 0 && defaults.canUseJavaAnnotations() ) {
-			//no annotation presence constraint, basic is the default
-			Annotation annotation = getJavaAnnotation( Basic.class );
-			addIfNotNull(annotationList, annotation);
-			annotation = getJavaAnnotation( Lob.class );
-			addIfNotNull(annotationList, annotation);
-			annotation = getJavaAnnotation( Enumerated.class );
-			addIfNotNull(annotationList, annotation);
-			annotation = getJavaAnnotation( Temporal.class );
-			addIfNotNull(annotationList, annotation);
-			annotation = getJavaAnnotation( Column.class );
-			addIfNotNull(annotationList, annotation);
-			annotation = getJavaAnnotation( Columns.class );
-			addIfNotNull(annotationList, annotation);
-			annotation = getJavaAnnotation( AttributeOverride.class );
-			addIfNotNull(annotationList, annotation);
-			annotation = getJavaAnnotation( AttributeOverrides.class );
-			addIfNotNull(annotationList, annotation);
-			annotation = getJavaAnnotation( AssociationOverride.class );
-			addIfNotNull(annotationList, annotation);
-			annotation = getJavaAnnotation( AssociationOverrides.class );
-			addIfNotNull(annotationList, annotation);
-		}
-	}
-
-	private void getEnumerated(List<Annotation> annotationList, Element element) {
-		Element subElement = element != null ? element.element( "enumerated" ) : null;
-		if ( subElement != null ) {
-			AnnotationDescriptor ad = new AnnotationDescriptor( Enumerated.class );
-			String enumerated = subElement.getTextTrim();
-			if ( "ORDINAL".equalsIgnoreCase( enumerated ) ) {
-				ad.setValue( "value", EnumType.ORDINAL );
-			}
-			else if ( "STRING".equalsIgnoreCase( enumerated ) ) {
-				ad.setValue( "value", EnumType.STRING );
-			}
-			else if ( StringHelper.isNotEmpty( enumerated ) ) {
-				throw new AnnotationException( "Unknown EnumType: " + enumerated + ". " + SCHEMA_VALIDATION );
-			}
-			annotationList.add( AnnotationFactory.create( ad ) );
-		}
-	}
-
-	private void getLob(List<Annotation> annotationList, Element element) {
-		Element subElement = element != null ? element.element( "lob" ) : null;
-		if ( subElement != null ) {
-			annotationList.add( AnnotationFactory.create( new AnnotationDescriptor( Lob.class ) ) );
-		}
-	}
-
-	private void getFetchType(AnnotationDescriptor descriptor, Element element) {
-		String fetchString = element != null ? element.attributeValue( "fetch" ) : null;
-		if ( fetchString != null ) {
-			if ( "eager".equalsIgnoreCase( fetchString ) ) {
-				descriptor.setValue( "fetch", FetchType.EAGER );
-			}
-			else if ( "lazy".equalsIgnoreCase( fetchString ) ) {
-				descriptor.setValue( "fetch", FetchType.LAZY );
-			}
-		}
-	}
-
-	private void getEmbeddedId(List<Annotation> annotationList, XMLContext.Default defaults) {
-		for ( Element element : elementsForProperty ) {
-			if ( "embedded-id".equals( element.getName() ) ) {
-				if ( isProcessingId( defaults ) ) {
-					Annotation annotation = getAttributeOverrides( element, defaults );
-					addIfNotNull(annotationList, annotation);
-					annotation = getAssociationOverrides( element, defaults );
-					addIfNotNull(annotationList, annotation);
-					AnnotationDescriptor ad = new AnnotationDescriptor( EmbeddedId.class );
-					annotationList.add( AnnotationFactory.create( ad ) );
-				}
-//				else {
-//					if ( defaults.canUseJavaAnnotations() ) {
-//						if ( ! properOverridingOnMetadataNonComplete ) {
-//							//check that id exists on the other attribute
-//							//TODO Id too?
-//							if ( mirroredAttribute == null || ! mirroredAttribute.isAnnotationPresent(
-//									EmbeddedId.class
-//							) ) {
-//								throw new AnnotationException(
-//										"Cannot override an property with <embedded-id> not having an @EmbeddedId already"
-//								);
-//							}
-//						}
-//					}
-//				}
-			}
-		}
-		if ( elementsForProperty.size() == 0 && defaults.canUseJavaAnnotations() ) {
-			Annotation annotation = getJavaAnnotation( EmbeddedId.class );
-			if ( annotation != null ) {
-				annotationList.add( annotation );
-				annotation = getJavaAnnotation( Column.class );
-				addIfNotNull(annotationList, annotation);
-				annotation = getJavaAnnotation( Columns.class );
-				addIfNotNull(annotationList, annotation);
-				annotation = getJavaAnnotation( GeneratedValue.class );
-				addIfNotNull(annotationList, annotation);
-				annotation = getJavaAnnotation( Temporal.class );
-				addIfNotNull(annotationList, annotation);
-				annotation = getJavaAnnotation( TableGenerator.class );
-				addIfNotNull(annotationList, annotation);
-				annotation = getJavaAnnotation( SequenceGenerator.class );
-				addIfNotNull(annotationList, annotation);
-				annotation = getJavaAnnotation( AttributeOverride.class );
-				addIfNotNull(annotationList, annotation);
-				annotation = getJavaAnnotation( AttributeOverrides.class );
-				addIfNotNull(annotationList, annotation);
-				annotation = getJavaAnnotation( AssociationOverride.class );
-				addIfNotNull(annotationList, annotation);
-				annotation = getJavaAnnotation( AssociationOverrides.class );
-				addIfNotNull(annotationList, annotation);
-			}
-		}
-	}
-
-	private void preCalculateElementsForProperty(Element tree) {
-		elementsForProperty = new ArrayList<Element>();
-		Element element = tree != null ? tree.element( "attributes" ) : null;
-		//put entity.attributes elements
-		if ( element != null ) {
-			for ( Element subelement : (List<Element>) element.elements() ) {
-				if ( propertyName.equals( subelement.attributeValue( "name" ) ) ) {
-					elementsForProperty.add( subelement );
-				}
-			}
-		}
-		//add pre-* etc from entity and pure entity listener classes
-		if (tree != null) {
-			for ( Element subelement : (List<Element>) tree.elements() ) {
-				if ( propertyName.equals( subelement.attributeValue( "method-name" ) ) ) {
-					elementsForProperty.add( subelement );
-				}
-			}
-		}
-	}
-
-	private void getId(List<Annotation> annotationList, XMLContext.Default defaults) {
-		for ( Element element : elementsForProperty ) {
-			if ( "id".equals( element.getName() ) ) {
-				boolean processId = isProcessingId( defaults );
-				if ( processId ) {
-					Annotation annotation = buildColumns( element );
-					addIfNotNull(annotationList, annotation);
-					annotation = buildGeneratedValue( element );
-					addIfNotNull(annotationList, annotation);
-					getTemporal( annotationList, element );
-					//FIXME: fix the priority of xml over java for generator names
-					annotation = getTableGenerator( element, defaults );
-					addIfNotNull(annotationList, annotation);
-					annotation = getSequenceGenerator( element, defaults );
-					addIfNotNull(annotationList, annotation);
-					AnnotationDescriptor id = new AnnotationDescriptor( Id.class );
-					annotationList.add( AnnotationFactory.create( id ) );
-				}
-//				else {
-//					if ( defaults.canUseJavaAnnotations() ) {
-//						if ( ! properOverridingOnMetadataNonComplete ) {
-//							//check that id exists on the other attribute
-//							//TODO EmbeddedId too?
-//							if ( mirroredAttribute == null || ! mirroredAttribute.isAnnotationPresent( Id.class ) ) {
-//								throw new AnnotationException(
-//										"Cannot override a property with <id> it does not have an @Id already"
-//								);
-//							}
-//						}
-//					}
-//				}
-			}
-		}
-		if ( elementsForProperty.size() == 0 && defaults.canUseJavaAnnotations() ) {
-			Annotation annotation = getJavaAnnotation( Id.class );
-			if ( annotation != null ) {
-				annotationList.add( annotation );
-				annotation = getJavaAnnotation( Column.class );
-				addIfNotNull(annotationList, annotation);
-				annotation = getJavaAnnotation( Columns.class );
-				addIfNotNull(annotationList, annotation);
-				annotation = getJavaAnnotation( GeneratedValue.class );
-				addIfNotNull(annotationList, annotation);
-				annotation = getJavaAnnotation( Temporal.class );
-				addIfNotNull(annotationList, annotation);
-				annotation = getJavaAnnotation( TableGenerator.class );
-				addIfNotNull(annotationList, annotation);
-				annotation = getJavaAnnotation( SequenceGenerator.class );
-				addIfNotNull(annotationList, annotation);
-				annotation = getJavaAnnotation( AttributeOverride.class );
-				addIfNotNull(annotationList, annotation);
-				annotation = getJavaAnnotation( AttributeOverrides.class );
-				addIfNotNull(annotationList, annotation);
-				annotation = getJavaAnnotation( AssociationOverride.class );
-				addIfNotNull(annotationList, annotation);
-				annotation = getJavaAnnotation( AssociationOverrides.class );
-				addIfNotNull(annotationList, annotation);
-			}
-		}
-	}
-
-	private boolean isProcessingId(XMLContext.Default defaults) {
-		boolean isExplicit = defaults.getAccess() != null;
-		boolean correctAccess =
-				( PropertyType.PROPERTY.equals( propertyType ) && "property".equals( defaults.getAccess() ) )
-				|| ( PropertyType.FIELD.equals( propertyType ) && "field".equals( defaults.getAccess() ) );
-		boolean hasId = defaults.canUseJavaAnnotations()
-				&& ( isJavaAnnotationPresent( Id.class ) || isJavaAnnotationPresent( EmbeddedId.class ) );
-		//if ( properAccessOnMetadataComplete || properOverridingOnMetadataNonComplete ) {
-		boolean mirrorAttributeIsId = defaults.canUseJavaAnnotations() &&
-				( mirroredAttribute != null &&
-					( mirroredAttribute.isAnnotationPresent(Id.class)
-					|| mirroredAttribute.isAnnotationPresent( EmbeddedId.class ) ) );
-		boolean propertyIsDefault = PropertyType.PROPERTY.equals( propertyType )
-				&& ! mirrorAttributeIsId;
-		return correctAccess || ( ! isExplicit && hasId ) || ( ! isExplicit && propertyIsDefault );
-	}
-
-	private Columns buildColumns(Element element) {
-		List<Element> subelements = element.elements( "column" );
-		List<Column> columns = new ArrayList<Column>( subelements.size() );
-		for ( Element subelement : subelements ) {
-			columns.add( getColumn( subelement, false, element ) );
-		}
-		if ( columns.size() > 0 ) {
-			AnnotationDescriptor columnsDescr = new AnnotationDescriptor( Columns.class );
-			columnsDescr.setValue( "columns", columns.toArray( new Column[ columns.size() ] ) );
-			return AnnotationFactory.create( columnsDescr );
-		}
-		else {
-			return null;
-		}
-	}
-
-	private GeneratedValue buildGeneratedValue(Element element) {
-		Element subElement = element != null ? element.element( "generated-value" ) : null;
-		if ( subElement != null ) {
-			AnnotationDescriptor ad = new AnnotationDescriptor( GeneratedValue.class );
-			String strategy = subElement.attributeValue( "strategy" );
-			if ( "TABLE".equalsIgnoreCase( strategy ) ) {
-				ad.setValue( "strategy", GenerationType.TABLE );
-			}
-			else if ( "SEQUENCE".equalsIgnoreCase( strategy ) ) {
-				ad.setValue( "strategy", GenerationType.SEQUENCE );
-			}
-			else if ( "IDENTITY".equalsIgnoreCase( strategy ) ) {
-				ad.setValue( "strategy", GenerationType.IDENTITY );
-			}
-			else if ( "AUTO".equalsIgnoreCase( strategy ) ) {
-				ad.setValue( "strategy", GenerationType.AUTO );
-			}
-			else if ( StringHelper.isNotEmpty( strategy ) ) {
-				throw new AnnotationException( "Unknown GenerationType: " + strategy + ". " + SCHEMA_VALIDATION );
-			}
-			copyStringAttribute( ad, subElement, "generator", false );
-			return AnnotationFactory.create( ad );
-		}
-		else {
-			return null;
-		}
-	}
-
-	private void getTemporal(List<Annotation> annotationList, Element element) {
-		Element subElement = element != null ? element.element( "temporal" ) : null;
-		if ( subElement != null ) {
-			AnnotationDescriptor ad = new AnnotationDescriptor( Temporal.class );
-			String temporal = subElement.getTextTrim();
-			if ( "DATE".equalsIgnoreCase( temporal ) ) {
-				ad.setValue( "value", TemporalType.DATE );
-			}
-			else if ( "TIME".equalsIgnoreCase( temporal ) ) {
-				ad.setValue( "value", TemporalType.TIME );
-			}
-			else if ( "TIMESTAMP".equalsIgnoreCase( temporal ) ) {
-				ad.setValue( "value", TemporalType.TIMESTAMP );
-			}
-			else if ( StringHelper.isNotEmpty( temporal ) ) {
-				throw new AnnotationException( "Unknown TemporalType: " + temporal + ". " + SCHEMA_VALIDATION );
-			}
-			annotationList.add( AnnotationFactory.create( ad ) );
-		}
-	}
-
-	private AssociationOverrides getAssociationOverrides(Element tree, XMLContext.Default defaults) {
-		List<AssociationOverride> attributes = (List<AssociationOverride>) buildAssociationOverrides( tree );
-		if ( defaults.canUseJavaAnnotations() ) {
-			AssociationOverride annotation = getJavaAnnotation( AssociationOverride.class );
-			addAssociationOverrideIfNeeded( annotation, attributes );
-			AssociationOverrides annotations = getJavaAnnotation( AssociationOverrides.class );
-			if ( annotations != null ) {
-				for ( AssociationOverride current : annotations.value() ) {
-					addAssociationOverrideIfNeeded( current, attributes );
-				}
-			}
-		}
-		if ( attributes.size() > 0 ) {
-			AnnotationDescriptor ad = new AnnotationDescriptor( AssociationOverrides.class );
-			ad.setValue( "value", attributes.toArray( new AssociationOverride[ attributes.size() ] ) );
-			return AnnotationFactory.create( ad );
-		}
-		else {
-			return null;
-		}
-	}
-
-	private List<AssociationOverride> buildAssociationOverrides(Element element) {
-		List<Element> subelements = element == null ? null : element.elements( "association-override" );
-		List<AssociationOverride> overrides = new ArrayList<AssociationOverride>();
-		if ( subelements != null && subelements.size() > 0 ) {
-			for ( Element current : subelements ) {
-				AnnotationDescriptor override = new AnnotationDescriptor( AssociationOverride.class );
-				copyStringAttribute( override, current, "name", true );
-				override.setValue( "joinColumns", getJoinColumns( current, false ) );
-				overrides.add( (AssociationOverride) AnnotationFactory.create( override ) );
-			}
-		}
-		return overrides;
-	}
-
-	private JoinColumn[] getJoinColumns(Element element, boolean isInverse) {
-		List<Element> subelements = element != null ?
-				element.elements( isInverse ? "inverse-join-column" : "join-column" ) :
-				null;
-		List<JoinColumn> joinColumns = new ArrayList<JoinColumn>();
-		if ( subelements != null ) {
-			for ( Element subelement : subelements ) {
-				AnnotationDescriptor column = new AnnotationDescriptor( JoinColumn.class );
-				copyStringAttribute( column, subelement, "name", false );
-				copyStringAttribute( column, subelement, "referenced-column-name", false );
-				copyBooleanAttribute( column, subelement, "unique" );
-				copyBooleanAttribute( column, subelement, "nullable" );
-				copyBooleanAttribute( column, subelement, "insertable" );
-				copyBooleanAttribute( column, subelement, "updatable" );
-				copyStringAttribute( column, subelement, "column-definition", false );
-				copyStringAttribute( column, subelement, "table", false );
-				joinColumns.add( (JoinColumn) AnnotationFactory.create( column ) );
-			}
-		}
-		return joinColumns.toArray( new JoinColumn[ joinColumns.size() ] );
-	}
-
-	private void addAssociationOverrideIfNeeded(AssociationOverride annotation, List<AssociationOverride> overrides) {
-		if ( annotation != null ) {
-			String overrideName = annotation.name();
-			boolean present = false;
-			for ( AssociationOverride current : overrides ) {
-				if ( current.name().equals( overrideName ) ) {
-					present = true;
-					break;
-				}
-			}
-			if ( !present ) overrides.add( annotation );
-		}
-	}
-
-	private AttributeOverrides getAttributeOverrides(Element tree, XMLContext.Default defaults) {
-		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 = getJavaAnnotation( AttributeOverride.class );
-			addAttributeOverrideIfNeeded( annotation, attributes );
-			AttributeOverrides annotations = getJavaAnnotation( AttributeOverrides.class );
-			if ( annotations != null ) {
-				for ( AttributeOverride current : annotations.value() ) {
-					addAttributeOverrideIfNeeded( current, attributes );
-				}
-			}
-		}
-		if ( attributes.size() > 0 ) {
-			AnnotationDescriptor ad = new AnnotationDescriptor( AttributeOverrides.class );
-			ad.setValue( "value", attributes.toArray( new AttributeOverride[ attributes.size() ] ) );
-			return AnnotationFactory.create( ad );
-		}
-		else {
-			return null;
-		}
-	}
-
-	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;
-				override.setValue( "column", getColumn( column, true, current ) );
-				overrides.add( (AttributeOverride) AnnotationFactory.create( override ) );
-			}
-		}
-		return overrides;
-	}
-
-	private Column getColumn(Element element, boolean isMandatory, Element current) {
-		//Element subelement = element != null ? element.element( "column" ) : null;
-		if ( element != null ) {
-			AnnotationDescriptor column = new AnnotationDescriptor( Column.class );
-			copyStringAttribute( column, element, "name", false );
-			copyBooleanAttribute( column, element, "unique" );
-			copyBooleanAttribute( column, element, "nullable" );
-			copyBooleanAttribute( column, element, "insertable" );
-			copyBooleanAttribute( column, element, "updatable" );
-			copyStringAttribute( column, element, "column-definition", false );
-			copyStringAttribute( column, element, "table", false );
-			copyIntegerAttribute( column, element, "length" );
-			copyIntegerAttribute( column, element, "precision" );
-			copyIntegerAttribute( column, element, "scale" );
-			return (Column) AnnotationFactory.create( column );
-		}
-		else {
-			if ( isMandatory ) {
-				throw new AnnotationException( current.getPath() + ".column is mandatory. " + SCHEMA_VALIDATION );
-			}
-			return null;
-		}
-	}
-
-	private void addAttributeOverrideIfNeeded(AttributeOverride annotation, List<AttributeOverride> overrides) {
-		if ( annotation != null ) {
-			String overrideName = annotation.name();
-			boolean present = false;
-			for ( AttributeOverride current : overrides ) {
-				if ( current.name().equals( overrideName ) ) {
-					present = true;
-					break;
-				}
-			}
-			if ( !present ) overrides.add( annotation );
-		}
-	}
-
-	private AccessType getAccessType(Element tree, XMLContext.Default defaults) {
-		String access = tree == null ? null : tree.attributeValue( "access" );
-		if ( "FIELD".equals( access ) || "PROPERTY".equals( access ) ) {
-			access = access.toLowerCase();
-		}
-		if ( access != null ) {
-			AnnotationDescriptor ad = new AnnotationDescriptor( AccessType.class );
-			ad.setValue( "value", access );
-			return AnnotationFactory.create( ad );
-		}
-		else if ( defaults.canUseJavaAnnotations() && isJavaAnnotationPresent( AccessType.class ) ) {
-			AccessType annotation = getJavaAnnotation( AccessType.class );
-			return annotation;
-		}
-		else if ( defaults.getAccess() != null ) {
-			AnnotationDescriptor ad = new AnnotationDescriptor( AccessType.class );
-			ad.setValue( "value", defaults.getAccess() );
-			return AnnotationFactory.create( ad );
-		}
-		else {
-			return null;
-		}
-	}
-
-	private ExcludeSuperclassListeners getExcludeSuperclassListeners(Element tree, XMLContext.Default defaults) {
-		return (ExcludeSuperclassListeners) getMarkerAnnotation( ExcludeSuperclassListeners.class, tree, defaults );
-	}
-
-	private ExcludeDefaultListeners getExcludeDefaultListeners(Element tree, XMLContext.Default defaults) {
-		return (ExcludeDefaultListeners) getMarkerAnnotation( ExcludeDefaultListeners.class, tree, defaults );
-	}
-
-	private Annotation getMarkerAnnotation(
-			Class<? extends Annotation> clazz, Element element, XMLContext.Default defaults
-	) {
-		Element subelement = element == null ? null : element.element( annotationToXml.get( clazz ) );
-		if ( subelement != null ) {
-			return AnnotationFactory.create( new AnnotationDescriptor( clazz ) );
-		}
-		else if ( defaults.canUseJavaAnnotations() ) {
-			//TODO wonder whether it should be excluded so that user can undone it
-			return getJavaAnnotation( clazz );
-		}
-		else {
-			return null;
-		}
-	}
-
-	private SqlResultSetMappings getSqlResultSetMappings(Element tree, XMLContext.Default defaults) {
-		List<SqlResultSetMapping> results = (List<SqlResultSetMapping>) buildSqlResultsetMappings( tree, defaults );
-		if ( defaults.canUseJavaAnnotations() ) {
-			SqlResultSetMapping annotation = getJavaAnnotation( SqlResultSetMapping.class );
-			addSqlResultsetMappingIfNeeded( annotation, results );
-			SqlResultSetMappings annotations = getJavaAnnotation( SqlResultSetMappings.class );
-			if ( annotations != null ) {
-				for ( SqlResultSetMapping current : annotations.value() ) {
-					addSqlResultsetMappingIfNeeded( current, results );
-				}
-			}
-		}
-		if ( results.size() > 0 ) {
-			AnnotationDescriptor ad = new AnnotationDescriptor( SqlResultSetMappings.class );
-			ad.setValue( "value", results.toArray( new SqlResultSetMapping[ results.size() ] ) );
-			return AnnotationFactory.create( ad );
-		}
-		else {
-			return null;
-		}
-	}
-
-	public static List<SqlResultSetMapping> buildSqlResultsetMappings(Element element, XMLContext.Default defaults) {
-		if ( element == null ) return new ArrayList<SqlResultSetMapping>();
-		List resultsetElementList = element.elements( "sql-result-set-mapping" );
-		List<SqlResultSetMapping> resultsets = new ArrayList<SqlResultSetMapping>();
-		Iterator it = resultsetElementList.listIterator();
-		while ( it.hasNext() ) {
-			Element subelement = (Element) it.next();
-			AnnotationDescriptor ann = new AnnotationDescriptor( SqlResultSetMapping.class );
-			copyStringAttribute( ann, subelement, "name", true );
-			List<Element> elements = subelement.elements( "entity-result" );
-			List<EntityResult> entityResults = new ArrayList<EntityResult>( elements.size() );
-			for ( Element entityResult : elements ) {
-				AnnotationDescriptor entityResultDescriptor = new AnnotationDescriptor( EntityResult.class );
-				String clazzName = entityResult.attributeValue( "entity-class" );
-				if ( clazzName == null ) {
-					throw new AnnotationException( "<entity-result> without entity-class. " + SCHEMA_VALIDATION );
-				}
-				Class clazz = null;
-				try {
-					clazz = ReflectHelper.classForName(
-							XMLContext.buildSafeClassName( clazzName, defaults ),
-							EJB3OverridenAnnotationReader.class
-					);
-				}
-				catch (ClassNotFoundException e) {
-					throw new AnnotationException( "Unable to find entity-class: " + clazzName, e );
-				}
-				entityResultDescriptor.setValue( "entityClass", clazz );
-				copyStringAttribute( entityResultDescriptor, entityResult, "discriminator-column", false );
-				List<FieldResult> fieldResults = new ArrayList<FieldResult>();
-				for ( Element fieldResult : (List<Element>) entityResult.elements( "field-result" ) ) {
-					AnnotationDescriptor fieldResultDescriptor = new AnnotationDescriptor( FieldResult.class );
-					copyStringAttribute( fieldResultDescriptor, fieldResult, "name", true );
-					copyStringAttribute( fieldResultDescriptor, fieldResult, "column", true );
-					fieldResults.add( (FieldResult) AnnotationFactory.create( fieldResultDescriptor ) );
-				}
-				entityResultDescriptor.setValue(
-						"fields", fieldResults.toArray( new FieldResult[ fieldResults.size() ] )
-				);
-				entityResults.add( (EntityResult) AnnotationFactory.create( entityResultDescriptor ) );
-			}
-			ann.setValue( "entities", entityResults.toArray( new EntityResult[ entityResults.size() ] ) );
-
-			elements = subelement.elements( "column-result" );
-			List<ColumnResult> columnResults = new ArrayList<ColumnResult>( elements.size() );
-			for ( Element columnResult : elements ) {
-				AnnotationDescriptor columnResultDescriptor = new AnnotationDescriptor( ColumnResult.class );
-				copyStringAttribute( columnResultDescriptor, columnResult, "name", true );
-				columnResults.add( (ColumnResult) AnnotationFactory.create( columnResultDescriptor ) );
-			}
-			ann.setValue( "columns", columnResults.toArray( new ColumnResult[ columnResults.size() ] ) );
-			//FIXME there is never such a result-class, get rid of it?
-			String clazzName = subelement.attributeValue( "result-class" );
-			if ( StringHelper.isNotEmpty( clazzName ) ) {
-				Class clazz = null;
-				try {
-					clazz = ReflectHelper.classForName(
-							XMLContext.buildSafeClassName( clazzName, defaults ),
-							EJB3OverridenAnnotationReader.class
-					);
-				}
-				catch (ClassNotFoundException e) {
-					throw new AnnotationException( "Unable to find entity-class: " + clazzName, e );
-				}
-				ann.setValue( "resultClass", clazz );
-			}
-			copyStringAttribute( ann, subelement, "result-set-mapping", false );
-			resultsets.add( (SqlResultSetMapping) AnnotationFactory.create( ann ) );
-		}
-		return resultsets;
-	}
-
-	private void addSqlResultsetMappingIfNeeded(SqlResultSetMapping annotation, List<SqlResultSetMapping> resultsets) {
-		if ( annotation != null ) {
-			String resultsetName = annotation.name();
-			boolean present = false;
-			for ( SqlResultSetMapping current : resultsets ) {
-				if ( current.name().equals( resultsetName ) ) {
-					present = true;
-					break;
-				}
-			}
-			if ( !present ) resultsets.add( annotation );
-		}
-	}
-
-	private NamedQueries getNamedQueries(Element tree, XMLContext.Default defaults) {
-        //TODO avoid the Proxy Creation (@NamedQueries) when possible
-        List<NamedQuery> queries = (List<NamedQuery>) buildNamedQueries( tree, false, defaults );
-		if ( defaults.canUseJavaAnnotations() ) {
-			NamedQuery annotation = getJavaAnnotation( NamedQuery.class );
-			addNamedQueryIfNeeded( annotation, queries );
-			NamedQueries annotations = getJavaAnnotation( NamedQueries.class );
-			if ( annotations != null ) {
-				for ( NamedQuery current : annotations.value() ) {
-					addNamedQueryIfNeeded( current, queries );
-				}
-			}
-		}
-		if ( queries.size() > 0 ) {
-			AnnotationDescriptor ad = new AnnotationDescriptor( NamedQueries.class );
-			ad.setValue( "value", queries.toArray( new NamedQuery[ queries.size() ] ) );
-			return AnnotationFactory.create( ad );
-		}
-		else {
-			return null;
-		}
-	}
-
-	private void addNamedQueryIfNeeded(NamedQuery annotation, List<NamedQuery> queries) {
-		if ( annotation != null ) {
-			String queryName = annotation.name();
-			boolean present = false;
-			for ( NamedQuery current : queries ) {
-				if ( current.name().equals( queryName ) ) {
-					present = true;
-					break;
-				}
-			}
-			if ( !present ) queries.add( annotation );
-		}
-	}
-
-	private NamedNativeQueries getNamedNativeQueries(Element tree, XMLContext.Default defaults) {
-		List<NamedNativeQuery> queries = (List<NamedNativeQuery>) buildNamedQueries( tree, true, defaults );
-		if ( defaults.canUseJavaAnnotations() ) {
-			NamedNativeQuery annotation = getJavaAnnotation( NamedNativeQuery.class );
-			addNamedNativeQueryIfNeeded( annotation, queries );
-			NamedNativeQueries annotations = getJavaAnnotation( NamedNativeQueries.class );
-			if ( annotations != null ) {
-				for ( NamedNativeQuery current : annotations.value() ) {
-					addNamedNativeQueryIfNeeded( current, queries );
-				}
-			}
-		}
-		if ( queries.size() > 0 ) {
-			AnnotationDescriptor ad = new AnnotationDescriptor( NamedNativeQueries.class );
-			ad.setValue( "value", queries.toArray( new NamedNativeQuery[ queries.size() ] ) );
-			return AnnotationFactory.create( ad );
-		}
-		else {
-			return null;
-		}
-	}
-
-	private void addNamedNativeQueryIfNeeded(NamedNativeQuery annotation, List<NamedNativeQuery> queries) {
-		if ( annotation != null ) {
-			String queryName = annotation.name();
-			boolean present = false;
-			for ( NamedNativeQuery current : queries ) {
-				if ( current.name().equals( queryName ) ) {
-					present = true;
-					break;
-				}
-			}
-			if ( !present ) queries.add( annotation );
-		}
-	}
-
-	public static List buildNamedQueries(Element element, boolean isNative, XMLContext.Default defaults) {
-		if ( element == null ) return new ArrayList();
-		List namedQueryElementList = isNative ?
-				element.elements( "named-native-query" ) :
-				element.elements( "named-query" );
-		List namedQueries = new ArrayList();
-		Iterator it = namedQueryElementList.listIterator();
-		while ( it.hasNext() ) {
-			Element subelement = (Element) it.next();
-			AnnotationDescriptor ann = new AnnotationDescriptor(
-					isNative ? NamedNativeQuery.class : NamedQuery.class
-			);
-			copyStringAttribute( ann, subelement, "name", false );
-			Element queryElt = subelement.element( "query" );
-			if ( queryElt == null ) throw new AnnotationException( "No <query> element found." + SCHEMA_VALIDATION );
-			ann.setValue( "query", queryElt.getTextTrim() );
-			List<Element> elements = subelement.elements( "hint" );
-			List<QueryHint> queryHints = new ArrayList<QueryHint>( elements.size() );
-			for ( Element hint : elements ) {
-				AnnotationDescriptor hintDescriptor = new AnnotationDescriptor( QueryHint.class );
-				String value = hint.attributeValue( "name" );
-				if ( value == null ) throw new AnnotationException( "<hint> without name. " + SCHEMA_VALIDATION );
-				hintDescriptor.setValue( "name", value );
-				value = hint.attributeValue( "value" );
-				if ( value == null ) throw new AnnotationException( "<hint> without value. " + SCHEMA_VALIDATION );
-				hintDescriptor.setValue( "value", value );
-				queryHints.add( (QueryHint) AnnotationFactory.create( hintDescriptor ) );
-			}
-			ann.setValue( "hints", queryHints.toArray( new QueryHint[ queryHints.size() ] ) );
-			String clazzName = subelement.attributeValue( "result-class" );
-			if ( StringHelper.isNotEmpty( clazzName ) ) {
-				Class clazz = null;
-				try {
-					clazz = ReflectHelper.classForName(
-							XMLContext.buildSafeClassName( clazzName, defaults ),
-							EJB3OverridenAnnotationReader.class
-					);
-				}
-				catch (ClassNotFoundException e) {
-					throw new AnnotationException( "Unable to find entity-class: " + clazzName, e );
-				}
-				ann.setValue( "resultClass", clazz );
-			}
-			copyStringAttribute( ann, subelement, "result-set-mapping", false );
-			namedQueries.add( AnnotationFactory.create( ann ) );
-		}
-		return namedQueries;
-	}
-
-	private TableGenerator getTableGenerator(Element tree, XMLContext.Default defaults) {
-		Element element = tree != null ? tree.element( annotationToXml.get( TableGenerator.class ) ) : null;
-		if ( element != null ) {
-			return buildTableGeneratorAnnotation( element, defaults );
-		}
-		else if ( defaults.canUseJavaAnnotations() && isJavaAnnotationPresent( TableGenerator.class ) ) {
-			TableGenerator tableAnn = getJavaAnnotation( 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;
-		}
-	}
-
-	public static TableGenerator buildTableGeneratorAnnotation(Element element, XMLContext.Default defaults) {
-		AnnotationDescriptor ad = new AnnotationDescriptor( TableGenerator.class );
-		copyStringAttribute( ad, element, "name", false );
-		copyStringAttribute( ad, element, "table", false );
-		copyStringAttribute( ad, element, "catalog", false );
-		copyStringAttribute( ad, element, "schema", false );
-		copyStringAttribute( ad, element, "pk-column-name", false );
-		copyStringAttribute( ad, element, "value-column-name", false );
-		copyStringAttribute( ad, element, "pk-column-value", false );
-		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 );
-	}
-
-	private SequenceGenerator getSequenceGenerator(Element tree, XMLContext.Default defaults) {
-		Element element = tree != null ? tree.element( annotationToXml.get( SequenceGenerator.class ) ) : null;
-		if ( element != null ) {
-			return buildSequenceGeneratorAnnotation( element );
-		}
-		else if ( defaults.canUseJavaAnnotations() ) {
-			return getJavaAnnotation( SequenceGenerator.class );
-		}
-		else {
-			return null;
-		}
-	}
-
-	public static SequenceGenerator buildSequenceGeneratorAnnotation(Element element) {
-		if (element != null) {
-			AnnotationDescriptor ad = new AnnotationDescriptor( SequenceGenerator.class );
-			copyStringAttribute( ad, element, "name", false );
-			copyStringAttribute( ad, element, "sequence-name", false );
-			copyIntegerAttribute( ad, element, "initial-value" );
-			copyIntegerAttribute( ad, element, "allocation-size" );
-			return AnnotationFactory.create( ad );
-		}
-		else {
-			return null;
-		}
-	}
-
-	private DiscriminatorColumn getDiscriminatorColumn(Element tree, XMLContext.Default defaults) {
-		Element element = tree != null ? tree.element( "discriminator-column" ) : null;
-		if ( element != null ) {
-			AnnotationDescriptor ad = new AnnotationDescriptor( DiscriminatorColumn.class );
-			copyStringAttribute( ad, element, "name", false );
-			copyStringAttribute( ad, element, "column-definition", false );
-			String value = element.attributeValue( "discriminator-type" );
-			DiscriminatorType type = DiscriminatorType.STRING;
-			if ( value != null ) {
-				if ( "STRING".equals( value ) ) {
-					type = DiscriminatorType.STRING;
-				}
-				else if ( "CHAR".equals( value ) ) {
-					type = DiscriminatorType.CHAR;
-				}
-				else if ( "INTEGER".equals( value ) ) {
-					type = DiscriminatorType.INTEGER;
-				}
-				else {
-					throw new AnnotationException(
-							"Unknown DiscrimiatorType in XML: " + value + " (" + SCHEMA_VALIDATION + ")"
-					);
-				}
-			}
-			ad.setValue( "discriminatorType", type );
-			copyIntegerAttribute( ad, element, "length" );
-			return AnnotationFactory.create( ad );
-		}
-		else if ( defaults.canUseJavaAnnotations() ) {
-			return getJavaAnnotation( DiscriminatorColumn.class );
-		}
-		else {
-			return null;
-		}
-	}
-
-	private DiscriminatorValue getDiscriminatorValue(Element tree, XMLContext.Default defaults) {
-		Element element = tree != null ? tree.element( "discriminator-value" ) : null;
-		if ( element != null ) {
-			AnnotationDescriptor ad = new AnnotationDescriptor( DiscriminatorValue.class );
-			copyStringElement( element, ad, "value" );
-			return AnnotationFactory.create( ad );
-		}
-		else if ( defaults.canUseJavaAnnotations() ) {
-			return getJavaAnnotation( DiscriminatorValue.class );
-		}
-		else {
-			return null;
-		}
-	}
-
-	private Inheritance getInheritance(Element tree, XMLContext.Default defaults) {
-		Element element = tree != null ? tree.element( "inheritance" ) : null;
-		if ( element != null ) {
-			AnnotationDescriptor ad = new AnnotationDescriptor( Inheritance.class );
-			Attribute attr = element.attribute( "strategy" );
-			InheritanceType strategy = InheritanceType.SINGLE_TABLE;
-			if ( attr != null ) {
-				String value = attr.getValue();
-				if ( "SINGLE_TABLE".equals( value ) ) {
-					strategy = InheritanceType.SINGLE_TABLE;
-				}
-				else if ( "JOINED".equals( value ) ) {
-					strategy = InheritanceType.JOINED;
-				}
-				else if ( "TABLE_PER_CLASS".equals( value ) ) {
-					strategy = InheritanceType.TABLE_PER_CLASS;
-				}
-				else {
-					throw new AnnotationException(
-							"Unknown InheritanceType in XML: " + value + " (" + SCHEMA_VALIDATION + ")"
-					);
-				}
-			}
-			ad.setValue( "strategy", strategy );
-			return AnnotationFactory.create( ad );
-		}
-		else if ( defaults.canUseJavaAnnotations() ) {
-			return getJavaAnnotation( Inheritance.class );
-		}
-		else {
-			return null;
-		}
-	}
-
-	private IdClass getIdClass(Element tree, XMLContext.Default defaults) {
-		Element element = tree == null ? null : tree.element( "id-class" );
-		if ( element != null ) {
-			Attribute attr = element.attribute( "class" );
-			if ( attr != null ) {
-				AnnotationDescriptor ad = new AnnotationDescriptor( IdClass.class );
-				Class clazz = null;
-				try {
-					clazz = ReflectHelper.classForName(
-							XMLContext.buildSafeClassName( attr.getValue(), defaults ),
-							this.getClass()
-					);
-				}
-				catch (ClassNotFoundException e) {
-					throw new AnnotationException( "Unable to find id-class: " + attr.getValue(), e );
-				}
-				ad.setValue( "value", clazz );
-				return AnnotationFactory.create( ad );
-			}
-			else {
-				throw new AnnotationException( "id-class without class. " + SCHEMA_VALIDATION );
-			}
-		}
-		else if ( defaults.canUseJavaAnnotations() ) {
-			return getJavaAnnotation( IdClass.class );
-		}
-		else {
-			return null;
-		}
-	}
-
-	private PrimaryKeyJoinColumns getPrimaryKeyJoinColumns(Element element, XMLContext.Default defaults) {
-		PrimaryKeyJoinColumn[] columns = buildPrimaryKeyJoinColumns( element );
-		if ( columns.length == 0 && defaults.canUseJavaAnnotations() ) {
-			PrimaryKeyJoinColumn annotation = getJavaAnnotation( PrimaryKeyJoinColumn.class );
-			if ( annotation != null ) {
-				columns = new PrimaryKeyJoinColumn[]{annotation};
-			}
-			else {
-				PrimaryKeyJoinColumns annotations = getJavaAnnotation( PrimaryKeyJoinColumns.class );
-				columns = annotations != null ? annotations.value() : columns;
-			}
-		}
-		if ( columns.length > 0 ) {
-			AnnotationDescriptor ad = new AnnotationDescriptor( PrimaryKeyJoinColumns.class );
-			ad.setValue( "value", columns );
-			return AnnotationFactory.create( ad );
-		}
-		else {
-			return null;
-		}
-	}
-
-	private Entity getEntity(Element tree, XMLContext.Default defaults) {
-		if ( tree == null ) {
-			return defaults.canUseJavaAnnotations() ? getJavaAnnotation( Entity.class ) : null;
-		}
-		else {
-			if ( "entity".equals( tree.getName() ) ) {
-				AnnotationDescriptor entity = new AnnotationDescriptor( Entity.class );
-				copyStringAttribute( entity, tree, "name", false );
-				if ( defaults.canUseJavaAnnotations()
-						&& StringHelper.isEmpty( (String) entity.valueOf( "name" ) ) ) {
-					Entity javaAnn = getJavaAnnotation( Entity.class );
-					if ( javaAnn != null ) entity.setValue( "name", javaAnn.name() );
-				}
-				return AnnotationFactory.create( entity );
-			}
-			else {
-				return null; //this is not an entity
-			}
-		}
-	}
-
-	private MappedSuperclass getMappedSuperclass(Element tree, XMLContext.Default defaults) {
-		if ( tree == null ) {
-			return defaults.canUseJavaAnnotations() ? getJavaAnnotation( MappedSuperclass.class ) : null;
-		}
-		else {
-			if ( "mapped-superclass".equals( tree.getName() ) ) {
-				AnnotationDescriptor entity = new AnnotationDescriptor( MappedSuperclass.class );
-				return AnnotationFactory.create( entity );
-			}
-			else {
-				return null; //this is not an entity
-			}
-		}
-	}
-
-	private Embeddable getEmbeddable(Element tree, XMLContext.Default defaults) {
-		if ( tree == null ) {
-			return defaults.canUseJavaAnnotations() ? getJavaAnnotation( Embeddable.class ) : null;
-		}
-		else {
-			if ( "embeddable".equals( tree.getName() ) ) {
-				AnnotationDescriptor entity = new AnnotationDescriptor( Embeddable.class );
-				return AnnotationFactory.create( entity );
-			}
-			else {
-				return null; //this is not an entity
-			}
-		}
-	}
-
-	private Table getTable(Element tree, XMLContext.Default defaults) {
-		Element subelement = tree == null ? null : tree.element( "table" );
-		if ( subelement == null ) {
-			//no element but might have some default or some annotation
-			if ( StringHelper.isNotEmpty( defaults.getCatalog() )
-					|| StringHelper.isNotEmpty( defaults.getSchema() ) ) {
-				AnnotationDescriptor annotation = new AnnotationDescriptor( Table.class );
-				if ( defaults.canUseJavaAnnotations() ) {
-					Table table = getJavaAnnotation( Table.class );
-					if ( table != null ) {
-						annotation.setValue( "name", table.name() );
-						annotation.setValue( "schema", table.schema() );
-						annotation.setValue( "catalog", table.catalog() );
-						annotation.setValue( "uniqueConstraints", table.uniqueConstraints() );
-					}
-				}
-				if ( StringHelper.isEmpty( (String) annotation.valueOf( "schema" ) )
-						&& StringHelper.isNotEmpty( defaults.getSchema() ) ) {
-					annotation.setValue( "schema", defaults.getSchema() );
-				}
-				if ( StringHelper.isEmpty( (String) annotation.valueOf( "catalog" ) )
-						&& StringHelper.isNotEmpty( defaults.getCatalog() ) ) {
-					annotation.setValue( "catalog", defaults.getCatalog() );
-				}
-				return AnnotationFactory.create( annotation );
-			}
-			else if ( defaults.canUseJavaAnnotations() ) {
-				return getJavaAnnotation( Table.class );
-			}
-			else {
-				return null;
-			}
-		}
-		else {
-			//ignore java annotation, an element is defined
-			AnnotationDescriptor annotation = new AnnotationDescriptor( Table.class );
-			copyStringAttribute( annotation, subelement, "name", false );
-			copyStringAttribute( annotation, subelement, "catalog", false );
-			if ( StringHelper.isNotEmpty( defaults.getCatalog() )
-					&& StringHelper.isEmpty( (String) annotation.valueOf( "catalog" ) ) ) {
-				annotation.setValue( "catalog", defaults.getCatalog() );
-			}
-			copyStringAttribute( annotation, subelement, "schema", false );
-			if ( StringHelper.isNotEmpty( defaults.getSchema() )
-					&& StringHelper.isEmpty( (String) annotation.valueOf( "schema" ) ) ) {
-				annotation.setValue( "schema", defaults.getSchema() );
-			}
-			buildUniqueConstraints( annotation, subelement );
-			return AnnotationFactory.create( annotation );
-		}
-	}
-
-	private SecondaryTables getSecondaryTables(Element tree, XMLContext.Default defaults) {
-		List<Element> elements = tree == null ?
-				new ArrayList<Element>() :
-				(List<Element>) tree.elements( "secondary-table" );
-		List<SecondaryTable> secondaryTables = new ArrayList<SecondaryTable>( 3 );
-		for ( Element element : elements ) {
-			AnnotationDescriptor annotation = new AnnotationDescriptor( SecondaryTable.class );
-			copyStringAttribute( annotation, element, "name", false );
-			copyStringAttribute( annotation, element, "catalog", false );
-			if ( StringHelper.isNotEmpty( defaults.getCatalog() )
-					&& StringHelper.isEmpty( (String) annotation.valueOf( "catalog" ) ) ) {
-				annotation.setValue( "catalog", defaults.getCatalog() );
-			}
-			copyStringAttribute( annotation, element, "schema", false );
-			if ( StringHelper.isNotEmpty( defaults.getSchema() )
-					&& StringHelper.isEmpty( (String) annotation.valueOf( "schema" ) ) ) {
-				annotation.setValue( "schema", defaults.getSchema() );
-			}
-			buildUniqueConstraints( annotation, element );
-			annotation.setValue( "pkJoinColumns", buildPrimaryKeyJoinColumns( element ) );
-			secondaryTables.add( (SecondaryTable) AnnotationFactory.create( annotation ) );
-		}
-		/*
-		 * You can't have both secondary table in XML and Java,
-		 * since there would be no way to "remove" a secondary table
-		 */
-		if ( secondaryTables.size() == 0 && defaults.canUseJavaAnnotations() ) {
-			SecondaryTable secTableAnn = getJavaAnnotation( SecondaryTable.class );
-			overridesDefaultInSecondaryTable( secTableAnn, defaults, secondaryTables );
-			SecondaryTables secTablesAnn = getJavaAnnotation( SecondaryTables.class );
-			if ( secTablesAnn != null ) {
-				for ( SecondaryTable table : secTablesAnn.value() ) {
-					overridesDefaultInSecondaryTable( table, defaults, secondaryTables );
-				}
-			}
-		}
-		if ( secondaryTables.size() > 0 ) {
-			AnnotationDescriptor descriptor = new AnnotationDescriptor( SecondaryTables.class );
-			descriptor.setValue( "value", secondaryTables.toArray( new SecondaryTable[secondaryTables.size()] ) );
-			return AnnotationFactory.create( descriptor );
-		}
-		else {
-			return null;
-		}
-	}
-
-	private void overridesDefaultInSecondaryTable(
-			SecondaryTable secTableAnn, XMLContext.Default defaults, List<SecondaryTable> secondaryTables
-	) {
-		if ( secTableAnn != null ) {
-			//handle default values
-			if ( StringHelper.isNotEmpty( defaults.getCatalog() )
-					|| StringHelper.isNotEmpty( defaults.getSchema() ) ) {
-				AnnotationDescriptor annotation = new AnnotationDescriptor( SecondaryTable.class );
-				annotation.setValue( "name", secTableAnn.name() );
-				annotation.setValue( "schema", secTableAnn.schema() );
-				annotation.setValue( "catalog", secTableAnn.catalog() );
-				annotation.setValue( "uniqueConstraints", secTableAnn.uniqueConstraints() );
-				annotation.setValue( "pkJoinColumns", secTableAnn.pkJoinColumns() );
-				if ( StringHelper.isEmpty( (String) annotation.valueOf( "schema" ) )
-						&& StringHelper.isNotEmpty( defaults.getSchema() ) ) {
-					annotation.setValue( "schema", defaults.getSchema() );
-				}
-				if ( StringHelper.isEmpty( (String) annotation.valueOf( "catalog" ) )
-						&& StringHelper.isNotEmpty( defaults.getCatalog() ) ) {
-					annotation.setValue( "catalog", defaults.getCatalog() );
-				}
-				secondaryTables.add( (SecondaryTable) AnnotationFactory.create( annotation ) );
-			}
-			else {
-				secondaryTables.add( secTableAnn );
-			}
-		}
-	}
-
-	private static void buildUniqueConstraints(AnnotationDescriptor annotation, Element element) {
-		List uniqueConstraintElementList = element.elements( "unique-constraint" );
-		UniqueConstraint[] uniqueConstraints = new UniqueConstraint[ uniqueConstraintElementList.size() ];
-		int ucIndex = 0;
-		Iterator ucIt = uniqueConstraintElementList.listIterator();
-		while ( ucIt.hasNext() ) {
-			Element subelement = (Element) ucIt.next();
-			List<Element> columnNamesElements = subelement.elements( "column-name" );
-			String[] columnNames = new String[columnNamesElements.size()];
-			int columnNameIndex = 0;
-			Iterator it = columnNamesElements.listIterator();
-			while ( it.hasNext() ) {
-				Element columnNameElt = (Element) it.next();
-				columnNames[columnNameIndex++] = columnNameElt.getTextTrim();
-			}
-			AnnotationDescriptor ucAnn = new AnnotationDescriptor( UniqueConstraint.class );
-			ucAnn.setValue( "columnNames", columnNames );
-			uniqueConstraints[ucIndex++] = AnnotationFactory.create( ucAnn );
-		}
-		annotation.setValue( "uniqueConstraints", uniqueConstraints );
-	}
-
-	private PrimaryKeyJoinColumn[] buildPrimaryKeyJoinColumns(Element element) {
-		if ( element == null ) return new PrimaryKeyJoinColumn[]{};
-		List pkJoinColumnElementList = element.elements( "primary-key-join-column" );
-		PrimaryKeyJoinColumn[] pkJoinColumns = new PrimaryKeyJoinColumn[ pkJoinColumnElementList.size() ];
-		int index = 0;
-		Iterator pkIt = pkJoinColumnElementList.listIterator();
-		while ( pkIt.hasNext() ) {
-			Element subelement = (Element) pkIt.next();
-			AnnotationDescriptor pkAnn = new AnnotationDescriptor( PrimaryKeyJoinColumn.class );
-			copyStringAttribute( pkAnn, subelement, "name", false );
-			copyStringAttribute( pkAnn, subelement, "referenced-column-name", false );
-			copyStringAttribute( pkAnn, subelement, "column-definition", false );
-			pkJoinColumns[index++] = AnnotationFactory.create( pkAnn );
-		}
-		return pkJoinColumns;
-	}
-
-	private static void copyStringAttribute(
-			AnnotationDescriptor annotation, Element element, String attributeName, boolean mandatory
-	) {
-		String attribute = element.attributeValue( attributeName );
-		if ( attribute != null ) {
-			String annotationAttributeName = getJavaAttributeNameFromXMLOne( attributeName );
-			annotation.setValue( annotationAttributeName, attribute );
-		}
-		else {
-			if ( mandatory ) {
-				throw new AnnotationException(
-						element.getName() + "." + attributeName + " is mandatory in XML overring. " + SCHEMA_VALIDATION
-				);
-			}
-		}
-	}
-
-	private static void copyIntegerAttribute(AnnotationDescriptor annotation, Element element, String attributeName) {
-		String attribute = element.attributeValue( attributeName );
-		if ( attribute != null ) {
-			String annotationAttributeName = getJavaAttributeNameFromXMLOne( attributeName );
-			annotation.setValue( annotationAttributeName, attribute );
-			try {
-				int length = Integer.parseInt( attribute );
-				annotation.setValue( annotationAttributeName, length );
-			}
-			catch (NumberFormatException e) {
-				throw new AnnotationException(
-						element.getPath() + attributeName + " not parseable: " + attribute + " (" + SCHEMA_VALIDATION + ")"
-				);
-			}
-		}
-	}
-
-	private static String getJavaAttributeNameFromXMLOne(String attributeName) {
-		StringBuilder annotationAttributeName = new StringBuilder( attributeName );
-		int index = annotationAttributeName.indexOf( WORD_SEPARATOR );
-		while ( index != -1 ) {
-			annotationAttributeName.deleteCharAt( index );
-			annotationAttributeName.setCharAt(
-					index, Character.toUpperCase( annotationAttributeName.charAt( index ) )
-			);
-			index = annotationAttributeName.indexOf( WORD_SEPARATOR );
-		}
-		return annotationAttributeName.toString();
-	}
-
-	private static void copyStringElement(Element element, AnnotationDescriptor ad, String annotationAttribute) {
-		String discr = element.getTextTrim();
-		ad.setValue( annotationAttribute, discr );
-	}
-
-	private static void copyBooleanAttribute(AnnotationDescriptor descriptor, Element element, String attribute) {
-		String attributeValue = element.attributeValue( attribute );
-		if ( StringHelper.isNotEmpty( attributeValue ) ) {
-			String javaAttribute = getJavaAttributeNameFromXMLOne( attribute );
-			descriptor.setValue( javaAttribute, Boolean.parseBoolean( attributeValue ) );
-		}
-	}
-
-    private <T extends Annotation> T getJavaAnnotation(Class<T> annotationType) {
-        return element.getAnnotation( annotationType );
-    }
-
-    private <T extends Annotation> boolean isJavaAnnotationPresent(Class<T> annotationType) {
-        return element.isAnnotationPresent( annotationType );
-    }
-
-    private Annotation[] getJavaAnnotations() {
-        return element.getAnnotations();
-    }
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/reflection/EJB3OverridenAnnotationReader.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/reflection/EJB3OverridenAnnotationReader.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/reflection/EJB3OverridenAnnotationReader.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/reflection/EJB3OverridenAnnotationReader.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,2080 @@
+package org.hibernate.cfg.annotations.reflection;
+
+import java.beans.Introspector;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.AccessibleObject;
+import java.lang.reflect.AnnotatedElement;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.HashSet;
+
+import javax.persistence.AssociationOverride;
+import javax.persistence.AssociationOverrides;
+import javax.persistence.AttributeOverride;
+import javax.persistence.AttributeOverrides;
+import javax.persistence.Basic;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.ColumnResult;
+import javax.persistence.DiscriminatorColumn;
+import javax.persistence.DiscriminatorType;
+import javax.persistence.DiscriminatorValue;
+import javax.persistence.Embeddable;
+import javax.persistence.Embedded;
+import javax.persistence.EmbeddedId;
+import javax.persistence.Entity;
+import javax.persistence.EntityListeners;
+import javax.persistence.EntityResult;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.ExcludeDefaultListeners;
+import javax.persistence.ExcludeSuperclassListeners;
+import javax.persistence.FetchType;
+import javax.persistence.FieldResult;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.IdClass;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinColumns;
+import javax.persistence.JoinTable;
+import javax.persistence.Lob;
+import javax.persistence.ManyToMany;
+import javax.persistence.ManyToOne;
+import javax.persistence.MapKey;
+import javax.persistence.MappedSuperclass;
+import javax.persistence.NamedNativeQueries;
+import javax.persistence.NamedNativeQuery;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
+import javax.persistence.OneToOne;
+import javax.persistence.OrderBy;
+import javax.persistence.PostLoad;
+import javax.persistence.PostPersist;
+import javax.persistence.PostRemove;
+import javax.persistence.PostUpdate;
+import javax.persistence.PrePersist;
+import javax.persistence.PreRemove;
+import javax.persistence.PreUpdate;
+import javax.persistence.PrimaryKeyJoinColumn;
+import javax.persistence.PrimaryKeyJoinColumns;
+import javax.persistence.QueryHint;
+import javax.persistence.SecondaryTable;
+import javax.persistence.SecondaryTables;
+import javax.persistence.SequenceGenerator;
+import javax.persistence.SqlResultSetMapping;
+import javax.persistence.SqlResultSetMappings;
+import javax.persistence.Table;
+import javax.persistence.TableGenerator;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+import javax.persistence.Transient;
+import javax.persistence.UniqueConstraint;
+import javax.persistence.Version;
+
+import org.dom4j.Attribute;
+import org.dom4j.Element;
+import org.hibernate.AnnotationException;
+import org.hibernate.annotations.common.annotationfactory.AnnotationDescriptor;
+import org.hibernate.annotations.common.annotationfactory.AnnotationFactory;
+import org.hibernate.annotations.AccessType;
+import org.hibernate.annotations.CollectionOfElements;
+import org.hibernate.annotations.Columns;
+import org.hibernate.annotations.common.reflection.AnnotationReader;
+import org.hibernate.annotations.common.reflection.Filter;
+import org.hibernate.annotations.common.reflection.ReflectionUtil;
+import org.hibernate.annotations.common.AssertionFailure;
+import org.hibernate.util.ReflectHelper;
+import org.hibernate.util.StringHelper;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * Encapsulates the overriding of Java annotations from an EJB 3.0 descriptor.
+ *
+ * @author Paolo Perrotta
+ * @author Davide Marchignoli
+ * @author Emmanuel Bernard
+ */
+public class EJB3OverridenAnnotationReader implements AnnotationReader {
+	private static Log log = LogFactory.getLog( EJB3OverridenAnnotationReader.class );
+	private static final Map<Class, String> annotationToXml;
+	private static final String SCHEMA_VALIDATION = "Activate schema validation for more informations";
+	private static final Filter FILTER = new Filter() {
+		public boolean returnStatic() {
+			return false;
+		}
+
+		public boolean returnTransient() {
+			return false;
+		}
+	};
+
+	static {
+		annotationToXml = new HashMap<Class, String>();
+		annotationToXml.put( Entity.class, "entity" );
+		annotationToXml.put( MappedSuperclass.class, "mapped-superclass" );
+		annotationToXml.put( Embeddable.class, "embeddable" );
+		annotationToXml.put( Table.class, "table" );
+		annotationToXml.put( SecondaryTable.class, "secondary-table" );
+		annotationToXml.put( SecondaryTables.class, "secondary-table" );
+		annotationToXml.put( PrimaryKeyJoinColumn.class, "primary-key-join-column" );
+		annotationToXml.put( PrimaryKeyJoinColumns.class, "primary-key-join-column" );
+		annotationToXml.put( IdClass.class, "id-class" );
+		annotationToXml.put( Inheritance.class, "inheritance" );
+		annotationToXml.put( DiscriminatorValue.class, "discriminator-value" );
+		annotationToXml.put( DiscriminatorColumn.class, "discriminator-column" );
+		annotationToXml.put( SequenceGenerator.class, "sequence-generator" );
+		annotationToXml.put( TableGenerator.class, "table-generator" );
+		annotationToXml.put( NamedQuery.class, "named-query" );
+		annotationToXml.put( NamedQueries.class, "named-query" );
+		annotationToXml.put( NamedNativeQuery.class, "named-native-query" );
+		annotationToXml.put( NamedNativeQueries.class, "named-native-query" );
+		annotationToXml.put( SqlResultSetMapping.class, "sql-result-set-mapping" );
+		annotationToXml.put( SqlResultSetMappings.class, "sql-result-set-mapping" );
+		annotationToXml.put( ExcludeDefaultListeners.class, "exclude-default-listeners" );
+		annotationToXml.put( ExcludeSuperclassListeners.class, "exclude-superclass-listeners" );
+		annotationToXml.put( AccessType.class, "access" );
+		annotationToXml.put( AttributeOverride.class, "attribute-override" );
+		annotationToXml.put( AttributeOverrides.class, "attribute-override" );
+		annotationToXml.put( AttributeOverride.class, "association-override" );
+		annotationToXml.put( AttributeOverrides.class, "association-override" );
+		annotationToXml.put( Id.class, "id" );
+		annotationToXml.put( EmbeddedId.class, "embedded-id" );
+		annotationToXml.put( GeneratedValue.class, "generated-value" );
+		annotationToXml.put( Column.class, "column" );
+		annotationToXml.put( Columns.class, "column" );
+		annotationToXml.put( Temporal.class, "temporal" );
+		annotationToXml.put( Lob.class, "lob" );
+		annotationToXml.put( Enumerated.class, "enumerated" );
+		annotationToXml.put( Version.class, "version" );
+		annotationToXml.put( Transient.class, "transient" );
+		annotationToXml.put( Basic.class, "basic" );
+		annotationToXml.put( Embedded.class, "embedded" );
+		annotationToXml.put( ManyToOne.class, "many-to-one" );
+		annotationToXml.put( OneToOne.class, "one-to-one" );
+		annotationToXml.put( OneToMany.class, "one-to-many" );
+		annotationToXml.put( ManyToMany.class, "many-to-many" );
+		annotationToXml.put( JoinTable.class, "join-table" );
+		annotationToXml.put( JoinColumn.class, "join-column" );
+		annotationToXml.put( JoinColumns.class, "join-column" );
+		annotationToXml.put( MapKey.class, "map-key" );
+		annotationToXml.put( OrderBy.class, "order-by" );
+		annotationToXml.put( EntityListeners.class, "entity-listeners" );
+		annotationToXml.put( PrePersist.class, "pre-persist" );
+		annotationToXml.put( PreRemove.class, "pre-remove" );
+		annotationToXml.put( PreUpdate.class, "pre-update" );
+		annotationToXml.put( PostPersist.class, "post-persist" );
+		annotationToXml.put( PostRemove.class, "post-remove" );
+		annotationToXml.put( PostUpdate.class, "post-update" );
+		annotationToXml.put( PostLoad.class, "post-load" );
+	}
+
+	private XMLContext xmlContext;
+	private String className;
+	private String propertyName;
+	private PropertyType propertyType;
+	private transient Annotation[] annotations;
+    private transient Map<Class, Annotation> annotationsMap;
+    private static final String WORD_SEPARATOR = "-";
+	private transient List<Element> elementsForProperty;
+	private AccessibleObject mirroredAttribute;
+    private final AnnotatedElement element;
+
+	private enum PropertyType {
+		PROPERTY,
+		FIELD,
+		METHOD
+	}
+
+	public EJB3OverridenAnnotationReader(AnnotatedElement el, XMLContext xmlContext) {
+        this.element = el;
+		this.xmlContext = xmlContext;
+		if ( el instanceof Class ) {
+			Class clazz = (Class) el;
+			className = clazz.getName();
+		}
+		else if ( el instanceof Field ) {
+			Field field = (Field) el;
+			className = field.getDeclaringClass().getName();
+			propertyName = field.getName();
+			propertyType = PropertyType.FIELD;
+			String expectedGetter = "get" + Character.toUpperCase( propertyName.charAt( 0 ) ) + propertyName.substring(
+					1
+			);
+			try {
+				mirroredAttribute = field.getDeclaringClass().getDeclaredMethod( expectedGetter );
+			}
+			catch (NoSuchMethodException e) {
+				//no method
+			}
+		}
+		else if ( el instanceof Method ) {
+			Method method = (Method) el;
+			className = method.getDeclaringClass().getName();
+			propertyName = method.getName();
+			if ( ReflectionUtil.isProperty(
+					method,
+					null, //this is yukky!! we'd rather get the TypeEnvironment()
+					FILTER
+			) ) {
+				if ( propertyName.startsWith( "get" ) ) {
+					propertyName = Introspector.decapitalize( propertyName.substring( "get".length() ) );
+				}
+				else if ( propertyName.startsWith( "is" ) ) {
+					propertyName = Introspector.decapitalize( propertyName.substring( "is".length() ) );
+				}
+				else {
+					throw new RuntimeException( "Method " + propertyName + " is not a property getter" );
+				}
+				propertyType = PropertyType.PROPERTY;
+				try {
+					mirroredAttribute = method.getDeclaringClass().getDeclaredField( propertyName );
+				}
+				catch (NoSuchFieldException e) {
+					//no method
+				}
+			}
+			else {
+				propertyType = PropertyType.METHOD;
+			}
+		}
+		else {
+			className = null;
+			propertyName = null;
+		}
+	}
+
+	public <T extends Annotation> T getAnnotation(Class<T> annotationType) {
+		initAnnotations();
+        return (T) annotationsMap.get( annotationType );
+	}
+
+	public <T extends Annotation> boolean isAnnotationPresent(Class<T> annotationType) {
+		initAnnotations();
+		return (T) annotationsMap.get( annotationType ) != null;
+	}
+
+	public Annotation[] getAnnotations() {
+		initAnnotations();
+		return annotations;
+	}
+
+	private void initAnnotations() {
+		if ( annotations == null ) {
+            XMLContext.Default defaults = xmlContext.getDefault( className );
+			if ( className != null && propertyName == null ) {
+				//is a class
+				Element tree = xmlContext.getXMLTree( className, null );
+                Annotation[] annotations = getJavaAnnotations();
+				List<Annotation> annotationList = new ArrayList<Annotation>( annotations.length + 5 );
+                annotationsMap = new HashMap<Class, Annotation>( annotations.length + 5 );
+                for ( Annotation annotation : annotations ) {
+					if ( ! annotationToXml.containsKey( annotation.annotationType() ) ) {
+						//unknown annotations are left over
+						annotationList.add( annotation );
+					}
+				}
+				addIfNotNull( annotationList, getEntity( tree, defaults ) );
+				addIfNotNull( annotationList, getMappedSuperclass( tree, defaults ) );
+				addIfNotNull( annotationList, getEmbeddable( tree, defaults ) );
+				addIfNotNull( annotationList, getTable( tree, defaults ) );
+				addIfNotNull( annotationList, getSecondaryTables( tree, defaults ) );
+				addIfNotNull( annotationList, getPrimaryKeyJoinColumns( tree, defaults ) );
+				addIfNotNull( annotationList, getIdClass( tree, defaults ) );
+				addIfNotNull( annotationList, getInheritance( tree, defaults ) );
+				addIfNotNull( annotationList, getDiscriminatorValue( tree, defaults ) );
+				addIfNotNull( annotationList, getDiscriminatorColumn( tree, defaults ) );
+				addIfNotNull( annotationList, getSequenceGenerator( tree, defaults ) );
+				addIfNotNull( annotationList, getTableGenerator( tree, defaults ) );
+				addIfNotNull( annotationList, getNamedQueries( tree, defaults ) );
+				addIfNotNull( annotationList, getNamedNativeQueries( tree, defaults ) );
+				addIfNotNull( annotationList, getSqlResultSetMappings( tree, defaults ) );
+				addIfNotNull( annotationList, getExcludeDefaultListeners( tree, defaults ) );
+				addIfNotNull( annotationList, getExcludeSuperclassListeners( tree, defaults ) );
+				addIfNotNull( annotationList, getAccessType( tree, defaults ) );
+				addIfNotNull( annotationList, getAttributeOverrides( tree, defaults ) );
+				addIfNotNull( annotationList, getAssociationOverrides( tree, defaults ) );
+				addIfNotNull( annotationList, getEntityListeners( tree, defaults ) );
+                //FIXME use annotationsMap rather than annotationList this will be faster since the annotation type is usually known at put() time
+                this.annotations = annotationList.toArray( new Annotation[ annotationList.size() ] );
+                for (Annotation ann : this.annotations) {
+                    annotationsMap.put( ann.annotationType(), ann );
+                }
+				checkForOrphanProperties(tree);
+			}
+			else if ( className != null ) { //&& propertyName != null ) { //always true but less confusing
+				Element tree = xmlContext.getXMLTree( className, propertyName );
+				Annotation[] annotations = getJavaAnnotations();
+				List<Annotation> annotationList = new ArrayList<Annotation>( annotations.length + 5 );
+                annotationsMap = new HashMap<Class, Annotation>( annotations.length + 5 );
+                for ( Annotation annotation : annotations ) {
+					if ( ! annotationToXml.containsKey( annotation.annotationType() ) ) {
+						//unknown annotations are left over
+						annotationList.add( annotation );
+					}
+				}
+				preCalculateElementsForProperty( tree );
+				Transient transientAnn = getTransient( defaults );
+				if ( transientAnn != null ) {
+					annotationList.add( transientAnn );
+				}
+				else {
+					if ( defaults.canUseJavaAnnotations() ) {
+						Annotation annotation = getJavaAnnotation( AccessType.class );
+						addIfNotNull(annotationList, annotation);
+					}
+					getId( annotationList, defaults );
+					getEmbeddedId( annotationList, defaults );
+					getEmbedded( annotationList, defaults );
+					getBasic( annotationList, defaults );
+					getVersion( annotationList, defaults );
+					getAssociation( ManyToOne.class, annotationList, defaults );
+					getAssociation( OneToOne.class, annotationList, defaults );
+					getAssociation( OneToMany.class, annotationList, defaults );
+					getAssociation( ManyToMany.class, annotationList, defaults );
+					addIfNotNull(annotationList, getSequenceGenerator( elementsForProperty, defaults ));
+					addIfNotNull(annotationList, getTableGenerator( elementsForProperty, defaults ));
+					addIfNotNull(annotationList, getAttributeOverrides( elementsForProperty, defaults ));
+
+				}
+				processEventAnnotations(annotationList, defaults);
+				//FIXME use annotationsMap rather than annotationList this will be faster since the annotation type is usually known at put() time
+                this.annotations = annotationList.toArray( new Annotation[ annotationList.size() ] );
+                for (Annotation ann : this.annotations) {
+                    annotationsMap.put( ann.annotationType(), ann );
+                }
+            }
+			else {
+				this.annotations = getJavaAnnotations();
+                for (Annotation ann : this.annotations) {
+                    annotationsMap.put( ann.annotationType(), ann );
+                }
+            }
+		}
+	}
+
+	private void checkForOrphanProperties(Element tree) {
+		Class clazz;
+		try {
+			clazz = ReflectHelper.classForName( className, this.getClass() );
+		}
+		catch (ClassNotFoundException e) {
+			return; //a primitive type most likely
+		}
+		Element element = tree != null ? tree.element( "attributes" ) : null;
+		//put entity.attributes elements
+		if ( element != null ) {
+			//precompute the list of properties
+			//TODO is it really useful...
+			Set<String> properties = new HashSet<String>();
+			for (Field field : clazz.getFields() ) {
+				properties.add( field.getName() );
+			}
+			for (Method method : clazz.getMethods() ) {
+				String name = method.getName();
+				if ( name.startsWith( "get" ) ) {
+					properties.add( Introspector.decapitalize( name.substring( "get".length() ) ) );
+				}
+				else if ( name.startsWith( "is" ) ) {
+					properties.add( Introspector.decapitalize( name.substring( "is".length() ) ) );
+				}
+			}
+			for ( Element subelement : (List<Element>) element.elements() ) {
+				String propertyName = subelement.attributeValue( "name" );
+				if ( ! properties.contains( propertyName ) ) {
+					log.warn("Property " + StringHelper.qualify( className, propertyName ) + " not found in class"
+							+ " but described in <mapping-file/> (possible typo error)");
+				}
+			}
+		}
+	}
+
+	/**
+     * Addes the Annotation to the list (only if it's not null) and then returns it.
+     */
+    private Annotation addIfNotNull(List<Annotation> annotationList, Annotation element) {
+        if ( element != null ) {
+            annotationList.add( element );
+        }
+        return element;
+    }
+
+    //TODO mutualize the next 2 methods
+    private Annotation getTableGenerator(List<Element> elementsForProperty, XMLContext.Default defaults) {
+        for (Element element : elementsForProperty) {
+            Element subelement = element != null ? element.element( annotationToXml.get( TableGenerator.class ) ) : null;
+            if ( subelement != null ) {
+                return buildTableGeneratorAnnotation( subelement, defaults );
+            }
+        }
+        if ( elementsForProperty.size() == 0 && defaults.canUseJavaAnnotations() ) {
+            return getJavaAnnotation( TableGenerator.class );
+		}
+		else {
+			return null;
+		}
+    }
+
+
+    private Annotation getSequenceGenerator(List<Element> elementsForProperty, XMLContext.Default defaults) {
+        for (Element element : elementsForProperty) {
+            Element subelement = element != null ? element.element( annotationToXml.get( SequenceGenerator.class ) ) : null;
+            if ( subelement != null ) {
+                return buildSequenceGeneratorAnnotation( subelement );
+            }
+        }
+        if ( elementsForProperty.size() == 0 && defaults.canUseJavaAnnotations() ) {
+            return getJavaAnnotation( SequenceGenerator.class );
+		}
+		else {
+			return null;
+		}
+    }
+
+    private void processEventAnnotations(List<Annotation> annotationList, XMLContext.Default defaults) {
+		boolean eventElement = false;
+		for ( Element element : elementsForProperty ) {
+			String elementName = element.getName();
+			if ( "pre-persist".equals( elementName ) ) {
+				AnnotationDescriptor ad = new AnnotationDescriptor( PrePersist.class );
+				annotationList.add( AnnotationFactory.create( ad ) );
+				eventElement = true;
+			}
+			else if ( "pre-remove".equals( elementName ) ) {
+				AnnotationDescriptor ad = new AnnotationDescriptor( PreRemove.class );
+				annotationList.add( AnnotationFactory.create( ad ) );
+				eventElement = true;
+			}
+			else if ( "pre-update".equals( elementName ) ) {
+				AnnotationDescriptor ad = new AnnotationDescriptor( PreUpdate.class );
+				annotationList.add( AnnotationFactory.create( ad ) );
+				eventElement = true;
+			}
+			else if ( "post-persist".equals( elementName ) ) {
+				AnnotationDescriptor ad = new AnnotationDescriptor( PostPersist.class );
+				annotationList.add( AnnotationFactory.create( ad ) );
+				eventElement = true;
+			}
+			else if ( "post-remove".equals( elementName ) ) {
+				AnnotationDescriptor ad = new AnnotationDescriptor( PostRemove.class );
+				annotationList.add( AnnotationFactory.create( ad ) );
+				eventElement = true;
+			}
+			else if ( "post-update".equals( elementName ) ) {
+				AnnotationDescriptor ad = new AnnotationDescriptor( PostUpdate.class );
+				annotationList.add( AnnotationFactory.create( ad ) );
+				eventElement = true;
+			}
+			else if ( "post-load".equals( elementName ) ) {
+				AnnotationDescriptor ad = new AnnotationDescriptor( PostLoad.class );
+				annotationList.add( AnnotationFactory.create( ad ) );
+				eventElement = true;
+			}
+		}
+		if ( ! eventElement && defaults.canUseJavaAnnotations() ) {
+			Annotation ann = getJavaAnnotation(PrePersist.class);
+			addIfNotNull(annotationList, ann);
+			ann = getJavaAnnotation(PreRemove.class);
+			addIfNotNull(annotationList, ann);
+			ann = getJavaAnnotation(PreUpdate.class);
+			addIfNotNull(annotationList, ann);
+			ann = getJavaAnnotation(PostPersist.class);
+			addIfNotNull(annotationList, ann);
+			ann = getJavaAnnotation(PostRemove.class);
+			addIfNotNull(annotationList, ann);
+			ann = getJavaAnnotation(PostUpdate.class);
+			addIfNotNull(annotationList, ann);
+			ann = getJavaAnnotation(PostLoad.class);
+			addIfNotNull(annotationList, ann);
+		}
+	}
+
+	private EntityListeners getEntityListeners(Element tree, XMLContext.Default defaults) {
+		Element element = tree != null ? tree.element( "entity-listeners" ) : null;
+		if ( element != null) {
+			List<Class> entityListenerClasses = new ArrayList<Class>();
+			for (Element subelement : (List<Element>) element.elements( "entity-listener" ) ) {
+				String className = subelement.attributeValue( "class" );
+				try {
+					entityListenerClasses.add(
+							ReflectHelper.classForName(
+									XMLContext.buildSafeClassName( className, defaults ),
+									this.getClass()
+							)
+					);
+				}
+				catch (ClassNotFoundException e) {
+					throw new AnnotationException(
+							"Unable to find " + element.getPath() + ".class: " + className, e
+					);
+				}
+			}
+			AnnotationDescriptor ad = new AnnotationDescriptor( EntityListeners.class );
+			ad.setValue( "value", entityListenerClasses.toArray( new Class[ entityListenerClasses.size() ] ) );
+			return AnnotationFactory.create( ad );
+		}
+		else if ( defaults.canUseJavaAnnotations() ) {
+			return getJavaAnnotation( EntityListeners.class );
+		}
+		else {
+			return null;
+		}
+	}
+
+	private JoinTable overridesDefaultsInJoinTable(Annotation annotation, XMLContext.Default defaults) {
+		//no element but might have some default or some annotation
+		boolean defaultToJoinTable = ! ( isJavaAnnotationPresent( JoinColumn.class )
+				|| isJavaAnnotationPresent( JoinColumns.class ) );
+        final Class<? extends Annotation> annotationClass = annotation.annotationType();
+        defaultToJoinTable = defaultToJoinTable &&
+				( ( annotationClass == ManyToMany.class && StringHelper.isEmpty( ( (ManyToMany) annotation).mappedBy() ) )
+				  || ( annotationClass == OneToMany.class && StringHelper.isEmpty( ( (OneToMany) annotation).mappedBy() ) )
+				  || ( annotationClass == CollectionOfElements.class )
+				);
+		final Class<JoinTable> annotationType = JoinTable.class;
+		if ( defaultToJoinTable
+				&& ( StringHelper.isNotEmpty( defaults.getCatalog() )
+					|| StringHelper.isNotEmpty( defaults.getSchema() ) ) ) {
+			AnnotationDescriptor ad = new AnnotationDescriptor( annotationType );
+			if ( defaults.canUseJavaAnnotations() ) {
+				JoinTable table = getJavaAnnotation( annotationType );
+				if ( table != null ) {
+					ad.setValue( "name", table.name() );
+					ad.setValue( "schema", table.schema() );
+					ad.setValue( "catalog", table.catalog() );
+					ad.setValue( "uniqueConstraints", table.uniqueConstraints() );
+					ad.setValue( "joinColumns", table.joinColumns() );
+					ad.setValue( "inverseJoinColumns", table.inverseJoinColumns() );
+				}
+			}
+			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() ) {
+			return getJavaAnnotation( annotationType );
+		}
+		else {
+			return null;
+		}
+	}
+
+	/*
+	 * no partial overriding possible
+	 */
+	private void getJoinTable(List<Annotation> annotationList, Element tree, XMLContext.Default defaults) {
+		Element subelement = tree == null ? null : tree.element( "join-table" );
+		final Class<JoinTable> annotationType = JoinTable.class;
+		if ( subelement != null ) {
+			//ignore java annotation, an element is defined
+			AnnotationDescriptor annotation = new AnnotationDescriptor( annotationType );
+			copyStringAttribute( annotation, subelement, "name", false );
+			copyStringAttribute( annotation, subelement, "catalog", false );
+			if ( StringHelper.isNotEmpty( defaults.getCatalog() )
+					&& StringHelper.isEmpty( (String) annotation.valueOf( "catalog" ) ) ) {
+				annotation.setValue( "catalog", defaults.getCatalog() );
+			}
+			copyStringAttribute( annotation, subelement, "schema", false );
+			if ( StringHelper.isNotEmpty( defaults.getSchema() )
+					&& StringHelper.isEmpty( (String) annotation.valueOf( "schema" ) ) ) {
+				annotation.setValue( "schema", defaults.getSchema() );
+			}
+			buildUniqueConstraints( annotation, subelement );
+			annotation.setValue( "joinColumns", getJoinColumns( subelement, false ) );
+			annotation.setValue( "inverseJoinColumns", getJoinColumns( subelement, true ) );
+			annotationList.add( AnnotationFactory.create( annotation ) );
+		}
+	}
+
+	private void getAssociation(
+			Class<? extends Annotation> annotationType, List<Annotation> annotationList, XMLContext.Default defaults
+	) {
+		String xmlName = annotationToXml.get( annotationType );
+		for ( Element element : elementsForProperty ) {
+			if ( xmlName.equals( element.getName() ) ) {
+				AnnotationDescriptor ad = new AnnotationDescriptor( annotationType );
+				String className = element.attributeValue( "target-entity" );
+				if ( className != null ) {
+					Class clazz;
+					try {
+						clazz = ReflectHelper.classForName(
+								XMLContext.buildSafeClassName( className, defaults ),
+								this.getClass()
+						);
+					}
+					catch (ClassNotFoundException e) {
+						throw new AnnotationException(
+								"Unable to find " + element.getPath() + "target-entity: " + className, e
+						);
+					}
+					ad.setValue( "targetEntity", clazz );
+				}
+				getFetchType( ad, element );
+				getCascades( ad, element, defaults );
+				getJoinTable( annotationList, element, defaults );
+				buildJoinColumns( annotationList, element, defaults );
+				Annotation annotation = getPrimaryKeyJoinColumns( element, defaults );
+				addIfNotNull(annotationList, annotation);
+				copyBooleanAttribute( ad, element, "optional" );
+				copyStringAttribute( ad, element, "mapped-by", false );
+				getOrderBy( annotationList, element, defaults );
+				getMapKey( annotationList, element, defaults );
+				annotationList.add( AnnotationFactory.create( ad ) );
+			}
+		}
+		if ( elementsForProperty.size() == 0 && defaults.canUseJavaAnnotations() ) {
+			Annotation annotation = getJavaAnnotation( annotationType );
+			if ( annotation != null ) {
+				annotationList.add( annotation );
+				annotation = overridesDefaultsInJoinTable( annotation, defaults );
+				addIfNotNull(annotationList, annotation);
+				annotation = getJavaAnnotation( JoinColumn.class );
+				addIfNotNull(annotationList, annotation);
+				annotation = getJavaAnnotation( JoinColumns.class );
+				addIfNotNull(annotationList, annotation);
+				annotation = getJavaAnnotation( PrimaryKeyJoinColumn.class );
+				addIfNotNull(annotationList, annotation);
+				annotation = getJavaAnnotation( PrimaryKeyJoinColumns.class );
+				addIfNotNull(annotationList, annotation);
+				annotation = getJavaAnnotation( MapKey.class );
+				addIfNotNull(annotationList, annotation);
+				annotation = getJavaAnnotation( OrderBy.class );
+				addIfNotNull(annotationList, annotation);
+				annotation = getJavaAnnotation( AttributeOverride.class );
+				addIfNotNull(annotationList, annotation);
+				annotation = getJavaAnnotation( AttributeOverrides.class );
+				addIfNotNull(annotationList, annotation);
+				annotation = getJavaAnnotation( AssociationOverride.class );
+				addIfNotNull(annotationList, annotation);
+				annotation = getJavaAnnotation( AssociationOverrides.class );
+				addIfNotNull(annotationList, annotation);
+				annotation = getJavaAnnotation( Lob.class );
+				addIfNotNull(annotationList, annotation);
+				annotation = getJavaAnnotation( Enumerated.class );
+				addIfNotNull(annotationList, annotation);
+				annotation = getJavaAnnotation( Temporal.class );
+				addIfNotNull(annotationList, annotation);
+				annotation = getJavaAnnotation( Column.class );
+				addIfNotNull(annotationList, annotation);
+				annotation = getJavaAnnotation( Columns.class );
+				addIfNotNull(annotationList, annotation);
+			}
+			else if ( isJavaAnnotationPresent( CollectionOfElements.class ) ) {
+				annotation = overridesDefaultsInJoinTable( getJavaAnnotation( CollectionOfElements.class ), defaults );
+				addIfNotNull(annotationList, annotation);
+				annotation = getJavaAnnotation( JoinColumn.class );
+				addIfNotNull(annotationList, annotation);
+				annotation = getJavaAnnotation( JoinColumns.class );
+				addIfNotNull(annotationList, annotation);
+				annotation = getJavaAnnotation( PrimaryKeyJoinColumn.class );
+				addIfNotNull(annotationList, annotation);
+				annotation = getJavaAnnotation( PrimaryKeyJoinColumns.class );
+				addIfNotNull(annotationList, annotation);
+				annotation = getJavaAnnotation( MapKey.class );
+				addIfNotNull(annotationList, annotation);
+				annotation = getJavaAnnotation( OrderBy.class );
+				addIfNotNull(annotationList, annotation);
+				annotation = getJavaAnnotation( AttributeOverride.class );
+				addIfNotNull(annotationList, annotation);
+				annotation = getJavaAnnotation( AttributeOverrides.class );
+				addIfNotNull(annotationList, annotation);
+				annotation = getJavaAnnotation( AssociationOverride.class );
+				addIfNotNull(annotationList, annotation);
+				annotation = getJavaAnnotation( AssociationOverrides.class );
+				addIfNotNull(annotationList, annotation);
+				annotation = getJavaAnnotation( Lob.class );
+				addIfNotNull(annotationList, annotation);
+				annotation = getJavaAnnotation( Enumerated.class );
+				addIfNotNull(annotationList, annotation);
+				annotation = getJavaAnnotation( Temporal.class );
+				addIfNotNull(annotationList, annotation);
+				annotation = getJavaAnnotation( Column.class );
+				addIfNotNull(annotationList, annotation);
+				annotation = getJavaAnnotation( Columns.class );
+				addIfNotNull(annotationList, annotation);
+			}
+		}
+	}
+
+	private void getOrderBy(List<Annotation> annotationList, Element element, XMLContext.Default defaults) {
+		Element subelement = element != null ? element.element( "order-by" ) : null;
+		if ( subelement != null ) {
+			String orderByString = subelement.getTextTrim();
+			AnnotationDescriptor ad = new AnnotationDescriptor( OrderBy.class );
+			if ( StringHelper.isNotEmpty( orderByString ) ) ad.setValue( "value", orderByString );
+			annotationList.add( AnnotationFactory.create( ad ) );
+		}
+	}
+
+	private void getMapKey(List<Annotation> annotationList, Element element, XMLContext.Default defaults) {
+		Element subelement = element != null ? element.element( "map-key" ) : null;
+		if ( subelement != null ) {
+			String mapKeyString = subelement.attributeValue( "name" );
+			AnnotationDescriptor ad = new AnnotationDescriptor( MapKey.class );
+			if ( StringHelper.isNotEmpty( mapKeyString ) ) ad.setValue( "name", mapKeyString );
+			annotationList.add( AnnotationFactory.create( ad ) );
+		}
+	}
+
+	private void buildJoinColumns(List<Annotation> annotationList, Element element, XMLContext.Default defaults) {
+		JoinColumn[] joinColumns = getJoinColumns( element, false );
+		if ( joinColumns.length > 0 ) {
+			AnnotationDescriptor ad = new AnnotationDescriptor( JoinColumns.class );
+			ad.setValue( "value", joinColumns );
+			annotationList.add( AnnotationFactory.create( ad ) );
+		}
+	}
+
+	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 ) {
+			if ( subelement.element( "cascade-all" ) != null ) cascades.add( CascadeType.ALL );
+			if ( subelement.element( "cascade-persist" ) != null ) cascades.add( CascadeType.PERSIST );
+			if ( subelement.element( "cascade-merge" ) != null ) cascades.add( CascadeType.MERGE );
+			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() ] ) );
+		}
+	}
+
+	private void getEmbedded(List<Annotation> annotationList, XMLContext.Default defaults) {
+		for ( Element element : elementsForProperty ) {
+			if ( "embedded".equals( element.getName() ) ) {
+				AnnotationDescriptor ad = new AnnotationDescriptor( Embedded.class );
+				annotationList.add( AnnotationFactory.create( ad ) );
+			}
+		}
+		if ( elementsForProperty.size() == 0 && defaults.canUseJavaAnnotations() ) {
+			Annotation annotation = getJavaAnnotation( Embedded.class );
+			if ( annotation != null ) {
+				annotationList.add( annotation );
+				annotation = getJavaAnnotation( AttributeOverride.class );
+				addIfNotNull(annotationList, annotation);
+				annotation = getJavaAnnotation( AttributeOverrides.class );
+				addIfNotNull(annotationList, annotation);
+				annotation = getJavaAnnotation( AssociationOverride.class );
+				addIfNotNull(annotationList, annotation);
+				annotation = getJavaAnnotation( AssociationOverrides.class );
+				addIfNotNull(annotationList, annotation);
+			}
+		}
+	}
+
+	private Transient getTransient(XMLContext.Default defaults) {
+		for ( Element element : elementsForProperty ) {
+			if ( "transient".equals( element.getName() ) ) {
+				AnnotationDescriptor ad = new AnnotationDescriptor( Transient.class );
+				return AnnotationFactory.create( ad );
+			}
+		}
+		if ( elementsForProperty.size() == 0 && defaults.canUseJavaAnnotations() ) {
+			return getJavaAnnotation( Transient.class );
+		}
+		else {
+			return null;
+		}
+	}
+
+	private void getVersion(List<Annotation> annotationList, XMLContext.Default defaults) {
+		for ( Element element : elementsForProperty ) {
+			if ( "version".equals( element.getName() ) ) {
+				Annotation annotation = buildColumns( element );
+				addIfNotNull(annotationList, annotation);
+				getTemporal( annotationList, element );
+				AnnotationDescriptor basic = new AnnotationDescriptor( Version.class );
+				annotationList.add( AnnotationFactory.create( basic ) );
+			}
+		}
+		if ( elementsForProperty.size() == 0 && defaults.canUseJavaAnnotations() ) {
+			//we have nothing, so Java annotations might occurs
+			Annotation annotation = getJavaAnnotation( Version.class );
+			if ( annotation != null ) {
+				annotationList.add( annotation );
+				annotation = getJavaAnnotation( Column.class );
+				addIfNotNull(annotationList, annotation);
+				annotation = getJavaAnnotation( Columns.class );
+				addIfNotNull(annotationList, annotation);
+				annotation = getJavaAnnotation( Temporal.class );
+				addIfNotNull(annotationList, annotation);
+			}
+		}
+	}
+
+	private void getBasic(List<Annotation> annotationList, XMLContext.Default defaults) {
+		for ( Element element : elementsForProperty ) {
+			if ( "basic".equals( element.getName() ) ) {
+				Annotation annotation = buildColumns( element );
+				addIfNotNull(annotationList, annotation);
+				getTemporal( annotationList, element );
+				getLob( annotationList, element );
+				getEnumerated( annotationList, element );
+				AnnotationDescriptor basic = new AnnotationDescriptor( Basic.class );
+				getFetchType( basic, element );
+				copyBooleanAttribute( basic, element, "optional" );
+				annotationList.add( AnnotationFactory.create( basic ) );
+			}
+		}
+		if ( elementsForProperty.size() == 0 && defaults.canUseJavaAnnotations() ) {
+			//no annotation presence constraint, basic is the default
+			Annotation annotation = getJavaAnnotation( Basic.class );
+			addIfNotNull(annotationList, annotation);
+			annotation = getJavaAnnotation( Lob.class );
+			addIfNotNull(annotationList, annotation);
+			annotation = getJavaAnnotation( Enumerated.class );
+			addIfNotNull(annotationList, annotation);
+			annotation = getJavaAnnotation( Temporal.class );
+			addIfNotNull(annotationList, annotation);
+			annotation = getJavaAnnotation( Column.class );
+			addIfNotNull(annotationList, annotation);
+			annotation = getJavaAnnotation( Columns.class );
+			addIfNotNull(annotationList, annotation);
+			annotation = getJavaAnnotation( AttributeOverride.class );
+			addIfNotNull(annotationList, annotation);
+			annotation = getJavaAnnotation( AttributeOverrides.class );
+			addIfNotNull(annotationList, annotation);
+			annotation = getJavaAnnotation( AssociationOverride.class );
+			addIfNotNull(annotationList, annotation);
+			annotation = getJavaAnnotation( AssociationOverrides.class );
+			addIfNotNull(annotationList, annotation);
+		}
+	}
+
+	private void getEnumerated(List<Annotation> annotationList, Element element) {
+		Element subElement = element != null ? element.element( "enumerated" ) : null;
+		if ( subElement != null ) {
+			AnnotationDescriptor ad = new AnnotationDescriptor( Enumerated.class );
+			String enumerated = subElement.getTextTrim();
+			if ( "ORDINAL".equalsIgnoreCase( enumerated ) ) {
+				ad.setValue( "value", EnumType.ORDINAL );
+			}
+			else if ( "STRING".equalsIgnoreCase( enumerated ) ) {
+				ad.setValue( "value", EnumType.STRING );
+			}
+			else if ( StringHelper.isNotEmpty( enumerated ) ) {
+				throw new AnnotationException( "Unknown EnumType: " + enumerated + ". " + SCHEMA_VALIDATION );
+			}
+			annotationList.add( AnnotationFactory.create( ad ) );
+		}
+	}
+
+	private void getLob(List<Annotation> annotationList, Element element) {
+		Element subElement = element != null ? element.element( "lob" ) : null;
+		if ( subElement != null ) {
+			annotationList.add( AnnotationFactory.create( new AnnotationDescriptor( Lob.class ) ) );
+		}
+	}
+
+	private void getFetchType(AnnotationDescriptor descriptor, Element element) {
+		String fetchString = element != null ? element.attributeValue( "fetch" ) : null;
+		if ( fetchString != null ) {
+			if ( "eager".equalsIgnoreCase( fetchString ) ) {
+				descriptor.setValue( "fetch", FetchType.EAGER );
+			}
+			else if ( "lazy".equalsIgnoreCase( fetchString ) ) {
+				descriptor.setValue( "fetch", FetchType.LAZY );
+			}
+		}
+	}
+
+	private void getEmbeddedId(List<Annotation> annotationList, XMLContext.Default defaults) {
+		for ( Element element : elementsForProperty ) {
+			if ( "embedded-id".equals( element.getName() ) ) {
+				if ( isProcessingId( defaults ) ) {
+					Annotation annotation = getAttributeOverrides( element, defaults );
+					addIfNotNull(annotationList, annotation);
+					annotation = getAssociationOverrides( element, defaults );
+					addIfNotNull(annotationList, annotation);
+					AnnotationDescriptor ad = new AnnotationDescriptor( EmbeddedId.class );
+					annotationList.add( AnnotationFactory.create( ad ) );
+				}
+//				else {
+//					if ( defaults.canUseJavaAnnotations() ) {
+//						if ( ! properOverridingOnMetadataNonComplete ) {
+//							//check that id exists on the other attribute
+//							//TODO Id too?
+//							if ( mirroredAttribute == null || ! mirroredAttribute.isAnnotationPresent(
+//									EmbeddedId.class
+//							) ) {
+//								throw new AnnotationException(
+//										"Cannot override an property with <embedded-id> not having an @EmbeddedId already"
+//								);
+//							}
+//						}
+//					}
+//				}
+			}
+		}
+		if ( elementsForProperty.size() == 0 && defaults.canUseJavaAnnotations() ) {
+			Annotation annotation = getJavaAnnotation( EmbeddedId.class );
+			if ( annotation != null ) {
+				annotationList.add( annotation );
+				annotation = getJavaAnnotation( Column.class );
+				addIfNotNull(annotationList, annotation);
+				annotation = getJavaAnnotation( Columns.class );
+				addIfNotNull(annotationList, annotation);
+				annotation = getJavaAnnotation( GeneratedValue.class );
+				addIfNotNull(annotationList, annotation);
+				annotation = getJavaAnnotation( Temporal.class );
+				addIfNotNull(annotationList, annotation);
+				annotation = getJavaAnnotation( TableGenerator.class );
+				addIfNotNull(annotationList, annotation);
+				annotation = getJavaAnnotation( SequenceGenerator.class );
+				addIfNotNull(annotationList, annotation);
+				annotation = getJavaAnnotation( AttributeOverride.class );
+				addIfNotNull(annotationList, annotation);
+				annotation = getJavaAnnotation( AttributeOverrides.class );
+				addIfNotNull(annotationList, annotation);
+				annotation = getJavaAnnotation( AssociationOverride.class );
+				addIfNotNull(annotationList, annotation);
+				annotation = getJavaAnnotation( AssociationOverrides.class );
+				addIfNotNull(annotationList, annotation);
+			}
+		}
+	}
+
+	private void preCalculateElementsForProperty(Element tree) {
+		elementsForProperty = new ArrayList<Element>();
+		Element element = tree != null ? tree.element( "attributes" ) : null;
+		//put entity.attributes elements
+		if ( element != null ) {
+			for ( Element subelement : (List<Element>) element.elements() ) {
+				if ( propertyName.equals( subelement.attributeValue( "name" ) ) ) {
+					elementsForProperty.add( subelement );
+				}
+			}
+		}
+		//add pre-* etc from entity and pure entity listener classes
+		if (tree != null) {
+			for ( Element subelement : (List<Element>) tree.elements() ) {
+				if ( propertyName.equals( subelement.attributeValue( "method-name" ) ) ) {
+					elementsForProperty.add( subelement );
+				}
+			}
+		}
+	}
+
+	private void getId(List<Annotation> annotationList, XMLContext.Default defaults) {
+		for ( Element element : elementsForProperty ) {
+			if ( "id".equals( element.getName() ) ) {
+				boolean processId = isProcessingId( defaults );
+				if ( processId ) {
+					Annotation annotation = buildColumns( element );
+					addIfNotNull(annotationList, annotation);
+					annotation = buildGeneratedValue( element );
+					addIfNotNull(annotationList, annotation);
+					getTemporal( annotationList, element );
+					//FIXME: fix the priority of xml over java for generator names
+					annotation = getTableGenerator( element, defaults );
+					addIfNotNull(annotationList, annotation);
+					annotation = getSequenceGenerator( element, defaults );
+					addIfNotNull(annotationList, annotation);
+					AnnotationDescriptor id = new AnnotationDescriptor( Id.class );
+					annotationList.add( AnnotationFactory.create( id ) );
+				}
+//				else {
+//					if ( defaults.canUseJavaAnnotations() ) {
+//						if ( ! properOverridingOnMetadataNonComplete ) {
+//							//check that id exists on the other attribute
+//							//TODO EmbeddedId too?
+//							if ( mirroredAttribute == null || ! mirroredAttribute.isAnnotationPresent( Id.class ) ) {
+//								throw new AnnotationException(
+//										"Cannot override a property with <id> it does not have an @Id already"
+//								);
+//							}
+//						}
+//					}
+//				}
+			}
+		}
+		if ( elementsForProperty.size() == 0 && defaults.canUseJavaAnnotations() ) {
+			Annotation annotation = getJavaAnnotation( Id.class );
+			if ( annotation != null ) {
+				annotationList.add( annotation );
+				annotation = getJavaAnnotation( Column.class );
+				addIfNotNull(annotationList, annotation);
+				annotation = getJavaAnnotation( Columns.class );
+				addIfNotNull(annotationList, annotation);
+				annotation = getJavaAnnotation( GeneratedValue.class );
+				addIfNotNull(annotationList, annotation);
+				annotation = getJavaAnnotation( Temporal.class );
+				addIfNotNull(annotationList, annotation);
+				annotation = getJavaAnnotation( TableGenerator.class );
+				addIfNotNull(annotationList, annotation);
+				annotation = getJavaAnnotation( SequenceGenerator.class );
+				addIfNotNull(annotationList, annotation);
+				annotation = getJavaAnnotation( AttributeOverride.class );
+				addIfNotNull(annotationList, annotation);
+				annotation = getJavaAnnotation( AttributeOverrides.class );
+				addIfNotNull(annotationList, annotation);
+				annotation = getJavaAnnotation( AssociationOverride.class );
+				addIfNotNull(annotationList, annotation);
+				annotation = getJavaAnnotation( AssociationOverrides.class );
+				addIfNotNull(annotationList, annotation);
+			}
+		}
+	}
+
+	private boolean isProcessingId(XMLContext.Default defaults) {
+		boolean isExplicit = defaults.getAccess() != null;
+		boolean correctAccess =
+				( PropertyType.PROPERTY.equals( propertyType ) && "property".equals( defaults.getAccess() ) )
+				|| ( PropertyType.FIELD.equals( propertyType ) && "field".equals( defaults.getAccess() ) );
+		boolean hasId = defaults.canUseJavaAnnotations()
+				&& ( isJavaAnnotationPresent( Id.class ) || isJavaAnnotationPresent( EmbeddedId.class ) );
+		//if ( properAccessOnMetadataComplete || properOverridingOnMetadataNonComplete ) {
+		boolean mirrorAttributeIsId = defaults.canUseJavaAnnotations() &&
+				( mirroredAttribute != null &&
+					( mirroredAttribute.isAnnotationPresent(Id.class)
+					|| mirroredAttribute.isAnnotationPresent( EmbeddedId.class ) ) );
+		boolean propertyIsDefault = PropertyType.PROPERTY.equals( propertyType )
+				&& ! mirrorAttributeIsId;
+		return correctAccess || ( ! isExplicit && hasId ) || ( ! isExplicit && propertyIsDefault );
+	}
+
+	private Columns buildColumns(Element element) {
+		List<Element> subelements = element.elements( "column" );
+		List<Column> columns = new ArrayList<Column>( subelements.size() );
+		for ( Element subelement : subelements ) {
+			columns.add( getColumn( subelement, false, element ) );
+		}
+		if ( columns.size() > 0 ) {
+			AnnotationDescriptor columnsDescr = new AnnotationDescriptor( Columns.class );
+			columnsDescr.setValue( "columns", columns.toArray( new Column[ columns.size() ] ) );
+			return AnnotationFactory.create( columnsDescr );
+		}
+		else {
+			return null;
+		}
+	}
+
+	private GeneratedValue buildGeneratedValue(Element element) {
+		Element subElement = element != null ? element.element( "generated-value" ) : null;
+		if ( subElement != null ) {
+			AnnotationDescriptor ad = new AnnotationDescriptor( GeneratedValue.class );
+			String strategy = subElement.attributeValue( "strategy" );
+			if ( "TABLE".equalsIgnoreCase( strategy ) ) {
+				ad.setValue( "strategy", GenerationType.TABLE );
+			}
+			else if ( "SEQUENCE".equalsIgnoreCase( strategy ) ) {
+				ad.setValue( "strategy", GenerationType.SEQUENCE );
+			}
+			else if ( "IDENTITY".equalsIgnoreCase( strategy ) ) {
+				ad.setValue( "strategy", GenerationType.IDENTITY );
+			}
+			else if ( "AUTO".equalsIgnoreCase( strategy ) ) {
+				ad.setValue( "strategy", GenerationType.AUTO );
+			}
+			else if ( StringHelper.isNotEmpty( strategy ) ) {
+				throw new AnnotationException( "Unknown GenerationType: " + strategy + ". " + SCHEMA_VALIDATION );
+			}
+			copyStringAttribute( ad, subElement, "generator", false );
+			return AnnotationFactory.create( ad );
+		}
+		else {
+			return null;
+		}
+	}
+
+	private void getTemporal(List<Annotation> annotationList, Element element) {
+		Element subElement = element != null ? element.element( "temporal" ) : null;
+		if ( subElement != null ) {
+			AnnotationDescriptor ad = new AnnotationDescriptor( Temporal.class );
+			String temporal = subElement.getTextTrim();
+			if ( "DATE".equalsIgnoreCase( temporal ) ) {
+				ad.setValue( "value", TemporalType.DATE );
+			}
+			else if ( "TIME".equalsIgnoreCase( temporal ) ) {
+				ad.setValue( "value", TemporalType.TIME );
+			}
+			else if ( "TIMESTAMP".equalsIgnoreCase( temporal ) ) {
+				ad.setValue( "value", TemporalType.TIMESTAMP );
+			}
+			else if ( StringHelper.isNotEmpty( temporal ) ) {
+				throw new AnnotationException( "Unknown TemporalType: " + temporal + ". " + SCHEMA_VALIDATION );
+			}
+			annotationList.add( AnnotationFactory.create( ad ) );
+		}
+	}
+
+	private AssociationOverrides getAssociationOverrides(Element tree, XMLContext.Default defaults) {
+		List<AssociationOverride> attributes = (List<AssociationOverride>) buildAssociationOverrides( tree );
+		if ( defaults.canUseJavaAnnotations() ) {
+			AssociationOverride annotation = getJavaAnnotation( AssociationOverride.class );
+			addAssociationOverrideIfNeeded( annotation, attributes );
+			AssociationOverrides annotations = getJavaAnnotation( AssociationOverrides.class );
+			if ( annotations != null ) {
+				for ( AssociationOverride current : annotations.value() ) {
+					addAssociationOverrideIfNeeded( current, attributes );
+				}
+			}
+		}
+		if ( attributes.size() > 0 ) {
+			AnnotationDescriptor ad = new AnnotationDescriptor( AssociationOverrides.class );
+			ad.setValue( "value", attributes.toArray( new AssociationOverride[ attributes.size() ] ) );
+			return AnnotationFactory.create( ad );
+		}
+		else {
+			return null;
+		}
+	}
+
+	private List<AssociationOverride> buildAssociationOverrides(Element element) {
+		List<Element> subelements = element == null ? null : element.elements( "association-override" );
+		List<AssociationOverride> overrides = new ArrayList<AssociationOverride>();
+		if ( subelements != null && subelements.size() > 0 ) {
+			for ( Element current : subelements ) {
+				AnnotationDescriptor override = new AnnotationDescriptor( AssociationOverride.class );
+				copyStringAttribute( override, current, "name", true );
+				override.setValue( "joinColumns", getJoinColumns( current, false ) );
+				overrides.add( (AssociationOverride) AnnotationFactory.create( override ) );
+			}
+		}
+		return overrides;
+	}
+
+	private JoinColumn[] getJoinColumns(Element element, boolean isInverse) {
+		List<Element> subelements = element != null ?
+				element.elements( isInverse ? "inverse-join-column" : "join-column" ) :
+				null;
+		List<JoinColumn> joinColumns = new ArrayList<JoinColumn>();
+		if ( subelements != null ) {
+			for ( Element subelement : subelements ) {
+				AnnotationDescriptor column = new AnnotationDescriptor( JoinColumn.class );
+				copyStringAttribute( column, subelement, "name", false );
+				copyStringAttribute( column, subelement, "referenced-column-name", false );
+				copyBooleanAttribute( column, subelement, "unique" );
+				copyBooleanAttribute( column, subelement, "nullable" );
+				copyBooleanAttribute( column, subelement, "insertable" );
+				copyBooleanAttribute( column, subelement, "updatable" );
+				copyStringAttribute( column, subelement, "column-definition", false );
+				copyStringAttribute( column, subelement, "table", false );
+				joinColumns.add( (JoinColumn) AnnotationFactory.create( column ) );
+			}
+		}
+		return joinColumns.toArray( new JoinColumn[ joinColumns.size() ] );
+	}
+
+	private void addAssociationOverrideIfNeeded(AssociationOverride annotation, List<AssociationOverride> overrides) {
+		if ( annotation != null ) {
+			String overrideName = annotation.name();
+			boolean present = false;
+			for ( AssociationOverride current : overrides ) {
+				if ( current.name().equals( overrideName ) ) {
+					present = true;
+					break;
+				}
+			}
+			if ( !present ) overrides.add( annotation );
+		}
+	}
+
+	private AttributeOverrides getAttributeOverrides(Element tree, XMLContext.Default defaults) {
+		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 = getJavaAnnotation( AttributeOverride.class );
+			addAttributeOverrideIfNeeded( annotation, attributes );
+			AttributeOverrides annotations = getJavaAnnotation( AttributeOverrides.class );
+			if ( annotations != null ) {
+				for ( AttributeOverride current : annotations.value() ) {
+					addAttributeOverrideIfNeeded( current, attributes );
+				}
+			}
+		}
+		if ( attributes.size() > 0 ) {
+			AnnotationDescriptor ad = new AnnotationDescriptor( AttributeOverrides.class );
+			ad.setValue( "value", attributes.toArray( new AttributeOverride[ attributes.size() ] ) );
+			return AnnotationFactory.create( ad );
+		}
+		else {
+			return null;
+		}
+	}
+
+	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;
+				override.setValue( "column", getColumn( column, true, current ) );
+				overrides.add( (AttributeOverride) AnnotationFactory.create( override ) );
+			}
+		}
+		return overrides;
+	}
+
+	private Column getColumn(Element element, boolean isMandatory, Element current) {
+		//Element subelement = element != null ? element.element( "column" ) : null;
+		if ( element != null ) {
+			AnnotationDescriptor column = new AnnotationDescriptor( Column.class );
+			copyStringAttribute( column, element, "name", false );
+			copyBooleanAttribute( column, element, "unique" );
+			copyBooleanAttribute( column, element, "nullable" );
+			copyBooleanAttribute( column, element, "insertable" );
+			copyBooleanAttribute( column, element, "updatable" );
+			copyStringAttribute( column, element, "column-definition", false );
+			copyStringAttribute( column, element, "table", false );
+			copyIntegerAttribute( column, element, "length" );
+			copyIntegerAttribute( column, element, "precision" );
+			copyIntegerAttribute( column, element, "scale" );
+			return (Column) AnnotationFactory.create( column );
+		}
+		else {
+			if ( isMandatory ) {
+				throw new AnnotationException( current.getPath() + ".column is mandatory. " + SCHEMA_VALIDATION );
+			}
+			return null;
+		}
+	}
+
+	private void addAttributeOverrideIfNeeded(AttributeOverride annotation, List<AttributeOverride> overrides) {
+		if ( annotation != null ) {
+			String overrideName = annotation.name();
+			boolean present = false;
+			for ( AttributeOverride current : overrides ) {
+				if ( current.name().equals( overrideName ) ) {
+					present = true;
+					break;
+				}
+			}
+			if ( !present ) overrides.add( annotation );
+		}
+	}
+
+	private AccessType getAccessType(Element tree, XMLContext.Default defaults) {
+		String access = tree == null ? null : tree.attributeValue( "access" );
+		if ( "FIELD".equals( access ) || "PROPERTY".equals( access ) ) {
+			access = access.toLowerCase();
+		}
+		if ( access != null ) {
+			AnnotationDescriptor ad = new AnnotationDescriptor( AccessType.class );
+			ad.setValue( "value", access );
+			return AnnotationFactory.create( ad );
+		}
+		else if ( defaults.canUseJavaAnnotations() && isJavaAnnotationPresent( AccessType.class ) ) {
+			AccessType annotation = getJavaAnnotation( AccessType.class );
+			return annotation;
+		}
+		else if ( defaults.getAccess() != null ) {
+			AnnotationDescriptor ad = new AnnotationDescriptor( AccessType.class );
+			ad.setValue( "value", defaults.getAccess() );
+			return AnnotationFactory.create( ad );
+		}
+		else {
+			return null;
+		}
+	}
+
+	private ExcludeSuperclassListeners getExcludeSuperclassListeners(Element tree, XMLContext.Default defaults) {
+		return (ExcludeSuperclassListeners) getMarkerAnnotation( ExcludeSuperclassListeners.class, tree, defaults );
+	}
+
+	private ExcludeDefaultListeners getExcludeDefaultListeners(Element tree, XMLContext.Default defaults) {
+		return (ExcludeDefaultListeners) getMarkerAnnotation( ExcludeDefaultListeners.class, tree, defaults );
+	}
+
+	private Annotation getMarkerAnnotation(
+			Class<? extends Annotation> clazz, Element element, XMLContext.Default defaults
+	) {
+		Element subelement = element == null ? null : element.element( annotationToXml.get( clazz ) );
+		if ( subelement != null ) {
+			return AnnotationFactory.create( new AnnotationDescriptor( clazz ) );
+		}
+		else if ( defaults.canUseJavaAnnotations() ) {
+			//TODO wonder whether it should be excluded so that user can undone it
+			return getJavaAnnotation( clazz );
+		}
+		else {
+			return null;
+		}
+	}
+
+	private SqlResultSetMappings getSqlResultSetMappings(Element tree, XMLContext.Default defaults) {
+		List<SqlResultSetMapping> results = (List<SqlResultSetMapping>) buildSqlResultsetMappings( tree, defaults );
+		if ( defaults.canUseJavaAnnotations() ) {
+			SqlResultSetMapping annotation = getJavaAnnotation( SqlResultSetMapping.class );
+			addSqlResultsetMappingIfNeeded( annotation, results );
+			SqlResultSetMappings annotations = getJavaAnnotation( SqlResultSetMappings.class );
+			if ( annotations != null ) {
+				for ( SqlResultSetMapping current : annotations.value() ) {
+					addSqlResultsetMappingIfNeeded( current, results );
+				}
+			}
+		}
+		if ( results.size() > 0 ) {
+			AnnotationDescriptor ad = new AnnotationDescriptor( SqlResultSetMappings.class );
+			ad.setValue( "value", results.toArray( new SqlResultSetMapping[ results.size() ] ) );
+			return AnnotationFactory.create( ad );
+		}
+		else {
+			return null;
+		}
+	}
+
+	public static List<SqlResultSetMapping> buildSqlResultsetMappings(Element element, XMLContext.Default defaults) {
+		if ( element == null ) return new ArrayList<SqlResultSetMapping>();
+		List resultsetElementList = element.elements( "sql-result-set-mapping" );
+		List<SqlResultSetMapping> resultsets = new ArrayList<SqlResultSetMapping>();
+		Iterator it = resultsetElementList.listIterator();
+		while ( it.hasNext() ) {
+			Element subelement = (Element) it.next();
+			AnnotationDescriptor ann = new AnnotationDescriptor( SqlResultSetMapping.class );
+			copyStringAttribute( ann, subelement, "name", true );
+			List<Element> elements = subelement.elements( "entity-result" );
+			List<EntityResult> entityResults = new ArrayList<EntityResult>( elements.size() );
+			for ( Element entityResult : elements ) {
+				AnnotationDescriptor entityResultDescriptor = new AnnotationDescriptor( EntityResult.class );
+				String clazzName = entityResult.attributeValue( "entity-class" );
+				if ( clazzName == null ) {
+					throw new AnnotationException( "<entity-result> without entity-class. " + SCHEMA_VALIDATION );
+				}
+				Class clazz = null;
+				try {
+					clazz = ReflectHelper.classForName(
+							XMLContext.buildSafeClassName( clazzName, defaults ),
+							EJB3OverridenAnnotationReader.class
+					);
+				}
+				catch (ClassNotFoundException e) {
+					throw new AnnotationException( "Unable to find entity-class: " + clazzName, e );
+				}
+				entityResultDescriptor.setValue( "entityClass", clazz );
+				copyStringAttribute( entityResultDescriptor, entityResult, "discriminator-column", false );
+				List<FieldResult> fieldResults = new ArrayList<FieldResult>();
+				for ( Element fieldResult : (List<Element>) entityResult.elements( "field-result" ) ) {
+					AnnotationDescriptor fieldResultDescriptor = new AnnotationDescriptor( FieldResult.class );
+					copyStringAttribute( fieldResultDescriptor, fieldResult, "name", true );
+					copyStringAttribute( fieldResultDescriptor, fieldResult, "column", true );
+					fieldResults.add( (FieldResult) AnnotationFactory.create( fieldResultDescriptor ) );
+				}
+				entityResultDescriptor.setValue(
+						"fields", fieldResults.toArray( new FieldResult[ fieldResults.size() ] )
+				);
+				entityResults.add( (EntityResult) AnnotationFactory.create( entityResultDescriptor ) );
+			}
+			ann.setValue( "entities", entityResults.toArray( new EntityResult[ entityResults.size() ] ) );
+
+			elements = subelement.elements( "column-result" );
+			List<ColumnResult> columnResults = new ArrayList<ColumnResult>( elements.size() );
+			for ( Element columnResult : elements ) {
+				AnnotationDescriptor columnResultDescriptor = new AnnotationDescriptor( ColumnResult.class );
+				copyStringAttribute( columnResultDescriptor, columnResult, "name", true );
+				columnResults.add( (ColumnResult) AnnotationFactory.create( columnResultDescriptor ) );
+			}
+			ann.setValue( "columns", columnResults.toArray( new ColumnResult[ columnResults.size() ] ) );
+			//FIXME there is never such a result-class, get rid of it?
+			String clazzName = subelement.attributeValue( "result-class" );
+			if ( StringHelper.isNotEmpty( clazzName ) ) {
+				Class clazz = null;
+				try {
+					clazz = ReflectHelper.classForName(
+							XMLContext.buildSafeClassName( clazzName, defaults ),
+							EJB3OverridenAnnotationReader.class
+					);
+				}
+				catch (ClassNotFoundException e) {
+					throw new AnnotationException( "Unable to find entity-class: " + clazzName, e );
+				}
+				ann.setValue( "resultClass", clazz );
+			}
+			copyStringAttribute( ann, subelement, "result-set-mapping", false );
+			resultsets.add( (SqlResultSetMapping) AnnotationFactory.create( ann ) );
+		}
+		return resultsets;
+	}
+
+	private void addSqlResultsetMappingIfNeeded(SqlResultSetMapping annotation, List<SqlResultSetMapping> resultsets) {
+		if ( annotation != null ) {
+			String resultsetName = annotation.name();
+			boolean present = false;
+			for ( SqlResultSetMapping current : resultsets ) {
+				if ( current.name().equals( resultsetName ) ) {
+					present = true;
+					break;
+				}
+			}
+			if ( !present ) resultsets.add( annotation );
+		}
+	}
+
+	private NamedQueries getNamedQueries(Element tree, XMLContext.Default defaults) {
+        //TODO avoid the Proxy Creation (@NamedQueries) when possible
+        List<NamedQuery> queries = (List<NamedQuery>) buildNamedQueries( tree, false, defaults );
+		if ( defaults.canUseJavaAnnotations() ) {
+			NamedQuery annotation = getJavaAnnotation( NamedQuery.class );
+			addNamedQueryIfNeeded( annotation, queries );
+			NamedQueries annotations = getJavaAnnotation( NamedQueries.class );
+			if ( annotations != null ) {
+				for ( NamedQuery current : annotations.value() ) {
+					addNamedQueryIfNeeded( current, queries );
+				}
+			}
+		}
+		if ( queries.size() > 0 ) {
+			AnnotationDescriptor ad = new AnnotationDescriptor( NamedQueries.class );
+			ad.setValue( "value", queries.toArray( new NamedQuery[ queries.size() ] ) );
+			return AnnotationFactory.create( ad );
+		}
+		else {
+			return null;
+		}
+	}
+
+	private void addNamedQueryIfNeeded(NamedQuery annotation, List<NamedQuery> queries) {
+		if ( annotation != null ) {
+			String queryName = annotation.name();
+			boolean present = false;
+			for ( NamedQuery current : queries ) {
+				if ( current.name().equals( queryName ) ) {
+					present = true;
+					break;
+				}
+			}
+			if ( !present ) queries.add( annotation );
+		}
+	}
+
+	private NamedNativeQueries getNamedNativeQueries(Element tree, XMLContext.Default defaults) {
+		List<NamedNativeQuery> queries = (List<NamedNativeQuery>) buildNamedQueries( tree, true, defaults );
+		if ( defaults.canUseJavaAnnotations() ) {
+			NamedNativeQuery annotation = getJavaAnnotation( NamedNativeQuery.class );
+			addNamedNativeQueryIfNeeded( annotation, queries );
+			NamedNativeQueries annotations = getJavaAnnotation( NamedNativeQueries.class );
+			if ( annotations != null ) {
+				for ( NamedNativeQuery current : annotations.value() ) {
+					addNamedNativeQueryIfNeeded( current, queries );
+				}
+			}
+		}
+		if ( queries.size() > 0 ) {
+			AnnotationDescriptor ad = new AnnotationDescriptor( NamedNativeQueries.class );
+			ad.setValue( "value", queries.toArray( new NamedNativeQuery[ queries.size() ] ) );
+			return AnnotationFactory.create( ad );
+		}
+		else {
+			return null;
+		}
+	}
+
+	private void addNamedNativeQueryIfNeeded(NamedNativeQuery annotation, List<NamedNativeQuery> queries) {
+		if ( annotation != null ) {
+			String queryName = annotation.name();
+			boolean present = false;
+			for ( NamedNativeQuery current : queries ) {
+				if ( current.name().equals( queryName ) ) {
+					present = true;
+					break;
+				}
+			}
+			if ( !present ) queries.add( annotation );
+		}
+	}
+
+	public static List buildNamedQueries(Element element, boolean isNative, XMLContext.Default defaults) {
+		if ( element == null ) return new ArrayList();
+		List namedQueryElementList = isNative ?
+				element.elements( "named-native-query" ) :
+				element.elements( "named-query" );
+		List namedQueries = new ArrayList();
+		Iterator it = namedQueryElementList.listIterator();
+		while ( it.hasNext() ) {
+			Element subelement = (Element) it.next();
+			AnnotationDescriptor ann = new AnnotationDescriptor(
+					isNative ? NamedNativeQuery.class : NamedQuery.class
+			);
+			copyStringAttribute( ann, subelement, "name", false );
+			Element queryElt = subelement.element( "query" );
+			if ( queryElt == null ) throw new AnnotationException( "No <query> element found." + SCHEMA_VALIDATION );
+			ann.setValue( "query", queryElt.getTextTrim() );
+			List<Element> elements = subelement.elements( "hint" );
+			List<QueryHint> queryHints = new ArrayList<QueryHint>( elements.size() );
+			for ( Element hint : elements ) {
+				AnnotationDescriptor hintDescriptor = new AnnotationDescriptor( QueryHint.class );
+				String value = hint.attributeValue( "name" );
+				if ( value == null ) throw new AnnotationException( "<hint> without name. " + SCHEMA_VALIDATION );
+				hintDescriptor.setValue( "name", value );
+				value = hint.attributeValue( "value" );
+				if ( value == null ) throw new AnnotationException( "<hint> without value. " + SCHEMA_VALIDATION );
+				hintDescriptor.setValue( "value", value );
+				queryHints.add( (QueryHint) AnnotationFactory.create( hintDescriptor ) );
+			}
+			ann.setValue( "hints", queryHints.toArray( new QueryHint[ queryHints.size() ] ) );
+			String clazzName = subelement.attributeValue( "result-class" );
+			if ( StringHelper.isNotEmpty( clazzName ) ) {
+				Class clazz = null;
+				try {
+					clazz = ReflectHelper.classForName(
+							XMLContext.buildSafeClassName( clazzName, defaults ),
+							EJB3OverridenAnnotationReader.class
+					);
+				}
+				catch (ClassNotFoundException e) {
+					throw new AnnotationException( "Unable to find entity-class: " + clazzName, e );
+				}
+				ann.setValue( "resultClass", clazz );
+			}
+			copyStringAttribute( ann, subelement, "result-set-mapping", false );
+			namedQueries.add( AnnotationFactory.create( ann ) );
+		}
+		return namedQueries;
+	}
+
+	private TableGenerator getTableGenerator(Element tree, XMLContext.Default defaults) {
+		Element element = tree != null ? tree.element( annotationToXml.get( TableGenerator.class ) ) : null;
+		if ( element != null ) {
+			return buildTableGeneratorAnnotation( element, defaults );
+		}
+		else if ( defaults.canUseJavaAnnotations() && isJavaAnnotationPresent( TableGenerator.class ) ) {
+			TableGenerator tableAnn = getJavaAnnotation( 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;
+		}
+	}
+
+	public static TableGenerator buildTableGeneratorAnnotation(Element element, XMLContext.Default defaults) {
+		AnnotationDescriptor ad = new AnnotationDescriptor( TableGenerator.class );
+		copyStringAttribute( ad, element, "name", false );
+		copyStringAttribute( ad, element, "table", false );
+		copyStringAttribute( ad, element, "catalog", false );
+		copyStringAttribute( ad, element, "schema", false );
+		copyStringAttribute( ad, element, "pk-column-name", false );
+		copyStringAttribute( ad, element, "value-column-name", false );
+		copyStringAttribute( ad, element, "pk-column-value", false );
+		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 );
+	}
+
+	private SequenceGenerator getSequenceGenerator(Element tree, XMLContext.Default defaults) {
+		Element element = tree != null ? tree.element( annotationToXml.get( SequenceGenerator.class ) ) : null;
+		if ( element != null ) {
+			return buildSequenceGeneratorAnnotation( element );
+		}
+		else if ( defaults.canUseJavaAnnotations() ) {
+			return getJavaAnnotation( SequenceGenerator.class );
+		}
+		else {
+			return null;
+		}
+	}
+
+	public static SequenceGenerator buildSequenceGeneratorAnnotation(Element element) {
+		if (element != null) {
+			AnnotationDescriptor ad = new AnnotationDescriptor( SequenceGenerator.class );
+			copyStringAttribute( ad, element, "name", false );
+			copyStringAttribute( ad, element, "sequence-name", false );
+			copyIntegerAttribute( ad, element, "initial-value" );
+			copyIntegerAttribute( ad, element, "allocation-size" );
+			return AnnotationFactory.create( ad );
+		}
+		else {
+			return null;
+		}
+	}
+
+	private DiscriminatorColumn getDiscriminatorColumn(Element tree, XMLContext.Default defaults) {
+		Element element = tree != null ? tree.element( "discriminator-column" ) : null;
+		if ( element != null ) {
+			AnnotationDescriptor ad = new AnnotationDescriptor( DiscriminatorColumn.class );
+			copyStringAttribute( ad, element, "name", false );
+			copyStringAttribute( ad, element, "column-definition", false );
+			String value = element.attributeValue( "discriminator-type" );
+			DiscriminatorType type = DiscriminatorType.STRING;
+			if ( value != null ) {
+				if ( "STRING".equals( value ) ) {
+					type = DiscriminatorType.STRING;
+				}
+				else if ( "CHAR".equals( value ) ) {
+					type = DiscriminatorType.CHAR;
+				}
+				else if ( "INTEGER".equals( value ) ) {
+					type = DiscriminatorType.INTEGER;
+				}
+				else {
+					throw new AnnotationException(
+							"Unknown DiscrimiatorType in XML: " + value + " (" + SCHEMA_VALIDATION + ")"
+					);
+				}
+			}
+			ad.setValue( "discriminatorType", type );
+			copyIntegerAttribute( ad, element, "length" );
+			return AnnotationFactory.create( ad );
+		}
+		else if ( defaults.canUseJavaAnnotations() ) {
+			return getJavaAnnotation( DiscriminatorColumn.class );
+		}
+		else {
+			return null;
+		}
+	}
+
+	private DiscriminatorValue getDiscriminatorValue(Element tree, XMLContext.Default defaults) {
+		Element element = tree != null ? tree.element( "discriminator-value" ) : null;
+		if ( element != null ) {
+			AnnotationDescriptor ad = new AnnotationDescriptor( DiscriminatorValue.class );
+			copyStringElement( element, ad, "value" );
+			return AnnotationFactory.create( ad );
+		}
+		else if ( defaults.canUseJavaAnnotations() ) {
+			return getJavaAnnotation( DiscriminatorValue.class );
+		}
+		else {
+			return null;
+		}
+	}
+
+	private Inheritance getInheritance(Element tree, XMLContext.Default defaults) {
+		Element element = tree != null ? tree.element( "inheritance" ) : null;
+		if ( element != null ) {
+			AnnotationDescriptor ad = new AnnotationDescriptor( Inheritance.class );
+			Attribute attr = element.attribute( "strategy" );
+			InheritanceType strategy = InheritanceType.SINGLE_TABLE;
+			if ( attr != null ) {
+				String value = attr.getValue();
+				if ( "SINGLE_TABLE".equals( value ) ) {
+					strategy = InheritanceType.SINGLE_TABLE;
+				}
+				else if ( "JOINED".equals( value ) ) {
+					strategy = InheritanceType.JOINED;
+				}
+				else if ( "TABLE_PER_CLASS".equals( value ) ) {
+					strategy = InheritanceType.TABLE_PER_CLASS;
+				}
+				else {
+					throw new AnnotationException(
+							"Unknown InheritanceType in XML: " + value + " (" + SCHEMA_VALIDATION + ")"
+					);
+				}
+			}
+			ad.setValue( "strategy", strategy );
+			return AnnotationFactory.create( ad );
+		}
+		else if ( defaults.canUseJavaAnnotations() ) {
+			return getJavaAnnotation( Inheritance.class );
+		}
+		else {
+			return null;
+		}
+	}
+
+	private IdClass getIdClass(Element tree, XMLContext.Default defaults) {
+		Element element = tree == null ? null : tree.element( "id-class" );
+		if ( element != null ) {
+			Attribute attr = element.attribute( "class" );
+			if ( attr != null ) {
+				AnnotationDescriptor ad = new AnnotationDescriptor( IdClass.class );
+				Class clazz = null;
+				try {
+					clazz = ReflectHelper.classForName(
+							XMLContext.buildSafeClassName( attr.getValue(), defaults ),
+							this.getClass()
+					);
+				}
+				catch (ClassNotFoundException e) {
+					throw new AnnotationException( "Unable to find id-class: " + attr.getValue(), e );
+				}
+				ad.setValue( "value", clazz );
+				return AnnotationFactory.create( ad );
+			}
+			else {
+				throw new AnnotationException( "id-class without class. " + SCHEMA_VALIDATION );
+			}
+		}
+		else if ( defaults.canUseJavaAnnotations() ) {
+			return getJavaAnnotation( IdClass.class );
+		}
+		else {
+			return null;
+		}
+	}
+
+	private PrimaryKeyJoinColumns getPrimaryKeyJoinColumns(Element element, XMLContext.Default defaults) {
+		PrimaryKeyJoinColumn[] columns = buildPrimaryKeyJoinColumns( element );
+		if ( columns.length == 0 && defaults.canUseJavaAnnotations() ) {
+			PrimaryKeyJoinColumn annotation = getJavaAnnotation( PrimaryKeyJoinColumn.class );
+			if ( annotation != null ) {
+				columns = new PrimaryKeyJoinColumn[]{annotation};
+			}
+			else {
+				PrimaryKeyJoinColumns annotations = getJavaAnnotation( PrimaryKeyJoinColumns.class );
+				columns = annotations != null ? annotations.value() : columns;
+			}
+		}
+		if ( columns.length > 0 ) {
+			AnnotationDescriptor ad = new AnnotationDescriptor( PrimaryKeyJoinColumns.class );
+			ad.setValue( "value", columns );
+			return AnnotationFactory.create( ad );
+		}
+		else {
+			return null;
+		}
+	}
+
+	private Entity getEntity(Element tree, XMLContext.Default defaults) {
+		if ( tree == null ) {
+			return defaults.canUseJavaAnnotations() ? getJavaAnnotation( Entity.class ) : null;
+		}
+		else {
+			if ( "entity".equals( tree.getName() ) ) {
+				AnnotationDescriptor entity = new AnnotationDescriptor( Entity.class );
+				copyStringAttribute( entity, tree, "name", false );
+				if ( defaults.canUseJavaAnnotations()
+						&& StringHelper.isEmpty( (String) entity.valueOf( "name" ) ) ) {
+					Entity javaAnn = getJavaAnnotation( Entity.class );
+					if ( javaAnn != null ) entity.setValue( "name", javaAnn.name() );
+				}
+				return AnnotationFactory.create( entity );
+			}
+			else {
+				return null; //this is not an entity
+			}
+		}
+	}
+
+	private MappedSuperclass getMappedSuperclass(Element tree, XMLContext.Default defaults) {
+		if ( tree == null ) {
+			return defaults.canUseJavaAnnotations() ? getJavaAnnotation( MappedSuperclass.class ) : null;
+		}
+		else {
+			if ( "mapped-superclass".equals( tree.getName() ) ) {
+				AnnotationDescriptor entity = new AnnotationDescriptor( MappedSuperclass.class );
+				return AnnotationFactory.create( entity );
+			}
+			else {
+				return null; //this is not an entity
+			}
+		}
+	}
+
+	private Embeddable getEmbeddable(Element tree, XMLContext.Default defaults) {
+		if ( tree == null ) {
+			return defaults.canUseJavaAnnotations() ? getJavaAnnotation( Embeddable.class ) : null;
+		}
+		else {
+			if ( "embeddable".equals( tree.getName() ) ) {
+				AnnotationDescriptor entity = new AnnotationDescriptor( Embeddable.class );
+				return AnnotationFactory.create( entity );
+			}
+			else {
+				return null; //this is not an entity
+			}
+		}
+	}
+
+	private Table getTable(Element tree, XMLContext.Default defaults) {
+		Element subelement = tree == null ? null : tree.element( "table" );
+		if ( subelement == null ) {
+			//no element but might have some default or some annotation
+			if ( StringHelper.isNotEmpty( defaults.getCatalog() )
+					|| StringHelper.isNotEmpty( defaults.getSchema() ) ) {
+				AnnotationDescriptor annotation = new AnnotationDescriptor( Table.class );
+				if ( defaults.canUseJavaAnnotations() ) {
+					Table table = getJavaAnnotation( Table.class );
+					if ( table != null ) {
+						annotation.setValue( "name", table.name() );
+						annotation.setValue( "schema", table.schema() );
+						annotation.setValue( "catalog", table.catalog() );
+						annotation.setValue( "uniqueConstraints", table.uniqueConstraints() );
+					}
+				}
+				if ( StringHelper.isEmpty( (String) annotation.valueOf( "schema" ) )
+						&& StringHelper.isNotEmpty( defaults.getSchema() ) ) {
+					annotation.setValue( "schema", defaults.getSchema() );
+				}
+				if ( StringHelper.isEmpty( (String) annotation.valueOf( "catalog" ) )
+						&& StringHelper.isNotEmpty( defaults.getCatalog() ) ) {
+					annotation.setValue( "catalog", defaults.getCatalog() );
+				}
+				return AnnotationFactory.create( annotation );
+			}
+			else if ( defaults.canUseJavaAnnotations() ) {
+				return getJavaAnnotation( Table.class );
+			}
+			else {
+				return null;
+			}
+		}
+		else {
+			//ignore java annotation, an element is defined
+			AnnotationDescriptor annotation = new AnnotationDescriptor( Table.class );
+			copyStringAttribute( annotation, subelement, "name", false );
+			copyStringAttribute( annotation, subelement, "catalog", false );
+			if ( StringHelper.isNotEmpty( defaults.getCatalog() )
+					&& StringHelper.isEmpty( (String) annotation.valueOf( "catalog" ) ) ) {
+				annotation.setValue( "catalog", defaults.getCatalog() );
+			}
+			copyStringAttribute( annotation, subelement, "schema", false );
+			if ( StringHelper.isNotEmpty( defaults.getSchema() )
+					&& StringHelper.isEmpty( (String) annotation.valueOf( "schema" ) ) ) {
+				annotation.setValue( "schema", defaults.getSchema() );
+			}
+			buildUniqueConstraints( annotation, subelement );
+			return AnnotationFactory.create( annotation );
+		}
+	}
+
+	private SecondaryTables getSecondaryTables(Element tree, XMLContext.Default defaults) {
+		List<Element> elements = tree == null ?
+				new ArrayList<Element>() :
+				(List<Element>) tree.elements( "secondary-table" );
+		List<SecondaryTable> secondaryTables = new ArrayList<SecondaryTable>( 3 );
+		for ( Element element : elements ) {
+			AnnotationDescriptor annotation = new AnnotationDescriptor( SecondaryTable.class );
+			copyStringAttribute( annotation, element, "name", false );
+			copyStringAttribute( annotation, element, "catalog", false );
+			if ( StringHelper.isNotEmpty( defaults.getCatalog() )
+					&& StringHelper.isEmpty( (String) annotation.valueOf( "catalog" ) ) ) {
+				annotation.setValue( "catalog", defaults.getCatalog() );
+			}
+			copyStringAttribute( annotation, element, "schema", false );
+			if ( StringHelper.isNotEmpty( defaults.getSchema() )
+					&& StringHelper.isEmpty( (String) annotation.valueOf( "schema" ) ) ) {
+				annotation.setValue( "schema", defaults.getSchema() );
+			}
+			buildUniqueConstraints( annotation, element );
+			annotation.setValue( "pkJoinColumns", buildPrimaryKeyJoinColumns( element ) );
+			secondaryTables.add( (SecondaryTable) AnnotationFactory.create( annotation ) );
+		}
+		/*
+		 * You can't have both secondary table in XML and Java,
+		 * since there would be no way to "remove" a secondary table
+		 */
+		if ( secondaryTables.size() == 0 && defaults.canUseJavaAnnotations() ) {
+			SecondaryTable secTableAnn = getJavaAnnotation( SecondaryTable.class );
+			overridesDefaultInSecondaryTable( secTableAnn, defaults, secondaryTables );
+			SecondaryTables secTablesAnn = getJavaAnnotation( SecondaryTables.class );
+			if ( secTablesAnn != null ) {
+				for ( SecondaryTable table : secTablesAnn.value() ) {
+					overridesDefaultInSecondaryTable( table, defaults, secondaryTables );
+				}
+			}
+		}
+		if ( secondaryTables.size() > 0 ) {
+			AnnotationDescriptor descriptor = new AnnotationDescriptor( SecondaryTables.class );
+			descriptor.setValue( "value", secondaryTables.toArray( new SecondaryTable[secondaryTables.size()] ) );
+			return AnnotationFactory.create( descriptor );
+		}
+		else {
+			return null;
+		}
+	}
+
+	private void overridesDefaultInSecondaryTable(
+			SecondaryTable secTableAnn, XMLContext.Default defaults, List<SecondaryTable> secondaryTables
+	) {
+		if ( secTableAnn != null ) {
+			//handle default values
+			if ( StringHelper.isNotEmpty( defaults.getCatalog() )
+					|| StringHelper.isNotEmpty( defaults.getSchema() ) ) {
+				AnnotationDescriptor annotation = new AnnotationDescriptor( SecondaryTable.class );
+				annotation.setValue( "name", secTableAnn.name() );
+				annotation.setValue( "schema", secTableAnn.schema() );
+				annotation.setValue( "catalog", secTableAnn.catalog() );
+				annotation.setValue( "uniqueConstraints", secTableAnn.uniqueConstraints() );
+				annotation.setValue( "pkJoinColumns", secTableAnn.pkJoinColumns() );
+				if ( StringHelper.isEmpty( (String) annotation.valueOf( "schema" ) )
+						&& StringHelper.isNotEmpty( defaults.getSchema() ) ) {
+					annotation.setValue( "schema", defaults.getSchema() );
+				}
+				if ( StringHelper.isEmpty( (String) annotation.valueOf( "catalog" ) )
+						&& StringHelper.isNotEmpty( defaults.getCatalog() ) ) {
+					annotation.setValue( "catalog", defaults.getCatalog() );
+				}
+				secondaryTables.add( (SecondaryTable) AnnotationFactory.create( annotation ) );
+			}
+			else {
+				secondaryTables.add( secTableAnn );
+			}
+		}
+	}
+
+	private static void buildUniqueConstraints(AnnotationDescriptor annotation, Element element) {
+		List uniqueConstraintElementList = element.elements( "unique-constraint" );
+		UniqueConstraint[] uniqueConstraints = new UniqueConstraint[ uniqueConstraintElementList.size() ];
+		int ucIndex = 0;
+		Iterator ucIt = uniqueConstraintElementList.listIterator();
+		while ( ucIt.hasNext() ) {
+			Element subelement = (Element) ucIt.next();
+			List<Element> columnNamesElements = subelement.elements( "column-name" );
+			String[] columnNames = new String[columnNamesElements.size()];
+			int columnNameIndex = 0;
+			Iterator it = columnNamesElements.listIterator();
+			while ( it.hasNext() ) {
+				Element columnNameElt = (Element) it.next();
+				columnNames[columnNameIndex++] = columnNameElt.getTextTrim();
+			}
+			AnnotationDescriptor ucAnn = new AnnotationDescriptor( UniqueConstraint.class );
+			ucAnn.setValue( "columnNames", columnNames );
+			uniqueConstraints[ucIndex++] = AnnotationFactory.create( ucAnn );
+		}
+		annotation.setValue( "uniqueConstraints", uniqueConstraints );
+	}
+
+	private PrimaryKeyJoinColumn[] buildPrimaryKeyJoinColumns(Element element) {
+		if ( element == null ) return new PrimaryKeyJoinColumn[]{};
+		List pkJoinColumnElementList = element.elements( "primary-key-join-column" );
+		PrimaryKeyJoinColumn[] pkJoinColumns = new PrimaryKeyJoinColumn[ pkJoinColumnElementList.size() ];
+		int index = 0;
+		Iterator pkIt = pkJoinColumnElementList.listIterator();
+		while ( pkIt.hasNext() ) {
+			Element subelement = (Element) pkIt.next();
+			AnnotationDescriptor pkAnn = new AnnotationDescriptor( PrimaryKeyJoinColumn.class );
+			copyStringAttribute( pkAnn, subelement, "name", false );
+			copyStringAttribute( pkAnn, subelement, "referenced-column-name", false );
+			copyStringAttribute( pkAnn, subelement, "column-definition", false );
+			pkJoinColumns[index++] = AnnotationFactory.create( pkAnn );
+		}
+		return pkJoinColumns;
+	}
+
+	private static void copyStringAttribute(
+			AnnotationDescriptor annotation, Element element, String attributeName, boolean mandatory
+	) {
+		String attribute = element.attributeValue( attributeName );
+		if ( attribute != null ) {
+			String annotationAttributeName = getJavaAttributeNameFromXMLOne( attributeName );
+			annotation.setValue( annotationAttributeName, attribute );
+		}
+		else {
+			if ( mandatory ) {
+				throw new AnnotationException(
+						element.getName() + "." + attributeName + " is mandatory in XML overring. " + SCHEMA_VALIDATION
+				);
+			}
+		}
+	}
+
+	private static void copyIntegerAttribute(AnnotationDescriptor annotation, Element element, String attributeName) {
+		String attribute = element.attributeValue( attributeName );
+		if ( attribute != null ) {
+			String annotationAttributeName = getJavaAttributeNameFromXMLOne( attributeName );
+			annotation.setValue( annotationAttributeName, attribute );
+			try {
+				int length = Integer.parseInt( attribute );
+				annotation.setValue( annotationAttributeName, length );
+			}
+			catch (NumberFormatException e) {
+				throw new AnnotationException(
+						element.getPath() + attributeName + " not parseable: " + attribute + " (" + SCHEMA_VALIDATION + ")"
+				);
+			}
+		}
+	}
+
+	private static String getJavaAttributeNameFromXMLOne(String attributeName) {
+		StringBuilder annotationAttributeName = new StringBuilder( attributeName );
+		int index = annotationAttributeName.indexOf( WORD_SEPARATOR );
+		while ( index != -1 ) {
+			annotationAttributeName.deleteCharAt( index );
+			annotationAttributeName.setCharAt(
+					index, Character.toUpperCase( annotationAttributeName.charAt( index ) )
+			);
+			index = annotationAttributeName.indexOf( WORD_SEPARATOR );
+		}
+		return annotationAttributeName.toString();
+	}
+
+	private static void copyStringElement(Element element, AnnotationDescriptor ad, String annotationAttribute) {
+		String discr = element.getTextTrim();
+		ad.setValue( annotationAttribute, discr );
+	}
+
+	private static void copyBooleanAttribute(AnnotationDescriptor descriptor, Element element, String attribute) {
+		String attributeValue = element.attributeValue( attribute );
+		if ( StringHelper.isNotEmpty( attributeValue ) ) {
+			String javaAttribute = getJavaAttributeNameFromXMLOne( attribute );
+			descriptor.setValue( javaAttribute, Boolean.parseBoolean( attributeValue ) );
+		}
+	}
+
+    private <T extends Annotation> T getJavaAnnotation(Class<T> annotationType) {
+        return element.getAnnotation( annotationType );
+    }
+
+    private <T extends Annotation> boolean isJavaAnnotationPresent(Class<T> annotationType) {
+        return element.isAnnotationPresent( annotationType );
+    }
+
+    private Annotation[] getJavaAnnotations() {
+        return element.getAnnotations();
+    }
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/reflection/EJB3ReflectionManager.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/reflection/EJB3ReflectionManager.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/reflection/EJB3ReflectionManager.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,102 +0,0 @@
-package org.hibernate.cfg.annotations.reflection;
-
-import java.lang.reflect.AnnotatedElement;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.persistence.EntityListeners;
-import javax.persistence.NamedNativeQuery;
-import javax.persistence.NamedQuery;
-import javax.persistence.SequenceGenerator;
-import javax.persistence.SqlResultSetMapping;
-import javax.persistence.TableGenerator;
-
-import org.dom4j.Element;
-import org.hibernate.annotations.common.reflection.AnnotationReader;
-import org.hibernate.annotations.common.reflection.java.JavaReflectionManager;
-import org.hibernate.util.ReflectHelper;
-
-public class EJB3ReflectionManager extends JavaReflectionManager {
-    
-    private XMLContext xmlContext = new XMLContext();
-    private HashMap defaults = null;
-    
-    public AnnotationReader buildAnnotationReader(AnnotatedElement annotatedElement) {
-        if ( xmlContext.hasContext() ) {
-            return new EJB3OverridenAnnotationReader(annotatedElement, xmlContext);
-        }
-        else {
-            return super.buildAnnotationReader(annotatedElement);
-        }
-    }
-
-    public Map getDefaults() {
-        if (defaults == null) {
-            defaults = new HashMap();
-            XMLContext.Default xmlDefaults = xmlContext.getDefault( null );
-            List<Class> entityListeners = new ArrayList<Class>();
-            for ( String className : xmlContext.getDefaultEntityListeners() ) {
-                try {
-                    entityListeners.add( ReflectHelper.classForName( className, this.getClass() ) );
-                }
-                catch (ClassNotFoundException e) {
-                    throw new IllegalStateException( "Default entity listener class not found: " + className );
-                }
-            }
-            defaults.put( EntityListeners.class, entityListeners );
-            for( Element element : xmlContext.getAllDocuments() ) {
-
-                List<Element> elements = element.elements( "sequence-generator" );
-                List<SequenceGenerator> sequenceGenerators = (List<SequenceGenerator>) defaults.get(SequenceGenerator.class);
-                if (sequenceGenerators == null) {
-                    sequenceGenerators = new ArrayList<SequenceGenerator>();
-                    defaults.put( SequenceGenerator.class, sequenceGenerators );
-                }
-                for (Element subelement : elements) {
-                    sequenceGenerators.add( EJB3OverridenAnnotationReader.buildSequenceGeneratorAnnotation( subelement ) );
-                }
-
-                elements = element.elements( "table-generator" );
-                List<TableGenerator> tableGenerators = (List<TableGenerator>) defaults.get(TableGenerator.class);
-                if (tableGenerators == null) {
-                    tableGenerators = new ArrayList<TableGenerator>();
-                    defaults.put( TableGenerator.class, tableGenerators );
-                }
-                for (Element subelement : elements) {
-                    tableGenerators.add( EJB3OverridenAnnotationReader.buildTableGeneratorAnnotation( subelement, xmlDefaults ) );
-                }
-
-                List<NamedQuery> namedQueries = (List<NamedQuery>) defaults.get(NamedQuery.class);
-                if (namedQueries == null) {
-                    namedQueries = new ArrayList<NamedQuery>();
-                    defaults.put( NamedQuery.class, namedQueries );
-                }
-                List<NamedQuery> currentNamedQueries = EJB3OverridenAnnotationReader.buildNamedQueries(element, false, xmlDefaults);
-                namedQueries.addAll( currentNamedQueries );
-
-                List<NamedNativeQuery> namedNativeQueries = (List<NamedNativeQuery>) defaults.get(NamedNativeQuery.class);
-                if (namedNativeQueries == null) {
-                    namedNativeQueries = new ArrayList<NamedNativeQuery>();
-                    defaults.put( NamedNativeQuery.class, namedNativeQueries );
-                }
-                List<NamedNativeQuery> currentNamedNativeQueries = EJB3OverridenAnnotationReader.buildNamedQueries(element, true, xmlDefaults);
-                namedNativeQueries.addAll( currentNamedNativeQueries );
-
-                List<SqlResultSetMapping> sqlResultSetMappings = (List<SqlResultSetMapping>) defaults.get(SqlResultSetMapping.class);
-                if (sqlResultSetMappings == null) {
-                    sqlResultSetMappings = new ArrayList<SqlResultSetMapping>();
-                    defaults.put( SqlResultSetMapping.class, sqlResultSetMappings );
-                }
-                List<SqlResultSetMapping> currentSqlResultSetMappings = EJB3OverridenAnnotationReader.buildSqlResultsetMappings(element, xmlDefaults);
-                sqlResultSetMappings.addAll( currentSqlResultSetMappings );
-            }
-        }
-        return defaults;
-    }
-
-    public XMLContext getXMLContext() {
-        return xmlContext;
-    }
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/reflection/EJB3ReflectionManager.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/reflection/EJB3ReflectionManager.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/reflection/EJB3ReflectionManager.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/reflection/EJB3ReflectionManager.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,102 @@
+package org.hibernate.cfg.annotations.reflection;
+
+import java.lang.reflect.AnnotatedElement;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.persistence.EntityListeners;
+import javax.persistence.NamedNativeQuery;
+import javax.persistence.NamedQuery;
+import javax.persistence.SequenceGenerator;
+import javax.persistence.SqlResultSetMapping;
+import javax.persistence.TableGenerator;
+
+import org.dom4j.Element;
+import org.hibernate.annotations.common.reflection.AnnotationReader;
+import org.hibernate.annotations.common.reflection.java.JavaReflectionManager;
+import org.hibernate.util.ReflectHelper;
+
+public class EJB3ReflectionManager extends JavaReflectionManager {
+    
+    private XMLContext xmlContext = new XMLContext();
+    private HashMap defaults = null;
+    
+    public AnnotationReader buildAnnotationReader(AnnotatedElement annotatedElement) {
+        if ( xmlContext.hasContext() ) {
+            return new EJB3OverridenAnnotationReader(annotatedElement, xmlContext);
+        }
+        else {
+            return super.buildAnnotationReader(annotatedElement);
+        }
+    }
+
+    public Map getDefaults() {
+        if (defaults == null) {
+            defaults = new HashMap();
+            XMLContext.Default xmlDefaults = xmlContext.getDefault( null );
+            List<Class> entityListeners = new ArrayList<Class>();
+            for ( String className : xmlContext.getDefaultEntityListeners() ) {
+                try {
+                    entityListeners.add( ReflectHelper.classForName( className, this.getClass() ) );
+                }
+                catch (ClassNotFoundException e) {
+                    throw new IllegalStateException( "Default entity listener class not found: " + className );
+                }
+            }
+            defaults.put( EntityListeners.class, entityListeners );
+            for( Element element : xmlContext.getAllDocuments() ) {
+
+                List<Element> elements = element.elements( "sequence-generator" );
+                List<SequenceGenerator> sequenceGenerators = (List<SequenceGenerator>) defaults.get(SequenceGenerator.class);
+                if (sequenceGenerators == null) {
+                    sequenceGenerators = new ArrayList<SequenceGenerator>();
+                    defaults.put( SequenceGenerator.class, sequenceGenerators );
+                }
+                for (Element subelement : elements) {
+                    sequenceGenerators.add( EJB3OverridenAnnotationReader.buildSequenceGeneratorAnnotation( subelement ) );
+                }
+
+                elements = element.elements( "table-generator" );
+                List<TableGenerator> tableGenerators = (List<TableGenerator>) defaults.get(TableGenerator.class);
+                if (tableGenerators == null) {
+                    tableGenerators = new ArrayList<TableGenerator>();
+                    defaults.put( TableGenerator.class, tableGenerators );
+                }
+                for (Element subelement : elements) {
+                    tableGenerators.add( EJB3OverridenAnnotationReader.buildTableGeneratorAnnotation( subelement, xmlDefaults ) );
+                }
+
+                List<NamedQuery> namedQueries = (List<NamedQuery>) defaults.get(NamedQuery.class);
+                if (namedQueries == null) {
+                    namedQueries = new ArrayList<NamedQuery>();
+                    defaults.put( NamedQuery.class, namedQueries );
+                }
+                List<NamedQuery> currentNamedQueries = EJB3OverridenAnnotationReader.buildNamedQueries(element, false, xmlDefaults);
+                namedQueries.addAll( currentNamedQueries );
+
+                List<NamedNativeQuery> namedNativeQueries = (List<NamedNativeQuery>) defaults.get(NamedNativeQuery.class);
+                if (namedNativeQueries == null) {
+                    namedNativeQueries = new ArrayList<NamedNativeQuery>();
+                    defaults.put( NamedNativeQuery.class, namedNativeQueries );
+                }
+                List<NamedNativeQuery> currentNamedNativeQueries = EJB3OverridenAnnotationReader.buildNamedQueries(element, true, xmlDefaults);
+                namedNativeQueries.addAll( currentNamedNativeQueries );
+
+                List<SqlResultSetMapping> sqlResultSetMappings = (List<SqlResultSetMapping>) defaults.get(SqlResultSetMapping.class);
+                if (sqlResultSetMappings == null) {
+                    sqlResultSetMappings = new ArrayList<SqlResultSetMapping>();
+                    defaults.put( SqlResultSetMapping.class, sqlResultSetMappings );
+                }
+                List<SqlResultSetMapping> currentSqlResultSetMappings = EJB3OverridenAnnotationReader.buildSqlResultsetMappings(element, xmlDefaults);
+                sqlResultSetMappings.addAll( currentSqlResultSetMappings );
+            }
+        }
+        return defaults;
+    }
+
+    public XMLContext getXMLContext() {
+        return xmlContext;
+    }
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/reflection/XMLContext.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/reflection/XMLContext.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/reflection/XMLContext.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,255 +0,0 @@
-//$Id: $
-package org.hibernate.cfg.annotations.reflection;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.ArrayList;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.dom4j.Document;
-import org.dom4j.Element;
-import org.hibernate.util.StringHelper;
-
-/**
- * @author Emmanuel Bernard
- */
-public class XMLContext {
-	private static Log log = LogFactory.getLog( XMLContext.class );
-	private Default globalDefaults;
-	private Map<String, Element> classOverriding = new HashMap<String, Element>();
-	private Map<String, Default> defaultsOverriding = new HashMap<String, Default>();
-	private List<Element> defaultElements = new ArrayList<Element>();
-	private List<String> defaultEntityListeners = new ArrayList<String>();
-    private boolean hasContext = false;
-
-    /**
-	 * Add a document and return the list of added classes names
-	 */
-	public List<String> addDocument(Document doc) {
-        hasContext = true;
-        List<String> addedClasses = new ArrayList<String>();
-		Element root = doc.getRootElement();
-		//global defaults
-		Element metadata = root.element( "persistence-unit-metadata" );
-		if ( metadata != null ) {
-			if ( globalDefaults == null ) {
-				globalDefaults = new Default();
-				globalDefaults.setMetadataComplete(
-						metadata.element( "xml-mapping-metadata-complete" ) != null ?
-								Boolean.TRUE :
-								null
-				);
-				Element defaultElement = metadata.element( "persistence-unit-defaults" );
-				if ( defaultElement != null ) {
-					Element unitElement = defaultElement.element( "schema" );
-					globalDefaults.setSchema( unitElement != null ? unitElement.getTextTrim() : null );
-					unitElement = defaultElement.element( "catalog" );
-					globalDefaults.setCatalog( unitElement != null ? unitElement.getTextTrim() : null );
-					unitElement = defaultElement.element( "access" );
-					globalDefaults.setAccess( unitElement != null ? unitElement.getTextTrim() : null );
-					unitElement = defaultElement.element( "cascade-persist" );
-					globalDefaults.setCascadePersist( unitElement != null ? Boolean.TRUE : null );
-					defaultEntityListeners.addAll( addEntityListenerClasses( defaultElement, null, addedClasses ) );
-				}
-			}
-			else {
-				log.warn( "Found more than one <persistence-unit-metadata>, subsequent ignored" );
-			}
-		}
-
-		//entity mapping default
-		Default entityMappingDefault = new Default();
-		Element unitElement = root.element( "package" );
-		String packageName = unitElement != null ? unitElement.getTextTrim() : null;
-		entityMappingDefault.setPackageName( packageName );
-		unitElement = root.element( "schema" );
-		entityMappingDefault.setSchema( unitElement != null ? unitElement.getTextTrim() : null );
-		unitElement = root.element( "catalog" );
-		entityMappingDefault.setCatalog( unitElement != null ? unitElement.getTextTrim() : null );
-		unitElement = root.element( "access" );
-		entityMappingDefault.setAccess( unitElement != null ? unitElement.getTextTrim() : null );
-		defaultElements.add(root);
-
-		List<Element> entities = (List<Element>) root.elements( "entity" );
-		addClass( entities, packageName, entityMappingDefault, addedClasses );
-
-		entities = (List<Element>) root.elements( "mapped-superclass" );
-		addClass( entities, packageName, entityMappingDefault, addedClasses );
-
-		entities = (List<Element>) root.elements( "embeddable" );
-		addClass( entities, packageName, entityMappingDefault, addedClasses );
-		return addedClasses;
-	}
-
-	private void addClass(List<Element> entities, String packageName, Default defaults, List<String> addedClasses) {
-		for ( Element element : entities ) {
-			String className = buildSafeClassName( element.attributeValue( "class" ), packageName );
-			if ( classOverriding.containsKey( className ) ) {
-				//maybe switch it to warn?
-				throw new IllegalStateException( "Duplicate XML entry for " + className );
-			}
-			addedClasses.add( className );
-			classOverriding.put( className, element );
-			Default localDefault = new Default();
-			localDefault.override( defaults );
-			String metadataCompleteString = element.attributeValue( "metadata-complete" );
-			if ( metadataCompleteString != null ) {
-				localDefault.setMetadataComplete( Boolean.parseBoolean( metadataCompleteString ) );
-			}
-			String access = element.attributeValue( "access" );
-			if ( access != null ) localDefault.setAccess( access );
-			defaultsOverriding.put( className, localDefault );
-
-			log.debug( "Adding XML overriding information for " + className );
-			addEntityListenerClasses( element, packageName, addedClasses );
-		}
-	}
-
-	private List<String> addEntityListenerClasses(Element element, String packageName, List<String> addedClasses) {
-		List<String> localAddedClasses = new ArrayList<String>();
-		Element listeners = element.element( "entity-listeners" );
-		if (listeners != null) {
-			List<Element> elements = (List<Element>) listeners.elements( "entity-listener" );
-			for ( Element listener : elements ) {
-				String listenerClassName = buildSafeClassName( listener.attributeValue( "class" ), packageName );
-				if ( classOverriding.containsKey( listenerClassName ) ) {
-					//maybe switch it to warn?
-					if ( "entity-listener".equals( classOverriding.get( listenerClassName).getName() ) ) {
-						log.info(
-								"entity-listener duplication, first event definition will be used: "
-										+ listenerClassName
-						);
-						continue;
-					}
-					else {
-						throw new IllegalStateException( "Duplicate XML entry for " + listenerClassName );
-					}
-				}
-				localAddedClasses.add( listenerClassName );
-				classOverriding.put( listenerClassName, listener );
-			}
-		}
-		log.debug( "Adding XML overriding information for listener: " + listeners );
-		addedClasses.addAll( localAddedClasses );
-		return localAddedClasses;
-	}
-
-	public static String buildSafeClassName(String className, String defaultPackageName) {
-		if ( className.indexOf( '.' ) < 0 && StringHelper.isNotEmpty( defaultPackageName ) ) {
-			className = StringHelper.qualify( defaultPackageName, className );
-		}
-		return className;
-	}
-
-	public static String buildSafeClassName(String className, XMLContext.Default defaults) {
-		return buildSafeClassName( className, defaults.getPackageName() );
-	}
-
-	public Default getDefault(String className) {
-		Default xmlDefault = new Default();
-		xmlDefault.override( globalDefaults );
-		if (className != null) {
-			Default entityMappingOverriding = defaultsOverriding.get( className );
-			xmlDefault.override( entityMappingOverriding );
-		}
-		return xmlDefault;
-	}
-
-	public Element getXMLTree(String className, String methodName) {
-		return classOverriding.get( className );
-	}
-
-	public List<Element> getAllDocuments() {
-		return defaultElements;
-	}
-
-    public boolean hasContext() {
-        return hasContext;
-    }
-
-    public static class Default {
-		private String access;
-		private String packageName;
-		private String schema;
-		private String catalog;
-		private Boolean metadataComplete;
-		private Boolean cascadePersist;
-
-		public String getAccess() {
-			return access;
-		}
-
-		protected void setAccess(String access) {
-			if ( "FIELD".equals( access ) || "PROPERTY".equals( access ) ) {
-				this.access = access.toLowerCase();
-			}
-			else {
-				this.access = access;
-			}
-		}
-
-		public String getCatalog() {
-			return catalog;
-		}
-
-		protected void setCatalog(String catalog) {
-			this.catalog = catalog;
-		}
-
-		public String getPackageName() {
-			return packageName;
-		}
-
-		protected void setPackageName(String packageName) {
-			this.packageName = packageName;
-		}
-
-		public String getSchema() {
-			return schema;
-		}
-
-		protected void setSchema(String schema) {
-			this.schema = schema;
-		}
-
-		public Boolean getMetadataComplete() {
-			return metadataComplete;
-		}
-
-		public boolean canUseJavaAnnotations() {
-			return metadataComplete == null || ! metadataComplete.booleanValue();
-		}
-
-		protected void setMetadataComplete(Boolean metadataComplete) {
-			this.metadataComplete = metadataComplete;
-		}
-
-		public Boolean getCascadePersist() {
-			return cascadePersist;
-		}
-
-		void setCascadePersist(Boolean cascadePersist) {
-			this.cascadePersist = cascadePersist;
-		}
-
-		public void override(Default globalDefault) {
-			if ( globalDefault != null ) {
-				if ( globalDefault.getAccess() != null ) access = globalDefault.getAccess();
-				if ( globalDefault.getPackageName() != null ) packageName = globalDefault.getPackageName();
-				if ( globalDefault.getSchema() != null ) schema = globalDefault.getSchema();
-				if ( globalDefault.getCatalog() != null ) catalog = globalDefault.getCatalog();
-				if ( globalDefault.getMetadataComplete() != null ) {
-					metadataComplete = globalDefault.getMetadataComplete();
-				}
-				//TODO fix that in stone if cascade-persist is set already?
-				if ( globalDefault.getCascadePersist() != null ) cascadePersist = globalDefault.getCascadePersist();
-			}
-		}
-	}
-
-	public List<String> getDefaultEntityListeners() {
-		return defaultEntityListeners;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/reflection/XMLContext.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/reflection/XMLContext.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/reflection/XMLContext.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/annotations/reflection/XMLContext.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,255 @@
+//$Id: $
+package org.hibernate.cfg.annotations.reflection;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.ArrayList;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.dom4j.Document;
+import org.dom4j.Element;
+import org.hibernate.util.StringHelper;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class XMLContext {
+	private static Log log = LogFactory.getLog( XMLContext.class );
+	private Default globalDefaults;
+	private Map<String, Element> classOverriding = new HashMap<String, Element>();
+	private Map<String, Default> defaultsOverriding = new HashMap<String, Default>();
+	private List<Element> defaultElements = new ArrayList<Element>();
+	private List<String> defaultEntityListeners = new ArrayList<String>();
+    private boolean hasContext = false;
+
+    /**
+	 * Add a document and return the list of added classes names
+	 */
+	public List<String> addDocument(Document doc) {
+        hasContext = true;
+        List<String> addedClasses = new ArrayList<String>();
+		Element root = doc.getRootElement();
+		//global defaults
+		Element metadata = root.element( "persistence-unit-metadata" );
+		if ( metadata != null ) {
+			if ( globalDefaults == null ) {
+				globalDefaults = new Default();
+				globalDefaults.setMetadataComplete(
+						metadata.element( "xml-mapping-metadata-complete" ) != null ?
+								Boolean.TRUE :
+								null
+				);
+				Element defaultElement = metadata.element( "persistence-unit-defaults" );
+				if ( defaultElement != null ) {
+					Element unitElement = defaultElement.element( "schema" );
+					globalDefaults.setSchema( unitElement != null ? unitElement.getTextTrim() : null );
+					unitElement = defaultElement.element( "catalog" );
+					globalDefaults.setCatalog( unitElement != null ? unitElement.getTextTrim() : null );
+					unitElement = defaultElement.element( "access" );
+					globalDefaults.setAccess( unitElement != null ? unitElement.getTextTrim() : null );
+					unitElement = defaultElement.element( "cascade-persist" );
+					globalDefaults.setCascadePersist( unitElement != null ? Boolean.TRUE : null );
+					defaultEntityListeners.addAll( addEntityListenerClasses( defaultElement, null, addedClasses ) );
+				}
+			}
+			else {
+				log.warn( "Found more than one <persistence-unit-metadata>, subsequent ignored" );
+			}
+		}
+
+		//entity mapping default
+		Default entityMappingDefault = new Default();
+		Element unitElement = root.element( "package" );
+		String packageName = unitElement != null ? unitElement.getTextTrim() : null;
+		entityMappingDefault.setPackageName( packageName );
+		unitElement = root.element( "schema" );
+		entityMappingDefault.setSchema( unitElement != null ? unitElement.getTextTrim() : null );
+		unitElement = root.element( "catalog" );
+		entityMappingDefault.setCatalog( unitElement != null ? unitElement.getTextTrim() : null );
+		unitElement = root.element( "access" );
+		entityMappingDefault.setAccess( unitElement != null ? unitElement.getTextTrim() : null );
+		defaultElements.add(root);
+
+		List<Element> entities = (List<Element>) root.elements( "entity" );
+		addClass( entities, packageName, entityMappingDefault, addedClasses );
+
+		entities = (List<Element>) root.elements( "mapped-superclass" );
+		addClass( entities, packageName, entityMappingDefault, addedClasses );
+
+		entities = (List<Element>) root.elements( "embeddable" );
+		addClass( entities, packageName, entityMappingDefault, addedClasses );
+		return addedClasses;
+	}
+
+	private void addClass(List<Element> entities, String packageName, Default defaults, List<String> addedClasses) {
+		for ( Element element : entities ) {
+			String className = buildSafeClassName( element.attributeValue( "class" ), packageName );
+			if ( classOverriding.containsKey( className ) ) {
+				//maybe switch it to warn?
+				throw new IllegalStateException( "Duplicate XML entry for " + className );
+			}
+			addedClasses.add( className );
+			classOverriding.put( className, element );
+			Default localDefault = new Default();
+			localDefault.override( defaults );
+			String metadataCompleteString = element.attributeValue( "metadata-complete" );
+			if ( metadataCompleteString != null ) {
+				localDefault.setMetadataComplete( Boolean.parseBoolean( metadataCompleteString ) );
+			}
+			String access = element.attributeValue( "access" );
+			if ( access != null ) localDefault.setAccess( access );
+			defaultsOverriding.put( className, localDefault );
+
+			log.debug( "Adding XML overriding information for " + className );
+			addEntityListenerClasses( element, packageName, addedClasses );
+		}
+	}
+
+	private List<String> addEntityListenerClasses(Element element, String packageName, List<String> addedClasses) {
+		List<String> localAddedClasses = new ArrayList<String>();
+		Element listeners = element.element( "entity-listeners" );
+		if (listeners != null) {
+			List<Element> elements = (List<Element>) listeners.elements( "entity-listener" );
+			for ( Element listener : elements ) {
+				String listenerClassName = buildSafeClassName( listener.attributeValue( "class" ), packageName );
+				if ( classOverriding.containsKey( listenerClassName ) ) {
+					//maybe switch it to warn?
+					if ( "entity-listener".equals( classOverriding.get( listenerClassName).getName() ) ) {
+						log.info(
+								"entity-listener duplication, first event definition will be used: "
+										+ listenerClassName
+						);
+						continue;
+					}
+					else {
+						throw new IllegalStateException( "Duplicate XML entry for " + listenerClassName );
+					}
+				}
+				localAddedClasses.add( listenerClassName );
+				classOverriding.put( listenerClassName, listener );
+			}
+		}
+		log.debug( "Adding XML overriding information for listener: " + listeners );
+		addedClasses.addAll( localAddedClasses );
+		return localAddedClasses;
+	}
+
+	public static String buildSafeClassName(String className, String defaultPackageName) {
+		if ( className.indexOf( '.' ) < 0 && StringHelper.isNotEmpty( defaultPackageName ) ) {
+			className = StringHelper.qualify( defaultPackageName, className );
+		}
+		return className;
+	}
+
+	public static String buildSafeClassName(String className, XMLContext.Default defaults) {
+		return buildSafeClassName( className, defaults.getPackageName() );
+	}
+
+	public Default getDefault(String className) {
+		Default xmlDefault = new Default();
+		xmlDefault.override( globalDefaults );
+		if (className != null) {
+			Default entityMappingOverriding = defaultsOverriding.get( className );
+			xmlDefault.override( entityMappingOverriding );
+		}
+		return xmlDefault;
+	}
+
+	public Element getXMLTree(String className, String methodName) {
+		return classOverriding.get( className );
+	}
+
+	public List<Element> getAllDocuments() {
+		return defaultElements;
+	}
+
+    public boolean hasContext() {
+        return hasContext;
+    }
+
+    public static class Default {
+		private String access;
+		private String packageName;
+		private String schema;
+		private String catalog;
+		private Boolean metadataComplete;
+		private Boolean cascadePersist;
+
+		public String getAccess() {
+			return access;
+		}
+
+		protected void setAccess(String access) {
+			if ( "FIELD".equals( access ) || "PROPERTY".equals( access ) ) {
+				this.access = access.toLowerCase();
+			}
+			else {
+				this.access = access;
+			}
+		}
+
+		public String getCatalog() {
+			return catalog;
+		}
+
+		protected void setCatalog(String catalog) {
+			this.catalog = catalog;
+		}
+
+		public String getPackageName() {
+			return packageName;
+		}
+
+		protected void setPackageName(String packageName) {
+			this.packageName = packageName;
+		}
+
+		public String getSchema() {
+			return schema;
+		}
+
+		protected void setSchema(String schema) {
+			this.schema = schema;
+		}
+
+		public Boolean getMetadataComplete() {
+			return metadataComplete;
+		}
+
+		public boolean canUseJavaAnnotations() {
+			return metadataComplete == null || ! metadataComplete.booleanValue();
+		}
+
+		protected void setMetadataComplete(Boolean metadataComplete) {
+			this.metadataComplete = metadataComplete;
+		}
+
+		public Boolean getCascadePersist() {
+			return cascadePersist;
+		}
+
+		void setCascadePersist(Boolean cascadePersist) {
+			this.cascadePersist = cascadePersist;
+		}
+
+		public void override(Default globalDefault) {
+			if ( globalDefault != null ) {
+				if ( globalDefault.getAccess() != null ) access = globalDefault.getAccess();
+				if ( globalDefault.getPackageName() != null ) packageName = globalDefault.getPackageName();
+				if ( globalDefault.getSchema() != null ) schema = globalDefault.getSchema();
+				if ( globalDefault.getCatalog() != null ) catalog = globalDefault.getCatalog();
+				if ( globalDefault.getMetadataComplete() != null ) {
+					metadataComplete = globalDefault.getMetadataComplete();
+				}
+				//TODO fix that in stone if cascade-persist is set already?
+				if ( globalDefault.getCascadePersist() != null ) cascadePersist = globalDefault.getCascadePersist();
+			}
+		}
+	}
+
+	public List<String> getDefaultEntityListeners() {
+		return defaultEntityListeners;
+	}
+}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/ejb (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/ejb)

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/ejb/orm_1_0.xsd
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/ejb/orm_1_0.xsd	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/ejb/orm_1_0.xsd	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,1516 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Java Persistence API object-relational mapping file schema -->
-<xsd:schema targetNamespace="http://java.sun.com/xml/ns/persistence/orm"
-            xmlns:orm="http://java.sun.com/xml/ns/persistence/orm"
-            xmlns:xsd="http://www.w3.org/2001/XMLSchema"
-            elementFormDefault="qualified"
-            attributeFormDefault="unqualified"
-            version="1.0">
-
-    <xsd:annotation>
-        <xsd:documentation>
-            @(#)orm_1_0.xsd 1.0 Feb 14 2006
-        </xsd:documentation>
-    </xsd:annotation>
-    <xsd:annotation>
-        <xsd:documentation><![CDATA[
-
-       This is the XML Schema for the persistence object-relational 
-       mapping file.
-       The file may be named "META-INF/orm.xml" in the persistence 
-       archive or it may be named some other name which would be 
-       used to locate the file as resource on the classpath.
-
-     ]]></xsd:documentation>
-    </xsd:annotation>
-
-    <xsd:complexType name="emptyType"/>
-
-    <xsd:simpleType name="versionType">
-        <xsd:restriction base="xsd:token">
-            <xsd:pattern value="[0-9]+(\.[0-9]+)*"/>
-        </xsd:restriction>
-    </xsd:simpleType>
-
-    <!-- **************************************************** -->
-
-    <xsd:element name="entity-mappings">
-        <xsd:complexType>
-            <xsd:annotation>
-                <xsd:documentation>
-
-                    The entity-mappings element is the root element of an mapping
-                    file. It contains the following four types of elements:
-
-                    1. The persistence-unit-metadata element contains metadata
-                    for the entire persistence unit. It is undefined if this element
-                    occurs in multiple mapping files within the same persistence unit.
-
-                    2. The package, schema, catalog and access elements apply to all of
-                    the entity, mapped-superclass and embeddable elements defined in
-                    the same file in which they occur.
-
-                    3. The sequence-generator, table-generator, named-query,
-                    named-native-query and sql-result-set-mapping elements are global
-                    to the persistence unit. It is undefined to have more than one
-                    sequence-generator or table-generator of the same name in the same
-                    or different mapping files in a persistence unit. It is also
-                    undefined to have more than one named-query or named-native-query
-                    of the same name in the same or different mapping files in a
-                    persistence unit.
-
-                    4. The entity, mapped-superclass and embeddable elements each define
-                    the mapping information for a managed persistent class. The mapping
-                    information contained in these elements may be complete or it may
-                    be partial.
-
-                </xsd:documentation>
-            </xsd:annotation>
-            <xsd:sequence>
-                <xsd:element name="description" type="xsd:string"
-                             minOccurs="0"/>
-                <xsd:element name="persistence-unit-metadata"
-                             type="orm:persistence-unit-metadata"
-                             minOccurs="0"/>
-                <xsd:element name="package" type="xsd:string"
-                             minOccurs="0"/>
-                <xsd:element name="schema" type="xsd:string"
-                             minOccurs="0"/>
-                <xsd:element name="catalog" type="xsd:string"
-                             minOccurs="0"/>
-                <xsd:element name="access" type="orm:access-type"
-                             minOccurs="0"/>
-                <xsd:element name="sequence-generator" type="orm:sequence-generator"
-                             minOccurs="0" maxOccurs="unbounded"/>
-                <xsd:element name="table-generator" type="orm:table-generator"
-                             minOccurs="0" maxOccurs="unbounded"/>
-                <xsd:element name="named-query" type="orm:named-query"
-                             minOccurs="0" maxOccurs="unbounded"/>
-                <xsd:element name="named-native-query" type="orm:named-native-query"
-                             minOccurs="0" maxOccurs="unbounded"/>
-                <xsd:element name="sql-result-set-mapping"
-                             type="orm:sql-result-set-mapping"
-                             minOccurs="0" maxOccurs="unbounded"/>
-                <xsd:element name="mapped-superclass" type="orm:mapped-superclass"
-                             minOccurs="0" maxOccurs="unbounded"/>
-                <xsd:element name="entity" type="orm:entity"
-                             minOccurs="0" maxOccurs="unbounded"/>
-                <xsd:element name="embeddable" type="orm:embeddable"
-                             minOccurs="0" maxOccurs="unbounded"/>
-            </xsd:sequence>
-            <xsd:attribute name="version" type="orm:versionType"
-                           fixed="1.0" use="required"/>
-        </xsd:complexType>
-    </xsd:element>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="persistence-unit-metadata">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                Metadata that applies to the persistence unit and not just to
-                the mapping file in which it is contained.
-
-                If the xml-mapping-metadata-complete element is specified then
-                the complete set of mapping metadata for the persistence unit
-                is contained in the XML mapping files for the persistence unit.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:element name="xml-mapping-metadata-complete" type="orm:emptyType"
-                         minOccurs="0"/>
-            <xsd:element name="persistence-unit-defaults"
-                         type="orm:persistence-unit-defaults"
-                         minOccurs="0"/>
-        </xsd:sequence>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="persistence-unit-defaults">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                These defaults are applied to the persistence unit as a whole
-                unless they are overridden by local annotation or XML
-                element settings.
-
-                schema - Used as the schema for all tables or secondary tables
-                that apply to the persistence unit
-                catalog - Used as the catalog for all tables or secondary tables
-                that apply to the persistence unit
-                access - Used as the access type for all managed classes in
-                the persistence unit
-                cascade-persist - Adds cascade-persist to the set of cascade options
-                in entity relationships of the persistence unit
-                entity-listeners - List of default entity listeners to be invoked
-                on each entity in the persistence unit.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:element name="schema" type="xsd:string"
-                         minOccurs="0"/>
-            <xsd:element name="catalog" type="xsd:string"
-                         minOccurs="0"/>
-            <xsd:element name="access" type="orm:access-type"
-                         minOccurs="0"/>
-            <xsd:element name="cascade-persist" type="orm:emptyType"
-                         minOccurs="0"/>
-            <xsd:element name="entity-listeners" type="orm:entity-listeners"
-                         minOccurs="0"/>
-        </xsd:sequence>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="entity">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                Defines the settings and mappings for an entity. Is allowed to be
-                sparsely populated and used in conjunction with the annotations.
-                Alternatively, the metadata-complete attribute can be used to
-                indicate that no annotations on the entity class (and its fields
-                or properties) are to be processed. If this is the case then
-                the defaulting rules for the entity and its subelements will
-                be recursively applied.
-
-                @Target(TYPE) @Retention(RUNTIME)
-                public @interface Entity {
-                String name() default "";
-                }
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:element name="description" type="xsd:string" minOccurs="0"/>
-            <xsd:element name="table" type="orm:table"
-                         minOccurs="0"/>
-            <xsd:element name="secondary-table" type="orm:secondary-table"
-                         minOccurs="0" maxOccurs="unbounded"/>
-            <xsd:element name="primary-key-join-column"
-                         type="orm:primary-key-join-column"
-                         minOccurs="0" maxOccurs="unbounded"/>
-            <xsd:element name="id-class" type="orm:id-class" minOccurs="0"/>
-            <xsd:element name="inheritance" type="orm:inheritance" minOccurs="0"/>
-            <xsd:element name="discriminator-value" type="orm:discriminator-value"
-                         minOccurs="0"/>
-            <xsd:element name="discriminator-column"
-                         type="orm:discriminator-column"
-                         minOccurs="0"/>
-            <xsd:element name="sequence-generator" type="orm:sequence-generator"
-                         minOccurs="0"/>
-            <xsd:element name="table-generator" type="orm:table-generator"
-                         minOccurs="0"/>
-            <xsd:element name="named-query" type="orm:named-query"
-                         minOccurs="0" maxOccurs="unbounded"/>
-            <xsd:element name="named-native-query" type="orm:named-native-query"
-                         minOccurs="0" maxOccurs="unbounded"/>
-            <xsd:element name="sql-result-set-mapping"
-                         type="orm:sql-result-set-mapping"
-                         minOccurs="0" maxOccurs="unbounded"/>
-            <xsd:element name="exclude-default-listeners" type="orm:emptyType"
-                         minOccurs="0"/>
-            <xsd:element name="exclude-superclass-listeners" type="orm:emptyType"
-                         minOccurs="0"/>
-            <xsd:element name="entity-listeners" type="orm:entity-listeners"
-                         minOccurs="0"/>
-            <xsd:element name="pre-persist" type="orm:pre-persist" minOccurs="0"/>
-            <xsd:element name="post-persist" type="orm:post-persist"
-                         minOccurs="0"/>
-            <xsd:element name="pre-remove" type="orm:pre-remove" minOccurs="0"/>
-            <xsd:element name="post-remove" type="orm:post-remove" minOccurs="0"/>
-            <xsd:element name="pre-update" type="orm:pre-update" minOccurs="0"/>
-            <xsd:element name="post-update" type="orm:post-update" minOccurs="0"/>
-            <xsd:element name="post-load" type="orm:post-load" minOccurs="0"/>
-            <xsd:element name="attribute-override" type="orm:attribute-override"
-                         minOccurs="0" maxOccurs="unbounded"/>
-            <xsd:element name="association-override"
-                         type="orm:association-override"
-                         minOccurs="0" maxOccurs="unbounded"/>
-            <xsd:element name="attributes" type="orm:attributes" minOccurs="0"/>
-        </xsd:sequence>
-        <xsd:attribute name="name" type="xsd:string"/>
-        <xsd:attribute name="class" type="xsd:string" use="required"/>
-        <xsd:attribute name="access" type="orm:access-type"/>
-        <xsd:attribute name="metadata-complete" type="xsd:boolean"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="attributes">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                This element contains the entity field or property mappings.
-                It may be sparsely populated to include only a subset of the
-                fields or properties. If metadata-complete for the entity is true
-                then the remainder of the attributes will be defaulted according
-                to the default rules.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:choice>
-                <xsd:element name="id" type="orm:id"
-                             minOccurs="0" maxOccurs="unbounded"/>
-                <xsd:element name="embedded-id" type="orm:embedded-id"
-                             minOccurs="0"/>
-            </xsd:choice>
-            <xsd:element name="basic" type="orm:basic"
-                         minOccurs="0" maxOccurs="unbounded"/>
-            <xsd:element name="version" type="orm:version"
-                         minOccurs="0" maxOccurs="unbounded"/>
-            <xsd:element name="many-to-one" type="orm:many-to-one"
-                         minOccurs="0" maxOccurs="unbounded"/>
-            <xsd:element name="one-to-many" type="orm:one-to-many"
-                         minOccurs="0" maxOccurs="unbounded"/>
-            <xsd:element name="one-to-one" type="orm:one-to-one"
-                         minOccurs="0" maxOccurs="unbounded"/>
-            <xsd:element name="many-to-many" type="orm:many-to-many"
-                         minOccurs="0" maxOccurs="unbounded"/>
-            <xsd:element name="embedded" type="orm:embedded"
-                         minOccurs="0" maxOccurs="unbounded"/>
-            <xsd:element name="transient" type="orm:transient"
-                         minOccurs="0" maxOccurs="unbounded"/>
-        </xsd:sequence>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:simpleType name="access-type">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                This element determines how the persistence provider accesses the
-                state of an entity or embedded object.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:restriction base="xsd:token">
-            <xsd:enumeration value="PROPERTY"/>
-            <xsd:enumeration value="FIELD"/>
-        </xsd:restriction>
-    </xsd:simpleType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="entity-listeners">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                @Target({TYPE}) @Retention(RUNTIME)
-                public @interface EntityListeners {
-                Class[] value();
-                }
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:element name="entity-listener" type="orm:entity-listener"
-                         minOccurs="0" maxOccurs="unbounded"/>
-        </xsd:sequence>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="entity-listener">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                Defines an entity listener to be invoked at lifecycle events
-                for the entities that list this listener.
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:element name="pre-persist" type="orm:pre-persist" minOccurs="0"/>
-            <xsd:element name="post-persist" type="orm:post-persist"
-                         minOccurs="0"/>
-            <xsd:element name="pre-remove" type="orm:pre-remove" minOccurs="0"/>
-            <xsd:element name="post-remove" type="orm:post-remove" minOccurs="0"/>
-            <xsd:element name="pre-update" type="orm:pre-update" minOccurs="0"/>
-            <xsd:element name="post-update" type="orm:post-update" minOccurs="0"/>
-            <xsd:element name="post-load" type="orm:post-load" minOccurs="0"/>
-        </xsd:sequence>
-        <xsd:attribute name="class" type="xsd:string" use="required"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="pre-persist">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                @Target({METHOD}) @Retention(RUNTIME)
-                public @interface PrePersist {}
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:attribute name="method-name" type="xsd:string" use="required"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="post-persist">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                @Target({METHOD}) @Retention(RUNTIME)
-                public @interface PostPersist {}
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:attribute name="method-name" type="xsd:string" use="required"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="pre-remove">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                @Target({METHOD}) @Retention(RUNTIME)
-                public @interface PreRemove {}
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:attribute name="method-name" type="xsd:string" use="required"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="post-remove">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                @Target({METHOD}) @Retention(RUNTIME)
-                public @interface PostRemove {}
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:attribute name="method-name" type="xsd:string" use="required"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="pre-update">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                @Target({METHOD}) @Retention(RUNTIME)
-                public @interface PreUpdate {}
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:attribute name="method-name" type="xsd:string" use="required"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="post-update">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                @Target({METHOD}) @Retention(RUNTIME)
-                public @interface PostUpdate {}
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:attribute name="method-name" type="xsd:string" use="required"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="post-load">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                @Target({METHOD}) @Retention(RUNTIME)
-                public @interface PostLoad {}
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:attribute name="method-name" type="xsd:string" use="required"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="query-hint">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                @Target({}) @Retention(RUNTIME)
-                public @interface QueryHint {
-                String name();
-                String value();
-                }
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:attribute name="name" type="xsd:string" use="required"/>
-        <xsd:attribute name="value" type="xsd:string" use="required"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="named-query">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                @Target({TYPE}) @Retention(RUNTIME)
-                public @interface NamedQuery {
-                String name();
-                String query();
-                QueryHint[] hints() default {};
-                }
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:element name="query" type="xsd:string"/>
-            <xsd:element name="hint" type="orm:query-hint"
-                         minOccurs="0" maxOccurs="unbounded"/>
-        </xsd:sequence>
-        <xsd:attribute name="name" type="xsd:string" use="required"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="named-native-query">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                @Target({TYPE}) @Retention(RUNTIME)
-                public @interface NamedNativeQuery {
-                String name();
-                String query();
-                QueryHint[] hints() default {};
-                Class resultClass() default void.class;
-                String resultSetMapping() default ""; //named SqlResultSetMapping
-                }
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:element name="query" type="xsd:string"/>
-            <xsd:element name="hint" type="orm:query-hint"
-                         minOccurs="0" maxOccurs="unbounded"/>
-        </xsd:sequence>
-        <xsd:attribute name="name" type="xsd:string" use="required"/>
-        <xsd:attribute name="result-class" type="xsd:string"/>
-        <xsd:attribute name="result-set-mapping" type="xsd:string"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="sql-result-set-mapping">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                @Target({TYPE}) @Retention(RUNTIME)
-                public @interface SqlResultSetMapping {
-                String name();
-                EntityResult[] entities() default {};
-                ColumnResult[] columns() default {};
-                }
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:element name="entity-result" type="orm:entity-result"
-                         minOccurs="0" maxOccurs="unbounded"/>
-            <xsd:element name="column-result" type="orm:column-result"
-                         minOccurs="0" maxOccurs="unbounded"/>
-        </xsd:sequence>
-        <xsd:attribute name="name" type="xsd:string" use="required"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="entity-result">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                @Target({}) @Retention(RUNTIME)
-                public @interface EntityResult {
-                Class entityClass();
-                FieldResult[] fields() default {};
-                String discriminatorColumn() default "";
-                }
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:element name="field-result" type="orm:field-result"
-                         minOccurs="0" maxOccurs="unbounded"/>
-        </xsd:sequence>
-        <xsd:attribute name="entity-class" type="xsd:string" use="required"/>
-        <xsd:attribute name="discriminator-column" type="xsd:string"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="field-result">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                @Target({}) @Retention(RUNTIME)
-                public @interface FieldResult {
-                String name();
-                String column();
-                }
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:attribute name="name" type="xsd:string" use="required"/>
-        <xsd:attribute name="column" type="xsd:string" use="required"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="column-result">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                @Target({}) @Retention(RUNTIME)
-                public @interface ColumnResult {
-                String name();
-                }
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:attribute name="name" type="xsd:string" use="required"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="table">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                @Target({TYPE}) @Retention(RUNTIME)
-                public @interface Table {
-                String name() default "";
-                String catalog() default "";
-                String schema() default "";
-                UniqueConstraint[] uniqueConstraints() default {};
-                }
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:element name="unique-constraint" type="orm:unique-constraint"
-                         minOccurs="0" maxOccurs="unbounded"/>
-        </xsd:sequence>
-        <xsd:attribute name="name" type="xsd:string"/>
-        <xsd:attribute name="catalog" type="xsd:string"/>
-        <xsd:attribute name="schema" type="xsd:string"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="secondary-table">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                @Target({TYPE}) @Retention(RUNTIME)
-                public @interface SecondaryTable {
-                String name();
-                String catalog() default "";
-                String schema() default "";
-                PrimaryKeyJoinColumn[] pkJoinColumns() default {};
-                UniqueConstraint[] uniqueConstraints() default {};
-                }
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:element name="primary-key-join-column"
-                         type="orm:primary-key-join-column"
-                         minOccurs="0" maxOccurs="unbounded"/>
-            <xsd:element name="unique-constraint" type="orm:unique-constraint"
-                         minOccurs="0" maxOccurs="unbounded"/>
-        </xsd:sequence>
-        <xsd:attribute name="name" type="xsd:string" use="required"/>
-        <xsd:attribute name="catalog" type="xsd:string"/>
-        <xsd:attribute name="schema" type="xsd:string"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="unique-constraint">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                @Target({}) @Retention(RUNTIME)
-                public @interface UniqueConstraint {
-                String[] columnNames();
-                }
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:element name="column-name" type="xsd:string"
-                         maxOccurs="unbounded"/>
-        </xsd:sequence>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="column">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                @Target({METHOD, FIELD}) @Retention(RUNTIME)
-                public @interface Column {
-                String name() default "";
-                boolean unique() default false;
-                boolean nullable() default true;
-                boolean insertable() default true;
-                boolean updatable() default true;
-                String columnDefinition() default "";
-                String table() default "";
-                int length() default 255;
-                int precision() default 0; // decimal precision
-                int scale() default 0; // decimal scale
-                }
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:attribute name="name" type="xsd:string"/>
-        <xsd:attribute name="unique" type="xsd:boolean"/>
-        <xsd:attribute name="nullable" type="xsd:boolean"/>
-        <xsd:attribute name="insertable" type="xsd:boolean"/>
-        <xsd:attribute name="updatable" type="xsd:boolean"/>
-        <xsd:attribute name="column-definition" type="xsd:string"/>
-        <xsd:attribute name="table" type="xsd:string"/>
-        <xsd:attribute name="length" type="xsd:int"/>
-        <xsd:attribute name="precision" type="xsd:int"/>
-        <xsd:attribute name="scale" type="xsd:int"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="join-column">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                @Target({METHOD, FIELD}) @Retention(RUNTIME)
-                public @interface JoinColumn {
-                String name() default "";
-                String referencedColumnName() default "";
-                boolean unique() default false;
-                boolean nullable() default true;
-                boolean insertable() default true;
-                boolean updatable() default true;
-                String columnDefinition() default "";
-                String table() default "";
-                }
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:attribute name="name" type="xsd:string"/>
-        <xsd:attribute name="referenced-column-name" type="xsd:string"/>
-        <xsd:attribute name="unique" type="xsd:boolean"/>
-        <xsd:attribute name="nullable" type="xsd:boolean"/>
-        <xsd:attribute name="insertable" type="xsd:boolean"/>
-        <xsd:attribute name="updatable" type="xsd:boolean"/>
-        <xsd:attribute name="column-definition" type="xsd:string"/>
-        <xsd:attribute name="table" type="xsd:string"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:simpleType name="generation-type">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                public enum GenerationType { TABLE, SEQUENCE, IDENTITY, AUTO };
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:restriction base="xsd:token">
-            <xsd:enumeration value="TABLE"/>
-            <xsd:enumeration value="SEQUENCE"/>
-            <xsd:enumeration value="IDENTITY"/>
-            <xsd:enumeration value="AUTO"/>
-        </xsd:restriction>
-    </xsd:simpleType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="attribute-override">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                @Target({TYPE, METHOD, FIELD}) @Retention(RUNTIME)
-                public @interface AttributeOverride {
-                String name();
-                Column column();
-                }
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:element name="column" type="orm:column"/>
-        </xsd:sequence>
-        <xsd:attribute name="name" type="xsd:string" use="required"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="association-override">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                @Target({TYPE, METHOD, FIELD}) @Retention(RUNTIME)
-                public @interface AssociationOverride {
-                String name();
-                JoinColumn[] joinColumns();
-                }
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:element name="join-column" type="orm:join-column"
-                         maxOccurs="unbounded"/>
-        </xsd:sequence>
-        <xsd:attribute name="name" type="xsd:string" use="required"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="id-class">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                @Target({TYPE}) @Retention(RUNTIME)
-                public @interface IdClass {
-                Class value();
-                }
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:attribute name="class" type="xsd:string" use="required"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="id">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                @Target({METHOD, FIELD}) @Retention(RUNTIME)
-                public @interface Id {}
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:element name="column" type="orm:column"
-                         minOccurs="0"/>
-            <xsd:element name="generated-value" type="orm:generated-value"
-                         minOccurs="0"/>
-            <xsd:element name="temporal" type="orm:temporal"
-                         minOccurs="0"/>
-            <xsd:element name="table-generator" type="orm:table-generator"
-                         minOccurs="0"/>
-            <xsd:element name="sequence-generator" type="orm:sequence-generator"
-                         minOccurs="0"/>
-        </xsd:sequence>
-        <xsd:attribute name="name" type="xsd:string" use="required"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="embedded-id">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                @Target({METHOD, FIELD}) @Retention(RUNTIME)
-                public @interface EmbeddedId {}
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:element name="attribute-override" type="orm:attribute-override"
-                         minOccurs="0" maxOccurs="unbounded"/>
-        </xsd:sequence>
-        <xsd:attribute name="name" type="xsd:string" use="required"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="transient">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                @Target({METHOD, FIELD}) @Retention(RUNTIME)
-                public @interface Transient {}
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:attribute name="name" type="xsd:string" use="required"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="version">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                @Target({METHOD, FIELD}) @Retention(RUNTIME)
-                public @interface Version {}
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:element name="column" type="orm:column" minOccurs="0"/>
-            <xsd:element name="temporal" type="orm:temporal" minOccurs="0"/>
-        </xsd:sequence>
-        <xsd:attribute name="name" type="xsd:string" use="required"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="basic">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                @Target({METHOD, FIELD}) @Retention(RUNTIME)
-                public @interface Basic {
-                FetchType fetch() default EAGER;
-                boolean optional() default true;
-                }
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:element name="column" type="orm:column" minOccurs="0"/>
-            <xsd:choice>
-                <xsd:element name="lob" type="orm:lob" minOccurs="0"/>
-                <xsd:element name="temporal" type="orm:temporal" minOccurs="0"/>
-                <xsd:element name="enumerated" type="orm:enumerated" minOccurs="0"/>
-            </xsd:choice>
-        </xsd:sequence>
-        <xsd:attribute name="name" type="xsd:string" use="required"/>
-        <xsd:attribute name="fetch" type="orm:fetch-type"/>
-        <xsd:attribute name="optional" type="xsd:boolean"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:simpleType name="fetch-type">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                public enum FetchType { LAZY, EAGER };
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:restriction base="xsd:token">
-            <xsd:enumeration value="LAZY"/>
-            <xsd:enumeration value="EAGER"/>
-        </xsd:restriction>
-    </xsd:simpleType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="lob">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                @Target({METHOD, FIELD}) @Retention(RUNTIME)
-                public @interface Lob {}
-
-            </xsd:documentation>
-        </xsd:annotation>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:simpleType name="temporal">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                @Target({METHOD, FIELD}) @Retention(RUNTIME)
-                public @interface Temporal {
-                TemporalType value();
-                }
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:restriction base="orm:temporal-type"/>
-    </xsd:simpleType>
-
-    <!-- **************************************************** -->
-
-    <xsd:simpleType name="temporal-type">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                public enum TemporalType {
-                DATE, // java.sql.Date
-                TIME, // java.sql.Time
-                TIMESTAMP // java.sql.Timestamp
-                }
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:restriction base="xsd:token">
-            <xsd:enumeration value="DATE"/>
-            <xsd:enumeration value="TIME"/>
-            <xsd:enumeration value="TIMESTAMP"/>
-        </xsd:restriction>
-    </xsd:simpleType>
-
-    <!-- **************************************************** -->
-
-    <xsd:simpleType name="enumerated">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                @Target({METHOD, FIELD}) @Retention(RUNTIME)
-                public @interface Enumerated {
-                EnumType value() default ORDINAL;
-                }
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:restriction base="orm:enum-type"/>
-    </xsd:simpleType>
-
-    <!-- **************************************************** -->
-
-    <xsd:simpleType name="enum-type">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                public enum EnumType {
-                ORDINAL,
-                STRING
-                }
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:restriction base="xsd:token">
-            <xsd:enumeration value="ORDINAL"/>
-            <xsd:enumeration value="STRING"/>
-        </xsd:restriction>
-    </xsd:simpleType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="many-to-one">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                @Target({METHOD, FIELD}) @Retention(RUNTIME)
-                public @interface ManyToOne {
-                Class targetEntity() default void.class;
-                CascadeType[] cascade() default {};
-                FetchType fetch() default EAGER;
-                boolean optional() default true;
-                }
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:choice>
-                <xsd:element name="join-column" type="orm:join-column"
-                             minOccurs="0" maxOccurs="unbounded"/>
-                <xsd:element name="join-table" type="orm:join-table"
-                             minOccurs="0"/>
-            </xsd:choice>
-            <xsd:element name="cascade" type="orm:cascade-type"
-                         minOccurs="0"/>
-        </xsd:sequence>
-        <xsd:attribute name="name" type="xsd:string" use="required"/>
-        <xsd:attribute name="target-entity" type="xsd:string"/>
-        <xsd:attribute name="fetch" type="orm:fetch-type"/>
-        <xsd:attribute name="optional" type="xsd:boolean"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="cascade-type">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                public enum CascadeType { ALL, PERSIST, MERGE, REMOVE, REFRESH};
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:element name="cascade-all" type="orm:emptyType"
-                         minOccurs="0"/>
-            <xsd:element name="cascade-persist" type="orm:emptyType"
-                         minOccurs="0"/>
-            <xsd:element name="cascade-merge" type="orm:emptyType"
-                         minOccurs="0"/>
-            <xsd:element name="cascade-remove" type="orm:emptyType"
-                         minOccurs="0"/>
-            <xsd:element name="cascade-refresh" type="orm:emptyType"
-                         minOccurs="0"/>
-        </xsd:sequence>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="one-to-one">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                @Target({METHOD, FIELD}) @Retention(RUNTIME)
-                public @interface OneToOne {
-                Class targetEntity() default void.class;
-                CascadeType[] cascade() default {};
-                FetchType fetch() default EAGER;
-                boolean optional() default true;
-                String mappedBy() default "";
-                }
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:choice>
-                <xsd:element name="primary-key-join-column"
-                             type="orm:primary-key-join-column"
-                             minOccurs="0" maxOccurs="unbounded"/>
-                <xsd:element name="join-column" type="orm:join-column"
-                             minOccurs="0" maxOccurs="unbounded"/>
-                <xsd:element name="join-table" type="orm:join-table"
-                             minOccurs="0"/>
-            </xsd:choice>
-            <xsd:element name="cascade" type="orm:cascade-type"
-                         minOccurs="0"/>
-        </xsd:sequence>
-        <xsd:attribute name="name" type="xsd:string" use="required"/>
-        <xsd:attribute name="target-entity" type="xsd:string"/>
-        <xsd:attribute name="fetch" type="orm:fetch-type"/>
-        <xsd:attribute name="optional" type="xsd:boolean"/>
-        <xsd:attribute name="mapped-by" type="xsd:string"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="one-to-many">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                @Target({METHOD, FIELD}) @Retention(RUNTIME)
-                public @interface OneToMany {
-                Class targetEntity() default void.class;
-                CascadeType[] cascade() default {};
-                FetchType fetch() default LAZY;
-                String mappedBy() default "";
-                }
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:element name="order-by" type="orm:order-by"
-                         minOccurs="0"/>
-            <xsd:element name="map-key" type="orm:map-key"
-                         minOccurs="0"/>
-            <xsd:choice>
-                <xsd:element name="join-table" type="orm:join-table"
-                             minOccurs="0"/>
-                <xsd:element name="join-column" type="orm:join-column"
-                             minOccurs="0" maxOccurs="unbounded"/>
-            </xsd:choice>
-            <xsd:element name="cascade" type="orm:cascade-type"
-                         minOccurs="0"/>
-        </xsd:sequence>
-        <xsd:attribute name="name" type="xsd:string" use="required"/>
-        <xsd:attribute name="target-entity" type="xsd:string"/>
-        <xsd:attribute name="fetch" type="orm:fetch-type"/>
-        <xsd:attribute name="mapped-by" type="xsd:string"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="join-table">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                @Target({METHOD, FIELD}) @Retention(RUNTIME)
-                public @interface JoinTable {
-                String name() default "";
-                String catalog() default "";
-                String schema() default "";
-                JoinColumn[] joinColumns() default {};
-                JoinColumn[] inverseJoinColumns() default {};
-                UniqueConstraint[] uniqueConstraints() default {};
-                }
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:element name="join-column" type="orm:join-column"
-                         minOccurs="0" maxOccurs="unbounded"/>
-            <xsd:element name="inverse-join-column" type="orm:join-column"
-                         minOccurs="0" maxOccurs="unbounded"/>
-            <xsd:element name="unique-constraint" type="orm:unique-constraint"
-                         minOccurs="0" maxOccurs="unbounded"/>
-        </xsd:sequence>
-        <xsd:attribute name="name" type="xsd:string"/>
-        <xsd:attribute name="catalog" type="xsd:string"/>
-        <xsd:attribute name="schema" type="xsd:string"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="many-to-many">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                @Target({METHOD, FIELD}) @Retention(RUNTIME)
-                public @interface ManyToMany {
-                Class targetEntity() default void.class;
-                CascadeType[] cascade() default {};
-                FetchType fetch() default LAZY;
-                String mappedBy() default "";
-                }
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:element name="order-by" type="orm:order-by"
-                         minOccurs="0"/>
-            <xsd:element name="map-key" type="orm:map-key"
-                         minOccurs="0"/>
-            <xsd:element name="join-table" type="orm:join-table"
-                         minOccurs="0"/>
-            <xsd:element name="cascade" type="orm:cascade-type"
-                         minOccurs="0"/>
-        </xsd:sequence>
-        <xsd:attribute name="name" type="xsd:string" use="required"/>
-        <xsd:attribute name="target-entity" type="xsd:string"/>
-        <xsd:attribute name="fetch" type="orm:fetch-type"/>
-        <xsd:attribute name="mapped-by" type="xsd:string"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="generated-value">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                @Target({METHOD, FIELD}) @Retention(RUNTIME)
-                public @interface GeneratedValue {
-                GenerationType strategy() default AUTO;
-                String generator() default "";
-                }
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:attribute name="strategy" type="orm:generation-type"/>
-        <xsd:attribute name="generator" type="xsd:string"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="map-key">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                @Target({METHOD, FIELD}) @Retention(RUNTIME)
-                public @interface MapKey {
-                String name() default "";
-                }
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:attribute name="name" type="xsd:string"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:simpleType name="order-by">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                @Target({METHOD, FIELD}) @Retention(RUNTIME)
-                public @interface OrderBy {
-                String value() default "";
-                }
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:restriction base="xsd:string"/>
-    </xsd:simpleType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="inheritance">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                @Target({TYPE}) @Retention(RUNTIME)
-                public @interface Inheritance {
-                InheritanceType strategy() default SINGLE_TABLE;
-                }
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:attribute name="strategy" type="orm:inheritance-type"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:simpleType name="inheritance-type">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                public enum InheritanceType
-                { SINGLE_TABLE, JOINED, TABLE_PER_CLASS};
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:restriction base="xsd:token">
-            <xsd:enumeration value="SINGLE_TABLE"/>
-            <xsd:enumeration value="JOINED"/>
-            <xsd:enumeration value="TABLE_PER_CLASS"/>
-        </xsd:restriction>
-    </xsd:simpleType>
-
-    <!-- **************************************************** -->
-
-    <xsd:simpleType name="discriminator-value">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                @Target({TYPE}) @Retention(RUNTIME)
-                public @interface DiscriminatorValue {
-                String value();
-                }
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:restriction base="xsd:string"/>
-    </xsd:simpleType>
-
-    <!-- **************************************************** -->
-
-    <xsd:simpleType name="discriminator-type">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                public enum DiscriminatorType { STRING, CHAR, INTEGER };
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:restriction base="xsd:token">
-            <xsd:enumeration value="STRING"/>
-            <xsd:enumeration value="CHAR"/>
-            <xsd:enumeration value="INTEGER"/>
-        </xsd:restriction>
-    </xsd:simpleType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="primary-key-join-column">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                @Target({TYPE, METHOD, FIELD}) @Retention(RUNTIME)
-                public @interface PrimaryKeyJoinColumn {
-                String name() default "";
-                String referencedColumnName() default "";
-                String columnDefinition() default "";
-                }
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:attribute name="name" type="xsd:string"/>
-        <xsd:attribute name="referenced-column-name" type="xsd:string"/>
-        <xsd:attribute name="column-definition" type="xsd:string"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="discriminator-column">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                @Target({TYPE}) @Retention(RUNTIME)
-                public @interface DiscriminatorColumn {
-                String name() default "DTYPE";
-                DiscriminatorType discriminatorType() default STRING;
-                String columnDefinition() default "";
-                int length() default 31;
-                }
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:attribute name="name" type="xsd:string"/>
-        <xsd:attribute name="discriminator-type" type="orm:discriminator-type"/>
-        <xsd:attribute name="column-definition" type="xsd:string"/>
-        <xsd:attribute name="length" type="xsd:int"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="embeddable">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                Defines the settings and mappings for embeddable objects. Is
-                allowed to be sparsely populated and used in conjunction with
-                the annotations. Alternatively, the metadata-complete attribute
-                can be used to indicate that no annotations are to be processed
-                in the class. If this is the case then the defaulting rules will
-                be recursively applied.
-
-                @Target({TYPE}) @Retention(RUNTIME)
-                public @interface Embeddable {}
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:element name="description" type="xsd:string" minOccurs="0"/>
-            <xsd:element name="attributes" type="orm:embeddable-attributes"
-                         minOccurs="0"/>
-        </xsd:sequence>
-        <xsd:attribute name="class" type="xsd:string" use="required"/>
-        <xsd:attribute name="access" type="orm:access-type"/>
-        <xsd:attribute name="metadata-complete" type="xsd:boolean"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="embeddable-attributes">
-        <xsd:sequence>
-            <xsd:element name="basic" type="orm:basic"
-                         minOccurs="0" maxOccurs="unbounded"/>
-            <xsd:element name="transient" type="orm:transient"
-                         minOccurs="0" maxOccurs="unbounded"/>
-        </xsd:sequence>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="embedded">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                @Target({METHOD, FIELD}) @Retention(RUNTIME)
-                public @interface Embedded {}
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:element name="attribute-override" type="orm:attribute-override"
-                         minOccurs="0" maxOccurs="unbounded"/>
-        </xsd:sequence>
-        <xsd:attribute name="name" type="xsd:string" use="required"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="mapped-superclass">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                Defines the settings and mappings for a mapped superclass. Is
-                allowed to be sparsely populated and used in conjunction with
-                the annotations. Alternatively, the metadata-complete attribute
-                can be used to indicate that no annotations are to be processed
-                If this is the case then the defaulting rules will be recursively
-                applied.
-
-                @Target(TYPE) @Retention(RUNTIME)
-                public @interface MappedSuperclass{}
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:element name="description" type="xsd:string" minOccurs="0"/>
-            <xsd:element name="id-class" type="orm:id-class" minOccurs="0"/>
-            <xsd:element name="exclude-default-listeners" type="orm:emptyType"
-                         minOccurs="0"/>
-            <xsd:element name="exclude-superclass-listeners" type="orm:emptyType"
-                         minOccurs="0"/>
-            <xsd:element name="entity-listeners" type="orm:entity-listeners"
-                         minOccurs="0"/>
-            <xsd:element name="pre-persist" type="orm:pre-persist" minOccurs="0"/>
-            <xsd:element name="post-persist" type="orm:post-persist"
-                         minOccurs="0"/>
-            <xsd:element name="pre-remove" type="orm:pre-remove" minOccurs="0"/>
-            <xsd:element name="post-remove" type="orm:post-remove" minOccurs="0"/>
-            <xsd:element name="pre-update" type="orm:pre-update" minOccurs="0"/>
-            <xsd:element name="post-update" type="orm:post-update" minOccurs="0"/>
-            <xsd:element name="post-load" type="orm:post-load" minOccurs="0"/>
-            <xsd:element name="attributes" type="orm:attributes" minOccurs="0"/>
-        </xsd:sequence>
-        <xsd:attribute name="class" type="xsd:string" use="required"/>
-        <xsd:attribute name="access" type="orm:access-type"/>
-        <xsd:attribute name="metadata-complete" type="xsd:boolean"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="sequence-generator">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                @Target({TYPE, METHOD, FIELD}) @Retention(RUNTIME)
-                public @interface SequenceGenerator {
-                String name();
-                String sequenceName() default "";
-                int initialValue() default 1;
-                int allocationSize() default 50;
-                }
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:attribute name="name" type="xsd:string" use="required"/>
-        <xsd:attribute name="sequence-name" type="xsd:string"/>
-        <xsd:attribute name="initial-value" type="xsd:int"/>
-        <xsd:attribute name="allocation-size" type="xsd:int"/>
-    </xsd:complexType>
-
-    <!-- **************************************************** -->
-
-    <xsd:complexType name="table-generator">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                @Target({TYPE, METHOD, FIELD}) @Retention(RUNTIME)
-                public @interface TableGenerator {
-                String name();
-                String table() default "";
-                String catalog() default "";
-                String schema() default "";
-                String pkColumnName() default "";
-                String valueColumnName() default "";
-                String pkColumnValue() default "";
-                int initialValue() default 0;
-                int allocationSize() default 50;
-                UniqueConstraint[] uniqueConstraints() default {};
-                }
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:sequence>
-            <xsd:element name="unique-constraint" type="orm:unique-constraint"
-                         minOccurs="0" maxOccurs="unbounded"/>
-        </xsd:sequence>
-        <xsd:attribute name="name" type="xsd:string" use="required"/>
-        <xsd:attribute name="table" type="xsd:string"/>
-        <xsd:attribute name="catalog" type="xsd:string"/>
-        <xsd:attribute name="schema" type="xsd:string"/>
-        <xsd:attribute name="pk-column-name" type="xsd:string"/>
-        <xsd:attribute name="value-column-name" type="xsd:string"/>
-        <xsd:attribute name="pk-column-value" type="xsd:string"/>
-        <xsd:attribute name="initial-value" type="xsd:int"/>
-        <xsd:attribute name="allocation-size" type="xsd:int"/>
-    </xsd:complexType>
-
-</xsd:schema>
-
-

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/ejb/orm_1_0.xsd (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/ejb/orm_1_0.xsd)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/ejb/orm_1_0.xsd	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/ejb/orm_1_0.xsd	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,1516 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Java Persistence API object-relational mapping file schema -->
+<xsd:schema targetNamespace="http://java.sun.com/xml/ns/persistence/orm"
+            xmlns:orm="http://java.sun.com/xml/ns/persistence/orm"
+            xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+            elementFormDefault="qualified"
+            attributeFormDefault="unqualified"
+            version="1.0">
+
+    <xsd:annotation>
+        <xsd:documentation>
+            @(#)orm_1_0.xsd 1.0 Feb 14 2006
+        </xsd:documentation>
+    </xsd:annotation>
+    <xsd:annotation>
+        <xsd:documentation><![CDATA[
+
+       This is the XML Schema for the persistence object-relational 
+       mapping file.
+       The file may be named "META-INF/orm.xml" in the persistence 
+       archive or it may be named some other name which would be 
+       used to locate the file as resource on the classpath.
+
+     ]]></xsd:documentation>
+    </xsd:annotation>
+
+    <xsd:complexType name="emptyType"/>
+
+    <xsd:simpleType name="versionType">
+        <xsd:restriction base="xsd:token">
+            <xsd:pattern value="[0-9]+(\.[0-9]+)*"/>
+        </xsd:restriction>
+    </xsd:simpleType>
+
+    <!-- **************************************************** -->
+
+    <xsd:element name="entity-mappings">
+        <xsd:complexType>
+            <xsd:annotation>
+                <xsd:documentation>
+
+                    The entity-mappings element is the root element of an mapping
+                    file. It contains the following four types of elements:
+
+                    1. The persistence-unit-metadata element contains metadata
+                    for the entire persistence unit. It is undefined if this element
+                    occurs in multiple mapping files within the same persistence unit.
+
+                    2. The package, schema, catalog and access elements apply to all of
+                    the entity, mapped-superclass and embeddable elements defined in
+                    the same file in which they occur.
+
+                    3. The sequence-generator, table-generator, named-query,
+                    named-native-query and sql-result-set-mapping elements are global
+                    to the persistence unit. It is undefined to have more than one
+                    sequence-generator or table-generator of the same name in the same
+                    or different mapping files in a persistence unit. It is also
+                    undefined to have more than one named-query or named-native-query
+                    of the same name in the same or different mapping files in a
+                    persistence unit.
+
+                    4. The entity, mapped-superclass and embeddable elements each define
+                    the mapping information for a managed persistent class. The mapping
+                    information contained in these elements may be complete or it may
+                    be partial.
+
+                </xsd:documentation>
+            </xsd:annotation>
+            <xsd:sequence>
+                <xsd:element name="description" type="xsd:string"
+                             minOccurs="0"/>
+                <xsd:element name="persistence-unit-metadata"
+                             type="orm:persistence-unit-metadata"
+                             minOccurs="0"/>
+                <xsd:element name="package" type="xsd:string"
+                             minOccurs="0"/>
+                <xsd:element name="schema" type="xsd:string"
+                             minOccurs="0"/>
+                <xsd:element name="catalog" type="xsd:string"
+                             minOccurs="0"/>
+                <xsd:element name="access" type="orm:access-type"
+                             minOccurs="0"/>
+                <xsd:element name="sequence-generator" type="orm:sequence-generator"
+                             minOccurs="0" maxOccurs="unbounded"/>
+                <xsd:element name="table-generator" type="orm:table-generator"
+                             minOccurs="0" maxOccurs="unbounded"/>
+                <xsd:element name="named-query" type="orm:named-query"
+                             minOccurs="0" maxOccurs="unbounded"/>
+                <xsd:element name="named-native-query" type="orm:named-native-query"
+                             minOccurs="0" maxOccurs="unbounded"/>
+                <xsd:element name="sql-result-set-mapping"
+                             type="orm:sql-result-set-mapping"
+                             minOccurs="0" maxOccurs="unbounded"/>
+                <xsd:element name="mapped-superclass" type="orm:mapped-superclass"
+                             minOccurs="0" maxOccurs="unbounded"/>
+                <xsd:element name="entity" type="orm:entity"
+                             minOccurs="0" maxOccurs="unbounded"/>
+                <xsd:element name="embeddable" type="orm:embeddable"
+                             minOccurs="0" maxOccurs="unbounded"/>
+            </xsd:sequence>
+            <xsd:attribute name="version" type="orm:versionType"
+                           fixed="1.0" use="required"/>
+        </xsd:complexType>
+    </xsd:element>
+
+    <!-- **************************************************** -->
+
+    <xsd:complexType name="persistence-unit-metadata">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                Metadata that applies to the persistence unit and not just to
+                the mapping file in which it is contained.
+
+                If the xml-mapping-metadata-complete element is specified then
+                the complete set of mapping metadata for the persistence unit
+                is contained in the XML mapping files for the persistence unit.
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:sequence>
+            <xsd:element name="xml-mapping-metadata-complete" type="orm:emptyType"
+                         minOccurs="0"/>
+            <xsd:element name="persistence-unit-defaults"
+                         type="orm:persistence-unit-defaults"
+                         minOccurs="0"/>
+        </xsd:sequence>
+    </xsd:complexType>
+
+    <!-- **************************************************** -->
+
+    <xsd:complexType name="persistence-unit-defaults">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                These defaults are applied to the persistence unit as a whole
+                unless they are overridden by local annotation or XML
+                element settings.
+
+                schema - Used as the schema for all tables or secondary tables
+                that apply to the persistence unit
+                catalog - Used as the catalog for all tables or secondary tables
+                that apply to the persistence unit
+                access - Used as the access type for all managed classes in
+                the persistence unit
+                cascade-persist - Adds cascade-persist to the set of cascade options
+                in entity relationships of the persistence unit
+                entity-listeners - List of default entity listeners to be invoked
+                on each entity in the persistence unit.
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:sequence>
+            <xsd:element name="schema" type="xsd:string"
+                         minOccurs="0"/>
+            <xsd:element name="catalog" type="xsd:string"
+                         minOccurs="0"/>
+            <xsd:element name="access" type="orm:access-type"
+                         minOccurs="0"/>
+            <xsd:element name="cascade-persist" type="orm:emptyType"
+                         minOccurs="0"/>
+            <xsd:element name="entity-listeners" type="orm:entity-listeners"
+                         minOccurs="0"/>
+        </xsd:sequence>
+    </xsd:complexType>
+
+    <!-- **************************************************** -->
+
+    <xsd:complexType name="entity">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                Defines the settings and mappings for an entity. Is allowed to be
+                sparsely populated and used in conjunction with the annotations.
+                Alternatively, the metadata-complete attribute can be used to
+                indicate that no annotations on the entity class (and its fields
+                or properties) are to be processed. If this is the case then
+                the defaulting rules for the entity and its subelements will
+                be recursively applied.
+
+                @Target(TYPE) @Retention(RUNTIME)
+                public @interface Entity {
+                String name() default "";
+                }
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:sequence>
+            <xsd:element name="description" type="xsd:string" minOccurs="0"/>
+            <xsd:element name="table" type="orm:table"
+                         minOccurs="0"/>
+            <xsd:element name="secondary-table" type="orm:secondary-table"
+                         minOccurs="0" maxOccurs="unbounded"/>
+            <xsd:element name="primary-key-join-column"
+                         type="orm:primary-key-join-column"
+                         minOccurs="0" maxOccurs="unbounded"/>
+            <xsd:element name="id-class" type="orm:id-class" minOccurs="0"/>
+            <xsd:element name="inheritance" type="orm:inheritance" minOccurs="0"/>
+            <xsd:element name="discriminator-value" type="orm:discriminator-value"
+                         minOccurs="0"/>
+            <xsd:element name="discriminator-column"
+                         type="orm:discriminator-column"
+                         minOccurs="0"/>
+            <xsd:element name="sequence-generator" type="orm:sequence-generator"
+                         minOccurs="0"/>
+            <xsd:element name="table-generator" type="orm:table-generator"
+                         minOccurs="0"/>
+            <xsd:element name="named-query" type="orm:named-query"
+                         minOccurs="0" maxOccurs="unbounded"/>
+            <xsd:element name="named-native-query" type="orm:named-native-query"
+                         minOccurs="0" maxOccurs="unbounded"/>
+            <xsd:element name="sql-result-set-mapping"
+                         type="orm:sql-result-set-mapping"
+                         minOccurs="0" maxOccurs="unbounded"/>
+            <xsd:element name="exclude-default-listeners" type="orm:emptyType"
+                         minOccurs="0"/>
+            <xsd:element name="exclude-superclass-listeners" type="orm:emptyType"
+                         minOccurs="0"/>
+            <xsd:element name="entity-listeners" type="orm:entity-listeners"
+                         minOccurs="0"/>
+            <xsd:element name="pre-persist" type="orm:pre-persist" minOccurs="0"/>
+            <xsd:element name="post-persist" type="orm:post-persist"
+                         minOccurs="0"/>
+            <xsd:element name="pre-remove" type="orm:pre-remove" minOccurs="0"/>
+            <xsd:element name="post-remove" type="orm:post-remove" minOccurs="0"/>
+            <xsd:element name="pre-update" type="orm:pre-update" minOccurs="0"/>
+            <xsd:element name="post-update" type="orm:post-update" minOccurs="0"/>
+            <xsd:element name="post-load" type="orm:post-load" minOccurs="0"/>
+            <xsd:element name="attribute-override" type="orm:attribute-override"
+                         minOccurs="0" maxOccurs="unbounded"/>
+            <xsd:element name="association-override"
+                         type="orm:association-override"
+                         minOccurs="0" maxOccurs="unbounded"/>
+            <xsd:element name="attributes" type="orm:attributes" minOccurs="0"/>
+        </xsd:sequence>
+        <xsd:attribute name="name" type="xsd:string"/>
+        <xsd:attribute name="class" type="xsd:string" use="required"/>
+        <xsd:attribute name="access" type="orm:access-type"/>
+        <xsd:attribute name="metadata-complete" type="xsd:boolean"/>
+    </xsd:complexType>
+
+    <!-- **************************************************** -->
+
+    <xsd:complexType name="attributes">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                This element contains the entity field or property mappings.
+                It may be sparsely populated to include only a subset of the
+                fields or properties. If metadata-complete for the entity is true
+                then the remainder of the attributes will be defaulted according
+                to the default rules.
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:sequence>
+            <xsd:choice>
+                <xsd:element name="id" type="orm:id"
+                             minOccurs="0" maxOccurs="unbounded"/>
+                <xsd:element name="embedded-id" type="orm:embedded-id"
+                             minOccurs="0"/>
+            </xsd:choice>
+            <xsd:element name="basic" type="orm:basic"
+                         minOccurs="0" maxOccurs="unbounded"/>
+            <xsd:element name="version" type="orm:version"
+                         minOccurs="0" maxOccurs="unbounded"/>
+            <xsd:element name="many-to-one" type="orm:many-to-one"
+                         minOccurs="0" maxOccurs="unbounded"/>
+            <xsd:element name="one-to-many" type="orm:one-to-many"
+                         minOccurs="0" maxOccurs="unbounded"/>
+            <xsd:element name="one-to-one" type="orm:one-to-one"
+                         minOccurs="0" maxOccurs="unbounded"/>
+            <xsd:element name="many-to-many" type="orm:many-to-many"
+                         minOccurs="0" maxOccurs="unbounded"/>
+            <xsd:element name="embedded" type="orm:embedded"
+                         minOccurs="0" maxOccurs="unbounded"/>
+            <xsd:element name="transient" type="orm:transient"
+                         minOccurs="0" maxOccurs="unbounded"/>
+        </xsd:sequence>
+    </xsd:complexType>
+
+    <!-- **************************************************** -->
+
+    <xsd:simpleType name="access-type">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                This element determines how the persistence provider accesses the
+                state of an entity or embedded object.
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:restriction base="xsd:token">
+            <xsd:enumeration value="PROPERTY"/>
+            <xsd:enumeration value="FIELD"/>
+        </xsd:restriction>
+    </xsd:simpleType>
+
+    <!-- **************************************************** -->
+
+    <xsd:complexType name="entity-listeners">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                @Target({TYPE}) @Retention(RUNTIME)
+                public @interface EntityListeners {
+                Class[] value();
+                }
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:sequence>
+            <xsd:element name="entity-listener" type="orm:entity-listener"
+                         minOccurs="0" maxOccurs="unbounded"/>
+        </xsd:sequence>
+    </xsd:complexType>
+
+    <!-- **************************************************** -->
+
+    <xsd:complexType name="entity-listener">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                Defines an entity listener to be invoked at lifecycle events
+                for the entities that list this listener.
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:sequence>
+            <xsd:element name="pre-persist" type="orm:pre-persist" minOccurs="0"/>
+            <xsd:element name="post-persist" type="orm:post-persist"
+                         minOccurs="0"/>
+            <xsd:element name="pre-remove" type="orm:pre-remove" minOccurs="0"/>
+            <xsd:element name="post-remove" type="orm:post-remove" minOccurs="0"/>
+            <xsd:element name="pre-update" type="orm:pre-update" minOccurs="0"/>
+            <xsd:element name="post-update" type="orm:post-update" minOccurs="0"/>
+            <xsd:element name="post-load" type="orm:post-load" minOccurs="0"/>
+        </xsd:sequence>
+        <xsd:attribute name="class" type="xsd:string" use="required"/>
+    </xsd:complexType>
+
+    <!-- **************************************************** -->
+
+    <xsd:complexType name="pre-persist">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                @Target({METHOD}) @Retention(RUNTIME)
+                public @interface PrePersist {}
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:attribute name="method-name" type="xsd:string" use="required"/>
+    </xsd:complexType>
+
+    <!-- **************************************************** -->
+
+    <xsd:complexType name="post-persist">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                @Target({METHOD}) @Retention(RUNTIME)
+                public @interface PostPersist {}
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:attribute name="method-name" type="xsd:string" use="required"/>
+    </xsd:complexType>
+
+    <!-- **************************************************** -->
+
+    <xsd:complexType name="pre-remove">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                @Target({METHOD}) @Retention(RUNTIME)
+                public @interface PreRemove {}
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:attribute name="method-name" type="xsd:string" use="required"/>
+    </xsd:complexType>
+
+    <!-- **************************************************** -->
+
+    <xsd:complexType name="post-remove">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                @Target({METHOD}) @Retention(RUNTIME)
+                public @interface PostRemove {}
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:attribute name="method-name" type="xsd:string" use="required"/>
+    </xsd:complexType>
+
+    <!-- **************************************************** -->
+
+    <xsd:complexType name="pre-update">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                @Target({METHOD}) @Retention(RUNTIME)
+                public @interface PreUpdate {}
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:attribute name="method-name" type="xsd:string" use="required"/>
+    </xsd:complexType>
+
+    <!-- **************************************************** -->
+
+    <xsd:complexType name="post-update">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                @Target({METHOD}) @Retention(RUNTIME)
+                public @interface PostUpdate {}
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:attribute name="method-name" type="xsd:string" use="required"/>
+    </xsd:complexType>
+
+    <!-- **************************************************** -->
+
+    <xsd:complexType name="post-load">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                @Target({METHOD}) @Retention(RUNTIME)
+                public @interface PostLoad {}
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:attribute name="method-name" type="xsd:string" use="required"/>
+    </xsd:complexType>
+
+    <!-- **************************************************** -->
+
+    <xsd:complexType name="query-hint">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                @Target({}) @Retention(RUNTIME)
+                public @interface QueryHint {
+                String name();
+                String value();
+                }
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:attribute name="name" type="xsd:string" use="required"/>
+        <xsd:attribute name="value" type="xsd:string" use="required"/>
+    </xsd:complexType>
+
+    <!-- **************************************************** -->
+
+    <xsd:complexType name="named-query">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                @Target({TYPE}) @Retention(RUNTIME)
+                public @interface NamedQuery {
+                String name();
+                String query();
+                QueryHint[] hints() default {};
+                }
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:sequence>
+            <xsd:element name="query" type="xsd:string"/>
+            <xsd:element name="hint" type="orm:query-hint"
+                         minOccurs="0" maxOccurs="unbounded"/>
+        </xsd:sequence>
+        <xsd:attribute name="name" type="xsd:string" use="required"/>
+    </xsd:complexType>
+
+    <!-- **************************************************** -->
+
+    <xsd:complexType name="named-native-query">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                @Target({TYPE}) @Retention(RUNTIME)
+                public @interface NamedNativeQuery {
+                String name();
+                String query();
+                QueryHint[] hints() default {};
+                Class resultClass() default void.class;
+                String resultSetMapping() default ""; //named SqlResultSetMapping
+                }
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:sequence>
+            <xsd:element name="query" type="xsd:string"/>
+            <xsd:element name="hint" type="orm:query-hint"
+                         minOccurs="0" maxOccurs="unbounded"/>
+        </xsd:sequence>
+        <xsd:attribute name="name" type="xsd:string" use="required"/>
+        <xsd:attribute name="result-class" type="xsd:string"/>
+        <xsd:attribute name="result-set-mapping" type="xsd:string"/>
+    </xsd:complexType>
+
+    <!-- **************************************************** -->
+
+    <xsd:complexType name="sql-result-set-mapping">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                @Target({TYPE}) @Retention(RUNTIME)
+                public @interface SqlResultSetMapping {
+                String name();
+                EntityResult[] entities() default {};
+                ColumnResult[] columns() default {};
+                }
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:sequence>
+            <xsd:element name="entity-result" type="orm:entity-result"
+                         minOccurs="0" maxOccurs="unbounded"/>
+            <xsd:element name="column-result" type="orm:column-result"
+                         minOccurs="0" maxOccurs="unbounded"/>
+        </xsd:sequence>
+        <xsd:attribute name="name" type="xsd:string" use="required"/>
+    </xsd:complexType>
+
+    <!-- **************************************************** -->
+
+    <xsd:complexType name="entity-result">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                @Target({}) @Retention(RUNTIME)
+                public @interface EntityResult {
+                Class entityClass();
+                FieldResult[] fields() default {};
+                String discriminatorColumn() default "";
+                }
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:sequence>
+            <xsd:element name="field-result" type="orm:field-result"
+                         minOccurs="0" maxOccurs="unbounded"/>
+        </xsd:sequence>
+        <xsd:attribute name="entity-class" type="xsd:string" use="required"/>
+        <xsd:attribute name="discriminator-column" type="xsd:string"/>
+    </xsd:complexType>
+
+    <!-- **************************************************** -->
+
+    <xsd:complexType name="field-result">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                @Target({}) @Retention(RUNTIME)
+                public @interface FieldResult {
+                String name();
+                String column();
+                }
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:attribute name="name" type="xsd:string" use="required"/>
+        <xsd:attribute name="column" type="xsd:string" use="required"/>
+    </xsd:complexType>
+
+    <!-- **************************************************** -->
+
+    <xsd:complexType name="column-result">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                @Target({}) @Retention(RUNTIME)
+                public @interface ColumnResult {
+                String name();
+                }
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:attribute name="name" type="xsd:string" use="required"/>
+    </xsd:complexType>
+
+    <!-- **************************************************** -->
+
+    <xsd:complexType name="table">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                @Target({TYPE}) @Retention(RUNTIME)
+                public @interface Table {
+                String name() default "";
+                String catalog() default "";
+                String schema() default "";
+                UniqueConstraint[] uniqueConstraints() default {};
+                }
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:sequence>
+            <xsd:element name="unique-constraint" type="orm:unique-constraint"
+                         minOccurs="0" maxOccurs="unbounded"/>
+        </xsd:sequence>
+        <xsd:attribute name="name" type="xsd:string"/>
+        <xsd:attribute name="catalog" type="xsd:string"/>
+        <xsd:attribute name="schema" type="xsd:string"/>
+    </xsd:complexType>
+
+    <!-- **************************************************** -->
+
+    <xsd:complexType name="secondary-table">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                @Target({TYPE}) @Retention(RUNTIME)
+                public @interface SecondaryTable {
+                String name();
+                String catalog() default "";
+                String schema() default "";
+                PrimaryKeyJoinColumn[] pkJoinColumns() default {};
+                UniqueConstraint[] uniqueConstraints() default {};
+                }
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:sequence>
+            <xsd:element name="primary-key-join-column"
+                         type="orm:primary-key-join-column"
+                         minOccurs="0" maxOccurs="unbounded"/>
+            <xsd:element name="unique-constraint" type="orm:unique-constraint"
+                         minOccurs="0" maxOccurs="unbounded"/>
+        </xsd:sequence>
+        <xsd:attribute name="name" type="xsd:string" use="required"/>
+        <xsd:attribute name="catalog" type="xsd:string"/>
+        <xsd:attribute name="schema" type="xsd:string"/>
+    </xsd:complexType>
+
+    <!-- **************************************************** -->
+
+    <xsd:complexType name="unique-constraint">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                @Target({}) @Retention(RUNTIME)
+                public @interface UniqueConstraint {
+                String[] columnNames();
+                }
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:sequence>
+            <xsd:element name="column-name" type="xsd:string"
+                         maxOccurs="unbounded"/>
+        </xsd:sequence>
+    </xsd:complexType>
+
+    <!-- **************************************************** -->
+
+    <xsd:complexType name="column">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                @Target({METHOD, FIELD}) @Retention(RUNTIME)
+                public @interface Column {
+                String name() default "";
+                boolean unique() default false;
+                boolean nullable() default true;
+                boolean insertable() default true;
+                boolean updatable() default true;
+                String columnDefinition() default "";
+                String table() default "";
+                int length() default 255;
+                int precision() default 0; // decimal precision
+                int scale() default 0; // decimal scale
+                }
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:attribute name="name" type="xsd:string"/>
+        <xsd:attribute name="unique" type="xsd:boolean"/>
+        <xsd:attribute name="nullable" type="xsd:boolean"/>
+        <xsd:attribute name="insertable" type="xsd:boolean"/>
+        <xsd:attribute name="updatable" type="xsd:boolean"/>
+        <xsd:attribute name="column-definition" type="xsd:string"/>
+        <xsd:attribute name="table" type="xsd:string"/>
+        <xsd:attribute name="length" type="xsd:int"/>
+        <xsd:attribute name="precision" type="xsd:int"/>
+        <xsd:attribute name="scale" type="xsd:int"/>
+    </xsd:complexType>
+
+    <!-- **************************************************** -->
+
+    <xsd:complexType name="join-column">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                @Target({METHOD, FIELD}) @Retention(RUNTIME)
+                public @interface JoinColumn {
+                String name() default "";
+                String referencedColumnName() default "";
+                boolean unique() default false;
+                boolean nullable() default true;
+                boolean insertable() default true;
+                boolean updatable() default true;
+                String columnDefinition() default "";
+                String table() default "";
+                }
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:attribute name="name" type="xsd:string"/>
+        <xsd:attribute name="referenced-column-name" type="xsd:string"/>
+        <xsd:attribute name="unique" type="xsd:boolean"/>
+        <xsd:attribute name="nullable" type="xsd:boolean"/>
+        <xsd:attribute name="insertable" type="xsd:boolean"/>
+        <xsd:attribute name="updatable" type="xsd:boolean"/>
+        <xsd:attribute name="column-definition" type="xsd:string"/>
+        <xsd:attribute name="table" type="xsd:string"/>
+    </xsd:complexType>
+
+    <!-- **************************************************** -->
+
+    <xsd:simpleType name="generation-type">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                public enum GenerationType { TABLE, SEQUENCE, IDENTITY, AUTO };
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:restriction base="xsd:token">
+            <xsd:enumeration value="TABLE"/>
+            <xsd:enumeration value="SEQUENCE"/>
+            <xsd:enumeration value="IDENTITY"/>
+            <xsd:enumeration value="AUTO"/>
+        </xsd:restriction>
+    </xsd:simpleType>
+
+    <!-- **************************************************** -->
+
+    <xsd:complexType name="attribute-override">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                @Target({TYPE, METHOD, FIELD}) @Retention(RUNTIME)
+                public @interface AttributeOverride {
+                String name();
+                Column column();
+                }
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:sequence>
+            <xsd:element name="column" type="orm:column"/>
+        </xsd:sequence>
+        <xsd:attribute name="name" type="xsd:string" use="required"/>
+    </xsd:complexType>
+
+    <!-- **************************************************** -->
+
+    <xsd:complexType name="association-override">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                @Target({TYPE, METHOD, FIELD}) @Retention(RUNTIME)
+                public @interface AssociationOverride {
+                String name();
+                JoinColumn[] joinColumns();
+                }
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:sequence>
+            <xsd:element name="join-column" type="orm:join-column"
+                         maxOccurs="unbounded"/>
+        </xsd:sequence>
+        <xsd:attribute name="name" type="xsd:string" use="required"/>
+    </xsd:complexType>
+
+    <!-- **************************************************** -->
+
+    <xsd:complexType name="id-class">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                @Target({TYPE}) @Retention(RUNTIME)
+                public @interface IdClass {
+                Class value();
+                }
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:attribute name="class" type="xsd:string" use="required"/>
+    </xsd:complexType>
+
+    <!-- **************************************************** -->
+
+    <xsd:complexType name="id">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                @Target({METHOD, FIELD}) @Retention(RUNTIME)
+                public @interface Id {}
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:sequence>
+            <xsd:element name="column" type="orm:column"
+                         minOccurs="0"/>
+            <xsd:element name="generated-value" type="orm:generated-value"
+                         minOccurs="0"/>
+            <xsd:element name="temporal" type="orm:temporal"
+                         minOccurs="0"/>
+            <xsd:element name="table-generator" type="orm:table-generator"
+                         minOccurs="0"/>
+            <xsd:element name="sequence-generator" type="orm:sequence-generator"
+                         minOccurs="0"/>
+        </xsd:sequence>
+        <xsd:attribute name="name" type="xsd:string" use="required"/>
+    </xsd:complexType>
+
+    <!-- **************************************************** -->
+
+    <xsd:complexType name="embedded-id">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                @Target({METHOD, FIELD}) @Retention(RUNTIME)
+                public @interface EmbeddedId {}
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:sequence>
+            <xsd:element name="attribute-override" type="orm:attribute-override"
+                         minOccurs="0" maxOccurs="unbounded"/>
+        </xsd:sequence>
+        <xsd:attribute name="name" type="xsd:string" use="required"/>
+    </xsd:complexType>
+
+    <!-- **************************************************** -->
+
+    <xsd:complexType name="transient">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                @Target({METHOD, FIELD}) @Retention(RUNTIME)
+                public @interface Transient {}
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:attribute name="name" type="xsd:string" use="required"/>
+    </xsd:complexType>
+
+    <!-- **************************************************** -->
+
+    <xsd:complexType name="version">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                @Target({METHOD, FIELD}) @Retention(RUNTIME)
+                public @interface Version {}
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:sequence>
+            <xsd:element name="column" type="orm:column" minOccurs="0"/>
+            <xsd:element name="temporal" type="orm:temporal" minOccurs="0"/>
+        </xsd:sequence>
+        <xsd:attribute name="name" type="xsd:string" use="required"/>
+    </xsd:complexType>
+
+    <!-- **************************************************** -->
+
+    <xsd:complexType name="basic">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                @Target({METHOD, FIELD}) @Retention(RUNTIME)
+                public @interface Basic {
+                FetchType fetch() default EAGER;
+                boolean optional() default true;
+                }
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:sequence>
+            <xsd:element name="column" type="orm:column" minOccurs="0"/>
+            <xsd:choice>
+                <xsd:element name="lob" type="orm:lob" minOccurs="0"/>
+                <xsd:element name="temporal" type="orm:temporal" minOccurs="0"/>
+                <xsd:element name="enumerated" type="orm:enumerated" minOccurs="0"/>
+            </xsd:choice>
+        </xsd:sequence>
+        <xsd:attribute name="name" type="xsd:string" use="required"/>
+        <xsd:attribute name="fetch" type="orm:fetch-type"/>
+        <xsd:attribute name="optional" type="xsd:boolean"/>
+    </xsd:complexType>
+
+    <!-- **************************************************** -->
+
+    <xsd:simpleType name="fetch-type">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                public enum FetchType { LAZY, EAGER };
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:restriction base="xsd:token">
+            <xsd:enumeration value="LAZY"/>
+            <xsd:enumeration value="EAGER"/>
+        </xsd:restriction>
+    </xsd:simpleType>
+
+    <!-- **************************************************** -->
+
+    <xsd:complexType name="lob">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                @Target({METHOD, FIELD}) @Retention(RUNTIME)
+                public @interface Lob {}
+
+            </xsd:documentation>
+        </xsd:annotation>
+    </xsd:complexType>
+
+    <!-- **************************************************** -->
+
+    <xsd:simpleType name="temporal">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                @Target({METHOD, FIELD}) @Retention(RUNTIME)
+                public @interface Temporal {
+                TemporalType value();
+                }
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:restriction base="orm:temporal-type"/>
+    </xsd:simpleType>
+
+    <!-- **************************************************** -->
+
+    <xsd:simpleType name="temporal-type">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                public enum TemporalType {
+                DATE, // java.sql.Date
+                TIME, // java.sql.Time
+                TIMESTAMP // java.sql.Timestamp
+                }
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:restriction base="xsd:token">
+            <xsd:enumeration value="DATE"/>
+            <xsd:enumeration value="TIME"/>
+            <xsd:enumeration value="TIMESTAMP"/>
+        </xsd:restriction>
+    </xsd:simpleType>
+
+    <!-- **************************************************** -->
+
+    <xsd:simpleType name="enumerated">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                @Target({METHOD, FIELD}) @Retention(RUNTIME)
+                public @interface Enumerated {
+                EnumType value() default ORDINAL;
+                }
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:restriction base="orm:enum-type"/>
+    </xsd:simpleType>
+
+    <!-- **************************************************** -->
+
+    <xsd:simpleType name="enum-type">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                public enum EnumType {
+                ORDINAL,
+                STRING
+                }
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:restriction base="xsd:token">
+            <xsd:enumeration value="ORDINAL"/>
+            <xsd:enumeration value="STRING"/>
+        </xsd:restriction>
+    </xsd:simpleType>
+
+    <!-- **************************************************** -->
+
+    <xsd:complexType name="many-to-one">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                @Target({METHOD, FIELD}) @Retention(RUNTIME)
+                public @interface ManyToOne {
+                Class targetEntity() default void.class;
+                CascadeType[] cascade() default {};
+                FetchType fetch() default EAGER;
+                boolean optional() default true;
+                }
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:sequence>
+            <xsd:choice>
+                <xsd:element name="join-column" type="orm:join-column"
+                             minOccurs="0" maxOccurs="unbounded"/>
+                <xsd:element name="join-table" type="orm:join-table"
+                             minOccurs="0"/>
+            </xsd:choice>
+            <xsd:element name="cascade" type="orm:cascade-type"
+                         minOccurs="0"/>
+        </xsd:sequence>
+        <xsd:attribute name="name" type="xsd:string" use="required"/>
+        <xsd:attribute name="target-entity" type="xsd:string"/>
+        <xsd:attribute name="fetch" type="orm:fetch-type"/>
+        <xsd:attribute name="optional" type="xsd:boolean"/>
+    </xsd:complexType>
+
+    <!-- **************************************************** -->
+
+    <xsd:complexType name="cascade-type">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                public enum CascadeType { ALL, PERSIST, MERGE, REMOVE, REFRESH};
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:sequence>
+            <xsd:element name="cascade-all" type="orm:emptyType"
+                         minOccurs="0"/>
+            <xsd:element name="cascade-persist" type="orm:emptyType"
+                         minOccurs="0"/>
+            <xsd:element name="cascade-merge" type="orm:emptyType"
+                         minOccurs="0"/>
+            <xsd:element name="cascade-remove" type="orm:emptyType"
+                         minOccurs="0"/>
+            <xsd:element name="cascade-refresh" type="orm:emptyType"
+                         minOccurs="0"/>
+        </xsd:sequence>
+    </xsd:complexType>
+
+    <!-- **************************************************** -->
+
+    <xsd:complexType name="one-to-one">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                @Target({METHOD, FIELD}) @Retention(RUNTIME)
+                public @interface OneToOne {
+                Class targetEntity() default void.class;
+                CascadeType[] cascade() default {};
+                FetchType fetch() default EAGER;
+                boolean optional() default true;
+                String mappedBy() default "";
+                }
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:sequence>
+            <xsd:choice>
+                <xsd:element name="primary-key-join-column"
+                             type="orm:primary-key-join-column"
+                             minOccurs="0" maxOccurs="unbounded"/>
+                <xsd:element name="join-column" type="orm:join-column"
+                             minOccurs="0" maxOccurs="unbounded"/>
+                <xsd:element name="join-table" type="orm:join-table"
+                             minOccurs="0"/>
+            </xsd:choice>
+            <xsd:element name="cascade" type="orm:cascade-type"
+                         minOccurs="0"/>
+        </xsd:sequence>
+        <xsd:attribute name="name" type="xsd:string" use="required"/>
+        <xsd:attribute name="target-entity" type="xsd:string"/>
+        <xsd:attribute name="fetch" type="orm:fetch-type"/>
+        <xsd:attribute name="optional" type="xsd:boolean"/>
+        <xsd:attribute name="mapped-by" type="xsd:string"/>
+    </xsd:complexType>
+
+    <!-- **************************************************** -->
+
+    <xsd:complexType name="one-to-many">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                @Target({METHOD, FIELD}) @Retention(RUNTIME)
+                public @interface OneToMany {
+                Class targetEntity() default void.class;
+                CascadeType[] cascade() default {};
+                FetchType fetch() default LAZY;
+                String mappedBy() default "";
+                }
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:sequence>
+            <xsd:element name="order-by" type="orm:order-by"
+                         minOccurs="0"/>
+            <xsd:element name="map-key" type="orm:map-key"
+                         minOccurs="0"/>
+            <xsd:choice>
+                <xsd:element name="join-table" type="orm:join-table"
+                             minOccurs="0"/>
+                <xsd:element name="join-column" type="orm:join-column"
+                             minOccurs="0" maxOccurs="unbounded"/>
+            </xsd:choice>
+            <xsd:element name="cascade" type="orm:cascade-type"
+                         minOccurs="0"/>
+        </xsd:sequence>
+        <xsd:attribute name="name" type="xsd:string" use="required"/>
+        <xsd:attribute name="target-entity" type="xsd:string"/>
+        <xsd:attribute name="fetch" type="orm:fetch-type"/>
+        <xsd:attribute name="mapped-by" type="xsd:string"/>
+    </xsd:complexType>
+
+    <!-- **************************************************** -->
+
+    <xsd:complexType name="join-table">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                @Target({METHOD, FIELD}) @Retention(RUNTIME)
+                public @interface JoinTable {
+                String name() default "";
+                String catalog() default "";
+                String schema() default "";
+                JoinColumn[] joinColumns() default {};
+                JoinColumn[] inverseJoinColumns() default {};
+                UniqueConstraint[] uniqueConstraints() default {};
+                }
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:sequence>
+            <xsd:element name="join-column" type="orm:join-column"
+                         minOccurs="0" maxOccurs="unbounded"/>
+            <xsd:element name="inverse-join-column" type="orm:join-column"
+                         minOccurs="0" maxOccurs="unbounded"/>
+            <xsd:element name="unique-constraint" type="orm:unique-constraint"
+                         minOccurs="0" maxOccurs="unbounded"/>
+        </xsd:sequence>
+        <xsd:attribute name="name" type="xsd:string"/>
+        <xsd:attribute name="catalog" type="xsd:string"/>
+        <xsd:attribute name="schema" type="xsd:string"/>
+    </xsd:complexType>
+
+    <!-- **************************************************** -->
+
+    <xsd:complexType name="many-to-many">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                @Target({METHOD, FIELD}) @Retention(RUNTIME)
+                public @interface ManyToMany {
+                Class targetEntity() default void.class;
+                CascadeType[] cascade() default {};
+                FetchType fetch() default LAZY;
+                String mappedBy() default "";
+                }
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:sequence>
+            <xsd:element name="order-by" type="orm:order-by"
+                         minOccurs="0"/>
+            <xsd:element name="map-key" type="orm:map-key"
+                         minOccurs="0"/>
+            <xsd:element name="join-table" type="orm:join-table"
+                         minOccurs="0"/>
+            <xsd:element name="cascade" type="orm:cascade-type"
+                         minOccurs="0"/>
+        </xsd:sequence>
+        <xsd:attribute name="name" type="xsd:string" use="required"/>
+        <xsd:attribute name="target-entity" type="xsd:string"/>
+        <xsd:attribute name="fetch" type="orm:fetch-type"/>
+        <xsd:attribute name="mapped-by" type="xsd:string"/>
+    </xsd:complexType>
+
+    <!-- **************************************************** -->
+
+    <xsd:complexType name="generated-value">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                @Target({METHOD, FIELD}) @Retention(RUNTIME)
+                public @interface GeneratedValue {
+                GenerationType strategy() default AUTO;
+                String generator() default "";
+                }
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:attribute name="strategy" type="orm:generation-type"/>
+        <xsd:attribute name="generator" type="xsd:string"/>
+    </xsd:complexType>
+
+    <!-- **************************************************** -->
+
+    <xsd:complexType name="map-key">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                @Target({METHOD, FIELD}) @Retention(RUNTIME)
+                public @interface MapKey {
+                String name() default "";
+                }
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:attribute name="name" type="xsd:string"/>
+    </xsd:complexType>
+
+    <!-- **************************************************** -->
+
+    <xsd:simpleType name="order-by">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                @Target({METHOD, FIELD}) @Retention(RUNTIME)
+                public @interface OrderBy {
+                String value() default "";
+                }
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:restriction base="xsd:string"/>
+    </xsd:simpleType>
+
+    <!-- **************************************************** -->
+
+    <xsd:complexType name="inheritance">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                @Target({TYPE}) @Retention(RUNTIME)
+                public @interface Inheritance {
+                InheritanceType strategy() default SINGLE_TABLE;
+                }
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:attribute name="strategy" type="orm:inheritance-type"/>
+    </xsd:complexType>
+
+    <!-- **************************************************** -->
+
+    <xsd:simpleType name="inheritance-type">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                public enum InheritanceType
+                { SINGLE_TABLE, JOINED, TABLE_PER_CLASS};
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:restriction base="xsd:token">
+            <xsd:enumeration value="SINGLE_TABLE"/>
+            <xsd:enumeration value="JOINED"/>
+            <xsd:enumeration value="TABLE_PER_CLASS"/>
+        </xsd:restriction>
+    </xsd:simpleType>
+
+    <!-- **************************************************** -->
+
+    <xsd:simpleType name="discriminator-value">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                @Target({TYPE}) @Retention(RUNTIME)
+                public @interface DiscriminatorValue {
+                String value();
+                }
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:restriction base="xsd:string"/>
+    </xsd:simpleType>
+
+    <!-- **************************************************** -->
+
+    <xsd:simpleType name="discriminator-type">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                public enum DiscriminatorType { STRING, CHAR, INTEGER };
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:restriction base="xsd:token">
+            <xsd:enumeration value="STRING"/>
+            <xsd:enumeration value="CHAR"/>
+            <xsd:enumeration value="INTEGER"/>
+        </xsd:restriction>
+    </xsd:simpleType>
+
+    <!-- **************************************************** -->
+
+    <xsd:complexType name="primary-key-join-column">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                @Target({TYPE, METHOD, FIELD}) @Retention(RUNTIME)
+                public @interface PrimaryKeyJoinColumn {
+                String name() default "";
+                String referencedColumnName() default "";
+                String columnDefinition() default "";
+                }
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:attribute name="name" type="xsd:string"/>
+        <xsd:attribute name="referenced-column-name" type="xsd:string"/>
+        <xsd:attribute name="column-definition" type="xsd:string"/>
+    </xsd:complexType>
+
+    <!-- **************************************************** -->
+
+    <xsd:complexType name="discriminator-column">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                @Target({TYPE}) @Retention(RUNTIME)
+                public @interface DiscriminatorColumn {
+                String name() default "DTYPE";
+                DiscriminatorType discriminatorType() default STRING;
+                String columnDefinition() default "";
+                int length() default 31;
+                }
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:attribute name="name" type="xsd:string"/>
+        <xsd:attribute name="discriminator-type" type="orm:discriminator-type"/>
+        <xsd:attribute name="column-definition" type="xsd:string"/>
+        <xsd:attribute name="length" type="xsd:int"/>
+    </xsd:complexType>
+
+    <!-- **************************************************** -->
+
+    <xsd:complexType name="embeddable">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                Defines the settings and mappings for embeddable objects. Is
+                allowed to be sparsely populated and used in conjunction with
+                the annotations. Alternatively, the metadata-complete attribute
+                can be used to indicate that no annotations are to be processed
+                in the class. If this is the case then the defaulting rules will
+                be recursively applied.
+
+                @Target({TYPE}) @Retention(RUNTIME)
+                public @interface Embeddable {}
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:sequence>
+            <xsd:element name="description" type="xsd:string" minOccurs="0"/>
+            <xsd:element name="attributes" type="orm:embeddable-attributes"
+                         minOccurs="0"/>
+        </xsd:sequence>
+        <xsd:attribute name="class" type="xsd:string" use="required"/>
+        <xsd:attribute name="access" type="orm:access-type"/>
+        <xsd:attribute name="metadata-complete" type="xsd:boolean"/>
+    </xsd:complexType>
+
+    <!-- **************************************************** -->
+
+    <xsd:complexType name="embeddable-attributes">
+        <xsd:sequence>
+            <xsd:element name="basic" type="orm:basic"
+                         minOccurs="0" maxOccurs="unbounded"/>
+            <xsd:element name="transient" type="orm:transient"
+                         minOccurs="0" maxOccurs="unbounded"/>
+        </xsd:sequence>
+    </xsd:complexType>
+
+    <!-- **************************************************** -->
+
+    <xsd:complexType name="embedded">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                @Target({METHOD, FIELD}) @Retention(RUNTIME)
+                public @interface Embedded {}
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:sequence>
+            <xsd:element name="attribute-override" type="orm:attribute-override"
+                         minOccurs="0" maxOccurs="unbounded"/>
+        </xsd:sequence>
+        <xsd:attribute name="name" type="xsd:string" use="required"/>
+    </xsd:complexType>
+
+    <!-- **************************************************** -->
+
+    <xsd:complexType name="mapped-superclass">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                Defines the settings and mappings for a mapped superclass. Is
+                allowed to be sparsely populated and used in conjunction with
+                the annotations. Alternatively, the metadata-complete attribute
+                can be used to indicate that no annotations are to be processed
+                If this is the case then the defaulting rules will be recursively
+                applied.
+
+                @Target(TYPE) @Retention(RUNTIME)
+                public @interface MappedSuperclass{}
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:sequence>
+            <xsd:element name="description" type="xsd:string" minOccurs="0"/>
+            <xsd:element name="id-class" type="orm:id-class" minOccurs="0"/>
+            <xsd:element name="exclude-default-listeners" type="orm:emptyType"
+                         minOccurs="0"/>
+            <xsd:element name="exclude-superclass-listeners" type="orm:emptyType"
+                         minOccurs="0"/>
+            <xsd:element name="entity-listeners" type="orm:entity-listeners"
+                         minOccurs="0"/>
+            <xsd:element name="pre-persist" type="orm:pre-persist" minOccurs="0"/>
+            <xsd:element name="post-persist" type="orm:post-persist"
+                         minOccurs="0"/>
+            <xsd:element name="pre-remove" type="orm:pre-remove" minOccurs="0"/>
+            <xsd:element name="post-remove" type="orm:post-remove" minOccurs="0"/>
+            <xsd:element name="pre-update" type="orm:pre-update" minOccurs="0"/>
+            <xsd:element name="post-update" type="orm:post-update" minOccurs="0"/>
+            <xsd:element name="post-load" type="orm:post-load" minOccurs="0"/>
+            <xsd:element name="attributes" type="orm:attributes" minOccurs="0"/>
+        </xsd:sequence>
+        <xsd:attribute name="class" type="xsd:string" use="required"/>
+        <xsd:attribute name="access" type="orm:access-type"/>
+        <xsd:attribute name="metadata-complete" type="xsd:boolean"/>
+    </xsd:complexType>
+
+    <!-- **************************************************** -->
+
+    <xsd:complexType name="sequence-generator">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                @Target({TYPE, METHOD, FIELD}) @Retention(RUNTIME)
+                public @interface SequenceGenerator {
+                String name();
+                String sequenceName() default "";
+                int initialValue() default 1;
+                int allocationSize() default 50;
+                }
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:attribute name="name" type="xsd:string" use="required"/>
+        <xsd:attribute name="sequence-name" type="xsd:string"/>
+        <xsd:attribute name="initial-value" type="xsd:int"/>
+        <xsd:attribute name="allocation-size" type="xsd:int"/>
+    </xsd:complexType>
+
+    <!-- **************************************************** -->
+
+    <xsd:complexType name="table-generator">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                @Target({TYPE, METHOD, FIELD}) @Retention(RUNTIME)
+                public @interface TableGenerator {
+                String name();
+                String table() default "";
+                String catalog() default "";
+                String schema() default "";
+                String pkColumnName() default "";
+                String valueColumnName() default "";
+                String pkColumnValue() default "";
+                int initialValue() default 0;
+                int allocationSize() default 50;
+                UniqueConstraint[] uniqueConstraints() default {};
+                }
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:sequence>
+            <xsd:element name="unique-constraint" type="orm:unique-constraint"
+                         minOccurs="0" maxOccurs="unbounded"/>
+        </xsd:sequence>
+        <xsd:attribute name="name" type="xsd:string" use="required"/>
+        <xsd:attribute name="table" type="xsd:string"/>
+        <xsd:attribute name="catalog" type="xsd:string"/>
+        <xsd:attribute name="schema" type="xsd:string"/>
+        <xsd:attribute name="pk-column-name" type="xsd:string"/>
+        <xsd:attribute name="value-column-name" type="xsd:string"/>
+        <xsd:attribute name="pk-column-value" type="xsd:string"/>
+        <xsd:attribute name="initial-value" type="xsd:int"/>
+        <xsd:attribute name="allocation-size" type="xsd:int"/>
+    </xsd:complexType>
+
+</xsd:schema>
+
+

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/mapping (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/mapping)

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/mapping/IdGenerator.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/mapping/IdGenerator.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/mapping/IdGenerator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,52 +0,0 @@
-//$Id$
-package org.hibernate.mapping;
-
-import java.io.Serializable;
-import java.util.Properties;
-
-/**
- * Identifier generator container,
- * Useful to keep named generator in annotations
- *
- * @author Emmanuel Bernard
- */
-public class IdGenerator implements Serializable {
-	private String name;
-	private String identifierGeneratorStrategy;
-	private Properties params = new Properties();
-
-
-	/**
-	 * @return identifier generator strategy
-	 */
-	public String getIdentifierGeneratorStrategy() {
-		return identifierGeneratorStrategy;
-	}
-
-	/**
-	 * @return generator name
-	 */
-	public String getName() {
-		return name;
-	}
-
-	/**
-	 * @return generator configuration parameters
-	 */
-	public Properties getParams() {
-		return params;
-	}
-
-	public void setIdentifierGeneratorStrategy(String string) {
-		identifierGeneratorStrategy = string;
-	}
-
-	public void setName(String string) {
-		name = string;
-	}
-
-	public void addParam(String key, String value) {
-		params.setProperty( key, value );
-	}
-
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/mapping/IdGenerator.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/mapping/IdGenerator.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/mapping/IdGenerator.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/mapping/IdGenerator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,52 @@
+//$Id$
+package org.hibernate.mapping;
+
+import java.io.Serializable;
+import java.util.Properties;
+
+/**
+ * Identifier generator container,
+ * Useful to keep named generator in annotations
+ *
+ * @author Emmanuel Bernard
+ */
+public class IdGenerator implements Serializable {
+	private String name;
+	private String identifierGeneratorStrategy;
+	private Properties params = new Properties();
+
+
+	/**
+	 * @return identifier generator strategy
+	 */
+	public String getIdentifierGeneratorStrategy() {
+		return identifierGeneratorStrategy;
+	}
+
+	/**
+	 * @return generator name
+	 */
+	public String getName() {
+		return name;
+	}
+
+	/**
+	 * @return generator configuration parameters
+	 */
+	public Properties getParams() {
+		return params;
+	}
+
+	public void setIdentifierGeneratorStrategy(String string) {
+		identifierGeneratorStrategy = string;
+	}
+
+	public void setName(String string) {
+		name = string;
+	}
+
+	public void addParam(String key, String value) {
+		params.setProperty( key, value );
+	}
+
+}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/type (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/type)

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/type/AbstractLobType.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/type/AbstractLobType.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/type/AbstractLobType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,67 +0,0 @@
-//$Id$
-package org.hibernate.type;
-
-import java.io.Serializable;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-
-import org.hibernate.EntityMode;
-import org.hibernate.HibernateException;
-import org.hibernate.MappingException;
-import org.hibernate.engine.Mapping;
-import org.hibernate.engine.SessionImplementor;
-
-/**
- * @author Emmanuel Bernard
- */
-public abstract class AbstractLobType extends AbstractType implements Serializable {
-	public boolean isDirty(Object old, Object current, boolean[] checkable, SessionImplementor session)
-			throws HibernateException {
-		return checkable[0] ? ! isEqual( old, current, session.getEntityMode() ) : false;
-	}
-
-	@Override
-	public boolean isEqual(Object x, Object y, EntityMode entityMode) {
-		return isEqual( x, y, entityMode, null );
-	}
-
-	@Override
-	public int getHashCode(Object x, EntityMode entityMode) {
-		return getHashCode( x, entityMode, null );
-	}
-
-	public String getName() {
-		return this.getClass().getName();
-	}
-
-	public int getColumnSpan(Mapping mapping) throws MappingException {
-		return 1;
-	}
-
-	protected abstract Object get(ResultSet rs, String name) throws SQLException;
-
-	public Object nullSafeGet(ResultSet rs, String[] names, SessionImplementor session, Object owner)
-			throws HibernateException, SQLException {
-		return get( rs, names[0] );
-	}
-
-	public Object nullSafeGet(ResultSet rs, String name, SessionImplementor session, Object owner)
-			throws HibernateException, SQLException {
-		return get( rs, name );
-	}
-
-	public void nullSafeSet(
-			PreparedStatement st, Object value, int index, boolean[] settable, SessionImplementor session
-	) throws HibernateException, SQLException {
-		if ( settable[0] ) set( st, value, index, session );
-	}
-
-	protected abstract void set(PreparedStatement st, Object value, int index, SessionImplementor session)
-			throws SQLException;
-
-	public void nullSafeSet(PreparedStatement st, Object value, int index, SessionImplementor session)
-			throws HibernateException, SQLException {
-		set( st, value, index, session );
-	}
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/type/AbstractLobType.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/type/AbstractLobType.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/type/AbstractLobType.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/type/AbstractLobType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,67 @@
+//$Id$
+package org.hibernate.type;
+
+import java.io.Serializable;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+import org.hibernate.EntityMode;
+import org.hibernate.HibernateException;
+import org.hibernate.MappingException;
+import org.hibernate.engine.Mapping;
+import org.hibernate.engine.SessionImplementor;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public abstract class AbstractLobType extends AbstractType implements Serializable {
+	public boolean isDirty(Object old, Object current, boolean[] checkable, SessionImplementor session)
+			throws HibernateException {
+		return checkable[0] ? ! isEqual( old, current, session.getEntityMode() ) : false;
+	}
+
+	@Override
+	public boolean isEqual(Object x, Object y, EntityMode entityMode) {
+		return isEqual( x, y, entityMode, null );
+	}
+
+	@Override
+	public int getHashCode(Object x, EntityMode entityMode) {
+		return getHashCode( x, entityMode, null );
+	}
+
+	public String getName() {
+		return this.getClass().getName();
+	}
+
+	public int getColumnSpan(Mapping mapping) throws MappingException {
+		return 1;
+	}
+
+	protected abstract Object get(ResultSet rs, String name) throws SQLException;
+
+	public Object nullSafeGet(ResultSet rs, String[] names, SessionImplementor session, Object owner)
+			throws HibernateException, SQLException {
+		return get( rs, names[0] );
+	}
+
+	public Object nullSafeGet(ResultSet rs, String name, SessionImplementor session, Object owner)
+			throws HibernateException, SQLException {
+		return get( rs, name );
+	}
+
+	public void nullSafeSet(
+			PreparedStatement st, Object value, int index, boolean[] settable, SessionImplementor session
+	) throws HibernateException, SQLException {
+		if ( settable[0] ) set( st, value, index, session );
+	}
+
+	protected abstract void set(PreparedStatement st, Object value, int index, SessionImplementor session)
+			throws SQLException;
+
+	public void nullSafeSet(PreparedStatement st, Object value, int index, SessionImplementor session)
+			throws HibernateException, SQLException {
+		set( st, value, index, session );
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/type/ByteArrayBlobType.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/type/ByteArrayBlobType.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/type/ByteArrayBlobType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,195 +0,0 @@
-//$Id$
-package org.hibernate.type;
-
-import java.io.ByteArrayInputStream;
-import java.sql.Blob;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Types;
-import java.util.Map;
-
-import org.dom4j.Node;
-import org.hibernate.EntityMode;
-import org.hibernate.HibernateException;
-import org.hibernate.MappingException;
-import org.hibernate.engine.Mapping;
-import org.hibernate.engine.SessionFactoryImplementor;
-import org.hibernate.engine.SessionImplementor;
-import org.hibernate.lob.BlobImpl;
-import org.hibernate.util.ArrayHelper;
-
-/**
- * Map a Byte[] into a Blob
- * Experimental
- *
- * @author Emmanuel Bernard
- */
-public class ByteArrayBlobType extends AbstractLobType {
-
-	public int[] sqlTypes(Mapping mapping) throws MappingException {
-		return new int[]{Types.BLOB};
-	}
-
-	@Override
-	public boolean isEqual(Object x, Object y, EntityMode entityMode, SessionFactoryImplementor factory) {
-		if ( x == y ) return true;
-		if ( x == null || y == null ) return false;
-		if ( x instanceof Byte[] ) {
-			Object[] o1 = (Object[]) x;
-			Object[] o2 = (Object[]) y;
-			return ArrayHelper.isEquals( o1, o2 );
-		}
-		else {
-			byte[] c1 = (byte[]) x;
-			byte[] c2 = (byte[]) y;
-			return ArrayHelper.isEquals( c1, c2 );
-		}
-	}
-
-	public int getHashCode(Object x, EntityMode entityMode, SessionFactoryImplementor factory) {
-		if ( x instanceof Character[] ) {
-			Object[] o = (Object[]) x;
-			return ArrayHelper.hash( o );
-		}
-		else {
-			byte[] c = (byte[]) x;
-			return ArrayHelper.hash( c );
-		}
-	}
-
-	public Object deepCopy(Object value, EntityMode entityMode, SessionFactoryImplementor factory)
-			throws HibernateException {
-		if ( value == null ) return null;
-		if ( value instanceof Byte[] ) {
-			Byte[] array = (Byte[]) value;
-			int length = array.length;
-			Byte[] copy = new Byte[length];
-			for ( int index = 0; index < length ; index++ ) {
-				copy[index] = Byte.valueOf( array[index].byteValue() );
-			}
-			return copy;
-		}
-		else {
-			byte[] array = (byte[]) value;
-			int length = array.length;
-			byte[] copy = new byte[length];
-			System.arraycopy( array, 0, copy, 0, length );
-			return copy;
-		}
-	}
-
-	public Class getReturnedClass() {
-		return Byte[].class;
-	}
-
-	protected Object get(ResultSet rs, String name) throws SQLException {
-		Blob blob = rs.getBlob( name );
-		if ( rs.wasNull() ) return null;
-		int length = (int) blob.length();
-		byte[] primaryResult = blob.getBytes( 1, length );
-		return wrap( primaryResult );
-	}
-
-	protected void set(PreparedStatement st, Object value, int index, SessionImplementor session) throws SQLException {
-		if ( value == null ) {
-			st.setNull( index, sqlTypes( null )[0] );
-		}
-		else {
-			byte[] toSet = unWrap( value );
-			final boolean useInputStream = session.getFactory().getDialect().useInputStreamToInsertBlob();
-
-			if ( useInputStream ) {
-				st.setBinaryStream( index, new ByteArrayInputStream( toSet ), toSet.length );
-			}
-			else {
-				st.setBlob( index, new BlobImpl( toSet ) );
-			}
-		}
-	}
-
-	public void setToXMLNode(Node node, Object value, SessionFactoryImplementor factory) throws HibernateException {
-		node.setText( toString( value ) );
-	}
-
-	public String toString(Object val) {
-		byte[] bytes = unWrap( val );
-		StringBuilder buf = new StringBuilder( 2 * bytes.length );
-		for ( int i = 0; i < bytes.length ; i++ ) {
-			String hexStr = Integer.toHexString( bytes[i] - Byte.MIN_VALUE );
-			if ( hexStr.length() == 1 ) buf.append( '0' );
-			buf.append( hexStr );
-		}
-		return buf.toString();
-	}
-
-	public String toLoggableString(Object value, SessionFactoryImplementor factory) {
-		return value == null ? "null" : toString( value );
-	}
-
-	public Object fromXMLNode(Node xml, Mapping factory) throws HibernateException {
-		String xmlText = xml.getText();
-		return xmlText == null || xmlText.length() == 0 ? null : fromString( xmlText );
-	}
-
-	private Object fromString(String xmlText) {
-		if ( xmlText == null ) {
-			return null;
-		}
-		if ( xmlText.length() % 2 != 0 ) {
-			throw new IllegalArgumentException( "The string is not a valid xml representation of a binary content." );
-		}
-		byte[] bytes = new byte[xmlText.length() / 2];
-		for ( int i = 0; i < bytes.length ; i++ ) {
-			String hexStr = xmlText.substring( i * 2, ( i + 1 ) * 2 );
-			bytes[i] = (byte) ( Integer.parseInt( hexStr, 16 ) + Byte.MIN_VALUE );
-		}
-		return wrap( bytes );
-	}
-
-	protected Object wrap(byte[] bytes) {
-		return wrapPrimitive( bytes );
-	}
-
-	protected byte[] unWrap(Object bytes) {
-		return unwrapNonPrimitive( (Byte[]) bytes );
-	}
-
-	private byte[] unwrapNonPrimitive(Byte[] bytes) {
-		int length = bytes.length;
-		byte[] result = new byte[length];
-		for ( int i = 0; i < length ; i++ ) {
-			result[i] = bytes[i].byteValue();
-		}
-		return result;
-	}
-
-	private Byte[] wrapPrimitive(byte[] bytes) {
-		int length = bytes.length;
-		Byte[] result = new Byte[length];
-		for ( int index = 0; index < length ; index++ ) {
-			result[index] = Byte.valueOf( bytes[index] );
-		}
-		return result;
-	}
-
-	public boolean isMutable() {
-		return true;
-	}
-
-	public Object replace(
-			Object original,
-			Object target,
-			SessionImplementor session,
-			Object owner,
-			Map copyCache
-	)
-			throws HibernateException {
-		if ( isEqual( original, target, session.getEntityMode() ) ) return original;
-		return deepCopy( original, session.getEntityMode(), session.getFactory() );
-	}
-
-	public boolean[] toColumnNullness(Object value, Mapping mapping) {
-		return value == null ? ArrayHelper.FALSE : ArrayHelper.TRUE;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/type/ByteArrayBlobType.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/type/ByteArrayBlobType.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/type/ByteArrayBlobType.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/type/ByteArrayBlobType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,195 @@
+//$Id$
+package org.hibernate.type;
+
+import java.io.ByteArrayInputStream;
+import java.sql.Blob;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Types;
+import java.util.Map;
+
+import org.dom4j.Node;
+import org.hibernate.EntityMode;
+import org.hibernate.HibernateException;
+import org.hibernate.MappingException;
+import org.hibernate.engine.Mapping;
+import org.hibernate.engine.SessionFactoryImplementor;
+import org.hibernate.engine.SessionImplementor;
+import org.hibernate.lob.BlobImpl;
+import org.hibernate.util.ArrayHelper;
+
+/**
+ * Map a Byte[] into a Blob
+ * Experimental
+ *
+ * @author Emmanuel Bernard
+ */
+public class ByteArrayBlobType extends AbstractLobType {
+
+	public int[] sqlTypes(Mapping mapping) throws MappingException {
+		return new int[]{Types.BLOB};
+	}
+
+	@Override
+	public boolean isEqual(Object x, Object y, EntityMode entityMode, SessionFactoryImplementor factory) {
+		if ( x == y ) return true;
+		if ( x == null || y == null ) return false;
+		if ( x instanceof Byte[] ) {
+			Object[] o1 = (Object[]) x;
+			Object[] o2 = (Object[]) y;
+			return ArrayHelper.isEquals( o1, o2 );
+		}
+		else {
+			byte[] c1 = (byte[]) x;
+			byte[] c2 = (byte[]) y;
+			return ArrayHelper.isEquals( c1, c2 );
+		}
+	}
+
+	public int getHashCode(Object x, EntityMode entityMode, SessionFactoryImplementor factory) {
+		if ( x instanceof Character[] ) {
+			Object[] o = (Object[]) x;
+			return ArrayHelper.hash( o );
+		}
+		else {
+			byte[] c = (byte[]) x;
+			return ArrayHelper.hash( c );
+		}
+	}
+
+	public Object deepCopy(Object value, EntityMode entityMode, SessionFactoryImplementor factory)
+			throws HibernateException {
+		if ( value == null ) return null;
+		if ( value instanceof Byte[] ) {
+			Byte[] array = (Byte[]) value;
+			int length = array.length;
+			Byte[] copy = new Byte[length];
+			for ( int index = 0; index < length ; index++ ) {
+				copy[index] = Byte.valueOf( array[index].byteValue() );
+			}
+			return copy;
+		}
+		else {
+			byte[] array = (byte[]) value;
+			int length = array.length;
+			byte[] copy = new byte[length];
+			System.arraycopy( array, 0, copy, 0, length );
+			return copy;
+		}
+	}
+
+	public Class getReturnedClass() {
+		return Byte[].class;
+	}
+
+	protected Object get(ResultSet rs, String name) throws SQLException {
+		Blob blob = rs.getBlob( name );
+		if ( rs.wasNull() ) return null;
+		int length = (int) blob.length();
+		byte[] primaryResult = blob.getBytes( 1, length );
+		return wrap( primaryResult );
+	}
+
+	protected void set(PreparedStatement st, Object value, int index, SessionImplementor session) throws SQLException {
+		if ( value == null ) {
+			st.setNull( index, sqlTypes( null )[0] );
+		}
+		else {
+			byte[] toSet = unWrap( value );
+			final boolean useInputStream = session.getFactory().getDialect().useInputStreamToInsertBlob();
+
+			if ( useInputStream ) {
+				st.setBinaryStream( index, new ByteArrayInputStream( toSet ), toSet.length );
+			}
+			else {
+				st.setBlob( index, new BlobImpl( toSet ) );
+			}
+		}
+	}
+
+	public void setToXMLNode(Node node, Object value, SessionFactoryImplementor factory) throws HibernateException {
+		node.setText( toString( value ) );
+	}
+
+	public String toString(Object val) {
+		byte[] bytes = unWrap( val );
+		StringBuilder buf = new StringBuilder( 2 * bytes.length );
+		for ( int i = 0; i < bytes.length ; i++ ) {
+			String hexStr = Integer.toHexString( bytes[i] - Byte.MIN_VALUE );
+			if ( hexStr.length() == 1 ) buf.append( '0' );
+			buf.append( hexStr );
+		}
+		return buf.toString();
+	}
+
+	public String toLoggableString(Object value, SessionFactoryImplementor factory) {
+		return value == null ? "null" : toString( value );
+	}
+
+	public Object fromXMLNode(Node xml, Mapping factory) throws HibernateException {
+		String xmlText = xml.getText();
+		return xmlText == null || xmlText.length() == 0 ? null : fromString( xmlText );
+	}
+
+	private Object fromString(String xmlText) {
+		if ( xmlText == null ) {
+			return null;
+		}
+		if ( xmlText.length() % 2 != 0 ) {
+			throw new IllegalArgumentException( "The string is not a valid xml representation of a binary content." );
+		}
+		byte[] bytes = new byte[xmlText.length() / 2];
+		for ( int i = 0; i < bytes.length ; i++ ) {
+			String hexStr = xmlText.substring( i * 2, ( i + 1 ) * 2 );
+			bytes[i] = (byte) ( Integer.parseInt( hexStr, 16 ) + Byte.MIN_VALUE );
+		}
+		return wrap( bytes );
+	}
+
+	protected Object wrap(byte[] bytes) {
+		return wrapPrimitive( bytes );
+	}
+
+	protected byte[] unWrap(Object bytes) {
+		return unwrapNonPrimitive( (Byte[]) bytes );
+	}
+
+	private byte[] unwrapNonPrimitive(Byte[] bytes) {
+		int length = bytes.length;
+		byte[] result = new byte[length];
+		for ( int i = 0; i < length ; i++ ) {
+			result[i] = bytes[i].byteValue();
+		}
+		return result;
+	}
+
+	private Byte[] wrapPrimitive(byte[] bytes) {
+		int length = bytes.length;
+		Byte[] result = new Byte[length];
+		for ( int index = 0; index < length ; index++ ) {
+			result[index] = Byte.valueOf( bytes[index] );
+		}
+		return result;
+	}
+
+	public boolean isMutable() {
+		return true;
+	}
+
+	public Object replace(
+			Object original,
+			Object target,
+			SessionImplementor session,
+			Object owner,
+			Map copyCache
+	)
+			throws HibernateException {
+		if ( isEqual( original, target, session.getEntityMode() ) ) return original;
+		return deepCopy( original, session.getEntityMode(), session.getFactory() );
+	}
+
+	public boolean[] toColumnNullness(Object value, Mapping mapping) {
+		return value == null ? ArrayHelper.FALSE : ArrayHelper.TRUE;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/type/CharacterArrayClobType.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/type/CharacterArrayClobType.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/type/CharacterArrayClobType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,148 +0,0 @@
-//$Id$
-package org.hibernate.type;
-
-import java.io.CharArrayReader;
-import java.io.IOException;
-import java.io.Reader;
-import java.io.Serializable;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Types;
-import java.util.ArrayList;
-
-import org.hibernate.HibernateException;
-import org.hibernate.usertype.UserType;
-import org.hibernate.util.ArrayHelper;
-
-/**
- * Map a Character[] to a Clob
- * Experimental
- *
- * @author Emmanuel Bernard
- */
-public class CharacterArrayClobType implements UserType, Serializable {
-	public static final int BUFFER_SIZE = 4096;
-
-	public int[] sqlTypes() {
-		return new int[]{Types.CLOB};
-	}
-
-	public Class returnedClass() {
-		return Character[].class;
-	}
-
-	public boolean equals(Object x, Object y) throws HibernateException {
-		if ( x == y ) return true;
-		if ( x == null || y == null ) return false;
-		if ( x instanceof Character[] ) {
-			Object[] o1 = (Object[]) x;
-			Object[] o2 = (Object[]) y;
-			return ArrayHelper.isEquals( o1, o2 );
-		}
-		else {
-			char[] c1 = (char[]) x;
-			char[] c2 = (char[]) y;
-			return ArrayHelper.isEquals( c1, c2 );
-		}
-	}
-
-	public int hashCode(Object x) throws HibernateException {
-		if ( x instanceof Character[] ) {
-			Object[] o = (Object[]) x;
-			return ArrayHelper.hash( o );
-		}
-		else {
-			char[] c = (char[]) x;
-			return ArrayHelper.hash( c );
-		}
-	}
-
-	public Object nullSafeGet(ResultSet rs, String[] names, Object owner) throws HibernateException, SQLException {
-		Reader reader = rs.getCharacterStream( names[0] );
-		if ( reader == null ) return null;
-		ArrayList result = new ArrayList();
-		try {
-			char[] charbuf = new char[BUFFER_SIZE];
-			for ( int i = reader.read( charbuf ); i > 0 ; i = reader.read( charbuf ) ) {
-				result.ensureCapacity( result.size() + BUFFER_SIZE );
-				for ( int charIndex = 0; charIndex < i ; charIndex++ ) {
-					result.add( Character.valueOf( charbuf[charIndex] ) );
-				}
-			}
-		}
-		catch (IOException e) {
-			throw new SQLException( e.getMessage() );
-		}
-		if ( returnedClass().equals( Character[].class ) ) {
-			return result.toArray( new Character[ result.size() ] );
-		}
-		else {
-			//very suboptimal
-			int length = result.size();
-			char[] chars = new char[length];
-			for ( int index = 0; index < length ; index++ ) {
-				chars[index] = ( (Character) result.get( index ) ).charValue();
-			}
-			return chars;
-		}
-	}
-
-	public void nullSafeSet(PreparedStatement st, Object value, int index) throws HibernateException, SQLException {
-		if ( value != null ) {
-			char[] chars;
-			if ( value instanceof Character[] ) {
-				Character[] character = (Character[]) value;
-				int length = character.length;
-				chars = new char[length];
-				for ( int i = 0; i < length ; i++ ) {
-					chars[i] = character[i].charValue();
-				}
-			}
-			else {
-				chars = (char[]) value;
-			}
-			CharArrayReader reader = new CharArrayReader( chars );
-			st.setCharacterStream( index, reader, chars.length );
-		}
-		else {
-			st.setNull( index, sqlTypes()[0] );
-		}
-	}
-
-	public Object deepCopy(Object value) throws HibernateException {
-		if ( value == null ) return null;
-		if ( value instanceof Character[] ) {
-			Character[] array = (Character[]) value;
-			int length = array.length;
-			Character[] copy = new Character[length];
-			for ( int index = 0; index < length ; index++ ) {
-				copy[index] = Character.valueOf( array[index].charValue() );
-			}
-			return copy;
-		}
-		else {
-			char[] array = (char[]) value;
-			int length = array.length;
-			char[] copy = new char[length];
-			System.arraycopy( array, 0, copy, 0, length );
-			return copy;
-		}
-	}
-
-	public boolean isMutable() {
-		return true;
-	}
-
-	public Serializable disassemble(Object value) throws HibernateException {
-		return (Serializable) deepCopy( value );
-	}
-
-	public Object assemble(Serializable cached, Object owner) throws HibernateException {
-		return deepCopy( cached );
-	}
-
-	public Object replace(Object original, Object target, Object owner) throws HibernateException {
-		return deepCopy( original );
-	}
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/type/CharacterArrayClobType.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/type/CharacterArrayClobType.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/type/CharacterArrayClobType.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/type/CharacterArrayClobType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,148 @@
+//$Id$
+package org.hibernate.type;
+
+import java.io.CharArrayReader;
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Serializable;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Types;
+import java.util.ArrayList;
+
+import org.hibernate.HibernateException;
+import org.hibernate.usertype.UserType;
+import org.hibernate.util.ArrayHelper;
+
+/**
+ * Map a Character[] to a Clob
+ * Experimental
+ *
+ * @author Emmanuel Bernard
+ */
+public class CharacterArrayClobType implements UserType, Serializable {
+	public static final int BUFFER_SIZE = 4096;
+
+	public int[] sqlTypes() {
+		return new int[]{Types.CLOB};
+	}
+
+	public Class returnedClass() {
+		return Character[].class;
+	}
+
+	public boolean equals(Object x, Object y) throws HibernateException {
+		if ( x == y ) return true;
+		if ( x == null || y == null ) return false;
+		if ( x instanceof Character[] ) {
+			Object[] o1 = (Object[]) x;
+			Object[] o2 = (Object[]) y;
+			return ArrayHelper.isEquals( o1, o2 );
+		}
+		else {
+			char[] c1 = (char[]) x;
+			char[] c2 = (char[]) y;
+			return ArrayHelper.isEquals( c1, c2 );
+		}
+	}
+
+	public int hashCode(Object x) throws HibernateException {
+		if ( x instanceof Character[] ) {
+			Object[] o = (Object[]) x;
+			return ArrayHelper.hash( o );
+		}
+		else {
+			char[] c = (char[]) x;
+			return ArrayHelper.hash( c );
+		}
+	}
+
+	public Object nullSafeGet(ResultSet rs, String[] names, Object owner) throws HibernateException, SQLException {
+		Reader reader = rs.getCharacterStream( names[0] );
+		if ( reader == null ) return null;
+		ArrayList result = new ArrayList();
+		try {
+			char[] charbuf = new char[BUFFER_SIZE];
+			for ( int i = reader.read( charbuf ); i > 0 ; i = reader.read( charbuf ) ) {
+				result.ensureCapacity( result.size() + BUFFER_SIZE );
+				for ( int charIndex = 0; charIndex < i ; charIndex++ ) {
+					result.add( Character.valueOf( charbuf[charIndex] ) );
+				}
+			}
+		}
+		catch (IOException e) {
+			throw new SQLException( e.getMessage() );
+		}
+		if ( returnedClass().equals( Character[].class ) ) {
+			return result.toArray( new Character[ result.size() ] );
+		}
+		else {
+			//very suboptimal
+			int length = result.size();
+			char[] chars = new char[length];
+			for ( int index = 0; index < length ; index++ ) {
+				chars[index] = ( (Character) result.get( index ) ).charValue();
+			}
+			return chars;
+		}
+	}
+
+	public void nullSafeSet(PreparedStatement st, Object value, int index) throws HibernateException, SQLException {
+		if ( value != null ) {
+			char[] chars;
+			if ( value instanceof Character[] ) {
+				Character[] character = (Character[]) value;
+				int length = character.length;
+				chars = new char[length];
+				for ( int i = 0; i < length ; i++ ) {
+					chars[i] = character[i].charValue();
+				}
+			}
+			else {
+				chars = (char[]) value;
+			}
+			CharArrayReader reader = new CharArrayReader( chars );
+			st.setCharacterStream( index, reader, chars.length );
+		}
+		else {
+			st.setNull( index, sqlTypes()[0] );
+		}
+	}
+
+	public Object deepCopy(Object value) throws HibernateException {
+		if ( value == null ) return null;
+		if ( value instanceof Character[] ) {
+			Character[] array = (Character[]) value;
+			int length = array.length;
+			Character[] copy = new Character[length];
+			for ( int index = 0; index < length ; index++ ) {
+				copy[index] = Character.valueOf( array[index].charValue() );
+			}
+			return copy;
+		}
+		else {
+			char[] array = (char[]) value;
+			int length = array.length;
+			char[] copy = new char[length];
+			System.arraycopy( array, 0, copy, 0, length );
+			return copy;
+		}
+	}
+
+	public boolean isMutable() {
+		return true;
+	}
+
+	public Serializable disassemble(Object value) throws HibernateException {
+		return (Serializable) deepCopy( value );
+	}
+
+	public Object assemble(Serializable cached, Object owner) throws HibernateException {
+		return deepCopy( cached );
+	}
+
+	public Object replace(Object original, Object target, Object owner) throws HibernateException {
+		return deepCopy( original );
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/type/EnumType.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/type/EnumType.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/type/EnumType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,369 +0,0 @@
-//$Id$
-package org.hibernate.type;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.Serializable;
-import java.lang.reflect.Method;
-import java.sql.DatabaseMetaData;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Types;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Properties;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.hibernate.AssertionFailure;
-import org.hibernate.HibernateException;
-import org.hibernate.usertype.EnhancedUserType;
-import org.hibernate.usertype.ParameterizedType;
-import org.hibernate.util.ReflectHelper;
-import org.hibernate.util.StringHelper;
-
-/**
- * Enum type mapper
- * Try and find the appropriate SQL type depending on column metadata
- *
- * @author Emmanuel Bernard
- */
-//TODO implements readobject/writeobject to recalculate the enumclasses
-public class EnumType implements EnhancedUserType, ParameterizedType, Serializable {
-	private static Log log = LogFactory.getLog( EnumType.class );
-	private static final boolean IS_TRACE_ENABLED;
-
-	static {
-		//cache this, because it was a significant performance cost
-		IS_TRACE_ENABLED = LogFactory.getLog( StringHelper.qualifier( Type.class.getName() ) ).isTraceEnabled();
-	}
-
-	public static final String ENUM = "enumClass";
-	public static final String SCHEMA = "schema";
-	public static final String CATALOG = "catalog";
-	public static final String TABLE = "table";
-	public static final String COLUMN = "column";
-	public static final String TYPE = "type";
-
-	private static Map<Class, Object[]> enumValues = new HashMap<Class, Object[]>();
-
-	private Class<? extends Enum> enumClass;
-	private String column;
-	private String table;
-	private String catalog;
-	private String schema;
-	private boolean guessed = false;
-	private int sqlType = Types.INTEGER; //before any guessing
-
-	public int[] sqlTypes() {
-		return new int[]{sqlType};
-	}
-
-	public Class returnedClass() {
-		return enumClass;
-	}
-
-	public boolean equals(Object x, Object y) throws HibernateException {
-		return x == y;
-	}
-
-	public int hashCode(Object x) throws HibernateException {
-		return x == null ? 0 : x.hashCode();
-	}
-
-	public Object nullSafeGet(ResultSet rs, String[] names, Object owner) throws HibernateException, SQLException {
-		Object object = rs.getObject( names[0] );
-		if ( rs.wasNull() ) {
-			if ( IS_TRACE_ENABLED ) {
-				log.debug( "Returning null as column " + names[0] );
-			}
-			return null;
-		}
-		if ( object instanceof Number ) {
-			Object[] values = enumValues.get( enumClass );
-			if ( values == null ) throw new AssertionFailure( "enumValues not preprocessed: " + enumClass );
-			int ordinal = ( (Number) object ).intValue();
-			if ( ordinal < 0 || ordinal >= values.length ) {
-				throw new IllegalArgumentException( "Unknown ordinal value for enum " + enumClass + ": " + ordinal );
-			}
-			if ( IS_TRACE_ENABLED ) {
-				log.debug( "Returning '" + ordinal + "' as column " + names[0] );
-			}
-			return values[ordinal];
-		}
-		else {
-			String name = (String) object;
-			if ( IS_TRACE_ENABLED ) {
-				log.debug( "Returning '" + name + "' as column " + names[0] );
-			}
-			try {
-				return Enum.valueOf( enumClass, name );
-			}
-			catch (IllegalArgumentException iae) {
-				throw new IllegalArgumentException( "Unknown name value for enum " + enumClass + ": " + name, iae );
-			}
-		}
-	}
-
-	public void nullSafeSet(PreparedStatement st, Object value, int index) throws HibernateException, SQLException {
-		//if (!guessed) guessType( st, index );
-		if ( value == null ) {
-			if ( IS_TRACE_ENABLED ) log.debug( "Binding null to parameter: " + index );
-			st.setNull( index, sqlType );
-		}
-		else {
-			boolean isOrdinal = isOrdinal( sqlType );
-			if ( isOrdinal ) {
-				int ordinal = ( (Enum) value ).ordinal();
-				if ( IS_TRACE_ENABLED ) {
-					log.debug( "Binding '" + ordinal + "' to parameter: " + index );
-				}
-				st.setObject( index, Integer.valueOf( ordinal ), sqlType );
-			}
-			else {
-				String enumString = ( (Enum) value ).name();
-				if ( IS_TRACE_ENABLED ) {
-					log.debug( "Binding '" + enumString + "' to parameter: " + index );
-				}
-				st.setObject( index, enumString, sqlType );
-			}
-		}
-	}
-
-	//TODO remove
-	private void guessType(PreparedStatement statement, int index) {
-		//TODO use SQLException wrapper?
-		if ( ! guessed ) {
-			try {
-				sqlType = guessTypeFromMetaData( statement.getConnection().getMetaData() );
-			}
-			catch (SQLException e) {
-				sqlType = guessTypeByParameter( statement, index, e );
-			}
-			catch (HibernateException e) {
-				sqlType = guessTypeByParameter( statement, index, e );
-			}
-			guessed = true;
-		}
-	}
-
-	//TODO remove
-	private int guessTypeFromMetaData(DatabaseMetaData metadata) throws SQLException {
-		ResultSet rs = null;
-		try {
-			String username = metadata.getUserName();
-			int guessedType = Types.NULL;
-			int numResults = 0;
-			boolean nonNullType = false;
-
-			// Try to find the column information up to three times. First with values as is in case
-			// the database ever stores mixed case identifiers, or the supplied identifiers match
-			// perfectly. Then if the metadata is not found, try using lower and upper case
-			// identifiers - but only if the datbaase reports it would use them.
-			rs = metadata.getColumns( catalog, schema, table, column );
-
-			boolean isValid;
-
-			isValid = rs.next();
-
-			if ( ! isValid && metadata.storesLowerCaseIdentifiers() ) {
-				rs.close();
-				rs = metadata.getColumns(
-						catalog == null ? catalog : catalog.toLowerCase(),
-						schema == null ? schema : schema.toLowerCase(),
-						table.toLowerCase(), column.toLowerCase()
-				);
-				isValid = rs.next();
-			}
-
-			if ( ! isValid && metadata.storesUpperCaseIdentifiers() ) {
-				rs.close();
-				rs = metadata.getColumns(
-						catalog == null ? catalog : catalog.toUpperCase(),
-						schema == null ? schema : schema.toUpperCase(),
-						table.toUpperCase(), column.toUpperCase()
-				);
-				isValid = rs.next();
-			}
-
-			// try to find
-			while ( isValid ) {
-				guessedType = rs.getInt( "DATA_TYPE" );
-				if ( rs.wasNull() ) {
-					continue; // TODO throw exception?
-				}
-				else {
-					nonNullType = true;
-				}
-
-				numResults++;
-				if ( username != null ) {
-					String schema = rs.getString( "TABLE_SCHEM" );
-					// if the username matches the schema, there's no better guess available...
-					if ( username.equalsIgnoreCase( schema ) ) return guessedType;
-				}
-				else if ( numResults > 1 ) {
-					// if there's no username and multiple results, there's no point in continuing
-					throw new HibernateException( "Several columns matching in metadata: " + column );
-				}
-				isValid = rs.next();
-			}
-			if ( numResults == 0 ) throw new HibernateException( "Enum type column not found in metadata: " + column );
-			if ( numResults > 1 ) throw new HibernateException( "Several columns matching in metadata: " + column );
-			if ( !nonNullType ) throw new HibernateException( "Column without type in metadata!: " + column );
-			log.trace( "Enum type guessed from metadata: " + guessedType );
-			return guessedType;
-		}
-		finally {
-			try {
-				if ( rs != null ) rs.close();
-			}
-			catch (SQLException e) {
-				//swallow in purpose
-			}
-		}
-	}
-
-	//TODO remove
-	private int guessTypeByParameter(PreparedStatement statement, int index, Exception e) {
-		log.debug(
-				"Unable to guess the column type for enum through conn.getMetadata(): "
-						+ e.getMessage()
-		);
-		try {
-			return statement.getParameterMetaData().getParameterType( index );
-		}
-		catch (SQLException ee) {
-			log.warn( "Unable to guess enum type, default to INTEGER", ee );
-			return Types.INTEGER;
-		}
-	}
-
-	private boolean isOrdinal(int paramType) {
-		switch ( paramType ) {
-			case Types.INTEGER:
-			case Types.NUMERIC:
-			case Types.SMALLINT:
-			case Types.TINYINT:
-			case Types.BIGINT:
-			case Types.DECIMAL: //for Oracle Driver
-			case Types.DOUBLE:  //for Oracle Driver
-			case Types.FLOAT:   //for Oracle Driver
-				return true;
-			case Types.CHAR:
-			case Types.LONGVARCHAR:
-			case Types.VARCHAR:
-				return false;
-			default:
-				throw new HibernateException( "Unable to persist an Enum in a column of SQL Type: " + paramType );
-		}
-	}
-
-	public Object deepCopy(Object value) throws HibernateException {
-		return value;
-	}
-
-	public boolean isMutable() {
-		return false;
-	}
-
-	public Serializable disassemble(Object value) throws HibernateException {
-		return (Serializable) value;
-	}
-
-	public Object assemble(Serializable cached, Object owner) throws HibernateException {
-		return cached;
-	}
-
-	public Object replace(Object original, Object target, Object owner) throws HibernateException {
-		return original;
-	}
-
-	public void setParameterValues(Properties parameters) {
-		String enumClassName = parameters.getProperty( ENUM );
-		try {
-			enumClass = ReflectHelper.classForName( enumClassName, this.getClass() ).asSubclass( Enum.class );
-		}
-		catch (ClassNotFoundException exception) {
-			throw new HibernateException( "Enum class not found", exception );
-		}
-		//this is threadsafe to do it here, setParameterValues() is called sequencially
-		initEnumValue();
-		//nullify unnullified properties yuck!
-		schema = parameters.getProperty( SCHEMA );
-		if ( "".equals( schema ) ) schema = null;
-		catalog = parameters.getProperty( CATALOG );
-		if ( "".equals( catalog ) ) catalog = null;
-		table = parameters.getProperty( TABLE );
-		column = parameters.getProperty( COLUMN );
-		String type = parameters.getProperty( TYPE );
-		if ( type != null ) {
-			sqlType = Integer.decode( type ).intValue();
-			guessed = true;
-		}
-	}
-
-	private void initEnumValue() {
-		Object[] values = enumValues.get( enumClass );
-		if ( values == null ) {
-			try {
-				Method method = null;
-				method = enumClass.getDeclaredMethod( "values", new Class[0] );
-				values = (Object[]) method.invoke( null, new Object[0] );
-				enumValues.put( enumClass, values );
-			}
-			catch (Exception e) {
-				throw new HibernateException( "Error while accessing enum.values(): " + enumClass, e );
-			}
-		}
-	}
-
-	private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
-		//FIXME Hum, I think I break the thread safety here
-		ois.defaultReadObject();
-		initEnumValue();
-	}
-
-	public String objectToSQLString(Object value) {
-		boolean isOrdinal = isOrdinal( sqlType );
-		if ( isOrdinal ) {
-			int ordinal = ( (Enum) value ).ordinal();
-			return Integer.toString( ordinal );
-		}
-		else {
-			return '\'' + ( (Enum) value ).name() + '\'';
-		}
-	}
-
-	public String toXMLString(Object value) {
-		boolean isOrdinal = isOrdinal( sqlType );
-		if ( isOrdinal ) {
-			int ordinal = ( (Enum) value ).ordinal();
-			return Integer.toString( ordinal );
-		}
-		else {
-			return ( (Enum) value ).name();
-		}
-	}
-
-	public Object fromXMLString(String xmlValue) {
-		try {
-			int ordinal = Integer.parseInt( xmlValue );
-			Object[] values = enumValues.get( enumClass );
-			if ( values == null ) throw new AssertionFailure( "enumValues not preprocessed: " + enumClass );
-			if ( ordinal < 0 || ordinal >= values.length ) {
-				throw new IllegalArgumentException( "Unknown ordinal value for enum " + enumClass + ": " + ordinal );
-			}
-			return values[ordinal];
-		}
-		catch(NumberFormatException e) {
-			try {
-				return Enum.valueOf( enumClass, xmlValue );
-			}
-			catch (IllegalArgumentException iae) {
-				throw new IllegalArgumentException( "Unknown name value for enum " + enumClass + ": " + xmlValue, iae );
-			}
-		}
-	}
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/type/EnumType.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/type/EnumType.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/type/EnumType.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/type/EnumType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,369 @@
+//$Id$
+package org.hibernate.type;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.Serializable;
+import java.lang.reflect.Method;
+import java.sql.DatabaseMetaData;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Types;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.hibernate.AssertionFailure;
+import org.hibernate.HibernateException;
+import org.hibernate.usertype.EnhancedUserType;
+import org.hibernate.usertype.ParameterizedType;
+import org.hibernate.util.ReflectHelper;
+import org.hibernate.util.StringHelper;
+
+/**
+ * Enum type mapper
+ * Try and find the appropriate SQL type depending on column metadata
+ *
+ * @author Emmanuel Bernard
+ */
+//TODO implements readobject/writeobject to recalculate the enumclasses
+public class EnumType implements EnhancedUserType, ParameterizedType, Serializable {
+	private static Log log = LogFactory.getLog( EnumType.class );
+	private static final boolean IS_TRACE_ENABLED;
+
+	static {
+		//cache this, because it was a significant performance cost
+		IS_TRACE_ENABLED = LogFactory.getLog( StringHelper.qualifier( Type.class.getName() ) ).isTraceEnabled();
+	}
+
+	public static final String ENUM = "enumClass";
+	public static final String SCHEMA = "schema";
+	public static final String CATALOG = "catalog";
+	public static final String TABLE = "table";
+	public static final String COLUMN = "column";
+	public static final String TYPE = "type";
+
+	private static Map<Class, Object[]> enumValues = new HashMap<Class, Object[]>();
+
+	private Class<? extends Enum> enumClass;
+	private String column;
+	private String table;
+	private String catalog;
+	private String schema;
+	private boolean guessed = false;
+	private int sqlType = Types.INTEGER; //before any guessing
+
+	public int[] sqlTypes() {
+		return new int[]{sqlType};
+	}
+
+	public Class returnedClass() {
+		return enumClass;
+	}
+
+	public boolean equals(Object x, Object y) throws HibernateException {
+		return x == y;
+	}
+
+	public int hashCode(Object x) throws HibernateException {
+		return x == null ? 0 : x.hashCode();
+	}
+
+	public Object nullSafeGet(ResultSet rs, String[] names, Object owner) throws HibernateException, SQLException {
+		Object object = rs.getObject( names[0] );
+		if ( rs.wasNull() ) {
+			if ( IS_TRACE_ENABLED ) {
+				log.debug( "Returning null as column " + names[0] );
+			}
+			return null;
+		}
+		if ( object instanceof Number ) {
+			Object[] values = enumValues.get( enumClass );
+			if ( values == null ) throw new AssertionFailure( "enumValues not preprocessed: " + enumClass );
+			int ordinal = ( (Number) object ).intValue();
+			if ( ordinal < 0 || ordinal >= values.length ) {
+				throw new IllegalArgumentException( "Unknown ordinal value for enum " + enumClass + ": " + ordinal );
+			}
+			if ( IS_TRACE_ENABLED ) {
+				log.debug( "Returning '" + ordinal + "' as column " + names[0] );
+			}
+			return values[ordinal];
+		}
+		else {
+			String name = (String) object;
+			if ( IS_TRACE_ENABLED ) {
+				log.debug( "Returning '" + name + "' as column " + names[0] );
+			}
+			try {
+				return Enum.valueOf( enumClass, name );
+			}
+			catch (IllegalArgumentException iae) {
+				throw new IllegalArgumentException( "Unknown name value for enum " + enumClass + ": " + name, iae );
+			}
+		}
+	}
+
+	public void nullSafeSet(PreparedStatement st, Object value, int index) throws HibernateException, SQLException {
+		//if (!guessed) guessType( st, index );
+		if ( value == null ) {
+			if ( IS_TRACE_ENABLED ) log.debug( "Binding null to parameter: " + index );
+			st.setNull( index, sqlType );
+		}
+		else {
+			boolean isOrdinal = isOrdinal( sqlType );
+			if ( isOrdinal ) {
+				int ordinal = ( (Enum) value ).ordinal();
+				if ( IS_TRACE_ENABLED ) {
+					log.debug( "Binding '" + ordinal + "' to parameter: " + index );
+				}
+				st.setObject( index, Integer.valueOf( ordinal ), sqlType );
+			}
+			else {
+				String enumString = ( (Enum) value ).name();
+				if ( IS_TRACE_ENABLED ) {
+					log.debug( "Binding '" + enumString + "' to parameter: " + index );
+				}
+				st.setObject( index, enumString, sqlType );
+			}
+		}
+	}
+
+	//TODO remove
+	private void guessType(PreparedStatement statement, int index) {
+		//TODO use SQLException wrapper?
+		if ( ! guessed ) {
+			try {
+				sqlType = guessTypeFromMetaData( statement.getConnection().getMetaData() );
+			}
+			catch (SQLException e) {
+				sqlType = guessTypeByParameter( statement, index, e );
+			}
+			catch (HibernateException e) {
+				sqlType = guessTypeByParameter( statement, index, e );
+			}
+			guessed = true;
+		}
+	}
+
+	//TODO remove
+	private int guessTypeFromMetaData(DatabaseMetaData metadata) throws SQLException {
+		ResultSet rs = null;
+		try {
+			String username = metadata.getUserName();
+			int guessedType = Types.NULL;
+			int numResults = 0;
+			boolean nonNullType = false;
+
+			// Try to find the column information up to three times. First with values as is in case
+			// the database ever stores mixed case identifiers, or the supplied identifiers match
+			// perfectly. Then if the metadata is not found, try using lower and upper case
+			// identifiers - but only if the datbaase reports it would use them.
+			rs = metadata.getColumns( catalog, schema, table, column );
+
+			boolean isValid;
+
+			isValid = rs.next();
+
+			if ( ! isValid && metadata.storesLowerCaseIdentifiers() ) {
+				rs.close();
+				rs = metadata.getColumns(
+						catalog == null ? catalog : catalog.toLowerCase(),
+						schema == null ? schema : schema.toLowerCase(),
+						table.toLowerCase(), column.toLowerCase()
+				);
+				isValid = rs.next();
+			}
+
+			if ( ! isValid && metadata.storesUpperCaseIdentifiers() ) {
+				rs.close();
+				rs = metadata.getColumns(
+						catalog == null ? catalog : catalog.toUpperCase(),
+						schema == null ? schema : schema.toUpperCase(),
+						table.toUpperCase(), column.toUpperCase()
+				);
+				isValid = rs.next();
+			}
+
+			// try to find
+			while ( isValid ) {
+				guessedType = rs.getInt( "DATA_TYPE" );
+				if ( rs.wasNull() ) {
+					continue; // TODO throw exception?
+				}
+				else {
+					nonNullType = true;
+				}
+
+				numResults++;
+				if ( username != null ) {
+					String schema = rs.getString( "TABLE_SCHEM" );
+					// if the username matches the schema, there's no better guess available...
+					if ( username.equalsIgnoreCase( schema ) ) return guessedType;
+				}
+				else if ( numResults > 1 ) {
+					// if there's no username and multiple results, there's no point in continuing
+					throw new HibernateException( "Several columns matching in metadata: " + column );
+				}
+				isValid = rs.next();
+			}
+			if ( numResults == 0 ) throw new HibernateException( "Enum type column not found in metadata: " + column );
+			if ( numResults > 1 ) throw new HibernateException( "Several columns matching in metadata: " + column );
+			if ( !nonNullType ) throw new HibernateException( "Column without type in metadata!: " + column );
+			log.trace( "Enum type guessed from metadata: " + guessedType );
+			return guessedType;
+		}
+		finally {
+			try {
+				if ( rs != null ) rs.close();
+			}
+			catch (SQLException e) {
+				//swallow in purpose
+			}
+		}
+	}
+
+	//TODO remove
+	private int guessTypeByParameter(PreparedStatement statement, int index, Exception e) {
+		log.debug(
+				"Unable to guess the column type for enum through conn.getMetadata(): "
+						+ e.getMessage()
+		);
+		try {
+			return statement.getParameterMetaData().getParameterType( index );
+		}
+		catch (SQLException ee) {
+			log.warn( "Unable to guess enum type, default to INTEGER", ee );
+			return Types.INTEGER;
+		}
+	}
+
+	private boolean isOrdinal(int paramType) {
+		switch ( paramType ) {
+			case Types.INTEGER:
+			case Types.NUMERIC:
+			case Types.SMALLINT:
+			case Types.TINYINT:
+			case Types.BIGINT:
+			case Types.DECIMAL: //for Oracle Driver
+			case Types.DOUBLE:  //for Oracle Driver
+			case Types.FLOAT:   //for Oracle Driver
+				return true;
+			case Types.CHAR:
+			case Types.LONGVARCHAR:
+			case Types.VARCHAR:
+				return false;
+			default:
+				throw new HibernateException( "Unable to persist an Enum in a column of SQL Type: " + paramType );
+		}
+	}
+
+	public Object deepCopy(Object value) throws HibernateException {
+		return value;
+	}
+
+	public boolean isMutable() {
+		return false;
+	}
+
+	public Serializable disassemble(Object value) throws HibernateException {
+		return (Serializable) value;
+	}
+
+	public Object assemble(Serializable cached, Object owner) throws HibernateException {
+		return cached;
+	}
+
+	public Object replace(Object original, Object target, Object owner) throws HibernateException {
+		return original;
+	}
+
+	public void setParameterValues(Properties parameters) {
+		String enumClassName = parameters.getProperty( ENUM );
+		try {
+			enumClass = ReflectHelper.classForName( enumClassName, this.getClass() ).asSubclass( Enum.class );
+		}
+		catch (ClassNotFoundException exception) {
+			throw new HibernateException( "Enum class not found", exception );
+		}
+		//this is threadsafe to do it here, setParameterValues() is called sequencially
+		initEnumValue();
+		//nullify unnullified properties yuck!
+		schema = parameters.getProperty( SCHEMA );
+		if ( "".equals( schema ) ) schema = null;
+		catalog = parameters.getProperty( CATALOG );
+		if ( "".equals( catalog ) ) catalog = null;
+		table = parameters.getProperty( TABLE );
+		column = parameters.getProperty( COLUMN );
+		String type = parameters.getProperty( TYPE );
+		if ( type != null ) {
+			sqlType = Integer.decode( type ).intValue();
+			guessed = true;
+		}
+	}
+
+	private void initEnumValue() {
+		Object[] values = enumValues.get( enumClass );
+		if ( values == null ) {
+			try {
+				Method method = null;
+				method = enumClass.getDeclaredMethod( "values", new Class[0] );
+				values = (Object[]) method.invoke( null, new Object[0] );
+				enumValues.put( enumClass, values );
+			}
+			catch (Exception e) {
+				throw new HibernateException( "Error while accessing enum.values(): " + enumClass, e );
+			}
+		}
+	}
+
+	private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
+		//FIXME Hum, I think I break the thread safety here
+		ois.defaultReadObject();
+		initEnumValue();
+	}
+
+	public String objectToSQLString(Object value) {
+		boolean isOrdinal = isOrdinal( sqlType );
+		if ( isOrdinal ) {
+			int ordinal = ( (Enum) value ).ordinal();
+			return Integer.toString( ordinal );
+		}
+		else {
+			return '\'' + ( (Enum) value ).name() + '\'';
+		}
+	}
+
+	public String toXMLString(Object value) {
+		boolean isOrdinal = isOrdinal( sqlType );
+		if ( isOrdinal ) {
+			int ordinal = ( (Enum) value ).ordinal();
+			return Integer.toString( ordinal );
+		}
+		else {
+			return ( (Enum) value ).name();
+		}
+	}
+
+	public Object fromXMLString(String xmlValue) {
+		try {
+			int ordinal = Integer.parseInt( xmlValue );
+			Object[] values = enumValues.get( enumClass );
+			if ( values == null ) throw new AssertionFailure( "enumValues not preprocessed: " + enumClass );
+			if ( ordinal < 0 || ordinal >= values.length ) {
+				throw new IllegalArgumentException( "Unknown ordinal value for enum " + enumClass + ": " + ordinal );
+			}
+			return values[ordinal];
+		}
+		catch(NumberFormatException e) {
+			try {
+				return Enum.valueOf( enumClass, xmlValue );
+			}
+			catch (IllegalArgumentException iae) {
+				throw new IllegalArgumentException( "Unknown name value for enum " + enumClass + ": " + xmlValue, iae );
+			}
+		}
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/type/PrimitiveByteArrayBlobType.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/type/PrimitiveByteArrayBlobType.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/type/PrimitiveByteArrayBlobType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,21 +0,0 @@
-//$Id$
-package org.hibernate.type;
-
-/**
- * Map a byte[] to a Blob
- *
- * @author Emmanuel Bernard
- */
-public class PrimitiveByteArrayBlobType extends ByteArrayBlobType {
-	public Class getReturnedClass() {
-		return byte[].class;
-	}
-
-	protected Object wrap(byte[] bytes) {
-		return bytes;
-	}
-
-	protected byte[] unWrap(Object bytes) {
-		return (byte[]) bytes;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/type/PrimitiveByteArrayBlobType.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/type/PrimitiveByteArrayBlobType.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/type/PrimitiveByteArrayBlobType.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/type/PrimitiveByteArrayBlobType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,21 @@
+//$Id$
+package org.hibernate.type;
+
+/**
+ * Map a byte[] to a Blob
+ *
+ * @author Emmanuel Bernard
+ */
+public class PrimitiveByteArrayBlobType extends ByteArrayBlobType {
+	public Class getReturnedClass() {
+		return byte[].class;
+	}
+
+	protected Object wrap(byte[] bytes) {
+		return bytes;
+	}
+
+	protected byte[] unWrap(Object bytes) {
+		return (byte[]) bytes;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/type/PrimitiveCharacterArrayClobType.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/type/PrimitiveCharacterArrayClobType.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/type/PrimitiveCharacterArrayClobType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,14 +0,0 @@
-//$Id$
-package org.hibernate.type;
-
-
-/**
- * Map a char[] to a Clob
- *
- * @author Emmanuel Bernard
- */
-public class PrimitiveCharacterArrayClobType extends CharacterArrayClobType {
-	public Class returnedClass() {
-		return char[].class;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/type/PrimitiveCharacterArrayClobType.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/type/PrimitiveCharacterArrayClobType.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/type/PrimitiveCharacterArrayClobType.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/type/PrimitiveCharacterArrayClobType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,14 @@
+//$Id$
+package org.hibernate.type;
+
+
+/**
+ * Map a char[] to a Clob
+ *
+ * @author Emmanuel Bernard
+ */
+public class PrimitiveCharacterArrayClobType extends CharacterArrayClobType {
+	public Class returnedClass() {
+		return char[].class;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/type/SerializableToBlobType.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/type/SerializableToBlobType.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/type/SerializableToBlobType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,135 +0,0 @@
-//$Id$
-package org.hibernate.type;
-
-import java.io.ByteArrayInputStream;
-import java.io.Serializable;
-import java.sql.Blob;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Types;
-import java.util.Map;
-import java.util.Properties;
-
-import org.dom4j.Node;
-import org.hibernate.EntityMode;
-import org.hibernate.HibernateException;
-import org.hibernate.MappingException;
-import org.hibernate.engine.Mapping;
-import org.hibernate.engine.SessionFactoryImplementor;
-import org.hibernate.engine.SessionImplementor;
-import org.hibernate.lob.BlobImpl;
-import org.hibernate.usertype.ParameterizedType;
-import org.hibernate.util.ReflectHelper;
-import org.hibernate.util.SerializationHelper;
-
-/**
- * @author Emmanuel Bernard
- */
-public class SerializableToBlobType extends AbstractLobType implements ParameterizedType {
-	/**
-	 * class name of the serialisable class
-	 */
-	public static final String CLASS_NAME = "classname";
-	private Class serializableClass;
-	private SerializableType type;
-
-	public int[] sqlTypes(Mapping mapping) throws MappingException {
-		return new int[]{Types.BLOB};
-	}
-
-	public Class getReturnedClass() {
-		return serializableClass;
-	}
-
-	@Override
-	public boolean isEqual(Object x, Object y, EntityMode entityMode, SessionFactoryImplementor factory) {
-		return type.isEqual( x, y );
-	}
-
-
-	@Override
-	public int getHashCode(Object x, EntityMode entityMode, SessionFactoryImplementor session) {
-		return type.getHashCode( x, null );
-	}
-
-	public Object get(ResultSet rs, String name) throws SQLException {
-		Blob blob = rs.getBlob( name );
-		if ( rs.wasNull() ) return null;
-		int length = (int) blob.length();
-		byte[] primaryResult = blob.getBytes( 1, length );
-		return fromBytes( primaryResult );
-	}
-
-	private static byte[] toBytes(Object object) throws SerializationException {
-		return SerializationHelper.serialize( (Serializable) object );
-	}
-
-	private static Object fromBytes(byte[] bytes) throws SerializationException {
-		return SerializationHelper.deserialize( bytes );
-	}
-
-	public void set(PreparedStatement st, Object value, int index, SessionImplementor session) throws SQLException {
-		if ( value != null ) {
-			byte[] toSet;
-			toSet = toBytes( value );
-			if ( session.getFactory().getDialect().useInputStreamToInsertBlob() ) {
-				st.setBinaryStream( index, new ByteArrayInputStream( toSet ), toSet.length );
-			}
-			else {
-				st.setBlob( index, new BlobImpl( toSet ) );
-			}
-		}
-		else {
-			st.setNull( index, sqlTypes( null )[0] );
-		}
-	}
-
-	public void setToXMLNode(Node node, Object value, SessionFactoryImplementor factory) throws HibernateException {
-		type.setToXMLNode( node, value, factory );
-	}
-
-	public String toLoggableString(Object value, SessionFactoryImplementor factory) throws HibernateException {
-		return type.toLoggableString( value, factory );
-	}
-
-	public Object fromXMLNode(Node xml, Mapping factory) throws HibernateException {
-		return type.fromXMLNode( xml, factory );
-	}
-
-	public Object deepCopy(Object value, EntityMode entityMode, SessionFactoryImplementor factory)
-			throws HibernateException {
-		return type.deepCopy( value, null, null );
-	}
-
-	public boolean isMutable() {
-		return type.isMutable();
-	}
-
-	public Object replace(Object original, Object target, SessionImplementor session, Object owner, Map copyCache)
-			throws HibernateException {
-		return type.replace( original, target, session, owner, copyCache );
-	}
-
-	public boolean[] toColumnNullness(Object value, Mapping mapping) {
-		return type.toColumnNullness( value, mapping );
-	}
-
-	public void setParameterValues(Properties parameters) {
-		if ( parameters != null ) {
-			String className = parameters.getProperty( CLASS_NAME );
-			if ( className == null ) {
-				throw new MappingException(
-						"No class name defined for type: " + SerializableToBlobType.class.getName()
-				);
-			}
-			try {
-				serializableClass = ReflectHelper.classForName( className );
-			}
-			catch (ClassNotFoundException e) {
-				throw new MappingException( "Unable to load class from " + CLASS_NAME + " parameter", e );
-			}
-		}
-		type = new SerializableType( serializableClass );
-	}
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/type/SerializableToBlobType.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/type/SerializableToBlobType.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/type/SerializableToBlobType.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/type/SerializableToBlobType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,135 @@
+//$Id$
+package org.hibernate.type;
+
+import java.io.ByteArrayInputStream;
+import java.io.Serializable;
+import java.sql.Blob;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Types;
+import java.util.Map;
+import java.util.Properties;
+
+import org.dom4j.Node;
+import org.hibernate.EntityMode;
+import org.hibernate.HibernateException;
+import org.hibernate.MappingException;
+import org.hibernate.engine.Mapping;
+import org.hibernate.engine.SessionFactoryImplementor;
+import org.hibernate.engine.SessionImplementor;
+import org.hibernate.lob.BlobImpl;
+import org.hibernate.usertype.ParameterizedType;
+import org.hibernate.util.ReflectHelper;
+import org.hibernate.util.SerializationHelper;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class SerializableToBlobType extends AbstractLobType implements ParameterizedType {
+	/**
+	 * class name of the serialisable class
+	 */
+	public static final String CLASS_NAME = "classname";
+	private Class serializableClass;
+	private SerializableType type;
+
+	public int[] sqlTypes(Mapping mapping) throws MappingException {
+		return new int[]{Types.BLOB};
+	}
+
+	public Class getReturnedClass() {
+		return serializableClass;
+	}
+
+	@Override
+	public boolean isEqual(Object x, Object y, EntityMode entityMode, SessionFactoryImplementor factory) {
+		return type.isEqual( x, y );
+	}
+
+
+	@Override
+	public int getHashCode(Object x, EntityMode entityMode, SessionFactoryImplementor session) {
+		return type.getHashCode( x, null );
+	}
+
+	public Object get(ResultSet rs, String name) throws SQLException {
+		Blob blob = rs.getBlob( name );
+		if ( rs.wasNull() ) return null;
+		int length = (int) blob.length();
+		byte[] primaryResult = blob.getBytes( 1, length );
+		return fromBytes( primaryResult );
+	}
+
+	private static byte[] toBytes(Object object) throws SerializationException {
+		return SerializationHelper.serialize( (Serializable) object );
+	}
+
+	private static Object fromBytes(byte[] bytes) throws SerializationException {
+		return SerializationHelper.deserialize( bytes );
+	}
+
+	public void set(PreparedStatement st, Object value, int index, SessionImplementor session) throws SQLException {
+		if ( value != null ) {
+			byte[] toSet;
+			toSet = toBytes( value );
+			if ( session.getFactory().getDialect().useInputStreamToInsertBlob() ) {
+				st.setBinaryStream( index, new ByteArrayInputStream( toSet ), toSet.length );
+			}
+			else {
+				st.setBlob( index, new BlobImpl( toSet ) );
+			}
+		}
+		else {
+			st.setNull( index, sqlTypes( null )[0] );
+		}
+	}
+
+	public void setToXMLNode(Node node, Object value, SessionFactoryImplementor factory) throws HibernateException {
+		type.setToXMLNode( node, value, factory );
+	}
+
+	public String toLoggableString(Object value, SessionFactoryImplementor factory) throws HibernateException {
+		return type.toLoggableString( value, factory );
+	}
+
+	public Object fromXMLNode(Node xml, Mapping factory) throws HibernateException {
+		return type.fromXMLNode( xml, factory );
+	}
+
+	public Object deepCopy(Object value, EntityMode entityMode, SessionFactoryImplementor factory)
+			throws HibernateException {
+		return type.deepCopy( value, null, null );
+	}
+
+	public boolean isMutable() {
+		return type.isMutable();
+	}
+
+	public Object replace(Object original, Object target, SessionImplementor session, Object owner, Map copyCache)
+			throws HibernateException {
+		return type.replace( original, target, session, owner, copyCache );
+	}
+
+	public boolean[] toColumnNullness(Object value, Mapping mapping) {
+		return type.toColumnNullness( value, mapping );
+	}
+
+	public void setParameterValues(Properties parameters) {
+		if ( parameters != null ) {
+			String className = parameters.getProperty( CLASS_NAME );
+			if ( className == null ) {
+				throw new MappingException(
+						"No class name defined for type: " + SerializableToBlobType.class.getName()
+				);
+			}
+			try {
+				serializableClass = ReflectHelper.classForName( className );
+			}
+			catch (ClassNotFoundException e) {
+				throw new MappingException( "Unable to load class from " + CLASS_NAME + " parameter", e );
+			}
+		}
+		type = new SerializableType( serializableClass );
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/java/org/hibernate/type/StringClobType.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/type/StringClobType.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/type/StringClobType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,85 +0,0 @@
-//$Id$
-package org.hibernate.type;
-
-import java.io.IOException;
-import java.io.Reader;
-import java.io.Serializable;
-import java.io.StringReader;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Types;
-
-import org.hibernate.HibernateException;
-import org.hibernate.usertype.UserType;
-
-/**
- * Map a String to a Clob
- *
- * @author Emmanuel Bernard
- */
-public class StringClobType implements UserType, Serializable {
-	public int[] sqlTypes() {
-		return new int[]{Types.CLOB};
-	}
-
-	public Class returnedClass() {
-		return String.class;
-	}
-
-	public boolean equals(Object x, Object y) throws HibernateException {
-		return ( x == y ) || ( x != null && x.equals( y ) );
-	}
-
-	public int hashCode(Object x) throws HibernateException {
-		return x.hashCode();
-	}
-
-	public Object nullSafeGet(ResultSet rs, String[] names, Object owner) throws HibernateException, SQLException {
-		Reader reader = rs.getCharacterStream( names[0] );
-		if ( reader == null ) return null;
-		StringBuilder result = new StringBuilder( 4096 );
-		try {
-			char[] charbuf = new char[4096];
-			for ( int i = reader.read( charbuf ); i > 0 ; i = reader.read( charbuf ) ) {
-				result.append( charbuf, 0, i );
-			}
-		}
-		catch (IOException e) {
-			throw new SQLException( e.getMessage() );
-		}
-		return result.toString();
-	}
-
-	public void nullSafeSet(PreparedStatement st, Object value, int index) throws HibernateException, SQLException {
-		if ( value != null ) {
-			String string = (String) value;
-			StringReader reader = new StringReader( string );
-			st.setCharacterStream( index, reader, string.length() );
-		}
-		else {
-			st.setNull( index, sqlTypes()[0] );
-		}
-	}
-
-	public Object deepCopy(Object value) throws HibernateException {
-		//returning value should be OK since String are immutable
-		return value;
-	}
-
-	public boolean isMutable() {
-		return false;
-	}
-
-	public Serializable disassemble(Object value) throws HibernateException {
-		return (Serializable) value;
-	}
-
-	public Object assemble(Serializable cached, Object owner) throws HibernateException {
-		return cached;
-	}
-
-	public Object replace(Object original, Object target, Object owner) throws HibernateException {
-		return original;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/java/org/hibernate/type/StringClobType.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/java/org/hibernate/type/StringClobType.java)
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/type/StringClobType.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/type/StringClobType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,85 @@
+//$Id$
+package org.hibernate.type;
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Serializable;
+import java.io.StringReader;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Types;
+
+import org.hibernate.HibernateException;
+import org.hibernate.usertype.UserType;
+
+/**
+ * Map a String to a Clob
+ *
+ * @author Emmanuel Bernard
+ */
+public class StringClobType implements UserType, Serializable {
+	public int[] sqlTypes() {
+		return new int[]{Types.CLOB};
+	}
+
+	public Class returnedClass() {
+		return String.class;
+	}
+
+	public boolean equals(Object x, Object y) throws HibernateException {
+		return ( x == y ) || ( x != null && x.equals( y ) );
+	}
+
+	public int hashCode(Object x) throws HibernateException {
+		return x.hashCode();
+	}
+
+	public Object nullSafeGet(ResultSet rs, String[] names, Object owner) throws HibernateException, SQLException {
+		Reader reader = rs.getCharacterStream( names[0] );
+		if ( reader == null ) return null;
+		StringBuilder result = new StringBuilder( 4096 );
+		try {
+			char[] charbuf = new char[4096];
+			for ( int i = reader.read( charbuf ); i > 0 ; i = reader.read( charbuf ) ) {
+				result.append( charbuf, 0, i );
+			}
+		}
+		catch (IOException e) {
+			throw new SQLException( e.getMessage() );
+		}
+		return result.toString();
+	}
+
+	public void nullSafeSet(PreparedStatement st, Object value, int index) throws HibernateException, SQLException {
+		if ( value != null ) {
+			String string = (String) value;
+			StringReader reader = new StringReader( string );
+			st.setCharacterStream( index, reader, string.length() );
+		}
+		else {
+			st.setNull( index, sqlTypes()[0] );
+		}
+	}
+
+	public Object deepCopy(Object value) throws HibernateException {
+		//returning value should be OK since String are immutable
+		return value;
+	}
+
+	public boolean isMutable() {
+		return false;
+	}
+
+	public Serializable disassemble(Object value) throws HibernateException {
+		return (Serializable) value;
+	}
+
+	public Object assemble(Serializable cached, Object owner) throws HibernateException {
+		return cached;
+	}
+
+	public Object replace(Object original, Object target, Object owner) throws HibernateException {
+		return original;
+	}
+}

Copied: trunk/HibernateExt/annotations/src/test (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test)

Deleted: trunk/HibernateExt/annotations/src/test/ehcache.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/ehcache.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/ehcache.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,80 +0,0 @@
-<ehcache>
-    <!-- Sets the path to the directory where cache .data files are created.
-         If the path is a Java System Property it is replaced by
-         its value in the running VM.
-
-         The following properties are translated:
-         user.home - User's home directory
-         user.dir - User's current working directory
-         java.io.tmpdir - Default temp file path -->
-
-    <diskStore path="java.io.tmpdir"/>
-    <!--Default Cache configuration. These will applied to caches programmatically created through
-        the CacheManager.
-        The following attributes are required for defaultCache:
-        maxInMemory       - Sets the maximum number of objects that will be created in memory
-        eternal           - Sets whether elements are eternal. If eternal,  timeouts are ignored and the element
-                            is never expired.
-        timeToIdleSeconds - Sets the time to idle for an element before it expires. Is only used
-                            if the element is not eternal. Idle time is now - last accessed time
-        timeToLiveSeconds - Sets the time to live for an element before it expires. Is only used
-                            if the element is not eternal. TTL is now - creation time
-        overflowToDisk    - Sets whether elements can overflow to disk when the in-memory cache
-                            has reached the maxInMemory limit.
-
-        -->
-
-    <defaultCache
-        maxElementsInMemory="10000"
-        eternal="false"
-        timeToIdleSeconds="120"
-        timeToLiveSeconds="120"
-        overflowToDisk="true"
-        />
-    <!--Predefined caches.  Add your cache configuration settings here.
-        If you do not have a configuration for your cache a WARNING will be issued when the
-        CacheManager starts
-        The following attributes are required for defaultCache:
-        name              - Sets the name of the cache. This is used to identify the cache. It must be unique.
-        maxInMemory       - Sets the maximum number of objects that will be created in memory
-        eternal           - Sets whether elements are eternal. If eternal,  timeouts are ignored and the element
-                            is never expired.
-        timeToIdleSeconds - Sets the time to idle for an element before it expires. Is only used
-                            if the element is not eternal. Idle time is now - last accessed time
-        timeToLiveSeconds - Sets the time to live for an element before it expires. Is only used
-                            if the element is not eternal. TTL is now - creation time
-        overflowToDisk    - Sets whether elements can overflow to disk when the in-memory cache
-                            has reached the maxInMemory limit.
-        -->
-
-    <!-- Sample cache named sampleCache1
-        This cache contains a maximum in memory of 10000 elements, and will expire
-        an element if it is idle for more than 5 minutes and lives for more than
-        10 minutes.
-
-        If there are more than 10000 elements it will overflow to the
-        disk cache, which in this configuration will go to wherever java.io.tmp is
-        defined on your system. On a standard Linux system this will be /tmp"
-        -->
-
-    <cache name="sampleCache1"
-        maxElementsInMemory="10000"
-        eternal="false"
-        timeToIdleSeconds="300"
-        timeToLiveSeconds="600"
-        overflowToDisk="true"
-        />
-
-    <!-- Sample cache named sampleCache2
-        This cache contains 1000 elements. Elements will always be held in memory.
-        They are not expired. -->
-    <cache name="sampleCache2"
-        maxElementsInMemory="1000"
-        eternal="true"
-        timeToIdleSeconds="0"
-        timeToLiveSeconds="0"
-        overflowToDisk="false"
-        />
-
-    <!-- Place configuration for your caches following -->
-</ehcache>
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/test/ehcache.xml (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/ehcache.xml)
===================================================================
--- trunk/HibernateExt/annotations/src/test/ehcache.xml	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/ehcache.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,80 @@
+<ehcache>
+    <!-- Sets the path to the directory where cache .data files are created.
+         If the path is a Java System Property it is replaced by
+         its value in the running VM.
+
+         The following properties are translated:
+         user.home - User's home directory
+         user.dir - User's current working directory
+         java.io.tmpdir - Default temp file path -->
+
+    <diskStore path="java.io.tmpdir"/>
+    <!--Default Cache configuration. These will applied to caches programmatically created through
+        the CacheManager.
+        The following attributes are required for defaultCache:
+        maxInMemory       - Sets the maximum number of objects that will be created in memory
+        eternal           - Sets whether elements are eternal. If eternal,  timeouts are ignored and the element
+                            is never expired.
+        timeToIdleSeconds - Sets the time to idle for an element before it expires. Is only used
+                            if the element is not eternal. Idle time is now - last accessed time
+        timeToLiveSeconds - Sets the time to live for an element before it expires. Is only used
+                            if the element is not eternal. TTL is now - creation time
+        overflowToDisk    - Sets whether elements can overflow to disk when the in-memory cache
+                            has reached the maxInMemory limit.
+
+        -->
+
+    <defaultCache
+        maxElementsInMemory="10000"
+        eternal="false"
+        timeToIdleSeconds="120"
+        timeToLiveSeconds="120"
+        overflowToDisk="true"
+        />
+    <!--Predefined caches.  Add your cache configuration settings here.
+        If you do not have a configuration for your cache a WARNING will be issued when the
+        CacheManager starts
+        The following attributes are required for defaultCache:
+        name              - Sets the name of the cache. This is used to identify the cache. It must be unique.
+        maxInMemory       - Sets the maximum number of objects that will be created in memory
+        eternal           - Sets whether elements are eternal. If eternal,  timeouts are ignored and the element
+                            is never expired.
+        timeToIdleSeconds - Sets the time to idle for an element before it expires. Is only used
+                            if the element is not eternal. Idle time is now - last accessed time
+        timeToLiveSeconds - Sets the time to live for an element before it expires. Is only used
+                            if the element is not eternal. TTL is now - creation time
+        overflowToDisk    - Sets whether elements can overflow to disk when the in-memory cache
+                            has reached the maxInMemory limit.
+        -->
+
+    <!-- Sample cache named sampleCache1
+        This cache contains a maximum in memory of 10000 elements, and will expire
+        an element if it is idle for more than 5 minutes and lives for more than
+        10 minutes.
+
+        If there are more than 10000 elements it will overflow to the
+        disk cache, which in this configuration will go to wherever java.io.tmp is
+        defined on your system. On a standard Linux system this will be /tmp"
+        -->
+
+    <cache name="sampleCache1"
+        maxElementsInMemory="10000"
+        eternal="false"
+        timeToIdleSeconds="300"
+        timeToLiveSeconds="600"
+        overflowToDisk="true"
+        />
+
+    <!-- Sample cache named sampleCache2
+        This cache contains 1000 elements. Elements will always be held in memory.
+        They are not expired. -->
+    <cache name="sampleCache2"
+        maxElementsInMemory="1000"
+        eternal="true"
+        timeToIdleSeconds="0"
+        timeToLiveSeconds="0"
+        overflowToDisk="false"
+        />
+
+    <!-- Place configuration for your caches following -->
+</ehcache>
\ No newline at end of file

Deleted: trunk/HibernateExt/annotations/src/test/hibernate.properties
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/hibernate.properties	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/hibernate.properties	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,472 +0,0 @@
-######################
-### Query Language ###
-######################
-
-## define query language constants / function names
-
-hibernate.query.substitutions true 1, false 0, yes 'Y', no 'N'
-
-
-## select the classic query parser
-
-#hibernate.query.factory_class org.hibernate.hql.classic.ClassicQueryTranslatorFactory
-
-hibernate.format_sql true
-
-
-
-#################
-### Platforms ###
-#################
-
-## JNDI Datasource
-
-#hibernate.connection.datasource jdbc/test
-#hibernate.connection.username db2
-#hibernate.connection.password db2
-
-
-## HypersonicSQL
-
-hibernate.dialect org.hibernate.dialect.HSQLDialect
-hibernate.connection.driver_class org.hsqldb.jdbcDriver
-hibernate.connection.username sa
-hibernate.connection.password
-hibernate.connection.url jdbc:hsqldb:hsql://localhost
-hibernate.connection.url jdbc:hsqldb:test
-hibernate.connection.url jdbc:hsqldb:.
-
-
-## MySQL
-
-#hibernate.dialect org.hibernate.dialect.MySQLDialect
-#hibernate.dialect org.hibernate.dialect.MySQLInnoDBDialect
-#hibernate.dialect org.hibernate.dialect.MySQLMyISAMDialect
-#hibernate.connection.driver_class com.mysql.jdbc.Driver
-#hibernate.connection.url jdbc:mysql:///test
-#hibernate.connection.username emmanuel
-#hibernate.connection.password hibernate
-
-
-## Oracle
-
-#hibernate.dialect org.hibernate.dialect.OracleDialect
-#hibernate.dialect org.hibernate.dialect.Oracle9Dialect
-#hibernate.connection.driver_class oracle.jdbc.driver.OracleDriver
-#hibernate.connection.username ora
-#hibernate.connection.password ora
-#hibernate.connection.url jdbc:oracle:thin:@localhost:1521:test
-
-
-## PostgreSQL
-
-#hibernate.dialect org.hibernate.dialect.PostgreSQLDialect
-#hibernate.connection.driver_class org.postgresql.Driver
-#hibernate.connection.url jdbc:postgresql:annotations
-#hibernate.connection.username postgres
-#hibernate.connection.password hibernate
-#hibernate.query.substitutions yes 'Y', no 'N'
-
-
-## DB2
-
-#hibernate.dialect org.hibernate.dialect.DB2Dialect
-#hibernate.connection.driver_class COM.ibm.db2.jdbc.app.DB2Driver
-#hibernate.connection.url jdbc:db2:test
-#hibernate.connection.username db2
-#hibernate.connection.password db2
-
-## TimesTen (not supported yet)
-
-#hibernate.dialect org.hibernate.dialect.TimesTenDialect
-#hibernate.connection.driver_class com.timesten.jdbc.TimesTenDriver
-#hibernate.connection.url jdbc:timesten:direct:test
-#hibernate.connection.username
-#hibernate.connection.password 
-
-## DB2/400
-
-#hibernate.dialect org.hibernate.dialect.DB2400Dialect
-#hibernate.connection.username user
-#hibernate.connection.password password
-
-## Native driver
-#hibernate.connection.driver_class COM.ibm.db2.jdbc.app.DB2Driver
-#hibernate.connection.url jdbc:db2://systemname
-
-## Toolbox driver
-#hibernate.connection.driver_class com.ibm.as400.access.AS400JDBCDriver
-#hibernate.connection.url jdbc:as400://systemname
-
-
-## Derby (Not supported!)
-
-#hibernate.dialect org.hibernate.dialect.DerbyDialect
-#hibernate.connection.driver_class org.apache.derby.jdbc.EmbeddedDriver
-#hibernate.connection.username
-#hibernate.connection.password
-#hibernate.connection.url jdbc:derby:/test;create=true
-
-
-## Sybase
-
-#hibernate.dialect org.hibernate.dialect.SybaseDialect
-#hibernate.connection.driver_class com.sybase.jdbc2.jdbc.SybDriver
-#hibernate.connection.username sa
-#hibernate.connection.password sasasa
-#hibernate.connection.url jdbc:sybase:Tds:co3061835-a:5000/tempdb
-
-
-## Mckoi SQL
-
-#hibernate.dialect org.hibernate.dialect.MckoiDialect
-#hibernate.connection.driver_class com.mckoi.JDBCDriver
-#hibernate.connection.url jdbc:mckoi:///
-#hibernate.connection.url jdbc:mckoi:local://C:/mckoi1.00/db.conf
-#hibernate.connection.username admin
-#hibernate.connection.password nimda
-
-
-## SAP DB
-
-#hibernate.dialect org.hibernate.dialect.SAPDBDialect
-#hibernate.connection.driver_class com.sap.dbtech.jdbc.DriverSapDB
-#hibernate.connection.url jdbc:sapdb://localhost/TST
-#hibernate.connection.username TEST
-#hibernate.connection.password TEST
-#hibernate.query.substitutions yes 'Y', no 'N'
-
-
-## MS SQL Server
-
-#hibernate.dialect org.hibernate.dialect.SQLServerDialect
-#hibernate.connection.username sa
-#hibernate.connection.password sa
-
-## JSQL Driver
-#hibernate.connection.driver_class com.jnetdirect.jsql.JSQLDriver
-#hibernate.connection.url jdbc:JSQLConnect://1E1/test
-
-## JTURBO Driver
-#hibernate.connection.driver_class com.newatlanta.jturbo.driver.Driver
-#hibernate.connection.url jdbc:JTurbo://1E1:1433/test
-
-## WebLogic Driver
-#hibernate.connection.driver_class weblogic.jdbc.mssqlserver4.Driver
-#hibernate.connection.url jdbc:weblogic:mssqlserver4:1E1:1433
-
-## Microsoft Driver (not recommended!)
-#hibernate.connection.driver_class com.microsoft.jdbc.sqlserver.SQLServerDriver
-#hibernate.connection.url jdbc:microsoft:sqlserver://1E1;DatabaseName=test;SelectMethod=cursor
-
-## jTDS (since version 0.9)
-#hibernate.connection.driver_class net.sourceforge.jtds.jdbc.Driver
-#hibernate.connection.url jdbc:jtds:sqlserver://1E1/test
-
-## Interbase
-
-#hibernate.dialect org.hibernate.dialect.InterbaseDialect
-#hibernate.connection.username sysdba
-#hibernate.connection.password masterkey
-
-## DO NOT specify hibernate.connection.sqlDialect
-
-## InterClient
-
-#hibernate.connection.driver_class interbase.interclient.Driver
-#hibernate.connection.url jdbc:interbase://localhost:3060/C:/firebird/test.gdb
-
-## Pure Java
-
-#hibernate.connection.driver_class org.firebirdsql.jdbc.FBDriver
-#hibernate.connection.url jdbc:firebirdsql:localhost/3050:/firebird/test.gdb
-
-
-## Pointbase
-
-#hibernate.dialect org.hibernate.dialect.PointbaseDialect
-#hibernate.connection.driver_class com.pointbase.jdbc.jdbcUniversalDriver
-#hibernate.connection.url jdbc:pointbase:embedded:sample
-#hibernate.connection.username PBPUBLIC
-#hibernate.connection.password PBPUBLIC
-
-
-
-#################################
-### Hibernate Connection Pool ###
-#################################
-
-hibernate.connection.pool_size 1
-
-
-
-###########################
-### C3P0 Connection Pool###
-###########################
-
-#hibernate.c3p0.max_size 2
-#hibernate.c3p0.min_size 2
-#hibernate.c3p0.timeout 5000
-#hibernate.c3p0.max_statements 100
-#hibernate.c3p0.idle_test_period 3000
-#hibernate.c3p0.acquire_increment 2
-#hibernate.c3p0.validate false
-
-
-
-##############################
-### Proxool Connection Pool###
-##############################
-
-## Properties for external configuration of Proxool
-
-hibernate.proxool.pool_alias pool1
-
-## Only need one of the following
-
-#hibernate.proxool.existing_pool true
-#hibernate.proxool.xml proxool.xml
-#hibernate.proxool.properties proxool.properties
-
-
-
-#################################
-### Plugin ConnectionProvider ###
-#################################
-
-## use a custom ConnectionProvider (if not set, Hibernate will choose a built-in ConnectionProvider using hueristics)
-
-#hibernate.connection.provider_class org.hibernate.connection.DriverManagerConnectionProvider
-#hibernate.connection.provider_class org.hibernate.connection.DatasourceConnectionProvider
-#hibernate.connection.provider_class org.hibernate.connection.C3P0ConnectionProvider
-#hibernate.connection.provider_class org.hibernate.connection.DBCPConnectionProvider
-#hibernate.connection.provider_class org.hibernate.connection.ProxoolConnectionProvider
-
-
-
-#######################
-### Transaction API ###
-#######################
-
-## Enable automatic flush during the JTA beforeCompletion() callback
-## (This setting is relevant with or without the Transaction API)
-
-#hibernate.transaction.flush_before_completion
-
-
-## Enable automatic session close at the end of transaction
-## (This setting is relevant with or without the Transaction API)
-
-#hibernate.transaction.auto_close_session
-
-
-## the Transaction API abstracts application code from the underlying JTA or JDBC transactions
-
-#hibernate.transaction.factory_class org.hibernate.transaction.JTATransactionFactory
-#hibernate.transaction.factory_class org.hibernate.transaction.JDBCTransactionFactory
-
-
-## to use JTATransactionFactory, Hibernate must be able to locate the UserTransaction in JNDI
-## default is java:comp/UserTransaction
-## you do NOT need this setting if you specify hibernate.transaction.manager_lookup_class
-
-#jta.UserTransaction jta/usertransaction
-#jta.UserTransaction javax.transaction.UserTransaction
-#jta.UserTransaction UserTransaction
-
-
-## to use the second-level cache with JTA, Hibernate must be able to obtain the JTA TransactionManager
-
-#hibernate.transaction.manager_lookup_class org.hibernate.transaction.JBossTransactionManagerLookup
-#hibernate.transaction.manager_lookup_class org.hibernate.transaction.WeblogicTransactionManagerLookup
-#hibernate.transaction.manager_lookup_class org.hibernate.transaction.WebSphereTransactionManagerLookup
-#hibernate.transaction.manager_lookup_class org.hibernate.transaction.OrionTransactionManagerLookup
-#hibernate.transaction.manager_lookup_class org.hibernate.transaction.ResinTransactionManagerLookup
-
-
-
-##############################
-### Miscellaneous Settings ###
-##############################
-
-## print all generated SQL to the console
-
-#hibernate.show_sql true
-
-
-## add comments to the generated SQL
-
-#hibernate.use_sql_comments true
-
-
-## generate statistics
-
-#hibernate.generate_statistics true
-
-
-## auto schema export
-
-#hibernate.hbm2ddl.auto create-drop
-#hibernate.hbm2ddl.auto create
-#hibernate.hbm2ddl.auto update
-
-
-## specify a default schema and catalog for unqualified tablenames
-
-#hibernate.default_schema test
-#hibernate.default_catalog test
-
-
-## enable ordering of SQL UPDATEs by primary key
-
-hibernate.order_updates true
-
-
-## set the maximum depth of the outer join fetch tree
-
-hibernate.max_fetch_depth 1
-
-
-## set the default batch size for batch fetching
-
-hibernate.default_batch_fetch_size 100
-
-
-## rollback generated identifier values of deleted entities to default values
-
-#hibernate.use_identifer_rollback true
-
-
-## enable CGLIB reflection optimizer (enabled by default)
-
-#hibernate.cglib.use_reflection_optimizer false
-
-
-
-#####################
-### JDBC Settings ###
-#####################
-
-## specify a JDBC isolation level
-
-#hibernate.connection.isolation 4
-
-
-## enable JDBC autocommit (not recommended!)
-
-#hibernate.connection.autocommit true
-
-
-## set the JDBC fetch size
-
-#hibernate.jdbc.fetch_size 25
-
-
-## set the maximum JDBC 2 batch size (a nonzero value enables batching)
-
-#hibernate.jdbc.batch_size 0
-
-
-## enable batch updates even for versioned data
-
-hibernate.jdbc.batch_versioned_data true
-
-
-## enable use of JDBC 2 scrollable ResultSets (specifying a Dialect will cause Hibernate to use a sensible default)
-
-#hibernate.jdbc.use_scrollable_resultset true
-
-
-## use streams when writing binary types to / from JDBC
-
-hibernate.jdbc.use_streams_for_binary true
-
-
-## use JDBC 3 PreparedStatement.getGeneratedKeys() to get the identifier of an inserted row
-
-#hibernate.jdbc.use_get_generated_keys false
-
-
-## choose a custom JDBC batcher
-
-# hibernate.jdbc.factory_class
-
-
-## enable JDBC result set column alias caching 
-## (minor performance enhancement for broken JDBC drivers)
-
-# hibernate.jdbc.wrap_result_sets
-
-
-## choose a custom SQL exception converter
-
-#hibernate.jdbc.sql_exception_converter
-
-
-
-##########################
-### Second-level Cache ###
-##########################
-
-## optimize chache for minimal "puts" instead of minimal "gets" (good for clustered cache)
-
-#hibernate.cache.use_minimal_puts true
-
-
-## set a prefix for cache region names
-
-hibernate.cache.region_prefix hibernate.test
-
-
-## disable the second-level cache
-
-#hibernate.cache.use_second_level_cache false
-
-
-## enable the query cache
-
-hibernate.cache.use_query_cache true
-
-
-## store the second-level cache entries in a more human-friendly format
-
-#hibernate.cache.use_structured_entries true
-
-
-## choose a cache implementation
-
-#hibernate.cache.provider_class org.hibernate.cache.EhCacheProvider
-#hibernate.cache.provider_class org.hibernate.cache.EmptyCacheProvider
-hibernate.cache.provider_class org.hibernate.cache.HashtableCacheProvider
-#hibernate.cache.provider_class org.hibernate.cache.TreeCacheProvider
-#hibernate.cache.provider_class org.hibernate.cache.OSCacheProvider
-#hibernate.cache.provider_class org.hibernate.cache.SwarmCacheProvider
-
-
-## choose a custom query cache implementation
-
-#hibernate.cache.query_cache_factory
-
-
-
-############
-### JNDI ###
-############
-
-## specify a JNDI name for the SessionFactory
-
-#hibernate.session_factory_name hibernate/session_factory
-
-
-## Hibernate uses JNDI to bind a name to a SessionFactory and to look up the JTA UserTransaction;
-## if hibernate.jndi.* are not specified, Hibernate will use the default InitialContext() which
-## is the best approach in an application server
-
-#file system
-#hibernate.jndi.class com.sun.jndi.fscontext.RefFSContextFactory
-#hibernate.jndi.url file:/
-
-#WebSphere
-#hibernate.jndi.class com.ibm.websphere.naming.WsnInitialContextFactory
-#hibernate.jndi.url iiop://localhost:900/
-

Copied: trunk/HibernateExt/annotations/src/test/hibernate.properties (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/hibernate.properties)
===================================================================
--- trunk/HibernateExt/annotations/src/test/hibernate.properties	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/hibernate.properties	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,472 @@
+######################
+### Query Language ###
+######################
+
+## define query language constants / function names
+
+hibernate.query.substitutions true 1, false 0, yes 'Y', no 'N'
+
+
+## select the classic query parser
+
+#hibernate.query.factory_class org.hibernate.hql.classic.ClassicQueryTranslatorFactory
+
+hibernate.format_sql true
+
+
+
+#################
+### Platforms ###
+#################
+
+## JNDI Datasource
+
+#hibernate.connection.datasource jdbc/test
+#hibernate.connection.username db2
+#hibernate.connection.password db2
+
+
+## HypersonicSQL
+
+hibernate.dialect org.hibernate.dialect.HSQLDialect
+hibernate.connection.driver_class org.hsqldb.jdbcDriver
+hibernate.connection.username sa
+hibernate.connection.password
+hibernate.connection.url jdbc:hsqldb:hsql://localhost
+hibernate.connection.url jdbc:hsqldb:test
+hibernate.connection.url jdbc:hsqldb:.
+
+
+## MySQL
+
+#hibernate.dialect org.hibernate.dialect.MySQLDialect
+#hibernate.dialect org.hibernate.dialect.MySQLInnoDBDialect
+#hibernate.dialect org.hibernate.dialect.MySQLMyISAMDialect
+#hibernate.connection.driver_class com.mysql.jdbc.Driver
+#hibernate.connection.url jdbc:mysql:///test
+#hibernate.connection.username emmanuel
+#hibernate.connection.password hibernate
+
+
+## Oracle
+
+#hibernate.dialect org.hibernate.dialect.OracleDialect
+#hibernate.dialect org.hibernate.dialect.Oracle9Dialect
+#hibernate.connection.driver_class oracle.jdbc.driver.OracleDriver
+#hibernate.connection.username ora
+#hibernate.connection.password ora
+#hibernate.connection.url jdbc:oracle:thin:@localhost:1521:test
+
+
+## PostgreSQL
+
+#hibernate.dialect org.hibernate.dialect.PostgreSQLDialect
+#hibernate.connection.driver_class org.postgresql.Driver
+#hibernate.connection.url jdbc:postgresql:annotations
+#hibernate.connection.username postgres
+#hibernate.connection.password hibernate
+#hibernate.query.substitutions yes 'Y', no 'N'
+
+
+## DB2
+
+#hibernate.dialect org.hibernate.dialect.DB2Dialect
+#hibernate.connection.driver_class COM.ibm.db2.jdbc.app.DB2Driver
+#hibernate.connection.url jdbc:db2:test
+#hibernate.connection.username db2
+#hibernate.connection.password db2
+
+## TimesTen (not supported yet)
+
+#hibernate.dialect org.hibernate.dialect.TimesTenDialect
+#hibernate.connection.driver_class com.timesten.jdbc.TimesTenDriver
+#hibernate.connection.url jdbc:timesten:direct:test
+#hibernate.connection.username
+#hibernate.connection.password 
+
+## DB2/400
+
+#hibernate.dialect org.hibernate.dialect.DB2400Dialect
+#hibernate.connection.username user
+#hibernate.connection.password password
+
+## Native driver
+#hibernate.connection.driver_class COM.ibm.db2.jdbc.app.DB2Driver
+#hibernate.connection.url jdbc:db2://systemname
+
+## Toolbox driver
+#hibernate.connection.driver_class com.ibm.as400.access.AS400JDBCDriver
+#hibernate.connection.url jdbc:as400://systemname
+
+
+## Derby (Not supported!)
+
+#hibernate.dialect org.hibernate.dialect.DerbyDialect
+#hibernate.connection.driver_class org.apache.derby.jdbc.EmbeddedDriver
+#hibernate.connection.username
+#hibernate.connection.password
+#hibernate.connection.url jdbc:derby:/test;create=true
+
+
+## Sybase
+
+#hibernate.dialect org.hibernate.dialect.SybaseDialect
+#hibernate.connection.driver_class com.sybase.jdbc2.jdbc.SybDriver
+#hibernate.connection.username sa
+#hibernate.connection.password sasasa
+#hibernate.connection.url jdbc:sybase:Tds:co3061835-a:5000/tempdb
+
+
+## Mckoi SQL
+
+#hibernate.dialect org.hibernate.dialect.MckoiDialect
+#hibernate.connection.driver_class com.mckoi.JDBCDriver
+#hibernate.connection.url jdbc:mckoi:///
+#hibernate.connection.url jdbc:mckoi:local://C:/mckoi1.00/db.conf
+#hibernate.connection.username admin
+#hibernate.connection.password nimda
+
+
+## SAP DB
+
+#hibernate.dialect org.hibernate.dialect.SAPDBDialect
+#hibernate.connection.driver_class com.sap.dbtech.jdbc.DriverSapDB
+#hibernate.connection.url jdbc:sapdb://localhost/TST
+#hibernate.connection.username TEST
+#hibernate.connection.password TEST
+#hibernate.query.substitutions yes 'Y', no 'N'
+
+
+## MS SQL Server
+
+#hibernate.dialect org.hibernate.dialect.SQLServerDialect
+#hibernate.connection.username sa
+#hibernate.connection.password sa
+
+## JSQL Driver
+#hibernate.connection.driver_class com.jnetdirect.jsql.JSQLDriver
+#hibernate.connection.url jdbc:JSQLConnect://1E1/test
+
+## JTURBO Driver
+#hibernate.connection.driver_class com.newatlanta.jturbo.driver.Driver
+#hibernate.connection.url jdbc:JTurbo://1E1:1433/test
+
+## WebLogic Driver
+#hibernate.connection.driver_class weblogic.jdbc.mssqlserver4.Driver
+#hibernate.connection.url jdbc:weblogic:mssqlserver4:1E1:1433
+
+## Microsoft Driver (not recommended!)
+#hibernate.connection.driver_class com.microsoft.jdbc.sqlserver.SQLServerDriver
+#hibernate.connection.url jdbc:microsoft:sqlserver://1E1;DatabaseName=test;SelectMethod=cursor
+
+## jTDS (since version 0.9)
+#hibernate.connection.driver_class net.sourceforge.jtds.jdbc.Driver
+#hibernate.connection.url jdbc:jtds:sqlserver://1E1/test
+
+## Interbase
+
+#hibernate.dialect org.hibernate.dialect.InterbaseDialect
+#hibernate.connection.username sysdba
+#hibernate.connection.password masterkey
+
+## DO NOT specify hibernate.connection.sqlDialect
+
+## InterClient
+
+#hibernate.connection.driver_class interbase.interclient.Driver
+#hibernate.connection.url jdbc:interbase://localhost:3060/C:/firebird/test.gdb
+
+## Pure Java
+
+#hibernate.connection.driver_class org.firebirdsql.jdbc.FBDriver
+#hibernate.connection.url jdbc:firebirdsql:localhost/3050:/firebird/test.gdb
+
+
+## Pointbase
+
+#hibernate.dialect org.hibernate.dialect.PointbaseDialect
+#hibernate.connection.driver_class com.pointbase.jdbc.jdbcUniversalDriver
+#hibernate.connection.url jdbc:pointbase:embedded:sample
+#hibernate.connection.username PBPUBLIC
+#hibernate.connection.password PBPUBLIC
+
+
+
+#################################
+### Hibernate Connection Pool ###
+#################################
+
+hibernate.connection.pool_size 1
+
+
+
+###########################
+### C3P0 Connection Pool###
+###########################
+
+#hibernate.c3p0.max_size 2
+#hibernate.c3p0.min_size 2
+#hibernate.c3p0.timeout 5000
+#hibernate.c3p0.max_statements 100
+#hibernate.c3p0.idle_test_period 3000
+#hibernate.c3p0.acquire_increment 2
+#hibernate.c3p0.validate false
+
+
+
+##############################
+### Proxool Connection Pool###
+##############################
+
+## Properties for external configuration of Proxool
+
+hibernate.proxool.pool_alias pool1
+
+## Only need one of the following
+
+#hibernate.proxool.existing_pool true
+#hibernate.proxool.xml proxool.xml
+#hibernate.proxool.properties proxool.properties
+
+
+
+#################################
+### Plugin ConnectionProvider ###
+#################################
+
+## use a custom ConnectionProvider (if not set, Hibernate will choose a built-in ConnectionProvider using hueristics)
+
+#hibernate.connection.provider_class org.hibernate.connection.DriverManagerConnectionProvider
+#hibernate.connection.provider_class org.hibernate.connection.DatasourceConnectionProvider
+#hibernate.connection.provider_class org.hibernate.connection.C3P0ConnectionProvider
+#hibernate.connection.provider_class org.hibernate.connection.DBCPConnectionProvider
+#hibernate.connection.provider_class org.hibernate.connection.ProxoolConnectionProvider
+
+
+
+#######################
+### Transaction API ###
+#######################
+
+## Enable automatic flush during the JTA beforeCompletion() callback
+## (This setting is relevant with or without the Transaction API)
+
+#hibernate.transaction.flush_before_completion
+
+
+## Enable automatic session close at the end of transaction
+## (This setting is relevant with or without the Transaction API)
+
+#hibernate.transaction.auto_close_session
+
+
+## the Transaction API abstracts application code from the underlying JTA or JDBC transactions
+
+#hibernate.transaction.factory_class org.hibernate.transaction.JTATransactionFactory
+#hibernate.transaction.factory_class org.hibernate.transaction.JDBCTransactionFactory
+
+
+## to use JTATransactionFactory, Hibernate must be able to locate the UserTransaction in JNDI
+## default is java:comp/UserTransaction
+## you do NOT need this setting if you specify hibernate.transaction.manager_lookup_class
+
+#jta.UserTransaction jta/usertransaction
+#jta.UserTransaction javax.transaction.UserTransaction
+#jta.UserTransaction UserTransaction
+
+
+## to use the second-level cache with JTA, Hibernate must be able to obtain the JTA TransactionManager
+
+#hibernate.transaction.manager_lookup_class org.hibernate.transaction.JBossTransactionManagerLookup
+#hibernate.transaction.manager_lookup_class org.hibernate.transaction.WeblogicTransactionManagerLookup
+#hibernate.transaction.manager_lookup_class org.hibernate.transaction.WebSphereTransactionManagerLookup
+#hibernate.transaction.manager_lookup_class org.hibernate.transaction.OrionTransactionManagerLookup
+#hibernate.transaction.manager_lookup_class org.hibernate.transaction.ResinTransactionManagerLookup
+
+
+
+##############################
+### Miscellaneous Settings ###
+##############################
+
+## print all generated SQL to the console
+
+#hibernate.show_sql true
+
+
+## add comments to the generated SQL
+
+#hibernate.use_sql_comments true
+
+
+## generate statistics
+
+#hibernate.generate_statistics true
+
+
+## auto schema export
+
+#hibernate.hbm2ddl.auto create-drop
+#hibernate.hbm2ddl.auto create
+#hibernate.hbm2ddl.auto update
+
+
+## specify a default schema and catalog for unqualified tablenames
+
+#hibernate.default_schema test
+#hibernate.default_catalog test
+
+
+## enable ordering of SQL UPDATEs by primary key
+
+hibernate.order_updates true
+
+
+## set the maximum depth of the outer join fetch tree
+
+hibernate.max_fetch_depth 1
+
+
+## set the default batch size for batch fetching
+
+hibernate.default_batch_fetch_size 100
+
+
+## rollback generated identifier values of deleted entities to default values
+
+#hibernate.use_identifer_rollback true
+
+
+## enable CGLIB reflection optimizer (enabled by default)
+
+#hibernate.cglib.use_reflection_optimizer false
+
+
+
+#####################
+### JDBC Settings ###
+#####################
+
+## specify a JDBC isolation level
+
+#hibernate.connection.isolation 4
+
+
+## enable JDBC autocommit (not recommended!)
+
+#hibernate.connection.autocommit true
+
+
+## set the JDBC fetch size
+
+#hibernate.jdbc.fetch_size 25
+
+
+## set the maximum JDBC 2 batch size (a nonzero value enables batching)
+
+#hibernate.jdbc.batch_size 0
+
+
+## enable batch updates even for versioned data
+
+hibernate.jdbc.batch_versioned_data true
+
+
+## enable use of JDBC 2 scrollable ResultSets (specifying a Dialect will cause Hibernate to use a sensible default)
+
+#hibernate.jdbc.use_scrollable_resultset true
+
+
+## use streams when writing binary types to / from JDBC
+
+hibernate.jdbc.use_streams_for_binary true
+
+
+## use JDBC 3 PreparedStatement.getGeneratedKeys() to get the identifier of an inserted row
+
+#hibernate.jdbc.use_get_generated_keys false
+
+
+## choose a custom JDBC batcher
+
+# hibernate.jdbc.factory_class
+
+
+## enable JDBC result set column alias caching 
+## (minor performance enhancement for broken JDBC drivers)
+
+# hibernate.jdbc.wrap_result_sets
+
+
+## choose a custom SQL exception converter
+
+#hibernate.jdbc.sql_exception_converter
+
+
+
+##########################
+### Second-level Cache ###
+##########################
+
+## optimize chache for minimal "puts" instead of minimal "gets" (good for clustered cache)
+
+#hibernate.cache.use_minimal_puts true
+
+
+## set a prefix for cache region names
+
+hibernate.cache.region_prefix hibernate.test
+
+
+## disable the second-level cache
+
+#hibernate.cache.use_second_level_cache false
+
+
+## enable the query cache
+
+hibernate.cache.use_query_cache true
+
+
+## store the second-level cache entries in a more human-friendly format
+
+#hibernate.cache.use_structured_entries true
+
+
+## choose a cache implementation
+
+#hibernate.cache.provider_class org.hibernate.cache.EhCacheProvider
+#hibernate.cache.provider_class org.hibernate.cache.EmptyCacheProvider
+hibernate.cache.provider_class org.hibernate.cache.HashtableCacheProvider
+#hibernate.cache.provider_class org.hibernate.cache.TreeCacheProvider
+#hibernate.cache.provider_class org.hibernate.cache.OSCacheProvider
+#hibernate.cache.provider_class org.hibernate.cache.SwarmCacheProvider
+
+
+## choose a custom query cache implementation
+
+#hibernate.cache.query_cache_factory
+
+
+
+############
+### JNDI ###
+############
+
+## specify a JNDI name for the SessionFactory
+
+#hibernate.session_factory_name hibernate/session_factory
+
+
+## Hibernate uses JNDI to bind a name to a SessionFactory and to look up the JTA UserTransaction;
+## if hibernate.jndi.* are not specified, Hibernate will use the default InitialContext() which
+## is the best approach in an application server
+
+#file system
+#hibernate.jndi.class com.sun.jndi.fscontext.RefFSContextFactory
+#hibernate.jndi.url file:/
+
+#WebSphere
+#hibernate.jndi.class com.ibm.websphere.naming.WsnInitialContextFactory
+#hibernate.jndi.url iiop://localhost:900/
+

Deleted: trunk/HibernateExt/annotations/src/test/log4j.properties
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/log4j.properties	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/log4j.properties	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,44 +0,0 @@
-### direct log messages to stdout ###
-log4j.appender.stdout=org.apache.log4j.ConsoleAppender
-log4j.appender.stdout.Target=System.out
-log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
-log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
-
-### direct messages to file hibernate.log ###
-#log4j.appender.file=org.apache.log4j.FileAppender
-#log4j.appender.file.File=hibernate.log
-#log4j.appender.file.layout=org.apache.log4j.PatternLayout
-#log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
-
-### set log levels - for more verbose logging change 'info' to 'debug' ###
-
-log4j.rootLogger=warn, stdout
-
-log4j.logger.org.hibernate=info
-
-
-### log just the SQL
-log4j.logger.org.hibernate.SQL=debug
-
-#log4j.logger.org.hibernate.engine.CascadingAction=debug
-
-### log JDBC bind parameters ###
-#log4j.logger.org.hibernate.type=debug
-
-### log schema export/update ###
-log4j.logger.org.hibernate.tool.hbm2ddl=debug
-
-### log cache activity ###
-#log4j.logger.org.hibernate.cache=debug
-
-### enable the following line if you want to track down connection ###
-### leakages when using DriverManagerConnectionProvider ###
-#log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trace
-
-### annotation logs
-#log4j.logger.org.hibernate.annotation=info
-#log4j.logger.org.hibernate.cfg=info
-#log4j.logger.org.hibernate.cfg.SettingsFactory=info
-#log4j.logger.org.hibernate.cfg.AnnotationBinder=info
-#log4j.logger.org.hibernate.cfg.AnnotationConfiguration=info
-#log4j.logger.org.hibernate.cfg.Ejb3Column=info
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/test/log4j.properties (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/log4j.properties)
===================================================================
--- trunk/HibernateExt/annotations/src/test/log4j.properties	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/log4j.properties	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,44 @@
+### direct log messages to stdout ###
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.Target=System.out
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
+
+### direct messages to file hibernate.log ###
+#log4j.appender.file=org.apache.log4j.FileAppender
+#log4j.appender.file.File=hibernate.log
+#log4j.appender.file.layout=org.apache.log4j.PatternLayout
+#log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
+
+### set log levels - for more verbose logging change 'info' to 'debug' ###
+
+log4j.rootLogger=warn, stdout
+
+log4j.logger.org.hibernate=info
+
+
+### log just the SQL
+log4j.logger.org.hibernate.SQL=debug
+
+#log4j.logger.org.hibernate.engine.CascadingAction=debug
+
+### log JDBC bind parameters ###
+#log4j.logger.org.hibernate.type=debug
+
+### log schema export/update ###
+log4j.logger.org.hibernate.tool.hbm2ddl=debug
+
+### log cache activity ###
+#log4j.logger.org.hibernate.cache=debug
+
+### enable the following line if you want to track down connection ###
+### leakages when using DriverManagerConnectionProvider ###
+#log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trace
+
+### annotation logs
+#log4j.logger.org.hibernate.annotation=info
+#log4j.logger.org.hibernate.cfg=info
+#log4j.logger.org.hibernate.cfg.SettingsFactory=info
+#log4j.logger.org.hibernate.cfg.AnnotationBinder=info
+#log4j.logger.org.hibernate.cfg.AnnotationConfiguration=info
+#log4j.logger.org.hibernate.cfg.Ejb3Column=info
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/test/org (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org)

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate)

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/annotations (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/annotations)

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test)

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations)

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/A320.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/A320.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/A320.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,23 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations;
-
-import javax.persistence.DiscriminatorValue;
-import javax.persistence.Entity;
-
-/**
- * @author Emmanuel Bernard
- */
- at DiscriminatorValue("A320")
- at Entity()
-public class A320 extends Plane {
-	private String javaEmbeddedVersion;
-
-	public String getJavaEmbeddedVersion() {
-		return javaEmbeddedVersion;
-	}
-
-	public void setJavaEmbeddedVersion(String string) {
-		javaEmbeddedVersion = string;
-	}
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/A320.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/A320.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/A320.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/A320.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,23 @@
+//$Id$
+package org.hibernate.test.annotations;
+
+import javax.persistence.DiscriminatorValue;
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at DiscriminatorValue("A320")
+ at Entity()
+public class A320 extends Plane {
+	private String javaEmbeddedVersion;
+
+	public String getJavaEmbeddedVersion() {
+		return javaEmbeddedVersion;
+	}
+
+	public void setJavaEmbeddedVersion(String string) {
+		javaEmbeddedVersion = string;
+	}
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/A320b.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/A320b.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/A320b.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,12 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations;
-
-import javax.persistence.Entity;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity()
-public class A320b extends A320 {
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/A320b.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/A320b.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/A320b.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/A320b.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,12 @@
+//$Id$
+package org.hibernate.test.annotations;
+
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity()
+public class A320b extends A320 {
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/AlternativeNamingStrategy.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/AlternativeNamingStrategy.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/AlternativeNamingStrategy.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,73 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations;
-
-import org.hibernate.cfg.EJB3NamingStrategy;
-import org.hibernate.cfg.NamingStrategy;
-import org.hibernate.util.StringHelper;
-
-/**
- * @author Emmanuel Bernard
- */
-public class AlternativeNamingStrategy extends EJB3NamingStrategy {
-	public static NamingStrategy INSTANCE = new AlternativeNamingStrategy();
-
-	public String classToTableName(String className) {
-		return tableName( StringHelper.unqualify( className ) );
-	}
-
-	public String propertyToColumnName(String propertyName) {
-		return columnName( StringHelper.unqualify( propertyName ) );
-	}
-
-	public String tableName(String tableName) {
-		return "table_" + tableName;
-	}
-
-	public String columnName(String columnName) {
-		return "f_" + columnName;
-	}
-
-	public String propertyToTableName(String className, String propertyName) {
-		return tableName( StringHelper.unqualify( className ) + "_" + StringHelper.unqualify( propertyName ) );
-	}
-
-	public String logicalColumnName(String columnName, String propertyName) {
-		return StringHelper.isNotEmpty( columnName ) ? columnName : propertyName;
-	}
-
-	public String collectionTableName(
-			String ownerEntity, String ownerEntityTable, String associatedEntity, String associatedEntityTable,
-			String propertyName
-	) {
-		return tableName(
-				new StringBuilder( ownerEntityTable ).append( "_" )
-						.append(
-								associatedEntityTable != null ?
-										associatedEntityTable :
-										StringHelper.unqualify( propertyName )
-						).toString()
-		);
-	}
-
-	public String logicalCollectionTablelName(
-			String tableName,
-			String ownerEntityTable, String associatedEntityTable, String propertyName
-	) {
-		if ( tableName != null ) {
-			return tableName;
-		}
-		else {
-			//use of a stringbuffer to workaround a JDK bug
-			return new StringBuffer( ownerEntityTable ).append( "_" )
-					.append(
-							associatedEntityTable != null ?
-									associatedEntityTable :
-									StringHelper.unqualify( propertyName )
-					).toString();
-		}
-	}
-
-	public String logicalCollectionColumnName(String columnName, String propertyName, String referencedColumn) {
-		return StringHelper.isNotEmpty( columnName ) ? columnName : propertyName + "_" + referencedColumn;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/AlternativeNamingStrategy.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/AlternativeNamingStrategy.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/AlternativeNamingStrategy.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/AlternativeNamingStrategy.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,73 @@
+//$Id$
+package org.hibernate.test.annotations;
+
+import org.hibernate.cfg.EJB3NamingStrategy;
+import org.hibernate.cfg.NamingStrategy;
+import org.hibernate.util.StringHelper;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class AlternativeNamingStrategy extends EJB3NamingStrategy {
+	public static NamingStrategy INSTANCE = new AlternativeNamingStrategy();
+
+	public String classToTableName(String className) {
+		return tableName( StringHelper.unqualify( className ) );
+	}
+
+	public String propertyToColumnName(String propertyName) {
+		return columnName( StringHelper.unqualify( propertyName ) );
+	}
+
+	public String tableName(String tableName) {
+		return "table_" + tableName;
+	}
+
+	public String columnName(String columnName) {
+		return "f_" + columnName;
+	}
+
+	public String propertyToTableName(String className, String propertyName) {
+		return tableName( StringHelper.unqualify( className ) + "_" + StringHelper.unqualify( propertyName ) );
+	}
+
+	public String logicalColumnName(String columnName, String propertyName) {
+		return StringHelper.isNotEmpty( columnName ) ? columnName : propertyName;
+	}
+
+	public String collectionTableName(
+			String ownerEntity, String ownerEntityTable, String associatedEntity, String associatedEntityTable,
+			String propertyName
+	) {
+		return tableName(
+				new StringBuilder( ownerEntityTable ).append( "_" )
+						.append(
+								associatedEntityTable != null ?
+										associatedEntityTable :
+										StringHelper.unqualify( propertyName )
+						).toString()
+		);
+	}
+
+	public String logicalCollectionTablelName(
+			String tableName,
+			String ownerEntityTable, String associatedEntityTable, String propertyName
+	) {
+		if ( tableName != null ) {
+			return tableName;
+		}
+		else {
+			//use of a stringbuffer to workaround a JDK bug
+			return new StringBuffer( ownerEntityTable ).append( "_" )
+					.append(
+							associatedEntityTable != null ?
+									associatedEntityTable :
+									StringHelper.unqualify( propertyName )
+					).toString();
+		}
+	}
+
+	public String logicalCollectionColumnName(String columnName, String propertyName, String referencedColumn) {
+		return StringHelper.isNotEmpty( columnName ) ? columnName : propertyName + "_" + referencedColumn;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/AmericaCupClass.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/AmericaCupClass.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/AmericaCupClass.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,26 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations;
-
-import javax.persistence.Entity;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-import javax.persistence.PrimaryKeyJoinColumn;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at PrimaryKeyJoinColumn(name = "BOAT_ID")
-public class AmericaCupClass extends Boat {
-	private Country country;
-
-	@ManyToOne()
-	@JoinColumn(name = "COUNTRY_ID")
-	public Country getCountry() {
-		return country;
-	}
-
-	public void setCountry(Country country) {
-		this.country = country;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/AmericaCupClass.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/AmericaCupClass.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/AmericaCupClass.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/AmericaCupClass.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,26 @@
+//$Id$
+package org.hibernate.test.annotations;
+
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.PrimaryKeyJoinColumn;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at PrimaryKeyJoinColumn(name = "BOAT_ID")
+public class AmericaCupClass extends Boat {
+	private Country country;
+
+	@ManyToOne()
+	@JoinColumn(name = "COUNTRY_ID")
+	public Country getCountry() {
+		return country;
+	}
+
+	public void setCountry(Country country) {
+		this.country = country;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Boat.hbm.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Boat.hbm.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Boat.hbm.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,26 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE hibernate-mapping PUBLIC
-        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
-        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
-
-<!--
-
-  Used to demonstrate the declarative configuration
-  of both hbm files and annotated classes
-  See hibernate.cfg.xml and ConfigurationTest
-
--->
-
-<hibernate-mapping package="org.hibernate.test.annotations">
-
-    <class name="Boat" table="BoatInXml">
-
-        <id name="id">
-            <generator class="native"/>
-        </id>
-
-        <property name="size" column="boat_size"/>
-
-    </class>
-
-</hibernate-mapping>
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Boat.hbm.xml (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Boat.hbm.xml)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Boat.hbm.xml	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Boat.hbm.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,26 @@
+<?xml version="1.0"?>
+<!DOCTYPE hibernate-mapping PUBLIC
+        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+
+<!--
+
+  Used to demonstrate the declarative configuration
+  of both hbm files and annotated classes
+  See hibernate.cfg.xml and ConfigurationTest
+
+-->
+
+<hibernate-mapping package="org.hibernate.test.annotations">
+
+    <class name="Boat" table="BoatInXml">
+
+        <id name="id">
+            <generator class="native"/>
+        </id>
+
+        <property name="size" column="boat_size"/>
+
+    </class>
+
+</hibernate-mapping>
\ No newline at end of file

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Boat.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Boat.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Boat.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,57 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations;
-
-import java.io.Serializable;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.Inheritance;
-import javax.persistence.InheritanceType;
-
-
-/**
- * Boat class. Mapped in a Joined manner
- *
- * @author Emmanuel Bernard
- */
- at Entity()
- at Inheritance(
-		strategy = InheritanceType.JOINED
-)
-public class Boat implements Serializable {
-	private Integer id;
-	private int size;
-	private int weight;
-
-	public Boat() {
-		super();
-	}
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	@Column(name = "boat_size")
-	public int getSize() {
-		return size;
-	}
-
-	public void setId(Integer integer) {
-		id = integer;
-	}
-
-	public void setSize(int i) {
-		size = i;
-	}
-
-	public int getWeight() {
-		return weight;
-	}
-
-	public void setWeight(int weight) {
-		this.weight = weight;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Boat.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Boat.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Boat.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Boat.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,57 @@
+//$Id$
+package org.hibernate.test.annotations;
+
+import java.io.Serializable;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+
+
+/**
+ * Boat class. Mapped in a Joined manner
+ *
+ * @author Emmanuel Bernard
+ */
+ at Entity()
+ at Inheritance(
+		strategy = InheritanceType.JOINED
+)
+public class Boat implements Serializable {
+	private Integer id;
+	private int size;
+	private int weight;
+
+	public Boat() {
+		super();
+	}
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	@Column(name = "boat_size")
+	public int getSize() {
+		return size;
+	}
+
+	public void setId(Integer integer) {
+		id = integer;
+	}
+
+	public void setSize(int i) {
+		size = i;
+	}
+
+	public int getWeight() {
+		return weight;
+	}
+
+	public void setWeight(int weight) {
+		this.weight = weight;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Company.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Company.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Company.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,46 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations;
-
-import java.io.Serializable;
-import java.util.Date;
-import java.util.Set;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-
-
-/**
- * Corporate like Air France
- *
- * @author Emmanuel Bernard
- */
- at Entity(name = "Corporation")
-public class Company implements Serializable {
-	private Integer id;
-	private String name;
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-
-	public void setId(Integer integer) {
-		id = integer;
-	}
-
-
-	public void setName(String string) {
-		name = string;
-	}
-
-	//should be treated as getter
-	private int[] getWorkingHoursPerWeek(Set<Date> holidayDays) {
-        return null;
-    }
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Company.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Company.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Company.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Company.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,46 @@
+//$Id$
+package org.hibernate.test.annotations;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.Set;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+
+/**
+ * Corporate like Air France
+ *
+ * @author Emmanuel Bernard
+ */
+ at Entity(name = "Corporation")
+public class Company implements Serializable {
+	private Integer id;
+	private String name;
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+
+	public void setId(Integer integer) {
+		id = integer;
+	}
+
+
+	public void setName(String string) {
+		name = string;
+	}
+
+	//should be treated as getter
+	private int[] getWorkingHoursPerWeek(Set<Date> holidayDays) {
+        return null;
+    }
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/ConfigurationTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/ConfigurationTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/ConfigurationTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,155 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations;
-
-import org.hibernate.HibernateException;
-import org.hibernate.MappingException;
-import org.hibernate.Query;
-import org.hibernate.Session;
-import org.hibernate.SessionFactory;
-import org.hibernate.Transaction;
-import org.hibernate.cfg.AnnotationConfiguration;
-import org.hibernate.cfg.Configuration;
-import org.hibernate.cfg.Environment;
-
-/**
- * @author Emmanuel Bernard
- */
-public class ConfigurationTest extends junit.framework.TestCase {
-	public void testDeclarativeMix() throws Exception {
-		AnnotationConfiguration cfg = new AnnotationConfiguration();
-		cfg.configure( "org/hibernate/test/annotations/hibernate.cfg.xml" );
-		cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
-		SessionFactory sf = cfg.buildSessionFactory();
-		assertNotNull( sf );
-		Session s = sf.openSession();
-		Transaction tx = s.beginTransaction();
-		Query q = s.createQuery( "from Boat" );
-		assertEquals( 0, q.list().size() );
-		q = s.createQuery( "from Plane" );
-		assertEquals( 0, q.list().size() );
-		tx.commit();
-		s.close();
-		sf.close();
-	}
-
-	public void testIgnoringHbm() throws Exception {
-		AnnotationConfiguration cfg = new AnnotationConfiguration();
-		cfg.configure( "org/hibernate/test/annotations/hibernate.cfg.xml" );
-		cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
-		cfg.setProperty( AnnotationConfiguration.ARTEFACT, "class, whatever" );
-		SessionFactory sf = cfg.buildSessionFactory();
-		assertNotNull( sf );
-		Session s = sf.openSession();
-		Transaction tx = s.beginTransaction();
-		Query q;
-		try {
-			s.createQuery( "from Boat" ).list();
-			fail( "Boat should not be mapped" );
-		}
-		catch (HibernateException e) {
-			//all good
-		}
-		q = s.createQuery( "from Plane" );
-		assertEquals( 0, q.list().size() );
-		tx.commit();
-		s.close();
-		sf.close();
-	}
-
-	public void testPrecedenceHbm() throws Exception {
-		AnnotationConfiguration cfg = new AnnotationConfiguration();
-		cfg.configure( "org/hibernate/test/annotations/hibernate.cfg.xml" );
-		cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
-		cfg.addAnnotatedClass( Boat.class );
-		SessionFactory sf = cfg.buildSessionFactory();
-		assertNotNull( sf );
-		Session s = sf.openSession();
-		s.getTransaction().begin();
-		Boat boat = new Boat();
-		boat.setSize( 12 );
-		boat.setWeight( 34 );
-		s.persist( boat );
-		s.getTransaction().commit();
-		s.clear();
-		Transaction tx = s.beginTransaction();
-		boat = (Boat) s.get( Boat.class, boat.getId() );
-		assertTrue( "Annotation has precedence", 34 != boat.getWeight() );
-		s.delete( boat );
-		//s.getTransaction().commit();
-		tx.commit();
-		s.close();
-		sf.close();
-	}
-
-	public void testPrecedenceAnnotation() throws Exception {
-		AnnotationConfiguration cfg = new AnnotationConfiguration();
-		cfg.configure( "org/hibernate/test/annotations/hibernate.cfg.xml" );
-		cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
-		cfg.setProperty( AnnotationConfiguration.ARTEFACT, "class, hbm" );
-		cfg.addAnnotatedClass( Boat.class );
-		SessionFactory sf = cfg.buildSessionFactory();
-		assertNotNull( sf );
-		Session s = sf.openSession();
-		s.getTransaction().begin();
-		Boat boat = new Boat();
-		boat.setSize( 12 );
-		boat.setWeight( 34 );
-		s.persist( boat );
-		s.getTransaction().commit();
-		s.clear();
-		Transaction tx = s.beginTransaction();
-		boat = (Boat) s.get( Boat.class, boat.getId() );
-		assertTrue( "Annotation has precedence", 34 == boat.getWeight() );
-		s.delete( boat );
-		tx.commit();
-		s.close();
-		sf.close();
-	}
-
-	public void testDeclarativeAnnWoAnnConfig() throws Exception {
-		Configuration cfg = new Configuration();
-		try {
-			cfg.configure( "org/hibernate/test/annotations/hibernate.cfg.xml" );
-			fail( "Configuration object should fail when finding annotated elements declarations" );
-		}
-		catch (MappingException e) {
-			//success
-		}
-	}
-
-	public void testHbmWithSubclassExtends() throws Exception {
-		AnnotationConfiguration cfg = new AnnotationConfiguration();
-		cfg.configure( "org/hibernate/test/annotations/hibernate.cfg.xml" );
-		cfg.addClass( Ferry.class );
-		cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
-		SessionFactory sf = cfg.buildSessionFactory();
-		assertNotNull( sf );
-		Session s = sf.openSession();
-		Transaction tx = s.beginTransaction();
-		Query q = s.createQuery( "from Ferry" );
-		assertEquals( 0, q.list().size() );
-		q = s.createQuery( "from Plane" );
-		assertEquals( 0, q.list().size() );
-		tx.commit();
-		s.close();
-		sf.close();
-	}
-
-	public void testAnnReferencesHbm() throws Exception {
-		AnnotationConfiguration cfg = new AnnotationConfiguration();
-		cfg.configure( "org/hibernate/test/annotations/hibernate.cfg.xml" );
-		cfg.addAnnotatedClass( Port.class );
-		cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
-		SessionFactory sf = cfg.buildSessionFactory();
-		assertNotNull( sf );
-		Session s = sf.openSession();
-		Transaction tx = s.beginTransaction();
-		Query q = s.createQuery( "from Boat" );
-		assertEquals( 0, q.list().size() );
-		q = s.createQuery( "from Port" );
-		assertEquals( 0, q.list().size() );
-		tx.commit();
-		s.close();
-		sf.close();
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/ConfigurationTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/ConfigurationTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/ConfigurationTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/ConfigurationTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,155 @@
+//$Id$
+package org.hibernate.test.annotations;
+
+import org.hibernate.HibernateException;
+import org.hibernate.MappingException;
+import org.hibernate.Query;
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.hibernate.Transaction;
+import org.hibernate.cfg.AnnotationConfiguration;
+import org.hibernate.cfg.Configuration;
+import org.hibernate.cfg.Environment;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class ConfigurationTest extends junit.framework.TestCase {
+	public void testDeclarativeMix() throws Exception {
+		AnnotationConfiguration cfg = new AnnotationConfiguration();
+		cfg.configure( "org/hibernate/test/annotations/hibernate.cfg.xml" );
+		cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
+		SessionFactory sf = cfg.buildSessionFactory();
+		assertNotNull( sf );
+		Session s = sf.openSession();
+		Transaction tx = s.beginTransaction();
+		Query q = s.createQuery( "from Boat" );
+		assertEquals( 0, q.list().size() );
+		q = s.createQuery( "from Plane" );
+		assertEquals( 0, q.list().size() );
+		tx.commit();
+		s.close();
+		sf.close();
+	}
+
+	public void testIgnoringHbm() throws Exception {
+		AnnotationConfiguration cfg = new AnnotationConfiguration();
+		cfg.configure( "org/hibernate/test/annotations/hibernate.cfg.xml" );
+		cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
+		cfg.setProperty( AnnotationConfiguration.ARTEFACT, "class, whatever" );
+		SessionFactory sf = cfg.buildSessionFactory();
+		assertNotNull( sf );
+		Session s = sf.openSession();
+		Transaction tx = s.beginTransaction();
+		Query q;
+		try {
+			s.createQuery( "from Boat" ).list();
+			fail( "Boat should not be mapped" );
+		}
+		catch (HibernateException e) {
+			//all good
+		}
+		q = s.createQuery( "from Plane" );
+		assertEquals( 0, q.list().size() );
+		tx.commit();
+		s.close();
+		sf.close();
+	}
+
+	public void testPrecedenceHbm() throws Exception {
+		AnnotationConfiguration cfg = new AnnotationConfiguration();
+		cfg.configure( "org/hibernate/test/annotations/hibernate.cfg.xml" );
+		cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
+		cfg.addAnnotatedClass( Boat.class );
+		SessionFactory sf = cfg.buildSessionFactory();
+		assertNotNull( sf );
+		Session s = sf.openSession();
+		s.getTransaction().begin();
+		Boat boat = new Boat();
+		boat.setSize( 12 );
+		boat.setWeight( 34 );
+		s.persist( boat );
+		s.getTransaction().commit();
+		s.clear();
+		Transaction tx = s.beginTransaction();
+		boat = (Boat) s.get( Boat.class, boat.getId() );
+		assertTrue( "Annotation has precedence", 34 != boat.getWeight() );
+		s.delete( boat );
+		//s.getTransaction().commit();
+		tx.commit();
+		s.close();
+		sf.close();
+	}
+
+	public void testPrecedenceAnnotation() throws Exception {
+		AnnotationConfiguration cfg = new AnnotationConfiguration();
+		cfg.configure( "org/hibernate/test/annotations/hibernate.cfg.xml" );
+		cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
+		cfg.setProperty( AnnotationConfiguration.ARTEFACT, "class, hbm" );
+		cfg.addAnnotatedClass( Boat.class );
+		SessionFactory sf = cfg.buildSessionFactory();
+		assertNotNull( sf );
+		Session s = sf.openSession();
+		s.getTransaction().begin();
+		Boat boat = new Boat();
+		boat.setSize( 12 );
+		boat.setWeight( 34 );
+		s.persist( boat );
+		s.getTransaction().commit();
+		s.clear();
+		Transaction tx = s.beginTransaction();
+		boat = (Boat) s.get( Boat.class, boat.getId() );
+		assertTrue( "Annotation has precedence", 34 == boat.getWeight() );
+		s.delete( boat );
+		tx.commit();
+		s.close();
+		sf.close();
+	}
+
+	public void testDeclarativeAnnWoAnnConfig() throws Exception {
+		Configuration cfg = new Configuration();
+		try {
+			cfg.configure( "org/hibernate/test/annotations/hibernate.cfg.xml" );
+			fail( "Configuration object should fail when finding annotated elements declarations" );
+		}
+		catch (MappingException e) {
+			//success
+		}
+	}
+
+	public void testHbmWithSubclassExtends() throws Exception {
+		AnnotationConfiguration cfg = new AnnotationConfiguration();
+		cfg.configure( "org/hibernate/test/annotations/hibernate.cfg.xml" );
+		cfg.addClass( Ferry.class );
+		cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
+		SessionFactory sf = cfg.buildSessionFactory();
+		assertNotNull( sf );
+		Session s = sf.openSession();
+		Transaction tx = s.beginTransaction();
+		Query q = s.createQuery( "from Ferry" );
+		assertEquals( 0, q.list().size() );
+		q = s.createQuery( "from Plane" );
+		assertEquals( 0, q.list().size() );
+		tx.commit();
+		s.close();
+		sf.close();
+	}
+
+	public void testAnnReferencesHbm() throws Exception {
+		AnnotationConfiguration cfg = new AnnotationConfiguration();
+		cfg.configure( "org/hibernate/test/annotations/hibernate.cfg.xml" );
+		cfg.addAnnotatedClass( Port.class );
+		cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
+		SessionFactory sf = cfg.buildSessionFactory();
+		assertNotNull( sf );
+		Session s = sf.openSession();
+		Transaction tx = s.beginTransaction();
+		Query q = s.createQuery( "from Boat" );
+		assertEquals( 0, q.list().size() );
+		q = s.createQuery( "from Port" );
+		assertEquals( 0, q.list().size() );
+		tx.commit();
+		s.close();
+		sf.close();
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Country.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Country.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Country.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,47 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations;
-
-/**
- * @author Emmanuel Bernard
- */
-
-import java.io.Serializable;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-
- at Entity()
-public class Country implements Serializable {
-	private Integer id;
-	private String name;
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setId(Integer integer) {
-		id = integer;
-	}
-
-	public void setName(String string) {
-		name = string;
-	}
-
-	public int hashCode() {
-		return name == null ? 0 : name.hashCode();
-	}
-
-	public boolean equals(Object obj) {
-		if ( obj == this ) return true;
-		if ( ! ( obj instanceof Country ) ) return false;
-		Country that = (Country) obj;
-		if ( this.name == null ) return false;
-		return this.name.equals( that.name );
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Country.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Country.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Country.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Country.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,47 @@
+//$Id$
+package org.hibernate.test.annotations;
+
+/**
+ * @author Emmanuel Bernard
+ */
+
+import java.io.Serializable;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+ at Entity()
+public class Country implements Serializable {
+	private Integer id;
+	private String name;
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setId(Integer integer) {
+		id = integer;
+	}
+
+	public void setName(String string) {
+		name = string;
+	}
+
+	public int hashCode() {
+		return name == null ? 0 : name.hashCode();
+	}
+
+	public boolean equals(Object obj) {
+		if ( obj == this ) return true;
+		if ( ! ( obj instanceof Country ) ) return false;
+		Country that = (Country) obj;
+		if ( this.name == null ) return false;
+		return this.name.equals( that.name );
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Customer.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Customer.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Customer.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,88 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations;
-
-import java.io.Serializable;
-import java.util.Collection;
-import java.util.SortedSet;
-import javax.persistence.CascadeType;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.OneToMany;
-import javax.persistence.OneToOne;
-
-import org.hibernate.annotations.Cascade;
-import static org.hibernate.annotations.CascadeType.ALL;
-import org.hibernate.annotations.Sort;
-import org.hibernate.annotations.SortType;
-
-
-/**
- * Company customer
- *
- * @author Emmanuel Bernard
- */
- at Entity
-public class Customer implements Serializable {
-	Long id;
-	String name;
-	SortedSet<Ticket> tickets;
-	Collection discountTickets;
-	Passport passport;
-
-	public Customer() {
-	}
-
-	@Id
-	@GeneratedValue
-	public Long getId() {
-		return id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setId(Long long1) {
-		id = long1;
-	}
-
-	public void setName(String string) {
-		name = string;
-	}
-
-	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
-	@JoinColumn(name = "CUST_ID")
-	@Sort(type = SortType.COMPARATOR, comparator = TicketComparator.class)
-	public SortedSet<Ticket> getTickets() {
-		return tickets;
-	}
-
-	public void setTickets(SortedSet<Ticket> tickets) {
-		this.tickets = tickets;
-	}
-
-	@OneToMany(targetEntity = org.hibernate.test.annotations.Discount.class,
-			cascade = CascadeType.ALL, mappedBy = "owner")
-	@Cascade({ALL})
-	public Collection getDiscountTickets() {
-		return discountTickets;
-	}
-
-	public void setDiscountTickets(Collection collection) {
-		discountTickets = collection;
-	}
-
-	@OneToOne(cascade = CascadeType.ALL)
-	public Passport getPassport() {
-		return passport;
-	}
-
-	public void setPassport(Passport passport) {
-		this.passport = passport;
-	}
-
-}
-

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Customer.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Customer.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Customer.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Customer.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,88 @@
+//$Id$
+package org.hibernate.test.annotations;
+
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.SortedSet;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.OneToMany;
+import javax.persistence.OneToOne;
+
+import org.hibernate.annotations.Cascade;
+import static org.hibernate.annotations.CascadeType.ALL;
+import org.hibernate.annotations.Sort;
+import org.hibernate.annotations.SortType;
+
+
+/**
+ * Company customer
+ *
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Customer implements Serializable {
+	Long id;
+	String name;
+	SortedSet<Ticket> tickets;
+	Collection discountTickets;
+	Passport passport;
+
+	public Customer() {
+	}
+
+	@Id
+	@GeneratedValue
+	public Long getId() {
+		return id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setId(Long long1) {
+		id = long1;
+	}
+
+	public void setName(String string) {
+		name = string;
+	}
+
+	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
+	@JoinColumn(name = "CUST_ID")
+	@Sort(type = SortType.COMPARATOR, comparator = TicketComparator.class)
+	public SortedSet<Ticket> getTickets() {
+		return tickets;
+	}
+
+	public void setTickets(SortedSet<Ticket> tickets) {
+		this.tickets = tickets;
+	}
+
+	@OneToMany(targetEntity = org.hibernate.test.annotations.Discount.class,
+			cascade = CascadeType.ALL, mappedBy = "owner")
+	@Cascade({ALL})
+	public Collection getDiscountTickets() {
+		return discountTickets;
+	}
+
+	public void setDiscountTickets(Collection collection) {
+		discountTickets = collection;
+	}
+
+	@OneToOne(cascade = CascadeType.ALL)
+	public Passport getPassport() {
+		return passport;
+	}
+
+	public void setPassport(Passport passport) {
+		this.passport = passport;
+	}
+
+}
+

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Discount.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Discount.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Discount.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,58 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations;
-
-import java.io.Serializable;
-import javax.persistence.CascadeType;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-
-
-/**
- * Discount ticket a client can use when buying tickets
- *
- * @author Emmanuel Bernard
- */
- at Entity
-public class Discount implements Serializable {
-
-	private Long id;
-	private double discount;
-	private Customer owner;
-
-
-	@Column(precision = 5, scale = 2)
-	public double getDiscount() {
-		return discount;
-	}
-
-	@Id
-	@GeneratedValue
-	public Long getId() {
-		return id;
-	}
-
-	public void setDiscount(double i) {
-		discount = i;
-	}
-
-	public void setId(Long long1) {
-		id = long1;
-	}
-
-	@ManyToOne(cascade = {CascadeType.ALL}, fetch = FetchType.LAZY)
-	@JoinColumn(name = "CUSTOMER_ID")
-	public Customer getOwner() {
-		return owner;
-	}
-
-	public void setOwner(Customer customer) {
-		owner = customer;
-	}
-
-}
-

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Discount.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Discount.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Discount.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Discount.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,58 @@
+//$Id$
+package org.hibernate.test.annotations;
+
+import java.io.Serializable;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+
+
+/**
+ * Discount ticket a client can use when buying tickets
+ *
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Discount implements Serializable {
+
+	private Long id;
+	private double discount;
+	private Customer owner;
+
+
+	@Column(precision = 5, scale = 2)
+	public double getDiscount() {
+		return discount;
+	}
+
+	@Id
+	@GeneratedValue
+	public Long getId() {
+		return id;
+	}
+
+	public void setDiscount(double i) {
+		discount = i;
+	}
+
+	public void setId(Long long1) {
+		id = long1;
+	}
+
+	@ManyToOne(cascade = {CascadeType.ALL}, fetch = FetchType.LAZY)
+	@JoinColumn(name = "CUSTOMER_ID")
+	public Customer getOwner() {
+		return owner;
+	}
+
+	public void setOwner(Customer customer) {
+		owner = customer;
+	}
+
+}
+

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/EntityTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/EntityTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/EntityTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,369 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations;
-
-import java.util.Date;
-import java.util.GregorianCalendar;
-import java.util.List;
-import java.util.TimeZone;
-
-import org.hibernate.Hibernate;
-import org.hibernate.HibernateException;
-import org.hibernate.Query;
-import org.hibernate.Session;
-import org.hibernate.StaleStateException;
-import org.hibernate.Transaction;
-
-/**
- * @author Emmanuel Bernard
- */
-public class EntityTest extends TestCase {
-
-	public EntityTest(String x) {
-		super( x );
-	}
-
-	public void testLoad() throws Exception {
-		//put an object in DB
-		assertEquals( "Flight", getCfg().getClassMapping( Flight.class.getName() ).getTable().getName() );
-
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		Flight firstOne = new Flight();
-		firstOne.setId( new Long( 1 ) );
-		firstOne.setName( "AF3202" );
-		firstOne.setDuration( new Long( 1000000 ) );
-		firstOne.setDurationInSec( 2000 );
-		s.save( firstOne );
-		s.flush();
-		tx.commit();
-		s.close();
-
-		//read it
-		s = openSession();
-		tx = s.beginTransaction();
-		firstOne = (Flight) s.get( Flight.class, new Long( 1 ) );
-		assertNotNull( firstOne );
-		assertEquals( new Long( 1 ), firstOne.getId() );
-		assertEquals( "AF3202", firstOne.getName() );
-		assertEquals( new Long( 1000000 ), firstOne.getDuration() );
-		assertFalse( "Transient is not working", 2000l == firstOne.getDurationInSec() );
-		tx.commit();
-		s.close();
-	}
-
-	public void testColumn() throws Exception {
-		//put an object in DB
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		Flight firstOne = new Flight();
-		firstOne.setId( new Long( 1 ) );
-		firstOne.setName( null );
-
-		try {
-			s.save( firstOne );
-			tx.commit();
-			fail( "Name column should be not null" );
-		}
-		catch (HibernateException e) {
-			//fine
-		}
-		finally {
-			s.close();
-		}
-
-		//insert an object and check that name is not updatable
-		s = openSession();
-		tx = s.beginTransaction();
-		firstOne = new Flight();
-		firstOne.setId( new Long( 1 ) );
-		firstOne.setName( "AF3202" );
-		firstOne.setTriggeredData( "should not be insertable" );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		firstOne = (Flight) s.get( Flight.class, new Long( 1 ) );
-		assertNotNull( firstOne );
-		assertEquals( new Long( 1 ), firstOne.getId() );
-		assertEquals( "AF3202", firstOne.getName() );
-		assertFalse( "should not be insertable".equals( firstOne.getTriggeredData() ) );
-		firstOne.setName( "BA1234" );
-		firstOne.setTriggeredData( "should not be updatable" );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		firstOne = (Flight) s.get( Flight.class, new Long( 1 ) );
-		assertNotNull( firstOne );
-		assertEquals( new Long( 1 ), firstOne.getId() );
-		assertEquals( "AF3202", firstOne.getName() );
-		assertFalse( "should not be updatable".equals( firstOne.getTriggeredData() ) );
-		tx.commit();
-		s.close();
-	}
-
-	public void testColumnUnique() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		Sky sky = new Sky();
-		sky.id = new Long( 2 );
-		sky.color = "blue";
-		sky.day = "monday";
-		sky.month = "January";
-
-		Sky sameSky = new Sky();
-		sameSky.id = new Long( 3 );
-		sameSky.color = "blue";
-		sky.day = "tuesday";
-		sky.month = "January";
-
-		try {
-			s.save( sky );
-			s.flush();
-			s.save( sameSky );
-			tx.commit();
-			fail( "unique constraints not respected" );
-		}
-		catch (HibernateException e) {
-			//success
-		}
-		finally {
-			if ( tx != null ) tx.rollback();
-			s.close();
-		}
-	}
-
-	public void testUniqueConstraint() throws Exception {
-		int id = 5;
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		Sky sky = new Sky();
-		sky.id = new Long( id++ );
-		sky.color = "green";
-		sky.day = "monday";
-		sky.month = "March";
-
-		Sky otherSky = new Sky();
-		otherSky.id = new Long( id++ );
-		otherSky.color = "red";
-		otherSky.day = "friday";
-		otherSky.month = "March";
-
-		Sky sameSky = new Sky();
-		sameSky.id = new Long( id++ );
-		sameSky.color = "green";
-		sameSky.day = "monday";
-		sameSky.month = "March";
-
-		s.save( sky );
-		s.flush();
-
-		s.save( otherSky );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		try {
-			s.save( sameSky );
-			tx.commit();
-			fail( "unique constraints not respected" );
-		}
-		catch (HibernateException e) {
-			//success
-		}
-		finally {
-			if ( tx != null ) tx.rollback();
-			s.close();
-		}
-	}
-
-	public void testVersion() throws Exception {
-//		put an object in DB
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		Flight firstOne = new Flight();
-		firstOne.setId( new Long( 2 ) );
-		firstOne.setName( "AF3202" );
-		firstOne.setDuration( new Long( 500 ) );
-		s.save( firstOne );
-		s.flush();
-		tx.commit();
-		s.close();
-
-		//read it
-		s = openSession();
-		tx = s.beginTransaction();
-		firstOne = (Flight) s.get( Flight.class, new Long( 2 ) );
-		tx.commit();
-		s.close();
-
-		//read it again
-		s = openSession();
-		tx = s.beginTransaction();
-		Flight concurrentOne = (Flight) s.get( Flight.class, new Long( 2 ) );
-		concurrentOne.setDuration( new Long( 1000 ) );
-		s.update( concurrentOne );
-		tx.commit();
-		s.close();
-		assertFalse( firstOne == concurrentOne );
-		assertFalse( firstOne.getVersion().equals( concurrentOne.getVersion() ) );
-
-		//reattach the first one
-		s = openSession();
-		tx = s.beginTransaction();
-		firstOne.setName( "Second access" );
-		s.update( firstOne );
-		try {
-			tx.commit();
-			fail( "Optimistic locking should work" );
-		}
-		catch (StaleStateException e) {
-			//fine
-		}
-		finally {
-			if ( tx != null ) tx.rollback();
-			s.close();
-		}
-
-	}
-
-	public void testFieldAccess() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		Sky sky = new Sky();
-		sky.id = new Long( 1 );
-		sky.color = "black";
-		Sky.area = "Paris";
-		s.save( sky );
-		tx.commit();
-		s.close();
-		Sky.area = "London";
-
-		s = openSession();
-		tx = s.beginTransaction();
-		sky = (Sky) s.get( Sky.class, sky.id );
-		assertNotNull( sky );
-		assertEquals( "black", sky.color );
-		assertFalse( "Paris".equals( Sky.area ) );
-		tx.commit();
-		s.close();
-	}
-
-	public void testEntityName() throws Exception {
-		assertEquals( "Corporation", getCfg().getClassMapping( Company.class.getName() ).getTable().getName() );
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		Company comp = new Company();
-		s.persist( comp );
-		comp.setName( "JBoss Inc" );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		List result = s.createQuery( "from Corporation" ).list();
-		assertNotNull( result );
-		assertEquals( 1, result.size() );
-		tx.commit();
-		s.close();
-
-	}
-
-	public void testNonGetter() throws Exception {
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		Flight airFrance = new Flight();
-		airFrance.setId( new Long( 747 ) );
-		airFrance.setName( "Paris-Amsterdam" );
-		airFrance.setDuration( new Long( 10 ) );
-		airFrance.setFactor( 25 );
-		s.persist( airFrance );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		airFrance = (Flight) s.get( Flight.class, airFrance.getId() );
-		assertNotNull( airFrance );
-		assertEquals( new Long( 10 ), airFrance.getDuration() );
-		assertFalse( 25 == airFrance.getFactor( false ) );
-		s.delete( airFrance );
-		tx.commit();
-		s.close();
-	}
-
-	public void testTemporalType() throws Exception {
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		Flight airFrance = new Flight();
-		airFrance.setId( new Long( 747 ) );
-		airFrance.setName( "Paris-Amsterdam" );
-		airFrance.setDuration( new Long( 10 ) );
-		airFrance.setDepartureDate( new Date( 05, 06, 21, 10, 0, 0 ) );
-		airFrance.setAlternativeDepartureDate( new GregorianCalendar( 2006, 02, 03, 10, 00 ) );
-		airFrance.getAlternativeDepartureDate().setTimeZone( TimeZone.getTimeZone( "GMT" ) );
-		airFrance.setBuyDate( new java.sql.Timestamp(122367443) );
-		airFrance.setFactor( 25 );
-		s.persist( airFrance );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		Query q = s.createQuery( "from Flight f where f.departureDate = :departureDate" );
-		q.setParameter( "departureDate", airFrance.getDepartureDate(), Hibernate.DATE );
-		Flight copyAirFrance = (Flight) q.uniqueResult();
-		assertNotNull( airFrance );
-		assertEquals(
-				new Date( 05, 06, 21 ),
-				copyAirFrance.getDepartureDate()
-		);
-		assertEquals( airFrance.getBuyDate().getTime() / 1000 , airFrance.getBuyDate().getTime() / 1000 );
-		s.delete( copyAirFrance );
-		tx.commit();
-		s.close();
-	}
-
-	public void testBasic() throws Exception {
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		Flight airFrance = new Flight();
-		airFrance.setId( new Long( 747 ) );
-		airFrance.setName( "Paris-Amsterdam" );
-		airFrance.setDuration( null );
-		try {
-			s.persist( airFrance );
-			tx.commit();
-			fail( "Basic(optional=false) fails" );
-		}
-		catch (Exception e) {
-			//success
-			if ( tx != null ) tx.rollback();
-		}
-		finally {
-			s.close();
-		}
-	}
-
-	/**
-	 * @see org.hibernate.test.annotations.TestCase#getMappings()
-	 */
-	protected Class[] getMappings() {
-		return new Class[]{
-				Flight.class,
-				Company.class,
-				Sky.class
-		};
-	}
-
-}
-

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/EntityTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/EntityTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/EntityTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/EntityTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,369 @@
+//$Id$
+package org.hibernate.test.annotations;
+
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.List;
+import java.util.TimeZone;
+
+import org.hibernate.Hibernate;
+import org.hibernate.HibernateException;
+import org.hibernate.Query;
+import org.hibernate.Session;
+import org.hibernate.StaleStateException;
+import org.hibernate.Transaction;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class EntityTest extends TestCase {
+
+	public EntityTest(String x) {
+		super( x );
+	}
+
+	public void testLoad() throws Exception {
+		//put an object in DB
+		assertEquals( "Flight", getCfg().getClassMapping( Flight.class.getName() ).getTable().getName() );
+
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		Flight firstOne = new Flight();
+		firstOne.setId( new Long( 1 ) );
+		firstOne.setName( "AF3202" );
+		firstOne.setDuration( new Long( 1000000 ) );
+		firstOne.setDurationInSec( 2000 );
+		s.save( firstOne );
+		s.flush();
+		tx.commit();
+		s.close();
+
+		//read it
+		s = openSession();
+		tx = s.beginTransaction();
+		firstOne = (Flight) s.get( Flight.class, new Long( 1 ) );
+		assertNotNull( firstOne );
+		assertEquals( new Long( 1 ), firstOne.getId() );
+		assertEquals( "AF3202", firstOne.getName() );
+		assertEquals( new Long( 1000000 ), firstOne.getDuration() );
+		assertFalse( "Transient is not working", 2000l == firstOne.getDurationInSec() );
+		tx.commit();
+		s.close();
+	}
+
+	public void testColumn() throws Exception {
+		//put an object in DB
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		Flight firstOne = new Flight();
+		firstOne.setId( new Long( 1 ) );
+		firstOne.setName( null );
+
+		try {
+			s.save( firstOne );
+			tx.commit();
+			fail( "Name column should be not null" );
+		}
+		catch (HibernateException e) {
+			//fine
+		}
+		finally {
+			s.close();
+		}
+
+		//insert an object and check that name is not updatable
+		s = openSession();
+		tx = s.beginTransaction();
+		firstOne = new Flight();
+		firstOne.setId( new Long( 1 ) );
+		firstOne.setName( "AF3202" );
+		firstOne.setTriggeredData( "should not be insertable" );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		firstOne = (Flight) s.get( Flight.class, new Long( 1 ) );
+		assertNotNull( firstOne );
+		assertEquals( new Long( 1 ), firstOne.getId() );
+		assertEquals( "AF3202", firstOne.getName() );
+		assertFalse( "should not be insertable".equals( firstOne.getTriggeredData() ) );
+		firstOne.setName( "BA1234" );
+		firstOne.setTriggeredData( "should not be updatable" );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		firstOne = (Flight) s.get( Flight.class, new Long( 1 ) );
+		assertNotNull( firstOne );
+		assertEquals( new Long( 1 ), firstOne.getId() );
+		assertEquals( "AF3202", firstOne.getName() );
+		assertFalse( "should not be updatable".equals( firstOne.getTriggeredData() ) );
+		tx.commit();
+		s.close();
+	}
+
+	public void testColumnUnique() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		Sky sky = new Sky();
+		sky.id = new Long( 2 );
+		sky.color = "blue";
+		sky.day = "monday";
+		sky.month = "January";
+
+		Sky sameSky = new Sky();
+		sameSky.id = new Long( 3 );
+		sameSky.color = "blue";
+		sky.day = "tuesday";
+		sky.month = "January";
+
+		try {
+			s.save( sky );
+			s.flush();
+			s.save( sameSky );
+			tx.commit();
+			fail( "unique constraints not respected" );
+		}
+		catch (HibernateException e) {
+			//success
+		}
+		finally {
+			if ( tx != null ) tx.rollback();
+			s.close();
+		}
+	}
+
+	public void testUniqueConstraint() throws Exception {
+		int id = 5;
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		Sky sky = new Sky();
+		sky.id = new Long( id++ );
+		sky.color = "green";
+		sky.day = "monday";
+		sky.month = "March";
+
+		Sky otherSky = new Sky();
+		otherSky.id = new Long( id++ );
+		otherSky.color = "red";
+		otherSky.day = "friday";
+		otherSky.month = "March";
+
+		Sky sameSky = new Sky();
+		sameSky.id = new Long( id++ );
+		sameSky.color = "green";
+		sameSky.day = "monday";
+		sameSky.month = "March";
+
+		s.save( sky );
+		s.flush();
+
+		s.save( otherSky );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		try {
+			s.save( sameSky );
+			tx.commit();
+			fail( "unique constraints not respected" );
+		}
+		catch (HibernateException e) {
+			//success
+		}
+		finally {
+			if ( tx != null ) tx.rollback();
+			s.close();
+		}
+	}
+
+	public void testVersion() throws Exception {
+//		put an object in DB
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		Flight firstOne = new Flight();
+		firstOne.setId( new Long( 2 ) );
+		firstOne.setName( "AF3202" );
+		firstOne.setDuration( new Long( 500 ) );
+		s.save( firstOne );
+		s.flush();
+		tx.commit();
+		s.close();
+
+		//read it
+		s = openSession();
+		tx = s.beginTransaction();
+		firstOne = (Flight) s.get( Flight.class, new Long( 2 ) );
+		tx.commit();
+		s.close();
+
+		//read it again
+		s = openSession();
+		tx = s.beginTransaction();
+		Flight concurrentOne = (Flight) s.get( Flight.class, new Long( 2 ) );
+		concurrentOne.setDuration( new Long( 1000 ) );
+		s.update( concurrentOne );
+		tx.commit();
+		s.close();
+		assertFalse( firstOne == concurrentOne );
+		assertFalse( firstOne.getVersion().equals( concurrentOne.getVersion() ) );
+
+		//reattach the first one
+		s = openSession();
+		tx = s.beginTransaction();
+		firstOne.setName( "Second access" );
+		s.update( firstOne );
+		try {
+			tx.commit();
+			fail( "Optimistic locking should work" );
+		}
+		catch (StaleStateException e) {
+			//fine
+		}
+		finally {
+			if ( tx != null ) tx.rollback();
+			s.close();
+		}
+
+	}
+
+	public void testFieldAccess() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		Sky sky = new Sky();
+		sky.id = new Long( 1 );
+		sky.color = "black";
+		Sky.area = "Paris";
+		s.save( sky );
+		tx.commit();
+		s.close();
+		Sky.area = "London";
+
+		s = openSession();
+		tx = s.beginTransaction();
+		sky = (Sky) s.get( Sky.class, sky.id );
+		assertNotNull( sky );
+		assertEquals( "black", sky.color );
+		assertFalse( "Paris".equals( Sky.area ) );
+		tx.commit();
+		s.close();
+	}
+
+	public void testEntityName() throws Exception {
+		assertEquals( "Corporation", getCfg().getClassMapping( Company.class.getName() ).getTable().getName() );
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		Company comp = new Company();
+		s.persist( comp );
+		comp.setName( "JBoss Inc" );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		List result = s.createQuery( "from Corporation" ).list();
+		assertNotNull( result );
+		assertEquals( 1, result.size() );
+		tx.commit();
+		s.close();
+
+	}
+
+	public void testNonGetter() throws Exception {
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		Flight airFrance = new Flight();
+		airFrance.setId( new Long( 747 ) );
+		airFrance.setName( "Paris-Amsterdam" );
+		airFrance.setDuration( new Long( 10 ) );
+		airFrance.setFactor( 25 );
+		s.persist( airFrance );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		airFrance = (Flight) s.get( Flight.class, airFrance.getId() );
+		assertNotNull( airFrance );
+		assertEquals( new Long( 10 ), airFrance.getDuration() );
+		assertFalse( 25 == airFrance.getFactor( false ) );
+		s.delete( airFrance );
+		tx.commit();
+		s.close();
+	}
+
+	public void testTemporalType() throws Exception {
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		Flight airFrance = new Flight();
+		airFrance.setId( new Long( 747 ) );
+		airFrance.setName( "Paris-Amsterdam" );
+		airFrance.setDuration( new Long( 10 ) );
+		airFrance.setDepartureDate( new Date( 05, 06, 21, 10, 0, 0 ) );
+		airFrance.setAlternativeDepartureDate( new GregorianCalendar( 2006, 02, 03, 10, 00 ) );
+		airFrance.getAlternativeDepartureDate().setTimeZone( TimeZone.getTimeZone( "GMT" ) );
+		airFrance.setBuyDate( new java.sql.Timestamp(122367443) );
+		airFrance.setFactor( 25 );
+		s.persist( airFrance );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		Query q = s.createQuery( "from Flight f where f.departureDate = :departureDate" );
+		q.setParameter( "departureDate", airFrance.getDepartureDate(), Hibernate.DATE );
+		Flight copyAirFrance = (Flight) q.uniqueResult();
+		assertNotNull( airFrance );
+		assertEquals(
+				new Date( 05, 06, 21 ),
+				copyAirFrance.getDepartureDate()
+		);
+		assertEquals( airFrance.getBuyDate().getTime() / 1000 , airFrance.getBuyDate().getTime() / 1000 );
+		s.delete( copyAirFrance );
+		tx.commit();
+		s.close();
+	}
+
+	public void testBasic() throws Exception {
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		Flight airFrance = new Flight();
+		airFrance.setId( new Long( 747 ) );
+		airFrance.setName( "Paris-Amsterdam" );
+		airFrance.setDuration( null );
+		try {
+			s.persist( airFrance );
+			tx.commit();
+			fail( "Basic(optional=false) fails" );
+		}
+		catch (Exception e) {
+			//success
+			if ( tx != null ) tx.rollback();
+		}
+		finally {
+			s.close();
+		}
+	}
+
+	/**
+	 * @see org.hibernate.test.annotations.TestCase#getMappings()
+	 */
+	protected Class[] getMappings() {
+		return new Class[]{
+				Flight.class,
+				Company.class,
+				Sky.class
+		};
+	}
+
+}
+

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Ferry.hbm.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Ferry.hbm.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Ferry.hbm.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,23 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE hibernate-mapping PUBLIC
-        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
-        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
-
-<!--
-
-  Used to test the interaction of hbm files with a subclass
-  extends attribute and annotated classes.
-
-  See ConfigurationTest
-
--->
-
-<hibernate-mapping package="org.hibernate.test.annotations">
-
-    <joined-subclass name="Ferry" table="FerryJoined" extends="org.hibernate.test.annotations.Boat">
-        <key column="id"/>
-        <property name="sea"/>
-
-    </joined-subclass>
-
-</hibernate-mapping>
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Ferry.hbm.xml (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Ferry.hbm.xml)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Ferry.hbm.xml	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Ferry.hbm.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,23 @@
+<?xml version="1.0"?>
+<!DOCTYPE hibernate-mapping PUBLIC
+        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+
+<!--
+
+  Used to test the interaction of hbm files with a subclass
+  extends attribute and annotated classes.
+
+  See ConfigurationTest
+
+-->
+
+<hibernate-mapping package="org.hibernate.test.annotations">
+
+    <joined-subclass name="Ferry" table="FerryJoined" extends="org.hibernate.test.annotations.Boat">
+        <key column="id"/>
+        <property name="sea"/>
+
+    </joined-subclass>
+
+</hibernate-mapping>
\ No newline at end of file

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Ferry.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Ferry.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Ferry.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,22 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations;
-
-import javax.persistence.Entity;
-
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity()
-public class Ferry extends Boat {
-	private String sea;
-
-	public String getSea() {
-		return sea;
-	}
-
-	public void setSea(String string) {
-		sea = string;
-	}
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Ferry.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Ferry.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Ferry.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Ferry.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,22 @@
+//$Id$
+package org.hibernate.test.annotations;
+
+import javax.persistence.Entity;
+
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity()
+public class Ferry extends Boat {
+	private String sea;
+
+	public String getSea() {
+		return sea;
+	}
+
+	public void setSea(String string) {
+		sea = string;
+	}
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Flight.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Flight.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Flight.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,149 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations;
-
-import java.io.Serializable;
-import java.util.Calendar;
-import java.util.Date;
-import javax.persistence.Basic;
-import javax.persistence.CascadeType;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.Id;
-import javax.persistence.Inheritance;
-import javax.persistence.InheritanceType;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-import javax.persistence.Temporal;
-import javax.persistence.TemporalType;
-import javax.persistence.Transient;
-import javax.persistence.Version;
-
-/**
- * Flight
- *
- * @author Emmanuel Bernard
- */
- at Entity()
- at Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
-public class Flight implements Serializable {
-	Long id;
-	String name;
-	transient Long duration;
-	long durationInSec;
-	Integer version;
-	Company company;
-	String triggeredData;
-	long factor;
-	Date departureDate;
-	java.sql.Timestamp buyDate;
-	Calendar alternativeDepartureDate;
-
-	@Id
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long long1) {
-		id = long1;
-	}
-
-	@Column(name = "flight_name", nullable = false, updatable = false, length = 50)
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String string) {
-		name = string;
-	}
-
-	@Basic(fetch = FetchType.LAZY, optional = false)
-	public Long getDuration() {
-		return duration;
-	}
-
-	@Basic
-	@Temporal(TemporalType.DATE)
-	public Date getDepartureDate() {
-		return departureDate;
-	}
-
-	public void setDepartureDate(Date departureDate) {
-		this.departureDate = departureDate;
-	}
-
-
-	public void setDuration(Long l) {
-		duration = l;
-		//durationInSec = duration / 1000;
-	}
-
-	@Transient
-	public long getDurationInSec() {
-		return durationInSec;
-	}
-
-	public void setDurationInSec(long l) {
-		durationInSec = l;
-	}
-
-	@Version
-	@Column(name = "OPTLOCK")
-	public Integer getVersion() {
-		return version;
-	}
-
-	public void setVersion(Integer i) {
-		version = i;
-	}
-
-	@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
-	@JoinColumn(name = "COMP_ID")
-	public Company getCompany() {
-		return company;
-	}
-
-	public void setCompany(Company company) {
-		this.company = company;
-	}
-
-	@Column(insertable = false, updatable = false)
-	public String getTriggeredData() {
-		return triggeredData;
-	}
-
-	public void setTriggeredData(String string) {
-		triggeredData = string;
-	}
-
-	public void getIsNotAGetter() {
-		//do nothing
-	}
-
-	public long getFactor(boolean x10) {
-		//this is not a getter should not be persisted
-		return factor * ( 1 + ( x10 == true ? 9 : 0 ) );
-	}
-
-	public void setFactor(long factor) {
-		this.factor = factor;
-	}
-
-	@Temporal(TemporalType.TIMESTAMP)
-	public Calendar getAlternativeDepartureDate() {
-		return alternativeDepartureDate;
-	}
-
-	public void setAlternativeDepartureDate(Calendar alternativeDepartureDate) {
-		this.alternativeDepartureDate = alternativeDepartureDate;
-	}
-
-	public java.sql.Timestamp getBuyDate() {
-		return buyDate;
-	}
-
-	public void setBuyDate(java.sql.Timestamp buyDate) {
-		this.buyDate = buyDate;
-	}
-
-}
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Flight.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Flight.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Flight.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Flight.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,149 @@
+//$Id$
+package org.hibernate.test.annotations;
+
+import java.io.Serializable;
+import java.util.Calendar;
+import java.util.Date;
+import javax.persistence.Basic;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+import javax.persistence.Transient;
+import javax.persistence.Version;
+
+/**
+ * Flight
+ *
+ * @author Emmanuel Bernard
+ */
+ at Entity()
+ at Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
+public class Flight implements Serializable {
+	Long id;
+	String name;
+	transient Long duration;
+	long durationInSec;
+	Integer version;
+	Company company;
+	String triggeredData;
+	long factor;
+	Date departureDate;
+	java.sql.Timestamp buyDate;
+	Calendar alternativeDepartureDate;
+
+	@Id
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long long1) {
+		id = long1;
+	}
+
+	@Column(name = "flight_name", nullable = false, updatable = false, length = 50)
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String string) {
+		name = string;
+	}
+
+	@Basic(fetch = FetchType.LAZY, optional = false)
+	public Long getDuration() {
+		return duration;
+	}
+
+	@Basic
+	@Temporal(TemporalType.DATE)
+	public Date getDepartureDate() {
+		return departureDate;
+	}
+
+	public void setDepartureDate(Date departureDate) {
+		this.departureDate = departureDate;
+	}
+
+
+	public void setDuration(Long l) {
+		duration = l;
+		//durationInSec = duration / 1000;
+	}
+
+	@Transient
+	public long getDurationInSec() {
+		return durationInSec;
+	}
+
+	public void setDurationInSec(long l) {
+		durationInSec = l;
+	}
+
+	@Version
+	@Column(name = "OPTLOCK")
+	public Integer getVersion() {
+		return version;
+	}
+
+	public void setVersion(Integer i) {
+		version = i;
+	}
+
+	@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
+	@JoinColumn(name = "COMP_ID")
+	public Company getCompany() {
+		return company;
+	}
+
+	public void setCompany(Company company) {
+		this.company = company;
+	}
+
+	@Column(insertable = false, updatable = false)
+	public String getTriggeredData() {
+		return triggeredData;
+	}
+
+	public void setTriggeredData(String string) {
+		triggeredData = string;
+	}
+
+	public void getIsNotAGetter() {
+		//do nothing
+	}
+
+	public long getFactor(boolean x10) {
+		//this is not a getter should not be persisted
+		return factor * ( 1 + ( x10 == true ? 9 : 0 ) );
+	}
+
+	public void setFactor(long factor) {
+		this.factor = factor;
+	}
+
+	@Temporal(TemporalType.TIMESTAMP)
+	public Calendar getAlternativeDepartureDate() {
+		return alternativeDepartureDate;
+	}
+
+	public void setAlternativeDepartureDate(Calendar alternativeDepartureDate) {
+		this.alternativeDepartureDate = alternativeDepartureDate;
+	}
+
+	public java.sql.Timestamp getBuyDate() {
+		return buyDate;
+	}
+
+	public void setBuyDate(java.sql.Timestamp buyDate) {
+		this.buyDate = buyDate;
+	}
+
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/FlyingObject.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/FlyingObject.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/FlyingObject.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,54 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations;
-
-import java.io.Serializable;
-import javax.persistence.Column;
-import javax.persistence.MappedSuperclass;
-import javax.persistence.Transient;
-
-/**
- * @author Emmanuel Bernard
- */
- at MappedSuperclass
-public abstract class FlyingObject extends Thing implements Serializable {
-	private String serial;
-	private int altitude;
-	private int metricAltitude;
-	private String color = "white";
-
-
-	public int getAltitude() {
-		return altitude;
-	}
-
-	public void setAltitude(int i) {
-		altitude = i;
-	}
-
-	@Transient
-	public int getMetricAltitude() {
-		return metricAltitude;
-	}
-
-	public void setMetricAltitude(int i) {
-		metricAltitude = i;
-	}
-
-	@Column(name = "serialnbr")
-	public String getSerial() {
-		return serial;
-	}
-
-	public void setSerial(String serial) {
-		this.serial = serial;
-	}
-
-	@Column(nullable = false)
-	public String getColor() {
-		return color;
-	}
-
-	public void setColor(String color) {
-		this.color = color;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/FlyingObject.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/FlyingObject.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/FlyingObject.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/FlyingObject.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,54 @@
+//$Id$
+package org.hibernate.test.annotations;
+
+import java.io.Serializable;
+import javax.persistence.Column;
+import javax.persistence.MappedSuperclass;
+import javax.persistence.Transient;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at MappedSuperclass
+public abstract class FlyingObject extends Thing implements Serializable {
+	private String serial;
+	private int altitude;
+	private int metricAltitude;
+	private String color = "white";
+
+
+	public int getAltitude() {
+		return altitude;
+	}
+
+	public void setAltitude(int i) {
+		altitude = i;
+	}
+
+	@Transient
+	public int getMetricAltitude() {
+		return metricAltitude;
+	}
+
+	public void setMetricAltitude(int i) {
+		metricAltitude = i;
+	}
+
+	@Column(name = "serialnbr")
+	public String getSerial() {
+		return serial;
+	}
+
+	public void setSerial(String serial) {
+		this.serial = serial;
+	}
+
+	@Column(nullable = false)
+	public String getColor() {
+		return color;
+	}
+
+	public void setColor(String color) {
+		this.color = color;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/IncorrectEntity.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/IncorrectEntity.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/IncorrectEntity.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,20 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations;
-
-import javax.persistence.Entity;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class IncorrectEntity {
-	private String name;
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/IncorrectEntity.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/IncorrectEntity.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/IncorrectEntity.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/IncorrectEntity.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,20 @@
+//$Id$
+package org.hibernate.test.annotations;
+
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class IncorrectEntity {
+	private String name;
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/JoinedSubclassTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/JoinedSubclassTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/JoinedSubclassTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,110 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-import org.hibernate.test.annotations.inheritance.Carrot;
-import org.hibernate.test.annotations.inheritance.Tomato;
-import org.hibernate.test.annotations.inheritance.Vegetable;
-import org.hibernate.test.annotations.inheritance.VegetablePk;
-
-/**
- * @author Emmanuel Bernard
- */
-public class JoinedSubclassTest extends TestCase {
-
-	public JoinedSubclassTest(String x) {
-		super( x );
-	}
-
-	public void testDefaultValues() {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		Ferry f = new Ferry();
-		f.setSize( 2 );
-		f.setSea( "Channel" );
-		s.persist( f );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		f = (Ferry) s.get( Ferry.class, f.getId() );
-		assertNotNull( f );
-		assertEquals( "Channel", f.getSea() );
-		assertEquals( 2, f.getSize() );
-		s.delete( f );
-		tx.commit();
-		s.close();
-	}
-
-	public void testDeclaredValues() {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		Country c = new Country();
-		c.setName( "France" );
-		AmericaCupClass f = new AmericaCupClass();
-		f.setSize( 2 );
-		f.setCountry( c );
-		s.persist( c );
-		s.persist( f );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		f = (AmericaCupClass) s.get( AmericaCupClass.class, f.getId() );
-		assertNotNull( f );
-		assertEquals( c, f.getCountry() );
-		assertEquals( 2, f.getSize() );
-		s.delete( f );
-		s.delete( f.getCountry() );
-		tx.commit();
-		s.close();
-	}
-
-	public void testCompositePk() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		Carrot c = new Carrot();
-		VegetablePk pk = new VegetablePk();
-		pk.setFarmer( "Bill" );
-		pk.setHarvestDate( "2004-08-15" );
-		c.setId( pk );
-		c.setLength( 23 );
-		s.persist( c );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		Vegetable v = (Vegetable) s.createCriteria( Vegetable.class ).uniqueResult();
-		assertTrue( v instanceof Carrot );
-		Carrot result = (Carrot) v;
-		assertEquals( 23, result.getLength() );
-		tx.commit();
-		s.close();
-	}
-
-	/**
-	 * @see org.hibernate.test.annotations.TestCase#getMappings()
-	 */
-	protected Class[] getMappings() {
-		return new Class[]{
-				Boat.class,
-				Ferry.class,
-				AmericaCupClass.class,
-				Country.class,
-				Vegetable.class,
-				Carrot.class,
-				Tomato.class
-		};
-	}
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/JoinedSubclassTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/JoinedSubclassTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/JoinedSubclassTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/JoinedSubclassTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,110 @@
+//$Id$
+package org.hibernate.test.annotations;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.inheritance.Carrot;
+import org.hibernate.test.annotations.inheritance.Tomato;
+import org.hibernate.test.annotations.inheritance.Vegetable;
+import org.hibernate.test.annotations.inheritance.VegetablePk;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class JoinedSubclassTest extends TestCase {
+
+	public JoinedSubclassTest(String x) {
+		super( x );
+	}
+
+	public void testDefaultValues() {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		Ferry f = new Ferry();
+		f.setSize( 2 );
+		f.setSea( "Channel" );
+		s.persist( f );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		f = (Ferry) s.get( Ferry.class, f.getId() );
+		assertNotNull( f );
+		assertEquals( "Channel", f.getSea() );
+		assertEquals( 2, f.getSize() );
+		s.delete( f );
+		tx.commit();
+		s.close();
+	}
+
+	public void testDeclaredValues() {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		Country c = new Country();
+		c.setName( "France" );
+		AmericaCupClass f = new AmericaCupClass();
+		f.setSize( 2 );
+		f.setCountry( c );
+		s.persist( c );
+		s.persist( f );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		f = (AmericaCupClass) s.get( AmericaCupClass.class, f.getId() );
+		assertNotNull( f );
+		assertEquals( c, f.getCountry() );
+		assertEquals( 2, f.getSize() );
+		s.delete( f );
+		s.delete( f.getCountry() );
+		tx.commit();
+		s.close();
+	}
+
+	public void testCompositePk() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		Carrot c = new Carrot();
+		VegetablePk pk = new VegetablePk();
+		pk.setFarmer( "Bill" );
+		pk.setHarvestDate( "2004-08-15" );
+		c.setId( pk );
+		c.setLength( 23 );
+		s.persist( c );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		Vegetable v = (Vegetable) s.createCriteria( Vegetable.class ).uniqueResult();
+		assertTrue( v instanceof Carrot );
+		Carrot result = (Carrot) v;
+		assertEquals( 23, result.getLength() );
+		tx.commit();
+		s.close();
+	}
+
+	/**
+	 * @see org.hibernate.test.annotations.TestCase#getMappings()
+	 */
+	protected Class[] getMappings() {
+		return new Class[]{
+				Boat.class,
+				Ferry.class,
+				AmericaCupClass.class,
+				Country.class,
+				Vegetable.class,
+				Carrot.class,
+				Tomato.class
+		};
+	}
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Passport.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Passport.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Passport.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,49 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations;
-
-import java.io.Serializable;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.OneToOne;
-
-/**
- * International passport
- *
- * @author Emmanuel Bernard
- */
- at Entity
-public class Passport implements Serializable {
-
-	private Long id;
-	private String number;
-	private Customer owner;
-
-	@Id
-	public Long getId() {
-		return id;
-	}
-
-	@Column(name = "passport_number")
-	public String getNumber() {
-		return number;
-	}
-
-	@OneToOne(mappedBy = "passport")
-	public Customer getOwner() {
-		return owner;
-	}
-
-	public void setId(Long long1) {
-		id = long1;
-	}
-
-	public void setNumber(String string) {
-		number = string;
-	}
-
-	public void setOwner(Customer customer) {
-		owner = customer;
-	}
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Passport.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Passport.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Passport.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Passport.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,49 @@
+//$Id$
+package org.hibernate.test.annotations;
+
+import java.io.Serializable;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.OneToOne;
+
+/**
+ * International passport
+ *
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Passport implements Serializable {
+
+	private Long id;
+	private String number;
+	private Customer owner;
+
+	@Id
+	public Long getId() {
+		return id;
+	}
+
+	@Column(name = "passport_number")
+	public String getNumber() {
+		return number;
+	}
+
+	@OneToOne(mappedBy = "passport")
+	public Customer getOwner() {
+		return owner;
+	}
+
+	public void setId(Long long1) {
+		id = long1;
+	}
+
+	public void setNumber(String string) {
+		number = string;
+	}
+
+	public void setOwner(Customer customer) {
+		owner = customer;
+	}
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Plane.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Plane.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Plane.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,58 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations;
-
-import javax.persistence.AttributeOverride;
-import javax.persistence.Column;
-import javax.persistence.DiscriminatorColumn;
-import javax.persistence.DiscriminatorType;
-import javax.persistence.DiscriminatorValue;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.Inheritance;
-import javax.persistence.InheritanceType;
-import javax.persistence.NamedQuery;
-import javax.persistence.QueryHint;
-
-/**
- * Plane class
- *
- * @author Emmanuel Bernard
- */
- at Entity()
- at Inheritance(strategy = InheritanceType.SINGLE_TABLE)
- at DiscriminatorColumn(name = "planetype", length = 100, discriminatorType = DiscriminatorType.STRING)
- at DiscriminatorValue("Plane")
- at AttributeOverride(name = "altitude", column = @Column(name = "fld_altitude"))
- at NamedQuery(name = "plane.byId", query = "from Plane where id = :id",
-		hints = {@QueryHint(name = "org.hibernate.cacheable", value = "true"),
-		@QueryHint(name = "org.hibernate.cacheRegion", value = "testedCacheRegion"),
-		@QueryHint(name = "org.hibernate.timeout", value = "100"),
-		@QueryHint(name = "org.hibernate.fetchSize", value = "1"),
-		@QueryHint(name = "org.hibernate.flushMode", value = "Commit"),
-		@QueryHint(name = "org.hibernate.cacheMode", value = "NORMAL"),
-		@QueryHint(name = "org.hibernate.comment", value = "Plane by id")})
-public class Plane extends FlyingObject {
-
-	private Long id;
-	private int nbrofSeats;
-
-	@Id
-	@GeneratedValue
-	public Long getId() {
-		return id;
-	}
-
-	public int getNbrOfSeats() {
-		return nbrofSeats;
-	}
-
-	public void setId(Long long1) {
-		id = long1;
-	}
-
-	public void setNbrOfSeats(int i) {
-		nbrofSeats = i;
-	}
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Plane.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Plane.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Plane.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Plane.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,58 @@
+//$Id$
+package org.hibernate.test.annotations;
+
+import javax.persistence.AttributeOverride;
+import javax.persistence.Column;
+import javax.persistence.DiscriminatorColumn;
+import javax.persistence.DiscriminatorType;
+import javax.persistence.DiscriminatorValue;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+import javax.persistence.NamedQuery;
+import javax.persistence.QueryHint;
+
+/**
+ * Plane class
+ *
+ * @author Emmanuel Bernard
+ */
+ at Entity()
+ at Inheritance(strategy = InheritanceType.SINGLE_TABLE)
+ at DiscriminatorColumn(name = "planetype", length = 100, discriminatorType = DiscriminatorType.STRING)
+ at DiscriminatorValue("Plane")
+ at AttributeOverride(name = "altitude", column = @Column(name = "fld_altitude"))
+ at NamedQuery(name = "plane.byId", query = "from Plane where id = :id",
+		hints = {@QueryHint(name = "org.hibernate.cacheable", value = "true"),
+		@QueryHint(name = "org.hibernate.cacheRegion", value = "testedCacheRegion"),
+		@QueryHint(name = "org.hibernate.timeout", value = "100"),
+		@QueryHint(name = "org.hibernate.fetchSize", value = "1"),
+		@QueryHint(name = "org.hibernate.flushMode", value = "Commit"),
+		@QueryHint(name = "org.hibernate.cacheMode", value = "NORMAL"),
+		@QueryHint(name = "org.hibernate.comment", value = "Plane by id")})
+public class Plane extends FlyingObject {
+
+	private Long id;
+	private int nbrofSeats;
+
+	@Id
+	@GeneratedValue
+	public Long getId() {
+		return id;
+	}
+
+	public int getNbrOfSeats() {
+		return nbrofSeats;
+	}
+
+	public void setId(Long long1) {
+		id = long1;
+	}
+
+	public void setNbrOfSeats(int i) {
+		nbrofSeats = i;
+	}
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Port.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Port.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Port.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,37 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations;
-
-import java.util.Set;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.OneToMany;
-
-/**
- * Used to test that annotated classes can have one-to-many
- * relationships with hbm loaded classes.
- */
- at Entity()
-public class Port {
-	private Long id;
-	private Set<Boat> boats;
-
-	@Id
-	@GeneratedValue
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long long1) {
-		id = long1;
-	}
-
-	@OneToMany
-	public Set<Boat> getBoats() {
-		return boats;
-	}
-
-	public void setBoats(Set<Boat> boats) {
-		this.boats = boats;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Port.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Port.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Port.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Port.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,37 @@
+//$Id$
+package org.hibernate.test.annotations;
+
+import java.util.Set;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+
+/**
+ * Used to test that annotated classes can have one-to-many
+ * relationships with hbm loaded classes.
+ */
+ at Entity()
+public class Port {
+	private Long id;
+	private Set<Boat> boats;
+
+	@Id
+	@GeneratedValue
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long long1) {
+		id = long1;
+	}
+
+	@OneToMany
+	public Set<Boat> getBoats() {
+		return boats;
+	}
+
+	public void setBoats(Set<Boat> boats) {
+		this.boats = boats;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/SafeMappingTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/SafeMappingTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/SafeMappingTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,25 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations;
-
-import org.hibernate.AnnotationException;
-import org.hibernate.SessionFactory;
-import org.hibernate.cfg.AnnotationConfiguration;
-import org.hibernate.cfg.Environment;
-
-/**
- * @author Emmanuel Bernard
- */
-public class SafeMappingTest extends junit.framework.TestCase {
-	public void testDeclarativeMix() throws Exception {
-		AnnotationConfiguration cfg = new AnnotationConfiguration();
-		cfg.addAnnotatedClass( IncorrectEntity.class );
-		cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
-		try {
-			SessionFactory sf = cfg.buildSessionFactory();
-			fail( "Entity wo id should fail" );
-		}
-		catch (AnnotationException e) {
-			//success
-		}
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/SafeMappingTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/SafeMappingTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/SafeMappingTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/SafeMappingTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,25 @@
+//$Id$
+package org.hibernate.test.annotations;
+
+import org.hibernate.AnnotationException;
+import org.hibernate.SessionFactory;
+import org.hibernate.cfg.AnnotationConfiguration;
+import org.hibernate.cfg.Environment;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class SafeMappingTest extends junit.framework.TestCase {
+	public void testDeclarativeMix() throws Exception {
+		AnnotationConfiguration cfg = new AnnotationConfiguration();
+		cfg.addAnnotatedClass( IncorrectEntity.class );
+		cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
+		try {
+			SessionFactory sf = cfg.buildSessionFactory();
+			fail( "Entity wo id should fail" );
+		}
+		catch (AnnotationException e) {
+			//success
+		}
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/SecuredBindingTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/SecuredBindingTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/SecuredBindingTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,44 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations;
-
-import java.util.Properties;
-
-import junit.framework.TestCase;
-import org.hibernate.HibernateException;
-import org.hibernate.SessionFactory;
-import org.hibernate.cfg.AnnotationConfiguration;
-import org.hibernate.cfg.Environment;
-
-/**
- * @author Emmanuel Bernard
- */
-public class SecuredBindingTest extends TestCase {
-
-	public SecuredBindingTest(String x) {
-		super( x );
-	}
-
-	public void testConfigurationMethods() throws Exception {
-		AnnotationConfiguration ac = new AnnotationConfiguration();
-		Properties p = new Properties();
-		p.put( Environment.DIALECT, "org.hibernate.dialect.HSQLDialect" );
-		p.put( "hibernate.connection.driver_class", "org.hsqldb.jdbcDrive" );
-		p.put( "hibernate.connection.url", "jdbc:hsqldb:." );
-		p.put( "hibernate.connection.username", "sa" );
-		p.put( "hibernate.connection.password", "" );
-		p.put( "hibernate.show_sql", "true" );
-		ac.setProperties( p );
-		ac.addAnnotatedClass( Plane.class );
-		SessionFactory sf;
-		try {
-			sf = ac.buildSessionFactory();
-			fail( "Driver property overriding should work" );
-			sf.close();
-		}
-		catch (HibernateException he) {
-			//success
-		}
-
-	}
-}
-

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/SecuredBindingTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/SecuredBindingTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/SecuredBindingTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/SecuredBindingTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,44 @@
+//$Id$
+package org.hibernate.test.annotations;
+
+import java.util.Properties;
+
+import junit.framework.TestCase;
+import org.hibernate.HibernateException;
+import org.hibernate.SessionFactory;
+import org.hibernate.cfg.AnnotationConfiguration;
+import org.hibernate.cfg.Environment;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class SecuredBindingTest extends TestCase {
+
+	public SecuredBindingTest(String x) {
+		super( x );
+	}
+
+	public void testConfigurationMethods() throws Exception {
+		AnnotationConfiguration ac = new AnnotationConfiguration();
+		Properties p = new Properties();
+		p.put( Environment.DIALECT, "org.hibernate.dialect.HSQLDialect" );
+		p.put( "hibernate.connection.driver_class", "org.hsqldb.jdbcDrive" );
+		p.put( "hibernate.connection.url", "jdbc:hsqldb:." );
+		p.put( "hibernate.connection.username", "sa" );
+		p.put( "hibernate.connection.password", "" );
+		p.put( "hibernate.show_sql", "true" );
+		ac.setProperties( p );
+		ac.addAnnotatedClass( Plane.class );
+		SessionFactory sf;
+		try {
+			sf = ac.buildSessionFactory();
+			fail( "Driver property overriding should work" );
+			sf.close();
+		}
+		catch (HibernateException he) {
+			//success
+		}
+
+	}
+}
+

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Sky.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Sky.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Sky.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,27 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations;
-
-import java.io.Serializable;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Table;
-import javax.persistence.UniqueConstraint;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Table(name = "tbl_sky",
-		uniqueConstraints = {@UniqueConstraint(columnNames = {"month", "day"})}
-)
-public class Sky implements Serializable {
-	@Id
-	protected Long id;
-	@Column(unique = true, columnDefinition = "varchar(250)")
-	protected String color;
-	protected String day;
-	@Column(name = "MONTH")
-	protected String month;
-	static protected String area;
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Sky.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Sky.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Sky.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Sky.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,27 @@
+//$Id$
+package org.hibernate.test.annotations;
+
+import java.io.Serializable;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.UniqueConstraint;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Table(name = "tbl_sky",
+		uniqueConstraints = {@UniqueConstraint(columnNames = {"month", "day"})}
+)
+public class Sky implements Serializable {
+	@Id
+	protected Long id;
+	@Column(unique = true, columnDefinition = "varchar(250)")
+	protected String color;
+	protected String day;
+	@Column(name = "MONTH")
+	protected String month;
+	static protected String area;
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/TestCase.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/TestCase.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/TestCase.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,154 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations;
-
-import java.io.InputStream;
-
-import org.hibernate.HibernateException;
-import org.hibernate.Session;
-import org.hibernate.SessionFactory;
-import org.hibernate.Interceptor;
-import org.hibernate.cfg.AnnotationConfiguration;
-import org.hibernate.cfg.Configuration;
-import org.hibernate.cfg.Environment;
-import org.hibernate.dialect.Dialect;
-
-public abstract class TestCase extends junit.framework.TestCase {
-
-	private static SessionFactory sessions;
-	private static AnnotationConfiguration cfg;
-	private static Dialect dialect;
-	private static Class lastTestClass;
-	private Session session;
-
-	public TestCase() {
-		super();
-	}
-
-	public TestCase(String x) {
-		super( x );
-	}
-
-	protected void buildSessionFactory(Class[] classes, String[] packages, String[] xmlFiles) throws Exception {
-
-		if ( getSessions() != null ) getSessions().close();
-		try {
-			setCfg( new AnnotationConfiguration() );
-			configure( cfg );
-			if ( recreateSchema() ) {
-				cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
-			}
-			for ( int i = 0; i < packages.length ; i++ ) {
-				getCfg().addPackage( packages[i] );
-			}
-			for ( int i = 0; i < classes.length ; i++ ) {
-				getCfg().addAnnotatedClass( classes[i] );
-			}
-			for ( int i = 0; i < xmlFiles.length ; i++ ) {
-				InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream( xmlFiles[i] );
-				getCfg().addInputStream( is );
-			}
-			setDialect( Dialect.getDialect() );
-			setSessions( getCfg().buildSessionFactory( /*new TestInterceptor()*/ ) );
-		}
-		catch (Exception e) {
-			e.printStackTrace();
-			throw e;
-		}
-	}
-
-	protected void setUp() throws Exception {
-		if ( getSessions() == null || lastTestClass != getClass() ) {
-			buildSessionFactory( getMappings(), getAnnotatedPackages(), getXmlFiles() );
-			lastTestClass = getClass();
-		}
-	}
-
-	protected void runTest() throws Throwable {
-		try {
-			super.runTest();
-			if ( session != null && session.isOpen() ) {
-				if ( session.isConnected() ) session.connection().rollback();
-				session.close();
-				session = null;
-				fail( "unclosed session" );
-			}
-			else {
-				session = null;
-			}
-		}
-		catch (Throwable e) {
-			try {
-				if ( session != null && session.isOpen() ) {
-					if ( session.isConnected() ) session.connection().rollback();
-					session.close();
-				}
-			}
-			catch (Exception ignore) {
-			}
-			try {
-				if ( sessions != null ) {
-					sessions.close();
-					sessions = null;
-				}
-			}
-			catch (Exception ignore) {
-			}
-			throw e;
-		}
-	}
-
-	public Session openSession() throws HibernateException {
-		session = getSessions().openSession();
-		return session;
-	}
-
-	public Session openSession(Interceptor interceptor) throws HibernateException {
-		session = getSessions().openSession(interceptor);
-		return session;
-	}
-
-	protected abstract Class[] getMappings();
-
-	protected String[] getAnnotatedPackages() {
-		return new String[]{};
-	}
-
-	protected String[] getXmlFiles() {
-		return new String[]{};
-	}
-
-	private void setSessions(SessionFactory sessions) {
-		TestCase.sessions = sessions;
-	}
-
-	protected SessionFactory getSessions() {
-		return sessions;
-	}
-
-	private void setDialect(Dialect dialect) {
-		TestCase.dialect = dialect;
-	}
-
-	protected Dialect getDialect() {
-		return dialect;
-	}
-
-	protected static void setCfg(AnnotationConfiguration cfg) {
-		TestCase.cfg = cfg;
-	}
-
-	protected static AnnotationConfiguration getCfg() {
-		return cfg;
-	}
-
-	protected void configure(Configuration cfg) {
-		//cfg.setNamingStrategy( AlternativeNamingStrategy.INSTANCE );
-		//cfg.getSessionEventListenerConfig().setFlushEventListener( new EJB3FlushEventListener() );
-		//cfg.getSessionEventListenerConfig().setAutoFlushEventListener( new EJB3AutoFlushEventListener() );
-	}
-
-	protected boolean recreateSchema() {
-		return true;
-	}
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/TestCase.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/TestCase.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/TestCase.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/TestCase.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,154 @@
+//$Id$
+package org.hibernate.test.annotations;
+
+import java.io.InputStream;
+
+import org.hibernate.HibernateException;
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.hibernate.Interceptor;
+import org.hibernate.cfg.AnnotationConfiguration;
+import org.hibernate.cfg.Configuration;
+import org.hibernate.cfg.Environment;
+import org.hibernate.dialect.Dialect;
+
+public abstract class TestCase extends junit.framework.TestCase {
+
+	private static SessionFactory sessions;
+	private static AnnotationConfiguration cfg;
+	private static Dialect dialect;
+	private static Class lastTestClass;
+	private Session session;
+
+	public TestCase() {
+		super();
+	}
+
+	public TestCase(String x) {
+		super( x );
+	}
+
+	protected void buildSessionFactory(Class[] classes, String[] packages, String[] xmlFiles) throws Exception {
+
+		if ( getSessions() != null ) getSessions().close();
+		try {
+			setCfg( new AnnotationConfiguration() );
+			configure( cfg );
+			if ( recreateSchema() ) {
+				cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
+			}
+			for ( int i = 0; i < packages.length ; i++ ) {
+				getCfg().addPackage( packages[i] );
+			}
+			for ( int i = 0; i < classes.length ; i++ ) {
+				getCfg().addAnnotatedClass( classes[i] );
+			}
+			for ( int i = 0; i < xmlFiles.length ; i++ ) {
+				InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream( xmlFiles[i] );
+				getCfg().addInputStream( is );
+			}
+			setDialect( Dialect.getDialect() );
+			setSessions( getCfg().buildSessionFactory( /*new TestInterceptor()*/ ) );
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+			throw e;
+		}
+	}
+
+	protected void setUp() throws Exception {
+		if ( getSessions() == null || lastTestClass != getClass() ) {
+			buildSessionFactory( getMappings(), getAnnotatedPackages(), getXmlFiles() );
+			lastTestClass = getClass();
+		}
+	}
+
+	protected void runTest() throws Throwable {
+		try {
+			super.runTest();
+			if ( session != null && session.isOpen() ) {
+				if ( session.isConnected() ) session.connection().rollback();
+				session.close();
+				session = null;
+				fail( "unclosed session" );
+			}
+			else {
+				session = null;
+			}
+		}
+		catch (Throwable e) {
+			try {
+				if ( session != null && session.isOpen() ) {
+					if ( session.isConnected() ) session.connection().rollback();
+					session.close();
+				}
+			}
+			catch (Exception ignore) {
+			}
+			try {
+				if ( sessions != null ) {
+					sessions.close();
+					sessions = null;
+				}
+			}
+			catch (Exception ignore) {
+			}
+			throw e;
+		}
+	}
+
+	public Session openSession() throws HibernateException {
+		session = getSessions().openSession();
+		return session;
+	}
+
+	public Session openSession(Interceptor interceptor) throws HibernateException {
+		session = getSessions().openSession(interceptor);
+		return session;
+	}
+
+	protected abstract Class[] getMappings();
+
+	protected String[] getAnnotatedPackages() {
+		return new String[]{};
+	}
+
+	protected String[] getXmlFiles() {
+		return new String[]{};
+	}
+
+	private void setSessions(SessionFactory sessions) {
+		TestCase.sessions = sessions;
+	}
+
+	protected SessionFactory getSessions() {
+		return sessions;
+	}
+
+	private void setDialect(Dialect dialect) {
+		TestCase.dialect = dialect;
+	}
+
+	protected Dialect getDialect() {
+		return dialect;
+	}
+
+	protected static void setCfg(AnnotationConfiguration cfg) {
+		TestCase.cfg = cfg;
+	}
+
+	protected static AnnotationConfiguration getCfg() {
+		return cfg;
+	}
+
+	protected void configure(Configuration cfg) {
+		//cfg.setNamingStrategy( AlternativeNamingStrategy.INSTANCE );
+		//cfg.getSessionEventListenerConfig().setFlushEventListener( new EJB3FlushEventListener() );
+		//cfg.getSessionEventListenerConfig().setAutoFlushEventListener( new EJB3AutoFlushEventListener() );
+	}
+
+	protected boolean recreateSchema() {
+		return true;
+	}
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Thing.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Thing.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Thing.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,21 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations;
-
-import javax.persistence.MappedSuperclass;
-
-/**
- * @author Emmanuel Bernard
- */
- at MappedSuperclass
-public class Thing {
-	private boolean isAlive;
-
-	public boolean isAlive() {
-		return isAlive;
-	}
-
-	public void setAlive(boolean alive) {
-		isAlive = alive;
-	}
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Thing.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Thing.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Thing.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Thing.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,21 @@
+//$Id$
+package org.hibernate.test.annotations;
+
+import javax.persistence.MappedSuperclass;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at MappedSuperclass
+public class Thing {
+	private boolean isAlive;
+
+	public boolean isAlive() {
+		return isAlive;
+	}
+
+	public void setAlive(boolean alive) {
+		isAlive = alive;
+	}
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Ticket.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Ticket.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Ticket.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,58 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations;
-
-import java.io.Serializable;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-
-/**
- * Flight ticket
- *
- * @author Emmanuel Bernard
- */
- at Entity
-public class Ticket implements Serializable {
-	Long id;
-	String number;
-
-	public Ticket() {
-	}
-
-	@Id
-	@GeneratedValue
-	public Long getId() {
-		return id;
-	}
-
-	@Column(name = "ticket_number")
-	public String getNumber() {
-		return number;
-	}
-
-	public void setId(Long long1) {
-		id = long1;
-	}
-
-	public void setNumber(String string) {
-		number = string;
-	}
-
-	public boolean equals(Object o) {
-		if ( this == o ) return true;
-		if ( !( o instanceof Ticket ) ) return false;
-
-		final Ticket ticket = (Ticket) o;
-
-		if ( !number.equals( ticket.number ) ) return false;
-
-		return true;
-	}
-
-	public int hashCode() {
-		return number.hashCode();
-	}
-
-}
-

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Ticket.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Ticket.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Ticket.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/Ticket.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,58 @@
+//$Id$
+package org.hibernate.test.annotations;
+
+import java.io.Serializable;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * Flight ticket
+ *
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Ticket implements Serializable {
+	Long id;
+	String number;
+
+	public Ticket() {
+	}
+
+	@Id
+	@GeneratedValue
+	public Long getId() {
+		return id;
+	}
+
+	@Column(name = "ticket_number")
+	public String getNumber() {
+		return number;
+	}
+
+	public void setId(Long long1) {
+		id = long1;
+	}
+
+	public void setNumber(String string) {
+		number = string;
+	}
+
+	public boolean equals(Object o) {
+		if ( this == o ) return true;
+		if ( !( o instanceof Ticket ) ) return false;
+
+		final Ticket ticket = (Ticket) o;
+
+		if ( !number.equals( ticket.number ) ) return false;
+
+		return true;
+	}
+
+	public int hashCode() {
+		return number.hashCode();
+	}
+
+}
+

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/TicketComparator.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/TicketComparator.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/TicketComparator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,20 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations;
-
-import java.util.Comparator;
-
-/**
- * Ticket comparator ordering longest first
- *
- * @author Emmanuel Bernard
- */
-public class TicketComparator implements Comparator<Ticket> {
-
-	public int compare(Ticket ticket, Ticket ticket1) {
-		if ( ticket == null || ticket1 == null ) {
-			throw new IllegalStateException( "Ticket comparison only available through non null tickets" );
-		}
-		return ticket1.getNumber().length() - ticket.getNumber().length();
-
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/TicketComparator.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/TicketComparator.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/TicketComparator.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/TicketComparator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,20 @@
+//$Id$
+package org.hibernate.test.annotations;
+
+import java.util.Comparator;
+
+/**
+ * Ticket comparator ordering longest first
+ *
+ * @author Emmanuel Bernard
+ */
+public class TicketComparator implements Comparator<Ticket> {
+
+	public int compare(Ticket ticket, Ticket ticket1) {
+		if ( ticket == null || ticket1 == null ) {
+			throw new IllegalStateException( "Ticket comparison only available through non null tickets" );
+		}
+		return ticket1.getNumber().length() - ticket.getNumber().length();
+
+	}
+}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access)

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/AccessTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/AccessTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/AccessTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,109 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.access;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-import org.hibernate.test.annotations.TestCase;
-
-/**
- * @author Emmanuel Bernard
- */
-public class AccessTest extends TestCase {
-
-	public void testSuperclassOverriding() throws Exception {
-		Furniture fur = new Furniture();
-		fur.setColor( "Black" );
-		fur.setName( "Beech" );
-		fur.isAlive = true;
-		Session s = openSession();
-		s.persist( fur );
-		Transaction tx = s.beginTransaction();
-		tx.commit();
-		s.clear();
-		tx = s.beginTransaction();
-		fur = (Furniture) s.get( Furniture.class, fur.getId() );
-		assertFalse( fur.isAlive );
-		assertNotNull( fur.getColor() );
-		s.delete( fur );
-		tx.commit();
-		s.close();
-	}
-
-	public void testSuperclassNonOverriding() throws Exception {
-		Furniture fur = new Furniture();
-		fur.setGod( "Buddha" );
-		Session s = openSession();
-		s.persist( fur );
-		Transaction tx = s.beginTransaction();
-		tx.commit();
-		s.clear();
-		tx = s.beginTransaction();
-		fur = (Furniture) s.get( Furniture.class, fur.getId() );
-		assertNotNull( fur.getGod() );
-		s.delete( fur );
-		tx.commit();
-		s.close();
-	}
-
-	public void testPropertyOverriding() throws Exception {
-		Furniture fur = new Furniture();
-		fur.weight = 3;
-		Session s = openSession();
-		s.persist( fur );
-		Transaction tx = s.beginTransaction();
-		tx.commit();
-		s.clear();
-		tx = s.beginTransaction();
-		fur = (Furniture) s.get( Furniture.class, fur.getId() );
-		assertEquals( 5, fur.weight );
-		s.delete( fur );
-		tx.commit();
-		s.close();
-
-	}
-
-	public void testNonOverridenSubclass() throws Exception {
-		Chair chair = new Chair();
-		chair.setPillow( "Blue" );
-		Session s = openSession();
-		s.persist( chair );
-		Transaction tx = s.beginTransaction();
-		tx.commit();
-		s.clear();
-		tx = s.beginTransaction();
-		chair = (Chair) s.get( Chair.class, chair.getId() );
-		assertNull( chair.getPillow() );
-		s.delete( chair );
-		tx.commit();
-		s.close();
-
-	}
-
-	public void testOverridenSubclass() throws Exception {
-		BigBed bed = new BigBed();
-		bed.size = 5;
-		bed.setQuality( "good" );
-		Session s = openSession();
-		s.persist( bed );
-		Transaction tx = s.beginTransaction();
-		tx.commit();
-		s.clear();
-		tx = s.beginTransaction();
-		bed = (BigBed) s.get( BigBed.class, bed.getId() );
-		assertEquals( 5, bed.size );
-		assertNull( bed.getQuality() );
-		s.delete( bed );
-		tx.commit();
-		s.close();
-
-	}
-
-	protected Class[] getMappings() {
-		return new Class[]{
-				Bed.class,
-				Chair.class,
-				Furniture.class,
-				BigBed.class
-		};
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/AccessTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/AccessTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/AccessTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/AccessTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,109 @@
+//$Id$
+package org.hibernate.test.annotations.access;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class AccessTest extends TestCase {
+
+	public void testSuperclassOverriding() throws Exception {
+		Furniture fur = new Furniture();
+		fur.setColor( "Black" );
+		fur.setName( "Beech" );
+		fur.isAlive = true;
+		Session s = openSession();
+		s.persist( fur );
+		Transaction tx = s.beginTransaction();
+		tx.commit();
+		s.clear();
+		tx = s.beginTransaction();
+		fur = (Furniture) s.get( Furniture.class, fur.getId() );
+		assertFalse( fur.isAlive );
+		assertNotNull( fur.getColor() );
+		s.delete( fur );
+		tx.commit();
+		s.close();
+	}
+
+	public void testSuperclassNonOverriding() throws Exception {
+		Furniture fur = new Furniture();
+		fur.setGod( "Buddha" );
+		Session s = openSession();
+		s.persist( fur );
+		Transaction tx = s.beginTransaction();
+		tx.commit();
+		s.clear();
+		tx = s.beginTransaction();
+		fur = (Furniture) s.get( Furniture.class, fur.getId() );
+		assertNotNull( fur.getGod() );
+		s.delete( fur );
+		tx.commit();
+		s.close();
+	}
+
+	public void testPropertyOverriding() throws Exception {
+		Furniture fur = new Furniture();
+		fur.weight = 3;
+		Session s = openSession();
+		s.persist( fur );
+		Transaction tx = s.beginTransaction();
+		tx.commit();
+		s.clear();
+		tx = s.beginTransaction();
+		fur = (Furniture) s.get( Furniture.class, fur.getId() );
+		assertEquals( 5, fur.weight );
+		s.delete( fur );
+		tx.commit();
+		s.close();
+
+	}
+
+	public void testNonOverridenSubclass() throws Exception {
+		Chair chair = new Chair();
+		chair.setPillow( "Blue" );
+		Session s = openSession();
+		s.persist( chair );
+		Transaction tx = s.beginTransaction();
+		tx.commit();
+		s.clear();
+		tx = s.beginTransaction();
+		chair = (Chair) s.get( Chair.class, chair.getId() );
+		assertNull( chair.getPillow() );
+		s.delete( chair );
+		tx.commit();
+		s.close();
+
+	}
+
+	public void testOverridenSubclass() throws Exception {
+		BigBed bed = new BigBed();
+		bed.size = 5;
+		bed.setQuality( "good" );
+		Session s = openSession();
+		s.persist( bed );
+		Transaction tx = s.beginTransaction();
+		tx.commit();
+		s.clear();
+		tx = s.beginTransaction();
+		bed = (BigBed) s.get( BigBed.class, bed.getId() );
+		assertEquals( 5, bed.size );
+		assertNull( bed.getQuality() );
+		s.delete( bed );
+		tx.commit();
+		s.close();
+
+	}
+
+	protected Class[] getMappings() {
+		return new Class[]{
+				Bed.class,
+				Chair.class,
+				Furniture.class,
+				BigBed.class
+		};
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/Bed.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/Bed.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/Bed.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,25 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.access;
-
-import javax.persistence.Entity;
-import javax.persistence.Transient;
-
-import org.hibernate.annotations.AccessType;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at AccessType("property")
-public class Bed extends Furniture {
-	String quality;
-
-	@Transient
-	public String getQuality() {
-		return quality;
-	}
-
-	public void setQuality(String quality) {
-		this.quality = quality;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/Bed.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/Bed.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/Bed.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/Bed.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,25 @@
+//$Id$
+package org.hibernate.test.annotations.access;
+
+import javax.persistence.Entity;
+import javax.persistence.Transient;
+
+import org.hibernate.annotations.AccessType;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at AccessType("property")
+public class Bed extends Furniture {
+	String quality;
+
+	@Transient
+	public String getQuality() {
+		return quality;
+	}
+
+	public void setQuality(String quality) {
+		this.quality = quality;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/BigBed.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/BigBed.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/BigBed.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,12 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.access;
-
-import javax.persistence.Entity;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class BigBed extends Bed {
-	public int size;
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/BigBed.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/BigBed.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/BigBed.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/BigBed.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,12 @@
+//$Id$
+package org.hibernate.test.annotations.access;
+
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class BigBed extends Bed {
+	public int size;
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/Chair.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/Chair.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/Chair.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,23 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.access;
-
-import javax.persistence.Entity;
-import javax.persistence.Transient;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Chair extends Furniture {
-
-	@Transient
-	private String pillow;
-
-	public String getPillow() {
-		return pillow;
-	}
-
-	public void setPillow(String pillow) {
-		this.pillow = pillow;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/Chair.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/Chair.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/Chair.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/Chair.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,23 @@
+//$Id$
+package org.hibernate.test.annotations.access;
+
+import javax.persistence.Entity;
+import javax.persistence.Transient;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Chair extends Furniture {
+
+	@Transient
+	private String pillow;
+
+	public String getPillow() {
+		return pillow;
+	}
+
+	public void setPillow(String pillow) {
+		this.pillow = pillow;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/Furniture.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/Furniture.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/Furniture.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,51 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.access;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.Transient;
-
-import org.hibernate.annotations.AccessType;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at AccessType("field")
-public class Furniture extends Woody {
-	@Id
-	@GeneratedValue
-	private Integer id;
-
-	private String brand;
-
-	@Transient
-	public String getBrand() {
-		return brand;
-	}
-
-	public void setBrand(String brand) {
-		this.brand = brand;
-	}
-
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-
-	@AccessType("property")
-	public long weight;
-
-	public long getWeight() {
-		return weight + 1;
-	}
-
-	public void setWeight(long weight) {
-		this.weight = weight + 1;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/Furniture.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/Furniture.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/Furniture.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/Furniture.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,51 @@
+//$Id$
+package org.hibernate.test.annotations.access;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Transient;
+
+import org.hibernate.annotations.AccessType;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at AccessType("field")
+public class Furniture extends Woody {
+	@Id
+	@GeneratedValue
+	private Integer id;
+
+	private String brand;
+
+	@Transient
+	public String getBrand() {
+		return brand;
+	}
+
+	public void setBrand(String brand) {
+		this.brand = brand;
+	}
+
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+
+	@AccessType("property")
+	public long weight;
+
+	public long getWeight() {
+		return weight + 1;
+	}
+
+	public void setWeight(long weight) {
+		this.weight = weight + 1;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/Thingy.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/Thingy.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/Thingy.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,22 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.access;
-
-import javax.persistence.MappedSuperclass;
-import javax.persistence.Transient;
-
-/**
- * @author Emmanuel Bernard
- */
- at MappedSuperclass
-public class Thingy {
-	private String god;
-
-	@Transient
-	public String getGod() {
-		return god;
-	}
-
-	public void setGod(String god) {
-		this.god = god;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/Thingy.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/Thingy.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/Thingy.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/Thingy.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,22 @@
+//$Id$
+package org.hibernate.test.annotations.access;
+
+import javax.persistence.MappedSuperclass;
+import javax.persistence.Transient;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at MappedSuperclass
+public class Thingy {
+	private String god;
+
+	@Transient
+	public String getGod() {
+		return god;
+	}
+
+	public void setGod(String god) {
+		this.god = god;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/Woody.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/Woody.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/Woody.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,33 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.access;
-
-import javax.persistence.MappedSuperclass;
-
-import org.hibernate.annotations.AccessType;
-
-/**
- * @author Emmanuel Bernard
- */
- at MappedSuperclass
- at AccessType("property")
-public class Woody extends Thingy {
-	private String color;
-	private String name;
-	public boolean isAlive; //shouldn't be persistent
-
-	public String getColor() {
-		return color;
-	}
-
-	public void setColor(String color) {
-		this.color = color;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/Woody.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/Woody.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/Woody.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/access/Woody.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,33 @@
+//$Id$
+package org.hibernate.test.annotations.access;
+
+import javax.persistence.MappedSuperclass;
+
+import org.hibernate.annotations.AccessType;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at MappedSuperclass
+ at AccessType("property")
+public class Woody extends Thingy {
+	private String color;
+	private String name;
+	public boolean isAlive; //shouldn't be persistent
+
+	public String getColor() {
+		return color;
+	}
+
+	public void setColor(String color) {
+		this.color = color;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/array (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/array)

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/array/ArrayTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/array/ArrayTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/array/ArrayTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,49 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.array;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-import org.hibernate.test.annotations.TestCase;
-
-/**
- * @author Emmanuel Bernard
- */
-public class ArrayTest extends TestCase {
-
-	public void testOneToMany() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		Competitor c1 = new Competitor();
-		c1.setName( "Renault" );
-		Competitor c2 = new Competitor();
-		c2.setName( "Ferrari" );
-		Contest contest = new Contest();
-		contest.setResults( new Competitor[]{c1, c2} );
-		s.persist( contest );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		contest = (Contest) s.get( Contest.class, contest.getId() );
-		assertNotNull( contest );
-		assertNotNull( contest.getResults() );
-		assertEquals( 2, contest.getResults().length );
-		assertEquals( c2.getName(), contest.getResults()[1].getName() );
-		tx.commit();
-		s.close();
-	}
-
-	public ArrayTest(String x) {
-		super( x );
-	}
-
-	protected Class[] getMappings() {
-		return new Class[]{
-				Competitor.class,
-				Contest.class
-		};
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/array/ArrayTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/array/ArrayTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/array/ArrayTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/array/ArrayTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,49 @@
+//$Id$
+package org.hibernate.test.annotations.array;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class ArrayTest extends TestCase {
+
+	public void testOneToMany() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		Competitor c1 = new Competitor();
+		c1.setName( "Renault" );
+		Competitor c2 = new Competitor();
+		c2.setName( "Ferrari" );
+		Contest contest = new Contest();
+		contest.setResults( new Competitor[]{c1, c2} );
+		s.persist( contest );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		contest = (Contest) s.get( Contest.class, contest.getId() );
+		assertNotNull( contest );
+		assertNotNull( contest.getResults() );
+		assertEquals( 2, contest.getResults().length );
+		assertEquals( c2.getName(), contest.getResults()[1].getName() );
+		tx.commit();
+		s.close();
+	}
+
+	public ArrayTest(String x) {
+		super( x );
+	}
+
+	protected Class[] getMappings() {
+		return new Class[]{
+				Competitor.class,
+				Contest.class
+		};
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/array/Competitor.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/array/Competitor.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/array/Competitor.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,33 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.array;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Competitor {
-	private int id;
-	private String name;
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	@Id
-	@GeneratedValue
-	public int getId() {
-		return id;
-	}
-
-	public void setId(int id) {
-		this.id = id;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/array/Competitor.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/array/Competitor.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/array/Competitor.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/array/Competitor.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,33 @@
+//$Id$
+package org.hibernate.test.annotations.array;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Competitor {
+	private int id;
+	private String name;
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	@Id
+	@GeneratedValue
+	public int getId() {
+		return id;
+	}
+
+	public void setId(int id) {
+		this.id = id;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/array/Contest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/array/Contest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/array/Contest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,40 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.array;
-
-
-import javax.persistence.CascadeType;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.OneToMany;
-
-import org.hibernate.annotations.IndexColumn;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Contest {
-	private int id;
-	private Competitor[] results;
-
-	@Id
-	@GeneratedValue
-	public int getId() {
-		return id;
-	}
-
-	public void setId(int id) {
-		this.id = id;
-	}
-
-	@OneToMany(cascade = CascadeType.ALL)
-	@IndexColumn(name = "pos")
-	public Competitor[] getResults() {
-		return results;
-	}
-
-	public void setResults(Competitor[] results) {
-		this.results = results;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/array/Contest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/array/Contest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/array/Contest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/array/Contest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,40 @@
+//$Id$
+package org.hibernate.test.annotations.array;
+
+
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+
+import org.hibernate.annotations.IndexColumn;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Contest {
+	private int id;
+	private Competitor[] results;
+
+	@Id
+	@GeneratedValue
+	public int getId() {
+		return id;
+	}
+
+	public void setId(int id) {
+		this.id = id;
+	}
+
+	@OneToMany(cascade = CascadeType.ALL)
+	@IndexColumn(name = "pos")
+	public Competitor[] getResults() {
+		return results;
+	}
+
+	public void setResults(Competitor[] results) {
+		this.results = results;
+	}
+}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/bytecode (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/bytecode)

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/bytecode/Hammer.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/bytecode/Hammer.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/bytecode/Hammer.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,21 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.bytecode;
-
-/**
- * @author Emmanuel Bernard
- */
-public class Hammer implements Tool {
-	private Long id;
-
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-
-	public Integer usage() {
-		return 0;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/bytecode/Hammer.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/bytecode/Hammer.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/bytecode/Hammer.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/bytecode/Hammer.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,21 @@
+//$Id: $
+package org.hibernate.test.annotations.bytecode;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Hammer implements Tool {
+	private Long id;
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public Integer usage() {
+		return 0;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/bytecode/ProxyBreakingTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/bytecode/ProxyBreakingTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/bytecode/ProxyBreakingTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,52 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.bytecode;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-import org.hibernate.Hibernate;
-import org.hibernate.test.annotations.TestCase;
-import org.hibernate.cfg.Configuration;
-
-/**
- * @author Emmanuel Bernard
- */
-public class ProxyBreakingTest extends TestCase {
-
-	static {
-		System.setProperty( "hibernate.bytecode.provider", "javassist" );
-	}
-
-	public void testProxiedBridgeMethod() throws Exception {
-		//bridge methods should not be proxied
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		Hammer h = new Hammer();
-		s.save(h);
-		s.flush();
-		s.clear();
-		assertNotNull( "The proxy creation failure is breaking things", h.getId() );
-		h = (Hammer) s.load( Hammer.class, h.getId() );
-		assertFalse( Hibernate.isInitialized( h ) );
-		tx.rollback();
-		s.close();
-	}
-
-	public ProxyBreakingTest(String name) {
-		super( name );
-	}
-
-	protected Class[] getMappings() {
-		return new Class[0];
-	}
-
-	protected String[] getXmlFiles() {
-		return new String[] {
-				"org/hibernate/test/annotations/bytecode/Hammer.hbm.xml"
-		};
-	}
-
-	@Override
-	protected void configure(Configuration cfg) {
-		super.configure( cfg.setProperty( "hibernate.bytecode.provider", "javassist" ) );
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/bytecode/ProxyBreakingTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/bytecode/ProxyBreakingTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/bytecode/ProxyBreakingTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/bytecode/ProxyBreakingTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,52 @@
+//$Id: $
+package org.hibernate.test.annotations.bytecode;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.Hibernate;
+import org.hibernate.test.annotations.TestCase;
+import org.hibernate.cfg.Configuration;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class ProxyBreakingTest extends TestCase {
+
+	static {
+		System.setProperty( "hibernate.bytecode.provider", "javassist" );
+	}
+
+	public void testProxiedBridgeMethod() throws Exception {
+		//bridge methods should not be proxied
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		Hammer h = new Hammer();
+		s.save(h);
+		s.flush();
+		s.clear();
+		assertNotNull( "The proxy creation failure is breaking things", h.getId() );
+		h = (Hammer) s.load( Hammer.class, h.getId() );
+		assertFalse( Hibernate.isInitialized( h ) );
+		tx.rollback();
+		s.close();
+	}
+
+	public ProxyBreakingTest(String name) {
+		super( name );
+	}
+
+	protected Class[] getMappings() {
+		return new Class[0];
+	}
+
+	protected String[] getXmlFiles() {
+		return new String[] {
+				"org/hibernate/test/annotations/bytecode/Hammer.hbm.xml"
+		};
+	}
+
+	@Override
+	protected void configure(Configuration cfg) {
+		super.configure( cfg.setProperty( "hibernate.bytecode.provider", "javassist" ) );
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/bytecode/Tool.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/bytecode/Tool.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/bytecode/Tool.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,13 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.bytecode;
-
-/**
- * @author Emmanuel Bernard
- */
-public interface Tool {
-	public Long getId();
-
-	public void setId(Long id);
-
-	public Number usage();
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/bytecode/Tool.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/bytecode/Tool.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/bytecode/Tool.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/bytecode/Tool.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,13 @@
+//$Id: $
+package org.hibernate.test.annotations.bytecode;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public interface Tool {
+	public Long getId();
+
+	public void setId(Long id);
+
+	public Number usage();
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/bytecode/hammer.hbm.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/bytecode/hammer.hbm.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/bytecode/hammer.hbm.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,12 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE hibernate-mapping PUBLIC
-        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
-        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
-
-<hibernate-mapping package="org.hibernate.test.annotations.bytecode">
-    <class name="Hammer">
-        <id name="id" type="java.lang.Long">
-            <generator class="increment"/>
-        </id>
-    </class>
-</hibernate-mapping>
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/bytecode/hammer.hbm.xml (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/bytecode/hammer.hbm.xml)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/bytecode/hammer.hbm.xml	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/bytecode/hammer.hbm.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<!DOCTYPE hibernate-mapping PUBLIC
+        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+
+<hibernate-mapping package="org.hibernate.test.annotations.bytecode">
+    <class name="Hammer">
+        <id name="id" type="java.lang.Long">
+            <generator class="increment"/>
+        </id>
+    </class>
+</hibernate-mapping>
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cascade (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cascade)

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cascade/CascadeTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cascade/CascadeTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cascade/CascadeTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,115 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.cascade;
-
-import java.util.ArrayList;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-import org.hibernate.test.annotations.TestCase;
-
-/**
- * Check some of the individual cascade styles
- *
- * @author Emmanuel Bernard
- */
-//FIXME do somthing for refresh
-public class CascadeTest extends TestCase {
-	public void testPersist() {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		Tooth tooth = new Tooth();
-		Tooth leftTooth = new Tooth();
-		tooth.leftNeighbour = leftTooth;
-		s.persist( tooth );
-		tx = s.beginTransaction();
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		leftTooth = (Tooth) s.get( Tooth.class, leftTooth.id );
-		assertNotNull( leftTooth );
-		tx.commit();
-		s.close();
-	}
-
-	public void testMerge() {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		Tooth tooth = new Tooth();
-		Tooth rightTooth = new Tooth();
-		tooth.type = "canine";
-		tooth.rightNeighbour = rightTooth;
-		rightTooth.type = "incisive";
-		s.persist( rightTooth );
-		s.persist( tooth );
-		tx = s.beginTransaction();
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		tooth = (Tooth) s.get( Tooth.class, tooth.id );
-		assertEquals( "incisive", tooth.rightNeighbour.type );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		tooth.rightNeighbour.type = "premolars";
-		s.merge( tooth );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		rightTooth = (Tooth) s.get( Tooth.class, rightTooth.id );
-		assertEquals( "premolars", rightTooth.type );
-		tx.commit();
-		s.close();
-	}
-
-	public void testRemove() {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		Tooth tooth = new Tooth();
-		Mouth mouth = new Mouth();
-		s.persist( mouth );
-		s.persist( tooth );
-		tooth.mouth = mouth;
-		mouth.teeth = new ArrayList<Tooth>();
-		mouth.teeth.add( tooth );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		tooth = (Tooth) s.get( Tooth.class, tooth.id );
-		assertNotNull( tooth );
-		s.delete( tooth.mouth );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		tooth = (Tooth) s.get( Tooth.class, tooth.id );
-		assertNull( tooth );
-		tx.commit();
-		s.close();
-	}
-
-	public CascadeTest(String x) {
-		super( x );
-	}
-
-	protected Class[] getMappings() {
-		return new Class[]{
-				Mouth.class,
-				Tooth.class
-		};
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cascade/CascadeTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cascade/CascadeTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cascade/CascadeTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cascade/CascadeTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,115 @@
+//$Id$
+package org.hibernate.test.annotations.cascade;
+
+import java.util.ArrayList;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * Check some of the individual cascade styles
+ *
+ * @author Emmanuel Bernard
+ */
+//FIXME do somthing for refresh
+public class CascadeTest extends TestCase {
+	public void testPersist() {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		Tooth tooth = new Tooth();
+		Tooth leftTooth = new Tooth();
+		tooth.leftNeighbour = leftTooth;
+		s.persist( tooth );
+		tx = s.beginTransaction();
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		leftTooth = (Tooth) s.get( Tooth.class, leftTooth.id );
+		assertNotNull( leftTooth );
+		tx.commit();
+		s.close();
+	}
+
+	public void testMerge() {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		Tooth tooth = new Tooth();
+		Tooth rightTooth = new Tooth();
+		tooth.type = "canine";
+		tooth.rightNeighbour = rightTooth;
+		rightTooth.type = "incisive";
+		s.persist( rightTooth );
+		s.persist( tooth );
+		tx = s.beginTransaction();
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		tooth = (Tooth) s.get( Tooth.class, tooth.id );
+		assertEquals( "incisive", tooth.rightNeighbour.type );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		tooth.rightNeighbour.type = "premolars";
+		s.merge( tooth );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		rightTooth = (Tooth) s.get( Tooth.class, rightTooth.id );
+		assertEquals( "premolars", rightTooth.type );
+		tx.commit();
+		s.close();
+	}
+
+	public void testRemove() {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		Tooth tooth = new Tooth();
+		Mouth mouth = new Mouth();
+		s.persist( mouth );
+		s.persist( tooth );
+		tooth.mouth = mouth;
+		mouth.teeth = new ArrayList<Tooth>();
+		mouth.teeth.add( tooth );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		tooth = (Tooth) s.get( Tooth.class, tooth.id );
+		assertNotNull( tooth );
+		s.delete( tooth.mouth );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		tooth = (Tooth) s.get( Tooth.class, tooth.id );
+		assertNull( tooth );
+		tx.commit();
+		s.close();
+	}
+
+	public CascadeTest(String x) {
+		super( x );
+	}
+
+	protected Class[] getMappings() {
+		return new Class[]{
+				Mouth.class,
+				Tooth.class
+		};
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cascade/Mouth.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cascade/Mouth.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cascade/Mouth.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,22 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.cascade;
-
-import java.util.Collection;
-import javax.persistence.CascadeType;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.OneToMany;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Mouth {
-	@Id
-	@GeneratedValue
-	public Integer id;
-	public int size;
-	@OneToMany(mappedBy = "mouth", cascade = CascadeType.REMOVE)
-	public Collection<Tooth> teeth;
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cascade/Mouth.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cascade/Mouth.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cascade/Mouth.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cascade/Mouth.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,22 @@
+//$Id$
+package org.hibernate.test.annotations.cascade;
+
+import java.util.Collection;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Mouth {
+	@Id
+	@GeneratedValue
+	public Integer id;
+	public int size;
+	@OneToMany(mappedBy = "mouth", cascade = CascadeType.REMOVE)
+	public Collection<Tooth> teeth;
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cascade/Tooth.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cascade/Tooth.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cascade/Tooth.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,25 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.cascade;
-
-import javax.persistence.CascadeType;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.ManyToOne;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Tooth {
-	@Id
-	@GeneratedValue
-	public Integer id;
-	public String type;
-	@ManyToOne(cascade = CascadeType.PERSIST)
-	public Tooth leftNeighbour;
-	@ManyToOne(cascade = CascadeType.MERGE)
-	public Tooth rightNeighbour;
-	@ManyToOne
-	public Mouth mouth;
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cascade/Tooth.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cascade/Tooth.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cascade/Tooth.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cascade/Tooth.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,25 @@
+//$Id$
+package org.hibernate.test.annotations.cascade;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Tooth {
+	@Id
+	@GeneratedValue
+	public Integer id;
+	public String type;
+	@ManyToOne(cascade = CascadeType.PERSIST)
+	public Tooth leftNeighbour;
+	@ManyToOne(cascade = CascadeType.MERGE)
+	public Tooth rightNeighbour;
+	@ManyToOne
+	public Mouth mouth;
+}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid)

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/Channel.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/Channel.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/Channel.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,16 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.cid;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Channel {
-	@Id
-	@GeneratedValue
-	public Integer id;
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/Channel.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/Channel.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/Channel.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/Channel.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,16 @@
+//$Id: $
+package org.hibernate.test.annotations.cid;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Channel {
+	@Id
+	@GeneratedValue
+	public Integer id;
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/Child.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/Child.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/Child.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,19 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.cid;
-
-import javax.persistence.AttributeOverride;
-import javax.persistence.Column;
-import javax.persistence.EmbeddedId;
-import javax.persistence.Entity;
-
-/**
- * Entity having a many to one in its pk
- *
- * @author Emmanuel Bernard
- */
- at Entity
-public class Child {
-	@EmbeddedId
-	@AttributeOverride(name = "nthChild", column = @Column(name = "nth"))
-	public ChildPk id;
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/Child.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/Child.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/Child.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/Child.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,19 @@
+//$Id$
+package org.hibernate.test.annotations.cid;
+
+import javax.persistence.AttributeOverride;
+import javax.persistence.Column;
+import javax.persistence.EmbeddedId;
+import javax.persistence.Entity;
+
+/**
+ * Entity having a many to one in its pk
+ *
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Child {
+	@EmbeddedId
+	@AttributeOverride(name = "nthChild", column = @Column(name = "nth"))
+	public ChildPk id;
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/ChildPk.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/ChildPk.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/ChildPk.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,43 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.cid;
-
-import java.io.Serializable;
-import javax.persistence.Embeddable;
-import javax.persistence.JoinColumn;
-import javax.persistence.JoinColumns;
-import javax.persistence.ManyToOne;
-
-/**
- * Child Pk with many to one inside
- *
- * @author Emmanuel Bernard
- */
- at Embeddable
-public class ChildPk implements Serializable {
-	public int nthChild;
-	@ManyToOne()
-	@JoinColumns({
-	@JoinColumn(name = "parentLastName", referencedColumnName = "p_lname"),
-	@JoinColumn(name = "parentFirstName", referencedColumnName = "firstName")
-			})
-	public Parent parent;
-
-	public boolean equals(Object o) {
-		if ( this == o ) return true;
-		if ( !( o instanceof ChildPk ) ) return false;
-
-		final ChildPk childPk = (ChildPk) o;
-
-		if ( nthChild != childPk.nthChild ) return false;
-		if ( !parent.equals( childPk.parent ) ) return false;
-
-		return true;
-	}
-
-	public int hashCode() {
-		int result;
-		result = nthChild;
-		result = 29 * result + parent.hashCode();
-		return result;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/ChildPk.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/ChildPk.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/ChildPk.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/ChildPk.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,43 @@
+//$Id$
+package org.hibernate.test.annotations.cid;
+
+import java.io.Serializable;
+import javax.persistence.Embeddable;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinColumns;
+import javax.persistence.ManyToOne;
+
+/**
+ * Child Pk with many to one inside
+ *
+ * @author Emmanuel Bernard
+ */
+ at Embeddable
+public class ChildPk implements Serializable {
+	public int nthChild;
+	@ManyToOne()
+	@JoinColumns({
+	@JoinColumn(name = "parentLastName", referencedColumnName = "p_lname"),
+	@JoinColumn(name = "parentFirstName", referencedColumnName = "firstName")
+			})
+	public Parent parent;
+
+	public boolean equals(Object o) {
+		if ( this == o ) return true;
+		if ( !( o instanceof ChildPk ) ) return false;
+
+		final ChildPk childPk = (ChildPk) o;
+
+		if ( nthChild != childPk.nthChild ) return false;
+		if ( !parent.equals( childPk.parent ) ) return false;
+
+		return true;
+	}
+
+	public int hashCode() {
+		int result;
+		result = nthChild;
+		result = 29 * result + parent.hashCode();
+		return result;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/CompositeIdTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/CompositeIdTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/CompositeIdTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,139 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.cid;
-
-import java.util.Date;
-import java.util.List;
-
-import org.hibernate.Query;
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-import org.hibernate.test.annotations.TestCase;
-import org.hibernate.test.annotations.cid.OrderLine;
-import org.hibernate.test.annotations.cid.Order;
-import org.hibernate.test.annotations.cid.Product;
-import org.hibernate.test.annotations.cid.OrderLinePk;
-
-/**
- * test some composite id functionalities
- *
- * @author Emmanuel Bernard
- */
-public class CompositeIdTest extends TestCase {
-	public CompositeIdTest(String x) {
-		super( x );
-	}
-
-	/**
-	 * This feature is not supported by the EJB3
-	 * this is an hibernate extension
-	 */
-	public void testManyToOneInCompositePk() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		ParentPk ppk = new ParentPk();
-		ppk.setFirstName( "Emmanuel" );
-		ppk.setLastName( "Bernard" );
-		Parent p = new Parent();
-		p.id = ppk;
-		s.persist( p );
-		ChildPk cpk = new ChildPk();
-		cpk.parent = p;
-		cpk.nthChild = 1;
-		Child c = new Child();
-		c.id = cpk;
-		s.persist( c );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		Query q = s.createQuery( "select c from Child c where c.id.nthChild = :nth" );
-		q.setInteger( "nth", 1 );
-		List results = q.list();
-		assertEquals( 1, results.size() );
-		c = (Child) results.get( 0 );
-		assertNotNull( c );
-		assertNotNull( c.id.parent );
-		//FIXME mke it work in unambigious cases
-//		assertNotNull(c.id.parent.id);
-//		assertEquals(p.id.getFirstName(), c.id.parent.id.getFirstName());
-		tx.commit();
-		s.close();
-	}
-
-	public void testManyToOneInCompositeId() throws Exception {
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		Channel channel = new Channel();
-		s.persist( channel );
-		Presenter pres = new Presenter();
-		pres.name = "Casimir";
-		s.persist( pres );
-		TvMagazinPk pk = new TvMagazinPk();
-		TvMagazin mag = new TvMagazin();
-		mag.time = new Date();
-		mag.id = pk;
-		//pk.name = "Trax";
-		pk.channel = channel;
-		pk.presenter = pres;
-		s.persist( mag );
-		tx.commit();
-		s.clear();
-		tx = s.beginTransaction();
-		mag = (TvMagazin) s.createQuery( "from TvMagazin mag" ) // where mag.id.name = :name")
-				//.setParameter( "name", "Trax" )
-				.uniqueResult();
-		assertNotNull( mag.id );
-		assertNotNull( mag.id.channel );
-		assertEquals( channel.id, mag.id.channel.id );
-		assertNotNull( mag.id.presenter );
-		assertEquals( pres.name, mag.id.presenter.name );
-		s.delete( mag );
-		s.delete( mag.id.channel );
-		s.delete( mag.id.presenter );
-		tx.commit();
-		s.close();
-	}
-
-	public void testManyToOneInCompositeIdClass() throws Exception {
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		Order order = new Order();
-		s.persist( order );
-		Product product = new Product();
-		product.name = "small car";
-		s.persist( product );
-		OrderLinePk pk = new OrderLinePk();
-		OrderLine orderLine = new OrderLine();
-		orderLine.order = order;
-		orderLine.product = product;
-		s.persist(orderLine);
-		s.flush();
-		s.clear();
-
-		orderLine = (OrderLine) s.createQuery( "select ol from OrderLine ol" ).uniqueResult();
-		assertNotNull( orderLine.order );
-		assertEquals( order.id, orderLine.order.id );
-		assertNotNull( orderLine.product );
-		assertEquals( product.name, orderLine.product.name );
-		
-		tx.rollback();
-		s.close();
-	}
-
-	protected Class[] getMappings() {
-		return new Class[]{
-				Parent.class,
-				Child.class,
-				Channel.class,
-				TvMagazin.class,
-				Presenter.class,
-                Order.class,
-                Product.class,
-                OrderLine.class,
-                OrderLinePk.class
-        };
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/CompositeIdTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/CompositeIdTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/CompositeIdTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/CompositeIdTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,139 @@
+//$Id$
+package org.hibernate.test.annotations.cid;
+
+import java.util.Date;
+import java.util.List;
+
+import org.hibernate.Query;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.TestCase;
+import org.hibernate.test.annotations.cid.OrderLine;
+import org.hibernate.test.annotations.cid.Order;
+import org.hibernate.test.annotations.cid.Product;
+import org.hibernate.test.annotations.cid.OrderLinePk;
+
+/**
+ * test some composite id functionalities
+ *
+ * @author Emmanuel Bernard
+ */
+public class CompositeIdTest extends TestCase {
+	public CompositeIdTest(String x) {
+		super( x );
+	}
+
+	/**
+	 * This feature is not supported by the EJB3
+	 * this is an hibernate extension
+	 */
+	public void testManyToOneInCompositePk() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		ParentPk ppk = new ParentPk();
+		ppk.setFirstName( "Emmanuel" );
+		ppk.setLastName( "Bernard" );
+		Parent p = new Parent();
+		p.id = ppk;
+		s.persist( p );
+		ChildPk cpk = new ChildPk();
+		cpk.parent = p;
+		cpk.nthChild = 1;
+		Child c = new Child();
+		c.id = cpk;
+		s.persist( c );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		Query q = s.createQuery( "select c from Child c where c.id.nthChild = :nth" );
+		q.setInteger( "nth", 1 );
+		List results = q.list();
+		assertEquals( 1, results.size() );
+		c = (Child) results.get( 0 );
+		assertNotNull( c );
+		assertNotNull( c.id.parent );
+		//FIXME mke it work in unambigious cases
+//		assertNotNull(c.id.parent.id);
+//		assertEquals(p.id.getFirstName(), c.id.parent.id.getFirstName());
+		tx.commit();
+		s.close();
+	}
+
+	public void testManyToOneInCompositeId() throws Exception {
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		Channel channel = new Channel();
+		s.persist( channel );
+		Presenter pres = new Presenter();
+		pres.name = "Casimir";
+		s.persist( pres );
+		TvMagazinPk pk = new TvMagazinPk();
+		TvMagazin mag = new TvMagazin();
+		mag.time = new Date();
+		mag.id = pk;
+		//pk.name = "Trax";
+		pk.channel = channel;
+		pk.presenter = pres;
+		s.persist( mag );
+		tx.commit();
+		s.clear();
+		tx = s.beginTransaction();
+		mag = (TvMagazin) s.createQuery( "from TvMagazin mag" ) // where mag.id.name = :name")
+				//.setParameter( "name", "Trax" )
+				.uniqueResult();
+		assertNotNull( mag.id );
+		assertNotNull( mag.id.channel );
+		assertEquals( channel.id, mag.id.channel.id );
+		assertNotNull( mag.id.presenter );
+		assertEquals( pres.name, mag.id.presenter.name );
+		s.delete( mag );
+		s.delete( mag.id.channel );
+		s.delete( mag.id.presenter );
+		tx.commit();
+		s.close();
+	}
+
+	public void testManyToOneInCompositeIdClass() throws Exception {
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		Order order = new Order();
+		s.persist( order );
+		Product product = new Product();
+		product.name = "small car";
+		s.persist( product );
+		OrderLinePk pk = new OrderLinePk();
+		OrderLine orderLine = new OrderLine();
+		orderLine.order = order;
+		orderLine.product = product;
+		s.persist(orderLine);
+		s.flush();
+		s.clear();
+
+		orderLine = (OrderLine) s.createQuery( "select ol from OrderLine ol" ).uniqueResult();
+		assertNotNull( orderLine.order );
+		assertEquals( order.id, orderLine.order.id );
+		assertNotNull( orderLine.product );
+		assertEquals( product.name, orderLine.product.name );
+		
+		tx.rollback();
+		s.close();
+	}
+
+	protected Class[] getMappings() {
+		return new Class[]{
+				Parent.class,
+				Child.class,
+				Channel.class,
+				TvMagazin.class,
+				Presenter.class,
+                Order.class,
+                Product.class,
+                OrderLine.class,
+                OrderLinePk.class
+        };
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/Order.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/Order.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/Order.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,17 +0,0 @@
-package org.hibernate.test.annotations.cid;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Table;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Table(name = "OrderTableFoobar")
-public class Order {
-	@Id
-    @GeneratedValue
-    public Integer id;
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/Order.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/Order.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/Order.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/Order.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,17 @@
+package org.hibernate.test.annotations.cid;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Table;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Table(name = "OrderTableFoobar")
+public class Order {
+	@Id
+    @GeneratedValue
+    public Integer id;
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/OrderLine.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/OrderLine.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/OrderLine.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,17 +0,0 @@
-package org.hibernate.test.annotations.cid;
-
-import javax.persistence.Entity;
-import javax.persistence.IdClass;
-import javax.persistence.Id;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at IdClass(OrderLinePk.class)
-public class OrderLine {
-    @Id
-    public Order order;
-    @Id
-    public Product product;
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/OrderLine.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/OrderLine.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/OrderLine.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/OrderLine.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,17 @@
+package org.hibernate.test.annotations.cid;
+
+import javax.persistence.Entity;
+import javax.persistence.IdClass;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at IdClass(OrderLinePk.class)
+public class OrderLine {
+    @Id
+    public Order order;
+    @Id
+    public Product product;
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/OrderLinePk.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/OrderLinePk.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/OrderLinePk.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,18 +0,0 @@
-package org.hibernate.test.annotations.cid;
-
-
-import javax.persistence.ManyToOne;
-import javax.persistence.JoinColumn;
-import java.io.Serializable;
-
-/**
- * @author Emmanuel Bernard
- */
-public class OrderLinePk implements Serializable {
-	@ManyToOne
-    @JoinColumn(name = "foo", nullable = false)
-    public Order order;
-	@ManyToOne
-    @JoinColumn(name = "bar", nullable = false)
-    public Product product;    
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/OrderLinePk.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/OrderLinePk.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/OrderLinePk.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/OrderLinePk.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,18 @@
+package org.hibernate.test.annotations.cid;
+
+
+import javax.persistence.ManyToOne;
+import javax.persistence.JoinColumn;
+import java.io.Serializable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class OrderLinePk implements Serializable {
+	@ManyToOne
+    @JoinColumn(name = "foo", nullable = false)
+    public Order order;
+	@ManyToOne
+    @JoinColumn(name = "bar", nullable = false)
+    public Product product;    
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/Parent.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/Parent.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/Parent.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,31 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.cid;
-
-import javax.persistence.EmbeddedId;
-import javax.persistence.Entity;
-
-/**
- * Entity with composite id
- *
- * @author Emmanuel Bernard
- */
- at Entity
-public class Parent {
-	@EmbeddedId
-	public ParentPk id;
-
-	public boolean equals(Object o) {
-		if ( this == o ) return true;
-		if ( !( o instanceof Parent ) ) return false;
-
-		final Parent parent = (Parent) o;
-
-		if ( !id.equals( parent.id ) ) return false;
-
-		return true;
-	}
-
-	public int hashCode() {
-		return id.hashCode();
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/Parent.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/Parent.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/Parent.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/Parent.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,31 @@
+//$Id$
+package org.hibernate.test.annotations.cid;
+
+import javax.persistence.EmbeddedId;
+import javax.persistence.Entity;
+
+/**
+ * Entity with composite id
+ *
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Parent {
+	@EmbeddedId
+	public ParentPk id;
+
+	public boolean equals(Object o) {
+		if ( this == o ) return true;
+		if ( !( o instanceof Parent ) ) return false;
+
+		final Parent parent = (Parent) o;
+
+		if ( !id.equals( parent.id ) ) return false;
+
+		return true;
+	}
+
+	public int hashCode() {
+		return id.hashCode();
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/ParentPk.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/ParentPk.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/ParentPk.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,52 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.cid;
-
-import java.io.Serializable;
-import javax.persistence.Column;
-
-/**
- * @author Emmanuel Bernard
- */
-
-public class ParentPk implements Serializable {
-	public String getFirstName() {
-		return firstName;
-	}
-
-	public void setFirstName(String firstName) {
-		this.firstName = firstName;
-	}
-
-
-	public String getLastName() {
-		return lastName;
-	}
-
-	public void setLastName(String lastName) {
-		this.lastName = lastName;
-	}
-
-
-	private String firstName;
-	@Column(name = "p_lname")
-	private String lastName;
-
-	public boolean equals(Object o) {
-		if ( this == o ) return true;
-		if ( !( o instanceof ParentPk ) ) return false;
-
-		final ParentPk parentPk = (ParentPk) o;
-
-		if ( !firstName.equals( parentPk.firstName ) ) return false;
-		if ( !lastName.equals( parentPk.lastName ) ) return false;
-
-		return true;
-	}
-
-	public int hashCode() {
-		int result;
-		result = firstName.hashCode();
-		result = 29 * result + lastName.hashCode();
-		return result;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/ParentPk.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/ParentPk.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/ParentPk.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/ParentPk.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,52 @@
+//$Id$
+package org.hibernate.test.annotations.cid;
+
+import java.io.Serializable;
+import javax.persistence.Column;
+
+/**
+ * @author Emmanuel Bernard
+ */
+
+public class ParentPk implements Serializable {
+	public String getFirstName() {
+		return firstName;
+	}
+
+	public void setFirstName(String firstName) {
+		this.firstName = firstName;
+	}
+
+
+	public String getLastName() {
+		return lastName;
+	}
+
+	public void setLastName(String lastName) {
+		this.lastName = lastName;
+	}
+
+
+	private String firstName;
+	@Column(name = "p_lname")
+	private String lastName;
+
+	public boolean equals(Object o) {
+		if ( this == o ) return true;
+		if ( !( o instanceof ParentPk ) ) return false;
+
+		final ParentPk parentPk = (ParentPk) o;
+
+		if ( !firstName.equals( parentPk.firstName ) ) return false;
+		if ( !lastName.equals( parentPk.lastName ) ) return false;
+
+		return true;
+	}
+
+	public int hashCode() {
+		int result;
+		result = firstName.hashCode();
+		result = 29 * result + lastName.hashCode();
+		return result;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/Presenter.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/Presenter.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/Presenter.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,14 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.cid;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Presenter {
-	@Id
-	public String name;
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/Presenter.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/Presenter.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/Presenter.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/Presenter.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,14 @@
+//$Id: $
+package org.hibernate.test.annotations.cid;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Presenter {
+	@Id
+	public String name;
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/Product.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/Product.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/Product.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,13 +0,0 @@
-package org.hibernate.test.annotations.cid;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Product {
-	@Id
-    public String name;
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/Product.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/Product.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/Product.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/Product.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,13 @@
+package org.hibernate.test.annotations.cid;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Product {
+	@Id
+    public String name;
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/TvMagazin.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/TvMagazin.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/TvMagazin.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,22 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.cid;
-
-import java.util.Date;
-import javax.persistence.AssociationOverride;
-import javax.persistence.EmbeddedId;
-import javax.persistence.Entity;
-import javax.persistence.JoinColumn;
-import javax.persistence.Temporal;
-import javax.persistence.TemporalType;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at AssociationOverride(name = "id.channel", joinColumns = @JoinColumn(name = "chan_id"))
-public class TvMagazin {
-	@EmbeddedId
-	public TvMagazinPk id;
-	@Temporal(TemporalType.TIME)
-	Date time;
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/TvMagazin.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/TvMagazin.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/TvMagazin.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/TvMagazin.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,22 @@
+//$Id: $
+package org.hibernate.test.annotations.cid;
+
+import java.util.Date;
+import javax.persistence.AssociationOverride;
+import javax.persistence.EmbeddedId;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at AssociationOverride(name = "id.channel", joinColumns = @JoinColumn(name = "chan_id"))
+public class TvMagazin {
+	@EmbeddedId
+	public TvMagazinPk id;
+	@Temporal(TemporalType.TIME)
+	Date time;
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/TvMagazinPk.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/TvMagazinPk.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/TvMagazinPk.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,18 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.cid;
-
-import java.io.Serializable;
-import javax.persistence.Embeddable;
-import javax.persistence.ManyToOne;
-
-/**
- * @author Emmanuel Bernard
- */
- at Embeddable
-public class TvMagazinPk implements Serializable {
-	@ManyToOne
-	public Channel channel;
-	//public String name;
-	@ManyToOne
-	public Presenter presenter;
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/TvMagazinPk.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/TvMagazinPk.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/TvMagazinPk.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/TvMagazinPk.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,18 @@
+//$Id: $
+package org.hibernate.test.annotations.cid;
+
+import java.io.Serializable;
+import javax.persistence.Embeddable;
+import javax.persistence.ManyToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Embeddable
+public class TvMagazinPk implements Serializable {
+	@ManyToOne
+	public Channel channel;
+	//public String name;
+	@ManyToOne
+	public Presenter presenter;
+}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement)

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement/Boy.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement/Boy.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement/Boy.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,134 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.collectionelement;
-
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-import javax.persistence.AttributeOverride;
-import javax.persistence.AttributeOverrides;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.JoinTable;
-
-import org.hibernate.annotations.CollectionOfElements;
-import org.hibernate.annotations.IndexColumn;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at AttributeOverrides({
-		@AttributeOverride( name="characters.element", column = @Column(name="fld_character") ),
-		@AttributeOverride( name="scorePerNickName.element", column = @Column(name="fld_score") ),
-		@AttributeOverride( name="favoriteToys.element.brand.surname", column = @Column(name = "fld_surname"))}
-)
-public class Boy {
-	private Integer id;
-	private String firstName;
-	private String lastName;
-	private Set<String> nickNames = new HashSet<String>();
-	private Map<String, Integer> scorePerNickName = new HashMap<String, Integer>();
-	private int[] favoriteNumbers;
-	private Set<Toy> favoriteToys = new HashSet<Toy>();
-	private Set<Character> characters = new HashSet<Character>();
-	private Set<CountryAttitude> countryAttitudes = new HashSet<CountryAttitude>();
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getFirstName() {
-		return firstName;
-	}
-
-	public void setFirstName(String firstName) {
-		this.firstName = firstName;
-	}
-
-	public String getLastName() {
-		return lastName;
-	}
-
-	public void setLastName(String lastName) {
-		this.lastName = lastName;
-	}
-
-	@CollectionOfElements
-	public Set<String> getNickNames() {
-		return nickNames;
-	}
-
-	public void setNickNames(Set<String> nickName) {
-		this.nickNames = nickName;
-	}
-
-	@CollectionOfElements
-	@JoinTable(name = "ScorePerNickName", joinColumns = @JoinColumn(name = "BoyId"))
-	@Column(name = "score", nullable = false)
-	public Map<String, Integer> getScorePerNickName() {
-		return scorePerNickName;
-	}
-
-	public void setScorePerNickName(Map<String, Integer> scorePerNickName) {
-		this.scorePerNickName = scorePerNickName;
-	}
-
-	@CollectionOfElements
-	@JoinTable(
-			name = "BoyFavoriteNumbers",
-			joinColumns = @JoinColumn(name = "BoyId")
-	)
-	@Column(name = "favoriteNumber", nullable = false)
-	@IndexColumn(name = "nbr_index")
-	public int[] getFavoriteNumbers() {
-		return favoriteNumbers;
-	}
-
-	public void setFavoriteNumbers(int[] favoriteNumbers) {
-		this.favoriteNumbers = favoriteNumbers;
-	}
-
-	@CollectionOfElements
-	@AttributeOverride(name = "element.serial", column = @Column(name = "serial_nbr"))
-	public Set<Toy> getFavoriteToys() {
-		return favoriteToys;
-	}
-
-	public void setFavoriteToys(Set<Toy> favoriteToys) {
-		this.favoriteToys = favoriteToys;
-	}
-
-	@CollectionOfElements
-	@Enumerated(EnumType.STRING)
-	public Set<Character> getCharacters() {
-		return characters;
-	}
-
-	public void setCharacters(Set<Character> characters) {
-		this.characters = characters;
-	}
-
-	@CollectionOfElements(fetch = FetchType.EAGER)
-	//@Where(clause = "b_likes=false")
-	public Set<CountryAttitude> getCountryAttitudes() {
-		return countryAttitudes;
-	}
-
-	public void setCountryAttitudes(Set<CountryAttitude> countryAttitudes) {
-		this.countryAttitudes = countryAttitudes;
-	}
-}
-

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement/Boy.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement/Boy.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement/Boy.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement/Boy.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,134 @@
+//$Id$
+package org.hibernate.test.annotations.collectionelement;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import javax.persistence.AttributeOverride;
+import javax.persistence.AttributeOverrides;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
+
+import org.hibernate.annotations.CollectionOfElements;
+import org.hibernate.annotations.IndexColumn;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at AttributeOverrides({
+		@AttributeOverride( name="characters.element", column = @Column(name="fld_character") ),
+		@AttributeOverride( name="scorePerNickName.element", column = @Column(name="fld_score") ),
+		@AttributeOverride( name="favoriteToys.element.brand.surname", column = @Column(name = "fld_surname"))}
+)
+public class Boy {
+	private Integer id;
+	private String firstName;
+	private String lastName;
+	private Set<String> nickNames = new HashSet<String>();
+	private Map<String, Integer> scorePerNickName = new HashMap<String, Integer>();
+	private int[] favoriteNumbers;
+	private Set<Toy> favoriteToys = new HashSet<Toy>();
+	private Set<Character> characters = new HashSet<Character>();
+	private Set<CountryAttitude> countryAttitudes = new HashSet<CountryAttitude>();
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getFirstName() {
+		return firstName;
+	}
+
+	public void setFirstName(String firstName) {
+		this.firstName = firstName;
+	}
+
+	public String getLastName() {
+		return lastName;
+	}
+
+	public void setLastName(String lastName) {
+		this.lastName = lastName;
+	}
+
+	@CollectionOfElements
+	public Set<String> getNickNames() {
+		return nickNames;
+	}
+
+	public void setNickNames(Set<String> nickName) {
+		this.nickNames = nickName;
+	}
+
+	@CollectionOfElements
+	@JoinTable(name = "ScorePerNickName", joinColumns = @JoinColumn(name = "BoyId"))
+	@Column(name = "score", nullable = false)
+	public Map<String, Integer> getScorePerNickName() {
+		return scorePerNickName;
+	}
+
+	public void setScorePerNickName(Map<String, Integer> scorePerNickName) {
+		this.scorePerNickName = scorePerNickName;
+	}
+
+	@CollectionOfElements
+	@JoinTable(
+			name = "BoyFavoriteNumbers",
+			joinColumns = @JoinColumn(name = "BoyId")
+	)
+	@Column(name = "favoriteNumber", nullable = false)
+	@IndexColumn(name = "nbr_index")
+	public int[] getFavoriteNumbers() {
+		return favoriteNumbers;
+	}
+
+	public void setFavoriteNumbers(int[] favoriteNumbers) {
+		this.favoriteNumbers = favoriteNumbers;
+	}
+
+	@CollectionOfElements
+	@AttributeOverride(name = "element.serial", column = @Column(name = "serial_nbr"))
+	public Set<Toy> getFavoriteToys() {
+		return favoriteToys;
+	}
+
+	public void setFavoriteToys(Set<Toy> favoriteToys) {
+		this.favoriteToys = favoriteToys;
+	}
+
+	@CollectionOfElements
+	@Enumerated(EnumType.STRING)
+	public Set<Character> getCharacters() {
+		return characters;
+	}
+
+	public void setCharacters(Set<Character> characters) {
+		this.characters = characters;
+	}
+
+	@CollectionOfElements(fetch = FetchType.EAGER)
+	//@Where(clause = "b_likes=false")
+	public Set<CountryAttitude> getCountryAttitudes() {
+		return countryAttitudes;
+	}
+
+	public void setCountryAttitudes(Set<CountryAttitude> countryAttitudes) {
+		this.countryAttitudes = countryAttitudes;
+	}
+}
+

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement/Brand.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement/Brand.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement/Brand.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,44 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.collectionelement;
-
-import javax.persistence.Embeddable;
-
-/**
- * @author Emmanuel Bernard
- */
- at Embeddable
-public class Brand {
-	private String name;
-	private String surname;
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	public String getSurname() {
-		return surname;
-	}
-
-	public void setSurname(String surname) {
-		this.surname = surname;
-	}
-
-	public boolean equals(Object o) {
-		if ( this == o ) return true;
-		if ( o == null || getClass() != o.getClass() ) return false;
-
-		final Brand brand = (Brand) o;
-
-		if ( !name.equals( brand.name ) ) return false;
-
-		return true;
-	}
-
-	public int hashCode() {
-		return name.hashCode();
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement/Brand.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement/Brand.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement/Brand.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement/Brand.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,44 @@
+//$Id$
+package org.hibernate.test.annotations.collectionelement;
+
+import javax.persistence.Embeddable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Embeddable
+public class Brand {
+	private String name;
+	private String surname;
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getSurname() {
+		return surname;
+	}
+
+	public void setSurname(String surname) {
+		this.surname = surname;
+	}
+
+	public boolean equals(Object o) {
+		if ( this == o ) return true;
+		if ( o == null || getClass() != o.getClass() ) return false;
+
+		final Brand brand = (Brand) o;
+
+		if ( !name.equals( brand.name ) ) return false;
+
+		return true;
+	}
+
+	public int hashCode() {
+		return name.hashCode();
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement/Character.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement/Character.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement/Character.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,13 +0,0 @@
-package org.hibernate.test.annotations.collectionelement;
-
-/**
- * @author Emmanuel Bernard
- */
-public enum Character {
-	GENTLE,
-	NORMAL,
-	AGGRESSIVE,
-	ATTENTIVE,
-	VIOLENT,
-	CRAFTY
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement/Character.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement/Character.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement/Character.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement/Character.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,13 @@
+package org.hibernate.test.annotations.collectionelement;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public enum Character {
+	GENTLE,
+	NORMAL,
+	AGGRESSIVE,
+	ATTENTIVE,
+	VIOLENT,
+	CRAFTY
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement/CollectionElementTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement/CollectionElementTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement/CollectionElementTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,164 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.collectionelement;
-
-import java.util.List;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-import org.hibernate.test.annotations.Country;
-import org.hibernate.test.annotations.TestCase;
-
-/**
- * @author Emmanuel Bernard
- */
-public class CollectionElementTest extends TestCase {
-
-	public void testSimpleElement() throws Exception {
-		assertEquals(
-				"BoyFavoriteNumbers",
-				getCfg().getCollectionMapping( Boy.class.getName() + '.' + "favoriteNumbers" )
-						.getCollectionTable().getName()
-		);
-		Session s = openSession();
-		s.getTransaction().begin();
-		Boy boy = new Boy();
-		boy.setFirstName( "John" );
-		boy.setLastName( "Doe" );
-		boy.getNickNames().add( "Johnny" );
-		boy.getNickNames().add( "Thing" );
-		boy.getScorePerNickName().put( "Johnny", new Integer( 3 ) );
-		boy.getScorePerNickName().put( "Thing", new Integer( 5 ) );
-		int[] favNbrs = new int[4];
-		for ( int index = 0; index < favNbrs.length - 1; index++ ) {
-			favNbrs[index] = index * 3;
-		}
-		boy.setFavoriteNumbers( favNbrs );
-		boy.getCharacters().add( Character.GENTLE );
-		boy.getCharacters().add( Character.CRAFTY );
-		s.persist( boy );
-		s.getTransaction().commit();
-		s.clear();
-		Transaction tx = s.beginTransaction();
-		boy = (Boy) s.get( Boy.class, boy.getId() );
-		assertNotNull( boy.getNickNames() );
-		assertTrue( boy.getNickNames().contains( "Thing" ) );
-		assertNotNull( boy.getScorePerNickName() );
-		assertTrue( boy.getScorePerNickName().containsKey( "Thing" ) );
-		assertEquals( new Integer( 5 ), boy.getScorePerNickName().get( "Thing" ) );
-		assertNotNull( boy.getFavoriteNumbers() );
-		assertEquals( 3, boy.getFavoriteNumbers()[1] );
-		assertTrue( boy.getCharacters().contains( Character.CRAFTY ) );
-		List result = s.createQuery( "select boy from Boy boy join boy.nickNames names where names = :name" )
-				.setParameter( "name", "Thing" ).list();
-		assertEquals( 1, result.size() );
-		s.delete( boy );
-		tx.commit();
-		s.close();
-	}
-
-	public void testCompositeElement() throws Exception {
-		Session s = openSession();
-		s.getTransaction().begin();
-		Boy boy = new Boy();
-		boy.setFirstName( "John" );
-		boy.setLastName( "Doe" );
-		Toy toy = new Toy();
-		toy.setName( "Balloon" );
-		toy.setSerial( "serial001" );
-		toy.setBrand( new Brand() );
-		toy.getBrand().setName( "Bandai" );
-		boy.getFavoriteToys().add( toy );
-		s.persist( boy );
-		s.getTransaction().commit();
-		s.clear();
-		Transaction tx = s.beginTransaction();
-		boy = (Boy) s.get( Boy.class, boy.getId() );
-		assertNotNull( boy.getFavoriteToys() );
-		assertTrue( boy.getFavoriteToys().contains( toy ) );
-		assertEquals( "@Parent is failing", boy, boy.getFavoriteToys().iterator().next().getOwner() );
-		s.delete( boy );
-		tx.commit();
-		s.close();
-	}
-
-	public void testAttributedJoin() throws Exception {
-		Session s = openSession();
-		s.getTransaction().begin();
-		Country country = new Country();
-		country.setName( "Australia" );
-		s.persist( country );
-
-		Boy boy = new Boy();
-		boy.setFirstName( "John" );
-		boy.setLastName( "Doe" );
-		CountryAttitude attitude = new CountryAttitude();
-		// TODO: doesn't work
-		attitude.setBoy( boy );
-		attitude.setCountry( country );
-		attitude.setLikes( true );
-		boy.getCountryAttitudes().add( attitude );
-		s.persist( boy );
-		s.getTransaction().commit();
-		s.clear();
-
-		Transaction tx = s.beginTransaction();
-		boy = (Boy) s.get( Boy.class, boy.getId() );
-		assertTrue( boy.getCountryAttitudes().contains( attitude ) );
-		s.delete( boy );
-		s.delete( s.get( Country.class, country.getId() ) );
-		tx.commit();
-		s.close();
-
-	}
-
-	public void testLazyCollectionofElements() throws Exception {
-		assertEquals(
-				"BoyFavoriteNumbers",
-				getCfg().getCollectionMapping( Boy.class.getName() + '.' + "favoriteNumbers" )
-						.getCollectionTable().getName()
-		);
-		Session s = openSession();
-		s.getTransaction().begin();
-		Boy boy = new Boy();
-		boy.setFirstName( "John" );
-		boy.setLastName( "Doe" );
-		boy.getNickNames().add( "Johnny" );
-		boy.getNickNames().add( "Thing" );
-		boy.getScorePerNickName().put( "Johnny", new Integer( 3 ) );
-		boy.getScorePerNickName().put( "Thing", new Integer( 5 ) );
-		int[] favNbrs = new int[4];
-		for ( int index = 0; index < favNbrs.length - 1; index++ ) {
-			favNbrs[index] = index * 3;
-		}
-		boy.setFavoriteNumbers( favNbrs );
-		boy.getCharacters().add( Character.GENTLE );
-		boy.getCharacters().add( Character.CRAFTY );
-		s.persist( boy );
-		s.getTransaction().commit();
-		s.clear();
-		Transaction tx = s.beginTransaction();
-		boy = (Boy) s.get( Boy.class, boy.getId() );
-		assertNotNull( boy.getNickNames() );
-		assertTrue( boy.getNickNames().contains( "Thing" ) );
-		assertNotNull( boy.getScorePerNickName() );
-		assertTrue( boy.getScorePerNickName().containsKey( "Thing" ) );
-		assertEquals( new Integer( 5 ), boy.getScorePerNickName().get( "Thing" ) );
-		assertNotNull( boy.getFavoriteNumbers() );
-		assertEquals( 3, boy.getFavoriteNumbers()[1] );
-		assertTrue( boy.getCharacters().contains( Character.CRAFTY ) );
-		List result = s.createQuery( "select boy from Boy boy join boy.nickNames names where names = :name" )
-				.setParameter( "name", "Thing" ).list();
-		assertEquals( 1, result.size() );
-		s.delete( boy );
-		tx.commit();
-		s.close();
-	}
-
-
-	protected Class[] getMappings() {
-		return new Class[]{
-				Boy.class,
-				Country.class
-		};
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement/CollectionElementTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement/CollectionElementTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement/CollectionElementTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement/CollectionElementTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,164 @@
+//$Id$
+package org.hibernate.test.annotations.collectionelement;
+
+import java.util.List;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.Country;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class CollectionElementTest extends TestCase {
+
+	public void testSimpleElement() throws Exception {
+		assertEquals(
+				"BoyFavoriteNumbers",
+				getCfg().getCollectionMapping( Boy.class.getName() + '.' + "favoriteNumbers" )
+						.getCollectionTable().getName()
+		);
+		Session s = openSession();
+		s.getTransaction().begin();
+		Boy boy = new Boy();
+		boy.setFirstName( "John" );
+		boy.setLastName( "Doe" );
+		boy.getNickNames().add( "Johnny" );
+		boy.getNickNames().add( "Thing" );
+		boy.getScorePerNickName().put( "Johnny", new Integer( 3 ) );
+		boy.getScorePerNickName().put( "Thing", new Integer( 5 ) );
+		int[] favNbrs = new int[4];
+		for ( int index = 0; index < favNbrs.length - 1; index++ ) {
+			favNbrs[index] = index * 3;
+		}
+		boy.setFavoriteNumbers( favNbrs );
+		boy.getCharacters().add( Character.GENTLE );
+		boy.getCharacters().add( Character.CRAFTY );
+		s.persist( boy );
+		s.getTransaction().commit();
+		s.clear();
+		Transaction tx = s.beginTransaction();
+		boy = (Boy) s.get( Boy.class, boy.getId() );
+		assertNotNull( boy.getNickNames() );
+		assertTrue( boy.getNickNames().contains( "Thing" ) );
+		assertNotNull( boy.getScorePerNickName() );
+		assertTrue( boy.getScorePerNickName().containsKey( "Thing" ) );
+		assertEquals( new Integer( 5 ), boy.getScorePerNickName().get( "Thing" ) );
+		assertNotNull( boy.getFavoriteNumbers() );
+		assertEquals( 3, boy.getFavoriteNumbers()[1] );
+		assertTrue( boy.getCharacters().contains( Character.CRAFTY ) );
+		List result = s.createQuery( "select boy from Boy boy join boy.nickNames names where names = :name" )
+				.setParameter( "name", "Thing" ).list();
+		assertEquals( 1, result.size() );
+		s.delete( boy );
+		tx.commit();
+		s.close();
+	}
+
+	public void testCompositeElement() throws Exception {
+		Session s = openSession();
+		s.getTransaction().begin();
+		Boy boy = new Boy();
+		boy.setFirstName( "John" );
+		boy.setLastName( "Doe" );
+		Toy toy = new Toy();
+		toy.setName( "Balloon" );
+		toy.setSerial( "serial001" );
+		toy.setBrand( new Brand() );
+		toy.getBrand().setName( "Bandai" );
+		boy.getFavoriteToys().add( toy );
+		s.persist( boy );
+		s.getTransaction().commit();
+		s.clear();
+		Transaction tx = s.beginTransaction();
+		boy = (Boy) s.get( Boy.class, boy.getId() );
+		assertNotNull( boy.getFavoriteToys() );
+		assertTrue( boy.getFavoriteToys().contains( toy ) );
+		assertEquals( "@Parent is failing", boy, boy.getFavoriteToys().iterator().next().getOwner() );
+		s.delete( boy );
+		tx.commit();
+		s.close();
+	}
+
+	public void testAttributedJoin() throws Exception {
+		Session s = openSession();
+		s.getTransaction().begin();
+		Country country = new Country();
+		country.setName( "Australia" );
+		s.persist( country );
+
+		Boy boy = new Boy();
+		boy.setFirstName( "John" );
+		boy.setLastName( "Doe" );
+		CountryAttitude attitude = new CountryAttitude();
+		// TODO: doesn't work
+		attitude.setBoy( boy );
+		attitude.setCountry( country );
+		attitude.setLikes( true );
+		boy.getCountryAttitudes().add( attitude );
+		s.persist( boy );
+		s.getTransaction().commit();
+		s.clear();
+
+		Transaction tx = s.beginTransaction();
+		boy = (Boy) s.get( Boy.class, boy.getId() );
+		assertTrue( boy.getCountryAttitudes().contains( attitude ) );
+		s.delete( boy );
+		s.delete( s.get( Country.class, country.getId() ) );
+		tx.commit();
+		s.close();
+
+	}
+
+	public void testLazyCollectionofElements() throws Exception {
+		assertEquals(
+				"BoyFavoriteNumbers",
+				getCfg().getCollectionMapping( Boy.class.getName() + '.' + "favoriteNumbers" )
+						.getCollectionTable().getName()
+		);
+		Session s = openSession();
+		s.getTransaction().begin();
+		Boy boy = new Boy();
+		boy.setFirstName( "John" );
+		boy.setLastName( "Doe" );
+		boy.getNickNames().add( "Johnny" );
+		boy.getNickNames().add( "Thing" );
+		boy.getScorePerNickName().put( "Johnny", new Integer( 3 ) );
+		boy.getScorePerNickName().put( "Thing", new Integer( 5 ) );
+		int[] favNbrs = new int[4];
+		for ( int index = 0; index < favNbrs.length - 1; index++ ) {
+			favNbrs[index] = index * 3;
+		}
+		boy.setFavoriteNumbers( favNbrs );
+		boy.getCharacters().add( Character.GENTLE );
+		boy.getCharacters().add( Character.CRAFTY );
+		s.persist( boy );
+		s.getTransaction().commit();
+		s.clear();
+		Transaction tx = s.beginTransaction();
+		boy = (Boy) s.get( Boy.class, boy.getId() );
+		assertNotNull( boy.getNickNames() );
+		assertTrue( boy.getNickNames().contains( "Thing" ) );
+		assertNotNull( boy.getScorePerNickName() );
+		assertTrue( boy.getScorePerNickName().containsKey( "Thing" ) );
+		assertEquals( new Integer( 5 ), boy.getScorePerNickName().get( "Thing" ) );
+		assertNotNull( boy.getFavoriteNumbers() );
+		assertEquals( 3, boy.getFavoriteNumbers()[1] );
+		assertTrue( boy.getCharacters().contains( Character.CRAFTY ) );
+		List result = s.createQuery( "select boy from Boy boy join boy.nickNames names where names = :name" )
+				.setParameter( "name", "Thing" ).list();
+		assertEquals( 1, result.size() );
+		s.delete( boy );
+		tx.commit();
+		s.close();
+	}
+
+
+	protected Class[] getMappings() {
+		return new Class[]{
+				Boy.class,
+				Country.class
+		};
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement/CountryAttitude.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement/CountryAttitude.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement/CountryAttitude.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,59 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.collectionelement;
-
-import javax.persistence.Column;
-import javax.persistence.Embeddable;
-import javax.persistence.ManyToOne;
-
-import org.hibernate.test.annotations.Country;
-
-/**
- * @author Emmanuel Bernard
- */
- at Embeddable
-public class CountryAttitude {
-	private Boy boy;
-	private Country country;
-	private boolean likes;
-
-	// TODO: This currently does not work
-	//@ManyToOne(optional = false)
-//	public Boy getBoy() {
-//		return boy;
-//	}
-
-	public void setBoy(Boy boy) {
-		this.boy = boy;
-	}
-
-	@ManyToOne(optional = false)
-	public Country getCountry() {
-		return country;
-	}
-
-	public void setCountry(Country country) {
-		this.country = country;
-	}
-
-	@Column(name = "b_likes")
-	public boolean isLikes() {
-		return likes;
-	}
-
-	public void setLikes(boolean likes) {
-		this.likes = likes;
-	}
-
-	@Override
-	public int hashCode() {
-		return country.hashCode();
-	}
-
-	@Override
-	public boolean equals(Object obj) {
-		if ( !( obj instanceof CountryAttitude ) ) {
-			return false;
-		}
-		return country.equals( ( (CountryAttitude) obj ).country );
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement/CountryAttitude.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement/CountryAttitude.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement/CountryAttitude.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement/CountryAttitude.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,59 @@
+//$Id$
+package org.hibernate.test.annotations.collectionelement;
+
+import javax.persistence.Column;
+import javax.persistence.Embeddable;
+import javax.persistence.ManyToOne;
+
+import org.hibernate.test.annotations.Country;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Embeddable
+public class CountryAttitude {
+	private Boy boy;
+	private Country country;
+	private boolean likes;
+
+	// TODO: This currently does not work
+	//@ManyToOne(optional = false)
+//	public Boy getBoy() {
+//		return boy;
+//	}
+
+	public void setBoy(Boy boy) {
+		this.boy = boy;
+	}
+
+	@ManyToOne(optional = false)
+	public Country getCountry() {
+		return country;
+	}
+
+	public void setCountry(Country country) {
+		this.country = country;
+	}
+
+	@Column(name = "b_likes")
+	public boolean isLikes() {
+		return likes;
+	}
+
+	public void setLikes(boolean likes) {
+		this.likes = likes;
+	}
+
+	@Override
+	public int hashCode() {
+		return country.hashCode();
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if ( !( obj instanceof CountryAttitude ) ) {
+			return false;
+		}
+		return country.equals( ( (CountryAttitude) obj ).country );
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement/Toy.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement/Toy.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement/Toy.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,73 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.collectionelement;
-
-import javax.persistence.AttributeOverride;
-import javax.persistence.Column;
-import javax.persistence.Embeddable;
-
-import org.hibernate.annotations.Parent;
-
-/**
- * @author Emmanuel Bernard
- */
- at Embeddable
-public class Toy {
-	private String name;
-	private Brand brand;
-	private String serial;
-	private Boy owner;
-
-	@AttributeOverride(name = "name", column = @Column(name = "brand_name"))
-	public Brand getBrand() {
-		return brand;
-	}
-
-	public void setBrand(Brand brand) {
-		this.brand = brand;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	public String getSerial() {
-		return serial;
-	}
-
-	public void setSerial(String serial) {
-		this.serial = serial;
-	}
-
-	@Parent
-	public Boy getOwner() {
-		return owner;
-	}
-
-	public void setOwner(Boy owner) {
-		this.owner = owner;
-	}
-
-	public boolean equals(Object o) {
-		if ( this == o ) return true;
-		if ( o == null || getClass() != o.getClass() ) return false;
-
-		final Toy toy = (Toy) o;
-
-		if ( !brand.equals( toy.brand ) ) return false;
-		if ( !name.equals( toy.name ) ) return false;
-		if ( !serial.equals( toy.serial ) ) return false;
-
-		return true;
-	}
-
-	public int hashCode() {
-		int result;
-		result = name.hashCode();
-		result = 29 * result + brand.hashCode();
-		return result;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement/Toy.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement/Toy.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement/Toy.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/collectionelement/Toy.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,73 @@
+//$Id$
+package org.hibernate.test.annotations.collectionelement;
+
+import javax.persistence.AttributeOverride;
+import javax.persistence.Column;
+import javax.persistence.Embeddable;
+
+import org.hibernate.annotations.Parent;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Embeddable
+public class Toy {
+	private String name;
+	private Brand brand;
+	private String serial;
+	private Boy owner;
+
+	@AttributeOverride(name = "name", column = @Column(name = "brand_name"))
+	public Brand getBrand() {
+		return brand;
+	}
+
+	public void setBrand(Brand brand) {
+		this.brand = brand;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getSerial() {
+		return serial;
+	}
+
+	public void setSerial(String serial) {
+		this.serial = serial;
+	}
+
+	@Parent
+	public Boy getOwner() {
+		return owner;
+	}
+
+	public void setOwner(Boy owner) {
+		this.owner = owner;
+	}
+
+	public boolean equals(Object o) {
+		if ( this == o ) return true;
+		if ( o == null || getClass() != o.getClass() ) return false;
+
+		final Toy toy = (Toy) o;
+
+		if ( !brand.equals( toy.brand ) ) return false;
+		if ( !name.equals( toy.name ) ) return false;
+		if ( !serial.equals( toy.serial ) ) return false;
+
+		return true;
+	}
+
+	public int hashCode() {
+		int result;
+		result = name.hashCode();
+		result = 29 * result + brand.hashCode();
+		return result;
+	}
+}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/duplicatedgenerator (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/duplicatedgenerator)

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/duplicatedgenerator/DuplicateTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/duplicatedgenerator/DuplicateTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/duplicatedgenerator/DuplicateTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,28 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.duplicatedgenerator;
-
-import junit.framework.TestCase;
-import org.hibernate.AnnotationException;
-import org.hibernate.cfg.AnnotationConfiguration;
-import org.hibernate.cfg.Environment;
-
-/**
- * @author Emmanuel Bernard
- */
-public class DuplicateTest extends TestCase {
-	public void testDuplicateEntityName() throws Exception {
-		AnnotationConfiguration cfg = new AnnotationConfiguration();
-		cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
-		try {
-			cfg.addAnnotatedClass( Flight.class );
-			cfg.addAnnotatedClass( org.hibernate.test.annotations.Flight.class );
-			cfg.addResource( "org/hibernate/test/annotations/orm.xml");
-			cfg.addResource( "org/hibernate/test/annotations/duplicatedgenerator/orm.xml");
-			cfg.buildSessionFactory();
-			fail( "Should not be able to map the same entity name twice" );
-		}
-		catch (AnnotationException ae) {
-			//success
-		}
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/duplicatedgenerator/DuplicateTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/duplicatedgenerator/DuplicateTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/duplicatedgenerator/DuplicateTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/duplicatedgenerator/DuplicateTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,28 @@
+//$Id$
+package org.hibernate.test.annotations.duplicatedgenerator;
+
+import junit.framework.TestCase;
+import org.hibernate.AnnotationException;
+import org.hibernate.cfg.AnnotationConfiguration;
+import org.hibernate.cfg.Environment;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class DuplicateTest extends TestCase {
+	public void testDuplicateEntityName() throws Exception {
+		AnnotationConfiguration cfg = new AnnotationConfiguration();
+		cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
+		try {
+			cfg.addAnnotatedClass( Flight.class );
+			cfg.addAnnotatedClass( org.hibernate.test.annotations.Flight.class );
+			cfg.addResource( "org/hibernate/test/annotations/orm.xml");
+			cfg.addResource( "org/hibernate/test/annotations/duplicatedgenerator/orm.xml");
+			cfg.buildSessionFactory();
+			fail( "Should not be able to map the same entity name twice" );
+		}
+		catch (AnnotationException ae) {
+			//success
+		}
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/duplicatedgenerator/Flight.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/duplicatedgenerator/Flight.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/duplicatedgenerator/Flight.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,18 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.duplicatedgenerator;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Table;
-
-/**
- * Here to test duplicate import
- *
- * @author Emmanuel Bernard
- */
- at Entity
- at Table(name = "tbl_flight")
-public class Flight {
-	@Id
-	public String id;
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/duplicatedgenerator/Flight.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/duplicatedgenerator/Flight.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/duplicatedgenerator/Flight.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/duplicatedgenerator/Flight.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,18 @@
+//$Id$
+package org.hibernate.test.annotations.duplicatedgenerator;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+/**
+ * Here to test duplicate import
+ *
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Table(name = "tbl_flight")
+public class Flight {
+	@Id
+	public String id;
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/duplicatedgenerator/orm.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/duplicatedgenerator/orm.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/duplicatedgenerator/orm.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,10 +0,0 @@
-<?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"
-                 version="1.0"
-        >
-    <table-generator name="EMP_GEN" table="GENERATOR_TABLE"
-                     pk-column-name="pkey" pk-column-value="EMP"
-                     value-column-name="hi" allocation-size="20"/>
-</entity-mappings>
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/duplicatedgenerator/orm.xml (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/duplicatedgenerator/orm.xml)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/duplicatedgenerator/orm.xml	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/duplicatedgenerator/orm.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,10 @@
+<?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"
+                 version="1.0"
+        >
+    <table-generator name="EMP_GEN" table="GENERATOR_TABLE"
+                     pk-column-name="pkey" pk-column-value="EMP"
+                     value-column-name="hi" allocation-size="20"/>
+</entity-mappings>
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded)

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Address.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Address.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Address.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,20 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.embedded;
-
-import java.io.Serializable;
-import javax.persistence.Column;
-import javax.persistence.Embeddable;
-import javax.persistence.ManyToOne;
-
-/**
- * @author Emmanuel Bernard
- */
- at Embeddable
-public class Address implements Serializable {
-	String address1;
-	@Column(name = "fld_city")
-	String city;
-	Country country;
-	@ManyToOne
-	AddressType type;
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Address.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Address.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Address.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Address.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,20 @@
+//$Id$
+package org.hibernate.test.annotations.embedded;
+
+import java.io.Serializable;
+import javax.persistence.Column;
+import javax.persistence.Embeddable;
+import javax.persistence.ManyToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Embeddable
+public class Address implements Serializable {
+	String address1;
+	@Column(name = "fld_city")
+	String city;
+	Country country;
+	@ManyToOne
+	AddressType type;
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/AddressType.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/AddressType.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/AddressType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,35 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.embedded;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-
-/**
- * Kind of address (home, professional etc)
- *
- * @author Emmanuel Bernard
- */
- at Entity()
-public class AddressType {
-	private Integer id;
-	private String name;
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/AddressType.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/AddressType.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/AddressType.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/AddressType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,35 @@
+//$Id$
+package org.hibernate.test.annotations.embedded;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * Kind of address (home, professional etc)
+ *
+ * @author Emmanuel Bernard
+ */
+ at Entity()
+public class AddressType {
+	private Integer id;
+	private String name;
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Book.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Book.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Book.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,49 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.embedded;
-
-import javax.persistence.AttributeOverride;
-import javax.persistence.AttributeOverrides;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.SecondaryTable;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at SecondaryTable(name = "BookSummary")
-public class Book {
-	private String isbn;
-	private String name;
-	private Summary summary;
-
-	@Id
-	public String getIsbn() {
-		return isbn;
-	}
-
-	public void setIsbn(String isbn) {
-		this.isbn = isbn;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	@AttributeOverrides({
-	@AttributeOverride(name = "size", column = @Column(table = "BookSummary")),
-	@AttributeOverride(name = "text", column = @Column(table = "BookSummary"))
-			})
-	public Summary getSummary() {
-		return summary;
-	}
-
-	public void setSummary(Summary summary) {
-		this.summary = summary;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Book.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Book.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Book.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Book.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,49 @@
+//$Id$
+package org.hibernate.test.annotations.embedded;
+
+import javax.persistence.AttributeOverride;
+import javax.persistence.AttributeOverrides;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.SecondaryTable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at SecondaryTable(name = "BookSummary")
+public class Book {
+	private String isbn;
+	private String name;
+	private Summary summary;
+
+	@Id
+	public String getIsbn() {
+		return isbn;
+	}
+
+	public void setIsbn(String isbn) {
+		this.isbn = isbn;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	@AttributeOverrides({
+	@AttributeOverride(name = "size", column = @Column(table = "BookSummary")),
+	@AttributeOverride(name = "text", column = @Column(table = "BookSummary"))
+			})
+	public Summary getSummary() {
+		return summary;
+	}
+
+	public void setSummary(Summary summary) {
+		this.summary = summary;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/CorpType.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/CorpType.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/CorpType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,33 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.embedded;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class CorpType {
-	private Integer id;
-	private String type;
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getType() {
-		return type;
-	}
-
-	public void setType(String type) {
-		this.type = type;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/CorpType.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/CorpType.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/CorpType.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/CorpType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,33 @@
+//$Id$
+package org.hibernate.test.annotations.embedded;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class CorpType {
+	private Integer id;
+	private String type;
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getType() {
+		return type;
+	}
+
+	public void setType(String type) {
+		this.type = type;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Country.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Country.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Country.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,39 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.embedded;
-
-import java.io.Serializable;
-import javax.persistence.Column;
-import javax.persistence.Embeddable;
-
-import org.hibernate.annotations.AccessType;
-
-/**
- * Non realistic embedded dependent object
- *
- * @author Emmanuel Bernard
- */
- at Embeddable
-//access = AccessType.PROPERTY)
- at AccessType("property")
-public class Country implements Serializable {
-	private String iso2;
-	private String name;
-
-	public String getIso2() {
-		return iso2;
-	}
-
-	public void setIso2(String iso2) {
-		this.iso2 = iso2;
-	}
-
-	@Column(name = "countryName")
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Country.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Country.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Country.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Country.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,39 @@
+//$Id$
+package org.hibernate.test.annotations.embedded;
+
+import java.io.Serializable;
+import javax.persistence.Column;
+import javax.persistence.Embeddable;
+
+import org.hibernate.annotations.AccessType;
+
+/**
+ * Non realistic embedded dependent object
+ *
+ * @author Emmanuel Bernard
+ */
+ at Embeddable
+//access = AccessType.PROPERTY)
+ at AccessType("property")
+public class Country implements Serializable {
+	private String iso2;
+	private String name;
+
+	public String getIso2() {
+		return iso2;
+	}
+
+	public void setIso2(String iso2) {
+		this.iso2 = iso2;
+	}
+
+	@Column(name = "countryName")
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Deal.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Deal.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Deal.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,40 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.embedded;
-
-import javax.persistence.Embedded;
-import javax.persistence.Id;
-import javax.persistence.MappedSuperclass;
-
-/**
- * @author Emmanuel Bernard
- */
- at MappedSuperclass
-public class Deal {
-	/**
-	 * Deal ID.
-	 */
-	private String id;
-
-	@Id
-	public String getId() {
-		return id;
-	}
-
-	public void setId(String id) {
-		this.id = id;
-	}
-
-	/**
-	 * Swap with the tenor.
-	 */
-	private Swap swap;
-
-	@Embedded
-	public Swap getSwap() {
-		return swap;
-	}
-
-	public void setSwap(Swap swap) {
-		this.swap = swap;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Deal.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Deal.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Deal.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Deal.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,40 @@
+//$Id$
+package org.hibernate.test.annotations.embedded;
+
+import javax.persistence.Embedded;
+import javax.persistence.Id;
+import javax.persistence.MappedSuperclass;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at MappedSuperclass
+public class Deal {
+	/**
+	 * Deal ID.
+	 */
+	private String id;
+
+	@Id
+	public String getId() {
+		return id;
+	}
+
+	public void setId(String id) {
+		this.id = id;
+	}
+
+	/**
+	 * Swap with the tenor.
+	 */
+	private Swap swap;
+
+	@Embedded
+	public Swap getSwap() {
+		return swap;
+	}
+
+	public void setSwap(Swap swap) {
+		this.swap = swap;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/EmbeddedTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/EmbeddedTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/EmbeddedTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,386 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.embedded;
-
-import java.io.Serializable;
-import java.util.List;
-import java.util.Set;
-
-import org.hibernate.Query;
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-import org.hibernate.test.annotations.TestCase;
-import org.hibernate.test.annotations.embedded.FloatLeg.RateIndex;
-import org.hibernate.test.annotations.embedded.Leg.Frequency;
-
-/**
- * @author Emmanuel Bernard
- */
-public class EmbeddedTest extends TestCase {
-
-	public void testSimple() throws Exception {
-		Session s;
-		Transaction tx;
-		Person p = new Person();
-		Address a = new Address();
-		Country c = new Country();
-		Country bornCountry = new Country();
-		c.setIso2( "DM" );
-		c.setName( "Matt Damon Land" );
-		bornCountry.setIso2( "US" );
-		bornCountry.setName( "United States of America" );
-
-		a.address1 = "colorado street";
-		a.city = "Springfield";
-		a.country = c;
-		p.address = a;
-		p.bornIn = bornCountry;
-		p.name = "Homer";
-		s = openSession();
-		tx = s.beginTransaction();
-		s.persist( p );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		p = (Person) s.get( Person.class, p.id );
-		assertNotNull( p );
-		assertNotNull( p.address );
-		assertEquals( "Springfield", p.address.city );
-		assertNotNull( p.address.country );
-		assertEquals( "DM", p.address.country.getIso2() );
-		assertNotNull( p.bornIn );
-		assertEquals( "US", p.bornIn.getIso2() );
-		tx.commit();
-		s.close();
-	}
-
-	public void testCompositeId() throws Exception {
-		Session s;
-		Transaction tx;
-		RegionalArticlePk pk = new RegionalArticlePk();
-		pk.iso2 = "FR";
-		pk.localUniqueKey = "1234567890123";
-		RegionalArticle reg = new RegionalArticle();
-		reg.setName( "Je ne veux pes rester sage - Dolly" );
-		reg.setPk( pk );
-		s = openSession();
-		tx = s.beginTransaction();
-		s.persist( reg );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		reg = (RegionalArticle) s.get( RegionalArticle.class, (Serializable) reg.getPk() );
-		assertNotNull( reg );
-		assertNotNull( reg.getPk() );
-		assertEquals( "Je ne veux pes rester sage - Dolly", reg.getName() );
-		assertEquals( "FR", reg.getPk().iso2 );
-		tx.commit();
-		s.close();
-	}
-
-	public void testManyToOneInsideComponent() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		Person p = new Person();
-		Country bornIn = new Country();
-		bornIn.setIso2( "FR" );
-		bornIn.setName( "France" );
-		p.bornIn = bornIn;
-		p.name = "Emmanuel";
-		AddressType type = new AddressType();
-		type.setName( "Primary Home" );
-		s.persist( type );
-		Country currentCountry = new Country();
-		currentCountry.setIso2( "US" );
-		currentCountry.setName( "USA" );
-		Address add = new Address();
-		add.address1 = "4 square street";
-		add.city = "San diego";
-		add.country = currentCountry;
-		add.type = type;
-		p.address = add;
-		s.persist( p );
-		tx.commit();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		Query q = s.createQuery( "select p from Person p where p.address.city = :city" );
-		q.setString( "city", add.city );
-		List result = q.list();
-		Person samePerson = (Person) result.get( 0 );
-		assertNotNull( samePerson.address.type );
-		assertEquals( type.getName(), samePerson.address.type.getName() );
-		tx.commit();
-		s.close();
-	}
-
-	public void testEmbeddedSuperclass() {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		VanillaSwap swap = new VanillaSwap();
-		swap.setInstrumentId( "US345421" );
-		swap.setCurrency( VanillaSwap.Currency.EUR );
-		FixedLeg fixed = new FixedLeg();
-		fixed.setPaymentFrequency( Leg.Frequency.SEMIANNUALLY );
-		fixed.setRate( 5.6 );
-		FloatLeg floating = new FloatLeg();
-		floating.setPaymentFrequency( Leg.Frequency.QUARTERLY );
-		floating.setRateIndex( FloatLeg.RateIndex.LIBOR );
-		floating.setRateSpread( 1.1 );
-		swap.setFixedLeg( fixed );
-		swap.setFloatLeg( floating );
-		s.persist( swap );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		swap = (VanillaSwap) s.get( VanillaSwap.class, swap.getInstrumentId() );
-		// All fields must be filled with non-default values
-		fixed = swap.getFixedLeg();
-		assertNotNull( "Fixed leg retrieved as null", fixed );
-		floating = swap.getFloatLeg();
-		assertNotNull( "Floating leg retrieved as null", floating );
-		assertEquals( Leg.Frequency.SEMIANNUALLY, fixed.getPaymentFrequency() );
-		assertEquals( Leg.Frequency.QUARTERLY, floating.getPaymentFrequency() );
-		s.delete( swap );
-		tx.commit();
-		s.close();
-	}
-
-	public void testDottedProperty() {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		// Create short swap
-		Swap shortSwap = new Swap();
-		shortSwap.setTenor( 2 );
-		FixedLeg shortFixed = new FixedLeg();
-		shortFixed.setPaymentFrequency( Frequency.SEMIANNUALLY );
-		shortFixed.setRate( 5.6 );
-		FloatLeg shortFloating = new FloatLeg();
-		shortFloating.setPaymentFrequency( Frequency.QUARTERLY );
-		shortFloating.setRateIndex( RateIndex.LIBOR );
-		shortFloating.setRateSpread( 1.1 );
-		shortSwap.setFixedLeg( shortFixed );
-		shortSwap.setFloatLeg( shortFloating );
-		// Create medium swap
-		Swap swap = new Swap();
-		swap.setTenor( 7 );
-		FixedLeg fixed = new FixedLeg();
-		fixed.setPaymentFrequency( Frequency.MONTHLY );
-		fixed.setRate( 7.6 );
-		FloatLeg floating = new FloatLeg();
-		floating.setPaymentFrequency( Frequency.MONTHLY );
-		floating.setRateIndex( RateIndex.TIBOR );
-		floating.setRateSpread( 0.8 );
-		swap.setFixedLeg( fixed );
-		swap.setFloatLeg( floating );
-		// Create long swap
-		Swap longSwap = new Swap();
-		longSwap.setTenor( 7 );
-		FixedLeg longFixed = new FixedLeg();
-		longFixed.setPaymentFrequency( Frequency.MONTHLY );
-		longFixed.setRate( 7.6 );
-		FloatLeg longFloating = new FloatLeg();
-		longFloating.setPaymentFrequency( Frequency.MONTHLY );
-		longFloating.setRateIndex( RateIndex.TIBOR );
-		longFloating.setRateSpread( 0.8 );
-		longSwap.setFixedLeg( longFixed );
-		longSwap.setFloatLeg( longFloating );
-		// Compose a curve spread deal
-		SpreadDeal deal = new SpreadDeal();
-		deal.setId( "FX45632" );
-		deal.setNotional( 450000.0 );
-		deal.setShortSwap( shortSwap );
-		deal.setSwap( swap );
-		deal.setLongSwap( longSwap );
-		s.persist( deal );
-
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		deal = (SpreadDeal) s.get( SpreadDeal.class, deal.getId() );
-		// All fields must be filled with non-default values
-		assertNotNull( "Short swap is null.", deal.getShortSwap() );
-		assertNotNull( "Swap is null.", deal.getSwap() );
-		assertNotNull( "Long swap is null.", deal.getLongSwap() );
-		assertEquals( 2, deal.getShortSwap().getTenor() );
-		assertEquals( 7, deal.getSwap().getTenor() );
-		assertEquals( 7, deal.getLongSwap().getTenor() );
-		assertNotNull( "Short fixed leg is null.", deal.getShortSwap().getFixedLeg() );
-		assertNotNull( "Short floating leg is null.", deal.getShortSwap().getFloatLeg() );
-		assertNotNull( "Fixed leg is null.", deal.getSwap().getFixedLeg() );
-		assertNotNull( "Floating leg is null.", deal.getSwap().getFloatLeg() );
-		assertNotNull( "Long fixed leg is null.", deal.getLongSwap().getFixedLeg() );
-		assertNotNull( "Long floating leg is null.", deal.getLongSwap().getFloatLeg() );
-		assertEquals( Frequency.SEMIANNUALLY, deal.getShortSwap().getFixedLeg().getPaymentFrequency() );
-		assertEquals( Frequency.QUARTERLY, deal.getShortSwap().getFloatLeg().getPaymentFrequency() );
-		assertEquals( Frequency.MONTHLY, deal.getSwap().getFixedLeg().getPaymentFrequency() );
-		assertEquals( Frequency.MONTHLY, deal.getSwap().getFloatLeg().getPaymentFrequency() );
-		assertEquals( Frequency.MONTHLY, deal.getLongSwap().getFixedLeg().getPaymentFrequency() );
-		assertEquals( Frequency.MONTHLY, deal.getLongSwap().getFloatLeg().getPaymentFrequency() );
-		assertEquals( 5.6, deal.getShortSwap().getFixedLeg().getRate() );
-		assertEquals( 7.6, deal.getSwap().getFixedLeg().getRate() );
-		assertEquals( 7.6, deal.getLongSwap().getFixedLeg().getRate() );
-		assertEquals( RateIndex.LIBOR, deal.getShortSwap().getFloatLeg().getRateIndex() );
-		assertEquals( RateIndex.TIBOR, deal.getSwap().getFloatLeg().getRateIndex() );
-		assertEquals( RateIndex.TIBOR, deal.getLongSwap().getFloatLeg().getRateIndex() );
-		assertEquals( 1.1, deal.getShortSwap().getFloatLeg().getRateSpread() );
-		assertEquals( 0.8, deal.getSwap().getFloatLeg().getRateSpread() );
-		assertEquals( 0.8, deal.getLongSwap().getFloatLeg().getRateSpread() );
-		s.delete( deal );
-		tx.commit();
-		s.close();
-	}
-
-	public void testEmbeddedInSecdondaryTable() throws Exception {
-		Session s;
-		s = openSession();
-		s.getTransaction().begin();
-		Book book = new Book();
-		book.setIsbn( "1234" );
-		book.setName( "HiA Second Edition" );
-		Summary summary = new Summary();
-		summary.setText( "This is a HiA SE summary" );
-		summary.setSize( summary.getText().length() );
-		book.setSummary( summary );
-		s.persist( book );
-		s.getTransaction().commit();
-
-		s.clear();
-
-		Transaction tx = s.beginTransaction();
-		Book loadedBook = (Book) s.get( Book.class, book.getIsbn() );
-		assertNotNull( loadedBook.getSummary() );
-		assertEquals( book.getSummary().getText(), loadedBook.getSummary().getText() );
-		s.delete( loadedBook );
-		tx.commit();
-		s.close();
-	}
-
-	public void testParent() throws Exception {
-		Session s;
-		s = openSession();
-		s.getTransaction().begin();
-		Book book = new Book();
-		book.setIsbn( "1234" );
-		book.setName( "HiA Second Edition" );
-		Summary summary = new Summary();
-		summary.setText( "This is a HiA SE summary" );
-		summary.setSize( summary.getText().length() );
-		book.setSummary( summary );
-		s.persist( book );
-		s.getTransaction().commit();
-
-		s.clear();
-
-		Transaction tx = s.beginTransaction();
-		Book loadedBook = (Book) s.get( Book.class, book.getIsbn() );
-		assertNotNull( loadedBook.getSummary() );
-		assertEquals( loadedBook, loadedBook.getSummary().getSummarizedBook() );
-		s.delete( loadedBook );
-		tx.commit();
-		s.close();
-	}
-
-	public void testEmbeddedAndMultipleManyToOne() throws Exception {
-		Session s;
-		s = openSession();
-		Transaction tx = s.beginTransaction();
-		CorpType type = new CorpType();
-		type.setType( "National" );
-		s.persist( type );
-		Nationality nat = new Nationality();
-		nat.setName( "Canadian" );
-		s.persist( nat );
-		InternetProvider provider = new InternetProvider();
-		provider.setBrandName( "Fido" );
-		LegalStructure structure = new LegalStructure();
-		structure.setCorporationType( type );
-		structure.setCountry( "Canada" );
-		structure.setName( "Rogers" );
-		provider.setOwner( structure );
-		structure.setOrigin( nat );
-		s.persist( provider );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		provider = (InternetProvider) s.get( InternetProvider.class, provider.getId() );
-		assertNotNull( provider.getOwner() );
-		assertNotNull( "Many to one not set", provider.getOwner().getCorporationType() );
-		assertEquals( "Wrong link", type.getType(), provider.getOwner().getCorporationType().getType() );
-		assertNotNull( "2nd Many to one not set", provider.getOwner().getOrigin() );
-		assertEquals( "Wrong 2nd link", nat.getName(), provider.getOwner().getOrigin().getName() );
-		s.delete( provider );
-		s.delete( provider.getOwner().getCorporationType() );
-		s.delete( provider.getOwner().getOrigin() );
-		tx.commit();
-		s.close();
-	}
-
-	public void testEmbeddedAndOneToMany() throws Exception {
-		Session s;
-		s = openSession();
-		Transaction tx = s.beginTransaction();
-		InternetProvider provider = new InternetProvider();
-		provider.setBrandName( "Fido" );
-		LegalStructure structure = new LegalStructure();
-		structure.setCountry( "Canada" );
-		structure.setName( "Rogers" );
-		provider.setOwner( structure );
-		s.persist( provider );
-		Manager manager = new Manager();
-		manager.setName( "Bill" );
-		manager.setEmployer( provider );
-		structure.getTopManagement().add( manager );
-		s.persist( manager );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		provider = (InternetProvider) s.get( InternetProvider.class, provider.getId() );
-		assertNotNull( provider.getOwner() );
-		Set<Manager> topManagement = provider.getOwner().getTopManagement();
-		assertNotNull( "OneToMany not set", topManagement );
-		assertEquals( "Wrong number of elements", 1, topManagement.size() );
-		manager = (Manager) topManagement.iterator().next();
-		assertEquals( "Wrong element", "Bill", manager.getName() );
-		s.delete( manager );
-		s.delete( provider );
-		tx.commit();
-		s.close();
-	}
-
-	public EmbeddedTest(String x) {
-		super( x );
-	}
-
-	protected Class[] getMappings() {
-		return new Class[]{
-				Person.class,
-				RegionalArticle.class,
-				AddressType.class,
-				VanillaSwap.class,
-				SpreadDeal.class,
-				Book.class,
-				InternetProvider.class,
-				CorpType.class,
-				Nationality.class,
-				Manager.class
-		};
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/EmbeddedTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/EmbeddedTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/EmbeddedTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/EmbeddedTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,386 @@
+//$Id$
+package org.hibernate.test.annotations.embedded;
+
+import java.io.Serializable;
+import java.util.List;
+import java.util.Set;
+
+import org.hibernate.Query;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.TestCase;
+import org.hibernate.test.annotations.embedded.FloatLeg.RateIndex;
+import org.hibernate.test.annotations.embedded.Leg.Frequency;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class EmbeddedTest extends TestCase {
+
+	public void testSimple() throws Exception {
+		Session s;
+		Transaction tx;
+		Person p = new Person();
+		Address a = new Address();
+		Country c = new Country();
+		Country bornCountry = new Country();
+		c.setIso2( "DM" );
+		c.setName( "Matt Damon Land" );
+		bornCountry.setIso2( "US" );
+		bornCountry.setName( "United States of America" );
+
+		a.address1 = "colorado street";
+		a.city = "Springfield";
+		a.country = c;
+		p.address = a;
+		p.bornIn = bornCountry;
+		p.name = "Homer";
+		s = openSession();
+		tx = s.beginTransaction();
+		s.persist( p );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		p = (Person) s.get( Person.class, p.id );
+		assertNotNull( p );
+		assertNotNull( p.address );
+		assertEquals( "Springfield", p.address.city );
+		assertNotNull( p.address.country );
+		assertEquals( "DM", p.address.country.getIso2() );
+		assertNotNull( p.bornIn );
+		assertEquals( "US", p.bornIn.getIso2() );
+		tx.commit();
+		s.close();
+	}
+
+	public void testCompositeId() throws Exception {
+		Session s;
+		Transaction tx;
+		RegionalArticlePk pk = new RegionalArticlePk();
+		pk.iso2 = "FR";
+		pk.localUniqueKey = "1234567890123";
+		RegionalArticle reg = new RegionalArticle();
+		reg.setName( "Je ne veux pes rester sage - Dolly" );
+		reg.setPk( pk );
+		s = openSession();
+		tx = s.beginTransaction();
+		s.persist( reg );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		reg = (RegionalArticle) s.get( RegionalArticle.class, (Serializable) reg.getPk() );
+		assertNotNull( reg );
+		assertNotNull( reg.getPk() );
+		assertEquals( "Je ne veux pes rester sage - Dolly", reg.getName() );
+		assertEquals( "FR", reg.getPk().iso2 );
+		tx.commit();
+		s.close();
+	}
+
+	public void testManyToOneInsideComponent() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		Person p = new Person();
+		Country bornIn = new Country();
+		bornIn.setIso2( "FR" );
+		bornIn.setName( "France" );
+		p.bornIn = bornIn;
+		p.name = "Emmanuel";
+		AddressType type = new AddressType();
+		type.setName( "Primary Home" );
+		s.persist( type );
+		Country currentCountry = new Country();
+		currentCountry.setIso2( "US" );
+		currentCountry.setName( "USA" );
+		Address add = new Address();
+		add.address1 = "4 square street";
+		add.city = "San diego";
+		add.country = currentCountry;
+		add.type = type;
+		p.address = add;
+		s.persist( p );
+		tx.commit();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		Query q = s.createQuery( "select p from Person p where p.address.city = :city" );
+		q.setString( "city", add.city );
+		List result = q.list();
+		Person samePerson = (Person) result.get( 0 );
+		assertNotNull( samePerson.address.type );
+		assertEquals( type.getName(), samePerson.address.type.getName() );
+		tx.commit();
+		s.close();
+	}
+
+	public void testEmbeddedSuperclass() {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		VanillaSwap swap = new VanillaSwap();
+		swap.setInstrumentId( "US345421" );
+		swap.setCurrency( VanillaSwap.Currency.EUR );
+		FixedLeg fixed = new FixedLeg();
+		fixed.setPaymentFrequency( Leg.Frequency.SEMIANNUALLY );
+		fixed.setRate( 5.6 );
+		FloatLeg floating = new FloatLeg();
+		floating.setPaymentFrequency( Leg.Frequency.QUARTERLY );
+		floating.setRateIndex( FloatLeg.RateIndex.LIBOR );
+		floating.setRateSpread( 1.1 );
+		swap.setFixedLeg( fixed );
+		swap.setFloatLeg( floating );
+		s.persist( swap );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		swap = (VanillaSwap) s.get( VanillaSwap.class, swap.getInstrumentId() );
+		// All fields must be filled with non-default values
+		fixed = swap.getFixedLeg();
+		assertNotNull( "Fixed leg retrieved as null", fixed );
+		floating = swap.getFloatLeg();
+		assertNotNull( "Floating leg retrieved as null", floating );
+		assertEquals( Leg.Frequency.SEMIANNUALLY, fixed.getPaymentFrequency() );
+		assertEquals( Leg.Frequency.QUARTERLY, floating.getPaymentFrequency() );
+		s.delete( swap );
+		tx.commit();
+		s.close();
+	}
+
+	public void testDottedProperty() {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		// Create short swap
+		Swap shortSwap = new Swap();
+		shortSwap.setTenor( 2 );
+		FixedLeg shortFixed = new FixedLeg();
+		shortFixed.setPaymentFrequency( Frequency.SEMIANNUALLY );
+		shortFixed.setRate( 5.6 );
+		FloatLeg shortFloating = new FloatLeg();
+		shortFloating.setPaymentFrequency( Frequency.QUARTERLY );
+		shortFloating.setRateIndex( RateIndex.LIBOR );
+		shortFloating.setRateSpread( 1.1 );
+		shortSwap.setFixedLeg( shortFixed );
+		shortSwap.setFloatLeg( shortFloating );
+		// Create medium swap
+		Swap swap = new Swap();
+		swap.setTenor( 7 );
+		FixedLeg fixed = new FixedLeg();
+		fixed.setPaymentFrequency( Frequency.MONTHLY );
+		fixed.setRate( 7.6 );
+		FloatLeg floating = new FloatLeg();
+		floating.setPaymentFrequency( Frequency.MONTHLY );
+		floating.setRateIndex( RateIndex.TIBOR );
+		floating.setRateSpread( 0.8 );
+		swap.setFixedLeg( fixed );
+		swap.setFloatLeg( floating );
+		// Create long swap
+		Swap longSwap = new Swap();
+		longSwap.setTenor( 7 );
+		FixedLeg longFixed = new FixedLeg();
+		longFixed.setPaymentFrequency( Frequency.MONTHLY );
+		longFixed.setRate( 7.6 );
+		FloatLeg longFloating = new FloatLeg();
+		longFloating.setPaymentFrequency( Frequency.MONTHLY );
+		longFloating.setRateIndex( RateIndex.TIBOR );
+		longFloating.setRateSpread( 0.8 );
+		longSwap.setFixedLeg( longFixed );
+		longSwap.setFloatLeg( longFloating );
+		// Compose a curve spread deal
+		SpreadDeal deal = new SpreadDeal();
+		deal.setId( "FX45632" );
+		deal.setNotional( 450000.0 );
+		deal.setShortSwap( shortSwap );
+		deal.setSwap( swap );
+		deal.setLongSwap( longSwap );
+		s.persist( deal );
+
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		deal = (SpreadDeal) s.get( SpreadDeal.class, deal.getId() );
+		// All fields must be filled with non-default values
+		assertNotNull( "Short swap is null.", deal.getShortSwap() );
+		assertNotNull( "Swap is null.", deal.getSwap() );
+		assertNotNull( "Long swap is null.", deal.getLongSwap() );
+		assertEquals( 2, deal.getShortSwap().getTenor() );
+		assertEquals( 7, deal.getSwap().getTenor() );
+		assertEquals( 7, deal.getLongSwap().getTenor() );
+		assertNotNull( "Short fixed leg is null.", deal.getShortSwap().getFixedLeg() );
+		assertNotNull( "Short floating leg is null.", deal.getShortSwap().getFloatLeg() );
+		assertNotNull( "Fixed leg is null.", deal.getSwap().getFixedLeg() );
+		assertNotNull( "Floating leg is null.", deal.getSwap().getFloatLeg() );
+		assertNotNull( "Long fixed leg is null.", deal.getLongSwap().getFixedLeg() );
+		assertNotNull( "Long floating leg is null.", deal.getLongSwap().getFloatLeg() );
+		assertEquals( Frequency.SEMIANNUALLY, deal.getShortSwap().getFixedLeg().getPaymentFrequency() );
+		assertEquals( Frequency.QUARTERLY, deal.getShortSwap().getFloatLeg().getPaymentFrequency() );
+		assertEquals( Frequency.MONTHLY, deal.getSwap().getFixedLeg().getPaymentFrequency() );
+		assertEquals( Frequency.MONTHLY, deal.getSwap().getFloatLeg().getPaymentFrequency() );
+		assertEquals( Frequency.MONTHLY, deal.getLongSwap().getFixedLeg().getPaymentFrequency() );
+		assertEquals( Frequency.MONTHLY, deal.getLongSwap().getFloatLeg().getPaymentFrequency() );
+		assertEquals( 5.6, deal.getShortSwap().getFixedLeg().getRate() );
+		assertEquals( 7.6, deal.getSwap().getFixedLeg().getRate() );
+		assertEquals( 7.6, deal.getLongSwap().getFixedLeg().getRate() );
+		assertEquals( RateIndex.LIBOR, deal.getShortSwap().getFloatLeg().getRateIndex() );
+		assertEquals( RateIndex.TIBOR, deal.getSwap().getFloatLeg().getRateIndex() );
+		assertEquals( RateIndex.TIBOR, deal.getLongSwap().getFloatLeg().getRateIndex() );
+		assertEquals( 1.1, deal.getShortSwap().getFloatLeg().getRateSpread() );
+		assertEquals( 0.8, deal.getSwap().getFloatLeg().getRateSpread() );
+		assertEquals( 0.8, deal.getLongSwap().getFloatLeg().getRateSpread() );
+		s.delete( deal );
+		tx.commit();
+		s.close();
+	}
+
+	public void testEmbeddedInSecdondaryTable() throws Exception {
+		Session s;
+		s = openSession();
+		s.getTransaction().begin();
+		Book book = new Book();
+		book.setIsbn( "1234" );
+		book.setName( "HiA Second Edition" );
+		Summary summary = new Summary();
+		summary.setText( "This is a HiA SE summary" );
+		summary.setSize( summary.getText().length() );
+		book.setSummary( summary );
+		s.persist( book );
+		s.getTransaction().commit();
+
+		s.clear();
+
+		Transaction tx = s.beginTransaction();
+		Book loadedBook = (Book) s.get( Book.class, book.getIsbn() );
+		assertNotNull( loadedBook.getSummary() );
+		assertEquals( book.getSummary().getText(), loadedBook.getSummary().getText() );
+		s.delete( loadedBook );
+		tx.commit();
+		s.close();
+	}
+
+	public void testParent() throws Exception {
+		Session s;
+		s = openSession();
+		s.getTransaction().begin();
+		Book book = new Book();
+		book.setIsbn( "1234" );
+		book.setName( "HiA Second Edition" );
+		Summary summary = new Summary();
+		summary.setText( "This is a HiA SE summary" );
+		summary.setSize( summary.getText().length() );
+		book.setSummary( summary );
+		s.persist( book );
+		s.getTransaction().commit();
+
+		s.clear();
+
+		Transaction tx = s.beginTransaction();
+		Book loadedBook = (Book) s.get( Book.class, book.getIsbn() );
+		assertNotNull( loadedBook.getSummary() );
+		assertEquals( loadedBook, loadedBook.getSummary().getSummarizedBook() );
+		s.delete( loadedBook );
+		tx.commit();
+		s.close();
+	}
+
+	public void testEmbeddedAndMultipleManyToOne() throws Exception {
+		Session s;
+		s = openSession();
+		Transaction tx = s.beginTransaction();
+		CorpType type = new CorpType();
+		type.setType( "National" );
+		s.persist( type );
+		Nationality nat = new Nationality();
+		nat.setName( "Canadian" );
+		s.persist( nat );
+		InternetProvider provider = new InternetProvider();
+		provider.setBrandName( "Fido" );
+		LegalStructure structure = new LegalStructure();
+		structure.setCorporationType( type );
+		structure.setCountry( "Canada" );
+		structure.setName( "Rogers" );
+		provider.setOwner( structure );
+		structure.setOrigin( nat );
+		s.persist( provider );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		provider = (InternetProvider) s.get( InternetProvider.class, provider.getId() );
+		assertNotNull( provider.getOwner() );
+		assertNotNull( "Many to one not set", provider.getOwner().getCorporationType() );
+		assertEquals( "Wrong link", type.getType(), provider.getOwner().getCorporationType().getType() );
+		assertNotNull( "2nd Many to one not set", provider.getOwner().getOrigin() );
+		assertEquals( "Wrong 2nd link", nat.getName(), provider.getOwner().getOrigin().getName() );
+		s.delete( provider );
+		s.delete( provider.getOwner().getCorporationType() );
+		s.delete( provider.getOwner().getOrigin() );
+		tx.commit();
+		s.close();
+	}
+
+	public void testEmbeddedAndOneToMany() throws Exception {
+		Session s;
+		s = openSession();
+		Transaction tx = s.beginTransaction();
+		InternetProvider provider = new InternetProvider();
+		provider.setBrandName( "Fido" );
+		LegalStructure structure = new LegalStructure();
+		structure.setCountry( "Canada" );
+		structure.setName( "Rogers" );
+		provider.setOwner( structure );
+		s.persist( provider );
+		Manager manager = new Manager();
+		manager.setName( "Bill" );
+		manager.setEmployer( provider );
+		structure.getTopManagement().add( manager );
+		s.persist( manager );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		provider = (InternetProvider) s.get( InternetProvider.class, provider.getId() );
+		assertNotNull( provider.getOwner() );
+		Set<Manager> topManagement = provider.getOwner().getTopManagement();
+		assertNotNull( "OneToMany not set", topManagement );
+		assertEquals( "Wrong number of elements", 1, topManagement.size() );
+		manager = (Manager) topManagement.iterator().next();
+		assertEquals( "Wrong element", "Bill", manager.getName() );
+		s.delete( manager );
+		s.delete( provider );
+		tx.commit();
+		s.close();
+	}
+
+	public EmbeddedTest(String x) {
+		super( x );
+	}
+
+	protected Class[] getMappings() {
+		return new Class[]{
+				Person.class,
+				RegionalArticle.class,
+				AddressType.class,
+				VanillaSwap.class,
+				SpreadDeal.class,
+				Book.class,
+				InternetProvider.class,
+				CorpType.class,
+				Nationality.class,
+				Manager.class
+		};
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/FixedLeg.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/FixedLeg.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/FixedLeg.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,31 +0,0 @@
-package org.hibernate.test.annotations.embedded;
-
-import java.text.NumberFormat;
-import javax.persistence.Embeddable;
-
-/**
- * Represents fixed part of Interest Rate Swap cash flows.
- */
- at Embeddable
-public class FixedLeg extends Leg {
-
-	/**
-	 * Fixed rate.
-	 */
-	private double rate;
-
-	public double getRate() {
-		return rate;
-	}
-
-	public void setRate(double rate) {
-		this.rate = rate;
-	}
-
-	public String toString() {
-		NumberFormat format = NumberFormat.getNumberInstance();
-		format.setMinimumFractionDigits( 4 );
-		format.setMaximumFractionDigits( 4 );
-		return format.format( getRate() ) + "%";
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/FixedLeg.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/FixedLeg.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/FixedLeg.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/FixedLeg.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,31 @@
+package org.hibernate.test.annotations.embedded;
+
+import java.text.NumberFormat;
+import javax.persistence.Embeddable;
+
+/**
+ * Represents fixed part of Interest Rate Swap cash flows.
+ */
+ at Embeddable
+public class FixedLeg extends Leg {
+
+	/**
+	 * Fixed rate.
+	 */
+	private double rate;
+
+	public double getRate() {
+		return rate;
+	}
+
+	public void setRate(double rate) {
+		this.rate = rate;
+	}
+
+	public String toString() {
+		NumberFormat format = NumberFormat.getNumberInstance();
+		format.setMinimumFractionDigits( 4 );
+		format.setMaximumFractionDigits( 4 );
+		return format.format( getRate() ) + "%";
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/FloatLeg.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/FloatLeg.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/FloatLeg.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,49 +0,0 @@
-package org.hibernate.test.annotations.embedded;
-
-import java.text.NumberFormat;
-import javax.persistence.Embeddable;
-
-/**
- * Represents floating part of Interest Rate Swap cash flows.
- */
- at Embeddable
-public class FloatLeg extends Leg {
-
-	/**
-	 * Possible values for the rate index.
-	 */
-	public enum RateIndex {
-		LIBOR, EURIBOR, TIBOR}
-
-	;
-
-	private RateIndex rateIndex;
-
-	/**
-	 * Spread over the selected rate index (in basis points).
-	 */
-	private double rateSpread;
-
-	public RateIndex getRateIndex() {
-		return rateIndex;
-	}
-
-	public void setRateIndex(RateIndex rateIndex) {
-		this.rateIndex = rateIndex;
-	}
-
-	public double getRateSpread() {
-		return rateSpread;
-	}
-
-	public void setRateSpread(double rateSpread) {
-		this.rateSpread = rateSpread;
-	}
-
-	public String toString() {
-		NumberFormat format = NumberFormat.getNumberInstance();
-		format.setMinimumFractionDigits( 1 );
-		format.setMaximumFractionDigits( 1 );
-		return "[" + getRateIndex().toString() + "+" + format.format( getRateSpread() ) + "]";
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/FloatLeg.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/FloatLeg.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/FloatLeg.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/FloatLeg.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,49 @@
+package org.hibernate.test.annotations.embedded;
+
+import java.text.NumberFormat;
+import javax.persistence.Embeddable;
+
+/**
+ * Represents floating part of Interest Rate Swap cash flows.
+ */
+ at Embeddable
+public class FloatLeg extends Leg {
+
+	/**
+	 * Possible values for the rate index.
+	 */
+	public enum RateIndex {
+		LIBOR, EURIBOR, TIBOR}
+
+	;
+
+	private RateIndex rateIndex;
+
+	/**
+	 * Spread over the selected rate index (in basis points).
+	 */
+	private double rateSpread;
+
+	public RateIndex getRateIndex() {
+		return rateIndex;
+	}
+
+	public void setRateIndex(RateIndex rateIndex) {
+		this.rateIndex = rateIndex;
+	}
+
+	public double getRateSpread() {
+		return rateSpread;
+	}
+
+	public void setRateSpread(double rateSpread) {
+		this.rateSpread = rateSpread;
+	}
+
+	public String toString() {
+		NumberFormat format = NumberFormat.getNumberInstance();
+		format.setMinimumFractionDigits( 1 );
+		format.setMaximumFractionDigits( 1 );
+		return "[" + getRateIndex().toString() + "+" + format.format( getRateSpread() ) + "]";
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/InternetProvider.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/InternetProvider.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/InternetProvider.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,42 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.embedded;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class InternetProvider {
-	private Integer id;
-	private String brandName;
-	private LegalStructure owner;
-
-	public String getBrandName() {
-		return brandName;
-	}
-
-	public void setBrandName(String brandName) {
-		this.brandName = brandName;
-	}
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public LegalStructure getOwner() {
-		return owner;
-	}
-
-	public void setOwner(LegalStructure owner) {
-		this.owner = owner;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/InternetProvider.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/InternetProvider.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/InternetProvider.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/InternetProvider.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,42 @@
+//$Id$
+package org.hibernate.test.annotations.embedded;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class InternetProvider {
+	private Integer id;
+	private String brandName;
+	private LegalStructure owner;
+
+	public String getBrandName() {
+		return brandName;
+	}
+
+	public void setBrandName(String brandName) {
+		this.brandName = brandName;
+	}
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public LegalStructure getOwner() {
+		return owner;
+	}
+
+	public void setOwner(LegalStructure owner) {
+		this.owner = owner;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Leg.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Leg.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Leg.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,31 +0,0 @@
-package org.hibernate.test.annotations.embedded;
-
-import javax.persistence.MappedSuperclass;
-
-/**
- * Represents a leg of a vanilla interest rate swap.
- */
- at MappedSuperclass
-public class Leg {
-	/**
-	 * Possible values of the payment frequency field.
-	 */
-	public enum Frequency {
-		ANNUALY, SEMIANNUALLY, QUARTERLY, MONTHLY }
-
-	;
-
-	/**
-	 * Shows how frequent payments according to this leg should be made.
-	 */
-	private Frequency paymentFrequency;
-
-	public Frequency getPaymentFrequency() {
-		return paymentFrequency;
-	}
-
-	public void setPaymentFrequency(Frequency paymentFrequency) {
-		this.paymentFrequency = paymentFrequency;
-	}
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Leg.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Leg.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Leg.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Leg.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,31 @@
+package org.hibernate.test.annotations.embedded;
+
+import javax.persistence.MappedSuperclass;
+
+/**
+ * Represents a leg of a vanilla interest rate swap.
+ */
+ at MappedSuperclass
+public class Leg {
+	/**
+	 * Possible values of the payment frequency field.
+	 */
+	public enum Frequency {
+		ANNUALY, SEMIANNUALLY, QUARTERLY, MONTHLY }
+
+	;
+
+	/**
+	 * Shows how frequent payments according to this leg should be made.
+	 */
+	private Frequency paymentFrequency;
+
+	public Frequency getPaymentFrequency() {
+		return paymentFrequency;
+	}
+
+	public void setPaymentFrequency(Frequency paymentFrequency) {
+		this.paymentFrequency = paymentFrequency;
+	}
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/LegalStructure.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/LegalStructure.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/LegalStructure.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,66 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.embedded;
-
-import java.util.HashSet;
-import java.util.Set;
-import javax.persistence.Embeddable;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-import javax.persistence.OneToMany;
-
-/**
- * @author Emmanuel Bernard
- */
- at Embeddable
-public class LegalStructure {
-	private String name;
-	private String country;
-	private CorpType corporationType;
-	private Nationality origin;
-	private Set<Manager> topManagement = new HashSet<Manager>();
-
-	@ManyToOne
-	@JoinColumn(name = "CORP_ID")
-	public CorpType getCorporationType() {
-		return corporationType;
-	}
-
-	public void setCorporationType(CorpType corporationType) {
-		this.corporationType = corporationType;
-	}
-
-	public String getCountry() {
-		return country;
-	}
-
-	public void setCountry(String country) {
-		this.country = country;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	@ManyToOne
-	@JoinColumn(name = "origin_fk")
-	public Nationality getOrigin() {
-		return origin;
-	}
-
-	public void setOrigin(Nationality origin) {
-		this.origin = origin;
-	}
-
-	@OneToMany(mappedBy = "employer")
-	public Set<Manager> getTopManagement() {
-		return topManagement;
-	}
-
-	public void setTopManagement(Set<Manager> topManagement) {
-		this.topManagement = topManagement;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/LegalStructure.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/LegalStructure.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/LegalStructure.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/LegalStructure.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,66 @@
+//$Id$
+package org.hibernate.test.annotations.embedded;
+
+import java.util.HashSet;
+import java.util.Set;
+import javax.persistence.Embeddable;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToMany;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Embeddable
+public class LegalStructure {
+	private String name;
+	private String country;
+	private CorpType corporationType;
+	private Nationality origin;
+	private Set<Manager> topManagement = new HashSet<Manager>();
+
+	@ManyToOne
+	@JoinColumn(name = "CORP_ID")
+	public CorpType getCorporationType() {
+		return corporationType;
+	}
+
+	public void setCorporationType(CorpType corporationType) {
+		this.corporationType = corporationType;
+	}
+
+	public String getCountry() {
+		return country;
+	}
+
+	public void setCountry(String country) {
+		this.country = country;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	@ManyToOne
+	@JoinColumn(name = "origin_fk")
+	public Nationality getOrigin() {
+		return origin;
+	}
+
+	public void setOrigin(Nationality origin) {
+		this.origin = origin;
+	}
+
+	@OneToMany(mappedBy = "employer")
+	public Set<Manager> getTopManagement() {
+		return topManagement;
+	}
+
+	public void setTopManagement(Set<Manager> topManagement) {
+		this.topManagement = topManagement;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Manager.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Manager.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Manager.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,44 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.embedded;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.ManyToOne;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Manager {
-	private Integer id;
-	private String name;
-	private InternetProvider employer;
-
-	@ManyToOne
-	public InternetProvider getEmployer() {
-		return employer;
-	}
-
-	public void setEmployer(InternetProvider employer) {
-		this.employer = employer;
-	}
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Manager.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Manager.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Manager.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Manager.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,44 @@
+//$Id$
+package org.hibernate.test.annotations.embedded;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Manager {
+	private Integer id;
+	private String name;
+	private InternetProvider employer;
+
+	@ManyToOne
+	public InternetProvider getEmployer() {
+		return employer;
+	}
+
+	public void setEmployer(InternetProvider employer) {
+		this.employer = employer;
+	}
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Nationality.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Nationality.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Nationality.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,33 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.embedded;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Nationality {
-	private Integer id;
-	private String name;
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Nationality.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Nationality.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Nationality.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Nationality.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,33 @@
+//$Id$
+package org.hibernate.test.annotations.embedded;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Nationality {
+	private Integer id;
+	private String name;
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/NotonialDeal.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/NotonialDeal.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/NotonialDeal.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,30 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.embedded;
-
-import javax.persistence.AttributeOverride;
-import javax.persistence.AttributeOverrides;
-import javax.persistence.Column;
-import javax.persistence.MappedSuperclass;
-
-/**
- * @author Emmanuel Bernard
- */
- at AttributeOverrides(value = {
- at AttributeOverride(name = "swap.tenor", column = @Column(name = "TENOR")), //should be ovvriden by deal
- at AttributeOverride(name = "id", column = @Column(name = "NOTONIALDEAL_ID"))
-		})
- at MappedSuperclass
-public class NotonialDeal extends Deal {
-	/**
-	 * Notional amount of both IRSs.
-	 */
-	private double notional;
-
-	public double getNotional() {
-		return notional;
-	}
-
-	public void setNotional(double notional) {
-		this.notional = notional;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/NotonialDeal.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/NotonialDeal.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/NotonialDeal.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/NotonialDeal.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,30 @@
+//$Id$
+package org.hibernate.test.annotations.embedded;
+
+import javax.persistence.AttributeOverride;
+import javax.persistence.AttributeOverrides;
+import javax.persistence.Column;
+import javax.persistence.MappedSuperclass;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at AttributeOverrides(value = {
+ at AttributeOverride(name = "swap.tenor", column = @Column(name = "TENOR")), //should be ovvriden by deal
+ at AttributeOverride(name = "id", column = @Column(name = "NOTONIALDEAL_ID"))
+		})
+ at MappedSuperclass
+public class NotonialDeal extends Deal {
+	/**
+	 * Notional amount of both IRSs.
+	 */
+	private double notional;
+
+	public double getNotional() {
+		return notional;
+	}
+
+	public void setNotional(double notional) {
+		this.notional = notional;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Person.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Person.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Person.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,35 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.embedded;
-
-import java.io.Serializable;
-import javax.persistence.AttributeOverride;
-import javax.persistence.AttributeOverrides;
-import javax.persistence.Column;
-import javax.persistence.Embedded;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.Table;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Table(name = "PersonEmbed")
-public class Person implements Serializable {
-	@Id
-	@GeneratedValue
-	Integer id;
-
-	String name;
-
-	@Embedded
-	Address address;
-
-	@Embedded
-	@AttributeOverrides({
-	@AttributeOverride(name = "iso2", column = @Column(name = "bornIso2")),
-	@AttributeOverride(name = "name", column = @Column(name = "bornCountryName"))
-			})
-	Country bornIn;
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Person.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Person.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Person.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Person.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,35 @@
+//$Id$
+package org.hibernate.test.annotations.embedded;
+
+import java.io.Serializable;
+import javax.persistence.AttributeOverride;
+import javax.persistence.AttributeOverrides;
+import javax.persistence.Column;
+import javax.persistence.Embedded;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Table(name = "PersonEmbed")
+public class Person implements Serializable {
+	@Id
+	@GeneratedValue
+	Integer id;
+
+	String name;
+
+	@Embedded
+	Address address;
+
+	@Embedded
+	@AttributeOverrides({
+	@AttributeOverride(name = "iso2", column = @Column(name = "bornIso2")),
+	@AttributeOverride(name = "name", column = @Column(name = "bornCountryName"))
+			})
+	Country bornIn;
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/RegionalArticle.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/RegionalArticle.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/RegionalArticle.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,50 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.embedded;
-
-import java.io.Serializable;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-
-/**
- * A regional article is typically a bad design, it keep the country iso2 and a business key as
- * (composite) primary key
- *
- * @author Emmanuel Bernard
- */
- at Entity
-public class RegionalArticle implements Serializable {
-	private RegionalArticlePk pk;
-	private String name;
-
-	@Id
-	public RegionalArticlePk getPk() {
-		return pk;
-	}
-
-	public void setPk(RegionalArticlePk pk) {
-		this.pk = pk;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	public int hashCode() {
-		//a NPE can occurs, but I don't expect hashcode to be used before pk is set
-		return getPk().hashCode();
-	}
-
-	public boolean equals(Object obj) {
-		//a NPE can occurs, but I don't expect equals to be used before pk is set
-		if ( obj != null && obj instanceof RegionalArticle ) {
-			return getPk().equals( ( (RegionalArticle) obj ).getPk() );
-		}
-		else {
-			return false;
-		}
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/RegionalArticle.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/RegionalArticle.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/RegionalArticle.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/RegionalArticle.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,50 @@
+//$Id$
+package org.hibernate.test.annotations.embedded;
+
+import java.io.Serializable;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+/**
+ * A regional article is typically a bad design, it keep the country iso2 and a business key as
+ * (composite) primary key
+ *
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class RegionalArticle implements Serializable {
+	private RegionalArticlePk pk;
+	private String name;
+
+	@Id
+	public RegionalArticlePk getPk() {
+		return pk;
+	}
+
+	public void setPk(RegionalArticlePk pk) {
+		this.pk = pk;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public int hashCode() {
+		//a NPE can occurs, but I don't expect hashcode to be used before pk is set
+		return getPk().hashCode();
+	}
+
+	public boolean equals(Object obj) {
+		//a NPE can occurs, but I don't expect equals to be used before pk is set
+		if ( obj != null && obj instanceof RegionalArticle ) {
+			return getPk().equals( ( (RegionalArticle) obj ).getPk() );
+		}
+		else {
+			return false;
+		}
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/RegionalArticlePk.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/RegionalArticlePk.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/RegionalArticlePk.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,38 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.embedded;
-
-import java.io.Serializable;
-import javax.persistence.Embeddable;
-
-import org.hibernate.annotations.AccessType;
-
-/**
- * Regional article pk
- *
- * @author Emmanuel Bernard
- */
- at Embeddable
- at AccessType("field")
-public class RegionalArticlePk implements Serializable {
-	/**
-	 * country iso2 code
-	 */
-	public String iso2;
-	public String localUniqueKey;
-
-	public int hashCode() {
-		//this implem sucks
-		return ( iso2 + localUniqueKey ).hashCode();
-	}
-
-	public boolean equals(Object obj) {
-		//iso2 and localUniqueKey are expected to be set in this implem
-		if ( obj != null && obj instanceof RegionalArticlePk ) {
-			RegionalArticlePk other = (RegionalArticlePk) obj;
-			return iso2.equals( other.iso2 ) && localUniqueKey.equals( other.localUniqueKey );
-		}
-		else {
-			return false;
-		}
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/RegionalArticlePk.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/RegionalArticlePk.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/RegionalArticlePk.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/RegionalArticlePk.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,38 @@
+//$Id$
+package org.hibernate.test.annotations.embedded;
+
+import java.io.Serializable;
+import javax.persistence.Embeddable;
+
+import org.hibernate.annotations.AccessType;
+
+/**
+ * Regional article pk
+ *
+ * @author Emmanuel Bernard
+ */
+ at Embeddable
+ at AccessType("field")
+public class RegionalArticlePk implements Serializable {
+	/**
+	 * country iso2 code
+	 */
+	public String iso2;
+	public String localUniqueKey;
+
+	public int hashCode() {
+		//this implem sucks
+		return ( iso2 + localUniqueKey ).hashCode();
+	}
+
+	public boolean equals(Object obj) {
+		//iso2 and localUniqueKey are expected to be set in this implem
+		if ( obj != null && obj instanceof RegionalArticlePk ) {
+			RegionalArticlePk other = (RegionalArticlePk) obj;
+			return iso2.equals( other.iso2 ) && localUniqueKey.equals( other.localUniqueKey );
+		}
+		else {
+			return false;
+		}
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/SpreadDeal.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/SpreadDeal.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/SpreadDeal.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,62 +0,0 @@
-package org.hibernate.test.annotations.embedded;
-
-import javax.persistence.AttributeOverride;
-import javax.persistence.AttributeOverrides;
-import javax.persistence.Column;
-import javax.persistence.Embedded;
-import javax.persistence.Entity;
-
-/**
- * Represents a "curve spread" deal that consists of
- * two Interest Rate Swaps with different tenors (short and long).
- * For simplicity, tenors are not considered here.
- */
- at Entity
- at AttributeOverrides(value = {
- at AttributeOverride(name = "swap.tenor", column = @Column(name = "MEDIUM_TENOR")),
- at AttributeOverride(name = "swap.fixedLeg.paymentFrequency", column = @Column(name = "MEDIUM_FIXED_FREQUENCY")),
- at AttributeOverride(name = "swap.fixedLeg.rate", column = @Column(name = "MEDIUM_FIXED_RATE")),
- at AttributeOverride(name = "swap.floatLeg.paymentFrequency", column = @Column(name = "MEDIUM_FLOAT_FREQUENCY")),
- at AttributeOverride(name = "swap.floatLeg.rateIndex", column = @Column(name = "MEDIUM_FLOAT_RATEINDEX")),
- at AttributeOverride(name = "swap.floatLeg.rateSpread", column = @Column(name = "MEDIUM_FLOAT_RATESPREAD"))
-		})
-public class SpreadDeal extends NotonialDeal {
-
-	/**
-	 * Swap with the tenor.
-	 */
-	private Swap longSwap;
-
-	@Embedded
-	public Swap getLongSwap() {
-		return longSwap;
-	}
-
-	public void setLongSwap(Swap swap) {
-		this.longSwap = swap;
-	}
-
-
-	/**
-	 * Swap with the longer tenor.
-	 */
-	private Swap shortSwap;
-
-
-	@Embedded
-	@AttributeOverrides(value = {
-	@AttributeOverride(name = "tenor", column = @Column(name = "SHORT_TENOR")),
-	@AttributeOverride(name = "fixedLeg.paymentFrequency", column = @Column(name = "SHORT_FIXED_FREQUENCY")),
-	@AttributeOverride(name = "fixedLeg.rate", column = @Column(name = "SHORT_FIXED_RATE")),
-	@AttributeOverride(name = "floatLeg.paymentFrequency", column = @Column(name = "SHORT_FLOAT_FREQUENCY")),
-	@AttributeOverride(name = "floatLeg.rateIndex", column = @Column(name = "SHORT_FLOAT_RATEINDEX")),
-	@AttributeOverride(name = "floatLeg.rateSpread", column = @Column(name = "SHORT_FLOAT_RATESPREAD"))
-			})
-	public Swap getShortSwap() {
-		return shortSwap;
-	}
-
-	public void setShortSwap(Swap shortSwap) {
-		this.shortSwap = shortSwap;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/SpreadDeal.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/SpreadDeal.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/SpreadDeal.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/SpreadDeal.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,62 @@
+package org.hibernate.test.annotations.embedded;
+
+import javax.persistence.AttributeOverride;
+import javax.persistence.AttributeOverrides;
+import javax.persistence.Column;
+import javax.persistence.Embedded;
+import javax.persistence.Entity;
+
+/**
+ * Represents a "curve spread" deal that consists of
+ * two Interest Rate Swaps with different tenors (short and long).
+ * For simplicity, tenors are not considered here.
+ */
+ at Entity
+ at AttributeOverrides(value = {
+ at AttributeOverride(name = "swap.tenor", column = @Column(name = "MEDIUM_TENOR")),
+ at AttributeOverride(name = "swap.fixedLeg.paymentFrequency", column = @Column(name = "MEDIUM_FIXED_FREQUENCY")),
+ at AttributeOverride(name = "swap.fixedLeg.rate", column = @Column(name = "MEDIUM_FIXED_RATE")),
+ at AttributeOverride(name = "swap.floatLeg.paymentFrequency", column = @Column(name = "MEDIUM_FLOAT_FREQUENCY")),
+ at AttributeOverride(name = "swap.floatLeg.rateIndex", column = @Column(name = "MEDIUM_FLOAT_RATEINDEX")),
+ at AttributeOverride(name = "swap.floatLeg.rateSpread", column = @Column(name = "MEDIUM_FLOAT_RATESPREAD"))
+		})
+public class SpreadDeal extends NotonialDeal {
+
+	/**
+	 * Swap with the tenor.
+	 */
+	private Swap longSwap;
+
+	@Embedded
+	public Swap getLongSwap() {
+		return longSwap;
+	}
+
+	public void setLongSwap(Swap swap) {
+		this.longSwap = swap;
+	}
+
+
+	/**
+	 * Swap with the longer tenor.
+	 */
+	private Swap shortSwap;
+
+
+	@Embedded
+	@AttributeOverrides(value = {
+	@AttributeOverride(name = "tenor", column = @Column(name = "SHORT_TENOR")),
+	@AttributeOverride(name = "fixedLeg.paymentFrequency", column = @Column(name = "SHORT_FIXED_FREQUENCY")),
+	@AttributeOverride(name = "fixedLeg.rate", column = @Column(name = "SHORT_FIXED_RATE")),
+	@AttributeOverride(name = "floatLeg.paymentFrequency", column = @Column(name = "SHORT_FLOAT_FREQUENCY")),
+	@AttributeOverride(name = "floatLeg.rateIndex", column = @Column(name = "SHORT_FLOAT_RATEINDEX")),
+	@AttributeOverride(name = "floatLeg.rateSpread", column = @Column(name = "SHORT_FLOAT_RATESPREAD"))
+			})
+	public Swap getShortSwap() {
+		return shortSwap;
+	}
+
+	public void setShortSwap(Swap shortSwap) {
+		this.shortSwap = shortSwap;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Summary.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Summary.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Summary.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,41 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.embedded;
-
-import javax.persistence.Embeddable;
-
-import org.hibernate.annotations.Parent;
-
-/**
- * @author Emmanuel Bernard
- */
- at Embeddable
-public class Summary {
-	private int size;
-	private String text;
-	private Book summarizedBook;
-
-	public int getSize() {
-		return size;
-	}
-
-	public void setSize(int size) {
-		this.size = size;
-	}
-
-	public String getText() {
-		return text;
-	}
-
-	public void setText(String text) {
-		this.text = text;
-	}
-
-	@Parent
-	public Book getSummarizedBook() {
-		return summarizedBook;
-	}
-
-	public void setSummarizedBook(Book summarizedBook) {
-		this.summarizedBook = summarizedBook;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Summary.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Summary.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Summary.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Summary.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,41 @@
+//$Id$
+package org.hibernate.test.annotations.embedded;
+
+import javax.persistence.Embeddable;
+
+import org.hibernate.annotations.Parent;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Embeddable
+public class Summary {
+	private int size;
+	private String text;
+	private Book summarizedBook;
+
+	public int getSize() {
+		return size;
+	}
+
+	public void setSize(int size) {
+		this.size = size;
+	}
+
+	public String getText() {
+		return text;
+	}
+
+	public void setText(String text) {
+		this.text = text;
+	}
+
+	@Parent
+	public Book getSummarizedBook() {
+		return summarizedBook;
+	}
+
+	public void setSummarizedBook(Book summarizedBook) {
+		this.summarizedBook = summarizedBook;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Swap.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Swap.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Swap.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,58 +0,0 @@
-package org.hibernate.test.annotations.embedded;
-
-import javax.persistence.AttributeOverride;
-import javax.persistence.Column;
-import javax.persistence.Embeddable;
-import javax.persistence.Embedded;
-
-/**
- * Interest Rate Swap with Tenor. Used here to compose
- * a swap spread deal.
- */
- at Embeddable
-public class Swap {
-
-	/**
-	 * Tenor (duration) of the swap (in years).
-	 */
-	private int tenor;
-
-	public int getTenor() {
-		return tenor;
-	}
-
-	public void setTenor(int tenor) {
-		this.tenor = tenor;
-	}
-
-	/**
-	 * Fixed leg (cash flows with the fixed rate).
-	 */
-	private FixedLeg fixedLeg;
-
-	/**
-	 * Floating leg (cash flows bound to a financial index).
-	 */
-	private FloatLeg floatLeg;
-
-	@Embedded
-	// We retain this annotation to test the precedence of @AttributeOverride
-	// Outermost override annotation should win
-	@AttributeOverride(name = "paymentFrequency", column = @Column(name = "FIXED_FREQENCY"))
-	public FixedLeg getFixedLeg() {
-		return fixedLeg;
-	}
-
-	public void setFixedLeg(FixedLeg fixedLeg) {
-		this.fixedLeg = fixedLeg;
-	}
-
-	@Embedded
-	public FloatLeg getFloatLeg() {
-		return floatLeg;
-	}
-
-	public void setFloatLeg(FloatLeg floatLeg) {
-		this.floatLeg = floatLeg;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Swap.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Swap.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Swap.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/Swap.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,58 @@
+package org.hibernate.test.annotations.embedded;
+
+import javax.persistence.AttributeOverride;
+import javax.persistence.Column;
+import javax.persistence.Embeddable;
+import javax.persistence.Embedded;
+
+/**
+ * Interest Rate Swap with Tenor. Used here to compose
+ * a swap spread deal.
+ */
+ at Embeddable
+public class Swap {
+
+	/**
+	 * Tenor (duration) of the swap (in years).
+	 */
+	private int tenor;
+
+	public int getTenor() {
+		return tenor;
+	}
+
+	public void setTenor(int tenor) {
+		this.tenor = tenor;
+	}
+
+	/**
+	 * Fixed leg (cash flows with the fixed rate).
+	 */
+	private FixedLeg fixedLeg;
+
+	/**
+	 * Floating leg (cash flows bound to a financial index).
+	 */
+	private FloatLeg floatLeg;
+
+	@Embedded
+	// We retain this annotation to test the precedence of @AttributeOverride
+	// Outermost override annotation should win
+	@AttributeOverride(name = "paymentFrequency", column = @Column(name = "FIXED_FREQENCY"))
+	public FixedLeg getFixedLeg() {
+		return fixedLeg;
+	}
+
+	public void setFixedLeg(FixedLeg fixedLeg) {
+		this.fixedLeg = fixedLeg;
+	}
+
+	@Embedded
+	public FloatLeg getFloatLeg() {
+		return floatLeg;
+	}
+
+	public void setFloatLeg(FloatLeg floatLeg) {
+		this.floatLeg = floatLeg;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/VanillaSwap.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/VanillaSwap.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/VanillaSwap.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,77 +0,0 @@
-package org.hibernate.test.annotations.embedded;
-
-import javax.persistence.AttributeOverride;
-import javax.persistence.Column;
-import javax.persistence.Embedded;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-
-/**
- * Represents an Interest Rate Swap.
- */
- at Entity
-public class VanillaSwap {
-
-	/**
-	 * Possible values for the currency field.
-	 */
-	public enum Currency {
-		USD, GBP, EUR, JPY }
-
-	/**
-	 * Identifier of the Interest Rate Swap
-	 */
-	private String instrumentId;
-
-	/**
-	 * Currency of the swap (and of both legs).
-	 */
-	private Currency currency;
-
-	/**
-	 * Fixed leg (cash flows with the fixed rate).
-	 */
-	private FixedLeg fixedLeg;
-
-	/**
-	 * Floating leg (cash flows bound to a financial index).
-	 */
-	private FloatLeg floatLeg;
-
-	@Embedded
-	@AttributeOverride(name = "paymentFrequency", column = @Column(name = "FIXED_FREQENCY"))
-	public FixedLeg getFixedLeg() {
-		return fixedLeg;
-	}
-
-	public void setFixedLeg(FixedLeg fixedLeg) {
-		this.fixedLeg = fixedLeg;
-	}
-
-	@Embedded
-	@AttributeOverride(name = "paymentFrequency", column = @Column(name = "FLOAT_FREQUENCY"))
-	public FloatLeg getFloatLeg() {
-		return floatLeg;
-	}
-
-	public void setFloatLeg(FloatLeg floatLeg) {
-		this.floatLeg = floatLeg;
-	}
-
-	public Currency getCurrency() {
-		return currency;
-	}
-
-	public void setCurrency(Currency currency) {
-		this.currency = currency;
-	}
-
-	@Id
-	public String getInstrumentId() {
-		return instrumentId;
-	}
-
-	public void setInstrumentId(String instrumentId) {
-		this.instrumentId = instrumentId;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/VanillaSwap.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/VanillaSwap.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/VanillaSwap.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/embedded/VanillaSwap.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,77 @@
+package org.hibernate.test.annotations.embedded;
+
+import javax.persistence.AttributeOverride;
+import javax.persistence.Column;
+import javax.persistence.Embedded;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+/**
+ * Represents an Interest Rate Swap.
+ */
+ at Entity
+public class VanillaSwap {
+
+	/**
+	 * Possible values for the currency field.
+	 */
+	public enum Currency {
+		USD, GBP, EUR, JPY }
+
+	/**
+	 * Identifier of the Interest Rate Swap
+	 */
+	private String instrumentId;
+
+	/**
+	 * Currency of the swap (and of both legs).
+	 */
+	private Currency currency;
+
+	/**
+	 * Fixed leg (cash flows with the fixed rate).
+	 */
+	private FixedLeg fixedLeg;
+
+	/**
+	 * Floating leg (cash flows bound to a financial index).
+	 */
+	private FloatLeg floatLeg;
+
+	@Embedded
+	@AttributeOverride(name = "paymentFrequency", column = @Column(name = "FIXED_FREQENCY"))
+	public FixedLeg getFixedLeg() {
+		return fixedLeg;
+	}
+
+	public void setFixedLeg(FixedLeg fixedLeg) {
+		this.fixedLeg = fixedLeg;
+	}
+
+	@Embedded
+	@AttributeOverride(name = "paymentFrequency", column = @Column(name = "FLOAT_FREQUENCY"))
+	public FloatLeg getFloatLeg() {
+		return floatLeg;
+	}
+
+	public void setFloatLeg(FloatLeg floatLeg) {
+		this.floatLeg = floatLeg;
+	}
+
+	public Currency getCurrency() {
+		return currency;
+	}
+
+	public void setCurrency(Currency currency) {
+		this.currency = currency;
+	}
+
+	@Id
+	public String getInstrumentId() {
+		return instrumentId;
+	}
+
+	public void setInstrumentId(String instrumentId) {
+		this.instrumentId = instrumentId;
+	}
+}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity)

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Address.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Address.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Address.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,47 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.entity;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.Table;
-
-/**
- * Has a serializable class as a property
- *
- * @author Emmanuel Bernard
- */
- at Entity
- at Table(name = "serial_address")
-public class Address {
-	private Integer id;
-	private String city;
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getCity() {
-		return city;
-	}
-
-	public void setCity(String city) {
-		this.city = city;
-	}
-
-	public Country getCountry() {
-		return country;
-	}
-
-	public void setCountry(Country country) {
-		this.country = country;
-	}
-
-	private Country country;
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Address.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Address.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Address.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Address.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,47 @@
+//$Id$
+package org.hibernate.test.annotations.entity;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+/**
+ * Has a serializable class as a property
+ *
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Table(name = "serial_address")
+public class Address {
+	private Integer id;
+	private String city;
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getCity() {
+		return city;
+	}
+
+	public void setCity(String city) {
+		this.city = city;
+	}
+
+	public Country getCountry() {
+		return country;
+	}
+
+	public void setCountry(Country country) {
+		this.country = country;
+	}
+
+	private Country country;
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/BasicHibernateAnnotationsTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/BasicHibernateAnnotationsTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/BasicHibernateAnnotationsTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,339 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.entity;
-
-import java.math.BigDecimal;
-import java.util.Currency;
-import java.util.Date;
-
-import org.hibernate.Hibernate;
-import org.hibernate.HibernateException;
-import org.hibernate.Query;
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-import org.hibernate.test.annotations.TestCase;
-
-/**
- * @author Emmanuel Bernard
- */
-public class BasicHibernateAnnotationsTest extends TestCase {
-
-	public void testEntity() throws Exception {
-		Forest forest = new Forest();
-		forest.setName( "Fontainebleau" );
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		s.persist( forest );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		forest = (Forest) s.get( Forest.class, forest.getId() );
-		assertNotNull( forest );
-		forest.setName( "Fontainebleau" );
-		//should not execute SQL update
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		forest = (Forest) s.get( Forest.class, forest.getId() );
-		assertNotNull( forest );
-		forest.setLength( 23 );
-		//should execute dynamic SQL update
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		s.delete( s.get( Forest.class, forest.getId() ) );
-		tx.commit();
-		s.close();
-	}
-
-	public void testVersioning() throws Exception {
-		Forest forest = new Forest();
-		forest.setName( "Fontainebleau" );
-		forest.setLength( 33 );
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		s.persist( forest );
-		tx.commit();
-		s.close();
-
-		Session parallelSession = openSession();
-		Transaction parallelTx = parallelSession.beginTransaction();
-		s = openSession();
-		tx = s.beginTransaction();
-
-		forest = (Forest) parallelSession.get( Forest.class, forest.getId() );
-		Forest reloadedForest = (Forest) s.get( Forest.class, forest.getId() );
-		reloadedForest.setLength( 11 );
-		assertNotSame( forest, reloadedForest );
-		tx.commit();
-		s.close();
-
-		forest.setLength( 22 );
-		try {
-			parallelTx.commit();
-			fail( "All optimistic locking should have make it fail" );
-		}
-		catch (HibernateException e) {
-			if ( parallelTx != null ) parallelTx.rollback();
-		}
-		finally {
-			parallelSession.close();
-		}
-
-		s = openSession();
-		tx = s.beginTransaction();
-		s.delete( s.get( Forest.class, forest.getId() ) );
-		tx.commit();
-		s.close();
-
-	}
-
-	public void testPolymorphism() throws Exception {
-		Forest forest = new Forest();
-		forest.setName( "Fontainebleau" );
-		forest.setLength( 33 );
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		s.persist( forest );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		Query query = s.createQuery( "from java.lang.Object" );
-		assertEquals( 0, query.list().size() );
-		query = s.createQuery( "from Forest" );
-		assertTrue( 0 < query.list().size() );
-		tx.commit();
-		s.close();
-	}
-
-	public void testType() throws Exception {
-		Forest f = new Forest();
-		f.setName( "Broceliande" );
-		String description = "C'est une enorme foret enchantee ou vivais Merlin et toute la clique";
-		f.setLongDescription( description );
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		s.persist( f );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		f = (Forest) s.get( Forest.class, f.getId() );
-		assertNotNull( f );
-		assertEquals( description, f.getLongDescription() );
-		s.delete( f );
-		tx.commit();
-		s.close();
-
-	}
-
-	public void testNonLazy() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		Forest f = new Forest();
-		Tree t = new Tree();
-		t.setName( "Basic one" );
-		s.persist( f );
-		s.persist( t );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		f = (Forest) s.load( Forest.class, f.getId() );
-		t = (Tree) s.load( Tree.class, t.getId() );
-		assertFalse( "Default should be lazy", Hibernate.isInitialized( f ) );
-		assertTrue( "Tree is not lazy", Hibernate.isInitialized( t ) );
-		tx.commit();
-		s.close();
-	}
-
-	public void testCache() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		ZipCode zc = new ZipCode();
-		zc.code = "92400";
-		s.persist( zc );
-		tx.commit();
-		s.close();
-		getSessions().getStatistics().clear();
-		getSessions().getStatistics().setStatisticsEnabled( true );
-		getSessions().evict( ZipCode.class );
-		s = openSession();
-		tx = s.beginTransaction();
-		s.get( ZipCode.class, zc.code );
-		assertEquals( 1, getSessions().getStatistics().getSecondLevelCachePutCount() );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		s.get( ZipCode.class, zc.code );
-		assertEquals( 1, getSessions().getStatistics().getSecondLevelCacheHitCount() );
-		tx.commit();
-		s.close();
-	}
-
-	public void testFilter() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		s.createQuery( "delete Forest" ).executeUpdate();
-		Forest f1 = new Forest();
-		f1.setLength( 2 );
-		s.persist( f1 );
-		Forest f2 = new Forest();
-		f2.setLength( 20 );
-		s.persist( f2 );
-		Forest f3 = new Forest();
-		f3.setLength( 200 );
-		s.persist( f3 );
-		tx.commit();
-		s.close();
-		s = openSession();
-		tx = s.beginTransaction();
-		s.enableFilter( "betweenLength" ).setParameter( "minLength", 5 ).setParameter( "maxLength", 50 );
-		long count = ( (Long) s.createQuery( "select count(*) from Forest" ).iterate().next() ).intValue();
-		assertEquals( 1, count );
-		s.disableFilter( "betweenLength" );
-		s.enableFilter( "minLength" ).setParameter( "minLength", 5 );
-		count = ( (Long) s.createQuery( "select count(*) from Forest" ).iterate().next() ).longValue();
-		assertEquals( 2l, count );
-		s.disableFilter( "minLength" );
-		tx.rollback();
-		s.close();
-	}
-
-	public void testParameterizedType() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		Forest f = new Forest();
-		f.setSmallText( "ThisIsASmallText" );
-		f.setBigText( "ThisIsABigText" );
-		s.persist( f );
-		tx.commit();
-		s.close();
-		s = openSession();
-		tx = s.beginTransaction();
-		Forest f2 = (Forest) s.get( Forest.class, f.getId() );
-		assertEquals( f.getSmallText().toLowerCase(), f2.getSmallText() );
-		assertEquals( f.getBigText().toUpperCase(), f2.getBigText() );
-		tx.commit();
-		s.close();
-	}
-
-	public void testSerialized() throws Exception {
-		Forest forest = new Forest();
-		forest.setName( "Shire" );
-		Country country = new Country();
-		country.setName( "Middle Earth" );
-		forest.setCountry( country );
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		s.persist( forest );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		forest = (Forest) s.get( Forest.class, forest.getId() );
-		assertNotNull( forest );
-		assertNotNull( forest.getCountry() );
-		assertEquals( country.getName(), forest.getCountry().getName() );
-		tx.commit();
-		s.close();
-	}
-
-	public void testCompositeType() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		Ransom r = new Ransom();
-		r.setKidnapperName( "Se7en" );
-		r.setDate( new Date() );
-		MonetaryAmount amount = new MonetaryAmount(
-				new BigDecimal( 100000 ),
-				Currency.getInstance( "EUR" )
-		);
-		r.setAmount( amount );
-		s.persist( r );
-		tx.commit();
-		s.clear();
-		tx = s.beginTransaction();
-		r = (Ransom) s.get( Ransom.class, r.getId() );
-		assertNotNull( r );
-		assertNotNull( r.getAmount() );
-		assertTrue( 0 == new BigDecimal( 100000 ).compareTo( r.getAmount().getAmount() ) );
-		assertEquals( Currency.getInstance( "EUR" ), r.getAmount().getCurrency() );
-		tx.commit();
-		s.close();
-	}
-
-	public void testFormula() throws Exception {
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		org.hibernate.test.annotations.entity.Flight airFrance = new Flight();
-		airFrance.setId( new Long( 747 ) );
-		airFrance.setMaxAltitude( 10000 );
-		s.persist( airFrance );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		airFrance = (Flight) s.get( Flight.class, airFrance.getId() );
-		assertNotNull( airFrance );
-		assertEquals( 10000000, airFrance.getMaxAltitudeInMilimeter() );
-		s.delete( airFrance );
-		tx.commit();
-		s.close();
-	}
-
-	public BasicHibernateAnnotationsTest(String x) {
-		super( x );
-	}
-
-	protected Class[] getMappings() {
-		return new Class[]{
-				Forest.class,
-				Tree.class,
-				Ransom.class,
-				ZipCode.class,
-				Flight.class
-		};
-	}
-
-	protected String[] getAnnotatedPackages() {
-		return new String[]{
-				"org.hibernate.test.annotations.entity"
-		};
-	}
-
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/BasicHibernateAnnotationsTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/BasicHibernateAnnotationsTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/BasicHibernateAnnotationsTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/BasicHibernateAnnotationsTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,339 @@
+//$Id$
+package org.hibernate.test.annotations.entity;
+
+import java.math.BigDecimal;
+import java.util.Currency;
+import java.util.Date;
+
+import org.hibernate.Hibernate;
+import org.hibernate.HibernateException;
+import org.hibernate.Query;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class BasicHibernateAnnotationsTest extends TestCase {
+
+	public void testEntity() throws Exception {
+		Forest forest = new Forest();
+		forest.setName( "Fontainebleau" );
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		s.persist( forest );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		forest = (Forest) s.get( Forest.class, forest.getId() );
+		assertNotNull( forest );
+		forest.setName( "Fontainebleau" );
+		//should not execute SQL update
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		forest = (Forest) s.get( Forest.class, forest.getId() );
+		assertNotNull( forest );
+		forest.setLength( 23 );
+		//should execute dynamic SQL update
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		s.delete( s.get( Forest.class, forest.getId() ) );
+		tx.commit();
+		s.close();
+	}
+
+	public void testVersioning() throws Exception {
+		Forest forest = new Forest();
+		forest.setName( "Fontainebleau" );
+		forest.setLength( 33 );
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		s.persist( forest );
+		tx.commit();
+		s.close();
+
+		Session parallelSession = openSession();
+		Transaction parallelTx = parallelSession.beginTransaction();
+		s = openSession();
+		tx = s.beginTransaction();
+
+		forest = (Forest) parallelSession.get( Forest.class, forest.getId() );
+		Forest reloadedForest = (Forest) s.get( Forest.class, forest.getId() );
+		reloadedForest.setLength( 11 );
+		assertNotSame( forest, reloadedForest );
+		tx.commit();
+		s.close();
+
+		forest.setLength( 22 );
+		try {
+			parallelTx.commit();
+			fail( "All optimistic locking should have make it fail" );
+		}
+		catch (HibernateException e) {
+			if ( parallelTx != null ) parallelTx.rollback();
+		}
+		finally {
+			parallelSession.close();
+		}
+
+		s = openSession();
+		tx = s.beginTransaction();
+		s.delete( s.get( Forest.class, forest.getId() ) );
+		tx.commit();
+		s.close();
+
+	}
+
+	public void testPolymorphism() throws Exception {
+		Forest forest = new Forest();
+		forest.setName( "Fontainebleau" );
+		forest.setLength( 33 );
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		s.persist( forest );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		Query query = s.createQuery( "from java.lang.Object" );
+		assertEquals( 0, query.list().size() );
+		query = s.createQuery( "from Forest" );
+		assertTrue( 0 < query.list().size() );
+		tx.commit();
+		s.close();
+	}
+
+	public void testType() throws Exception {
+		Forest f = new Forest();
+		f.setName( "Broceliande" );
+		String description = "C'est une enorme foret enchantee ou vivais Merlin et toute la clique";
+		f.setLongDescription( description );
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		s.persist( f );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		f = (Forest) s.get( Forest.class, f.getId() );
+		assertNotNull( f );
+		assertEquals( description, f.getLongDescription() );
+		s.delete( f );
+		tx.commit();
+		s.close();
+
+	}
+
+	public void testNonLazy() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		Forest f = new Forest();
+		Tree t = new Tree();
+		t.setName( "Basic one" );
+		s.persist( f );
+		s.persist( t );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		f = (Forest) s.load( Forest.class, f.getId() );
+		t = (Tree) s.load( Tree.class, t.getId() );
+		assertFalse( "Default should be lazy", Hibernate.isInitialized( f ) );
+		assertTrue( "Tree is not lazy", Hibernate.isInitialized( t ) );
+		tx.commit();
+		s.close();
+	}
+
+	public void testCache() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		ZipCode zc = new ZipCode();
+		zc.code = "92400";
+		s.persist( zc );
+		tx.commit();
+		s.close();
+		getSessions().getStatistics().clear();
+		getSessions().getStatistics().setStatisticsEnabled( true );
+		getSessions().evict( ZipCode.class );
+		s = openSession();
+		tx = s.beginTransaction();
+		s.get( ZipCode.class, zc.code );
+		assertEquals( 1, getSessions().getStatistics().getSecondLevelCachePutCount() );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		s.get( ZipCode.class, zc.code );
+		assertEquals( 1, getSessions().getStatistics().getSecondLevelCacheHitCount() );
+		tx.commit();
+		s.close();
+	}
+
+	public void testFilter() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		s.createQuery( "delete Forest" ).executeUpdate();
+		Forest f1 = new Forest();
+		f1.setLength( 2 );
+		s.persist( f1 );
+		Forest f2 = new Forest();
+		f2.setLength( 20 );
+		s.persist( f2 );
+		Forest f3 = new Forest();
+		f3.setLength( 200 );
+		s.persist( f3 );
+		tx.commit();
+		s.close();
+		s = openSession();
+		tx = s.beginTransaction();
+		s.enableFilter( "betweenLength" ).setParameter( "minLength", 5 ).setParameter( "maxLength", 50 );
+		long count = ( (Long) s.createQuery( "select count(*) from Forest" ).iterate().next() ).intValue();
+		assertEquals( 1, count );
+		s.disableFilter( "betweenLength" );
+		s.enableFilter( "minLength" ).setParameter( "minLength", 5 );
+		count = ( (Long) s.createQuery( "select count(*) from Forest" ).iterate().next() ).longValue();
+		assertEquals( 2l, count );
+		s.disableFilter( "minLength" );
+		tx.rollback();
+		s.close();
+	}
+
+	public void testParameterizedType() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		Forest f = new Forest();
+		f.setSmallText( "ThisIsASmallText" );
+		f.setBigText( "ThisIsABigText" );
+		s.persist( f );
+		tx.commit();
+		s.close();
+		s = openSession();
+		tx = s.beginTransaction();
+		Forest f2 = (Forest) s.get( Forest.class, f.getId() );
+		assertEquals( f.getSmallText().toLowerCase(), f2.getSmallText() );
+		assertEquals( f.getBigText().toUpperCase(), f2.getBigText() );
+		tx.commit();
+		s.close();
+	}
+
+	public void testSerialized() throws Exception {
+		Forest forest = new Forest();
+		forest.setName( "Shire" );
+		Country country = new Country();
+		country.setName( "Middle Earth" );
+		forest.setCountry( country );
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		s.persist( forest );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		forest = (Forest) s.get( Forest.class, forest.getId() );
+		assertNotNull( forest );
+		assertNotNull( forest.getCountry() );
+		assertEquals( country.getName(), forest.getCountry().getName() );
+		tx.commit();
+		s.close();
+	}
+
+	public void testCompositeType() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		Ransom r = new Ransom();
+		r.setKidnapperName( "Se7en" );
+		r.setDate( new Date() );
+		MonetaryAmount amount = new MonetaryAmount(
+				new BigDecimal( 100000 ),
+				Currency.getInstance( "EUR" )
+		);
+		r.setAmount( amount );
+		s.persist( r );
+		tx.commit();
+		s.clear();
+		tx = s.beginTransaction();
+		r = (Ransom) s.get( Ransom.class, r.getId() );
+		assertNotNull( r );
+		assertNotNull( r.getAmount() );
+		assertTrue( 0 == new BigDecimal( 100000 ).compareTo( r.getAmount().getAmount() ) );
+		assertEquals( Currency.getInstance( "EUR" ), r.getAmount().getCurrency() );
+		tx.commit();
+		s.close();
+	}
+
+	public void testFormula() throws Exception {
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		org.hibernate.test.annotations.entity.Flight airFrance = new Flight();
+		airFrance.setId( new Long( 747 ) );
+		airFrance.setMaxAltitude( 10000 );
+		s.persist( airFrance );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		airFrance = (Flight) s.get( Flight.class, airFrance.getId() );
+		assertNotNull( airFrance );
+		assertEquals( 10000000, airFrance.getMaxAltitudeInMilimeter() );
+		s.delete( airFrance );
+		tx.commit();
+		s.close();
+	}
+
+	public BasicHibernateAnnotationsTest(String x) {
+		super( x );
+	}
+
+	protected Class[] getMappings() {
+		return new Class[]{
+				Forest.class,
+				Tree.class,
+				Ransom.class,
+				ZipCode.class,
+				Flight.class
+		};
+	}
+
+	protected String[] getAnnotatedPackages() {
+		return new String[]{
+				"org.hibernate.test.annotations.entity"
+		};
+	}
+
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Bid.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Bid.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Bid.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,63 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.entity;
-
-import javax.persistence.Entity;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
-import javax.persistence.Id;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Bid {
-	private Integer id;
-	private String description;
-	private Starred note;
-	private Starred editorsNote;
-	private Boolean approved;
-
-	@Enumerated(EnumType.STRING)
-	//@Column(columnDefinition = "VARCHAR(10)")
-	public Starred getEditorsNote() {
-		return editorsNote;
-	}
-
-	public void setEditorsNote(Starred editorsNote) {
-		this.editorsNote = editorsNote;
-	}
-
-	@Id
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getDescription() {
-		return description;
-	}
-
-	public void setDescription(String description) {
-		this.description = description;
-	}
-
-	public Starred getNote() {
-		return note;
-	}
-
-	public void setNote(Starred note) {
-		this.note = note;
-	}
-
-	public Boolean getApproved() {
-		return approved;
-	}
-
-	public void setApproved(Boolean approved) {
-		this.approved = approved;
-	}
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Bid.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Bid.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Bid.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Bid.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,63 @@
+//$Id$
+package org.hibernate.test.annotations.entity;
+
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Bid {
+	private Integer id;
+	private String description;
+	private Starred note;
+	private Starred editorsNote;
+	private Boolean approved;
+
+	@Enumerated(EnumType.STRING)
+	//@Column(columnDefinition = "VARCHAR(10)")
+	public Starred getEditorsNote() {
+		return editorsNote;
+	}
+
+	public void setEditorsNote(Starred editorsNote) {
+		this.editorsNote = editorsNote;
+	}
+
+	@Id
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getDescription() {
+		return description;
+	}
+
+	public void setDescription(String description) {
+		this.description = description;
+	}
+
+	public Starred getNote() {
+		return note;
+	}
+
+	public void setNote(Starred note) {
+		this.note = note;
+	}
+
+	public Boolean getApproved() {
+		return approved;
+	}
+
+	public void setApproved(Boolean approved) {
+		this.approved = approved;
+	}
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/CasterStringType.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/CasterStringType.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/CasterStringType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,90 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.entity;
-
-import java.io.Serializable;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Types;
-import java.util.Properties;
-
-import org.hibernate.HibernateException;
-import org.hibernate.usertype.ParameterizedType;
-import org.hibernate.usertype.UserType;
-
-/**
- * Sample of parameter type
- *
- * @author Emmanuel Bernard
- */
-public class CasterStringType implements UserType, ParameterizedType {
-	private static final String CAST = "cast";
-	private Properties parameters;
-
-	public int[] sqlTypes() {
-		return new int[]{Types.VARCHAR};
-	}
-
-	public Class returnedClass() {
-		return String.class;
-	}
-
-	public boolean equals(Object x, Object y) throws HibernateException {
-		return ( x == y ) || ( x != null && x.equals( y ) );
-	}
-
-	public int hashCode(Object x) throws HibernateException {
-		return x.hashCode();
-	}
-
-	public Object nullSafeGet(ResultSet rs, String[] names, Object owner) throws HibernateException, SQLException {
-		String result = rs.getString( names[0] );
-		if ( rs.wasNull() ) return null;
-		if ( parameters.getProperty( CAST ).equals( "lower" ) ) {
-			return result.toLowerCase();
-		}
-		else {
-			return result.toUpperCase();
-		}
-	}
-
-	public void nullSafeSet(PreparedStatement st, Object value, int index) throws HibernateException, SQLException {
-		if ( value == null ) {
-			st.setNull( index, sqlTypes()[0] );
-		}
-		else {
-			String string = (String) value;
-			if ( parameters.getProperty( CAST ).equals( "lower" ) ) {
-				string = string.toLowerCase();
-			}
-			else {
-				string = string.toUpperCase();
-			}
-			st.setString( index, string );
-		}
-	}
-
-	public Object deepCopy(Object value) throws HibernateException {
-		return value;
-	}
-
-	public boolean isMutable() {
-		return false;
-	}
-
-	public Serializable disassemble(Object value) throws HibernateException {
-		return (Serializable) value;
-	}
-
-	public Object assemble(Serializable cached, Object owner) throws HibernateException {
-		return cached;
-	}
-
-	public Object replace(Object original, Object target, Object owner) throws HibernateException {
-		return original;
-	}
-
-	public void setParameterValues(Properties parameters) {
-		this.parameters = parameters;
-	}
-}
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/CasterStringType.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/CasterStringType.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/CasterStringType.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/CasterStringType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,90 @@
+//$Id$
+package org.hibernate.test.annotations.entity;
+
+import java.io.Serializable;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Types;
+import java.util.Properties;
+
+import org.hibernate.HibernateException;
+import org.hibernate.usertype.ParameterizedType;
+import org.hibernate.usertype.UserType;
+
+/**
+ * Sample of parameter type
+ *
+ * @author Emmanuel Bernard
+ */
+public class CasterStringType implements UserType, ParameterizedType {
+	private static final String CAST = "cast";
+	private Properties parameters;
+
+	public int[] sqlTypes() {
+		return new int[]{Types.VARCHAR};
+	}
+
+	public Class returnedClass() {
+		return String.class;
+	}
+
+	public boolean equals(Object x, Object y) throws HibernateException {
+		return ( x == y ) || ( x != null && x.equals( y ) );
+	}
+
+	public int hashCode(Object x) throws HibernateException {
+		return x.hashCode();
+	}
+
+	public Object nullSafeGet(ResultSet rs, String[] names, Object owner) throws HibernateException, SQLException {
+		String result = rs.getString( names[0] );
+		if ( rs.wasNull() ) return null;
+		if ( parameters.getProperty( CAST ).equals( "lower" ) ) {
+			return result.toLowerCase();
+		}
+		else {
+			return result.toUpperCase();
+		}
+	}
+
+	public void nullSafeSet(PreparedStatement st, Object value, int index) throws HibernateException, SQLException {
+		if ( value == null ) {
+			st.setNull( index, sqlTypes()[0] );
+		}
+		else {
+			String string = (String) value;
+			if ( parameters.getProperty( CAST ).equals( "lower" ) ) {
+				string = string.toLowerCase();
+			}
+			else {
+				string = string.toUpperCase();
+			}
+			st.setString( index, string );
+		}
+	}
+
+	public Object deepCopy(Object value) throws HibernateException {
+		return value;
+	}
+
+	public boolean isMutable() {
+		return false;
+	}
+
+	public Serializable disassemble(Object value) throws HibernateException {
+		return (Serializable) value;
+	}
+
+	public Object assemble(Serializable cached, Object owner) throws HibernateException {
+		return cached;
+	}
+
+	public Object replace(Object original, Object target, Object owner) throws HibernateException {
+		return original;
+	}
+
+	public void setParameterValues(Properties parameters) {
+		this.parameters = parameters;
+	}
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/CommunityBid.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/CommunityBid.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/CommunityBid.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,21 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.entity;
-
-import javax.persistence.Entity;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class CommunityBid extends Bid {
-	private Starred communityNote;
-
-	public Starred getCommunityNote() {
-		return communityNote;
-	}
-
-	public void setCommunityNote(Starred communityNote) {
-		this.communityNote = communityNote;
-	}
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/CommunityBid.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/CommunityBid.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/CommunityBid.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/CommunityBid.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,21 @@
+//$Id$
+package org.hibernate.test.annotations.entity;
+
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class CommunityBid extends Bid {
+	private Starred communityNote;
+
+	public Starred getCommunityNote() {
+		return communityNote;
+	}
+
+	public void setCommunityNote(Starred communityNote) {
+		this.communityNote = communityNote;
+	}
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Country.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Country.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Country.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,21 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.entity;
-
-import java.io.Serializable;
-
-/**
- * Serializable object to be serialized in DB as is
- *
- * @author Emmanuel Bernard
- */
-public class Country implements Serializable {
-	private String name;
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Country.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Country.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Country.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Country.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,21 @@
+//$Id$
+package org.hibernate.test.annotations.entity;
+
+import java.io.Serializable;
+
+/**
+ * Serializable object to be serialized in DB as is
+ *
+ * @author Emmanuel Bernard
+ */
+public class Country implements Serializable {
+	private String name;
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Flight.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Flight.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Flight.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,49 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.entity;
-
-import java.io.Serializable;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Inheritance;
-import javax.persistence.InheritanceType;
-import javax.persistence.Table;
-
-import org.hibernate.annotations.Formula;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity()
- at Table(name = "Formula_flight")
- at Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
-public class Flight implements Serializable {
-	Long id;
-	long maxAltitudeInMilimeter;
-	long maxAltitude;
-
-	@Id
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long long1) {
-		id = long1;
-	}
-
-	public long getMaxAltitude() {
-		return maxAltitude;
-	}
-
-	public void setMaxAltitude(long maxAltitude) {
-		this.maxAltitude = maxAltitude;
-	}
-
-	@Formula("maxAltitude * 1000")
-	public long getMaxAltitudeInMilimeter() {
-		return maxAltitudeInMilimeter;
-	}
-
-	public void setMaxAltitudeInMilimeter(long maxAltitudeInMilimeter) {
-		this.maxAltitudeInMilimeter = maxAltitudeInMilimeter;
-	}
-}
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Flight.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Flight.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Flight.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Flight.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,49 @@
+//$Id$
+package org.hibernate.test.annotations.entity;
+
+import java.io.Serializable;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.Formula;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity()
+ at Table(name = "Formula_flight")
+ at Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
+public class Flight implements Serializable {
+	Long id;
+	long maxAltitudeInMilimeter;
+	long maxAltitude;
+
+	@Id
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long long1) {
+		id = long1;
+	}
+
+	public long getMaxAltitude() {
+		return maxAltitude;
+	}
+
+	public void setMaxAltitude(long maxAltitude) {
+		this.maxAltitude = maxAltitude;
+	}
+
+	@Formula("maxAltitude * 1000")
+	public long getMaxAltitudeInMilimeter() {
+		return maxAltitudeInMilimeter;
+	}
+
+	public void setMaxAltitudeInMilimeter(long maxAltitudeInMilimeter) {
+		this.maxAltitudeInMilimeter = maxAltitudeInMilimeter;
+	}
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Forest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Forest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Forest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,111 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.entity;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.Lob;
-
-import org.hibernate.annotations.BatchSize;
-import org.hibernate.annotations.Filter;
-import org.hibernate.annotations.FilterDef;
-import org.hibernate.annotations.Filters;
-import org.hibernate.annotations.Index;
-import org.hibernate.annotations.OptimisticLockType;
-import org.hibernate.annotations.ParamDef;
-import org.hibernate.annotations.Parameter;
-import org.hibernate.annotations.PolymorphismType;
-import org.hibernate.annotations.Type;
-import org.hibernate.annotations.Where;
-
-/**
- * Use hibernate specific annotations
- *
- * @author Emmanuel Bernard
- */
- at Entity
- at BatchSize(size = 5)
- at org.hibernate.annotations.Entity(
-		selectBeforeUpdate = true,
-		dynamicInsert = true, dynamicUpdate = true,
-		optimisticLock = OptimisticLockType.ALL,
-		polymorphism = PolymorphismType.EXPLICIT)
- at Where(clause = "1=1")
- at FilterDef(name = "minLength", parameters = {@ParamDef(name = "minLength", type = "integer")})
- at Filters({
- at Filter(name = "betweenLength"),
- at Filter(name = "minLength", condition = ":minLength <= length")
-		})
- at org.hibernate.annotations.Table(appliesTo = "Forest",
-		indexes = {@Index(name = "idx", columnNames = {"name", "length"})})
-public class Forest {
-	private Integer id;
-	private String name;
-	private long length;
-	private String longDescription;
-	private String smallText;
-	private String bigText;
-	private Country country;
-
-	@Type(type = "text")
-	public String getLongDescription() {
-		return longDescription;
-	}
-
-	public void setLongDescription(String longDescription) {
-		this.longDescription = longDescription;
-	}
-
-	public long getLength() {
-		return length;
-	}
-
-	public void setLength(long length) {
-		this.length = length;
-	}
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	@Type(type = "caster")
-	public String getSmallText() {
-		return smallText;
-	}
-
-	@Type(type = "caster", parameters = {@Parameter(name = "cast", value = "upper")})
-	public String getBigText() {
-		return bigText;
-	}
-
-	public void setSmallText(String smallText) {
-		this.smallText = smallText;
-	}
-
-	public void setBigText(String bigText) {
-		this.bigText = bigText;
-	}
-
-	@Lob
-	public Country getCountry() {
-		return country;
-	}
-
-	public void setCountry(Country country) {
-		this.country = country;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Forest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Forest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Forest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Forest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,111 @@
+//$Id$
+package org.hibernate.test.annotations.entity;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Lob;
+
+import org.hibernate.annotations.BatchSize;
+import org.hibernate.annotations.Filter;
+import org.hibernate.annotations.FilterDef;
+import org.hibernate.annotations.Filters;
+import org.hibernate.annotations.Index;
+import org.hibernate.annotations.OptimisticLockType;
+import org.hibernate.annotations.ParamDef;
+import org.hibernate.annotations.Parameter;
+import org.hibernate.annotations.PolymorphismType;
+import org.hibernate.annotations.Type;
+import org.hibernate.annotations.Where;
+
+/**
+ * Use hibernate specific annotations
+ *
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at BatchSize(size = 5)
+ at org.hibernate.annotations.Entity(
+		selectBeforeUpdate = true,
+		dynamicInsert = true, dynamicUpdate = true,
+		optimisticLock = OptimisticLockType.ALL,
+		polymorphism = PolymorphismType.EXPLICIT)
+ at Where(clause = "1=1")
+ at FilterDef(name = "minLength", parameters = {@ParamDef(name = "minLength", type = "integer")})
+ at Filters({
+ at Filter(name = "betweenLength"),
+ at Filter(name = "minLength", condition = ":minLength <= length")
+		})
+ at org.hibernate.annotations.Table(appliesTo = "Forest",
+		indexes = {@Index(name = "idx", columnNames = {"name", "length"})})
+public class Forest {
+	private Integer id;
+	private String name;
+	private long length;
+	private String longDescription;
+	private String smallText;
+	private String bigText;
+	private Country country;
+
+	@Type(type = "text")
+	public String getLongDescription() {
+		return longDescription;
+	}
+
+	public void setLongDescription(String longDescription) {
+		this.longDescription = longDescription;
+	}
+
+	public long getLength() {
+		return length;
+	}
+
+	public void setLength(long length) {
+		this.length = length;
+	}
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	@Type(type = "caster")
+	public String getSmallText() {
+		return smallText;
+	}
+
+	@Type(type = "caster", parameters = {@Parameter(name = "cast", value = "upper")})
+	public String getBigText() {
+		return bigText;
+	}
+
+	public void setSmallText(String smallText) {
+		this.smallText = smallText;
+	}
+
+	public void setBigText(String bigText) {
+		this.bigText = bigText;
+	}
+
+	@Lob
+	public Country getCountry() {
+		return country;
+	}
+
+	public void setCountry(Country country) {
+		this.country = country;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Java5FeaturesTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Java5FeaturesTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Java5FeaturesTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,115 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.entity;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-import org.hibernate.test.annotations.TestCase;
-
-/**
- * @author Emmanuel Bernard
- */
-public class Java5FeaturesTest extends TestCase {
-	public void testInterface() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		Race r = new Race();
-		r.setId( new Integer( 1 ) );
-		r.setLength( new Long( 3 ) );
-		s.persist( r );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		r = (Race) s.get( Race.class, r.getId() );
-		assertEquals( new Long( 3 ), r.getLength() );
-		tx.commit();
-		s.close();
-
-	}
-
-	public void testEnums() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		CommunityBid communityBid = new CommunityBid();
-		communityBid.setId( new Integer( 2 ) );
-		communityBid.setCommunityNote( Starred.OK );
-		Bid bid = new Bid();
-		bid.setId( new Integer( 1 ) );
-		bid.setDescription( "My best one" );
-		bid.setNote( Starred.OK );
-		bid.setEditorsNote( Starred.GOOD );
-		s.persist( bid );
-		s.persist( communityBid );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		//bid = (Bid) s.get( Bid.class, bid.getId() );
-		bid = (Bid)s.createQuery( "select b from Bid b where b.note = " +
-				Starred.class.getName() + ".OK and b.editorsNote = " +
-				Starred.class.getName() + ".GOOD and b.id = :id")
-				.setParameter( "id", bid.getId() ).uniqueResult();
-		//testing constant value
-		assertEquals( Starred.OK, bid.getNote() );
-		assertEquals( Starred.GOOD, bid.getEditorsNote() );
-		bid.setNote( null );
-		tx.commit();
-		s.clear();
-		tx = s.beginTransaction();
-		bid = (Bid) s.get( Bid.class, bid.getId() );
-		communityBid = (CommunityBid) s.get( CommunityBid.class, communityBid.getId() );
-		assertNull( bid.getNote() );
-		assertEquals( Starred.OK, communityBid.getCommunityNote() );
-		s.delete( bid );
-		s.clear();
-		communityBid = (CommunityBid) s.createSQLQuery( "select {b.*} from Bid b where b.id = ?" )
-				.addEntity( "b", CommunityBid.class )
-				.setInteger( 0, communityBid.getId() ).uniqueResult();
-		assertEquals( Starred.OK, communityBid.getCommunityNote() );
-		s.delete( communityBid );
-		tx.commit();
-		s.close();
-	}
-
-	public void testAutoboxing() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		Bid bid = new Bid();
-		bid.setId( new Integer( 2 ) );
-		bid.setDescription( "My best one" );
-		bid.setNote( Starred.OK );
-		bid.setEditorsNote( Starred.GOOD );
-		bid.setApproved( null );
-		s.persist( bid );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		bid = (Bid) s.get( Bid.class, bid.getId() );
-		assertEquals( null, bid.getApproved() );
-		s.delete( bid );
-		tx.commit();
-		s.close();
-	}
-
-	public Java5FeaturesTest(String x) {
-		super( x );
-	}
-
-	protected Class[] getMappings() {
-		return new Class[]{
-				Race.class,
-				Bid.class,
-				CommunityBid.class
-		};
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Java5FeaturesTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Java5FeaturesTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Java5FeaturesTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Java5FeaturesTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,115 @@
+//$Id$
+package org.hibernate.test.annotations.entity;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Java5FeaturesTest extends TestCase {
+	public void testInterface() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		Race r = new Race();
+		r.setId( new Integer( 1 ) );
+		r.setLength( new Long( 3 ) );
+		s.persist( r );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		r = (Race) s.get( Race.class, r.getId() );
+		assertEquals( new Long( 3 ), r.getLength() );
+		tx.commit();
+		s.close();
+
+	}
+
+	public void testEnums() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		CommunityBid communityBid = new CommunityBid();
+		communityBid.setId( new Integer( 2 ) );
+		communityBid.setCommunityNote( Starred.OK );
+		Bid bid = new Bid();
+		bid.setId( new Integer( 1 ) );
+		bid.setDescription( "My best one" );
+		bid.setNote( Starred.OK );
+		bid.setEditorsNote( Starred.GOOD );
+		s.persist( bid );
+		s.persist( communityBid );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		//bid = (Bid) s.get( Bid.class, bid.getId() );
+		bid = (Bid)s.createQuery( "select b from Bid b where b.note = " +
+				Starred.class.getName() + ".OK and b.editorsNote = " +
+				Starred.class.getName() + ".GOOD and b.id = :id")
+				.setParameter( "id", bid.getId() ).uniqueResult();
+		//testing constant value
+		assertEquals( Starred.OK, bid.getNote() );
+		assertEquals( Starred.GOOD, bid.getEditorsNote() );
+		bid.setNote( null );
+		tx.commit();
+		s.clear();
+		tx = s.beginTransaction();
+		bid = (Bid) s.get( Bid.class, bid.getId() );
+		communityBid = (CommunityBid) s.get( CommunityBid.class, communityBid.getId() );
+		assertNull( bid.getNote() );
+		assertEquals( Starred.OK, communityBid.getCommunityNote() );
+		s.delete( bid );
+		s.clear();
+		communityBid = (CommunityBid) s.createSQLQuery( "select {b.*} from Bid b where b.id = ?" )
+				.addEntity( "b", CommunityBid.class )
+				.setInteger( 0, communityBid.getId() ).uniqueResult();
+		assertEquals( Starred.OK, communityBid.getCommunityNote() );
+		s.delete( communityBid );
+		tx.commit();
+		s.close();
+	}
+
+	public void testAutoboxing() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		Bid bid = new Bid();
+		bid.setId( new Integer( 2 ) );
+		bid.setDescription( "My best one" );
+		bid.setNote( Starred.OK );
+		bid.setEditorsNote( Starred.GOOD );
+		bid.setApproved( null );
+		s.persist( bid );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		bid = (Bid) s.get( Bid.class, bid.getId() );
+		assertEquals( null, bid.getApproved() );
+		s.delete( bid );
+		tx.commit();
+		s.close();
+	}
+
+	public Java5FeaturesTest(String x) {
+		super( x );
+	}
+
+	protected Class[] getMappings() {
+		return new Class[]{
+				Race.class,
+				Bid.class,
+				CommunityBid.class
+		};
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Length.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Length.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Length.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,9 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.entity;
-
-/**
- * @author Emmanuel Bernard
- */
-public interface Length<Type> {
-	Type getLength();
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Length.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Length.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Length.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Length.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,9 @@
+//$Id$
+package org.hibernate.test.annotations.entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public interface Length<Type> {
+	Type getLength();
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/MonetaryAmount.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/MonetaryAmount.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/MonetaryAmount.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,36 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.entity;
-
-import java.io.Serializable;
-import java.math.BigDecimal;
-import java.util.Currency;
-
-/**
- * @author Emmanuel Bernard
- */
-public class MonetaryAmount implements Serializable {
-
-	private BigDecimal amount;
-	private Currency currency;
-
-	public MonetaryAmount(BigDecimal amount, Currency currency) {
-		this.amount = amount;
-		this.currency = currency;
-	}
-
-	public BigDecimal getAmount() {
-		return amount;
-	}
-
-	public void setAmount(BigDecimal amount) {
-		this.amount = amount;
-	}
-
-	public Currency getCurrency() {
-		return currency;
-	}
-
-	public void setCurrency(Currency currency) {
-		this.currency = currency;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/MonetaryAmount.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/MonetaryAmount.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/MonetaryAmount.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/MonetaryAmount.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,36 @@
+//$Id$
+package org.hibernate.test.annotations.entity;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Currency;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class MonetaryAmount implements Serializable {
+
+	private BigDecimal amount;
+	private Currency currency;
+
+	public MonetaryAmount(BigDecimal amount, Currency currency) {
+		this.amount = amount;
+		this.currency = currency;
+	}
+
+	public BigDecimal getAmount() {
+		return amount;
+	}
+
+	public void setAmount(BigDecimal amount) {
+		this.amount = amount;
+	}
+
+	public Currency getCurrency() {
+		return currency;
+	}
+
+	public void setCurrency(Currency currency) {
+		this.currency = currency;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/MonetaryAmountUserType.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/MonetaryAmountUserType.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/MonetaryAmountUserType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,106 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.entity;
-
-import java.io.Serializable;
-import java.math.BigDecimal;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.Currency;
-
-import org.hibernate.Hibernate;
-import org.hibernate.HibernateException;
-import org.hibernate.engine.SessionImplementor;
-import org.hibernate.type.Type;
-import org.hibernate.usertype.CompositeUserType;
-
-/**
- * @author Emmanuel Bernard
- */
-public class MonetaryAmountUserType implements CompositeUserType {
-
-	public String[] getPropertyNames() {
-		return new String[]{"amount", "currency"};
-	}
-
-	public Type[] getPropertyTypes() {
-		return new Type[]{Hibernate.BIG_DECIMAL, Hibernate.CURRENCY};
-	}
-
-	public Object getPropertyValue(Object component, int property) throws HibernateException {
-		MonetaryAmount ma = (MonetaryAmount) component;
-		return property == 0 ? (Object) ma.getAmount() : (Object) ma.getCurrency();
-	}
-
-	public void setPropertyValue(Object component, int property, Object value)
-			throws HibernateException {
-		MonetaryAmount ma = (MonetaryAmount) component;
-		if ( property == 0 ) {
-			ma.setAmount( (BigDecimal) value );
-		}
-		else {
-			ma.setCurrency( (Currency) value );
-		}
-	}
-
-	public Class returnedClass() {
-		return MonetaryAmount.class;
-	}
-
-	public boolean equals(Object x, Object y) throws HibernateException {
-		if ( x == y ) return true;
-		if ( x == null || y == null ) return false;
-		MonetaryAmount mx = (MonetaryAmount) x;
-		MonetaryAmount my = (MonetaryAmount) y;
-		return mx.getAmount().equals( my.getAmount() ) &&
-				mx.getCurrency().equals( my.getCurrency() );
-	}
-
-	public int hashCode(Object x) throws HibernateException {
-		return ( (MonetaryAmount) x ).getAmount().hashCode();
-	}
-
-	public Object nullSafeGet(ResultSet rs, String[] names, SessionImplementor session, Object owner)
-			throws HibernateException, SQLException {
-		BigDecimal amt = (BigDecimal) Hibernate.BIG_DECIMAL.nullSafeGet( rs, names[0] );
-		Currency cur = (Currency) Hibernate.CURRENCY.nullSafeGet( rs, names[1] );
-		if ( amt == null ) return null;
-		return new MonetaryAmount( amt, cur );
-	}
-
-	public void nullSafeSet(
-			PreparedStatement st, Object value, int index,
-			SessionImplementor session
-	) throws HibernateException, SQLException {
-		MonetaryAmount ma = (MonetaryAmount) value;
-		BigDecimal amt = ma == null ? null : ma.getAmount();
-		Currency cur = ma == null ? null : ma.getCurrency();
-		Hibernate.BIG_DECIMAL.nullSafeSet( st, amt, index );
-		Hibernate.CURRENCY.nullSafeSet( st, cur, index + 1 );
-	}
-
-	public Object deepCopy(Object value) throws HibernateException {
-		MonetaryAmount ma = (MonetaryAmount) value;
-		return new MonetaryAmount( ma.getAmount(), ma.getCurrency() );
-	}
-
-	public boolean isMutable() {
-		return true;
-	}
-
-	public Serializable disassemble(Object value, SessionImplementor session)
-			throws HibernateException {
-		return (Serializable) deepCopy( value );
-	}
-
-	public Object assemble(Serializable cached, SessionImplementor session, Object owner)
-			throws HibernateException {
-		return deepCopy( cached );
-	}
-
-	public Object replace(Object original, Object target, SessionImplementor session, Object owner)
-			throws HibernateException {
-		return deepCopy( original ); //TODO: improve
-	}
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/MonetaryAmountUserType.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/MonetaryAmountUserType.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/MonetaryAmountUserType.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/MonetaryAmountUserType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,106 @@
+//$Id$
+package org.hibernate.test.annotations.entity;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Currency;
+
+import org.hibernate.Hibernate;
+import org.hibernate.HibernateException;
+import org.hibernate.engine.SessionImplementor;
+import org.hibernate.type.Type;
+import org.hibernate.usertype.CompositeUserType;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class MonetaryAmountUserType implements CompositeUserType {
+
+	public String[] getPropertyNames() {
+		return new String[]{"amount", "currency"};
+	}
+
+	public Type[] getPropertyTypes() {
+		return new Type[]{Hibernate.BIG_DECIMAL, Hibernate.CURRENCY};
+	}
+
+	public Object getPropertyValue(Object component, int property) throws HibernateException {
+		MonetaryAmount ma = (MonetaryAmount) component;
+		return property == 0 ? (Object) ma.getAmount() : (Object) ma.getCurrency();
+	}
+
+	public void setPropertyValue(Object component, int property, Object value)
+			throws HibernateException {
+		MonetaryAmount ma = (MonetaryAmount) component;
+		if ( property == 0 ) {
+			ma.setAmount( (BigDecimal) value );
+		}
+		else {
+			ma.setCurrency( (Currency) value );
+		}
+	}
+
+	public Class returnedClass() {
+		return MonetaryAmount.class;
+	}
+
+	public boolean equals(Object x, Object y) throws HibernateException {
+		if ( x == y ) return true;
+		if ( x == null || y == null ) return false;
+		MonetaryAmount mx = (MonetaryAmount) x;
+		MonetaryAmount my = (MonetaryAmount) y;
+		return mx.getAmount().equals( my.getAmount() ) &&
+				mx.getCurrency().equals( my.getCurrency() );
+	}
+
+	public int hashCode(Object x) throws HibernateException {
+		return ( (MonetaryAmount) x ).getAmount().hashCode();
+	}
+
+	public Object nullSafeGet(ResultSet rs, String[] names, SessionImplementor session, Object owner)
+			throws HibernateException, SQLException {
+		BigDecimal amt = (BigDecimal) Hibernate.BIG_DECIMAL.nullSafeGet( rs, names[0] );
+		Currency cur = (Currency) Hibernate.CURRENCY.nullSafeGet( rs, names[1] );
+		if ( amt == null ) return null;
+		return new MonetaryAmount( amt, cur );
+	}
+
+	public void nullSafeSet(
+			PreparedStatement st, Object value, int index,
+			SessionImplementor session
+	) throws HibernateException, SQLException {
+		MonetaryAmount ma = (MonetaryAmount) value;
+		BigDecimal amt = ma == null ? null : ma.getAmount();
+		Currency cur = ma == null ? null : ma.getCurrency();
+		Hibernate.BIG_DECIMAL.nullSafeSet( st, amt, index );
+		Hibernate.CURRENCY.nullSafeSet( st, cur, index + 1 );
+	}
+
+	public Object deepCopy(Object value) throws HibernateException {
+		MonetaryAmount ma = (MonetaryAmount) value;
+		return new MonetaryAmount( ma.getAmount(), ma.getCurrency() );
+	}
+
+	public boolean isMutable() {
+		return true;
+	}
+
+	public Serializable disassemble(Object value, SessionImplementor session)
+			throws HibernateException {
+		return (Serializable) deepCopy( value );
+	}
+
+	public Object assemble(Serializable cached, SessionImplementor session, Object owner)
+			throws HibernateException {
+		return deepCopy( cached );
+	}
+
+	public Object replace(Object original, Object target, SessionImplementor session, Object owner)
+			throws HibernateException {
+		return deepCopy( original ); //TODO: improve
+	}
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/PropertyDefaultMappingsTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/PropertyDefaultMappingsTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/PropertyDefaultMappingsTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,62 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.entity;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-import org.hibernate.test.annotations.TestCase;
-
-/**
- * @author Emmanuel Bernard
- */
-public class PropertyDefaultMappingsTest extends TestCase {
-	public PropertyDefaultMappingsTest(String x) {
-		super( x );
-	}
-
-	public void testSerializableObject() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		Country c = new Country();
-		c.setName( "France" );
-		Address a = new Address();
-		a.setCity( "Paris" );
-		a.setCountry( c );
-		s.persist( a );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		Address reloadedAddress = (Address) s.get( Address.class, a.getId() );
-		assertNotNull( reloadedAddress );
-		assertNotNull( reloadedAddress.getCountry() );
-		assertEquals( a.getCountry().getName(), reloadedAddress.getCountry().getName() );
-		tx.rollback();
-		s.close();
-	}
-
-	public void testTransientField() throws Exception {
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		WashingMachine wm = new WashingMachine();
-		wm.setActive( true );
-		s.persist( wm );
-		tx.commit();
-		s.clear();
-		tx = s.beginTransaction();
-		wm = (WashingMachine) s.get( WashingMachine.class, wm.getId() );
-		assertFalse( "transient should not be persistent", wm.isActive() );
-		s.delete( wm );
-		tx.commit();
-		s.close();
-	}
-
-	protected Class[] getMappings() {
-		return new Class[]{
-				Address.class,
-				WashingMachine.class
-		};
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/PropertyDefaultMappingsTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/PropertyDefaultMappingsTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/PropertyDefaultMappingsTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/PropertyDefaultMappingsTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,62 @@
+//$Id$
+package org.hibernate.test.annotations.entity;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class PropertyDefaultMappingsTest extends TestCase {
+	public PropertyDefaultMappingsTest(String x) {
+		super( x );
+	}
+
+	public void testSerializableObject() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		Country c = new Country();
+		c.setName( "France" );
+		Address a = new Address();
+		a.setCity( "Paris" );
+		a.setCountry( c );
+		s.persist( a );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		Address reloadedAddress = (Address) s.get( Address.class, a.getId() );
+		assertNotNull( reloadedAddress );
+		assertNotNull( reloadedAddress.getCountry() );
+		assertEquals( a.getCountry().getName(), reloadedAddress.getCountry().getName() );
+		tx.rollback();
+		s.close();
+	}
+
+	public void testTransientField() throws Exception {
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		WashingMachine wm = new WashingMachine();
+		wm.setActive( true );
+		s.persist( wm );
+		tx.commit();
+		s.clear();
+		tx = s.beginTransaction();
+		wm = (WashingMachine) s.get( WashingMachine.class, wm.getId() );
+		assertFalse( "transient should not be persistent", wm.isActive() );
+		s.delete( wm );
+		tx.commit();
+		s.close();
+	}
+
+	protected Class[] getMappings() {
+		return new Class[]{
+				Address.class,
+				WashingMachine.class
+		};
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Race.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Race.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Race.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,31 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.entity;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Race implements Length<Long> {
-	private Long length;
-	private Integer id;
-
-	@Id
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public Long getLength() {
-		return length;
-	}
-
-	public void setLength(Long length) {
-		this.length = length;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Race.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Race.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Race.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Race.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,31 @@
+//$Id$
+package org.hibernate.test.annotations.entity;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Race implements Length<Long> {
+	private Long length;
+	private Integer id;
+
+	@Id
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public Long getLength() {
+		return length;
+	}
+
+	public void setLength(Long length) {
+		this.length = length;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Ransom.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Ransom.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Ransom.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,61 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.entity;
-
-import java.util.Date;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-
-import org.hibernate.annotations.Columns;
-import org.hibernate.annotations.Type;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Ransom {
-	private Integer id;
-	private String kidnapperName;
-	private MonetaryAmount amount;
-	private Date date;
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getKidnapperName() {
-		return kidnapperName;
-	}
-
-	public void setKidnapperName(String kidnapperName) {
-		this.kidnapperName = kidnapperName;
-	}
-
-	@Type(type = "org.hibernate.test.annotations.entity.MonetaryAmountUserType")
-	@Columns(columns = {
-	@Column(name = "r_amount"),
-	@Column(name = "r_currency")
-			})
-	public MonetaryAmount getAmount() {
-		return amount;
-	}
-
-	public void setAmount(MonetaryAmount amount) {
-		this.amount = amount;
-	}
-
-	public Date getDate() {
-		return date;
-	}
-
-	public void setDate(Date date) {
-		this.date = date;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Ransom.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Ransom.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Ransom.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Ransom.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,61 @@
+//$Id$
+package org.hibernate.test.annotations.entity;
+
+import java.util.Date;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+import org.hibernate.annotations.Columns;
+import org.hibernate.annotations.Type;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Ransom {
+	private Integer id;
+	private String kidnapperName;
+	private MonetaryAmount amount;
+	private Date date;
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getKidnapperName() {
+		return kidnapperName;
+	}
+
+	public void setKidnapperName(String kidnapperName) {
+		this.kidnapperName = kidnapperName;
+	}
+
+	@Type(type = "org.hibernate.test.annotations.entity.MonetaryAmountUserType")
+	@Columns(columns = {
+	@Column(name = "r_amount"),
+	@Column(name = "r_currency")
+			})
+	public MonetaryAmount getAmount() {
+		return amount;
+	}
+
+	public void setAmount(MonetaryAmount amount) {
+		this.amount = amount;
+	}
+
+	public Date getDate() {
+		return date;
+	}
+
+	public void setDate(Date date) {
+		this.date = date;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Starred.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Starred.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Starred.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,10 +0,0 @@
-package org.hibernate.test.annotations.entity;
-
-/**
- * @author Emmanuel Bernard
- */
-public enum Starred {
-	BAD,
-	OK,
-	GOOD
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Starred.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Starred.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Starred.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Starred.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,10 @@
+package org.hibernate.test.annotations.entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public enum Starred {
+	BAD,
+	OK,
+	GOOD
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Tree.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Tree.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Tree.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,38 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.entity;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-
-import org.hibernate.annotations.Proxy;
-
-/**
- * Non lazy entity
- *
- * @author Emmanuel Bernard
- */
- at Entity
- at Proxy(lazy = false)
-public class Tree {
-	private Integer id;
-	private String name;
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Tree.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Tree.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Tree.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/Tree.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,38 @@
+//$Id$
+package org.hibernate.test.annotations.entity;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+import org.hibernate.annotations.Proxy;
+
+/**
+ * Non lazy entity
+ *
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Proxy(lazy = false)
+public class Tree {
+	private Integer id;
+	private String name;
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/WashingMachine.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/WashingMachine.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/WashingMachine.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,33 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.entity;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class WashingMachine {
-	@Id
-	@GeneratedValue
-	private Integer id;
-	private transient boolean isActive;
-
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public boolean isActive() {
-		return isActive;
-	}
-
-	public void setActive(boolean active) {
-		isActive = active;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/WashingMachine.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/WashingMachine.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/WashingMachine.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/WashingMachine.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,33 @@
+//$Id$
+package org.hibernate.test.annotations.entity;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class WashingMachine {
+	@Id
+	@GeneratedValue
+	private Integer id;
+	private transient boolean isActive;
+
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public boolean isActive() {
+		return isActive;
+	}
+
+	public void setActive(boolean active) {
+		isActive = active;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/ZipCode.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/ZipCode.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/ZipCode.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,19 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.entity;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-
-import org.hibernate.annotations.Cache;
-import org.hibernate.annotations.CacheConcurrencyStrategy;
-
-/**
- * @author Emmanuel Bernard
- */
- at Cache(usage = CacheConcurrencyStrategy.READ_ONLY)
- at Entity
- at org.hibernate.annotations.Entity(mutable = false)
-public class ZipCode {
-	@Id
-	public String code;
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/ZipCode.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/ZipCode.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/ZipCode.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/ZipCode.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,19 @@
+//$Id$
+package org.hibernate.test.annotations.entity;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+import org.hibernate.annotations.Cache;
+import org.hibernate.annotations.CacheConcurrencyStrategy;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Cache(usage = CacheConcurrencyStrategy.READ_ONLY)
+ at Entity
+ at org.hibernate.annotations.Entity(mutable = false)
+public class ZipCode {
+	@Id
+	public String code;
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/package-info.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/package-info.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/package-info.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,34 +0,0 @@
-/**
- * Test package for metatata facilities
- * It contains an example of filter metadata
- */
- at FilterDefs(
-		{
-		@FilterDef(
-				name = "betweenLength",
-				defaultCondition = ":minLength <= length and :maxLength >= length",
-				parameters = {
-				@ParamDef(name = "minLength", type = "integer"),
-				@ParamDef(name = "maxLength", type = "integer")
-						}
-		)
-				}
-)
- at TypeDefs(
-		{
-		@TypeDef(
-				name = "caster",
-				typeClass = CasterStringType.class,
-				parameters = {
-				@Parameter(name = "cast", value = "lower")
-						}
-		)
-				}
-) package org.hibernate.test.annotations.entity;
-
-import org.hibernate.annotations.FilterDef;
-import org.hibernate.annotations.FilterDefs;
-import org.hibernate.annotations.ParamDef;
-import org.hibernate.annotations.Parameter;
-import org.hibernate.annotations.TypeDef;
-import org.hibernate.annotations.TypeDefs;

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/package-info.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/package-info.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/package-info.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entity/package-info.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,34 @@
+/**
+ * Test package for metatata facilities
+ * It contains an example of filter metadata
+ */
+ at FilterDefs(
+		{
+		@FilterDef(
+				name = "betweenLength",
+				defaultCondition = ":minLength <= length and :maxLength >= length",
+				parameters = {
+				@ParamDef(name = "minLength", type = "integer"),
+				@ParamDef(name = "maxLength", type = "integer")
+						}
+		)
+				}
+)
+ at TypeDefs(
+		{
+		@TypeDef(
+				name = "caster",
+				typeClass = CasterStringType.class,
+				parameters = {
+				@Parameter(name = "cast", value = "lower")
+						}
+		)
+				}
+) package org.hibernate.test.annotations.entity;
+
+import org.hibernate.annotations.FilterDef;
+import org.hibernate.annotations.FilterDefs;
+import org.hibernate.annotations.ParamDef;
+import org.hibernate.annotations.Parameter;
+import org.hibernate.annotations.TypeDef;
+import org.hibernate.annotations.TypeDefs;

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity)

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/Cellular.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/Cellular.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/Cellular.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,9 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.entitynonentity;
-
-/**
- * @author Emmanuel Bernard
- */
-public class Cellular extends Phone {
-	String brand;
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/Cellular.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/Cellular.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/Cellular.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/Cellular.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,9 @@
+//$Id$
+package org.hibernate.test.annotations.entitynonentity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Cellular extends Phone {
+	String brand;
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/Communication.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/Communication.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/Communication.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,9 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.entitynonentity;
-
-/**
- * @author Emmanuel Bernard
- */
-public class Communication extends Interaction {
-	String species;
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/Communication.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/Communication.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/Communication.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/Communication.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,9 @@
+//$Id$
+package org.hibernate.test.annotations.entitynonentity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Communication extends Interaction {
+	String species;
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/EntityNonEntityTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/EntityNonEntityTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/EntityNonEntityTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,43 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.entitynonentity;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-import org.hibernate.test.annotations.TestCase;
-
-/**
- * @author Emmanuel Bernard
- */
-public class EntityNonEntityTest extends TestCase {
-	public void testMix() throws Exception {
-		GSM gsm = new GSM();
-		gsm.brand = "Sony";
-		gsm.frequency = 900;
-		gsm.isNumeric = true;
-		gsm.number = 2;
-		gsm.species = "human";
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		s.persist( gsm );
-		tx.commit();
-		s.clear();
-		tx = s.beginTransaction();
-		gsm = (GSM) s.get( GSM.class, gsm.id );
-		assertEquals( "top mapped superclass", 2, gsm.number );
-		assertNull( "non entity between mapped superclass and entity", gsm.species );
-		assertTrue( "mapped superclass under entity", gsm.isNumeric );
-		assertNull( "non entity under entity", gsm.brand );
-		assertEquals( "leaf entity", 900, gsm.frequency );
-		s.delete( gsm );
-		tx.commit();
-		s.close();
-	}
-
-	protected Class[] getMappings() {
-		return new Class[]{
-				Phone.class,
-				Voice.class,
-				GSM.class
-		};
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/EntityNonEntityTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/EntityNonEntityTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/EntityNonEntityTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/EntityNonEntityTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,43 @@
+//$Id$
+package org.hibernate.test.annotations.entitynonentity;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class EntityNonEntityTest extends TestCase {
+	public void testMix() throws Exception {
+		GSM gsm = new GSM();
+		gsm.brand = "Sony";
+		gsm.frequency = 900;
+		gsm.isNumeric = true;
+		gsm.number = 2;
+		gsm.species = "human";
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		s.persist( gsm );
+		tx.commit();
+		s.clear();
+		tx = s.beginTransaction();
+		gsm = (GSM) s.get( GSM.class, gsm.id );
+		assertEquals( "top mapped superclass", 2, gsm.number );
+		assertNull( "non entity between mapped superclass and entity", gsm.species );
+		assertTrue( "mapped superclass under entity", gsm.isNumeric );
+		assertNull( "non entity under entity", gsm.brand );
+		assertEquals( "leaf entity", 900, gsm.frequency );
+		s.delete( gsm );
+		tx.commit();
+		s.close();
+	}
+
+	protected Class[] getMappings() {
+		return new Class[]{
+				Phone.class,
+				Voice.class,
+				GSM.class
+		};
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/GSM.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/GSM.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/GSM.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,12 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.entitynonentity;
-
-import javax.persistence.Entity;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class GSM extends Cellular {
-	int frequency;
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/GSM.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/GSM.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/GSM.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/GSM.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,12 @@
+//$Id$
+package org.hibernate.test.annotations.entitynonentity;
+
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class GSM extends Cellular {
+	int frequency;
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/Interaction.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/Interaction.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/Interaction.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,12 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.entitynonentity;
-
-import javax.persistence.MappedSuperclass;
-
-/**
- * @author Emmanuel Bernard
- */
- at MappedSuperclass
-public class Interaction {
-	public int number;
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/Interaction.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/Interaction.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/Interaction.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/Interaction.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,12 @@
+//$Id$
+package org.hibernate.test.annotations.entitynonentity;
+
+import javax.persistence.MappedSuperclass;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at MappedSuperclass
+public class Interaction {
+	public int number;
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/Phone.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/Phone.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/Phone.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,12 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.entitynonentity;
-
-import javax.persistence.MappedSuperclass;
-
-/**
- * @author Emmanuel Bernard
- */
- at MappedSuperclass
-public class Phone extends Voice {
-	boolean isNumeric;
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/Phone.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/Phone.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/Phone.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/Phone.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,12 @@
+//$Id$
+package org.hibernate.test.annotations.entitynonentity;
+
+import javax.persistence.MappedSuperclass;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at MappedSuperclass
+public class Phone extends Voice {
+	boolean isNumeric;
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/Voice.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/Voice.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/Voice.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,19 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.entitynonentity;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.Inheritance;
-import javax.persistence.InheritanceType;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Inheritance(strategy = InheritanceType.JOINED)
-public class Voice extends Communication {
-	@Id
-	@GeneratedValue
-	public Integer id;
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/Voice.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/Voice.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/Voice.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/entitynonentity/Voice.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,19 @@
+//$Id$
+package org.hibernate.test.annotations.entitynonentity;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Inheritance(strategy = InheritanceType.JOINED)
+public class Voice extends Communication {
+	@Id
+	@GeneratedValue
+	public Integer id;
+}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/fetch (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/fetch)

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/fetch/FetchingTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/fetch/FetchingTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/fetch/FetchingTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,104 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.fetch;
-
-import java.util.Date;
-
-import org.hibernate.Hibernate;
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-import org.hibernate.test.annotations.TestCase;
-
-/**
- * @author Emmanuel Bernard
- */
-public class FetchingTest extends TestCase {
-	public void testLazy() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		Person p = new Person( "Gavin", "King", "JBoss Inc" );
-		Stay stay = new Stay( p, new Date(), new Date(), "A380", "Blah", "Blah" );
-		p.addStay( stay );
-		s.persist( p );
-		tx.commit();
-		s.clear();
-		tx = s.beginTransaction();
-		p = (Person) s.createQuery( "from Person p where p.firstName = :name" )
-				.setParameter( "name", "Gavin" ).uniqueResult();
-		assertFalse( Hibernate.isInitialized( p.getStays() ) );
-		s.delete( p );
-		tx.commit();
-		s.close();
-	}
-
-	public void testExtraLazy() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		Person p = new Person( "Gavin", "King", "JBoss Inc" );
-		Stay stay = new Stay( p, new Date(), new Date(), "A380", "Blah", "Blah" );
-		p.getOrderedStay().add( stay );
-		s.persist( p );
-		tx.commit();
-		s.clear();
-		tx = s.beginTransaction();
-		p = (Person) s.createQuery( "from Person p where p.firstName = :name" )
-				.setParameter( "name", "Gavin" ).uniqueResult();
-		assertFalse( Hibernate.isInitialized( p.getOrderedStay() ) );
-		assertEquals( 1, p.getOrderedStay().size() );
-		assertFalse( Hibernate.isInitialized( p.getOrderedStay() ) );
-		assertEquals( "A380", p.getOrderedStay().get(0).getVessel() );
-		assertFalse( Hibernate.isInitialized( p.getOrderedStay() ) );
-		s.delete( p );
-		tx.commit();
-		s.close();
-	}
-
-	public void testHibernateFetchingLazy() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		Person p = new Person( "Gavin", "King", "JBoss Inc" );
-		Stay stay = new Stay( null, new Date(), new Date(), "A380", "Blah", "Blah" );
-		Stay stay2 = new Stay( null, new Date(), new Date(), "A320", "Blah", "Blah" );
-		Stay stay3 = new Stay( null, new Date(), new Date(), "A340", "Blah", "Blah" );
-		stay.setOldPerson( p );
-		stay2.setVeryOldPerson( p );
-		stay3.setVeryOldPerson( p );
-		p.addOldStay( stay );
-		p.addVeryOldStay( stay2 );
-		p.addVeryOldStay( stay3 );
-		s.persist( p );
-		tx.commit();
-		s.clear();
-		tx = s.beginTransaction();
-		p = (Person) s.createQuery( "from Person p where p.firstName = :name" )
-				.setParameter( "name", "Gavin" ).uniqueResult();
-		assertFalse( Hibernate.isInitialized( p.getOldStays() ) );
-		assertEquals( 1, p.getOldStays().size() );
-		assertFalse( "lazy extra is failing", Hibernate.isInitialized( p.getOldStays() ) );
-		s.clear();
-		stay = (Stay) s.get( Stay.class, stay.getId() );
-		assertTrue( ! Hibernate.isInitialized( stay.getOldPerson() ) );
-		s.clear();
-		stay3 = (Stay) s.get( Stay.class, stay3.getId() );
-		assertTrue( "FetchMode.JOIN should overrides lazy options", Hibernate.isInitialized( stay3.getVeryOldPerson() ) );
-		s.delete( stay3.getVeryOldPerson() );
-		tx.commit();
-		s.close();
-	}
-
-	public FetchingTest(String x) {
-		super( x );
-	}
-
-	protected Class[] getMappings() {
-		return new Class[]{
-				Person.class,
-				Stay.class
-		};
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/fetch/FetchingTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/fetch/FetchingTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/fetch/FetchingTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/fetch/FetchingTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,104 @@
+//$Id$
+package org.hibernate.test.annotations.fetch;
+
+import java.util.Date;
+
+import org.hibernate.Hibernate;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class FetchingTest extends TestCase {
+	public void testLazy() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		Person p = new Person( "Gavin", "King", "JBoss Inc" );
+		Stay stay = new Stay( p, new Date(), new Date(), "A380", "Blah", "Blah" );
+		p.addStay( stay );
+		s.persist( p );
+		tx.commit();
+		s.clear();
+		tx = s.beginTransaction();
+		p = (Person) s.createQuery( "from Person p where p.firstName = :name" )
+				.setParameter( "name", "Gavin" ).uniqueResult();
+		assertFalse( Hibernate.isInitialized( p.getStays() ) );
+		s.delete( p );
+		tx.commit();
+		s.close();
+	}
+
+	public void testExtraLazy() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		Person p = new Person( "Gavin", "King", "JBoss Inc" );
+		Stay stay = new Stay( p, new Date(), new Date(), "A380", "Blah", "Blah" );
+		p.getOrderedStay().add( stay );
+		s.persist( p );
+		tx.commit();
+		s.clear();
+		tx = s.beginTransaction();
+		p = (Person) s.createQuery( "from Person p where p.firstName = :name" )
+				.setParameter( "name", "Gavin" ).uniqueResult();
+		assertFalse( Hibernate.isInitialized( p.getOrderedStay() ) );
+		assertEquals( 1, p.getOrderedStay().size() );
+		assertFalse( Hibernate.isInitialized( p.getOrderedStay() ) );
+		assertEquals( "A380", p.getOrderedStay().get(0).getVessel() );
+		assertFalse( Hibernate.isInitialized( p.getOrderedStay() ) );
+		s.delete( p );
+		tx.commit();
+		s.close();
+	}
+
+	public void testHibernateFetchingLazy() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		Person p = new Person( "Gavin", "King", "JBoss Inc" );
+		Stay stay = new Stay( null, new Date(), new Date(), "A380", "Blah", "Blah" );
+		Stay stay2 = new Stay( null, new Date(), new Date(), "A320", "Blah", "Blah" );
+		Stay stay3 = new Stay( null, new Date(), new Date(), "A340", "Blah", "Blah" );
+		stay.setOldPerson( p );
+		stay2.setVeryOldPerson( p );
+		stay3.setVeryOldPerson( p );
+		p.addOldStay( stay );
+		p.addVeryOldStay( stay2 );
+		p.addVeryOldStay( stay3 );
+		s.persist( p );
+		tx.commit();
+		s.clear();
+		tx = s.beginTransaction();
+		p = (Person) s.createQuery( "from Person p where p.firstName = :name" )
+				.setParameter( "name", "Gavin" ).uniqueResult();
+		assertFalse( Hibernate.isInitialized( p.getOldStays() ) );
+		assertEquals( 1, p.getOldStays().size() );
+		assertFalse( "lazy extra is failing", Hibernate.isInitialized( p.getOldStays() ) );
+		s.clear();
+		stay = (Stay) s.get( Stay.class, stay.getId() );
+		assertTrue( ! Hibernate.isInitialized( stay.getOldPerson() ) );
+		s.clear();
+		stay3 = (Stay) s.get( Stay.class, stay3.getId() );
+		assertTrue( "FetchMode.JOIN should overrides lazy options", Hibernate.isInitialized( stay3.getVeryOldPerson() ) );
+		s.delete( stay3.getVeryOldPerson() );
+		tx.commit();
+		s.close();
+	}
+
+	public FetchingTest(String x) {
+		super( x );
+	}
+
+	protected Class[] getMappings() {
+		return new Class[]{
+				Person.class,
+				Stay.class
+		};
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/fetch/Person.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/fetch/Person.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/fetch/Person.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,176 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.fetch;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Date;
-import java.util.List;
-import javax.persistence.CascadeType;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.OneToMany;
-import javax.persistence.Table;
-
-import org.hibernate.annotations.Fetch;
-import org.hibernate.annotations.FetchMode;
-import org.hibernate.annotations.LazyCollection;
-import org.hibernate.annotations.LazyCollectionOption;
-import org.hibernate.annotations.IndexColumn;
-
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Table(name = "Person")
-public class Person implements Serializable {
-
-	// member declaration
-	private int id;
-	private String firstName;
-	private String lastName;
-	private String companyName;
-	private Collection<Stay> stays;
-	private Collection<Stay> oldStays;
-	private Collection<Stay> veryOldStays;
-	private List<Stay> orderedStay = new ArrayList<Stay>();
-
-	// constructors
-	public Person() {
-	}
-
-	public Person(String firstName, String lastName, String companyName) {
-		this.firstName = firstName;
-		this.lastName = lastName;
-		this.companyName = companyName;
-	}
-
-	// properties
-	public String getCompanyName() {
-		return companyName;
-	}
-
-	public void setCompanyName(String companyName) {
-		this.companyName = companyName;
-	}
-
-	public String getFirstName() {
-		return firstName;
-	}
-
-	public void setFirstName(String firstName) {
-		this.firstName = firstName;
-	}
-
-	@Id
-	@GeneratedValue
-	public int getId() {
-		return id;
-	}
-
-	public void setId(int id) {
-		this.id = id;
-	}
-
-	public String getLastName() {
-		return lastName;
-	}
-
-	public void setLastName(String lastName) {
-		this.lastName = lastName;
-	}
-
-	// relationships
-
-	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "person")
-	public Collection<Stay> getStays() {
-		return this.stays;
-	}
-
-	public void setStays(List<Stay> stays) {
-		this.stays = stays;
-	}
-
-	@OneToMany(cascade=CascadeType.ALL, mappedBy = "oldPerson")
-	@LazyCollection(LazyCollectionOption.EXTRA)
-	@Fetch(FetchMode.SUBSELECT)
-	public Collection<Stay> getOldStays() {
-		return oldStays;
-	}
-
-	public void setOldStays(Collection<Stay> oldStays) {
-		this.oldStays = oldStays;
-	}
-
-	@OneToMany(cascade=CascadeType.ALL, mappedBy = "veryOldPerson")
-	@Fetch(FetchMode.SELECT)
-	public Collection<Stay> getVeryOldStays() {
-		return veryOldStays;
-	}
-
-	public void setVeryOldStays(Collection<Stay> veryOldStays) {
-		this.veryOldStays = veryOldStays;
-	}
-
-	@OneToMany(cascade=CascadeType.ALL)
-	@LazyCollection(LazyCollectionOption.EXTRA)
-	@Fetch(FetchMode.SUBSELECT)
-	@IndexColumn(name="orderedStayIndex")
-	public List<Stay> getOrderedStay() {
-		return orderedStay;
-	}
-
-	public void setOrderedStay(List<Stay> orderedStay) {
-		this.orderedStay = orderedStay;
-	}
-
-
-	// business logic
-	public void addStay(Date startDate, Date endDate, String vessel, String authoriser, String comments) {
-		Stay stay = new Stay( this, startDate, endDate, vessel, authoriser, comments );
-		addStay( stay );
-	}
-
-	public void addStay(Stay stay) {
-		Collection<Stay> stays = getStays();
-		if ( stays == null ) {
-			stays = new ArrayList<Stay>();
-		}
-		stays.add( stay );
-
-		this.stays = stays;
-	}
-
-	public void addOldStay(Date startDate, Date endDate, String vessel, String authoriser, String comments) {
-		Stay stay = new Stay( this, startDate, endDate, vessel, authoriser, comments );
-		addOldStay( stay );
-	}
-
-	public void addOldStay(Stay stay) {
-		Collection<Stay> stays = getOldStays();
-		if ( stays == null ) {
-			stays = new ArrayList<Stay>();
-		}
-		stays.add( stay );
-
-		this.oldStays = stays;
-	}
-
-	public void addVeryOldStay(Date startDate, Date endDate, String vessel, String authoriser, String comments) {
-		Stay stay = new Stay( this, startDate, endDate, vessel, authoriser, comments );
-		addVeryOldStay( stay );
-	}
-
-	public void addVeryOldStay(Stay stay) {
-		Collection<Stay> stays = getVeryOldStays();
-		if ( stays == null ) {
-			stays = new ArrayList<Stay>();
-		}
-		stays.add( stay );
-
-		this.veryOldStays = stays;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/fetch/Person.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/fetch/Person.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/fetch/Person.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/fetch/Person.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,176 @@
+//$Id$
+package org.hibernate.test.annotations.fetch;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Date;
+import java.util.List;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.Fetch;
+import org.hibernate.annotations.FetchMode;
+import org.hibernate.annotations.LazyCollection;
+import org.hibernate.annotations.LazyCollectionOption;
+import org.hibernate.annotations.IndexColumn;
+
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Table(name = "Person")
+public class Person implements Serializable {
+
+	// member declaration
+	private int id;
+	private String firstName;
+	private String lastName;
+	private String companyName;
+	private Collection<Stay> stays;
+	private Collection<Stay> oldStays;
+	private Collection<Stay> veryOldStays;
+	private List<Stay> orderedStay = new ArrayList<Stay>();
+
+	// constructors
+	public Person() {
+	}
+
+	public Person(String firstName, String lastName, String companyName) {
+		this.firstName = firstName;
+		this.lastName = lastName;
+		this.companyName = companyName;
+	}
+
+	// properties
+	public String getCompanyName() {
+		return companyName;
+	}
+
+	public void setCompanyName(String companyName) {
+		this.companyName = companyName;
+	}
+
+	public String getFirstName() {
+		return firstName;
+	}
+
+	public void setFirstName(String firstName) {
+		this.firstName = firstName;
+	}
+
+	@Id
+	@GeneratedValue
+	public int getId() {
+		return id;
+	}
+
+	public void setId(int id) {
+		this.id = id;
+	}
+
+	public String getLastName() {
+		return lastName;
+	}
+
+	public void setLastName(String lastName) {
+		this.lastName = lastName;
+	}
+
+	// relationships
+
+	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "person")
+	public Collection<Stay> getStays() {
+		return this.stays;
+	}
+
+	public void setStays(List<Stay> stays) {
+		this.stays = stays;
+	}
+
+	@OneToMany(cascade=CascadeType.ALL, mappedBy = "oldPerson")
+	@LazyCollection(LazyCollectionOption.EXTRA)
+	@Fetch(FetchMode.SUBSELECT)
+	public Collection<Stay> getOldStays() {
+		return oldStays;
+	}
+
+	public void setOldStays(Collection<Stay> oldStays) {
+		this.oldStays = oldStays;
+	}
+
+	@OneToMany(cascade=CascadeType.ALL, mappedBy = "veryOldPerson")
+	@Fetch(FetchMode.SELECT)
+	public Collection<Stay> getVeryOldStays() {
+		return veryOldStays;
+	}
+
+	public void setVeryOldStays(Collection<Stay> veryOldStays) {
+		this.veryOldStays = veryOldStays;
+	}
+
+	@OneToMany(cascade=CascadeType.ALL)
+	@LazyCollection(LazyCollectionOption.EXTRA)
+	@Fetch(FetchMode.SUBSELECT)
+	@IndexColumn(name="orderedStayIndex")
+	public List<Stay> getOrderedStay() {
+		return orderedStay;
+	}
+
+	public void setOrderedStay(List<Stay> orderedStay) {
+		this.orderedStay = orderedStay;
+	}
+
+
+	// business logic
+	public void addStay(Date startDate, Date endDate, String vessel, String authoriser, String comments) {
+		Stay stay = new Stay( this, startDate, endDate, vessel, authoriser, comments );
+		addStay( stay );
+	}
+
+	public void addStay(Stay stay) {
+		Collection<Stay> stays = getStays();
+		if ( stays == null ) {
+			stays = new ArrayList<Stay>();
+		}
+		stays.add( stay );
+
+		this.stays = stays;
+	}
+
+	public void addOldStay(Date startDate, Date endDate, String vessel, String authoriser, String comments) {
+		Stay stay = new Stay( this, startDate, endDate, vessel, authoriser, comments );
+		addOldStay( stay );
+	}
+
+	public void addOldStay(Stay stay) {
+		Collection<Stay> stays = getOldStays();
+		if ( stays == null ) {
+			stays = new ArrayList<Stay>();
+		}
+		stays.add( stay );
+
+		this.oldStays = stays;
+	}
+
+	public void addVeryOldStay(Date startDate, Date endDate, String vessel, String authoriser, String comments) {
+		Stay stay = new Stay( this, startDate, endDate, vessel, authoriser, comments );
+		addVeryOldStay( stay );
+	}
+
+	public void addVeryOldStay(Stay stay) {
+		Collection<Stay> stays = getVeryOldStays();
+		if ( stays == null ) {
+			stays = new ArrayList<Stay>();
+		}
+		stays.add( stay );
+
+		this.veryOldStays = stays;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/fetch/Stay.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/fetch/Stay.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/fetch/Stay.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,143 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.fetch;
-
-import java.io.Serializable;
-import java.util.Date;
-import javax.persistence.CascadeType;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-import javax.persistence.Table;
-
-import org.hibernate.annotations.LazyToOne;
-import org.hibernate.annotations.LazyToOneOption;
-import org.hibernate.annotations.Fetch;
-import org.hibernate.annotations.FetchMode;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Table(name = "Stay")
-public class Stay implements Serializable {
-
-	// member declaration
-	private int id;
-	private Person person;
-	private Person oldPerson;
-	private Person veryOldPerson;
-	private Date startDate;
-	private Date endDate;
-	private String vessel;
-	private String authoriser;
-	private String comments;
-
-
-	// constructors
-	public Stay() {
-	}
-
-	public Stay(int id) {
-		this.id = id;
-	}
-
-	public Stay(Person person, Date startDate, Date endDate, String vessel, String authoriser, String comments) {
-		this.authoriser = authoriser;
-		this.endDate = endDate;
-		this.person = person;
-		this.startDate = startDate;
-		this.vessel = vessel;
-		this.comments = comments;
-	}
-
-
-	// properties
-	public String getAuthoriser() {
-		return authoriser;
-	}
-
-	public void setAuthoriser(String authoriser) {
-		this.authoriser = authoriser;
-	}
-
-	public String getComments() {
-		return comments;
-	}
-
-	public void setComments(String comments) {
-		this.comments = comments;
-	}
-
-	public Date getEndDate() {
-		return endDate;
-	}
-
-	public void setEndDate(Date endDate) {
-		this.endDate = endDate;
-	}
-
-	@Id
-	@GeneratedValue
-	public int getId() {
-		return id;
-	}
-
-	public void setId(int id) {
-		this.id = id;
-	}
-
-	@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
-	@JoinColumn(name = "person")
-	public Person getPerson() {
-		return person;
-	}
-
-	public void setPerson(Person person) {
-		this.person = person;
-	}
-
-	@ManyToOne(cascade = CascadeType.ALL)
-	@LazyToOne(LazyToOneOption.PROXY)
-	@Fetch(FetchMode.SELECT)
-	@JoinColumn(name = "oldperson")
-	public Person getOldPerson() {
-		return oldPerson;
-	}
-
-	public void setOldPerson(Person oldPerson) {
-		this.oldPerson = oldPerson;
-	}
-
-	@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
-	@LazyToOne(LazyToOneOption.PROXY)
-	@Fetch(FetchMode.JOIN)
-	@JoinColumn(name = "veryoldperson")
-	public Person getVeryOldPerson() {
-		return veryOldPerson;
-	}
-
-	public void setVeryOldPerson(Person veryOldPerson) {
-		this.veryOldPerson = veryOldPerson;
-	}
-
-	public Date getStartDate() {
-		return startDate;
-	}
-
-	public void setStartDate(Date startDate) {
-		this.startDate = startDate;
-	}
-
-	public String getVessel() {
-		return vessel;
-	}
-
-	public void setVessel(String vessel) {
-		this.vessel = vessel;
-	}
-
-
-}
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/fetch/Stay.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/fetch/Stay.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/fetch/Stay.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/fetch/Stay.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,143 @@
+//$Id$
+package org.hibernate.test.annotations.fetch;
+
+import java.io.Serializable;
+import java.util.Date;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.LazyToOne;
+import org.hibernate.annotations.LazyToOneOption;
+import org.hibernate.annotations.Fetch;
+import org.hibernate.annotations.FetchMode;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Table(name = "Stay")
+public class Stay implements Serializable {
+
+	// member declaration
+	private int id;
+	private Person person;
+	private Person oldPerson;
+	private Person veryOldPerson;
+	private Date startDate;
+	private Date endDate;
+	private String vessel;
+	private String authoriser;
+	private String comments;
+
+
+	// constructors
+	public Stay() {
+	}
+
+	public Stay(int id) {
+		this.id = id;
+	}
+
+	public Stay(Person person, Date startDate, Date endDate, String vessel, String authoriser, String comments) {
+		this.authoriser = authoriser;
+		this.endDate = endDate;
+		this.person = person;
+		this.startDate = startDate;
+		this.vessel = vessel;
+		this.comments = comments;
+	}
+
+
+	// properties
+	public String getAuthoriser() {
+		return authoriser;
+	}
+
+	public void setAuthoriser(String authoriser) {
+		this.authoriser = authoriser;
+	}
+
+	public String getComments() {
+		return comments;
+	}
+
+	public void setComments(String comments) {
+		this.comments = comments;
+	}
+
+	public Date getEndDate() {
+		return endDate;
+	}
+
+	public void setEndDate(Date endDate) {
+		this.endDate = endDate;
+	}
+
+	@Id
+	@GeneratedValue
+	public int getId() {
+		return id;
+	}
+
+	public void setId(int id) {
+		this.id = id;
+	}
+
+	@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
+	@JoinColumn(name = "person")
+	public Person getPerson() {
+		return person;
+	}
+
+	public void setPerson(Person person) {
+		this.person = person;
+	}
+
+	@ManyToOne(cascade = CascadeType.ALL)
+	@LazyToOne(LazyToOneOption.PROXY)
+	@Fetch(FetchMode.SELECT)
+	@JoinColumn(name = "oldperson")
+	public Person getOldPerson() {
+		return oldPerson;
+	}
+
+	public void setOldPerson(Person oldPerson) {
+		this.oldPerson = oldPerson;
+	}
+
+	@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
+	@LazyToOne(LazyToOneOption.PROXY)
+	@Fetch(FetchMode.JOIN)
+	@JoinColumn(name = "veryoldperson")
+	public Person getVeryOldPerson() {
+		return veryOldPerson;
+	}
+
+	public void setVeryOldPerson(Person veryOldPerson) {
+		this.veryOldPerson = veryOldPerson;
+	}
+
+	public Date getStartDate() {
+		return startDate;
+	}
+
+	public void setStartDate(Date startDate) {
+		this.startDate = startDate;
+	}
+
+	public String getVessel() {
+		return vessel;
+	}
+
+	public void setVessel(String vessel) {
+		this.vessel = vessel;
+	}
+
+
+}
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics)

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/DNA.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/DNA.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/DNA.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,25 +0,0 @@
-//$Id: Address.java 8967 2006-01-03 12:27:34Z epbernard $
-package org.hibernate.test.annotations.generics;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-
-/**
- * @author Paolo Perrotta
- */
- at Entity
-public class DNA {
-
-	private Integer id;
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/DNA.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/DNA.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/DNA.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/DNA.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,25 @@
+//$Id: Address.java 8967 2006-01-03 12:27:34Z epbernard $
+package org.hibernate.test.annotations.generics;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Paolo Perrotta
+ */
+ at Entity
+public class DNA {
+
+	private Integer id;
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/EmbeddedGenericsTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/EmbeddedGenericsTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/EmbeddedGenericsTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,111 +0,0 @@
-package org.hibernate.test.annotations.generics;
-
-/**
- * A test case for ANN-494.
- *
- * @author Edward Costello
- * @author Paolo Perrotta
- */
-import java.util.HashSet;
-import java.util.Set;
-
-import javax.persistence.Embeddable;
-import javax.persistence.Embedded;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-import org.hibernate.annotations.CollectionOfElements;
-import org.hibernate.test.annotations.TestCase;
-
-public class EmbeddedGenericsTest extends TestCase {
-
-	Session session;
-	Edition<String> edition;
-
-	public void setUp() throws Exception {
-		super.setUp();
-		session = getSessions().openSession();
-		session.getTransaction().begin();
-		edition = new Edition<String>();
-		edition.name = "Second";
-	}
-
-	public void tearDown() throws Exception {
-		session.close();
-		super.tearDown();
-	}
-
-	public void testWorksWithGenericEmbedded() {
-		Book b = new Book();
-		b.edition = edition;
-		persist( b );
-		
-		Book retrieved = (Book)find( Book.class, b.id );
-		assertEquals( "Second", retrieved.edition.name );
-		
-		clean( Book.class, b.id );
-	}
-
-	public void testWorksWithGenericCollectionOfElements() {
-		PopularBook b = new PopularBook();
-		b.editions.add( edition );
-		persist( b );
-
-		PopularBook retrieved = (PopularBook)find( PopularBook.class, b.id );
-		assertEquals( "Second", retrieved.editions.iterator().next().name );
-
-		clean( PopularBook.class, b.id );
-	}
-
-	protected Class[] getMappings() {
-		return new Class[]{
-				Book.class,
-				PopularBook.class
-		};
-	}
-
-	private void persist(Object data) {
-		session.persist( data );
-		session.getTransaction().commit();
-		session.clear();
-	}
-	
-	private Object find(Class clazz, Long id) {
-		return session.get( clazz, id );
-	}
-
-	private void clean(Class<?> clazz, Long id) {
-		Transaction tx = session.beginTransaction();
-		session.delete( find( clazz, id ) );
-		tx.commit();
-	}
-
-	@Embeddable
-	public static class Edition<T> {
-		T name;
-	}
-	
-	@Entity
-	public static class Book {
-		@Id
-		@GeneratedValue(strategy=GenerationType.AUTO)
-		Long id;
-		
-		@Embedded
-		Edition<String> edition;
-	}
-	
-	@Entity
-	public static class PopularBook {
-		@Id
-		@GeneratedValue(strategy=GenerationType.AUTO)
-		Long id;
-		
-		@CollectionOfElements
-		Set<Edition<String>> editions = new HashSet<Edition<String>>();
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/EmbeddedGenericsTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/EmbeddedGenericsTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/EmbeddedGenericsTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/EmbeddedGenericsTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,111 @@
+package org.hibernate.test.annotations.generics;
+
+/**
+ * A test case for ANN-494.
+ *
+ * @author Edward Costello
+ * @author Paolo Perrotta
+ */
+import java.util.HashSet;
+import java.util.Set;
+
+import javax.persistence.Embeddable;
+import javax.persistence.Embedded;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.annotations.CollectionOfElements;
+import org.hibernate.test.annotations.TestCase;
+
+public class EmbeddedGenericsTest extends TestCase {
+
+	Session session;
+	Edition<String> edition;
+
+	public void setUp() throws Exception {
+		super.setUp();
+		session = getSessions().openSession();
+		session.getTransaction().begin();
+		edition = new Edition<String>();
+		edition.name = "Second";
+	}
+
+	public void tearDown() throws Exception {
+		session.close();
+		super.tearDown();
+	}
+
+	public void testWorksWithGenericEmbedded() {
+		Book b = new Book();
+		b.edition = edition;
+		persist( b );
+		
+		Book retrieved = (Book)find( Book.class, b.id );
+		assertEquals( "Second", retrieved.edition.name );
+		
+		clean( Book.class, b.id );
+	}
+
+	public void testWorksWithGenericCollectionOfElements() {
+		PopularBook b = new PopularBook();
+		b.editions.add( edition );
+		persist( b );
+
+		PopularBook retrieved = (PopularBook)find( PopularBook.class, b.id );
+		assertEquals( "Second", retrieved.editions.iterator().next().name );
+
+		clean( PopularBook.class, b.id );
+	}
+
+	protected Class[] getMappings() {
+		return new Class[]{
+				Book.class,
+				PopularBook.class
+		};
+	}
+
+	private void persist(Object data) {
+		session.persist( data );
+		session.getTransaction().commit();
+		session.clear();
+	}
+	
+	private Object find(Class clazz, Long id) {
+		return session.get( clazz, id );
+	}
+
+	private void clean(Class<?> clazz, Long id) {
+		Transaction tx = session.beginTransaction();
+		session.delete( find( clazz, id ) );
+		tx.commit();
+	}
+
+	@Embeddable
+	public static class Edition<T> {
+		T name;
+	}
+	
+	@Entity
+	public static class Book {
+		@Id
+		@GeneratedValue(strategy=GenerationType.AUTO)
+		Long id;
+		
+		@Embedded
+		Edition<String> edition;
+	}
+	
+	@Entity
+	public static class PopularBook {
+		@Id
+		@GeneratedValue(strategy=GenerationType.AUTO)
+		Long id;
+		
+		@CollectionOfElements
+		Set<Edition<String>> editions = new HashSet<Edition<String>>();
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/Gene.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/Gene.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/Gene.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,45 +0,0 @@
-package org.hibernate.test.annotations.generics;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.ManyToOne;
-
-import org.hibernate.annotations.Type;
-
-/**
- * @author Paolo Perrotta
- */
- at Entity
-public class Gene<T, STE extends Enum> {
-
-	private Integer id;
-	private STE state;
-
-	@Type(type="org.hibernate.test.annotations.generics.StateType")
-	public STE getState() {
-		return state;
-	}
-
-	public void setState(STE state) {
-		this.state = state;
-	}
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	@ManyToOne(targetEntity = DNA.class)
-	public T getGeneticCode() {
-		return null;
-	}
-
-	public void setGeneticCode(T gene) {
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/Gene.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/Gene.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/Gene.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/Gene.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,45 @@
+package org.hibernate.test.annotations.generics;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+
+import org.hibernate.annotations.Type;
+
+/**
+ * @author Paolo Perrotta
+ */
+ at Entity
+public class Gene<T, STE extends Enum> {
+
+	private Integer id;
+	private STE state;
+
+	@Type(type="org.hibernate.test.annotations.generics.StateType")
+	public STE getState() {
+		return state;
+	}
+
+	public void setState(STE state) {
+		this.state = state;
+	}
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	@ManyToOne(targetEntity = DNA.class)
+	public T getGeneticCode() {
+		return null;
+	}
+
+	public void setGeneticCode(T gene) {
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/GenericsTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/GenericsTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/GenericsTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,60 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.generics;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-import org.hibernate.cfg.Configuration;
-import org.hibernate.cfg.Environment;
-import org.hibernate.test.annotations.TestCase;
-
-/**
- * @author Emmanuel Bernard
- */
-public class GenericsTest extends TestCase {
-	public void testManyToOneGenerics() throws Exception {
-		Paper white = new Paper();
-		white.setName( "WhiteA4" );
-		PaperType type = new PaperType();
-		type.setName( "A4" );
-		SomeGuy me = new SomeGuy();
-		white.setType( type );
-		white.setOwner( me );
-		Price price = new Price();
-		price.setAmount( new Double( 1 ) );
-		price.setCurrency( "Euro" );
-		white.setValue( price );
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		s.persist( type );
-		s.persist( price );
-		s.persist( me );
-		s.persist( white );
-		tx.commit();
-		//s.close();
-		s = openSession();
-		tx = s.beginTransaction();
-		white = (Paper) s.get( Paper.class, white.getId() );
-		s.delete( white.getType() );
-		s.delete( white.getOwner() );
-		s.delete( white.getValue() );
-		s.delete( white );
-		tx.commit();
-		//s.close();
-	}
-
-	@Override
-	protected void configure(Configuration cfg) {
-		cfg.setProperty( Environment.AUTO_CLOSE_SESSION, "true" );
-		super.configure( cfg );
-	}
-
-	protected Class[] getMappings() {
-		return new Class[]{
-				Paper.class,
-				PaperType.class,
-				SomeGuy.class,
-				Price.class,
-				WildEntity.class
-		};
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/GenericsTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/GenericsTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/GenericsTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/GenericsTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,60 @@
+//$Id$
+package org.hibernate.test.annotations.generics;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.cfg.Configuration;
+import org.hibernate.cfg.Environment;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class GenericsTest extends TestCase {
+	public void testManyToOneGenerics() throws Exception {
+		Paper white = new Paper();
+		white.setName( "WhiteA4" );
+		PaperType type = new PaperType();
+		type.setName( "A4" );
+		SomeGuy me = new SomeGuy();
+		white.setType( type );
+		white.setOwner( me );
+		Price price = new Price();
+		price.setAmount( new Double( 1 ) );
+		price.setCurrency( "Euro" );
+		white.setValue( price );
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		s.persist( type );
+		s.persist( price );
+		s.persist( me );
+		s.persist( white );
+		tx.commit();
+		//s.close();
+		s = openSession();
+		tx = s.beginTransaction();
+		white = (Paper) s.get( Paper.class, white.getId() );
+		s.delete( white.getType() );
+		s.delete( white.getOwner() );
+		s.delete( white.getValue() );
+		s.delete( white );
+		tx.commit();
+		//s.close();
+	}
+
+	@Override
+	protected void configure(Configuration cfg) {
+		cfg.setProperty( Environment.AUTO_CLOSE_SESSION, "true" );
+		super.configure( cfg );
+	}
+
+	protected Class[] getMappings() {
+		return new Class[]{
+				Paper.class,
+				PaperType.class,
+				SomeGuy.class,
+				Price.class,
+				WildEntity.class
+		};
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/Item.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/Item.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/Item.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,54 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.generics;
-
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.ManyToOne;
-import javax.persistence.MappedSuperclass;
-
-/**
- * @author Emmanuel Bernard
- */
- at MappedSuperclass
-public class Item<Type, Owner> extends PricedStuff {
-	private Integer id;
-	private String name;
-	private Type type;
-	private Owner owner;
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	@ManyToOne
-	public Type getType() {
-		return type;
-	}
-
-	public void setType(Type type) {
-		this.type = type;
-	}
-
-	@ManyToOne
-	public Owner getOwner() {
-		return owner;
-	}
-
-	public void setOwner(Owner owner) {
-		this.owner = owner;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/Item.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/Item.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/Item.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/Item.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,54 @@
+//$Id$
+package org.hibernate.test.annotations.generics;
+
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+import javax.persistence.MappedSuperclass;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at MappedSuperclass
+public class Item<Type, Owner> extends PricedStuff {
+	private Integer id;
+	private String name;
+	private Type type;
+	private Owner owner;
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	@ManyToOne
+	public Type getType() {
+		return type;
+	}
+
+	public void setType(Type type) {
+		this.type = type;
+	}
+
+	@ManyToOne
+	public Owner getOwner() {
+		return owner;
+	}
+
+	public void setOwner(Owner owner) {
+		this.owner = owner;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/Paper.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/Paper.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/Paper.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,11 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.generics;
-
-import javax.persistence.Entity;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Paper extends Item<PaperType, SomeGuy> {
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/Paper.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/Paper.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/Paper.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/Paper.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,11 @@
+//$Id$
+package org.hibernate.test.annotations.generics;
+
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Paper extends Item<PaperType, SomeGuy> {
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/PaperType.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/PaperType.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/PaperType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,34 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.generics;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class PaperType {
-	private Integer id;
-	private String name;
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/PaperType.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/PaperType.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/PaperType.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/PaperType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,34 @@
+//$Id$
+package org.hibernate.test.annotations.generics;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class PaperType {
+	private Integer id;
+	private String name;
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/Price.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/Price.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/Price.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,42 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.generics;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Price {
-	private Integer id;
-	private Double amount;
-	private String currency;
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public Double getAmount() {
-		return amount;
-	}
-
-	public void setAmount(Double amount) {
-		this.amount = amount;
-	}
-
-	public String getCurrency() {
-		return currency;
-	}
-
-	public void setCurrency(String currency) {
-		this.currency = currency;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/Price.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/Price.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/Price.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/Price.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,42 @@
+//$Id$
+package org.hibernate.test.annotations.generics;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Price {
+	private Integer id;
+	private Double amount;
+	private String currency;
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public Double getAmount() {
+		return amount;
+	}
+
+	public void setAmount(Double amount) {
+		this.amount = amount;
+	}
+
+	public String getCurrency() {
+		return currency;
+	}
+
+	public void setCurrency(String currency) {
+		this.currency = currency;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/PricedStuff.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/PricedStuff.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/PricedStuff.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,11 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.generics;
-
-import javax.persistence.MappedSuperclass;
-
-/**
- * @author Emmanuel Bernard
- */
- at MappedSuperclass
-public class PricedStuff extends Stuff<Price> {
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/PricedStuff.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/PricedStuff.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/PricedStuff.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/PricedStuff.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,11 @@
+//$Id$
+package org.hibernate.test.annotations.generics;
+
+import javax.persistence.MappedSuperclass;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at MappedSuperclass
+public class PricedStuff extends Stuff<Price> {
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/SomeGuy.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/SomeGuy.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/SomeGuy.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,24 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.generics;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class SomeGuy {
-	private Integer id;
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/SomeGuy.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/SomeGuy.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/SomeGuy.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/SomeGuy.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,24 @@
+//$Id$
+package org.hibernate.test.annotations.generics;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class SomeGuy {
+	private Integer id;
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/State.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/State.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/State.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,10 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.generics;
-
-/**
- * @author Emmanuel Bernard
- */
-public enum State {
-	ACTIVE,
-	DORMANT
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/State.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/State.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/State.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/State.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,10 @@
+//$Id: $
+package org.hibernate.test.annotations.generics;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public enum State {
+	ACTIVE,
+	DORMANT
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/StateType.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/StateType.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/StateType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,69 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.generics;
-
-import java.io.Serializable;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.PreparedStatement;
-import java.sql.Types;
-
-import org.hibernate.usertype.UserType;
-import org.hibernate.HibernateException;
-
-/**
- * @author Emmanuel Bernard
- */
-public class StateType implements UserType {
-	public int[] sqlTypes() {
-		return new int[] {
-			Types.INTEGER
-		};
-	}
-
-	public Class returnedClass() {
-		return State.class;
-	}
-
-	public boolean equals(Object x, Object y) throws HibernateException {
-		return x == y;
-	}
-
-	public int hashCode(Object x) throws HibernateException {
-		return x.hashCode();
-	}
-
-	public Object nullSafeGet(ResultSet rs, String[] names, Object owner) throws HibernateException, SQLException {
-		int result = rs.getInt( names[0] );
-		if ( rs.wasNull() ) return null;
-		return State.values()[result];
-	}
-
-	public void nullSafeSet(PreparedStatement st, Object value, int index) throws HibernateException, SQLException {
-		if (value == null) {
-			st.setNull( index, Types.INTEGER );
-		}
-		else {
-			st.setInt( index, ( (State) value ).ordinal() );
-		}
-	}
-
-	public Object deepCopy(Object value) throws HibernateException {
-		return value;
-	}
-
-	public boolean isMutable() {
-		return false;
-	}
-
-	public Serializable disassemble(Object value) throws HibernateException {
-		return (Serializable) value;
-	}
-
-	public Object assemble(Serializable cached, Object owner) throws HibernateException {
-		return cached;
-	}
-
-	public Object replace(Object original, Object target, Object owner) throws HibernateException {
-		return original;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/StateType.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/StateType.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/StateType.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/StateType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,69 @@
+//$Id: $
+package org.hibernate.test.annotations.generics;
+
+import java.io.Serializable;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.PreparedStatement;
+import java.sql.Types;
+
+import org.hibernate.usertype.UserType;
+import org.hibernate.HibernateException;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class StateType implements UserType {
+	public int[] sqlTypes() {
+		return new int[] {
+			Types.INTEGER
+		};
+	}
+
+	public Class returnedClass() {
+		return State.class;
+	}
+
+	public boolean equals(Object x, Object y) throws HibernateException {
+		return x == y;
+	}
+
+	public int hashCode(Object x) throws HibernateException {
+		return x.hashCode();
+	}
+
+	public Object nullSafeGet(ResultSet rs, String[] names, Object owner) throws HibernateException, SQLException {
+		int result = rs.getInt( names[0] );
+		if ( rs.wasNull() ) return null;
+		return State.values()[result];
+	}
+
+	public void nullSafeSet(PreparedStatement st, Object value, int index) throws HibernateException, SQLException {
+		if (value == null) {
+			st.setNull( index, Types.INTEGER );
+		}
+		else {
+			st.setInt( index, ( (State) value ).ordinal() );
+		}
+	}
+
+	public Object deepCopy(Object value) throws HibernateException {
+		return value;
+	}
+
+	public boolean isMutable() {
+		return false;
+	}
+
+	public Serializable disassemble(Object value) throws HibernateException {
+		return (Serializable) value;
+	}
+
+	public Object assemble(Serializable cached, Object owner) throws HibernateException {
+		return cached;
+	}
+
+	public Object replace(Object original, Object target, Object owner) throws HibernateException {
+		return original;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/Stuff.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/Stuff.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/Stuff.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,22 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.generics;
-
-import javax.persistence.ManyToOne;
-import javax.persistence.MappedSuperclass;
-
-/**
- * @author Emmanuel Bernard
- */
- at MappedSuperclass
-public class Stuff<Value> {
-	private Value value;
-
-	@ManyToOne
-	public Value getValue() {
-		return value;
-	}
-
-	public void setValue(Value value) {
-		this.value = value;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/Stuff.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/Stuff.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/Stuff.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/Stuff.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,22 @@
+//$Id$
+package org.hibernate.test.annotations.generics;
+
+import javax.persistence.ManyToOne;
+import javax.persistence.MappedSuperclass;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at MappedSuperclass
+public class Stuff<Value> {
+	private Value value;
+
+	@ManyToOne
+	public Value getValue() {
+		return value;
+	}
+
+	public void setValue(Value value) {
+		this.value = value;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/UnresolvedTypeTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/UnresolvedTypeTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/UnresolvedTypeTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,43 +0,0 @@
-package org.hibernate.test.annotations.generics;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-import org.hibernate.test.annotations.TestCase;
-
-/**
- * @author Paolo Perrotta
- */
-public class UnresolvedTypeTest extends TestCase {
-
-	public void testAcceptsUnresolvedPropertyTypesIfATargetEntityIsExplicitlySet() {
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		Gene item = new Gene();
-		s.persist( item );
-		s.flush();
-		tx.rollback();
-		s.close();
-	}
-
-	public void testAcceptsUnresolvedPropertyTypesIfATypeExplicitlySet() {
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		Gene item = new Gene();
-		item.setState( State.DORMANT );
-		s.persist( item );
-		s.flush();
-		s.clear();
-		item = (Gene) s.get( Gene.class, item.getId() );
-		assertEquals( State.DORMANT, item.getState() );
-		tx.rollback();
-		s.close();
-	}
-
-	@Override
-	protected Class[] getMappings() {
-		return new Class[]{
-				Gene.class,
-				DNA.class
-		};
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/UnresolvedTypeTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/UnresolvedTypeTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/UnresolvedTypeTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/UnresolvedTypeTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,43 @@
+package org.hibernate.test.annotations.generics;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Paolo Perrotta
+ */
+public class UnresolvedTypeTest extends TestCase {
+
+	public void testAcceptsUnresolvedPropertyTypesIfATargetEntityIsExplicitlySet() {
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		Gene item = new Gene();
+		s.persist( item );
+		s.flush();
+		tx.rollback();
+		s.close();
+	}
+
+	public void testAcceptsUnresolvedPropertyTypesIfATypeExplicitlySet() {
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		Gene item = new Gene();
+		item.setState( State.DORMANT );
+		s.persist( item );
+		s.flush();
+		s.clear();
+		item = (Gene) s.get( Gene.class, item.getId() );
+		assertEquals( State.DORMANT, item.getState() );
+		tx.rollback();
+		s.close();
+	}
+
+	@Override
+	protected Class[] getMappings() {
+		return new Class[]{
+				Gene.class,
+				DNA.class
+		};
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/WildEntity.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/WildEntity.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/WildEntity.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,44 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.generics;
-
-import java.io.Serializable;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.Transient;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class WildEntity implements Serializable {
-
-	private static final long serialVersionUID = -1171578628576139205L;
-
-	private int id;
-
-	private String property;
-
-	@Id
-	@GeneratedValue
-	public int getId() {
-		return id;
-	}
-
-	@Transient
-	public <T extends Object> T someMethod() {
-		return null;
-	}
-
-	public void setId(int id) {
-		this.id = id;
-	}
-
-	public String getProperty() {
-		return property;
-	}
-
-	public void setProperty(String property) {
-		this.property = property;
-	}
-}
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/WildEntity.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/WildEntity.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/WildEntity.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/generics/WildEntity.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,44 @@
+//$Id$
+package org.hibernate.test.annotations.generics;
+
+import java.io.Serializable;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Transient;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class WildEntity implements Serializable {
+
+	private static final long serialVersionUID = -1171578628576139205L;
+
+	private int id;
+
+	private String property;
+
+	@Id
+	@GeneratedValue
+	public int getId() {
+		return id;
+	}
+
+	@Transient
+	public <T extends Object> T someMethod() {
+		return null;
+	}
+
+	public void setId(int id) {
+		this.id = id;
+	}
+
+	public String getProperty() {
+		return property;
+	}
+
+	public void setProperty(String property) {
+		this.property = property;
+	}
+}
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance)

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/Child.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/Child.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/Child.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,27 +0,0 @@
-package org.hibernate.test.annotations.genericsinheritance;
-
-import javax.persistence.MappedSuperclass;
-import javax.persistence.Id;
-import javax.persistence.ManyToOne;
-
- at MappedSuperclass
-public abstract class Child<P extends Parent> {
-
-	@Id Long id;
-	@ManyToOne P parent;
-	
-	public Long getId() {
-		return id;
-	}
-	public void setId(Long id) {
-		this.id = id;
-	}
-	public P getParent() {
-		return parent;
-	}
-	public void setParent(P parent) {
-		this.parent = parent;
-	}
-	
-	
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/Child.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/Child.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/Child.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/Child.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,27 @@
+package org.hibernate.test.annotations.genericsinheritance;
+
+import javax.persistence.MappedSuperclass;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+
+ at MappedSuperclass
+public abstract class Child<P extends Parent> {
+
+	@Id Long id;
+	@ManyToOne P parent;
+	
+	public Long getId() {
+		return id;
+	}
+	public void setId(Long id) {
+		this.id = id;
+	}
+	public P getParent() {
+		return parent;
+	}
+	public void setParent(P parent) {
+		this.parent = parent;
+	}
+	
+	
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/ChildHierarchy1.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/ChildHierarchy1.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/ChildHierarchy1.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,8 +0,0 @@
-package org.hibernate.test.annotations.genericsinheritance;
-
-import javax.persistence.Entity;
-
- at Entity
-public class ChildHierarchy1 extends Child<ParentHierarchy1> {
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/ChildHierarchy1.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/ChildHierarchy1.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/ChildHierarchy1.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/ChildHierarchy1.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,8 @@
+package org.hibernate.test.annotations.genericsinheritance;
+
+import javax.persistence.Entity;
+
+ at Entity
+public class ChildHierarchy1 extends Child<ParentHierarchy1> {
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/ChildHierarchy2.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/ChildHierarchy2.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/ChildHierarchy2.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,8 +0,0 @@
-package org.hibernate.test.annotations.genericsinheritance;
-
-import javax.persistence.MappedSuperclass;
-
- at MappedSuperclass
-public class ChildHierarchy2<P extends ParentHierarchy2> extends Child<P> {
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/ChildHierarchy2.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/ChildHierarchy2.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/ChildHierarchy2.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/ChildHierarchy2.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,8 @@
+package org.hibernate.test.annotations.genericsinheritance;
+
+import javax.persistence.MappedSuperclass;
+
+ at MappedSuperclass
+public class ChildHierarchy2<P extends ParentHierarchy2> extends Child<P> {
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/ChildHierarchy22.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/ChildHierarchy22.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/ChildHierarchy22.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,8 +0,0 @@
-package org.hibernate.test.annotations.genericsinheritance;
-
-import javax.persistence.Entity;
-
- at Entity
-public class ChildHierarchy22 extends ChildHierarchy2<ParentHierarchy22> {
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/ChildHierarchy22.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/ChildHierarchy22.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/ChildHierarchy22.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/ChildHierarchy22.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,8 @@
+package org.hibernate.test.annotations.genericsinheritance;
+
+import javax.persistence.Entity;
+
+ at Entity
+public class ChildHierarchy22 extends ChildHierarchy2<ParentHierarchy22> {
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/GenericsInheritanceTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/GenericsInheritanceTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/GenericsInheritanceTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,24 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.genericsinheritance;
-
-import org.hibernate.test.annotations.TestCase;
-import org.hibernate.Session;
-
-/**
- * @author Emmanuel Bernard
- */
-public class GenericsInheritanceTest extends TestCase {
-	public void testMapping() throws Exception {
-		Session s = openSession();
-		s.close();
-		//mapping is tested
-	}
-	protected Class[] getMappings() {
-		return new Class[] {
-				ChildHierarchy1.class,
-				ParentHierarchy1.class,
-				ChildHierarchy22.class,
-				ParentHierarchy22.class
-		};
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/GenericsInheritanceTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/GenericsInheritanceTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/GenericsInheritanceTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/GenericsInheritanceTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,24 @@
+//$Id: $
+package org.hibernate.test.annotations.genericsinheritance;
+
+import org.hibernate.test.annotations.TestCase;
+import org.hibernate.Session;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class GenericsInheritanceTest extends TestCase {
+	public void testMapping() throws Exception {
+		Session s = openSession();
+		s.close();
+		//mapping is tested
+	}
+	protected Class[] getMappings() {
+		return new Class[] {
+				ChildHierarchy1.class,
+				ParentHierarchy1.class,
+				ChildHierarchy22.class,
+				ParentHierarchy22.class
+		};
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/Parent.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/Parent.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/Parent.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,35 +0,0 @@
-package org.hibernate.test.annotations.genericsinheritance;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.MapKey;
-import javax.persistence.MappedSuperclass;
-import javax.persistence.OneToMany;
-
- at MappedSuperclass
-public abstract class Parent<C extends Child> {
-
-	@Id @GeneratedValue Long id;
-	@MapKey @OneToMany(mappedBy="parent") Map<Long,C> children = new HashMap<Long,C>();
-
-	
-	public Long getId() {
-		return id;
-	}
-	public void setId(Long id) {
-		this.id = id;
-	}
-	
-	
-	public Map<Long,C> getChildren() {
-		return children;
-	}
-	public void setChildren(Map<Long,C> children) {
-		this.children = children;
-	}
-	
-	
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/Parent.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/Parent.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/Parent.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/Parent.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,35 @@
+package org.hibernate.test.annotations.genericsinheritance;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.MapKey;
+import javax.persistence.MappedSuperclass;
+import javax.persistence.OneToMany;
+
+ at MappedSuperclass
+public abstract class Parent<C extends Child> {
+
+	@Id @GeneratedValue Long id;
+	@MapKey @OneToMany(mappedBy="parent") Map<Long,C> children = new HashMap<Long,C>();
+
+	
+	public Long getId() {
+		return id;
+	}
+	public void setId(Long id) {
+		this.id = id;
+	}
+	
+	
+	public Map<Long,C> getChildren() {
+		return children;
+	}
+	public void setChildren(Map<Long,C> children) {
+		this.children = children;
+	}
+	
+	
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/ParentHierarchy1.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/ParentHierarchy1.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/ParentHierarchy1.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,8 +0,0 @@
-package org.hibernate.test.annotations.genericsinheritance;
-
-import javax.persistence.Entity;
-
- at Entity
-public class ParentHierarchy1 extends Parent<ChildHierarchy1> {
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/ParentHierarchy1.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/ParentHierarchy1.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/ParentHierarchy1.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/ParentHierarchy1.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,8 @@
+package org.hibernate.test.annotations.genericsinheritance;
+
+import javax.persistence.Entity;
+
+ at Entity
+public class ParentHierarchy1 extends Parent<ChildHierarchy1> {
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/ParentHierarchy2.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/ParentHierarchy2.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/ParentHierarchy2.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,8 +0,0 @@
-package org.hibernate.test.annotations.genericsinheritance;
-
-import javax.persistence.MappedSuperclass;
-
- at MappedSuperclass
-public class ParentHierarchy2<C extends ChildHierarchy2> extends Parent<C> {
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/ParentHierarchy2.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/ParentHierarchy2.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/ParentHierarchy2.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/ParentHierarchy2.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,8 @@
+package org.hibernate.test.annotations.genericsinheritance;
+
+import javax.persistence.MappedSuperclass;
+
+ at MappedSuperclass
+public class ParentHierarchy2<C extends ChildHierarchy2> extends Parent<C> {
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/ParentHierarchy22.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/ParentHierarchy22.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/ParentHierarchy22.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,8 +0,0 @@
-package org.hibernate.test.annotations.genericsinheritance;
-
-import javax.persistence.Entity;
-
- at Entity
-public class ParentHierarchy22 extends ParentHierarchy2<ChildHierarchy22> {
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/ParentHierarchy22.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/ParentHierarchy22.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/ParentHierarchy22.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/genericsinheritance/ParentHierarchy22.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,8 @@
+package org.hibernate.test.annotations.genericsinheritance;
+
+import javax.persistence.Entity;
+
+ at Entity
+public class ParentHierarchy22 extends ParentHierarchy2<ChildHierarchy22> {
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/hibernate.cfg.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/hibernate.cfg.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/hibernate.cfg.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,11 +0,0 @@
-<!DOCTYPE hibernate-configuration PUBLIC
-        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
-        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
-
-<hibernate-configuration>
-    <session-factory>
-        <mapping resource="org/hibernate/test/annotations/Boat.hbm.xml"/>
-        <mapping package="org.hibernate.test.annotations"/>
-        <mapping class="org.hibernate.test.annotations.Plane"/>
-    </session-factory>
-</hibernate-configuration>
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/hibernate.cfg.xml (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/hibernate.cfg.xml)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/hibernate.cfg.xml	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/hibernate.cfg.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,11 @@
+<!DOCTYPE hibernate-configuration PUBLIC
+        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
+        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
+
+<hibernate-configuration>
+    <session-factory>
+        <mapping resource="org/hibernate/test/annotations/Boat.hbm.xml"/>
+        <mapping package="org.hibernate.test.annotations"/>
+        <mapping class="org.hibernate.test.annotations.Plane"/>
+    </session-factory>
+</hibernate-configuration>
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id)

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Ball.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Ball.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Ball.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,34 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.id;
-
-import java.io.Serializable;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.TableGenerator;
-
-/**
- * Sample of table generator
- *
- * @author Emmanuel Bernard
- */
- at TableGenerator(name = "EMP_GEN", table = "GENERATOR_TABLE", pkColumnName = "pkey",
-		valueColumnName = "hi", pkColumnValue = "Ball", allocationSize = 10)
- at Entity
-public class Ball implements Serializable {
-	private Integer id;
-
-	@Id
-	@GeneratedValue(strategy = GenerationType.TABLE, generator = "EMP_GEN")
-	@Column(name = "ball_id")
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Ball.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Ball.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Ball.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Ball.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,34 @@
+//$Id$
+package org.hibernate.test.annotations.id;
+
+import java.io.Serializable;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.TableGenerator;
+
+/**
+ * Sample of table generator
+ *
+ * @author Emmanuel Bernard
+ */
+ at TableGenerator(name = "EMP_GEN", table = "GENERATOR_TABLE", pkColumnName = "pkey",
+		valueColumnName = "hi", pkColumnValue = "Ball", allocationSize = 10)
+ at Entity
+public class Ball implements Serializable {
+	private Integer id;
+
+	@Id
+	@GeneratedValue(strategy = GenerationType.TABLE, generator = "EMP_GEN")
+	@Column(name = "ball_id")
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/BreakDance.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/BreakDance.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/BreakDance.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,27 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.id;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.GeneratedValue;
-import javax.persistence.TableGenerator;
-import javax.persistence.GenerationType;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class BreakDance {
-	@Id
-	@GeneratedValue(generator = "memencoIdGen", strategy = GenerationType.TABLE)
-	@TableGenerator(
-		name = "memencoIdGen",
-		table = "hi_id_key",
-		pkColumnName = "id_key",
-		valueColumnName = "next_hi",
-		pkColumnValue = "issue",
-		allocationSize = 1
-	)
-	public Integer id;
-	public String name;
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/BreakDance.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/BreakDance.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/BreakDance.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/BreakDance.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,27 @@
+//$Id: $
+package org.hibernate.test.annotations.id;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+import javax.persistence.TableGenerator;
+import javax.persistence.GenerationType;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class BreakDance {
+	@Id
+	@GeneratedValue(generator = "memencoIdGen", strategy = GenerationType.TABLE)
+	@TableGenerator(
+		name = "memencoIdGen",
+		table = "hi_id_key",
+		pkColumnName = "id_key",
+		valueColumnName = "next_hi",
+		pkColumnValue = "issue",
+		allocationSize = 1
+	)
+	public Integer id;
+	public String name;
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Computer.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Computer.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Computer.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,34 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.id;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity()
-public class Computer {
-	private Long id;
-	private String serialNumber;
-
-	@Id
-	@GeneratedValue(strategy = GenerationType.TABLE)
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-
-	public String getSerialNumber() {
-		return serialNumber;
-	}
-
-	public void setSerialNumber(String serialNumber) {
-		this.serialNumber = serialNumber;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Computer.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Computer.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Computer.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Computer.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,34 @@
+//$Id$
+package org.hibernate.test.annotations.id;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity()
+public class Computer {
+	private Long id;
+	private String serialNumber;
+
+	@Id
+	@GeneratedValue(strategy = GenerationType.TABLE)
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getSerialNumber() {
+		return serialNumber;
+	}
+
+	public void setSerialNumber(String serialNumber) {
+		this.serialNumber = serialNumber;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Department.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Department.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Department.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,32 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.id;
-
-import java.io.Serializable;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-
-/**
- * Sample of method generator
- *
- * @author Emmanuel Bernard
- */
- at Entity
-public class Department implements Serializable {
-	private Long id;
-
-	@Id
-	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_DEPT")
-	@javax.persistence.SequenceGenerator(
-			name = "SEQ_DEPT",
-			sequenceName = "my_sequence"
-	)
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long long1) {
-		id = long1;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Department.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Department.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Department.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Department.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,32 @@
+//$Id$
+package org.hibernate.test.annotations.id;
+
+import java.io.Serializable;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+
+/**
+ * Sample of method generator
+ *
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Department implements Serializable {
+	private Long id;
+
+	@Id
+	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_DEPT")
+	@javax.persistence.SequenceGenerator(
+			name = "SEQ_DEPT",
+			sequenceName = "my_sequence"
+	)
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long long1) {
+		id = long1;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Dog.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Dog.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Dog.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,42 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.id;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.Table;
-import javax.persistence.TableGenerator;
-
-/**
- * Share the generator table decribed by the GEN_TABLE GeneratedIdTable
- * using the Dog key as discriminator
- *
- * @author Emmanuel Bernard
- */
- at Entity
- at Table(name = "tbl_dog")
- at TableGenerator(name = "DogGen", table = "GENERATOR_TABLE", pkColumnName = "pkey",
-		valueColumnName = "hi", pkColumnValue = "Dog", allocationSize = 10)
-public class Dog {
-	private Integer id;
-	private String name;
-
-	@Id
-	@GeneratedValue(strategy = GenerationType.TABLE, generator = "DogGen")
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Dog.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Dog.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Dog.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Dog.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,42 @@
+//$Id$
+package org.hibernate.test.annotations.id;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.TableGenerator;
+
+/**
+ * Share the generator table decribed by the GEN_TABLE GeneratedIdTable
+ * using the Dog key as discriminator
+ *
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Table(name = "tbl_dog")
+ at TableGenerator(name = "DogGen", table = "GENERATOR_TABLE", pkColumnName = "pkey",
+		valueColumnName = "hi", pkColumnValue = "Dog", allocationSize = 10)
+public class Dog {
+	private Integer id;
+	private String name;
+
+	@Id
+	@GeneratedValue(strategy = GenerationType.TABLE, generator = "DogGen")
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/FirTree.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/FirTree.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/FirTree.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,11 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.id;
-
-import javax.persistence.Entity;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class FirTree extends Tree {
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/FirTree.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/FirTree.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/FirTree.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/FirTree.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,11 @@
+//$Id$
+package org.hibernate.test.annotations.id;
+
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class FirTree extends Tree {
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Footballer.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Footballer.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Footballer.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,73 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.id;
-
-import javax.persistence.DiscriminatorColumn;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.IdClass;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at IdClass(FootballerPk.class)
- at DiscriminatorColumn(name = "bibi")
-public class Footballer {
-	private String firstname;
-	private String lastname;
-	private String club;
-
-	public Footballer() {
-	}
-
-	public Footballer(String firstname, String lastname, String club) {
-		this.firstname = firstname;
-		this.lastname = lastname;
-		this.club = club;
-	}
-
-	public boolean equals(Object o) {
-		if ( this == o ) return true;
-		if ( !( o instanceof Footballer ) ) return false;
-
-		final Footballer footballer = (Footballer) o;
-
-		if ( !firstname.equals( footballer.firstname ) ) return false;
-		if ( !lastname.equals( footballer.lastname ) ) return false;
-
-		return true;
-	}
-
-	public int hashCode() {
-		int result;
-		result = firstname.hashCode();
-		result = 29 * result + lastname.hashCode();
-		return result;
-	}
-
-	@Id
-	public String getFirstname() {
-		return firstname;
-	}
-
-	public void setFirstname(String firstname) {
-		this.firstname = firstname;
-	}
-
-	@Id
-	public String getLastname() {
-		return lastname;
-	}
-
-	public void setLastname(String lastname) {
-		this.lastname = lastname;
-	}
-
-	public String getClub() {
-		return club;
-	}
-
-	public void setClub(String club) {
-		this.club = club;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Footballer.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Footballer.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Footballer.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Footballer.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,73 @@
+//$Id$
+package org.hibernate.test.annotations.id;
+
+import javax.persistence.DiscriminatorColumn;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.IdClass;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at IdClass(FootballerPk.class)
+ at DiscriminatorColumn(name = "bibi")
+public class Footballer {
+	private String firstname;
+	private String lastname;
+	private String club;
+
+	public Footballer() {
+	}
+
+	public Footballer(String firstname, String lastname, String club) {
+		this.firstname = firstname;
+		this.lastname = lastname;
+		this.club = club;
+	}
+
+	public boolean equals(Object o) {
+		if ( this == o ) return true;
+		if ( !( o instanceof Footballer ) ) return false;
+
+		final Footballer footballer = (Footballer) o;
+
+		if ( !firstname.equals( footballer.firstname ) ) return false;
+		if ( !lastname.equals( footballer.lastname ) ) return false;
+
+		return true;
+	}
+
+	public int hashCode() {
+		int result;
+		result = firstname.hashCode();
+		result = 29 * result + lastname.hashCode();
+		return result;
+	}
+
+	@Id
+	public String getFirstname() {
+		return firstname;
+	}
+
+	public void setFirstname(String firstname) {
+		this.firstname = firstname;
+	}
+
+	@Id
+	public String getLastname() {
+		return lastname;
+	}
+
+	public void setLastname(String lastname) {
+		this.lastname = lastname;
+	}
+
+	public String getClub() {
+		return club;
+	}
+
+	public void setClub(String club) {
+		this.club = club;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/FootballerPk.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/FootballerPk.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/FootballerPk.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,61 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.id;
-
-import java.io.Serializable;
-import javax.persistence.Column;
-import javax.persistence.Embeddable;
-
-/**
- * @author Emmanuel Bernard
- */
- at Embeddable
-public class FootballerPk implements Serializable {
-	private String firstname;
-	private String lastname;
-
-	@Column(name = "fb_fname")
-	public String getFirstname() {
-		return firstname;
-	}
-
-	public String getLastname() {
-		return lastname;
-	}
-
-	public void setFirstname(String firstname) {
-		this.firstname = firstname;
-	}
-
-	public void setLastname(String lastname) {
-		this.lastname = lastname;
-	}
-
-	public FootballerPk() {
-	}
-
-	public FootballerPk(String firstname, String lastname) {
-		this.firstname = firstname;
-		this.lastname = lastname;
-
-	}
-
-	public boolean equals(Object o) {
-		if ( this == o ) return true;
-		if ( !( o instanceof FootballerPk ) ) return false;
-
-		final FootballerPk footballerPk = (FootballerPk) o;
-
-		if ( !firstname.equals( footballerPk.firstname ) ) return false;
-		if ( !lastname.equals( footballerPk.lastname ) ) return false;
-
-		return true;
-	}
-
-	public int hashCode() {
-		int result;
-		result = firstname.hashCode();
-		result = 29 * result + lastname.hashCode();
-		return result;
-	}
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/FootballerPk.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/FootballerPk.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/FootballerPk.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/FootballerPk.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,61 @@
+//$Id$
+package org.hibernate.test.annotations.id;
+
+import java.io.Serializable;
+import javax.persistence.Column;
+import javax.persistence.Embeddable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Embeddable
+public class FootballerPk implements Serializable {
+	private String firstname;
+	private String lastname;
+
+	@Column(name = "fb_fname")
+	public String getFirstname() {
+		return firstname;
+	}
+
+	public String getLastname() {
+		return lastname;
+	}
+
+	public void setFirstname(String firstname) {
+		this.firstname = firstname;
+	}
+
+	public void setLastname(String lastname) {
+		this.lastname = lastname;
+	}
+
+	public FootballerPk() {
+	}
+
+	public FootballerPk(String firstname, String lastname) {
+		this.firstname = firstname;
+		this.lastname = lastname;
+
+	}
+
+	public boolean equals(Object o) {
+		if ( this == o ) return true;
+		if ( !( o instanceof FootballerPk ) ) return false;
+
+		final FootballerPk footballerPk = (FootballerPk) o;
+
+		if ( !firstname.equals( footballerPk.firstname ) ) return false;
+		if ( !lastname.equals( footballerPk.lastname ) ) return false;
+
+		return true;
+	}
+
+	public int hashCode() {
+		int result;
+		result = firstname.hashCode();
+		result = 29 * result + lastname.hashCode();
+		return result;
+	}
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Furniture.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Furniture.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Furniture.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,33 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.id;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-
-import org.hibernate.annotations.GenericGenerator;
-import org.hibernate.annotations.Parameter;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Furniture {
-	private Integer id;
-
-	@Id
-	@GeneratedValue(generator = "hibseq")
-	@GenericGenerator(name = "hibseq", strategy = "seqhilo",
-			parameters = {
-			@Parameter(name = "max_lo", value = "5"),
-			@Parameter(name = "sequence", value = "heybabyhey")
-					}
-	)
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Furniture.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Furniture.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Furniture.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Furniture.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,33 @@
+//$Id$
+package org.hibernate.test.annotations.id;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.hibernate.annotations.Parameter;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Furniture {
+	private Integer id;
+
+	@Id
+	@GeneratedValue(generator = "hibseq")
+	@GenericGenerator(name = "hibseq", strategy = "seqhilo",
+			parameters = {
+			@Parameter(name = "max_lo", value = "5"),
+			@Parameter(name = "sequence", value = "heybabyhey")
+					}
+	)
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/GoalKeeper.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/GoalKeeper.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/GoalKeeper.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,17 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.id;
-
-import javax.persistence.Entity;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class GoalKeeper extends Footballer {
-	public GoalKeeper() {
-	}
-
-	public GoalKeeper(String firstname, String lastname, String club) {
-		super( firstname, lastname, club );
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/GoalKeeper.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/GoalKeeper.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/GoalKeeper.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/GoalKeeper.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,17 @@
+//$Id$
+package org.hibernate.test.annotations.id;
+
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class GoalKeeper extends Footballer {
+	public GoalKeeper() {
+	}
+
+	public GoalKeeper(String firstname, String lastname, String club) {
+		super( firstname, lastname, club );
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Home.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Home.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Home.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,26 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.id;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-
-/**
- * Default sequence generation usage
- *
- * @author Emmanuel Bernard
- */
- at Entity
-public class Home {
-	private Long id;
-
-	@Id
-	@GeneratedValue
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Home.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Home.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Home.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Home.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,26 @@
+//$Id$
+package org.hibernate.test.annotations.id;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * Default sequence generation usage
+ *
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Home {
+	private Long id;
+
+	@Id
+	@GeneratedValue
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/IdClassTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/IdClassTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/IdClassTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,35 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.id;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-import org.hibernate.test.annotations.TestCase;
-
-/**
- * @author Emmanuel Bernard
- */
-public class IdClassTest extends TestCase {
-
-	public void testIdClassInSuperclass() throws Exception {
-		Tower tower = new Tower();
-		tower.latitude = 10.3;
-		tower.longitude = 45.4;
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		s.persist( tower );
-		s.flush();
-		s.clear();
-		Location loc = new Location();
-		loc.latitude = tower.latitude;
-		loc.longitude = tower.longitude;
-		assertNotNull( s.get( Tower.class, loc ) );
-		tx.rollback();
-		s.close();
-	}
-
-	protected Class[] getMappings() {
-		return new Class[]{
-				Tower.class
-		};
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/IdClassTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/IdClassTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/IdClassTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/IdClassTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,35 @@
+//$Id$
+package org.hibernate.test.annotations.id;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class IdClassTest extends TestCase {
+
+	public void testIdClassInSuperclass() throws Exception {
+		Tower tower = new Tower();
+		tower.latitude = 10.3;
+		tower.longitude = 45.4;
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		s.persist( tower );
+		s.flush();
+		s.clear();
+		Location loc = new Location();
+		loc.latitude = tower.latitude;
+		loc.longitude = tower.longitude;
+		assertNotNull( s.get( Tower.class, loc ) );
+		tx.rollback();
+		s.close();
+	}
+
+	protected Class[] getMappings() {
+		return new Class[]{
+				Tower.class
+		};
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/IdTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/IdTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/IdTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,288 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.id;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-import org.hibernate.mapping.Column;
-import org.hibernate.test.annotations.TestCase;
-
-/**
- * @author Emmanuel Bernard
- */
-public class IdTest extends TestCase {
-	//FIXME split Sequence and Id tests to explicit the run failure on Oracle etc
-
-	public IdTest(String x) {
-		super( x );
-	}
-
-	public void testGenericGenerator() throws Exception {
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		SoundSystem system = new SoundSystem();
-		system.setBrand( "Genelec" );
-		system.setModel( "T234" );
-		Furniture fur = new Furniture();
-		s.persist( system );
-		s.persist( fur );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		system = (SoundSystem) s.get( SoundSystem.class, system.getId() );
-		fur = (Furniture) s.get( Furniture.class, fur.getId() );
-		assertNotNull( system );
-		assertNotNull( fur );
-		s.delete( system );
-		s.delete( fur );
-		tx.commit();
-		s.close();
-
-	}
-
-	public void testTableGenerator() throws Exception {
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-
-		Ball b = new Ball();
-		Dog d = new Dog();
-		Computer c = new Computer();
-		s.persist( b );
-		s.persist( d );
-		s.persist( c );
-		tx.commit();
-		s.close();
-		assertEquals( "table id not generated", new Integer( 1 ), b.getId() );
-		assertEquals( "generator should not be shared", new Integer( 1 ), d.getId() );
-		assertEquals( "default value should work", new Long( 1 ), c.getId() );
-
-		s = openSession();
-		tx = s.beginTransaction();
-		s.delete( s.get( Ball.class, new Integer( 1 ) ) );
-		s.delete( s.get( Dog.class, new Integer( 1 ) ) );
-		s.delete( s.get( Computer.class, new Long( 1 ) ) );
-		tx.commit();
-		s.close();
-	}
-
-	public void testSequenceGenerator() throws Exception {
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		Shoe b = new Shoe();
-		s.persist( b );
-		tx.commit();
-		s.close();
-		assertNotNull( b.getId() );
-
-		s = openSession();
-		tx = s.beginTransaction();
-		s.delete( s.get( Shoe.class, b.getId() ) );
-		tx.commit();
-		s.close();
-	}
-
-	public void testClassLevelGenerator() throws Exception {
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		Store b = new Store();
-		s.persist( b );
-		tx.commit();
-		s.close();
-		assertNotNull( b.getId() );
-
-		s = openSession();
-		tx = s.beginTransaction();
-		s.delete( s.get( Store.class, b.getId() ) );
-		tx.commit();
-		s.close();
-	}
-
-	public void testMethodLevelGenerator() throws Exception {
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		Department b = new Department();
-		s.persist( b );
-		tx.commit();
-		s.close();
-		assertNotNull( b.getId() );
-
-		s = openSession();
-		tx = s.beginTransaction();
-		s.delete( s.get( Department.class, b.getId() ) );
-		tx.commit();
-		s.close();
-	}
-
-	public void testDefaultSequence() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		Home h = new Home();
-		s.persist( h );
-		tx.commit();
-		s.close();
-		assertNotNull( h.getId() );
-
-		s = openSession();
-		tx = s.beginTransaction();
-		Home reloadedHome = (Home) s.get( Home.class, h.getId() );
-		assertEquals( h.getId(), reloadedHome.getId() );
-		s.delete( reloadedHome );
-		tx.commit();
-		s.close();
-	}
-
-	public void testParameterizedAuto() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		Home h = new Home();
-		s.persist( h );
-		tx.commit();
-		s.close();
-		assertNotNull( h.getId() );
-
-		s = openSession();
-		tx = s.beginTransaction();
-		Home reloadedHome = (Home) s.get( Home.class, h.getId() );
-		assertEquals( h.getId(), reloadedHome.getId() );
-		s.delete( reloadedHome );
-		tx.commit();
-		s.close();
-	}
-
-	public void testIdInEmbeddableSuperclass() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		FirTree chrismasTree = new FirTree();
-		s.persist( chrismasTree );
-		tx.commit();
-		s.clear();
-		tx = s.beginTransaction();
-		chrismasTree = (FirTree) s.get( FirTree.class, chrismasTree.getId() );
-		assertNotNull( chrismasTree );
-		s.delete( chrismasTree );
-		tx.commit();
-		s.close();
-	}
-
-	public void testIdClass() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		Footballer fb = new Footballer( "David", "Beckam", "Arsenal" );
-		GoalKeeper keeper = new GoalKeeper( "Fabien", "Bartez", "OM" );
-		s.persist( fb );
-		s.persist( keeper );
-		tx.commit();
-		s.clear();
-
-		//lookup by id
-		tx = s.beginTransaction();
-		FootballerPk fpk = new FootballerPk( "David", "Beckam" );
-		fb = (Footballer) s.get( Footballer.class, fpk );
-		FootballerPk fpk2 = new FootballerPk( "Fabien", "Bartez" );
-		keeper = (GoalKeeper) s.get( GoalKeeper.class, fpk2 );
-		assertNotNull( fb );
-		assertNotNull( keeper );
-		assertEquals( "Beckam", fb.getLastname() );
-		assertEquals( "Arsenal", fb.getClub() );
-		assertEquals( 1, s.createQuery( "from Footballer f where f.firstname = 'David'" ).list().size() );
-		tx.commit();
-
-		//reattach by merge
-		tx = s.beginTransaction();
-		fb.setClub( "Bimbo FC" );
-		s.merge( fb );
-		tx.commit();
-
-		//reattach by saveOrUpdate
-		tx = s.beginTransaction();
-		fb.setClub( "Bimbo FC SA" );
-		s.saveOrUpdate( fb );
-		tx.commit();
-
-		//clean up
-		s.clear();
-		tx = s.beginTransaction();
-		fpk = new FootballerPk( "David", "Beckam" );
-		fb = (Footballer) s.get( Footballer.class, fpk );
-		assertEquals( "Bimbo FC SA", fb.getClub() );
-		s.delete( fb );
-		s.delete( keeper );
-		tx.commit();
-		s.close();
-	}
-
-	public void testColumnDefinition() {
-		Column idCol = (Column) getCfg().getClassMapping( Ball.class.getName() ).getIdentifierProperty().getValue()
-				.getColumnIterator().next();
-		assertEquals( "ball_id", idCol.getName() );
-	}
-
-	public void testLowAllocationSize() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		int size = 4;
-		BreakDance[] bds = new BreakDance[size];
-		for (int i = 0 ; i < size ; i++) {
-			bds[i] = new BreakDance();
-			s.persist( bds[i] );
-		}
-		s.flush();
-		for (int i = 0 ; i < size ; i++) {
-			assertEquals(i + 1, bds[i].id.intValue() );
-		}
-		tx.rollback();
-		s.close();
-	}
-
-	/**
-	 * @see org.hibernate.test.annotations.TestCase#getMappings()
-	 */
-	protected Class[] getMappings() {
-		return new Class[]{
-				Ball.class,
-				Shoe.class,
-				Store.class,
-				Department.class,
-				Dog.class,
-				Computer.class,
-				Home.class,
-				Phone.class,
-				Tree.class,
-				FirTree.class,
-				Footballer.class,
-				SoundSystem.class,
-				Furniture.class,
-				GoalKeeper.class,
-				BreakDance.class
-		};
-	}
-
-	/**
-	 * @see org.hibernate.test.annotations.TestCase#getAnnotatedPackages()
-	 */
-	protected String[] getAnnotatedPackages() {
-		return new String[]{
-				"org.hibernate.test.annotations",
-				"org.hibernate.test.annotations.id"
-		};
-	}
-
-	@Override
-	protected String[] getXmlFiles() {
-		return new String[] {
-				"org/hibernate/test/annotations/orm.xml"
-		};
-	}
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/IdTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/IdTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/IdTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/IdTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,288 @@
+//$Id$
+package org.hibernate.test.annotations.id;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.mapping.Column;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class IdTest extends TestCase {
+	//FIXME split Sequence and Id tests to explicit the run failure on Oracle etc
+
+	public IdTest(String x) {
+		super( x );
+	}
+
+	public void testGenericGenerator() throws Exception {
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		SoundSystem system = new SoundSystem();
+		system.setBrand( "Genelec" );
+		system.setModel( "T234" );
+		Furniture fur = new Furniture();
+		s.persist( system );
+		s.persist( fur );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		system = (SoundSystem) s.get( SoundSystem.class, system.getId() );
+		fur = (Furniture) s.get( Furniture.class, fur.getId() );
+		assertNotNull( system );
+		assertNotNull( fur );
+		s.delete( system );
+		s.delete( fur );
+		tx.commit();
+		s.close();
+
+	}
+
+	public void testTableGenerator() throws Exception {
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+
+		Ball b = new Ball();
+		Dog d = new Dog();
+		Computer c = new Computer();
+		s.persist( b );
+		s.persist( d );
+		s.persist( c );
+		tx.commit();
+		s.close();
+		assertEquals( "table id not generated", new Integer( 1 ), b.getId() );
+		assertEquals( "generator should not be shared", new Integer( 1 ), d.getId() );
+		assertEquals( "default value should work", new Long( 1 ), c.getId() );
+
+		s = openSession();
+		tx = s.beginTransaction();
+		s.delete( s.get( Ball.class, new Integer( 1 ) ) );
+		s.delete( s.get( Dog.class, new Integer( 1 ) ) );
+		s.delete( s.get( Computer.class, new Long( 1 ) ) );
+		tx.commit();
+		s.close();
+	}
+
+	public void testSequenceGenerator() throws Exception {
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		Shoe b = new Shoe();
+		s.persist( b );
+		tx.commit();
+		s.close();
+		assertNotNull( b.getId() );
+
+		s = openSession();
+		tx = s.beginTransaction();
+		s.delete( s.get( Shoe.class, b.getId() ) );
+		tx.commit();
+		s.close();
+	}
+
+	public void testClassLevelGenerator() throws Exception {
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		Store b = new Store();
+		s.persist( b );
+		tx.commit();
+		s.close();
+		assertNotNull( b.getId() );
+
+		s = openSession();
+		tx = s.beginTransaction();
+		s.delete( s.get( Store.class, b.getId() ) );
+		tx.commit();
+		s.close();
+	}
+
+	public void testMethodLevelGenerator() throws Exception {
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		Department b = new Department();
+		s.persist( b );
+		tx.commit();
+		s.close();
+		assertNotNull( b.getId() );
+
+		s = openSession();
+		tx = s.beginTransaction();
+		s.delete( s.get( Department.class, b.getId() ) );
+		tx.commit();
+		s.close();
+	}
+
+	public void testDefaultSequence() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		Home h = new Home();
+		s.persist( h );
+		tx.commit();
+		s.close();
+		assertNotNull( h.getId() );
+
+		s = openSession();
+		tx = s.beginTransaction();
+		Home reloadedHome = (Home) s.get( Home.class, h.getId() );
+		assertEquals( h.getId(), reloadedHome.getId() );
+		s.delete( reloadedHome );
+		tx.commit();
+		s.close();
+	}
+
+	public void testParameterizedAuto() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		Home h = new Home();
+		s.persist( h );
+		tx.commit();
+		s.close();
+		assertNotNull( h.getId() );
+
+		s = openSession();
+		tx = s.beginTransaction();
+		Home reloadedHome = (Home) s.get( Home.class, h.getId() );
+		assertEquals( h.getId(), reloadedHome.getId() );
+		s.delete( reloadedHome );
+		tx.commit();
+		s.close();
+	}
+
+	public void testIdInEmbeddableSuperclass() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		FirTree chrismasTree = new FirTree();
+		s.persist( chrismasTree );
+		tx.commit();
+		s.clear();
+		tx = s.beginTransaction();
+		chrismasTree = (FirTree) s.get( FirTree.class, chrismasTree.getId() );
+		assertNotNull( chrismasTree );
+		s.delete( chrismasTree );
+		tx.commit();
+		s.close();
+	}
+
+	public void testIdClass() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		Footballer fb = new Footballer( "David", "Beckam", "Arsenal" );
+		GoalKeeper keeper = new GoalKeeper( "Fabien", "Bartez", "OM" );
+		s.persist( fb );
+		s.persist( keeper );
+		tx.commit();
+		s.clear();
+
+		//lookup by id
+		tx = s.beginTransaction();
+		FootballerPk fpk = new FootballerPk( "David", "Beckam" );
+		fb = (Footballer) s.get( Footballer.class, fpk );
+		FootballerPk fpk2 = new FootballerPk( "Fabien", "Bartez" );
+		keeper = (GoalKeeper) s.get( GoalKeeper.class, fpk2 );
+		assertNotNull( fb );
+		assertNotNull( keeper );
+		assertEquals( "Beckam", fb.getLastname() );
+		assertEquals( "Arsenal", fb.getClub() );
+		assertEquals( 1, s.createQuery( "from Footballer f where f.firstname = 'David'" ).list().size() );
+		tx.commit();
+
+		//reattach by merge
+		tx = s.beginTransaction();
+		fb.setClub( "Bimbo FC" );
+		s.merge( fb );
+		tx.commit();
+
+		//reattach by saveOrUpdate
+		tx = s.beginTransaction();
+		fb.setClub( "Bimbo FC SA" );
+		s.saveOrUpdate( fb );
+		tx.commit();
+
+		//clean up
+		s.clear();
+		tx = s.beginTransaction();
+		fpk = new FootballerPk( "David", "Beckam" );
+		fb = (Footballer) s.get( Footballer.class, fpk );
+		assertEquals( "Bimbo FC SA", fb.getClub() );
+		s.delete( fb );
+		s.delete( keeper );
+		tx.commit();
+		s.close();
+	}
+
+	public void testColumnDefinition() {
+		Column idCol = (Column) getCfg().getClassMapping( Ball.class.getName() ).getIdentifierProperty().getValue()
+				.getColumnIterator().next();
+		assertEquals( "ball_id", idCol.getName() );
+	}
+
+	public void testLowAllocationSize() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		int size = 4;
+		BreakDance[] bds = new BreakDance[size];
+		for (int i = 0 ; i < size ; i++) {
+			bds[i] = new BreakDance();
+			s.persist( bds[i] );
+		}
+		s.flush();
+		for (int i = 0 ; i < size ; i++) {
+			assertEquals(i + 1, bds[i].id.intValue() );
+		}
+		tx.rollback();
+		s.close();
+	}
+
+	/**
+	 * @see org.hibernate.test.annotations.TestCase#getMappings()
+	 */
+	protected Class[] getMappings() {
+		return new Class[]{
+				Ball.class,
+				Shoe.class,
+				Store.class,
+				Department.class,
+				Dog.class,
+				Computer.class,
+				Home.class,
+				Phone.class,
+				Tree.class,
+				FirTree.class,
+				Footballer.class,
+				SoundSystem.class,
+				Furniture.class,
+				GoalKeeper.class,
+				BreakDance.class
+		};
+	}
+
+	/**
+	 * @see org.hibernate.test.annotations.TestCase#getAnnotatedPackages()
+	 */
+	protected String[] getAnnotatedPackages() {
+		return new String[]{
+				"org.hibernate.test.annotations",
+				"org.hibernate.test.annotations.id"
+		};
+	}
+
+	@Override
+	protected String[] getXmlFiles() {
+		return new String[] {
+				"org/hibernate/test/annotations/orm.xml"
+		};
+	}
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Location.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Location.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Location.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,34 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.id;
-
-import java.io.Serializable;
-
-/**
- * @author Emmanuel Bernard
- */
-public class Location implements Serializable {
-	public double longitude;
-	public double latitude;
-
-	public boolean equals(Object o) {
-		if ( this == o ) return true;
-		if ( o == null || getClass() != o.getClass() ) return false;
-
-		final Location location = (Location) o;
-
-		if ( Double.compare( location.latitude, latitude ) != 0 ) return false;
-		if ( Double.compare( location.longitude, longitude ) != 0 ) return false;
-
-		return true;
-	}
-
-	public int hashCode() {
-		int result;
-		long temp;
-		temp = longitude != +0.0d ? Double.doubleToLongBits( longitude ) : 0L;
-		result = (int) ( temp ^ ( temp >>> 32 ) );
-		temp = latitude != +0.0d ? Double.doubleToLongBits( latitude ) : 0L;
-		result = 29 * result + (int) ( temp ^ ( temp >>> 32 ) );
-		return result;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Location.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Location.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Location.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Location.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,34 @@
+//$Id$
+package org.hibernate.test.annotations.id;
+
+import java.io.Serializable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Location implements Serializable {
+	public double longitude;
+	public double latitude;
+
+	public boolean equals(Object o) {
+		if ( this == o ) return true;
+		if ( o == null || getClass() != o.getClass() ) return false;
+
+		final Location location = (Location) o;
+
+		if ( Double.compare( location.latitude, latitude ) != 0 ) return false;
+		if ( Double.compare( location.longitude, longitude ) != 0 ) return false;
+
+		return true;
+	}
+
+	public int hashCode() {
+		int result;
+		long temp;
+		temp = longitude != +0.0d ? Double.doubleToLongBits( longitude ) : 0L;
+		result = (int) ( temp ^ ( temp >>> 32 ) );
+		temp = latitude != +0.0d ? Double.doubleToLongBits( latitude ) : 0L;
+		result = 29 * result + (int) ( temp ^ ( temp >>> 32 ) );
+		return result;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/MilitaryBuilding.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/MilitaryBuilding.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/MilitaryBuilding.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,18 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.id;
-
-import javax.persistence.Id;
-import javax.persistence.IdClass;
-import javax.persistence.MappedSuperclass;
-
-/**
- * @author Emmanuel Bernard
- */
- at MappedSuperclass
- at IdClass(Location.class)
-public class MilitaryBuilding {
-	@Id
-	public double longitude;
-	@Id
-	public double latitude;
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/MilitaryBuilding.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/MilitaryBuilding.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/MilitaryBuilding.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/MilitaryBuilding.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,18 @@
+//$Id$
+package org.hibernate.test.annotations.id;
+
+import javax.persistence.Id;
+import javax.persistence.IdClass;
+import javax.persistence.MappedSuperclass;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at MappedSuperclass
+ at IdClass(Location.class)
+public class MilitaryBuilding {
+	@Id
+	public double longitude;
+	@Id
+	public double latitude;
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Phone.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Phone.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Phone.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,29 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.id;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity()
-public class Phone {
-	private Integer id;
-
-	@Id
-	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "Phone_Gen")
-	@javax.persistence.SequenceGenerator(
-			name = "Phone_Gen",
-			sequenceName = "phone_seq"
-	)
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Phone.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Phone.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Phone.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Phone.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,29 @@
+//$Id$
+package org.hibernate.test.annotations.id;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity()
+public class Phone {
+	private Integer id;
+
+	@Id
+	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "Phone_Gen")
+	@javax.persistence.SequenceGenerator(
+			name = "Phone_Gen",
+			sequenceName = "phone_seq"
+	)
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Shoe.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Shoe.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Shoe.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,28 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.id;
-
-import java.io.Serializable;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-
-/**
- * sample of Sequance generator
- *
- * @author Emmanuel Bernard
- */
- at Entity
-public class Shoe implements Serializable {
-	private Long id;
-
-	@Id
-	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_GEN")
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long long1) {
-		id = long1;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Shoe.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Shoe.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Shoe.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Shoe.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,28 @@
+//$Id$
+package org.hibernate.test.annotations.id;
+
+import java.io.Serializable;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+
+/**
+ * sample of Sequance generator
+ *
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Shoe implements Serializable {
+	private Long id;
+
+	@Id
+	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_GEN")
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long long1) {
+		id = long1;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/SoundSystem.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/SoundSystem.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/SoundSystem.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,42 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.id;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class SoundSystem {
-	private String id;
-	private String brand;
-	private String model;
-
-	@Id
-	@GeneratedValue(generator = "system-uuid")
-	public String getId() {
-		return id;
-	}
-
-	public void setId(String id) {
-		this.id = id;
-	}
-
-	public String getBrand() {
-		return brand;
-	}
-
-	public void setBrand(String brand) {
-		this.brand = brand;
-	}
-
-	public String getModel() {
-		return model;
-	}
-
-	public void setModel(String model) {
-		this.model = model;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/SoundSystem.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/SoundSystem.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/SoundSystem.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/SoundSystem.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,42 @@
+//$Id$
+package org.hibernate.test.annotations.id;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class SoundSystem {
+	private String id;
+	private String brand;
+	private String model;
+
+	@Id
+	@GeneratedValue(generator = "system-uuid")
+	public String getId() {
+		return id;
+	}
+
+	public void setId(String id) {
+		this.id = id;
+	}
+
+	public String getBrand() {
+		return brand;
+	}
+
+	public void setBrand(String brand) {
+		this.brand = brand;
+	}
+
+	public String getModel() {
+		return model;
+	}
+
+	public void setModel(String model) {
+		this.model = model;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Store.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Store.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Store.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,32 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.id;
-
-import java.io.Serializable;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-
-/**
- * Sample of class generator
- *
- * @author Emmanuel Bernard
- */
- at Entity
- at javax.persistence.SequenceGenerator(
-		name = "SEQ_STORE",
-		sequenceName = "my_sequence"
-)
-public class Store implements Serializable {
-	private Long id;
-
-	@Id
-	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_STORE")
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long long1) {
-		id = long1;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Store.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Store.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Store.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Store.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,32 @@
+//$Id$
+package org.hibernate.test.annotations.id;
+
+import java.io.Serializable;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+
+/**
+ * Sample of class generator
+ *
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at javax.persistence.SequenceGenerator(
+		name = "SEQ_STORE",
+		sequenceName = "my_sequence"
+)
+public class Store implements Serializable {
+	private Long id;
+
+	@Id
+	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_STORE")
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long long1) {
+		id = long1;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Tower.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Tower.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Tower.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,14 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.id;
-
-import javax.persistence.AttributeOverride;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at AttributeOverride(name = "longitude", column = @Column(name = "fld_longitude"))
-public class Tower extends MilitaryBuilding {
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Tower.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Tower.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Tower.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Tower.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,14 @@
+//$Id$
+package org.hibernate.test.annotations.id;
+
+import javax.persistence.AttributeOverride;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at AttributeOverride(name = "longitude", column = @Column(name = "fld_longitude"))
+public class Tower extends MilitaryBuilding {
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Tree.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Tree.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Tree.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,24 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.id;
-
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.MappedSuperclass;
-
-/**
- * @author Emmanuel Bernard
- */
- at MappedSuperclass
-public class Tree {
-	private Integer id;
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Tree.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Tree.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Tree.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/Tree.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,24 @@
+//$Id$
+package org.hibernate.test.annotations.id;
+
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.MappedSuperclass;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at MappedSuperclass
+public class Tree {
+	private Integer id;
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/package-info.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/package-info.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/package-info.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,9 +0,0 @@
-//$Id$
-/**
- * Test package for metatata facilities
- * It contains an example of package level metadata
- */
-
- at org.hibernate.annotations.GenericGenerator(name = "system-uuid",
-		strategy = "uuid") package org.hibernate.test.annotations.id;
-

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/package-info.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/package-info.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/package-info.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/id/package-info.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,9 @@
+//$Id$
+/**
+ * Test package for metatata facilities
+ * It contains an example of package level metadata
+ */
+
+ at org.hibernate.annotations.GenericGenerator(name = "system-uuid",
+		strategy = "uuid") package org.hibernate.test.annotations.id;
+

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/identifiercollection (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/identifiercollection)

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/identifiercollection/IdentifierCollectionTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/identifiercollection/IdentifierCollectionTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/identifiercollection/IdentifierCollectionTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,45 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.identifiercollection;
-
-import org.hibernate.test.annotations.TestCase;
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-
-
-/**
- * @author Emmanuel Bernard
- */
-public class IdentifierCollectionTest extends TestCase {
-	public void testIdBag() throws Exception {
-		Passport passport = new Passport();
-		passport.setName( "Emmanuel Bernard" );
-		Stamp canada = new Stamp();
-		canada.setCountry( "Canada" );
-		passport.getStamps().add( canada );
-		passport.getVisaStamp().add( canada );
-		Stamp norway = new Stamp();
-		norway.setCountry( "Norway" );
-		passport.getStamps().add( norway );
-		passport.getStamps().add(canada);
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		s.persist( passport );
-		s.flush();
-		//s.clear();
-		passport = (Passport) s.get( Passport.class, passport.getId() );
-		int canadaCount = 0;
-		for ( Stamp stamp : passport.getStamps() ) {
-			if ( "Canada".equals( stamp.getCountry() ) ) canadaCount++;
-		}
-		assertEquals( 2, canadaCount );
-		assertEquals( 1, passport.getVisaStamp().size() );
-		tx.rollback();
-		s.close();
-	}
-	protected Class[] getMappings() {
-		return new Class[] {
-				Passport.class,
-				Stamp.class
-		};
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/identifiercollection/IdentifierCollectionTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/identifiercollection/IdentifierCollectionTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/identifiercollection/IdentifierCollectionTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/identifiercollection/IdentifierCollectionTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,45 @@
+//$Id: $
+package org.hibernate.test.annotations.identifiercollection;
+
+import org.hibernate.test.annotations.TestCase;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class IdentifierCollectionTest extends TestCase {
+	public void testIdBag() throws Exception {
+		Passport passport = new Passport();
+		passport.setName( "Emmanuel Bernard" );
+		Stamp canada = new Stamp();
+		canada.setCountry( "Canada" );
+		passport.getStamps().add( canada );
+		passport.getVisaStamp().add( canada );
+		Stamp norway = new Stamp();
+		norway.setCountry( "Norway" );
+		passport.getStamps().add( norway );
+		passport.getStamps().add(canada);
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		s.persist( passport );
+		s.flush();
+		//s.clear();
+		passport = (Passport) s.get( Passport.class, passport.getId() );
+		int canadaCount = 0;
+		for ( Stamp stamp : passport.getStamps() ) {
+			if ( "Canada".equals( stamp.getCountry() ) ) canadaCount++;
+		}
+		assertEquals( 2, canadaCount );
+		assertEquals( 1, passport.getVisaStamp().size() );
+		tx.rollback();
+		s.close();
+	}
+	protected Class[] getMappings() {
+		return new Class[] {
+				Passport.class,
+				Stamp.class
+		};
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/identifiercollection/Passport.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/identifiercollection/Passport.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/identifiercollection/Passport.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,70 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.identifiercollection;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import javax.persistence.CascadeType;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.JoinTable;
-import javax.persistence.ManyToMany;
-import javax.persistence.TableGenerator;
-
-import org.hibernate.annotations.CollectionId;
-import org.hibernate.annotations.Type;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at TableGenerator(name="ids_generator", table="IDS")
-public class Passport {
-	@Id @GeneratedValue @Column(name="passport_id") private Long id;
-	private String name;
-
-	@ManyToMany(cascade = CascadeType.ALL)
-	@JoinTable(name="PASSPORT_STAMP")
-	@CollectionId(columns = @Column(name="COLLECTION_ID"), type=@Type(type="long"), generator = "generator")
-	@TableGenerator(name="generator", table="IDSTAMP")
-	private Collection<Stamp> stamps = new ArrayList();
-
-	@ManyToMany(cascade = CascadeType.ALL)
-	@JoinTable(name="PASSPORT_VISASTAMP")
-	@CollectionId(columns = @Column(name="COLLECTION_ID"), type=@Type(type="long"), generator = "ids_generator")
-	//TODO test identity generator
-	private Collection<Stamp> visaStamp = new ArrayList();
-
-	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 Collection<Stamp> getStamps() {
-		return stamps;
-	}
-
-	public void setStamps(Collection<Stamp> stamps) {
-		this.stamps = stamps;
-	}
-
-	public Collection<Stamp> getVisaStamp() {
-		return visaStamp;
-	}
-
-	public void setVisaStamp(Collection<Stamp> visaStamp) {
-		this.visaStamp = visaStamp;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/identifiercollection/Passport.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/identifiercollection/Passport.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/identifiercollection/Passport.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/identifiercollection/Passport.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,70 @@
+//$Id: $
+package org.hibernate.test.annotations.identifiercollection;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinTable;
+import javax.persistence.ManyToMany;
+import javax.persistence.TableGenerator;
+
+import org.hibernate.annotations.CollectionId;
+import org.hibernate.annotations.Type;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at TableGenerator(name="ids_generator", table="IDS")
+public class Passport {
+	@Id @GeneratedValue @Column(name="passport_id") private Long id;
+	private String name;
+
+	@ManyToMany(cascade = CascadeType.ALL)
+	@JoinTable(name="PASSPORT_STAMP")
+	@CollectionId(columns = @Column(name="COLLECTION_ID"), type=@Type(type="long"), generator = "generator")
+	@TableGenerator(name="generator", table="IDSTAMP")
+	private Collection<Stamp> stamps = new ArrayList();
+
+	@ManyToMany(cascade = CascadeType.ALL)
+	@JoinTable(name="PASSPORT_VISASTAMP")
+	@CollectionId(columns = @Column(name="COLLECTION_ID"), type=@Type(type="long"), generator = "ids_generator")
+	//TODO test identity generator
+	private Collection<Stamp> visaStamp = new ArrayList();
+
+	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 Collection<Stamp> getStamps() {
+		return stamps;
+	}
+
+	public void setStamps(Collection<Stamp> stamps) {
+		this.stamps = stamps;
+	}
+
+	public Collection<Stamp> getVisaStamp() {
+		return visaStamp;
+	}
+
+	public void setVisaStamp(Collection<Stamp> visaStamp) {
+		this.visaStamp = visaStamp;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/identifiercollection/Stamp.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/identifiercollection/Stamp.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/identifiercollection/Stamp.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,31 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.identifiercollection;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.GeneratedValue;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Stamp {
-	@Id @GeneratedValue private Long id;
-	private String country;
-
-	public String getCountry() {
-		return country;
-	}
-
-	public void setCountry(String country) {
-		this.country = country;
-	}
-
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/identifiercollection/Stamp.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/identifiercollection/Stamp.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/identifiercollection/Stamp.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/identifiercollection/Stamp.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,31 @@
+//$Id: $
+package org.hibernate.test.annotations.identifiercollection;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Stamp {
+	@Id @GeneratedValue private Long id;
+	private String country;
+
+	public String getCountry() {
+		return country;
+	}
+
+	public void setCountry(String country) {
+		this.country = country;
+	}
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone)

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/Card.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/Card.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/Card.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,70 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.idmanytoone;
-
-import java.io.Serializable;
-import java.util.Set;
-import javax.persistence.Embeddable;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.ManyToOne;
-import javax.persistence.CascadeType;
-import javax.persistence.FetchType;
-import javax.persistence.OneToMany;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Card {
-
-	@Id
-	private CardPrimaryKey primaryKey = new CardPrimaryKey();
-
-	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "primaryKey.card")
-	private Set<CardField> fields;
-
-	@ManyToOne
-	private CardField mainCardField;
-
-	@Embeddable
-	public static class CardPrimaryKey implements Serializable {
-
-		public CardPrimaryKey() {}
-
-		@ManyToOne(optional = false)
-		private Project project;
-
-		public Project getProject() {
-			return project;
-		}
-
-		public void setProject(Project project) {
-			this.project = project;
-		}
-
-	}
-
-	public Set<CardField> getFields() {
-		return fields;
-	}
-
-	public void setFields(Set<CardField> fields) {
-		this.fields = fields;
-	}
-
-	public CardPrimaryKey getPrimaryKey() {
-		return primaryKey;
-	}
-
-	public void setPrimaryKey(CardPrimaryKey primaryKey) {
-		this.primaryKey = primaryKey;
-	}
-
-	public CardField getMainCardField() {
-		return mainCardField;
-	}
-
-	public void setMainCardField(CardField mainCardField) {
-		this.mainCardField = mainCardField;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/Card.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/Card.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/Card.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/Card.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,70 @@
+//$Id: $
+package org.hibernate.test.annotations.idmanytoone;
+
+import java.io.Serializable;
+import java.util.Set;
+import javax.persistence.Embeddable;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+import javax.persistence.CascadeType;
+import javax.persistence.FetchType;
+import javax.persistence.OneToMany;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Card {
+
+	@Id
+	private CardPrimaryKey primaryKey = new CardPrimaryKey();
+
+	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "primaryKey.card")
+	private Set<CardField> fields;
+
+	@ManyToOne
+	private CardField mainCardField;
+
+	@Embeddable
+	public static class CardPrimaryKey implements Serializable {
+
+		public CardPrimaryKey() {}
+
+		@ManyToOne(optional = false)
+		private Project project;
+
+		public Project getProject() {
+			return project;
+		}
+
+		public void setProject(Project project) {
+			this.project = project;
+		}
+
+	}
+
+	public Set<CardField> getFields() {
+		return fields;
+	}
+
+	public void setFields(Set<CardField> fields) {
+		this.fields = fields;
+	}
+
+	public CardPrimaryKey getPrimaryKey() {
+		return primaryKey;
+	}
+
+	public void setPrimaryKey(CardPrimaryKey primaryKey) {
+		this.primaryKey = primaryKey;
+	}
+
+	public CardField getMainCardField() {
+		return mainCardField;
+	}
+
+	public void setMainCardField(CardField mainCardField) {
+		this.mainCardField = mainCardField;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/CardField.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/CardField.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/CardField.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,64 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.idmanytoone;
-
-import java.io.Serializable;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.ManyToOne;
-import javax.persistence.Embeddable;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class CardField {
-
-	@Id
-	private PrimaryKey primaryKey = new PrimaryKey();
-
-	@ManyToOne
-	private Card cardtmp;
-
-	@Embeddable
-	public static class PrimaryKey implements Serializable {
-
-		@ManyToOne(optional = false)
-		private Card card;
-
-		@ManyToOne(optional = false)
-		private CardKey key;
-
-		public Card getCard() {
-			return card;
-		}
-
-		public void setCard(Card card) {
-			this.card = card;
-		}
-
-		public CardKey getKey() {
-			return key;
-		}
-
-		public void setKey(CardKey key) {
-			this.key = key;
-		}
-	}
-
-	public Card getCardtmp() {
-		return cardtmp;
-	}
-
-	public void setCardtmp(Card cardtmp) {
-		this.cardtmp = cardtmp;
-	}
-
-	public PrimaryKey getPrimaryKey() {
-		return primaryKey;
-	}
-
-	public void setPrimaryKey(PrimaryKey primaryKey) {
-		this.primaryKey = primaryKey;
-	}
-}
-

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/CardField.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/CardField.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/CardField.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/CardField.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,64 @@
+//$Id: $
+package org.hibernate.test.annotations.idmanytoone;
+
+import java.io.Serializable;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+import javax.persistence.Embeddable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class CardField {
+
+	@Id
+	private PrimaryKey primaryKey = new PrimaryKey();
+
+	@ManyToOne
+	private Card cardtmp;
+
+	@Embeddable
+	public static class PrimaryKey implements Serializable {
+
+		@ManyToOne(optional = false)
+		private Card card;
+
+		@ManyToOne(optional = false)
+		private CardKey key;
+
+		public Card getCard() {
+			return card;
+		}
+
+		public void setCard(Card card) {
+			this.card = card;
+		}
+
+		public CardKey getKey() {
+			return key;
+		}
+
+		public void setKey(CardKey key) {
+			this.key = key;
+		}
+	}
+
+	public Card getCardtmp() {
+		return cardtmp;
+	}
+
+	public void setCardtmp(Card cardtmp) {
+		this.cardtmp = cardtmp;
+	}
+
+	public PrimaryKey getPrimaryKey() {
+		return primaryKey;
+	}
+
+	public void setPrimaryKey(PrimaryKey primaryKey) {
+		this.primaryKey = primaryKey;
+	}
+}
+

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/CardKey.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/CardKey.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/CardKey.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,24 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.idmanytoone;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.GeneratedValue;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class CardKey {
-	@Id
-	@GeneratedValue
-	private int id;
-
-	public int getId() {
-		return id;
-	}
-
-	public void setId(int id) {
-		this.id = id;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/CardKey.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/CardKey.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/CardKey.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/CardKey.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,24 @@
+//$Id: $
+package org.hibernate.test.annotations.idmanytoone;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class CardKey {
+	@Id
+	@GeneratedValue
+	private int id;
+
+	public int getId() {
+		return id;
+	}
+
+	public void setId(int id) {
+		this.id = id;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/Customer.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/Customer.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/Customer.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,28 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.idmanytoone;
-
-import java.io.Serializable;
-import java.util.Set;
-import javax.persistence.Table;
-import javax.persistence.Entity;
-import javax.persistence.OneToMany;
-import javax.persistence.Id;
-import javax.persistence.GeneratedValue;
-
-/**
- * @author Emmanuel Bernard
- */
-
-
-
- at Entity
- at Table(name = "Bs")
-public class Customer implements Serializable {
-    @Id @GeneratedValue
-	public Integer id;
-
-    @OneToMany(mappedBy = "customer")
-    public Set<StoreCustomer> stores;
-
-    private static final long serialVersionUID = 3818501706063039923L;
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/Customer.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/Customer.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/Customer.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/Customer.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,28 @@
+//$Id: $
+package org.hibernate.test.annotations.idmanytoone;
+
+import java.io.Serializable;
+import java.util.Set;
+import javax.persistence.Table;
+import javax.persistence.Entity;
+import javax.persistence.OneToMany;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+
+/**
+ * @author Emmanuel Bernard
+ */
+
+
+
+ at Entity
+ at Table(name = "Bs")
+public class Customer implements Serializable {
+    @Id @GeneratedValue
+	public Integer id;
+
+    @OneToMany(mappedBy = "customer")
+    public Set<StoreCustomer> stores;
+
+    private static final long serialVersionUID = 3818501706063039923L;
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/IdManyToOne.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/IdManyToOne.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/IdManyToOne.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,72 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.idmanytoone;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-import org.hibernate.test.annotations.TestCase;
-
-/**
- * @author Emmanuel Bernard
- */
-public class IdManyToOne extends TestCase {
-	public void testFkCreationOrdering() throws Exception {
-		//no real test case, the sessionFactory building is tested
-		Session s = openSession();
-		s.close();
-	}
-
-	public void getBiDirOneToManyInId() throws Exception {
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		CardKey key = new CardKey();
-		s.persist( key );
-		Project project = new Project();
-		s.persist( project );
-		Card card = new Card();
-		card.getPrimaryKey().setProject( project );
-		s.persist( card );
-		CardField field = new CardField();
-		field.getPrimaryKey().setKey( key );
-		field.getPrimaryKey().setCard( card );
-		s.persist( field );
-		card.setMainCardField( field );
-		s.flush();
-		s.clear();
-		card = (Card) s.createQuery( "from Card c").list().get(0);
-		assertEquals( 1, card.getFields().size() );
-		assertEquals( card.getMainCardField(), card.getFields().iterator().next() );
-		tx.rollback();
-		s.close();
-	}
-
-	public void testIdClassManyToOne() {
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		Store store = new Store();
-		Customer customer = new Customer();
-		s.persist( store );
-		s.persist( customer );
-		StoreCustomer sc = new StoreCustomer( store, customer );
-		s.persist( sc );
-		s.flush();
-		s.clear();
-
-		store = (Store) s.get(Store.class, store.id );
-		assertEquals( 1, store.customers.size() );
-		assertEquals( customer.id, store.customers.iterator().next().customer.id );
-		tx.rollback();
-		s.close();
-	}
-
-	protected Class[] getMappings() {
-		return new Class[] {
-				Store.class,
-				Customer.class,
-				StoreCustomer.class,
-				CardKey.class,
-				CardField.class,
-				Card.class,
-				Project.class
-		};
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/IdManyToOne.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/IdManyToOne.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/IdManyToOne.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/IdManyToOne.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,72 @@
+//$Id: $
+package org.hibernate.test.annotations.idmanytoone;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class IdManyToOne extends TestCase {
+	public void testFkCreationOrdering() throws Exception {
+		//no real test case, the sessionFactory building is tested
+		Session s = openSession();
+		s.close();
+	}
+
+	public void getBiDirOneToManyInId() throws Exception {
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		CardKey key = new CardKey();
+		s.persist( key );
+		Project project = new Project();
+		s.persist( project );
+		Card card = new Card();
+		card.getPrimaryKey().setProject( project );
+		s.persist( card );
+		CardField field = new CardField();
+		field.getPrimaryKey().setKey( key );
+		field.getPrimaryKey().setCard( card );
+		s.persist( field );
+		card.setMainCardField( field );
+		s.flush();
+		s.clear();
+		card = (Card) s.createQuery( "from Card c").list().get(0);
+		assertEquals( 1, card.getFields().size() );
+		assertEquals( card.getMainCardField(), card.getFields().iterator().next() );
+		tx.rollback();
+		s.close();
+	}
+
+	public void testIdClassManyToOne() {
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		Store store = new Store();
+		Customer customer = new Customer();
+		s.persist( store );
+		s.persist( customer );
+		StoreCustomer sc = new StoreCustomer( store, customer );
+		s.persist( sc );
+		s.flush();
+		s.clear();
+
+		store = (Store) s.get(Store.class, store.id );
+		assertEquals( 1, store.customers.size() );
+		assertEquals( customer.id, store.customers.iterator().next().customer.id );
+		tx.rollback();
+		s.close();
+	}
+
+	protected Class[] getMappings() {
+		return new Class[] {
+				Store.class,
+				Customer.class,
+				StoreCustomer.class,
+				CardKey.class,
+				CardField.class,
+				Card.class,
+				Project.class
+		};
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/Project.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/Project.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/Project.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,25 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.idmanytoone;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.GeneratedValue;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Project {
-
-	@Id
-	@GeneratedValue
-	private int id;
-
-	public int getId() {
-		return id;
-	}
-
-	public void setId(int id) {
-		this.id = id;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/Project.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/Project.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/Project.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/Project.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,25 @@
+//$Id: $
+package org.hibernate.test.annotations.idmanytoone;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Project {
+
+	@Id
+	@GeneratedValue
+	private int id;
+
+	public int getId() {
+		return id;
+	}
+
+	public void setId(int id) {
+		this.id = id;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/Store.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/Store.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/Store.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,27 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.idmanytoone;
-
-import java.io.Serializable;
-import java.util.Set;
-import javax.persistence.Table;
-import javax.persistence.Entity;
-import javax.persistence.OneToMany;
-import javax.persistence.Id;
-import javax.persistence.GeneratedValue;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Table(name = "`As`")
-public class Store implements Serializable {
-    @Id @GeneratedValue
-	public Integer id;
-
-    @OneToMany(mappedBy = "store")
-    public Set<StoreCustomer> customers;
-
-
-    private static final long serialVersionUID = 1748046699322502790L;
-}
-

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/Store.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/Store.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/Store.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/Store.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,27 @@
+//$Id: $
+package org.hibernate.test.annotations.idmanytoone;
+
+import java.io.Serializable;
+import java.util.Set;
+import javax.persistence.Table;
+import javax.persistence.Entity;
+import javax.persistence.OneToMany;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Table(name = "`As`")
+public class Store implements Serializable {
+    @Id @GeneratedValue
+	public Integer id;
+
+    @OneToMany(mappedBy = "store")
+    public Set<StoreCustomer> customers;
+
+
+    private static final long serialVersionUID = 1748046699322502790L;
+}
+

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/StoreCustomer.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/StoreCustomer.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/StoreCustomer.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,38 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.idmanytoone;
-
-import java.io.Serializable;
-import javax.persistence.Id;
-import javax.persistence.Table;
-import javax.persistence.IdClass;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-import javax.persistence.Entity;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Table(name = "ABs")
- at IdClass( StoreCustomerPK.class)
-public class StoreCustomer implements Serializable {
-	StoreCustomer() {}
-	@Id
-    @ManyToOne(optional = false)
-    @JoinColumn(name = "idA")
-    public Store store;
-
-    @Id
-	@ManyToOne(optional = false)
-    @JoinColumn(name = "idB")
-    public Customer customer;
-
-
-    public StoreCustomer(Store store, Customer customer) {
-	this.store = store;
-	this.customer = customer;
-    }
-
-
-    private static final long serialVersionUID = -8295955012787627232L;
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/StoreCustomer.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/StoreCustomer.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/StoreCustomer.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/StoreCustomer.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,38 @@
+//$Id: $
+package org.hibernate.test.annotations.idmanytoone;
+
+import java.io.Serializable;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.IdClass;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Table(name = "ABs")
+ at IdClass( StoreCustomerPK.class)
+public class StoreCustomer implements Serializable {
+	StoreCustomer() {}
+	@Id
+    @ManyToOne(optional = false)
+    @JoinColumn(name = "idA")
+    public Store store;
+
+    @Id
+	@ManyToOne(optional = false)
+    @JoinColumn(name = "idB")
+    public Customer customer;
+
+
+    public StoreCustomer(Store store, Customer customer) {
+	this.store = store;
+	this.customer = customer;
+    }
+
+
+    private static final long serialVersionUID = -8295955012787627232L;
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/StoreCustomerPK.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/StoreCustomerPK.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/StoreCustomerPK.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,32 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.idmanytoone;
-
-import java.io.Serializable;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-import javax.persistence.Id;
-
-/**
- * @author Emmanuel Bernard
- */
-public class StoreCustomerPK implements Serializable {
-	StoreCustomerPK() {}
-	@Id
-    @ManyToOne(optional = false)
-    @JoinColumn(name = "idA")
-    public Store store;
-
-    @Id
-	@ManyToOne(optional = false)
-    @JoinColumn(name = "idB")
-    public Customer customer;
-
-
-    public StoreCustomerPK(Store store, Customer customer) {
-	this.store = store;
-	this.customer = customer;
-    }
-
-
-    private static final long serialVersionUID = -1102111921432271459L;
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/StoreCustomerPK.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/StoreCustomerPK.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/StoreCustomerPK.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/idmanytoone/StoreCustomerPK.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,32 @@
+//$Id: $
+package org.hibernate.test.annotations.idmanytoone;
+
+import java.io.Serializable;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class StoreCustomerPK implements Serializable {
+	StoreCustomerPK() {}
+	@Id
+    @ManyToOne(optional = false)
+    @JoinColumn(name = "idA")
+    public Store store;
+
+    @Id
+	@ManyToOne(optional = false)
+    @JoinColumn(name = "idB")
+    public Customer customer;
+
+
+    public StoreCustomerPK(Store store, Customer customer) {
+	this.store = store;
+	this.customer = customer;
+    }
+
+
+    private static final long serialVersionUID = -1102111921432271459L;
+}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll)

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/AddressBook.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/AddressBook.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/AddressBook.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,75 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.indexcoll;
-
-import java.util.HashMap;
-import java.util.Map;
-import javax.persistence.CascadeType;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.MapKey;
-import javax.persistence.OneToMany;
-import javax.persistence.JoinTable;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class AddressBook {
-	private Integer id;
-	private String owner;
-	private Map<AddressEntryPk, AddressEntry> entries = new HashMap<AddressEntryPk, AddressEntry>();
-	private Map<String, AddressEntry> lastNameEntries = new HashMap<String, AddressEntry>();
-	private Map<AlphabeticalDirectory, AddressEntry> directoryEntries = new HashMap<AlphabeticalDirectory, AddressEntry>();
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getOwner() {
-		return owner;
-	}
-
-	public void setOwner(String owner) {
-		this.owner = owner;
-	}
-
-	@MapKey
-	@OneToMany(mappedBy = "book", cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REMOVE})
-	@JoinTable(name="AddRegEntry")
-	public Map<AddressEntryPk, AddressEntry> getEntries() {
-		return entries;
-	}
-
-	public void setEntries(Map<AddressEntryPk, AddressEntry> entries) {
-		this.entries = entries;
-	}
-
-	@MapKey(name = "person.lastname")
-	@OneToMany(mappedBy = "book")
-	public Map<String, AddressEntry> getLastNameEntries() {
-		return lastNameEntries;
-	}
-
-	public void setLastNameEntries(Map<String, AddressEntry> lastNameEntries) {
-		this.lastNameEntries = lastNameEntries;
-	}
-
-	@MapKey(name = "directory")
-	@OneToMany(mappedBy = "book")
-	@JoinTable(name="Dir_Entry")
-	public Map<AlphabeticalDirectory, AddressEntry> getDirectoryEntries() {
-		return directoryEntries;
-	}
-
-	public void setDirectoryEntries(Map<AlphabeticalDirectory, AddressEntry> directoryEntries) {
-		this.directoryEntries = directoryEntries;
-	}
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/AddressBook.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/AddressBook.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/AddressBook.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/AddressBook.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,75 @@
+//$Id$
+package org.hibernate.test.annotations.indexcoll;
+
+import java.util.HashMap;
+import java.util.Map;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.MapKey;
+import javax.persistence.OneToMany;
+import javax.persistence.JoinTable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class AddressBook {
+	private Integer id;
+	private String owner;
+	private Map<AddressEntryPk, AddressEntry> entries = new HashMap<AddressEntryPk, AddressEntry>();
+	private Map<String, AddressEntry> lastNameEntries = new HashMap<String, AddressEntry>();
+	private Map<AlphabeticalDirectory, AddressEntry> directoryEntries = new HashMap<AlphabeticalDirectory, AddressEntry>();
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getOwner() {
+		return owner;
+	}
+
+	public void setOwner(String owner) {
+		this.owner = owner;
+	}
+
+	@MapKey
+	@OneToMany(mappedBy = "book", cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REMOVE})
+	@JoinTable(name="AddRegEntry")
+	public Map<AddressEntryPk, AddressEntry> getEntries() {
+		return entries;
+	}
+
+	public void setEntries(Map<AddressEntryPk, AddressEntry> entries) {
+		this.entries = entries;
+	}
+
+	@MapKey(name = "person.lastname")
+	@OneToMany(mappedBy = "book")
+	public Map<String, AddressEntry> getLastNameEntries() {
+		return lastNameEntries;
+	}
+
+	public void setLastNameEntries(Map<String, AddressEntry> lastNameEntries) {
+		this.lastNameEntries = lastNameEntries;
+	}
+
+	@MapKey(name = "directory")
+	@OneToMany(mappedBy = "book")
+	@JoinTable(name="Dir_Entry")
+	public Map<AlphabeticalDirectory, AddressEntry> getDirectoryEntries() {
+		return directoryEntries;
+	}
+
+	public void setDirectoryEntries(Map<AlphabeticalDirectory, AddressEntry> directoryEntries) {
+		this.directoryEntries = directoryEntries;
+	}
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/AddressEntry.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/AddressEntry.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/AddressEntry.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,76 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.indexcoll;
-
-import javax.persistence.EmbeddedId;
-import javax.persistence.Entity;
-import javax.persistence.ManyToOne;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class AddressEntry {
-	private AddressEntryPk person;
-	private String street;
-	private String city;
-	private AddressBook book;
-	private AlphabeticalDirectory directory;
-
-	public boolean equals(Object o) {
-		if ( this == o ) return true;
-		if ( !( o instanceof AddressEntry ) ) return false;
-
-		final AddressEntry addressEntry = (AddressEntry) o;
-
-		if ( !person.equals( addressEntry.person ) ) return false;
-
-		return true;
-	}
-
-	public int hashCode() {
-		return person.hashCode();
-	}
-
-	@EmbeddedId
-	public AddressEntryPk getPerson() {
-		return person;
-	}
-
-	public void setPerson(AddressEntryPk person) {
-		this.person = person;
-	}
-
-	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;
-	}
-
-	@ManyToOne
-	public AddressBook getBook() {
-		return book;
-	}
-
-	public void setBook(AddressBook book) {
-		this.book = book;
-	}
-
-	@ManyToOne
-	public AlphabeticalDirectory getDirectory() {
-		return directory;
-	}
-
-	public void setDirectory(AlphabeticalDirectory directory) {
-		this.directory = directory;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/AddressEntry.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/AddressEntry.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/AddressEntry.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/AddressEntry.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,76 @@
+//$Id$
+package org.hibernate.test.annotations.indexcoll;
+
+import javax.persistence.EmbeddedId;
+import javax.persistence.Entity;
+import javax.persistence.ManyToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class AddressEntry {
+	private AddressEntryPk person;
+	private String street;
+	private String city;
+	private AddressBook book;
+	private AlphabeticalDirectory directory;
+
+	public boolean equals(Object o) {
+		if ( this == o ) return true;
+		if ( !( o instanceof AddressEntry ) ) return false;
+
+		final AddressEntry addressEntry = (AddressEntry) o;
+
+		if ( !person.equals( addressEntry.person ) ) return false;
+
+		return true;
+	}
+
+	public int hashCode() {
+		return person.hashCode();
+	}
+
+	@EmbeddedId
+	public AddressEntryPk getPerson() {
+		return person;
+	}
+
+	public void setPerson(AddressEntryPk person) {
+		this.person = person;
+	}
+
+	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;
+	}
+
+	@ManyToOne
+	public AddressBook getBook() {
+		return book;
+	}
+
+	public void setBook(AddressBook book) {
+		this.book = book;
+	}
+
+	@ManyToOne
+	public AlphabeticalDirectory getDirectory() {
+		return directory;
+	}
+
+	public void setDirectory(AlphabeticalDirectory directory) {
+		this.directory = directory;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/AddressEntryPk.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/AddressEntryPk.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/AddressEntryPk.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,57 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.indexcoll;
-
-import java.io.Serializable;
-import javax.persistence.Embeddable;
-
-/**
- * @author Emmanuel Bernard
- */
- at Embeddable
-public class AddressEntryPk implements Serializable {
-	private String firstname;
-	private String lastname;
-
-	public AddressEntryPk() {
-	}
-
-	public AddressEntryPk(String firstname, String lastname) {
-		this.firstname = firstname;
-		this.lastname = lastname;
-	}
-
-	public boolean equals(Object o) {
-		if ( this == o ) return true;
-		if ( !( o instanceof AddressEntryPk ) ) return false;
-
-		final AddressEntryPk addressEntryPk = (AddressEntryPk) o;
-
-		if ( !firstname.equals( addressEntryPk.firstname ) ) return false;
-		if ( !lastname.equals( addressEntryPk.lastname ) ) return false;
-
-		return true;
-	}
-
-	public int hashCode() {
-		int result;
-		result = firstname.hashCode();
-		result = 29 * result + lastname.hashCode();
-		return result;
-	}
-
-	public String getFirstname() {
-		return firstname;
-	}
-
-	public void setFirstname(String firstname) {
-		this.firstname = firstname;
-	}
-
-	public String getLastname() {
-		return lastname;
-	}
-
-	public void setLastname(String lastname) {
-		this.lastname = lastname;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/AddressEntryPk.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/AddressEntryPk.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/AddressEntryPk.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/AddressEntryPk.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,57 @@
+//$Id$
+package org.hibernate.test.annotations.indexcoll;
+
+import java.io.Serializable;
+import javax.persistence.Embeddable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Embeddable
+public class AddressEntryPk implements Serializable {
+	private String firstname;
+	private String lastname;
+
+	public AddressEntryPk() {
+	}
+
+	public AddressEntryPk(String firstname, String lastname) {
+		this.firstname = firstname;
+		this.lastname = lastname;
+	}
+
+	public boolean equals(Object o) {
+		if ( this == o ) return true;
+		if ( !( o instanceof AddressEntryPk ) ) return false;
+
+		final AddressEntryPk addressEntryPk = (AddressEntryPk) o;
+
+		if ( !firstname.equals( addressEntryPk.firstname ) ) return false;
+		if ( !lastname.equals( addressEntryPk.lastname ) ) return false;
+
+		return true;
+	}
+
+	public int hashCode() {
+		int result;
+		result = firstname.hashCode();
+		result = 29 * result + lastname.hashCode();
+		return result;
+	}
+
+	public String getFirstname() {
+		return firstname;
+	}
+
+	public void setFirstname(String firstname) {
+		this.firstname = firstname;
+	}
+
+	public String getLastname() {
+		return lastname;
+	}
+
+	public void setLastname(String lastname) {
+		this.lastname = lastname;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/AlphabeticalDirectory.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/AlphabeticalDirectory.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/AlphabeticalDirectory.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,31 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.indexcoll;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class AlphabeticalDirectory {
-	@Id @GeneratedValue private Integer id;
-	private String name;
-
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/AlphabeticalDirectory.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/AlphabeticalDirectory.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/AlphabeticalDirectory.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/AlphabeticalDirectory.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,31 @@
+//$Id: $
+package org.hibernate.test.annotations.indexcoll;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class AlphabeticalDirectory {
+	@Id @GeneratedValue private Integer id;
+	private String name;
+
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Atmosphere.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Atmosphere.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Atmosphere.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,42 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.indexcoll;
-
-import java.util.HashMap;
-import java.util.Map;
-import javax.persistence.CascadeType;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.ManyToMany;
-import javax.persistence.Column;
-import javax.persistence.JoinTable;
-import javax.persistence.JoinColumn;
-
-import org.hibernate.annotations.MapKey;
-import org.hibernate.annotations.CollectionOfElements;
-import org.hibernate.annotations.MapKeyManyToMany;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Atmosphere {
-	@Id
-	@GeneratedValue
-	public Integer id;
-
-	@ManyToMany(cascade = CascadeType.ALL)
-	@MapKey(columns = {@Column(name="gas_name")})
-	public Map<String, Gas> gases = new HashMap<String, Gas>();
-
-	@ManyToMany(cascade = CascadeType.ALL)
-	@MapKeyManyToMany(joinColumns = @JoinColumn(name="gas_id") )
-	@JoinTable(name = "Gas_per_key")
-	public Map<GasKey, Gas> gasesPerKey = new HashMap<GasKey, Gas>();
-
-	@CollectionOfElements
-	@Column(name="composition_rate")
-	@MapKeyManyToMany(joinColumns = @JoinColumn(name="gas_id"))
-	@JoinTable(name = "Composition", joinColumns = @JoinColumn(name = "atmosphere_id"))
-	public Map<Gas, Double> composition = new HashMap<Gas, Double>();
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Atmosphere.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Atmosphere.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Atmosphere.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Atmosphere.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,42 @@
+//$Id: $
+package org.hibernate.test.annotations.indexcoll;
+
+import java.util.HashMap;
+import java.util.Map;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.ManyToMany;
+import javax.persistence.Column;
+import javax.persistence.JoinTable;
+import javax.persistence.JoinColumn;
+
+import org.hibernate.annotations.MapKey;
+import org.hibernate.annotations.CollectionOfElements;
+import org.hibernate.annotations.MapKeyManyToMany;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Atmosphere {
+	@Id
+	@GeneratedValue
+	public Integer id;
+
+	@ManyToMany(cascade = CascadeType.ALL)
+	@MapKey(columns = {@Column(name="gas_name")})
+	public Map<String, Gas> gases = new HashMap<String, Gas>();
+
+	@ManyToMany(cascade = CascadeType.ALL)
+	@MapKeyManyToMany(joinColumns = @JoinColumn(name="gas_id") )
+	@JoinTable(name = "Gas_per_key")
+	public Map<GasKey, Gas> gasesPerKey = new HashMap<GasKey, Gas>();
+
+	@CollectionOfElements
+	@Column(name="composition_rate")
+	@MapKeyManyToMany(joinColumns = @JoinColumn(name="gas_id"))
+	@JoinTable(name = "Composition", joinColumns = @JoinColumn(name = "atmosphere_id"))
+	public Map<Gas, Double> composition = new HashMap<Gas, Double>();
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Drawer.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Drawer.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Drawer.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,59 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.indexcoll;
-
-import java.util.List;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.OneToMany;
-
-import org.hibernate.annotations.IndexColumn;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Drawer {
-	private Long id;
-	private List<Dress> dresses;
-
-	@Id
-	@GeneratedValue
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-
-	/**
-	 * Unidirectional one to many list
-	 *
-	 * @return
-	 */
-	@OneToMany
-	@IndexColumn(name = "from_bottom_position")
-	public List<Dress> getDresses() {
-		return dresses;
-	}
-
-	public void setDresses(List<Dress> dresses) {
-		this.dresses = dresses;
-	}
-
-	public boolean equals(Object o) {
-		if ( this == o ) return true;
-		if ( !( o instanceof Drawer ) ) return false;
-
-		final Drawer drawer = (Drawer) o;
-
-		if ( !getId().equals( drawer.getId() ) ) return false;
-
-		return true;
-	}
-
-	public int hashCode() {
-		return getId().hashCode();
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Drawer.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Drawer.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Drawer.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Drawer.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,59 @@
+//$Id$
+package org.hibernate.test.annotations.indexcoll;
+
+import java.util.List;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+
+import org.hibernate.annotations.IndexColumn;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Drawer {
+	private Long id;
+	private List<Dress> dresses;
+
+	@Id
+	@GeneratedValue
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	/**
+	 * Unidirectional one to many list
+	 *
+	 * @return
+	 */
+	@OneToMany
+	@IndexColumn(name = "from_bottom_position")
+	public List<Dress> getDresses() {
+		return dresses;
+	}
+
+	public void setDresses(List<Dress> dresses) {
+		this.dresses = dresses;
+	}
+
+	public boolean equals(Object o) {
+		if ( this == o ) return true;
+		if ( !( o instanceof Drawer ) ) return false;
+
+		final Drawer drawer = (Drawer) o;
+
+		if ( !getId().equals( drawer.getId() ) ) return false;
+
+		return true;
+	}
+
+	public int hashCode() {
+		return getId().hashCode();
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Dress.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Dress.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Dress.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,41 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.indexcoll;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Dress {
-	private Integer id;
-
-	@Id
-	@GeneratedValue
-	@Column(name = "dress_id")
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public boolean equals(Object o) {
-		if ( this == o ) return true;
-		if ( !( o instanceof Dress ) ) return false;
-
-		final Dress dress = (Dress) o;
-
-		if ( !getId().equals( dress.getId() ) ) return false;
-
-		return true;
-	}
-
-	public int hashCode() {
-		return getId().hashCode();
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Dress.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Dress.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Dress.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Dress.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,41 @@
+//$Id$
+package org.hibernate.test.annotations.indexcoll;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Dress {
+	private Integer id;
+
+	@Id
+	@GeneratedValue
+	@Column(name = "dress_id")
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public boolean equals(Object o) {
+		if ( this == o ) return true;
+		if ( !( o instanceof Dress ) ) return false;
+
+		final Dress dress = (Dress) o;
+
+		if ( !getId().equals( dress.getId() ) ) return false;
+
+		return true;
+	}
+
+	public int hashCode() {
+		return getId().hashCode();
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Gas.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Gas.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Gas.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,18 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.indexcoll;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Gas {
-	@Id
-	@GeneratedValue
-	public Integer id;
-	public String name;
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Gas.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Gas.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Gas.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Gas.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,18 @@
+//$Id: $
+package org.hibernate.test.annotations.indexcoll;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Gas {
+	@Id
+	@GeneratedValue
+	public Integer id;
+	public String name;
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/GasKey.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/GasKey.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/GasKey.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,21 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.indexcoll;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class GasKey {
-	@Id private String name;
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/GasKey.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/GasKey.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/GasKey.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/GasKey.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,21 @@
+//$Id: $
+package org.hibernate.test.annotations.indexcoll;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class GasKey {
+	@Id private String name;
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Generation.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Generation.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Generation.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,27 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.indexcoll;
-
-import javax.persistence.Embeddable;
-
-/**
- * @author Emmanuel Bernard
- */
- at Embeddable
-public class Generation {
-
-	private String age;
-	private String culture;
-
-	public String getAge() {
-		return age;
-	}
-	public void setAge(String age) {
-		this.age = age;
-	}
-	public String getCulture() {
-		return culture;
-	}
-	public void setCulture(String culture) {
-		this.culture = culture;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Generation.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Generation.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Generation.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Generation.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,27 @@
+//$Id: $
+package org.hibernate.test.annotations.indexcoll;
+
+import javax.persistence.Embeddable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Embeddable
+public class Generation {
+
+	private String age;
+	private String culture;
+
+	public String getAge() {
+		return age;
+	}
+	public void setAge(String age) {
+		this.age = age;
+	}
+	public String getCulture() {
+		return culture;
+	}
+	public void setCulture(String culture) {
+		this.culture = culture;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/GenerationGroup.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/GenerationGroup.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/GenerationGroup.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,37 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.indexcoll;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.GeneratedValue;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class GenerationGroup {
-
-	@Id
-	@GeneratedValue
-	private int id;
-
-	private Generation generation;
-
-	public int getId() {
-		return id;
-	}
-
-	public void setId(int id) {
-		this.id = id;
-	}
-
-	public Generation getGeneration() {
-		return generation;
-	}
-
-	public void setGeneration(Generation generation) {
-		this.generation = generation;
-	}
-
-
-}
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/GenerationGroup.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/GenerationGroup.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/GenerationGroup.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/GenerationGroup.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,37 @@
+//$Id: $
+package org.hibernate.test.annotations.indexcoll;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class GenerationGroup {
+
+	@Id
+	@GeneratedValue
+	private int id;
+
+	private Generation generation;
+
+	public int getId() {
+		return id;
+	}
+
+	public void setId(int id) {
+		this.id = id;
+	}
+
+	public Generation getGeneration() {
+		return generation;
+	}
+
+	public void setGeneration(Generation generation) {
+		this.generation = generation;
+	}
+
+
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/GenerationUser.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/GenerationUser.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/GenerationUser.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,43 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.indexcoll;
-
-import java.util.Map;
-import java.util.HashMap;
-import javax.persistence.OneToMany;
-import javax.persistence.Id;
-import javax.persistence.Entity;
-import javax.persistence.MapKey;
-import javax.persistence.GeneratedValue;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class GenerationUser {
-
-	@Id
-	@GeneratedValue
-	private int id;
-
-	@OneToMany
-	@MapKey(name="generation")
-	private Map<Generation, GenerationGroup> ref = new HashMap<Generation, GenerationGroup>();
-
-	public int getId() {
-		return id;
-	}
-
-	public void setId(int id) {
-		this.id = id;
-	}
-
-	public Map<Generation, GenerationGroup> getRef() {
-		return ref;
-	}
-
-	public void setRef(Map<Generation, GenerationGroup> ref) {
-		this.ref = ref;
-	}
-
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/GenerationUser.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/GenerationUser.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/GenerationUser.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/GenerationUser.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,43 @@
+//$Id: $
+package org.hibernate.test.annotations.indexcoll;
+
+import java.util.Map;
+import java.util.HashMap;
+import javax.persistence.OneToMany;
+import javax.persistence.Id;
+import javax.persistence.Entity;
+import javax.persistence.MapKey;
+import javax.persistence.GeneratedValue;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class GenerationUser {
+
+	@Id
+	@GeneratedValue
+	private int id;
+
+	@OneToMany
+	@MapKey(name="generation")
+	private Map<Generation, GenerationGroup> ref = new HashMap<Generation, GenerationGroup>();
+
+	public int getId() {
+		return id;
+	}
+
+	public void setId(int id) {
+		this.id = id;
+	}
+
+	public Map<Generation, GenerationGroup> getRef() {
+		return ref;
+	}
+
+	public void setRef(Map<Generation, GenerationGroup> ref) {
+		this.ref = ref;
+	}
+
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/IndexedCollectionTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/IndexedCollectionTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/IndexedCollectionTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,546 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.indexcoll;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-import org.hibernate.Hibernate;
-import org.hibernate.test.annotations.TestCase;
-
-/**
- * Test index collections
- *
- * @author Emmanuel Bernard
- */
-public class IndexedCollectionTest extends TestCase {
-	public void testFkList() throws Exception {
-		Wardrobe w = new Wardrobe();
-		Drawer d1 = new Drawer();
-		Drawer d2 = new Drawer();
-		w.setDrawers( new ArrayList<Drawer>() );
-		w.getDrawers().add( d1 );
-		w.getDrawers().add( d2 );
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		s.persist( w );
-
-		s.flush();
-		s.clear();
-
-		w = (Wardrobe) s.get( Wardrobe.class, w.getId() );
-		assertNotNull( w );
-		assertNotNull( w.getDrawers() );
-		List<Drawer> result = w.getDrawers();
-		assertEquals( 2, result.size() );
-		assertEquals( d2.getId(), result.get( 1 ).getId() );
-		result.remove( d1 );
-		s.flush();
-		d1 = (Drawer) s.merge( d1 );
-		result.add( d1 );
-
-		s.flush();
-		s.clear();
-
-		w = (Wardrobe) s.get( Wardrobe.class, w.getId() );
-		assertNotNull( w );
-		assertNotNull( w.getDrawers() );
-		result = w.getDrawers();
-		assertEquals( 2, result.size() );
-		assertEquals( d1.getId(), result.get( 1 ).getId() );
-		s.delete( result.get( 0 ) );
-		s.delete( result.get( 1 ) );
-		s.delete( w );
-		s.flush();
-		tx.rollback();
-		s.close();
-	}
-
-	public void testJoinedTableList() throws Exception {
-		Wardrobe w = new Wardrobe();
-		w.setDrawers( new ArrayList<Drawer>() );
-		Drawer d = new Drawer();
-		w.getDrawers().add( d );
-		Dress d1 = new Dress();
-		Dress d2 = new Dress();
-		d.setDresses( new ArrayList<Dress>() );
-		d.getDresses().add( d1 );
-		d.getDresses().add( d2 );
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		s.persist( d1 );
-		s.persist( d2 );
-		s.persist( w );
-
-		s.flush();
-		s.clear();
-
-		d = (Drawer) s.get( Drawer.class, d.getId() );
-		assertNotNull( d );
-		assertNotNull( d.getDresses() );
-		List<Dress> result = d.getDresses();
-		assertEquals( 2, result.size() );
-		assertEquals( d2.getId(), result.get( 1 ).getId() );
-		result.remove( d1 );
-		s.flush();
-		d1 = (Dress) s.merge( d1 );
-		result.add( d1 );
-
-		s.flush();
-		s.clear();
-
-		d = (Drawer) s.get( Drawer.class, d.getId() );
-		assertNotNull( d );
-		assertNotNull( d.getDresses() );
-		result = d.getDresses();
-		assertEquals( 2, result.size() );
-		assertEquals( d1.getId(), result.get( 1 ).getId() );
-		s.delete( result.get( 0 ) );
-		s.delete( result.get( 1 ) );
-		s.delete( d );
-		s.flush();
-		tx.rollback();
-		s.close();
-	}
-
-	public void testMapKey() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		Software hibernate = new Software();
-		hibernate.setName( "Hibernate" );
-		Version v1 = new Version();
-		v1.setCodeName( "HumbaHumba" );
-		v1.setNumber( "1.0" );
-		v1.setSoftware( hibernate );
-		Version v2 = new Version();
-		v2.setCodeName( "Copacabana" );
-		v2.setNumber( "2.0" );
-		v2.setSoftware( hibernate );
-		Version v4 = new Version();
-		v4.setCodeName( "Dreamland" );
-		v4.setNumber( "4.0" );
-		v4.setSoftware( hibernate );
-		Map<String, Version> link = new HashMap<String, Version>();
-		link.put( v1.getCodeName(), v1 );
-		link.put( v2.getCodeName(), v2 );
-		link.put( v4.getCodeName(), v4 );
-		hibernate.setVersions( link );
-		s.persist( hibernate );
-		s.persist( v1 );
-		s.persist( v2 );
-		s.persist( v4 );
-
-		s.flush();
-		s.clear();
-
-		hibernate = (Software) s.get( Software.class, "Hibernate" );
-		assertEquals( 3, hibernate.getVersions().size() );
-		assertEquals( "1.0", hibernate.getVersions().get( "HumbaHumba" ).getNumber() );
-		assertEquals( "2.0", hibernate.getVersions().get( "Copacabana" ).getNumber() );
-		hibernate.getVersions().remove( v4.getCodeName() );
-
-		s.flush();
-		s.clear();
-
-		hibernate = (Software) s.get( Software.class, "Hibernate" );
-		assertEquals( "So effect on collection changes", 3, hibernate.getVersions().size() );
-		for ( Version v : hibernate.getVersions().values() ) {
-			s.delete( v );
-		}
-		s.delete( hibernate );
-
-		s.flush();
-
-		tx.rollback();
-		s.close();
-	}
-
-	public void testDefaultMapKey() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		AddressBook book = new AddressBook();
-		book.setOwner( "Emmanuel" );
-		AddressEntryPk helene = new AddressEntryPk( "Helene", "Michau" );
-		AddressEntry heleneEntry = new AddressEntry();
-		heleneEntry.setBook( book );
-		heleneEntry.setCity( "Levallois" );
-		heleneEntry.setStreet( "Louis Blanc" );
-		heleneEntry.setPerson( helene );
-		AddressEntryPk primeMinister = new AddressEntryPk( "Dominique", "Villepin" );
-		AddressEntry primeMinisterEntry = new AddressEntry();
-		primeMinisterEntry.setBook( book );
-		primeMinisterEntry.setCity( "Paris" );
-		primeMinisterEntry.setStreet( "Hotel Matignon" );
-		primeMinisterEntry.setPerson( primeMinister );
-		book.getEntries().put( helene, heleneEntry );
-		book.getEntries().put( primeMinister, primeMinisterEntry );
-		s.persist( book );
-
-		s.flush();
-		s.clear();
-
-		book = (AddressBook) s.get( AddressBook.class, book.getId() );
-		assertEquals( 2, book.getEntries().size() );
-		assertEquals( heleneEntry.getCity(), book.getEntries().get( helene ).getCity() );
-		AddressEntryPk fake = new AddressEntryPk( "Fake", "Fake" );
-		book.getEntries().put( fake, primeMinisterEntry );
-
-		s.flush();
-		s.clear();
-
-		book = (AddressBook) s.get( AddressBook.class, book.getId() );
-		assertEquals( 2, book.getEntries().size() );
-		assertNull( book.getEntries().get( fake ) );
-		s.delete( book );
-
-		s.flush();
-		tx.rollback();
-		s.close();
-	}
-
-	public void testMapKeyToEntity() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		AlphabeticalDirectory m = new AlphabeticalDirectory();
-		m.setName( "M" );
-		AlphabeticalDirectory v = new AlphabeticalDirectory();
-		v.setName( "V" );
-		s.persist( m );
-		s.persist( v );
-
-		AddressBook book = new AddressBook();
-		book.setOwner( "Emmanuel" );
-		AddressEntryPk helene = new AddressEntryPk( "Helene", "Michau" );
-		AddressEntry heleneEntry = new AddressEntry();
-		heleneEntry.setBook( book );
-		heleneEntry.setCity( "Levallois" );
-		heleneEntry.setStreet( "Louis Blanc" );
-		heleneEntry.setPerson( helene );
-		heleneEntry.setDirectory( m );
-		AddressEntryPk primeMinister = new AddressEntryPk( "Dominique", "Villepin" );
-		AddressEntry primeMinisterEntry = new AddressEntry();
-		primeMinisterEntry.setBook( book );
-		primeMinisterEntry.setCity( "Paris" );
-		primeMinisterEntry.setStreet( "Hotel Matignon" );
-		primeMinisterEntry.setPerson( primeMinister );
-		primeMinisterEntry.setDirectory( v );
-		book.getEntries().put( helene, heleneEntry );
-		book.getEntries().put( primeMinister, primeMinisterEntry );
-		s.persist( book );
-
-		s.flush();
-		s.clear();
-
-		book = (AddressBook) s.get( AddressBook.class, book.getId() );
-		assertEquals( 2, book.getEntries().size() );
-		assertEquals( heleneEntry.getCity(), book.getEntries().get( helene ).getCity() );
-		assertEquals( "M", book.getEntries().get( helene ).getDirectory().getName() );
-
-		s.delete( book );
-		tx.rollback();
-		s.close();
-	}
-
-	public void testComponentSubPropertyMapKey() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		AddressBook book = new AddressBook();
-		book.setOwner( "Emmanuel" );
-		AddressEntryPk helene = new AddressEntryPk( "Helene", "Michau" );
-		AddressEntry heleneEntry = new AddressEntry();
-		heleneEntry.setBook( book );
-		heleneEntry.setCity( "Levallois" );
-		heleneEntry.setStreet( "Louis Blanc" );
-		heleneEntry.setPerson( helene );
-		AddressEntryPk primeMinister = new AddressEntryPk( "Dominique", "Villepin" );
-		AddressEntry primeMinisterEntry = new AddressEntry();
-		primeMinisterEntry.setBook( book );
-		primeMinisterEntry.setCity( "Paris" );
-		primeMinisterEntry.setStreet( "Hotel Matignon" );
-		primeMinisterEntry.setPerson( primeMinister );
-		book.getEntries().put( helene, heleneEntry );
-		book.getEntries().put( primeMinister, primeMinisterEntry );
-		s.persist( book );
-
-		s.flush();
-		s.clear();
-
-		book = (AddressBook) s.get( AddressBook.class, book.getId() );
-		assertEquals( 2, book.getLastNameEntries().size() );
-		assertEquals( heleneEntry.getCity(), book.getLastNameEntries().get( "Michau" ).getCity() );
-		AddressEntryPk fake = new AddressEntryPk( "Fake", "Fake" );
-		book.getEntries().put( fake, primeMinisterEntry );
-
-		s.flush();
-		s.clear();
-
-		book = (AddressBook) s.get( AddressBook.class, book.getId() );
-		assertEquals( 2, book.getEntries().size() );
-		assertNull( book.getEntries().get( fake ) );
-		s.delete( book );
-		tx.rollback();
-		s.close();
-	}
-
-	public void testMapKeyOnManyToMany() throws Exception {
-		Session s;
-		s = openSession();
-		s.getTransaction().begin();
-		News airplane = new News();
-		airplane.setTitle( "Crash!" );
-		airplane.setDetail( "An airplaned crashed." );
-		s.persist( airplane );
-		Newspaper lemonde = new Newspaper();
-		lemonde.setName( "Lemonde" );
-		lemonde.getNews().put( airplane.getTitle(), airplane );
-		s.persist( lemonde );
-
-		s.flush();
-		s.clear();
-
-		lemonde = (Newspaper) s.get( Newspaper.class, lemonde.getId() );
-		assertEquals( 1, lemonde.getNews().size() );
-		News news = lemonde.getNews().get( airplane.getTitle() );
-		assertNotNull( news );
-		assertEquals( airplane.getTitle(), news.getTitle() );
-		s.delete( lemonde );
-		s.delete( news );
-
-		s.getTransaction().rollback();
-		s.close();
-	}
-
-	public void testMapKeyOnManyToManyOnId() throws Exception {
-		Session s;
-		s = openSession();
-		s.getTransaction().begin();
-		News hibernate1 = new News();
-		hibernate1.setTitle( "#1 ORM solution in the Java world" );
-		hibernate1.setDetail( "Well, that's no news ;-)" );
-		s.persist( hibernate1 );
-		PressReleaseAgency schwartz = new PressReleaseAgency();
-		schwartz.setName( "Schwartz" );
-		schwartz.getProvidedNews().put( hibernate1.getId(), hibernate1 );
-		s.persist( schwartz );
-
-		s.flush();
-		s.clear();
-
-		schwartz = (PressReleaseAgency) s.get( PressReleaseAgency.class, schwartz.getId() );
-		assertEquals( 1, schwartz.getProvidedNews().size() );
-		News news = schwartz.getProvidedNews().get( hibernate1.getId() );
-		assertNotNull( news );
-		assertEquals( hibernate1.getTitle(), news.getTitle() );
-		s.delete( schwartz );
-		s.delete( news );
-
-		s.getTransaction().rollback();
-		s.close();
-	}
-
-	public void testMapKeyAndIdClass() throws Exception {
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		Painter picasso = new Painter();
-		Painting laVie = new Painting( "La Vie", "Picasso", 50, 20 );
-		picasso.getPaintings().put( "La Vie", laVie );
-		Painting famille = new Painting( "La Famille du Saltimbanque", "Picasso", 50, 20 );
-		picasso.getPaintings().put( "La Famille du Saltimbanque", famille );
-		s.persist( picasso );
-
-		s.flush();
-		s.clear();
-
-		picasso = (Painter) s.get( Painter.class, picasso.getId() );
-		Painting painting = picasso.getPaintings().get( famille.getName() );
-		assertNotNull( painting );
-		assertEquals( painting.getName(), famille.getName() );
-		s.delete( picasso );
-		tx.rollback();
-		s.close();
-	}
-
-	public void testRealMap() throws Exception {
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		Atmosphere atm = new Atmosphere();
-		Atmosphere atm2 = new Atmosphere();
-		GasKey key = new GasKey();
-		key.setName( "O2" );
-		Gas o2 = new Gas();
-		o2.name = "oxygen";
-		atm.gases.put( "100%", o2 );
-		atm.gasesPerKey.put( key, o2 );
-		atm2.gases.put( "100%", o2 );
-		atm2.gasesPerKey.put( key, o2 );
-		s.persist( key );
-		s.persist( atm );
-		s.persist( atm2 );
-
-		s.flush();
-		s.clear();
-
-		atm = (Atmosphere) s.get( Atmosphere.class, atm.id );
-		key = (GasKey) s.get( GasKey.class, key.getName() );
-		assertEquals( 1, atm.gases.size() );
-		assertEquals( o2.name, atm.gases.get( "100%" ).name );
-		assertEquals( o2.name, atm.gasesPerKey.get( key ).name );
-		tx.rollback();
-		s.close();
-	}
-
-	public void testMapKeyEntityEntity() throws Exception {
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		AddressBook book = new AddressBook();
-		s.persist( book );
-		AddressEntry entry = new AddressEntry();
-		entry.setCity( "Atlanta");
-		AddressEntryPk pk = new AddressEntryPk("Coca", "Cola" );
-		entry.setPerson( pk );
-		entry.setBook( book );
-		AlphabeticalDirectory ad = new AlphabeticalDirectory();
-		ad.setName( "C");
-		s.persist( ad );
-		entry.setDirectory( ad );
-		s.persist( entry );
-		book.getDirectoryEntries().put( ad, entry );
-
-		s.flush();
-		s.clear();
-
-		book = (AddressBook) s.get( AddressBook.class, book.getId() );
-		assertEquals( 1, book.getDirectoryEntries().size() );
-		assertEquals( "C", book.getDirectoryEntries().keySet().iterator().next().getName() );
-		tx.rollback();
-		s.close();
-	}
-
-	public void testEntityKeyElementTarget() throws Exception {
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		Atmosphere atm = new Atmosphere();
-		Gas o2 = new Gas();
-		o2.name = "oxygen";
-		atm.composition.put( o2, 94.3 );
-		s.persist( o2 );
-		s.persist( atm );
-
-		s.flush();
-		s.clear();
-
-		atm = (Atmosphere) s.get( Atmosphere.class, atm.id );
-		assertTrue( ! Hibernate.isInitialized( atm.composition ) );
-		assertEquals( 1, atm.composition.size() );
-		assertEquals( o2.name, atm.composition.keySet().iterator().next().name );
-		tx.rollback();
-		s.close();
-	}
-
-	public void testSortedMap() {
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		Training training = new Training();
-		Trainee trainee = new Trainee();
-		trainee.setName( "Jim" );
-		Trainee trainee2 = new Trainee();
-		trainee2.setName( "Emmanuel" );
-		s.persist( trainee );
-		s.persist( trainee2 );
-		training.getTrainees().put( "Jim", trainee );
-		training.getTrainees().put( "Emmanuel", trainee2 );
-		s.persist( training );
-
-		s.flush();
-		s.clear();
-
-		training = (Training) s.get( Training.class, training.getId() );
-		assertEquals( "Emmanuel", training.getTrainees().firstKey() );
-		assertEquals( "Jim", training.getTrainees().lastKey() );
-		tx.rollback();
-		s.close();
-	}
-
-	public void testMapKeyLoad() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		Software hibernate = new Software();
-		hibernate.setName( "Hibernate" );
-		Version v1 = new Version();
-		v1.setCodeName( "HumbaHumba" );
-		v1.setNumber( "1.0" );
-		v1.setSoftware( hibernate );
-		hibernate.addVersion( v1 );
-		s.persist( hibernate );
-		s.persist( v1 );
-
-		s.flush();
-		s.clear();
-
-		hibernate = (Software) s.get( Software.class, "Hibernate" );
-		assertEquals(1, hibernate.getVersions().size() );
-		Version v2 = new Version();
-		v2.setCodeName( "HumbaHumba2" );
-		v2.setNumber( "2.0" );
-		v2.setSoftware( hibernate );
-		hibernate.addVersion( v2 );
-		assertEquals( "One loaded persisted version, and one just added", 2, hibernate.getVersions().size() );
-
-		s.flush();
-		s.clear();
-
-		hibernate = (Software) s.get( Software.class, "Hibernate" );
-		for ( Version v : hibernate.getVersions().values() ) {
-			s.delete( v );
-		}
-		s.delete( hibernate );
-		tx.rollback();
-		s.close();
-	}
-
-
-	public IndexedCollectionTest(String x) {
-		super( x );
-	}
-
-	protected Class[] getMappings() {
-		return new Class[]{
-				Wardrobe.class,
-				Drawer.class,
-				Dress.class,
-				Software.class,
-				Version.class,
-				AddressBook.class,
-				AddressEntry.class,
-				AddressEntryPk.class, //should be silently ignored
-				Newspaper.class,
-				News.class,
-				PressReleaseAgency.class,
-				Painter.class,
-				Painting.class,
-				Atmosphere.class,
-				Gas.class,
-				AlphabeticalDirectory.class,
-				GasKey.class,
-				Trainee.class,
-				Training.class
-		};
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/IndexedCollectionTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/IndexedCollectionTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/IndexedCollectionTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/IndexedCollectionTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,546 @@
+//$Id$
+package org.hibernate.test.annotations.indexcoll;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.Hibernate;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * Test index collections
+ *
+ * @author Emmanuel Bernard
+ */
+public class IndexedCollectionTest extends TestCase {
+	public void testFkList() throws Exception {
+		Wardrobe w = new Wardrobe();
+		Drawer d1 = new Drawer();
+		Drawer d2 = new Drawer();
+		w.setDrawers( new ArrayList<Drawer>() );
+		w.getDrawers().add( d1 );
+		w.getDrawers().add( d2 );
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		s.persist( w );
+
+		s.flush();
+		s.clear();
+
+		w = (Wardrobe) s.get( Wardrobe.class, w.getId() );
+		assertNotNull( w );
+		assertNotNull( w.getDrawers() );
+		List<Drawer> result = w.getDrawers();
+		assertEquals( 2, result.size() );
+		assertEquals( d2.getId(), result.get( 1 ).getId() );
+		result.remove( d1 );
+		s.flush();
+		d1 = (Drawer) s.merge( d1 );
+		result.add( d1 );
+
+		s.flush();
+		s.clear();
+
+		w = (Wardrobe) s.get( Wardrobe.class, w.getId() );
+		assertNotNull( w );
+		assertNotNull( w.getDrawers() );
+		result = w.getDrawers();
+		assertEquals( 2, result.size() );
+		assertEquals( d1.getId(), result.get( 1 ).getId() );
+		s.delete( result.get( 0 ) );
+		s.delete( result.get( 1 ) );
+		s.delete( w );
+		s.flush();
+		tx.rollback();
+		s.close();
+	}
+
+	public void testJoinedTableList() throws Exception {
+		Wardrobe w = new Wardrobe();
+		w.setDrawers( new ArrayList<Drawer>() );
+		Drawer d = new Drawer();
+		w.getDrawers().add( d );
+		Dress d1 = new Dress();
+		Dress d2 = new Dress();
+		d.setDresses( new ArrayList<Dress>() );
+		d.getDresses().add( d1 );
+		d.getDresses().add( d2 );
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		s.persist( d1 );
+		s.persist( d2 );
+		s.persist( w );
+
+		s.flush();
+		s.clear();
+
+		d = (Drawer) s.get( Drawer.class, d.getId() );
+		assertNotNull( d );
+		assertNotNull( d.getDresses() );
+		List<Dress> result = d.getDresses();
+		assertEquals( 2, result.size() );
+		assertEquals( d2.getId(), result.get( 1 ).getId() );
+		result.remove( d1 );
+		s.flush();
+		d1 = (Dress) s.merge( d1 );
+		result.add( d1 );
+
+		s.flush();
+		s.clear();
+
+		d = (Drawer) s.get( Drawer.class, d.getId() );
+		assertNotNull( d );
+		assertNotNull( d.getDresses() );
+		result = d.getDresses();
+		assertEquals( 2, result.size() );
+		assertEquals( d1.getId(), result.get( 1 ).getId() );
+		s.delete( result.get( 0 ) );
+		s.delete( result.get( 1 ) );
+		s.delete( d );
+		s.flush();
+		tx.rollback();
+		s.close();
+	}
+
+	public void testMapKey() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		Software hibernate = new Software();
+		hibernate.setName( "Hibernate" );
+		Version v1 = new Version();
+		v1.setCodeName( "HumbaHumba" );
+		v1.setNumber( "1.0" );
+		v1.setSoftware( hibernate );
+		Version v2 = new Version();
+		v2.setCodeName( "Copacabana" );
+		v2.setNumber( "2.0" );
+		v2.setSoftware( hibernate );
+		Version v4 = new Version();
+		v4.setCodeName( "Dreamland" );
+		v4.setNumber( "4.0" );
+		v4.setSoftware( hibernate );
+		Map<String, Version> link = new HashMap<String, Version>();
+		link.put( v1.getCodeName(), v1 );
+		link.put( v2.getCodeName(), v2 );
+		link.put( v4.getCodeName(), v4 );
+		hibernate.setVersions( link );
+		s.persist( hibernate );
+		s.persist( v1 );
+		s.persist( v2 );
+		s.persist( v4 );
+
+		s.flush();
+		s.clear();
+
+		hibernate = (Software) s.get( Software.class, "Hibernate" );
+		assertEquals( 3, hibernate.getVersions().size() );
+		assertEquals( "1.0", hibernate.getVersions().get( "HumbaHumba" ).getNumber() );
+		assertEquals( "2.0", hibernate.getVersions().get( "Copacabana" ).getNumber() );
+		hibernate.getVersions().remove( v4.getCodeName() );
+
+		s.flush();
+		s.clear();
+
+		hibernate = (Software) s.get( Software.class, "Hibernate" );
+		assertEquals( "So effect on collection changes", 3, hibernate.getVersions().size() );
+		for ( Version v : hibernate.getVersions().values() ) {
+			s.delete( v );
+		}
+		s.delete( hibernate );
+
+		s.flush();
+
+		tx.rollback();
+		s.close();
+	}
+
+	public void testDefaultMapKey() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		AddressBook book = new AddressBook();
+		book.setOwner( "Emmanuel" );
+		AddressEntryPk helene = new AddressEntryPk( "Helene", "Michau" );
+		AddressEntry heleneEntry = new AddressEntry();
+		heleneEntry.setBook( book );
+		heleneEntry.setCity( "Levallois" );
+		heleneEntry.setStreet( "Louis Blanc" );
+		heleneEntry.setPerson( helene );
+		AddressEntryPk primeMinister = new AddressEntryPk( "Dominique", "Villepin" );
+		AddressEntry primeMinisterEntry = new AddressEntry();
+		primeMinisterEntry.setBook( book );
+		primeMinisterEntry.setCity( "Paris" );
+		primeMinisterEntry.setStreet( "Hotel Matignon" );
+		primeMinisterEntry.setPerson( primeMinister );
+		book.getEntries().put( helene, heleneEntry );
+		book.getEntries().put( primeMinister, primeMinisterEntry );
+		s.persist( book );
+
+		s.flush();
+		s.clear();
+
+		book = (AddressBook) s.get( AddressBook.class, book.getId() );
+		assertEquals( 2, book.getEntries().size() );
+		assertEquals( heleneEntry.getCity(), book.getEntries().get( helene ).getCity() );
+		AddressEntryPk fake = new AddressEntryPk( "Fake", "Fake" );
+		book.getEntries().put( fake, primeMinisterEntry );
+
+		s.flush();
+		s.clear();
+
+		book = (AddressBook) s.get( AddressBook.class, book.getId() );
+		assertEquals( 2, book.getEntries().size() );
+		assertNull( book.getEntries().get( fake ) );
+		s.delete( book );
+
+		s.flush();
+		tx.rollback();
+		s.close();
+	}
+
+	public void testMapKeyToEntity() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		AlphabeticalDirectory m = new AlphabeticalDirectory();
+		m.setName( "M" );
+		AlphabeticalDirectory v = new AlphabeticalDirectory();
+		v.setName( "V" );
+		s.persist( m );
+		s.persist( v );
+
+		AddressBook book = new AddressBook();
+		book.setOwner( "Emmanuel" );
+		AddressEntryPk helene = new AddressEntryPk( "Helene", "Michau" );
+		AddressEntry heleneEntry = new AddressEntry();
+		heleneEntry.setBook( book );
+		heleneEntry.setCity( "Levallois" );
+		heleneEntry.setStreet( "Louis Blanc" );
+		heleneEntry.setPerson( helene );
+		heleneEntry.setDirectory( m );
+		AddressEntryPk primeMinister = new AddressEntryPk( "Dominique", "Villepin" );
+		AddressEntry primeMinisterEntry = new AddressEntry();
+		primeMinisterEntry.setBook( book );
+		primeMinisterEntry.setCity( "Paris" );
+		primeMinisterEntry.setStreet( "Hotel Matignon" );
+		primeMinisterEntry.setPerson( primeMinister );
+		primeMinisterEntry.setDirectory( v );
+		book.getEntries().put( helene, heleneEntry );
+		book.getEntries().put( primeMinister, primeMinisterEntry );
+		s.persist( book );
+
+		s.flush();
+		s.clear();
+
+		book = (AddressBook) s.get( AddressBook.class, book.getId() );
+		assertEquals( 2, book.getEntries().size() );
+		assertEquals( heleneEntry.getCity(), book.getEntries().get( helene ).getCity() );
+		assertEquals( "M", book.getEntries().get( helene ).getDirectory().getName() );
+
+		s.delete( book );
+		tx.rollback();
+		s.close();
+	}
+
+	public void testComponentSubPropertyMapKey() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		AddressBook book = new AddressBook();
+		book.setOwner( "Emmanuel" );
+		AddressEntryPk helene = new AddressEntryPk( "Helene", "Michau" );
+		AddressEntry heleneEntry = new AddressEntry();
+		heleneEntry.setBook( book );
+		heleneEntry.setCity( "Levallois" );
+		heleneEntry.setStreet( "Louis Blanc" );
+		heleneEntry.setPerson( helene );
+		AddressEntryPk primeMinister = new AddressEntryPk( "Dominique", "Villepin" );
+		AddressEntry primeMinisterEntry = new AddressEntry();
+		primeMinisterEntry.setBook( book );
+		primeMinisterEntry.setCity( "Paris" );
+		primeMinisterEntry.setStreet( "Hotel Matignon" );
+		primeMinisterEntry.setPerson( primeMinister );
+		book.getEntries().put( helene, heleneEntry );
+		book.getEntries().put( primeMinister, primeMinisterEntry );
+		s.persist( book );
+
+		s.flush();
+		s.clear();
+
+		book = (AddressBook) s.get( AddressBook.class, book.getId() );
+		assertEquals( 2, book.getLastNameEntries().size() );
+		assertEquals( heleneEntry.getCity(), book.getLastNameEntries().get( "Michau" ).getCity() );
+		AddressEntryPk fake = new AddressEntryPk( "Fake", "Fake" );
+		book.getEntries().put( fake, primeMinisterEntry );
+
+		s.flush();
+		s.clear();
+
+		book = (AddressBook) s.get( AddressBook.class, book.getId() );
+		assertEquals( 2, book.getEntries().size() );
+		assertNull( book.getEntries().get( fake ) );
+		s.delete( book );
+		tx.rollback();
+		s.close();
+	}
+
+	public void testMapKeyOnManyToMany() throws Exception {
+		Session s;
+		s = openSession();
+		s.getTransaction().begin();
+		News airplane = new News();
+		airplane.setTitle( "Crash!" );
+		airplane.setDetail( "An airplaned crashed." );
+		s.persist( airplane );
+		Newspaper lemonde = new Newspaper();
+		lemonde.setName( "Lemonde" );
+		lemonde.getNews().put( airplane.getTitle(), airplane );
+		s.persist( lemonde );
+
+		s.flush();
+		s.clear();
+
+		lemonde = (Newspaper) s.get( Newspaper.class, lemonde.getId() );
+		assertEquals( 1, lemonde.getNews().size() );
+		News news = lemonde.getNews().get( airplane.getTitle() );
+		assertNotNull( news );
+		assertEquals( airplane.getTitle(), news.getTitle() );
+		s.delete( lemonde );
+		s.delete( news );
+
+		s.getTransaction().rollback();
+		s.close();
+	}
+
+	public void testMapKeyOnManyToManyOnId() throws Exception {
+		Session s;
+		s = openSession();
+		s.getTransaction().begin();
+		News hibernate1 = new News();
+		hibernate1.setTitle( "#1 ORM solution in the Java world" );
+		hibernate1.setDetail( "Well, that's no news ;-)" );
+		s.persist( hibernate1 );
+		PressReleaseAgency schwartz = new PressReleaseAgency();
+		schwartz.setName( "Schwartz" );
+		schwartz.getProvidedNews().put( hibernate1.getId(), hibernate1 );
+		s.persist( schwartz );
+
+		s.flush();
+		s.clear();
+
+		schwartz = (PressReleaseAgency) s.get( PressReleaseAgency.class, schwartz.getId() );
+		assertEquals( 1, schwartz.getProvidedNews().size() );
+		News news = schwartz.getProvidedNews().get( hibernate1.getId() );
+		assertNotNull( news );
+		assertEquals( hibernate1.getTitle(), news.getTitle() );
+		s.delete( schwartz );
+		s.delete( news );
+
+		s.getTransaction().rollback();
+		s.close();
+	}
+
+	public void testMapKeyAndIdClass() throws Exception {
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		Painter picasso = new Painter();
+		Painting laVie = new Painting( "La Vie", "Picasso", 50, 20 );
+		picasso.getPaintings().put( "La Vie", laVie );
+		Painting famille = new Painting( "La Famille du Saltimbanque", "Picasso", 50, 20 );
+		picasso.getPaintings().put( "La Famille du Saltimbanque", famille );
+		s.persist( picasso );
+
+		s.flush();
+		s.clear();
+
+		picasso = (Painter) s.get( Painter.class, picasso.getId() );
+		Painting painting = picasso.getPaintings().get( famille.getName() );
+		assertNotNull( painting );
+		assertEquals( painting.getName(), famille.getName() );
+		s.delete( picasso );
+		tx.rollback();
+		s.close();
+	}
+
+	public void testRealMap() throws Exception {
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		Atmosphere atm = new Atmosphere();
+		Atmosphere atm2 = new Atmosphere();
+		GasKey key = new GasKey();
+		key.setName( "O2" );
+		Gas o2 = new Gas();
+		o2.name = "oxygen";
+		atm.gases.put( "100%", o2 );
+		atm.gasesPerKey.put( key, o2 );
+		atm2.gases.put( "100%", o2 );
+		atm2.gasesPerKey.put( key, o2 );
+		s.persist( key );
+		s.persist( atm );
+		s.persist( atm2 );
+
+		s.flush();
+		s.clear();
+
+		atm = (Atmosphere) s.get( Atmosphere.class, atm.id );
+		key = (GasKey) s.get( GasKey.class, key.getName() );
+		assertEquals( 1, atm.gases.size() );
+		assertEquals( o2.name, atm.gases.get( "100%" ).name );
+		assertEquals( o2.name, atm.gasesPerKey.get( key ).name );
+		tx.rollback();
+		s.close();
+	}
+
+	public void testMapKeyEntityEntity() throws Exception {
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		AddressBook book = new AddressBook();
+		s.persist( book );
+		AddressEntry entry = new AddressEntry();
+		entry.setCity( "Atlanta");
+		AddressEntryPk pk = new AddressEntryPk("Coca", "Cola" );
+		entry.setPerson( pk );
+		entry.setBook( book );
+		AlphabeticalDirectory ad = new AlphabeticalDirectory();
+		ad.setName( "C");
+		s.persist( ad );
+		entry.setDirectory( ad );
+		s.persist( entry );
+		book.getDirectoryEntries().put( ad, entry );
+
+		s.flush();
+		s.clear();
+
+		book = (AddressBook) s.get( AddressBook.class, book.getId() );
+		assertEquals( 1, book.getDirectoryEntries().size() );
+		assertEquals( "C", book.getDirectoryEntries().keySet().iterator().next().getName() );
+		tx.rollback();
+		s.close();
+	}
+
+	public void testEntityKeyElementTarget() throws Exception {
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		Atmosphere atm = new Atmosphere();
+		Gas o2 = new Gas();
+		o2.name = "oxygen";
+		atm.composition.put( o2, 94.3 );
+		s.persist( o2 );
+		s.persist( atm );
+
+		s.flush();
+		s.clear();
+
+		atm = (Atmosphere) s.get( Atmosphere.class, atm.id );
+		assertTrue( ! Hibernate.isInitialized( atm.composition ) );
+		assertEquals( 1, atm.composition.size() );
+		assertEquals( o2.name, atm.composition.keySet().iterator().next().name );
+		tx.rollback();
+		s.close();
+	}
+
+	public void testSortedMap() {
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		Training training = new Training();
+		Trainee trainee = new Trainee();
+		trainee.setName( "Jim" );
+		Trainee trainee2 = new Trainee();
+		trainee2.setName( "Emmanuel" );
+		s.persist( trainee );
+		s.persist( trainee2 );
+		training.getTrainees().put( "Jim", trainee );
+		training.getTrainees().put( "Emmanuel", trainee2 );
+		s.persist( training );
+
+		s.flush();
+		s.clear();
+
+		training = (Training) s.get( Training.class, training.getId() );
+		assertEquals( "Emmanuel", training.getTrainees().firstKey() );
+		assertEquals( "Jim", training.getTrainees().lastKey() );
+		tx.rollback();
+		s.close();
+	}
+
+	public void testMapKeyLoad() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		Software hibernate = new Software();
+		hibernate.setName( "Hibernate" );
+		Version v1 = new Version();
+		v1.setCodeName( "HumbaHumba" );
+		v1.setNumber( "1.0" );
+		v1.setSoftware( hibernate );
+		hibernate.addVersion( v1 );
+		s.persist( hibernate );
+		s.persist( v1 );
+
+		s.flush();
+		s.clear();
+
+		hibernate = (Software) s.get( Software.class, "Hibernate" );
+		assertEquals(1, hibernate.getVersions().size() );
+		Version v2 = new Version();
+		v2.setCodeName( "HumbaHumba2" );
+		v2.setNumber( "2.0" );
+		v2.setSoftware( hibernate );
+		hibernate.addVersion( v2 );
+		assertEquals( "One loaded persisted version, and one just added", 2, hibernate.getVersions().size() );
+
+		s.flush();
+		s.clear();
+
+		hibernate = (Software) s.get( Software.class, "Hibernate" );
+		for ( Version v : hibernate.getVersions().values() ) {
+			s.delete( v );
+		}
+		s.delete( hibernate );
+		tx.rollback();
+		s.close();
+	}
+
+
+	public IndexedCollectionTest(String x) {
+		super( x );
+	}
+
+	protected Class[] getMappings() {
+		return new Class[]{
+				Wardrobe.class,
+				Drawer.class,
+				Dress.class,
+				Software.class,
+				Version.class,
+				AddressBook.class,
+				AddressEntry.class,
+				AddressEntryPk.class, //should be silently ignored
+				Newspaper.class,
+				News.class,
+				PressReleaseAgency.class,
+				Painter.class,
+				Painting.class,
+				Atmosphere.class,
+				Gas.class,
+				AlphabeticalDirectory.class,
+				GasKey.class,
+				Trainee.class,
+				Training.class
+		};
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/MapKeyTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/MapKeyTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/MapKeyTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,40 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.indexcoll;
-
-import org.hibernate.test.annotations.TestCase;
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-
-/**
- * @author Emmanuel Bernard
- */
-public class MapKeyTest extends TestCase {
-
-	public void testMapKeyOnEmbeddedId() {
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		Generation c = new Generation();
-		c.setAge( "a" );
-		c.setCulture( "b" );
-		GenerationGroup r = new GenerationGroup();
-		r.setGeneration( c );
-		s.persist( r );
-		GenerationUser m = new GenerationUser();
-		s.persist( m );
-		m.getRef().put( c, r );
-		s.flush();
-		s.clear();
-
-		m = (GenerationUser) s.get( GenerationUser.class, m.getId() );
-		assertEquals( "a", m.getRef().keySet().iterator().next().getAge() );
-		tx.rollback();
-		s.close();
-	}
-
-	protected Class[] getMappings() {
-		return new Class[] {
-				GenerationUser.class,
-				GenerationGroup.class
-		};
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/MapKeyTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/MapKeyTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/MapKeyTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/MapKeyTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,40 @@
+//$Id: $
+package org.hibernate.test.annotations.indexcoll;
+
+import org.hibernate.test.annotations.TestCase;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class MapKeyTest extends TestCase {
+
+	public void testMapKeyOnEmbeddedId() {
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		Generation c = new Generation();
+		c.setAge( "a" );
+		c.setCulture( "b" );
+		GenerationGroup r = new GenerationGroup();
+		r.setGeneration( c );
+		s.persist( r );
+		GenerationUser m = new GenerationUser();
+		s.persist( m );
+		m.getRef().put( c, r );
+		s.flush();
+		s.clear();
+
+		m = (GenerationUser) s.get( GenerationUser.class, m.getId() );
+		assertEquals( "a", m.getRef().keySet().iterator().next().getAge() );
+		tx.rollback();
+		s.close();
+	}
+
+	protected Class[] getMappings() {
+		return new Class[] {
+				GenerationUser.class,
+				GenerationGroup.class
+		};
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/News.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/News.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/News.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,44 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.indexcoll;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class News {
-	private Integer id;
-	private String title;
-	private String detail;
-
-	@Id
-	@GeneratedValue
-	@Column(name = "news_id")
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getTitle() {
-		return title;
-	}
-
-	public void setTitle(String title) {
-		this.title = title;
-	}
-
-	public String getDetail() {
-		return detail;
-	}
-
-	public void setDetail(String detail) {
-		this.detail = detail;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/News.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/News.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/News.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/News.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,44 @@
+//$Id$
+package org.hibernate.test.annotations.indexcoll;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class News {
+	private Integer id;
+	private String title;
+	private String detail;
+
+	@Id
+	@GeneratedValue
+	@Column(name = "news_id")
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getTitle() {
+		return title;
+	}
+
+	public void setTitle(String title) {
+		this.title = title;
+	}
+
+	public String getDetail() {
+		return detail;
+	}
+
+	public void setDetail(String detail) {
+		this.detail = detail;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Newspaper.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Newspaper.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Newspaper.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,48 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.indexcoll;
-
-import java.util.HashMap;
-import java.util.Map;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.ManyToMany;
-import javax.persistence.MapKey;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Newspaper {
-	private Integer id;
-	private String name;
-	private Map<String, News> news = new HashMap<String, News>();
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	@ManyToMany
-	@MapKey(name = "title")
-	public Map<String, News> getNews() {
-		return news;
-	}
-
-	public void setNews(Map<String, News> news) {
-		this.news = news;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Newspaper.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Newspaper.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Newspaper.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Newspaper.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,48 @@
+//$Id$
+package org.hibernate.test.annotations.indexcoll;
+
+import java.util.HashMap;
+import java.util.Map;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.ManyToMany;
+import javax.persistence.MapKey;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Newspaper {
+	private Integer id;
+	private String name;
+	private Map<String, News> news = new HashMap<String, News>();
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	@ManyToMany
+	@MapKey(name = "title")
+	public Map<String, News> getNews() {
+		return news;
+	}
+
+	public void setNews(Map<String, News> news) {
+		this.news = news;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Painter.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Painter.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Painter.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,42 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.indexcoll;
-
-import java.util.HashMap;
-import java.util.Map;
-import javax.persistence.CascadeType;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.MapKey;
-import javax.persistence.OneToMany;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Painter {
-	private Integer id;
-	private Map<String, Painting> paintings = new HashMap<String, Painting>();
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	@OneToMany(cascade = {CascadeType.ALL})
-	@MapKey(name = "name")
-	@JoinColumn
-	public Map<String, Painting> getPaintings() {
-		return paintings;
-	}
-
-	public void setPaintings(Map<String, Painting> paintings) {
-		this.paintings = paintings;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Painter.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Painter.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Painter.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Painter.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,42 @@
+//$Id$
+package org.hibernate.test.annotations.indexcoll;
+
+import java.util.HashMap;
+import java.util.Map;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.MapKey;
+import javax.persistence.OneToMany;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Painter {
+	private Integer id;
+	private Map<String, Painting> paintings = new HashMap<String, Painting>();
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	@OneToMany(cascade = {CascadeType.ALL})
+	@MapKey(name = "name")
+	@JoinColumn
+	public Map<String, Painting> getPaintings() {
+		return paintings;
+	}
+
+	public void setPaintings(Map<String, Painting> paintings) {
+		this.paintings = paintings;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Painting.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Painting.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Painting.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,82 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.indexcoll;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.IdClass;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at IdClass(PaintingPk.class)
-public class Painting {
-
-	private int sizeX;
-	private int sizeY;
-	private String name;
-	private String painter;
-
-	public Painting() {
-	}
-
-	public Painting(String name, String painter, int sizeX, int sizeY) {
-		this.name = name;
-		this.painter = painter;
-		this.sizeX = sizeX;
-		this.sizeY = sizeY;
-	}
-
-	@Id
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	@Id
-	public String getPainter() {
-		return painter;
-	}
-
-	public void setPainter(String painter) {
-		this.painter = painter;
-	}
-
-	public boolean equals(Object o) {
-		if ( this == o ) return true;
-		if ( o == null || getClass() != o.getClass() ) return false;
-
-		final PaintingPk that = (PaintingPk) o;
-
-		if ( !name.equals( that.getName() ) ) return false;
-		if ( !painter.equals( that.getPainter() ) ) return false;
-
-		return true;
-	}
-
-	public int hashCode() {
-		int result;
-		result = name.hashCode();
-		result = 29 * result + painter.hashCode();
-		return result;
-	}
-
-	public int getSizeX() {
-		return sizeX;
-	}
-
-	public void setSizeX(int sizeX) {
-		this.sizeX = sizeX;
-	}
-
-	public int getSizeY() {
-		return sizeY;
-	}
-
-	public void setSizeY(int sizeY) {
-		this.sizeY = sizeY;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Painting.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Painting.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Painting.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Painting.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,82 @@
+//$Id$
+package org.hibernate.test.annotations.indexcoll;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.IdClass;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at IdClass(PaintingPk.class)
+public class Painting {
+
+	private int sizeX;
+	private int sizeY;
+	private String name;
+	private String painter;
+
+	public Painting() {
+	}
+
+	public Painting(String name, String painter, int sizeX, int sizeY) {
+		this.name = name;
+		this.painter = painter;
+		this.sizeX = sizeX;
+		this.sizeY = sizeY;
+	}
+
+	@Id
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	@Id
+	public String getPainter() {
+		return painter;
+	}
+
+	public void setPainter(String painter) {
+		this.painter = painter;
+	}
+
+	public boolean equals(Object o) {
+		if ( this == o ) return true;
+		if ( o == null || getClass() != o.getClass() ) return false;
+
+		final PaintingPk that = (PaintingPk) o;
+
+		if ( !name.equals( that.getName() ) ) return false;
+		if ( !painter.equals( that.getPainter() ) ) return false;
+
+		return true;
+	}
+
+	public int hashCode() {
+		int result;
+		result = name.hashCode();
+		result = 29 * result + painter.hashCode();
+		return result;
+	}
+
+	public int getSizeX() {
+		return sizeX;
+	}
+
+	public void setSizeX(int sizeX) {
+		this.sizeX = sizeX;
+	}
+
+	public int getSizeY() {
+		return sizeY;
+	}
+
+	public void setSizeY(int sizeY) {
+		this.sizeY = sizeY;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/PaintingPk.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/PaintingPk.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/PaintingPk.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,49 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.indexcoll;
-
-import java.io.Serializable;
-import javax.persistence.Embeddable;
-
-/**
- * @author Emmanuel Bernard
- */
- at Embeddable
-public class PaintingPk implements Serializable {
-	private String name;
-	private String painter;
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	public String getPainter() {
-		return painter;
-	}
-
-	public void setPainter(String painter) {
-		this.painter = painter;
-	}
-
-	public boolean equals(Object o) {
-		if ( this == o ) return true;
-		if ( o == null || getClass() != o.getClass() ) return false;
-
-		final PaintingPk that = (PaintingPk) o;
-
-		if ( !name.equals( that.name ) ) return false;
-		if ( !painter.equals( that.painter ) ) return false;
-
-		return true;
-	}
-
-	public int hashCode() {
-		int result;
-		result = name.hashCode();
-		result = 29 * result + painter.hashCode();
-		return result;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/PaintingPk.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/PaintingPk.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/PaintingPk.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/PaintingPk.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,49 @@
+//$Id$
+package org.hibernate.test.annotations.indexcoll;
+
+import java.io.Serializable;
+import javax.persistence.Embeddable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Embeddable
+public class PaintingPk implements Serializable {
+	private String name;
+	private String painter;
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getPainter() {
+		return painter;
+	}
+
+	public void setPainter(String painter) {
+		this.painter = painter;
+	}
+
+	public boolean equals(Object o) {
+		if ( this == o ) return true;
+		if ( o == null || getClass() != o.getClass() ) return false;
+
+		final PaintingPk that = (PaintingPk) o;
+
+		if ( !name.equals( that.name ) ) return false;
+		if ( !painter.equals( that.painter ) ) return false;
+
+		return true;
+	}
+
+	public int hashCode() {
+		int result;
+		result = name.hashCode();
+		result = 29 * result + painter.hashCode();
+		return result;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/PressReleaseAgency.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/PressReleaseAgency.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/PressReleaseAgency.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,54 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.indexcoll;
-
-import java.util.HashMap;
-import java.util.Map;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.JoinTable;
-import javax.persistence.ManyToMany;
-import javax.persistence.MapKey;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class PressReleaseAgency {
-	private Integer id;
-	private String name;
-	private Map<Integer, News> providedNews = new HashMap<Integer, News>();
-
-	@Id
-	@GeneratedValue
-	@Column(name = "PressReleaseAgency_id")
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	@ManyToMany
-	@JoinTable(joinColumns = @JoinColumn(name = "PressReleaseAgency_id"),
-			inverseJoinColumns = @JoinColumn(name = "News_id"))
-	@MapKey
-	public Map<Integer, News> getProvidedNews() {
-		return providedNews;
-	}
-
-	public void setProvidedNews(Map<Integer, News> providedNews) {
-		this.providedNews = providedNews;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/PressReleaseAgency.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/PressReleaseAgency.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/PressReleaseAgency.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/PressReleaseAgency.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,54 @@
+//$Id$
+package org.hibernate.test.annotations.indexcoll;
+
+import java.util.HashMap;
+import java.util.Map;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
+import javax.persistence.ManyToMany;
+import javax.persistence.MapKey;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class PressReleaseAgency {
+	private Integer id;
+	private String name;
+	private Map<Integer, News> providedNews = new HashMap<Integer, News>();
+
+	@Id
+	@GeneratedValue
+	@Column(name = "PressReleaseAgency_id")
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	@ManyToMany
+	@JoinTable(joinColumns = @JoinColumn(name = "PressReleaseAgency_id"),
+			inverseJoinColumns = @JoinColumn(name = "News_id"))
+	@MapKey
+	public Map<Integer, News> getProvidedNews() {
+		return providedNews;
+	}
+
+	public void setProvidedNews(Map<Integer, News> providedNews) {
+		this.providedNews = providedNews;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Software.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Software.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Software.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,41 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.indexcoll;
-
-import java.util.Map;
-import java.util.HashMap;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.MapKey;
-import javax.persistence.OneToMany;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Software {
-	private String name;
-	private Map<String, Version> versions = new HashMap<String, Version>();
-
-	@Id
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	@OneToMany(mappedBy = "software")
-	@MapKey(name = "codeName")
-	public Map<String, Version> getVersions() {
-		return versions;
-	}
-
-	public void setVersions(Map<String, Version> versions) {
-		this.versions = versions;
-	}
-
-	public void addVersion(Version version) {
-		this.versions.put(version.getCodeName(), version);
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Software.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Software.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Software.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Software.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,41 @@
+//$Id$
+package org.hibernate.test.annotations.indexcoll;
+
+import java.util.Map;
+import java.util.HashMap;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.MapKey;
+import javax.persistence.OneToMany;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Software {
+	private String name;
+	private Map<String, Version> versions = new HashMap<String, Version>();
+
+	@Id
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	@OneToMany(mappedBy = "software")
+	@MapKey(name = "codeName")
+	public Map<String, Version> getVersions() {
+		return versions;
+	}
+
+	public void setVersions(Map<String, Version> versions) {
+		this.versions = versions;
+	}
+
+	public void addVersion(Version version) {
+		this.versions.put(version.getCodeName(), version);
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Trainee.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Trainee.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Trainee.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,31 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.indexcoll;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.GeneratedValue;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Trainee {
-	@Id @GeneratedValue private Long id;
-	private String name;
-
-	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;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Trainee.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Trainee.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Trainee.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Trainee.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,31 @@
+//$Id: $
+package org.hibernate.test.annotations.indexcoll;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Trainee {
+	@Id @GeneratedValue private Long id;
+	private String name;
+
+	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;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Training.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Training.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Training.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,39 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.indexcoll;
-
-import java.util.SortedMap;
-import java.util.TreeMap;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.MapKey;
-import javax.persistence.ManyToMany;
-
-import org.hibernate.annotations.Sort;
-import org.hibernate.annotations.SortType;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Training {
-	@Id @GeneratedValue private Long id;
-	@Sort(type= SortType.NATURAL)
-	@MapKey(name="name") @ManyToMany SortedMap<String, Trainee> trainees = new TreeMap<String, Trainee>();
-
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-
-	public SortedMap<String, Trainee> getTrainees() {
-		return trainees;
-	}
-
-	public void setTrainees(SortedMap<String, Trainee> trainees) {
-		this.trainees = trainees;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Training.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Training.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Training.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Training.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,39 @@
+//$Id: $
+package org.hibernate.test.annotations.indexcoll;
+
+import java.util.SortedMap;
+import java.util.TreeMap;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.MapKey;
+import javax.persistence.ManyToMany;
+
+import org.hibernate.annotations.Sort;
+import org.hibernate.annotations.SortType;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Training {
+	@Id @GeneratedValue private Long id;
+	@Sort(type= SortType.NATURAL)
+	@MapKey(name="name") @ManyToMany SortedMap<String, Trainee> trainees = new TreeMap<String, Trainee>();
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public SortedMap<String, Trainee> getTrainees() {
+		return trainees;
+	}
+
+	public void setTrainees(SortedMap<String, Trainee> trainees) {
+		this.trainees = trainees;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Version.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Version.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Version.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,57 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.indexcoll;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.ManyToOne;
-import javax.persistence.Table;
-import javax.persistence.Column;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Table(name = "tbl_version")
-public class Version {
-	private Integer id;
-	private String codeName;
-	private String number;
-	private Software software;
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	@Column(name="`code_name`")
-	public String getCodeName() {
-		return codeName;
-	}
-
-	public void setCodeName(String codeName) {
-		this.codeName = codeName;
-	}
-
-	public String getNumber() {
-		return number;
-	}
-
-	public void setNumber(String number) {
-		this.number = number;
-	}
-
-	@ManyToOne
-	public Software getSoftware() {
-		return software;
-	}
-
-	public void setSoftware(Software software) {
-		this.software = software;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Version.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Version.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Version.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Version.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,57 @@
+//$Id$
+package org.hibernate.test.annotations.indexcoll;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+import javax.persistence.Column;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Table(name = "tbl_version")
+public class Version {
+	private Integer id;
+	private String codeName;
+	private String number;
+	private Software software;
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	@Column(name="`code_name`")
+	public String getCodeName() {
+		return codeName;
+	}
+
+	public void setCodeName(String codeName) {
+		this.codeName = codeName;
+	}
+
+	public String getNumber() {
+		return number;
+	}
+
+	public void setNumber(String number) {
+		this.number = number;
+	}
+
+	@ManyToOne
+	public Software getSoftware() {
+		return software;
+	}
+
+	public void setSoftware(Software software) {
+		this.software = software;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Wardrobe.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Wardrobe.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Wardrobe.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,47 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.indexcoll;
-
-import java.util.List;
-import javax.persistence.CascadeType;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.OneToMany;
-
-import org.hibernate.annotations.IndexColumn;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Wardrobe {
-
-	private Long id;
-	private List<Drawer> drawers;
-
-	@Id
-	@GeneratedValue
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-
-	/**
-	 * unidirectional one to many list  with non null foreign key (mapping
-	 * not recommended).
-	 */
-	@OneToMany(cascade = CascadeType.ALL)
-	@IndexColumn(name = "drawer_position", base = 1)
-	@JoinColumn(name = "wardrobe_id", nullable = false)
-	public List<Drawer> getDrawers() {
-		return drawers;
-	}
-
-	public void setDrawers(List<Drawer> drawers) {
-		this.drawers = drawers;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Wardrobe.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Wardrobe.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Wardrobe.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/indexcoll/Wardrobe.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,47 @@
+//$Id$
+package org.hibernate.test.annotations.indexcoll;
+
+import java.util.List;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.OneToMany;
+
+import org.hibernate.annotations.IndexColumn;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Wardrobe {
+
+	private Long id;
+	private List<Drawer> drawers;
+
+	@Id
+	@GeneratedValue
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	/**
+	 * unidirectional one to many list  with non null foreign key (mapping
+	 * not recommended).
+	 */
+	@OneToMany(cascade = CascadeType.ALL)
+	@IndexColumn(name = "drawer_position", base = 1)
+	@JoinColumn(name = "wardrobe_id", nullable = false)
+	public List<Drawer> getDrawers() {
+		return drawers;
+	}
+
+	public void setDrawers(List<Drawer> drawers) {
+		this.drawers = drawers;
+	}
+}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance)

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/Apple.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/Apple.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/Apple.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,11 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.inheritance;
-
-import javax.persistence.Entity;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Apple extends Fruit {
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/Apple.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/Apple.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/Apple.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/Apple.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,11 @@
+//$Id$
+package org.hibernate.test.annotations.inheritance;
+
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Apple extends Fruit {
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/Carrot.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/Carrot.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/Carrot.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,33 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.inheritance;
-
-import javax.persistence.Entity;
-import javax.persistence.Inheritance;
-import javax.persistence.InheritanceType;
-import javax.persistence.PrimaryKeyJoinColumn;
-import javax.persistence.PrimaryKeyJoinColumns;
-
-import org.hibernate.annotations.OnDelete;
-import org.hibernate.annotations.OnDeleteAction;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Inheritance(strategy = InheritanceType.JOINED)
- at PrimaryKeyJoinColumns(
-		{@PrimaryKeyJoinColumn(name = "carrot_farmer", referencedColumnName = "farmer"),
-		@PrimaryKeyJoinColumn(name = "harvest", referencedColumnName = "harvestDate")
-				})
- at OnDelete(action = OnDeleteAction.CASCADE)
-public class Carrot extends Vegetable {
-	private int length;
-
-	public int getLength() {
-		return length;
-	}
-
-	public void setLength(int length) {
-		this.length = length;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/Carrot.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/Carrot.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/Carrot.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/Carrot.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,33 @@
+//$Id$
+package org.hibernate.test.annotations.inheritance;
+
+import javax.persistence.Entity;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+import javax.persistence.PrimaryKeyJoinColumn;
+import javax.persistence.PrimaryKeyJoinColumns;
+
+import org.hibernate.annotations.OnDelete;
+import org.hibernate.annotations.OnDeleteAction;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Inheritance(strategy = InheritanceType.JOINED)
+ at PrimaryKeyJoinColumns(
+		{@PrimaryKeyJoinColumn(name = "carrot_farmer", referencedColumnName = "farmer"),
+		@PrimaryKeyJoinColumn(name = "harvest", referencedColumnName = "harvestDate")
+				})
+ at OnDelete(action = OnDeleteAction.CASCADE)
+public class Carrot extends Vegetable {
+	private int length;
+
+	public int getLength() {
+		return length;
+	}
+
+	public void setLength(int length) {
+		this.length = length;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/Fruit.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/Fruit.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/Fruit.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,25 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.inheritance;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Fruit {
-	private Integer id;
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/Fruit.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/Fruit.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/Fruit.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/Fruit.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,25 @@
+//$Id$
+package org.hibernate.test.annotations.inheritance;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Fruit {
+	private Integer id;
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/SubclassTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/SubclassTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/SubclassTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,170 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.inheritance;
-
-import java.util.List;
-
-import org.hibernate.Query;
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-import org.hibernate.test.annotations.A320;
-import org.hibernate.test.annotations.A320b;
-import org.hibernate.test.annotations.Plane;
-import org.hibernate.test.annotations.TestCase;
-import org.hibernate.test.annotations.inheritance.singletable.Funk;
-import org.hibernate.test.annotations.inheritance.singletable.Music;
-import org.hibernate.test.annotations.inheritance.singletable.Noise;
-import org.hibernate.test.annotations.inheritance.singletable.Rock;
-
-/**
- * @author Emmanuel Bernard
- */
-public class SubclassTest extends TestCase {
-
-	public SubclassTest(String x) {
-		super( x );
-	}
-
-	public void testPolymorphism() throws Exception {
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		Plane p = new Plane();
-		p.setNbrOfSeats( 10 );
-		A320 a = new A320();
-		a.setJavaEmbeddedVersion( "5.0" );
-		a.setNbrOfSeats( 300 );
-		s.persist( a );
-		s.persist( p );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		Query q = s.createQuery( "from " + A320.class.getName() );
-		List a320s = q.list();
-		assertNotNull( a320s );
-		assertEquals( 1, a320s.size() );
-		assertTrue( a320s.get( 0 ) instanceof A320 );
-		assertEquals( "5.0", ( (A320) a320s.get( 0 ) ).getJavaEmbeddedVersion() );
-		q = s.createQuery( "from " + Plane.class.getName() );
-		List planes = q.list();
-		assertNotNull( planes );
-		assertEquals( 2, planes.size() );
-		tx.commit();
-		s.close();
-	}
-
-	public void test2ndLevelSubClass() throws Exception {
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		A320b a = new A320b();
-		a.setJavaEmbeddedVersion( "Elephant" );
-		a.setNbrOfSeats( 300 );
-		s.persist( a );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		Query q = s.createQuery( "from " + A320.class.getName() + " as a where a.javaEmbeddedVersion = :version" );
-		q.setString( "version", "Elephant" );
-		List a320s = q.list();
-		assertNotNull( a320s );
-		assertEquals( 1, a320s.size() );
-		tx.commit();
-		s.close();
-	}
-
-	public void testEmbeddedSuperclass() throws Exception {
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		Plane p = new Plane();
-		p.setAlive( true ); //sic
-		p.setAltitude( 10000 );
-		p.setMetricAltitude( 3000 );
-		p.setNbrOfSeats( 150 );
-		p.setSerial( "0123456789" );
-		s.persist( p );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		p = (Plane) s.get( Plane.class, p.getId() );
-		assertNotNull( p );
-		assertEquals( true, p.isAlive() );
-		assertEquals( 150, p.getNbrOfSeats() );
-		assertEquals( 10000, p.getAltitude() );
-		assertEquals( "0123456789", p.getSerial() );
-		assertFalse( 3000 == p.getMetricAltitude() );
-		s.delete( p );
-		tx.commit();
-		s.close();
-	}
-
-	public void testFormula() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		Rock guns = new Rock();
-		guns.setAvgBeat( 90 );
-		guns.setType( 2 );
-		Noise white = new Noise();
-		white.setAvgBeat( 0 );
-		white.setType( null );
-
-		s.persist( guns );
-		s.persist( white );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		List result = s.createCriteria( Noise.class ).list();
-		assertNotNull( result );
-		assertEquals( 1, result.size() );
-		white = (Noise) result.get( 0 );
-		assertNull( white.getType() );
-		s.delete( white );
-		result = s.createCriteria( Rock.class ).list();
-		assertEquals( 1, result.size() );
-		s.delete( result.get( 0 ) );
-		result = s.createCriteria( Funk.class ).list();
-		assertEquals( 0, result.size() );
-
-		tx.commit();
-		s.close();
-	}
-
-	private void checkClassType(Fruit fruitToTest, Fruit f, Apple a) {
-		if ( fruitToTest.getId().equals( f.getId() ) ) {
-			assertFalse( fruitToTest instanceof Apple );
-		}
-		else if ( fruitToTest.getId().equals( a.getId() ) ) {
-			assertTrue( fruitToTest instanceof Apple );
-		}
-		else {
-			fail( "Result does not contains the previously inserted elements" );
-		}
-	}
-
-	/**
-	 * @see org.hibernate.test.annotations.TestCase#getMappings()
-	 */
-	protected Class[] getMappings() {
-		return new Class[]{
-				A320b.class, //subclasses should be properly reordered
-				Plane.class,
-				A320.class,
-				Fruit.class,
-				//FlyingObject.class, //had to declare embedded superclasses
-				//Thing.class,
-				Apple.class,
-				Music.class,
-				Rock.class,
-				Funk.class,
-				Noise.class
-		};
-	}
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/SubclassTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/SubclassTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/SubclassTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/SubclassTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,170 @@
+//$Id$
+package org.hibernate.test.annotations.inheritance;
+
+import java.util.List;
+
+import org.hibernate.Query;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.A320;
+import org.hibernate.test.annotations.A320b;
+import org.hibernate.test.annotations.Plane;
+import org.hibernate.test.annotations.TestCase;
+import org.hibernate.test.annotations.inheritance.singletable.Funk;
+import org.hibernate.test.annotations.inheritance.singletable.Music;
+import org.hibernate.test.annotations.inheritance.singletable.Noise;
+import org.hibernate.test.annotations.inheritance.singletable.Rock;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class SubclassTest extends TestCase {
+
+	public SubclassTest(String x) {
+		super( x );
+	}
+
+	public void testPolymorphism() throws Exception {
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		Plane p = new Plane();
+		p.setNbrOfSeats( 10 );
+		A320 a = new A320();
+		a.setJavaEmbeddedVersion( "5.0" );
+		a.setNbrOfSeats( 300 );
+		s.persist( a );
+		s.persist( p );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		Query q = s.createQuery( "from " + A320.class.getName() );
+		List a320s = q.list();
+		assertNotNull( a320s );
+		assertEquals( 1, a320s.size() );
+		assertTrue( a320s.get( 0 ) instanceof A320 );
+		assertEquals( "5.0", ( (A320) a320s.get( 0 ) ).getJavaEmbeddedVersion() );
+		q = s.createQuery( "from " + Plane.class.getName() );
+		List planes = q.list();
+		assertNotNull( planes );
+		assertEquals( 2, planes.size() );
+		tx.commit();
+		s.close();
+	}
+
+	public void test2ndLevelSubClass() throws Exception {
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		A320b a = new A320b();
+		a.setJavaEmbeddedVersion( "Elephant" );
+		a.setNbrOfSeats( 300 );
+		s.persist( a );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		Query q = s.createQuery( "from " + A320.class.getName() + " as a where a.javaEmbeddedVersion = :version" );
+		q.setString( "version", "Elephant" );
+		List a320s = q.list();
+		assertNotNull( a320s );
+		assertEquals( 1, a320s.size() );
+		tx.commit();
+		s.close();
+	}
+
+	public void testEmbeddedSuperclass() throws Exception {
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		Plane p = new Plane();
+		p.setAlive( true ); //sic
+		p.setAltitude( 10000 );
+		p.setMetricAltitude( 3000 );
+		p.setNbrOfSeats( 150 );
+		p.setSerial( "0123456789" );
+		s.persist( p );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		p = (Plane) s.get( Plane.class, p.getId() );
+		assertNotNull( p );
+		assertEquals( true, p.isAlive() );
+		assertEquals( 150, p.getNbrOfSeats() );
+		assertEquals( 10000, p.getAltitude() );
+		assertEquals( "0123456789", p.getSerial() );
+		assertFalse( 3000 == p.getMetricAltitude() );
+		s.delete( p );
+		tx.commit();
+		s.close();
+	}
+
+	public void testFormula() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		Rock guns = new Rock();
+		guns.setAvgBeat( 90 );
+		guns.setType( 2 );
+		Noise white = new Noise();
+		white.setAvgBeat( 0 );
+		white.setType( null );
+
+		s.persist( guns );
+		s.persist( white );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		List result = s.createCriteria( Noise.class ).list();
+		assertNotNull( result );
+		assertEquals( 1, result.size() );
+		white = (Noise) result.get( 0 );
+		assertNull( white.getType() );
+		s.delete( white );
+		result = s.createCriteria( Rock.class ).list();
+		assertEquals( 1, result.size() );
+		s.delete( result.get( 0 ) );
+		result = s.createCriteria( Funk.class ).list();
+		assertEquals( 0, result.size() );
+
+		tx.commit();
+		s.close();
+	}
+
+	private void checkClassType(Fruit fruitToTest, Fruit f, Apple a) {
+		if ( fruitToTest.getId().equals( f.getId() ) ) {
+			assertFalse( fruitToTest instanceof Apple );
+		}
+		else if ( fruitToTest.getId().equals( a.getId() ) ) {
+			assertTrue( fruitToTest instanceof Apple );
+		}
+		else {
+			fail( "Result does not contains the previously inserted elements" );
+		}
+	}
+
+	/**
+	 * @see org.hibernate.test.annotations.TestCase#getMappings()
+	 */
+	protected Class[] getMappings() {
+		return new Class[]{
+				A320b.class, //subclasses should be properly reordered
+				Plane.class,
+				A320.class,
+				Fruit.class,
+				//FlyingObject.class, //had to declare embedded superclasses
+				//Thing.class,
+				Apple.class,
+				Music.class,
+				Rock.class,
+				Funk.class,
+				Noise.class
+		};
+	}
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/Tomato.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/Tomato.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/Tomato.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,31 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.inheritance;
-
-import javax.persistence.Entity;
-import javax.persistence.Inheritance;
-import javax.persistence.InheritanceType;
-
-import org.hibernate.annotations.OnDelete;
-import org.hibernate.annotations.OnDeleteAction;
-
-/**
- * @author Emmanuel Bernard
- */
-//FIXME HBX-55 default for composite PK does not work yet
-//FIXME Tomato is a fruit
- at Entity()
- at Inheritance(
-		strategy = InheritanceType.JOINED
-)
- at OnDelete(action = OnDeleteAction.CASCADE)
-public class Tomato extends Vegetable {
-	private int size;
-
-	public int getSize() {
-		return size;
-	}
-
-	public void setSize(int size) {
-		this.size = size;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/Tomato.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/Tomato.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/Tomato.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/Tomato.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,31 @@
+//$Id$
+package org.hibernate.test.annotations.inheritance;
+
+import javax.persistence.Entity;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+
+import org.hibernate.annotations.OnDelete;
+import org.hibernate.annotations.OnDeleteAction;
+
+/**
+ * @author Emmanuel Bernard
+ */
+//FIXME HBX-55 default for composite PK does not work yet
+//FIXME Tomato is a fruit
+ at Entity()
+ at Inheritance(
+		strategy = InheritanceType.JOINED
+)
+ at OnDelete(action = OnDeleteAction.CASCADE)
+public class Tomato extends Vegetable {
+	private int size;
+
+	public int getSize() {
+		return size;
+	}
+
+	public void setSize(int size) {
+		this.size = size;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/Vegetable.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/Vegetable.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/Vegetable.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,51 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.inheritance;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Inheritance;
-import javax.persistence.InheritanceType;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity()
- at Inheritance(
-		strategy = InheritanceType.JOINED
-)
-public class Vegetable {
-	private VegetablePk id;
-	private long priceInCent;
-
-	@Id
-	public VegetablePk getId() {
-		return id;
-	}
-
-	public void setId(VegetablePk id) {
-		this.id = id;
-	}
-
-	public long getPriceInCent() {
-		return priceInCent;
-	}
-
-	public void setPriceInCent(long priceInCent) {
-		this.priceInCent = priceInCent;
-	}
-
-	public boolean equals(Object o) {
-		if ( this == o ) return true;
-		if ( !( o instanceof Vegetable ) ) return false;
-
-		final Vegetable vegetable = (Vegetable) o;
-
-		if ( !id.equals( vegetable.id ) ) return false;
-
-		return true;
-	}
-
-	public int hashCode() {
-		return id.hashCode();
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/Vegetable.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/Vegetable.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/Vegetable.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/Vegetable.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,51 @@
+//$Id$
+package org.hibernate.test.annotations.inheritance;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity()
+ at Inheritance(
+		strategy = InheritanceType.JOINED
+)
+public class Vegetable {
+	private VegetablePk id;
+	private long priceInCent;
+
+	@Id
+	public VegetablePk getId() {
+		return id;
+	}
+
+	public void setId(VegetablePk id) {
+		this.id = id;
+	}
+
+	public long getPriceInCent() {
+		return priceInCent;
+	}
+
+	public void setPriceInCent(long priceInCent) {
+		this.priceInCent = priceInCent;
+	}
+
+	public boolean equals(Object o) {
+		if ( this == o ) return true;
+		if ( !( o instanceof Vegetable ) ) return false;
+
+		final Vegetable vegetable = (Vegetable) o;
+
+		if ( !id.equals( vegetable.id ) ) return false;
+
+		return true;
+	}
+
+	public int hashCode() {
+		return id.hashCode();
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/VegetablePk.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/VegetablePk.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/VegetablePk.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,50 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.inheritance;
-
-import java.io.Serializable;
-import javax.persistence.Embeddable;
-
-/**
- * @author Emmanuel Bernard
- */
- at Embeddable
-public class VegetablePk implements Serializable {
-	private String farmer;
-
-	public boolean equals(Object o) {
-		if ( this == o ) return true;
-		if ( !( o instanceof VegetablePk ) ) return false;
-
-		final VegetablePk vegetablePk = (VegetablePk) o;
-
-		if ( !farmer.equals( vegetablePk.farmer ) ) return false;
-		if ( !harvestDate.equals( vegetablePk.harvestDate ) ) return false;
-
-		return true;
-	}
-
-	public int hashCode() {
-		int result;
-		result = farmer.hashCode();
-		result = 29 * result + harvestDate.hashCode();
-		return result;
-	}
-
-	public String getFarmer() {
-		return farmer;
-	}
-
-	public void setFarmer(String farmer) {
-		this.farmer = farmer;
-	}
-
-	public String getHarvestDate() {
-		return harvestDate;
-	}
-
-	public void setHarvestDate(String harvestDate) {
-		this.harvestDate = harvestDate;
-	}
-
-	private String harvestDate;
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/VegetablePk.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/VegetablePk.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/VegetablePk.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/VegetablePk.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,50 @@
+//$Id$
+package org.hibernate.test.annotations.inheritance;
+
+import java.io.Serializable;
+import javax.persistence.Embeddable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Embeddable
+public class VegetablePk implements Serializable {
+	private String farmer;
+
+	public boolean equals(Object o) {
+		if ( this == o ) return true;
+		if ( !( o instanceof VegetablePk ) ) return false;
+
+		final VegetablePk vegetablePk = (VegetablePk) o;
+
+		if ( !farmer.equals( vegetablePk.farmer ) ) return false;
+		if ( !harvestDate.equals( vegetablePk.harvestDate ) ) return false;
+
+		return true;
+	}
+
+	public int hashCode() {
+		int result;
+		result = farmer.hashCode();
+		result = 29 * result + harvestDate.hashCode();
+		return result;
+	}
+
+	public String getFarmer() {
+		return farmer;
+	}
+
+	public void setFarmer(String farmer) {
+		this.farmer = farmer;
+	}
+
+	public String getHarvestDate() {
+		return harvestDate;
+	}
+
+	public void setHarvestDate(String harvestDate) {
+		this.harvestDate = harvestDate;
+	}
+
+	private String harvestDate;
+}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined)

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Alarm.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Alarm.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Alarm.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,40 +0,0 @@
-//$Id: Sweater.java 8974 2006-01-04 00:43:49Z epbernard $
-package org.hibernate.test.annotations.inheritance.joined;
-
-import javax.persistence.DiscriminatorValue;
-import javax.persistence.Entity;
-import javax.persistence.JoinColumn;
-import javax.persistence.JoinColumns;
-import javax.persistence.OneToOne;
-
- at Entity
- at DiscriminatorValue("AlarmT")
-public class Alarm extends EventInformation {
-
-	protected EventInformation eventInfo;
-
-	@OneToOne
-	@JoinColumns({@JoinColumn(name = "EVENTINFORMATIONT_NOTIFICATIONID",
-			referencedColumnName = "NOTIFICATIONID")})
-	public EventInformation getEventInfo() {
-		return eventInfo;
-	}
-
-	public void setEventInfo(EventInformation value) {
-		this.eventInfo = value;
-	}
-
-
-	@Override
-	public String toString() {
-		StringBuilder sb = new StringBuilder();
-		String eventId = ( getEventInfo() != null ?
-				getEventInfo().getNotificationId() : null );
-		sb.append(
-				"AlarmT: id = " + getNotificationId() + "\t" +
-						"has event id = " + eventId
-		);
-		return sb.toString();
-	}
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Alarm.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Alarm.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Alarm.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Alarm.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,40 @@
+//$Id: Sweater.java 8974 2006-01-04 00:43:49Z epbernard $
+package org.hibernate.test.annotations.inheritance.joined;
+
+import javax.persistence.DiscriminatorValue;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinColumns;
+import javax.persistence.OneToOne;
+
+ at Entity
+ at DiscriminatorValue("AlarmT")
+public class Alarm extends EventInformation {
+
+	protected EventInformation eventInfo;
+
+	@OneToOne
+	@JoinColumns({@JoinColumn(name = "EVENTINFORMATIONT_NOTIFICATIONID",
+			referencedColumnName = "NOTIFICATIONID")})
+	public EventInformation getEventInfo() {
+		return eventInfo;
+	}
+
+	public void setEventInfo(EventInformation value) {
+		this.eventInfo = value;
+	}
+
+
+	@Override
+	public String toString() {
+		StringBuilder sb = new StringBuilder();
+		String eventId = ( getEventInfo() != null ?
+				getEventInfo().getNotificationId() : null );
+		sb.append(
+				"AlarmT: id = " + getNotificationId() + "\t" +
+						"has event id = " + eventId
+		);
+		return sb.toString();
+	}
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Asset.hbm.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Asset.hbm.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Asset.hbm.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,36 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE hibernate-mapping PUBLIC
-        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
-        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
-
-<hibernate-mapping package="org.hibernate.test.annotations.inheritance.joined">
-
-    <class name="Parent">
-        <id name="id">
-            <generator class="native"/>
-        </id>
-        <set name="financialAssets" fetch="join" cascade="refresh" inverse="true">
-            <key column="PARENT_ID"/>
-            <one-to-many class="FinancialAsset"/>
-        </set>
-        <set name="propertyAssets" fetch="join" cascade="refresh" inverse="true">
-            <key column="PARENT_ID"/>
-            <one-to-many class="PropertyAsset"/>
-        </set>
-    </class>
-    <class name="Asset">
-        <id name="id">
-            <generator class="native"/>
-        </id>
-        <many-to-one name="parent" column="PARENT_ID" property-ref="parent"/>
-        <joined-subclass name="FinancialAsset">
-            <key column="ID"/>
-            <property name="price"/>
-        </joined-subclass>
-        <joined-subclass name="PropertyAsset">
-            <key column="ID"/>
-            <property name="price"/>
-        </joined-subclass>
-    </class>
-
-</hibernate-mapping>
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Asset.hbm.xml (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Asset.hbm.xml)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Asset.hbm.xml	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Asset.hbm.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,36 @@
+<?xml version="1.0"?>
+<!DOCTYPE hibernate-mapping PUBLIC
+        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+
+<hibernate-mapping package="org.hibernate.test.annotations.inheritance.joined">
+
+    <class name="Parent">
+        <id name="id">
+            <generator class="native"/>
+        </id>
+        <set name="financialAssets" fetch="join" cascade="refresh" inverse="true">
+            <key column="PARENT_ID"/>
+            <one-to-many class="FinancialAsset"/>
+        </set>
+        <set name="propertyAssets" fetch="join" cascade="refresh" inverse="true">
+            <key column="PARENT_ID"/>
+            <one-to-many class="PropertyAsset"/>
+        </set>
+    </class>
+    <class name="Asset">
+        <id name="id">
+            <generator class="native"/>
+        </id>
+        <many-to-one name="parent" column="PARENT_ID" property-ref="parent"/>
+        <joined-subclass name="FinancialAsset">
+            <key column="ID"/>
+            <property name="price"/>
+        </joined-subclass>
+        <joined-subclass name="PropertyAsset">
+            <key column="ID"/>
+            <property name="price"/>
+        </joined-subclass>
+    </class>
+
+</hibernate-mapping>
\ No newline at end of file

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Asset.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Asset.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Asset.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,41 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.inheritance.joined;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-import javax.persistence.Table;
-import javax.persistence.Inheritance;
-import javax.persistence.InheritanceType;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Inheritance(strategy = InheritanceType.JOINED)
- at Table(name = "TBLASSET")
-public class Asset {
-	private Integer id;
-
-	private Parent parent = null;
-
-	@Id @GeneratedValue public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	@ManyToOne(targetEntity = Parent.class)
-	@JoinColumn(name = "PARENTID")
-	public Parent getParent() {
-		return parent;
-	}
-
-	public void setParent(Parent parent) {
-		this.parent = parent;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Asset.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Asset.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Asset.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Asset.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,41 @@
+//$Id: $
+package org.hibernate.test.annotations.inheritance.joined;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Inheritance(strategy = InheritanceType.JOINED)
+ at Table(name = "TBLASSET")
+public class Asset {
+	private Integer id;
+
+	private Parent parent = null;
+
+	@Id @GeneratedValue public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	@ManyToOne(targetEntity = Parent.class)
+	@JoinColumn(name = "PARENTID")
+	public Parent getParent() {
+		return parent;
+	}
+
+	public void setParent(Parent parent) {
+		this.parent = parent;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Clothing.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Clothing.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Clothing.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,46 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.inheritance.joined;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.Inheritance;
-import javax.persistence.InheritanceType;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Inheritance(strategy = InheritanceType.JOINED)
-public abstract class Clothing {
-	private long id;
-	private int size;
-	private String color;
-
-	@Id
-	@GeneratedValue
-	public long getId() {
-		return id;
-	}
-
-	public void setId(long id) {
-		this.id = id;
-	}
-
-	public int getSize() {
-		return size;
-	}
-
-	public void setSize(int size) {
-		this.size = size;
-	}
-
-	public String getColor() {
-		return color;
-	}
-
-	public void setColor(String color) {
-		this.color = color;
-	}
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Clothing.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Clothing.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Clothing.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Clothing.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,46 @@
+//$Id$
+package org.hibernate.test.annotations.inheritance.joined;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Inheritance(strategy = InheritanceType.JOINED)
+public abstract class Clothing {
+	private long id;
+	private int size;
+	private String color;
+
+	@Id
+	@GeneratedValue
+	public long getId() {
+		return id;
+	}
+
+	public void setId(long id) {
+		this.id = id;
+	}
+
+	public int getSize() {
+		return size;
+	}
+
+	public void setSize(int size) {
+		this.size = size;
+	}
+
+	public String getColor() {
+		return color;
+	}
+
+	public void setColor(String color) {
+		this.color = color;
+	}
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Document.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Document.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Document.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,33 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.inheritance.joined;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-
-import org.hibernate.annotations.ForeignKey;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at ForeignKey(name = "FK_DOCU_FILE")
-public class Document extends File {
-	@Column(nullable = false)
-	private int size;
-
-	Document() {
-	}
-
-	Document(String name, int size) {
-		super( name );
-		this.size = size;
-	}
-
-	public int getSize() {
-		return size;
-	}
-
-	public void setSize(int size) {
-		this.size = size;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Document.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Document.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Document.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Document.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,33 @@
+//$Id$
+package org.hibernate.test.annotations.inheritance.joined;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+
+import org.hibernate.annotations.ForeignKey;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at ForeignKey(name = "FK_DOCU_FILE")
+public class Document extends File {
+	@Column(nullable = false)
+	private int size;
+
+	Document() {
+	}
+
+	Document(String name, int size) {
+		super( name );
+		this.size = size;
+	}
+
+	public int getSize() {
+		return size;
+	}
+
+	public void setSize(int size) {
+		this.size = size;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/EventInformation.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/EventInformation.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/EventInformation.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,38 +0,0 @@
-//$Id: Sweater.java 8974 2006-01-04 00:43:49Z epbernard $
-package org.hibernate.test.annotations.inheritance.joined;
-
-import javax.persistence.DiscriminatorColumn;
-import javax.persistence.DiscriminatorType;
-import javax.persistence.DiscriminatorValue;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Inheritance;
-import javax.persistence.InheritanceType;
-
-
- at Entity
- at Inheritance(strategy = InheritanceType.JOINED)
- at DiscriminatorColumn(name = "DTYPE", discriminatorType = DiscriminatorType.STRING, length = 80)
- at DiscriminatorValue("EventInformationT")
-public class EventInformation implements java.io.Serializable {
-
-
-	protected String notificationId;
-
-	@Id
-	public String getNotificationId() {
-		return notificationId;
-	}
-
-	public void setNotificationId(String value) {
-		this.notificationId = value;
-	}
-
-	@Override
-	public String toString() {
-		StringBuilder sb = new StringBuilder();
-		sb.append( "EventInformationT: id = " + getNotificationId() );
-		return sb.toString();
-	}
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/EventInformation.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/EventInformation.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/EventInformation.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/EventInformation.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,38 @@
+//$Id: Sweater.java 8974 2006-01-04 00:43:49Z epbernard $
+package org.hibernate.test.annotations.inheritance.joined;
+
+import javax.persistence.DiscriminatorColumn;
+import javax.persistence.DiscriminatorType;
+import javax.persistence.DiscriminatorValue;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+
+
+ at Entity
+ at Inheritance(strategy = InheritanceType.JOINED)
+ at DiscriminatorColumn(name = "DTYPE", discriminatorType = DiscriminatorType.STRING, length = 80)
+ at DiscriminatorValue("EventInformationT")
+public class EventInformation implements java.io.Serializable {
+
+
+	protected String notificationId;
+
+	@Id
+	public String getNotificationId() {
+		return notificationId;
+	}
+
+	public void setNotificationId(String value) {
+		this.notificationId = value;
+	}
+
+	@Override
+	public String toString() {
+		StringBuilder sb = new StringBuilder();
+		sb.append( "EventInformationT: id = " + getNotificationId() );
+		return sb.toString();
+	}
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/File.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/File.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/File.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,45 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.inheritance.joined;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Inheritance;
-import javax.persistence.InheritanceType;
-import javax.persistence.ManyToOne;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Inheritance(strategy = InheritanceType.JOINED)
-public abstract class File {
-	@Id
-	private String name;
-	@ManyToOne
-	private Folder parent;
-
-	File() {
-	}
-
-	public File(String name) {
-		this.name = name;
-	}
-
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String id) {
-		this.name = id;
-	}
-
-	public Folder getParent() {
-		return parent;
-	}
-
-	public void setParent(Folder parent) {
-		this.parent = parent;
-	}
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/File.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/File.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/File.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/File.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,45 @@
+//$Id$
+package org.hibernate.test.annotations.inheritance.joined;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+import javax.persistence.ManyToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Inheritance(strategy = InheritanceType.JOINED)
+public abstract class File {
+	@Id
+	private String name;
+	@ManyToOne
+	private Folder parent;
+
+	File() {
+	}
+
+	public File(String name) {
+		this.name = name;
+	}
+
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String id) {
+		this.name = id;
+	}
+
+	public Folder getParent() {
+		return parent;
+	}
+
+	public void setParent(Folder parent) {
+		this.parent = parent;
+	}
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/FinancialAsset.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/FinancialAsset.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/FinancialAsset.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,20 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.inheritance.joined;
-
-import javax.persistence.Entity;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class FinancialAsset extends Asset {
-	private double price;
-
-	public double getPrice() {
-		return price;
-	}
-
-	public void setPrice(double price) {
-		this.price = price;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/FinancialAsset.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/FinancialAsset.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/FinancialAsset.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/FinancialAsset.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,20 @@
+//$Id: $
+package org.hibernate.test.annotations.inheritance.joined;
+
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class FinancialAsset extends Asset {
+	private double price;
+
+	public double getPrice() {
+		return price;
+	}
+
+	public void setPrice(double price) {
+		this.price = price;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Folder.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Folder.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Folder.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,31 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.inheritance.joined;
-
-import java.util.HashSet;
-import java.util.Set;
-import javax.persistence.Entity;
-import javax.persistence.OneToMany;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Folder extends File {
-	@OneToMany(mappedBy = "parent")
-	private Set<File> children = new HashSet<File>();
-
-	Folder() {
-	}
-
-	public Folder(String name) {
-		super( name );
-	}
-
-	public Set<File> getChildren() {
-		return children;
-	}
-
-	public void setChildren(Set children) {
-		this.children = children;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Folder.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Folder.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Folder.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Folder.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,31 @@
+//$Id$
+package org.hibernate.test.annotations.inheritance.joined;
+
+import java.util.HashSet;
+import java.util.Set;
+import javax.persistence.Entity;
+import javax.persistence.OneToMany;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Folder extends File {
+	@OneToMany(mappedBy = "parent")
+	private Set<File> children = new HashSet<File>();
+
+	Folder() {
+	}
+
+	public Folder(String name) {
+		super( name );
+	}
+
+	public Set<File> getChildren() {
+		return children;
+	}
+
+	public void setChildren(Set children) {
+		this.children = children;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/JoinedSubclassAndSecondaryTable.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/JoinedSubclassAndSecondaryTable.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/JoinedSubclassAndSecondaryTable.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,33 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.inheritance.joined;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-import org.hibernate.test.annotations.TestCase;
-
-/**
- * @author Emmanuel Bernard
- */
-public class JoinedSubclassAndSecondaryTable extends TestCase {
-
-	public void testSecondaryTableAndJoined() throws Exception {
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		SwimmingPool sp = new SwimmingPool();
-		sp.setAddress( "Park Avenue" );
-		s.persist( sp );
-		tx.rollback();
-		s.close();
-	}
-
-	/**
-	 * @see org.hibernate.test.annotations.TestCase#getMappings()
-	 */
-	protected Class[] getMappings() {
-		return new Class[]{
-				Pool.class,
-				SwimmingPool.class
-		};
-	}
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/JoinedSubclassAndSecondaryTable.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/JoinedSubclassAndSecondaryTable.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/JoinedSubclassAndSecondaryTable.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/JoinedSubclassAndSecondaryTable.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,33 @@
+//$Id: $
+package org.hibernate.test.annotations.inheritance.joined;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class JoinedSubclassAndSecondaryTable extends TestCase {
+
+	public void testSecondaryTableAndJoined() throws Exception {
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		SwimmingPool sp = new SwimmingPool();
+		sp.setAddress( "Park Avenue" );
+		s.persist( sp );
+		tx.rollback();
+		s.close();
+	}
+
+	/**
+	 * @see org.hibernate.test.annotations.TestCase#getMappings()
+	 */
+	protected Class[] getMappings() {
+		return new Class[]{
+				Pool.class,
+				SwimmingPool.class
+		};
+	}
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/JoinedSubclassTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/JoinedSubclassTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/JoinedSubclassTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,178 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.inheritance.joined;
-
-import java.util.List;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-import org.hibernate.test.annotations.TestCase;
-
-/**
- * @author Emmanuel Bernard
- */
-public class JoinedSubclassTest extends TestCase {
-
-	public JoinedSubclassTest(String x) {
-		super( x );
-	}
-
-	public void testDefault() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		File doc = new Document( "Enron Stuff To Shred", 1000 );
-		Folder folder = new Folder( "Enron" );
-		s.persist( doc );
-		s.persist( folder );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		List result = s.createCriteria( File.class ).list();
-		assertNotNull( result );
-		assertEquals( 2, result.size() );
-		File f2 = (File) result.get( 0 );
-		checkClassType( f2, doc, folder );
-		f2 = (File) result.get( 1 );
-		checkClassType( f2, doc, folder );
-		s.delete( result.get( 0 ) );
-		s.delete( result.get( 1 ) );
-		tx.commit();
-		s.close();
-	}
-
-	public void testManyToOneOnAbstract() throws Exception {
-		Folder f = new Folder();
-		f.setName( "data" );
-		ProgramExecution remove = new ProgramExecution();
-		remove.setAction( "remove" );
-		remove.setAppliesOn( f );
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		s.persist( f );
-		s.persist( remove );
-		tx.commit();
-		s.clear();
-		tx = s.beginTransaction();
-		remove = (ProgramExecution) s.get( ProgramExecution.class, remove.getId() );
-		assertNotNull( remove );
-		assertNotNull( remove.getAppliesOn().getName() );
-		s.delete( remove );
-		s.delete( remove.getAppliesOn() );
-		tx.commit();
-		s.close();
-
-	}
-
-	private void checkClassType(File fruitToTest, File f, Folder a) {
-		if ( fruitToTest.getName().equals( f.getName() ) ) {
-			assertFalse( fruitToTest instanceof Folder );
-		}
-		else if ( fruitToTest.getName().equals( a.getName() ) ) {
-			assertTrue( fruitToTest instanceof Folder );
-		}
-		else {
-			fail( "Result does not contains the previously inserted elements" );
-		}
-	}
-
-	public void testJoinedAbstractClass() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		s.getTransaction().begin();
-		Sweater sw = new Sweater();
-		sw.setColor( "Black" );
-		sw.setSize( 2 );
-		sw.setSweat( true );
-		s.persist( sw );
-		s.getTransaction().commit();
-		s.clear();
-
-		s = openSession();
-		s.getTransaction().begin();
-		sw = (Sweater) s.get( Sweater.class, sw.getId() );
-		s.delete( sw );
-		s.getTransaction().commit();
-		s.close();
-	}
-
-	public void testInheritance() throws Exception {
-		Session session = openSession();
-		Transaction transaction = session.beginTransaction();
-		String eventPK = "event1";
-		EventInformation event = (EventInformation) session.get( EventInformation.class, eventPK );
-		if ( event == null ) {
-			event = new EventInformation();
-			event.setNotificationId( eventPK );
-			session.persist( event );
-		}
-		String alarmPK = "alarm1";
-		Alarm alarm = (Alarm) session.get( Alarm.class, alarmPK );
-		if ( alarm == null ) {
-			alarm = new Alarm();
-			alarm.setNotificationId( alarmPK );
-			alarm.setEventInfo( event );
-			session.persist( alarm );
-		}
-		transaction.commit();
-		session.close();
-	}
-
-//	public void testManyToOneAndJoin() throws Exception {
-//		Session session = openSession();
-//		Transaction transaction = session.beginTransaction();
-//		Parent parent = new Parent();
-//		session.persist( parent );
-//		PropertyAsset property = new PropertyAsset();
-//		property.setParent( parent );
-//		property.setPrice( 230000d );
-//		FinancialAsset financial = new FinancialAsset();
-//		financial.setParent( parent );
-//		financial.setPrice( 230000d );
-//		session.persist( financial );
-//		session.persist( property );
-//		session.flush();
-//		session.clear();
-//		parent = (Parent) session.get( Parent.class, parent.getId() );
-//		assertNotNull( parent );
-//		assertEquals( 1, parent.getFinancialAssets().size() );
-//		assertEquals( 1, parent.getPropertyAssets().size() );
-//		assertEquals( property.getId(), parent.getPropertyAssets().iterator().next() );
-//		transaction.rollback();
-//		session.close();
-//	}
-
-	@Override
-	protected String[] getXmlFiles() {
-		return new String[] {
-				//"org/hibernate/test/annotations/inheritance/joined/Asset.hbm.xml"
-		};
-	}
-
-	/**
-	 * @see org.hibernate.test.annotations.TestCase#getMappings()
-	 */
-	protected Class[] getMappings() {
-		return new Class[]{
-				File.class,
-				Folder.class,
-				Document.class,
-				SymbolicLink.class,
-				ProgramExecution.class,
-				Clothing.class,
-				Sweater.class,
-				EventInformation.class,
-				Alarm.class,
-				//Asset.class,
-				//Parent.class,
-				//PropertyAsset.class,
-				//FinancialAsset.class
-		};
-	}
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/JoinedSubclassTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/JoinedSubclassTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/JoinedSubclassTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/JoinedSubclassTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,178 @@
+//$Id$
+package org.hibernate.test.annotations.inheritance.joined;
+
+import java.util.List;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class JoinedSubclassTest extends TestCase {
+
+	public JoinedSubclassTest(String x) {
+		super( x );
+	}
+
+	public void testDefault() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		File doc = new Document( "Enron Stuff To Shred", 1000 );
+		Folder folder = new Folder( "Enron" );
+		s.persist( doc );
+		s.persist( folder );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		List result = s.createCriteria( File.class ).list();
+		assertNotNull( result );
+		assertEquals( 2, result.size() );
+		File f2 = (File) result.get( 0 );
+		checkClassType( f2, doc, folder );
+		f2 = (File) result.get( 1 );
+		checkClassType( f2, doc, folder );
+		s.delete( result.get( 0 ) );
+		s.delete( result.get( 1 ) );
+		tx.commit();
+		s.close();
+	}
+
+	public void testManyToOneOnAbstract() throws Exception {
+		Folder f = new Folder();
+		f.setName( "data" );
+		ProgramExecution remove = new ProgramExecution();
+		remove.setAction( "remove" );
+		remove.setAppliesOn( f );
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		s.persist( f );
+		s.persist( remove );
+		tx.commit();
+		s.clear();
+		tx = s.beginTransaction();
+		remove = (ProgramExecution) s.get( ProgramExecution.class, remove.getId() );
+		assertNotNull( remove );
+		assertNotNull( remove.getAppliesOn().getName() );
+		s.delete( remove );
+		s.delete( remove.getAppliesOn() );
+		tx.commit();
+		s.close();
+
+	}
+
+	private void checkClassType(File fruitToTest, File f, Folder a) {
+		if ( fruitToTest.getName().equals( f.getName() ) ) {
+			assertFalse( fruitToTest instanceof Folder );
+		}
+		else if ( fruitToTest.getName().equals( a.getName() ) ) {
+			assertTrue( fruitToTest instanceof Folder );
+		}
+		else {
+			fail( "Result does not contains the previously inserted elements" );
+		}
+	}
+
+	public void testJoinedAbstractClass() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		s.getTransaction().begin();
+		Sweater sw = new Sweater();
+		sw.setColor( "Black" );
+		sw.setSize( 2 );
+		sw.setSweat( true );
+		s.persist( sw );
+		s.getTransaction().commit();
+		s.clear();
+
+		s = openSession();
+		s.getTransaction().begin();
+		sw = (Sweater) s.get( Sweater.class, sw.getId() );
+		s.delete( sw );
+		s.getTransaction().commit();
+		s.close();
+	}
+
+	public void testInheritance() throws Exception {
+		Session session = openSession();
+		Transaction transaction = session.beginTransaction();
+		String eventPK = "event1";
+		EventInformation event = (EventInformation) session.get( EventInformation.class, eventPK );
+		if ( event == null ) {
+			event = new EventInformation();
+			event.setNotificationId( eventPK );
+			session.persist( event );
+		}
+		String alarmPK = "alarm1";
+		Alarm alarm = (Alarm) session.get( Alarm.class, alarmPK );
+		if ( alarm == null ) {
+			alarm = new Alarm();
+			alarm.setNotificationId( alarmPK );
+			alarm.setEventInfo( event );
+			session.persist( alarm );
+		}
+		transaction.commit();
+		session.close();
+	}
+
+//	public void testManyToOneAndJoin() throws Exception {
+//		Session session = openSession();
+//		Transaction transaction = session.beginTransaction();
+//		Parent parent = new Parent();
+//		session.persist( parent );
+//		PropertyAsset property = new PropertyAsset();
+//		property.setParent( parent );
+//		property.setPrice( 230000d );
+//		FinancialAsset financial = new FinancialAsset();
+//		financial.setParent( parent );
+//		financial.setPrice( 230000d );
+//		session.persist( financial );
+//		session.persist( property );
+//		session.flush();
+//		session.clear();
+//		parent = (Parent) session.get( Parent.class, parent.getId() );
+//		assertNotNull( parent );
+//		assertEquals( 1, parent.getFinancialAssets().size() );
+//		assertEquals( 1, parent.getPropertyAssets().size() );
+//		assertEquals( property.getId(), parent.getPropertyAssets().iterator().next() );
+//		transaction.rollback();
+//		session.close();
+//	}
+
+	@Override
+	protected String[] getXmlFiles() {
+		return new String[] {
+				//"org/hibernate/test/annotations/inheritance/joined/Asset.hbm.xml"
+		};
+	}
+
+	/**
+	 * @see org.hibernate.test.annotations.TestCase#getMappings()
+	 */
+	protected Class[] getMappings() {
+		return new Class[]{
+				File.class,
+				Folder.class,
+				Document.class,
+				SymbolicLink.class,
+				ProgramExecution.class,
+				Clothing.class,
+				Sweater.class,
+				EventInformation.class,
+				Alarm.class,
+				//Asset.class,
+				//Parent.class,
+				//PropertyAsset.class,
+				//FinancialAsset.class
+		};
+	}
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Parent.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Parent.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Parent.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,49 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.inheritance.joined;
-
-import java.util.HashSet;
-import java.util.Set;
-import javax.persistence.CascadeType;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.OneToMany;
-import javax.persistence.Table;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Table(name = "Parent")
-public class Parent {
-	private Integer id;
-	private Set propertyAssets = new HashSet();
-	private Set financialAssets = new HashSet();
-
-	@Id @GeneratedValue public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	@OneToMany(cascade = CascadeType.REFRESH, fetch = FetchType.EAGER, mappedBy = "parent", targetEntity = PropertyAsset.class)
-	public Set getPropertyAssets() {
-		return this.propertyAssets;
-	}
-
-	public void setPropertyAssets(Set propertyAssets) {
-		this.propertyAssets = propertyAssets;
-	}
-
-	@OneToMany(cascade = CascadeType.REFRESH, fetch = FetchType.EAGER, mappedBy = "parent", targetEntity = FinancialAsset.class)
-	public Set getFinancialAssets() {
-		return this.financialAssets;
-	}
-
-	public void setFinancialAssets(Set financialAssets) {
-		this.financialAssets = financialAssets;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Parent.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Parent.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Parent.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Parent.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,49 @@
+//$Id: $
+package org.hibernate.test.annotations.inheritance.joined;
+
+import java.util.HashSet;
+import java.util.Set;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Table(name = "Parent")
+public class Parent {
+	private Integer id;
+	private Set propertyAssets = new HashSet();
+	private Set financialAssets = new HashSet();
+
+	@Id @GeneratedValue public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	@OneToMany(cascade = CascadeType.REFRESH, fetch = FetchType.EAGER, mappedBy = "parent", targetEntity = PropertyAsset.class)
+	public Set getPropertyAssets() {
+		return this.propertyAssets;
+	}
+
+	public void setPropertyAssets(Set propertyAssets) {
+		this.propertyAssets = propertyAssets;
+	}
+
+	@OneToMany(cascade = CascadeType.REFRESH, fetch = FetchType.EAGER, mappedBy = "parent", targetEntity = FinancialAsset.class)
+	public Set getFinancialAssets() {
+		return this.financialAssets;
+	}
+
+	public void setFinancialAssets(Set financialAssets) {
+		this.financialAssets = financialAssets;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Pool.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Pool.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Pool.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,38 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.inheritance.joined;
-
-import javax.persistence.Entity;
-import javax.persistence.SecondaryTable;
-import javax.persistence.Column;
-import javax.persistence.Id;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Inheritance;
-import javax.persistence.InheritanceType;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Inheritance(strategy = InheritanceType.JOINED)
- at SecondaryTable(name="POOL_ADDRESS")
-public class Pool {
-	@Id @GeneratedValue private Integer id;
-	@Column(table = "POOL_ADDRESS")
-	private String address;
-
-	public String getAddress() {
-		return address;
-	}
-
-	public void setAddress(String address) {
-		this.address = address;
-	}
-
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Pool.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Pool.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Pool.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Pool.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,38 @@
+//$Id: $
+package org.hibernate.test.annotations.inheritance.joined;
+
+import javax.persistence.Entity;
+import javax.persistence.SecondaryTable;
+import javax.persistence.Column;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Inheritance(strategy = InheritanceType.JOINED)
+ at SecondaryTable(name="POOL_ADDRESS")
+public class Pool {
+	@Id @GeneratedValue private Integer id;
+	@Column(table = "POOL_ADDRESS")
+	private String address;
+
+	public String getAddress() {
+		return address;
+	}
+
+	public void setAddress(String address) {
+		this.address = address;
+	}
+
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/ProgramExecution.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/ProgramExecution.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/ProgramExecution.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,47 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.inheritance.joined;
-
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.ManyToOne;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class ProgramExecution {
-	@Id
-	@GeneratedValue
-	private Integer id;
-	private String action;
-	@ManyToOne(fetch = FetchType.LAZY)
-	private File appliesOn;
-
-
-	public File getAppliesOn() {
-		return appliesOn;
-	}
-
-	public void setAppliesOn(File appliesOn) {
-		this.appliesOn = appliesOn;
-	}
-
-	public String getAction() {
-		return action;
-	}
-
-	public void setAction(String action) {
-		this.action = action;
-	}
-
-
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/ProgramExecution.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/ProgramExecution.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/ProgramExecution.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/ProgramExecution.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,47 @@
+//$Id$
+package org.hibernate.test.annotations.inheritance.joined;
+
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class ProgramExecution {
+	@Id
+	@GeneratedValue
+	private Integer id;
+	private String action;
+	@ManyToOne(fetch = FetchType.LAZY)
+	private File appliesOn;
+
+
+	public File getAppliesOn() {
+		return appliesOn;
+	}
+
+	public void setAppliesOn(File appliesOn) {
+		this.appliesOn = appliesOn;
+	}
+
+	public String getAction() {
+		return action;
+	}
+
+	public void setAction(String action) {
+		this.action = action;
+	}
+
+
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/PropertyAsset.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/PropertyAsset.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/PropertyAsset.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,20 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.inheritance.joined;
-
-import javax.persistence.Entity;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class PropertyAsset extends Asset {
-	private double price;
-
-	public double getPrice() {
-		return price;
-	}
-
-	public void setPrice(double price) {
-		this.price = price;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/PropertyAsset.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/PropertyAsset.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/PropertyAsset.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/PropertyAsset.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,20 @@
+//$Id: $
+package org.hibernate.test.annotations.inheritance.joined;
+
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class PropertyAsset extends Asset {
+	private double price;
+
+	public double getPrice() {
+		return price;
+	}
+
+	public void setPrice(double price) {
+		this.price = price;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Sweater.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Sweater.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Sweater.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,22 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.inheritance.joined;
-
-import javax.persistence.Entity;
-import javax.persistence.PrimaryKeyJoinColumn;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at PrimaryKeyJoinColumn(name = "clothing_id")
-public class Sweater extends Clothing {
-	private boolean isSweat;
-
-	public boolean isSweat() {
-		return isSweat;
-	}
-
-	public void setSweat(boolean sweat) {
-		isSweat = sweat;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Sweater.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Sweater.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Sweater.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/Sweater.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,22 @@
+//$Id$
+package org.hibernate.test.annotations.inheritance.joined;
+
+import javax.persistence.Entity;
+import javax.persistence.PrimaryKeyJoinColumn;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at PrimaryKeyJoinColumn(name = "clothing_id")
+public class Sweater extends Clothing {
+	private boolean isSweat;
+
+	public boolean isSweat() {
+		return isSweat;
+	}
+
+	public void setSweat(boolean sweat) {
+		isSweat = sweat;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/SwimmingPool.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/SwimmingPool.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/SwimmingPool.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,11 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.inheritance.joined;
-
-import javax.persistence.Entity;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class SwimmingPool extends Pool {
-}
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/SwimmingPool.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/SwimmingPool.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/SwimmingPool.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/SwimmingPool.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,11 @@
+//$Id: $
+package org.hibernate.test.annotations.inheritance.joined;
+
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class SwimmingPool extends Pool {
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/SymbolicLink.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/SymbolicLink.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/SymbolicLink.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,29 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.inheritance.joined;
-
-import javax.persistence.Entity;
-import javax.persistence.ManyToOne;
-
- at Entity
-public class SymbolicLink extends File {
-
-	@ManyToOne(optional = false)
-	File target;
-
-	SymbolicLink() {
-	}
-
-	public SymbolicLink(File target) {
-		this.target = target;
-	}
-
-	public File getTarget() {
-		return target;
-	}
-
-	public void setTarget(File target) {
-		this.target = target;
-	}
-
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/SymbolicLink.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/SymbolicLink.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/SymbolicLink.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/joined/SymbolicLink.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,29 @@
+//$Id$
+package org.hibernate.test.annotations.inheritance.joined;
+
+import javax.persistence.Entity;
+import javax.persistence.ManyToOne;
+
+ at Entity
+public class SymbolicLink extends File {
+
+	@ManyToOne(optional = false)
+	File target;
+
+	SymbolicLink() {
+	}
+
+	public SymbolicLink(File target) {
+		this.target = target;
+	}
+
+	public File getTarget() {
+		return target;
+	}
+
+	public void setTarget(File target) {
+		this.target = target;
+	}
+
+
+}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/mixed (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/mixed)

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/mixed/Document.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/mixed/Document.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/mixed/Document.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,36 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.inheritance.mixed;
-
-import javax.persistence.Column;
-import javax.persistence.DiscriminatorValue;
-import javax.persistence.Entity;
-import javax.persistence.SecondaryTable;
-import javax.persistence.Table;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at DiscriminatorValue("D")
- at SecondaryTable(name = "DocumentMixed")
- at Table(name="Document_Wrong") //illegal use, a warn is raised
-public class Document extends File {
-	private int size;
-
-	Document() {
-	}
-
-	Document(String name, int size) {
-		super( name );
-		this.size = size;
-	}
-
-	@Column(table = "DocumentMixed", nullable = false)
-	public int getSize() {
-		return size;
-	}
-
-	public void setSize(int size) {
-		this.size = size;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/mixed/Document.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/mixed/Document.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/mixed/Document.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/mixed/Document.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,36 @@
+//$Id$
+package org.hibernate.test.annotations.inheritance.mixed;
+
+import javax.persistence.Column;
+import javax.persistence.DiscriminatorValue;
+import javax.persistence.Entity;
+import javax.persistence.SecondaryTable;
+import javax.persistence.Table;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at DiscriminatorValue("D")
+ at SecondaryTable(name = "DocumentMixed")
+ at Table(name="Document_Wrong") //illegal use, a warn is raised
+public class Document extends File {
+	private int size;
+
+	Document() {
+	}
+
+	Document(String name, int size) {
+		super( name );
+		this.size = size;
+	}
+
+	@Column(table = "DocumentMixed", nullable = false)
+	public int getSize() {
+		return size;
+	}
+
+	public void setSize(int size) {
+		this.size = size;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/mixed/File.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/mixed/File.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/mixed/File.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,52 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.inheritance.mixed;
-
-import javax.persistence.DiscriminatorColumn;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Inheritance;
-import javax.persistence.InheritanceType;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-import javax.persistence.SecondaryTable;
-import javax.persistence.Table;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Inheritance(strategy = InheritanceType.SINGLE_TABLE)
- at Table(name = "FileMixed")
- at SecondaryTable(name = "FileFolderMixed")
- at DiscriminatorColumn(length = 1)
-public abstract class File {
-	private String name;
-	private Folder parent;
-
-	File() {
-	}
-
-	public File(String name) {
-		this.name = name;
-	}
-
-	@Id
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String id) {
-		this.name = id;
-	}
-
-	@ManyToOne
-	@JoinColumn(table = "FileFolderMixed")
-	public Folder getParent() {
-		return parent;
-	}
-
-	public void setParent(Folder parent) {
-		this.parent = parent;
-	}
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/mixed/File.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/mixed/File.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/mixed/File.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/mixed/File.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,52 @@
+//$Id$
+package org.hibernate.test.annotations.inheritance.mixed;
+
+import javax.persistence.DiscriminatorColumn;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.SecondaryTable;
+import javax.persistence.Table;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Inheritance(strategy = InheritanceType.SINGLE_TABLE)
+ at Table(name = "FileMixed")
+ at SecondaryTable(name = "FileFolderMixed")
+ at DiscriminatorColumn(length = 1)
+public abstract class File {
+	private String name;
+	private Folder parent;
+
+	File() {
+	}
+
+	public File(String name) {
+		this.name = name;
+	}
+
+	@Id
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String id) {
+		this.name = id;
+	}
+
+	@ManyToOne
+	@JoinColumn(table = "FileFolderMixed")
+	public Folder getParent() {
+		return parent;
+	}
+
+	public void setParent(Folder parent) {
+		this.parent = parent;
+	}
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/mixed/Folder.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/mixed/Folder.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/mixed/Folder.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,33 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.inheritance.mixed;
-
-import java.util.HashSet;
-import java.util.Set;
-import javax.persistence.DiscriminatorValue;
-import javax.persistence.Entity;
-import javax.persistence.OneToMany;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at DiscriminatorValue("F")
-public class Folder extends File {
-	private Set<File> children = new HashSet<File>();
-
-	Folder() {
-	}
-
-	public Folder(String name) {
-		super( name );
-	}
-
-	@OneToMany(mappedBy = "parent")
-	public Set<File> getChildren() {
-		return children;
-	}
-
-	public void setChildren(Set children) {
-		this.children = children;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/mixed/Folder.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/mixed/Folder.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/mixed/Folder.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/mixed/Folder.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,33 @@
+//$Id$
+package org.hibernate.test.annotations.inheritance.mixed;
+
+import java.util.HashSet;
+import java.util.Set;
+import javax.persistence.DiscriminatorValue;
+import javax.persistence.Entity;
+import javax.persistence.OneToMany;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at DiscriminatorValue("F")
+public class Folder extends File {
+	private Set<File> children = new HashSet<File>();
+
+	Folder() {
+	}
+
+	public Folder(String name) {
+		super( name );
+	}
+
+	@OneToMany(mappedBy = "parent")
+	public Set<File> getChildren() {
+		return children;
+	}
+
+	public void setChildren(Set children) {
+		this.children = children;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/mixed/SubclassTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/mixed/SubclassTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/mixed/SubclassTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,76 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.inheritance.mixed;
-
-import java.util.List;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-import org.hibernate.exception.SQLGrammarException;
-import org.hibernate.test.annotations.TestCase;
-
-/**
- * @author Emmanuel Bernard
- */
-public class SubclassTest extends TestCase {
-
-	public SubclassTest(String x) {
-		super( x );
-	}
-
-	public void testDefault() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		File doc = new Document( "Enron Stuff To Shred", 1000 );
-		Folder folder = new Folder( "Enron" );
-		s.persist( doc );
-		s.persist( folder );
-		try {
-			tx.commit();
-		}
-		catch (SQLGrammarException e) {
-			System.err.println( e.getSQLException().getNextException() );
-		}
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		List result = s.createCriteria( File.class ).list();
-		assertNotNull( result );
-		assertEquals( 2, result.size() );
-		File f2 = (File) result.get( 0 );
-		checkClassType( f2, doc, folder );
-		f2 = (File) result.get( 1 );
-		checkClassType( f2, doc, folder );
-		s.delete( result.get( 0 ) );
-		s.delete( result.get( 1 ) );
-		tx.commit();
-		s.close();
-	}
-
-	private void checkClassType(File fruitToTest, File f, Folder a) {
-		if ( fruitToTest.getName().equals( f.getName() ) ) {
-			assertFalse( fruitToTest instanceof Folder );
-		}
-		else if ( fruitToTest.getName().equals( a.getName() ) ) {
-			assertTrue( fruitToTest instanceof Folder );
-		}
-		else {
-			fail( "Result does not contains the previously inserted elements" );
-		}
-	}
-
-	/**
-	 * @see org.hibernate.test.annotations.TestCase#getMappings()
-	 */
-	protected Class[] getMappings() {
-		return new Class[]{
-				File.class,
-				Folder.class,
-				Document.class,
-				SymbolicLink.class
-		};
-	}
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/mixed/SubclassTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/mixed/SubclassTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/mixed/SubclassTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/mixed/SubclassTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,76 @@
+//$Id$
+package org.hibernate.test.annotations.inheritance.mixed;
+
+import java.util.List;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.exception.SQLGrammarException;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class SubclassTest extends TestCase {
+
+	public SubclassTest(String x) {
+		super( x );
+	}
+
+	public void testDefault() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		File doc = new Document( "Enron Stuff To Shred", 1000 );
+		Folder folder = new Folder( "Enron" );
+		s.persist( doc );
+		s.persist( folder );
+		try {
+			tx.commit();
+		}
+		catch (SQLGrammarException e) {
+			System.err.println( e.getSQLException().getNextException() );
+		}
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		List result = s.createCriteria( File.class ).list();
+		assertNotNull( result );
+		assertEquals( 2, result.size() );
+		File f2 = (File) result.get( 0 );
+		checkClassType( f2, doc, folder );
+		f2 = (File) result.get( 1 );
+		checkClassType( f2, doc, folder );
+		s.delete( result.get( 0 ) );
+		s.delete( result.get( 1 ) );
+		tx.commit();
+		s.close();
+	}
+
+	private void checkClassType(File fruitToTest, File f, Folder a) {
+		if ( fruitToTest.getName().equals( f.getName() ) ) {
+			assertFalse( fruitToTest instanceof Folder );
+		}
+		else if ( fruitToTest.getName().equals( a.getName() ) ) {
+			assertTrue( fruitToTest instanceof Folder );
+		}
+		else {
+			fail( "Result does not contains the previously inserted elements" );
+		}
+	}
+
+	/**
+	 * @see org.hibernate.test.annotations.TestCase#getMappings()
+	 */
+	protected Class[] getMappings() {
+		return new Class[]{
+				File.class,
+				Folder.class,
+				Document.class,
+				SymbolicLink.class
+		};
+	}
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/mixed/SymbolicLink.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/mixed/SymbolicLink.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/mixed/SymbolicLink.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,35 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.inheritance.mixed;
-
-import javax.persistence.DiscriminatorValue;
-import javax.persistence.Entity;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-import javax.persistence.SecondaryTable;
-
- at Entity
- at DiscriminatorValue("L")
- at SecondaryTable(name = "SymbolicLinkMixed")
-public class SymbolicLink extends File {
-
-	File target;
-
-	SymbolicLink() {
-	}
-
-	public SymbolicLink(File target) {
-		this.target = target;
-	}
-
-	@ManyToOne(optional = false)
-	@JoinColumn(table = "SymbolicLinkMixed")
-	public File getTarget() {
-		return target;
-	}
-
-	public void setTarget(File target) {
-		this.target = target;
-	}
-
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/mixed/SymbolicLink.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/mixed/SymbolicLink.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/mixed/SymbolicLink.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/mixed/SymbolicLink.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,35 @@
+//$Id$
+package org.hibernate.test.annotations.inheritance.mixed;
+
+import javax.persistence.DiscriminatorValue;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.SecondaryTable;
+
+ at Entity
+ at DiscriminatorValue("L")
+ at SecondaryTable(name = "SymbolicLinkMixed")
+public class SymbolicLink extends File {
+
+	File target;
+
+	SymbolicLink() {
+	}
+
+	public SymbolicLink(File target) {
+		this.target = target;
+	}
+
+	@ManyToOne(optional = false)
+	@JoinColumn(table = "SymbolicLinkMixed")
+	public File getTarget() {
+		return target;
+	}
+
+	public void setTarget(File target) {
+		this.target = target;
+	}
+
+
+}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable)

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/Building.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/Building.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/Building.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,43 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.inheritance.singletable;
-
-import javax.persistence.Column;
-import javax.persistence.DiscriminatorColumn;
-import javax.persistence.DiscriminatorValue;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-
-import org.hibernate.annotations.ForceDiscriminator;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at DiscriminatorColumn(name = "discriminator_disc")
- at ForceDiscriminator
- at DiscriminatorValue("B")
-public class Building {
-	@Id
-	@GeneratedValue
-	@Column(name = "discriminator_id")
-	private Integer id;
-	@Column(name = "discriminator_street")
-	private String street;
-
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getStreet() {
-		return street;
-	}
-
-	public void setStreet(String street) {
-		this.street = street;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/Building.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/Building.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/Building.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/Building.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,43 @@
+//$Id$
+package org.hibernate.test.annotations.inheritance.singletable;
+
+import javax.persistence.Column;
+import javax.persistence.DiscriminatorColumn;
+import javax.persistence.DiscriminatorValue;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+import org.hibernate.annotations.ForceDiscriminator;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at DiscriminatorColumn(name = "discriminator_disc")
+ at ForceDiscriminator
+ at DiscriminatorValue("B")
+public class Building {
+	@Id
+	@GeneratedValue
+	@Column(name = "discriminator_id")
+	private Integer id;
+	@Column(name = "discriminator_street")
+	private String street;
+
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getStreet() {
+		return street;
+	}
+
+	public void setStreet(String street) {
+		this.street = street;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/Funk.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/Funk.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/Funk.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,22 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.inheritance.singletable;
-
-import javax.persistence.DiscriminatorValue;
-import javax.persistence.Entity;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at DiscriminatorValue("1")
-public class Funk extends Music {
-	private int starred;
-
-	public int getStarred() {
-		return starred;
-	}
-
-	public void setStarred(int starred) {
-		this.starred = starred;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/Funk.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/Funk.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/Funk.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/Funk.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,22 @@
+//$Id$
+package org.hibernate.test.annotations.inheritance.singletable;
+
+import javax.persistence.DiscriminatorValue;
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at DiscriminatorValue("1")
+public class Funk extends Music {
+	private int starred;
+
+	public int getStarred() {
+		return starred;
+	}
+
+	public void setStarred(int starred) {
+		this.starred = starred;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/House.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/House.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/House.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,13 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.inheritance.singletable;
-
-import javax.persistence.DiscriminatorValue;
-import javax.persistence.Entity;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at DiscriminatorValue("H")
-public class House extends Building {
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/House.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/House.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/House.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/House.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,13 @@
+//$Id$
+package org.hibernate.test.annotations.inheritance.singletable;
+
+import javax.persistence.DiscriminatorValue;
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at DiscriminatorValue("H")
+public class House extends Building {
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/Music.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/Music.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/Music.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,50 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.inheritance.singletable;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.Table;
-import javax.persistence.UniqueConstraint;
-
-import org.hibernate.annotations.DiscriminatorFormula;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at DiscriminatorFormula("case when zik_type is null then 0 else zik_type end")
- at Table(uniqueConstraints = @UniqueConstraint(columnNames = {"avgBeat", "starred"} ))
-public abstract class Music {
-	private Integer id;
-	private int avgBeat;
-	private Integer type;
-
-	@Column(name = "zik_type")
-	public Integer getType() {
-		return type;
-	}
-
-	public void setType(Integer type) {
-		this.type = type;
-	}
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public int getAvgBeat() {
-		return avgBeat;
-	}
-
-	public void setAvgBeat(int avgBeat) {
-		this.avgBeat = avgBeat;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/Music.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/Music.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/Music.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/Music.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,50 @@
+//$Id$
+package org.hibernate.test.annotations.inheritance.singletable;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.UniqueConstraint;
+
+import org.hibernate.annotations.DiscriminatorFormula;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at DiscriminatorFormula("case when zik_type is null then 0 else zik_type end")
+ at Table(uniqueConstraints = @UniqueConstraint(columnNames = {"avgBeat", "starred"} ))
+public abstract class Music {
+	private Integer id;
+	private int avgBeat;
+	private Integer type;
+
+	@Column(name = "zik_type")
+	public Integer getType() {
+		return type;
+	}
+
+	public void setType(Integer type) {
+		this.type = type;
+	}
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public int getAvgBeat() {
+		return avgBeat;
+	}
+
+	public void setAvgBeat(int avgBeat) {
+		this.avgBeat = avgBeat;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/Noise.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/Noise.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/Noise.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,13 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.inheritance.singletable;
-
-import javax.persistence.DiscriminatorValue;
-import javax.persistence.Entity;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at DiscriminatorValue("0")
-public class Noise extends Music {
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/Noise.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/Noise.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/Noise.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/Noise.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,13 @@
+//$Id$
+package org.hibernate.test.annotations.inheritance.singletable;
+
+import javax.persistence.DiscriminatorValue;
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at DiscriminatorValue("0")
+public class Noise extends Music {
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/PaperTrash.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/PaperTrash.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/PaperTrash.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,11 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.inheritance.singletable;
-
-import javax.persistence.Entity;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class PaperTrash extends Trash {
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/PaperTrash.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/PaperTrash.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/PaperTrash.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/PaperTrash.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,11 @@
+//$Id$
+package org.hibernate.test.annotations.inheritance.singletable;
+
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class PaperTrash extends Trash {
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/Rock.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/Rock.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/Rock.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,13 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.inheritance.singletable;
-
-import javax.persistence.DiscriminatorValue;
-import javax.persistence.Entity;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at DiscriminatorValue("2")
-public class Rock extends Music {
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/Rock.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/Rock.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/Rock.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/Rock.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,13 @@
+//$Id$
+package org.hibernate.test.annotations.inheritance.singletable;
+
+import javax.persistence.DiscriminatorValue;
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at DiscriminatorValue("2")
+public class Rock extends Music {
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/Trash.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/Trash.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/Trash.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,19 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.inheritance.singletable;
-
-import javax.persistence.DiscriminatorColumn;
-import javax.persistence.DiscriminatorType;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at DiscriminatorColumn(discriminatorType = DiscriminatorType.INTEGER)
-public class Trash {
-	@Id
-	@GeneratedValue
-	private Integer id;
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/Trash.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/Trash.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/Trash.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/singletable/Trash.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,19 @@
+//$Id$
+package org.hibernate.test.annotations.inheritance.singletable;
+
+import javax.persistence.DiscriminatorColumn;
+import javax.persistence.DiscriminatorType;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at DiscriminatorColumn(discriminatorType = DiscriminatorType.INTEGER)
+public class Trash {
+	@Id
+	@GeneratedValue
+	private Integer id;
+}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/union (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/union)

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/union/Document.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/union/Document.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/union/Document.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,30 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.inheritance.union;
-
-import javax.persistence.Entity;
-import javax.persistence.Table;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Table(name = "DocumentUnion")
-public class Document extends File {
-	private int size;
-
-	Document() {
-	}
-
-	Document(String name, int size) {
-		super( name );
-		this.size = size;
-	}
-
-	public int getSize() {
-		return size;
-	}
-
-	public void setSize(int size) {
-		this.size = size;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/union/Document.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/union/Document.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/union/Document.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/union/Document.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,30 @@
+//$Id$
+package org.hibernate.test.annotations.inheritance.union;
+
+import javax.persistence.Entity;
+import javax.persistence.Table;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Table(name = "DocumentUnion")
+public class Document extends File {
+	private int size;
+
+	Document() {
+	}
+
+	Document(String name, int size) {
+		super( name );
+		this.size = size;
+	}
+
+	public int getSize() {
+		return size;
+	}
+
+	public void setSize(int size) {
+		this.size = size;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/union/File.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/union/File.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/union/File.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,44 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.inheritance.union;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Inheritance;
-import javax.persistence.InheritanceType;
-import javax.persistence.ManyToOne;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
-public abstract class File {
-	private String name;
-	private Folder parent;
-
-	File() {
-	}
-
-	public File(String name) {
-		this.name = name;
-	}
-
-	@Id
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String id) {
-		this.name = id;
-	}
-
-	@ManyToOne
-	public Folder getParent() {
-		return parent;
-	}
-
-	public void setParent(Folder parent) {
-		this.parent = parent;
-	}
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/union/File.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/union/File.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/union/File.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/union/File.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,44 @@
+//$Id$
+package org.hibernate.test.annotations.inheritance.union;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+import javax.persistence.ManyToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
+public abstract class File {
+	private String name;
+	private Folder parent;
+
+	File() {
+	}
+
+	public File(String name) {
+		this.name = name;
+	}
+
+	@Id
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String id) {
+		this.name = id;
+	}
+
+	@ManyToOne
+	public Folder getParent() {
+		return parent;
+	}
+
+	public void setParent(Folder parent) {
+		this.parent = parent;
+	}
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/union/Folder.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/union/Folder.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/union/Folder.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,33 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.inheritance.union;
-
-import java.util.HashSet;
-import java.util.Set;
-import javax.persistence.Entity;
-import javax.persistence.OneToMany;
-import javax.persistence.Table;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Table(name = "FolderUnion")
-public class Folder extends File {
-	private Set<File> children = new HashSet<File>();
-
-	Folder() {
-	}
-
-	public Folder(String name) {
-		super( name );
-	}
-
-	@OneToMany(mappedBy = "parent")
-	public Set<File> getChildren() {
-		return children;
-	}
-
-	public void setChildren(Set children) {
-		this.children = children;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/union/Folder.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/union/Folder.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/union/Folder.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/union/Folder.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,33 @@
+//$Id$
+package org.hibernate.test.annotations.inheritance.union;
+
+import java.util.HashSet;
+import java.util.Set;
+import javax.persistence.Entity;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Table(name = "FolderUnion")
+public class Folder extends File {
+	private Set<File> children = new HashSet<File>();
+
+	Folder() {
+	}
+
+	public Folder(String name) {
+		super( name );
+	}
+
+	@OneToMany(mappedBy = "parent")
+	public Set<File> getChildren() {
+		return children;
+	}
+
+	public void setChildren(Set children) {
+		this.children = children;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/union/SubclassTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/union/SubclassTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/union/SubclassTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,68 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.inheritance.union;
-
-import java.util.List;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-import org.hibernate.test.annotations.TestCase;
-
-/**
- * @author Emmanuel Bernard
- */
-public class SubclassTest extends TestCase {
-
-	public SubclassTest(String x) {
-		super( x );
-	}
-
-	public void testDefault() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		File doc = new Document( "Enron Stuff To Shred", 1000 );
-		Folder folder = new Folder( "Enron" );
-		s.persist( doc );
-		s.persist( folder );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		List result = s.createCriteria( File.class ).list();
-		assertNotNull( result );
-		assertEquals( 2, result.size() );
-		File f2 = (File) result.get( 0 );
-		checkClassType( f2, doc, folder );
-		f2 = (File) result.get( 1 );
-		checkClassType( f2, doc, folder );
-		tx.commit();
-		s.close();
-	}
-
-	private void checkClassType(File fruitToTest, File f, Folder a) {
-		if ( fruitToTest.getName().equals( f.getName() ) ) {
-			assertFalse( fruitToTest instanceof Folder );
-		}
-		else if ( fruitToTest.getName().equals( a.getName() ) ) {
-			assertTrue( fruitToTest instanceof Folder );
-		}
-		else {
-			fail( "Result does not contains the previously inserted elements" );
-		}
-	}
-
-	/**
-	 * @see org.hibernate.test.annotations.TestCase#getMappings()
-	 */
-	protected Class[] getMappings() {
-		return new Class[]{
-				File.class,
-				Folder.class,
-				Document.class,
-				SymbolicLink.class
-		};
-	}
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/union/SubclassTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/union/SubclassTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/union/SubclassTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/union/SubclassTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,68 @@
+//$Id$
+package org.hibernate.test.annotations.inheritance.union;
+
+import java.util.List;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class SubclassTest extends TestCase {
+
+	public SubclassTest(String x) {
+		super( x );
+	}
+
+	public void testDefault() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		File doc = new Document( "Enron Stuff To Shred", 1000 );
+		Folder folder = new Folder( "Enron" );
+		s.persist( doc );
+		s.persist( folder );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		List result = s.createCriteria( File.class ).list();
+		assertNotNull( result );
+		assertEquals( 2, result.size() );
+		File f2 = (File) result.get( 0 );
+		checkClassType( f2, doc, folder );
+		f2 = (File) result.get( 1 );
+		checkClassType( f2, doc, folder );
+		tx.commit();
+		s.close();
+	}
+
+	private void checkClassType(File fruitToTest, File f, Folder a) {
+		if ( fruitToTest.getName().equals( f.getName() ) ) {
+			assertFalse( fruitToTest instanceof Folder );
+		}
+		else if ( fruitToTest.getName().equals( a.getName() ) ) {
+			assertTrue( fruitToTest instanceof Folder );
+		}
+		else {
+			fail( "Result does not contains the previously inserted elements" );
+		}
+	}
+
+	/**
+	 * @see org.hibernate.test.annotations.TestCase#getMappings()
+	 */
+	protected Class[] getMappings() {
+		return new Class[]{
+				File.class,
+				Folder.class,
+				Document.class,
+				SymbolicLink.class
+		};
+	}
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/union/SymbolicLink.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/union/SymbolicLink.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/union/SymbolicLink.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,31 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.inheritance.union;
-
-import javax.persistence.Entity;
-import javax.persistence.ManyToOne;
-import javax.persistence.Table;
-
- at Entity
- at Table(name = "SymbolicLinkUnion")
-public class SymbolicLink extends File {
-
-	File target;
-
-	SymbolicLink() {
-	}
-
-	public SymbolicLink(File target) {
-		this.target = target;
-	}
-
-	@ManyToOne(optional = false)
-	public File getTarget() {
-		return target;
-	}
-
-	public void setTarget(File target) {
-		this.target = target;
-	}
-
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/union/SymbolicLink.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/union/SymbolicLink.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/union/SymbolicLink.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/inheritance/union/SymbolicLink.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,31 @@
+//$Id$
+package org.hibernate.test.annotations.inheritance.union;
+
+import javax.persistence.Entity;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+ at Entity
+ at Table(name = "SymbolicLinkUnion")
+public class SymbolicLink extends File {
+
+	File target;
+
+	SymbolicLink() {
+	}
+
+	public SymbolicLink(File target) {
+		this.target = target;
+	}
+
+	@ManyToOne(optional = false)
+	public File getTarget() {
+		return target;
+	}
+
+	public void setTarget(File target) {
+		this.target = target;
+	}
+
+
+}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/interfaces (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/interfaces)

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/interfaces/Contact.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/interfaces/Contact.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/interfaces/Contact.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,11 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.interfaces;
-
-/**
- * @author Emmanuel Bernard
- */
-public interface Contact {
-	Integer getId();
-
-	String getName();
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/interfaces/Contact.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/interfaces/Contact.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/interfaces/Contact.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/interfaces/Contact.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,11 @@
+//$Id: $
+package org.hibernate.test.annotations.interfaces;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public interface Contact {
+	Integer getId();
+
+	String getName();
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/interfaces/ContactImpl.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/interfaces/ContactImpl.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/interfaces/ContactImpl.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,33 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.interfaces;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class ContactImpl implements Contact {
-	private Integer id;
-	private String name;
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/interfaces/ContactImpl.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/interfaces/ContactImpl.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/interfaces/ContactImpl.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/interfaces/ContactImpl.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,33 @@
+//$Id: $
+package org.hibernate.test.annotations.interfaces;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class ContactImpl implements Contact {
+	private Integer id;
+	private String name;
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/interfaces/InterfacesTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/interfaces/InterfacesTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/interfaces/InterfacesTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,20 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.interfaces;
-
-import org.hibernate.test.annotations.TestCase;
-
-/**
- * @author Emmanuel Bernard
- */
-public class InterfacesTest extends TestCase {
-	public void testInterface() {
-
-	}
-
-	protected Class[] getMappings() {
-		return new Class[]{
-				ContactImpl.class,
-				UserImpl.class
-		};
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/interfaces/InterfacesTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/interfaces/InterfacesTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/interfaces/InterfacesTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/interfaces/InterfacesTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,20 @@
+//$Id: $
+package org.hibernate.test.annotations.interfaces;
+
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class InterfacesTest extends TestCase {
+	public void testInterface() {
+
+	}
+
+	protected Class[] getMappings() {
+		return new Class[]{
+				ContactImpl.class,
+				UserImpl.class
+		};
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/interfaces/User.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/interfaces/User.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/interfaces/User.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,15 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.interfaces;
-
-import java.util.Collection;
-
-/**
- * @author Emmanuel Bernard
- */
-public interface User {
-	Integer getId();
-
-	Collection<Contact> getContacts();
-
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/interfaces/User.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/interfaces/User.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/interfaces/User.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/interfaces/User.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,15 @@
+//$Id: $
+package org.hibernate.test.annotations.interfaces;
+
+import java.util.Collection;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public interface User {
+	Integer getId();
+
+	Collection<Contact> getContacts();
+
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/interfaces/UserImpl.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/interfaces/UserImpl.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/interfaces/UserImpl.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,36 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.interfaces;
-
-import java.util.Collection;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.OneToMany;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class UserImpl implements User {
-	private Collection<Contact> contacts;
-	private Integer id;
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	@OneToMany(targetEntity = ContactImpl.class)
-	public Collection<Contact> getContacts() {
-		return contacts;
-	}
-
-	public void setContacts(Collection<Contact> contacts) {
-		this.contacts = contacts;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/interfaces/UserImpl.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/interfaces/UserImpl.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/interfaces/UserImpl.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/interfaces/UserImpl.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,36 @@
+//$Id: $
+package org.hibernate.test.annotations.interfaces;
+
+import java.util.Collection;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class UserImpl implements User {
+	private Collection<Contact> contacts;
+	private Integer id;
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	@OneToMany(targetEntity = ContactImpl.class)
+	public Collection<Contact> getContacts() {
+		return contacts;
+	}
+
+	public void setContacts(Collection<Contact> contacts) {
+		this.contacts = contacts;
+	}
+}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join)

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/Cat.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/Cat.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/Cat.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,101 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.join;
-
-import java.io.Serializable;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.SecondaryTable;
-import javax.persistence.SecondaryTables;
-import javax.persistence.UniqueConstraint;
-
-import org.hibernate.annotations.Index;
-import org.hibernate.annotations.Table;
-import org.hibernate.annotations.ForeignKey;
-import org.hibernate.annotations.Tables;
-import org.hibernate.annotations.FetchMode;
-import org.hibernate.annotations.SQLInsert;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at SecondaryTables({
- at SecondaryTable(name = "`Cat nbr1`"),
- at SecondaryTable(name = "Cat2", uniqueConstraints = {@UniqueConstraint(columnNames = {"storyPart2"})})
-		})
- at Tables( {
-	@Table(appliesTo = "Cat", indexes = @Index(name = "secondname",
-			columnNames = "secondName"), comment = "My cat table" ),
-	@Table(appliesTo = "Cat2", foreignKey = @ForeignKey(name="FK_CAT2_CAT"), fetch = FetchMode.SELECT,
-			sqlInsert=@SQLInsert(sql="insert into Cat2(storyPart2, id) values(upper(?), ?)") )
-			} )
-public class Cat implements Serializable {
-
-	private Integer id;
-	private String name;
-	private String secondName;
-	private String storyPart1;
-	private String storyPart2;
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	@Index(name = "nameindex")
-	public String getName() {
-		return name;
-	}
-
-	public void setId(Integer integer) {
-		id = integer;
-	}
-
-	public void setName(String string) {
-		name = string;
-	}
-
-	public String getSecondName() {
-		return secondName;
-	}
-
-	public void setSecondName(String secondName) {
-		this.secondName = secondName;
-	}
-
-// Bug HHH-36
-//	@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
-//	@JoinColumn(name="CAT_ID", secondaryTable="ExtendedLife")
-//	public Set<Life> getLifes() {
-//		return lifes;
-//	}
-//
-//	public void setLifes(Set<Life> collection) {
-//		lifes = collection;
-//	}
-
-	@Column(table = "`Cat nbr1`")
-	@Index(name = "story1index")
-	public String getStoryPart1() {
-		return storyPart1;
-	}
-
-	@Column(table = "Cat2")
-	public String getStoryPart2() {
-		return storyPart2;
-	}
-
-
-	public void setStoryPart1(String string) {
-		storyPart1 = string;
-	}
-
-
-	public void setStoryPart2(String string) {
-		storyPart2 = string;
-	}
-
-}
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/Cat.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/Cat.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/Cat.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/Cat.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,101 @@
+//$Id$
+package org.hibernate.test.annotations.join;
+
+import java.io.Serializable;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.SecondaryTable;
+import javax.persistence.SecondaryTables;
+import javax.persistence.UniqueConstraint;
+
+import org.hibernate.annotations.Index;
+import org.hibernate.annotations.Table;
+import org.hibernate.annotations.ForeignKey;
+import org.hibernate.annotations.Tables;
+import org.hibernate.annotations.FetchMode;
+import org.hibernate.annotations.SQLInsert;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at SecondaryTables({
+ at SecondaryTable(name = "`Cat nbr1`"),
+ at SecondaryTable(name = "Cat2", uniqueConstraints = {@UniqueConstraint(columnNames = {"storyPart2"})})
+		})
+ at Tables( {
+	@Table(appliesTo = "Cat", indexes = @Index(name = "secondname",
+			columnNames = "secondName"), comment = "My cat table" ),
+	@Table(appliesTo = "Cat2", foreignKey = @ForeignKey(name="FK_CAT2_CAT"), fetch = FetchMode.SELECT,
+			sqlInsert=@SQLInsert(sql="insert into Cat2(storyPart2, id) values(upper(?), ?)") )
+			} )
+public class Cat implements Serializable {
+
+	private Integer id;
+	private String name;
+	private String secondName;
+	private String storyPart1;
+	private String storyPart2;
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	@Index(name = "nameindex")
+	public String getName() {
+		return name;
+	}
+
+	public void setId(Integer integer) {
+		id = integer;
+	}
+
+	public void setName(String string) {
+		name = string;
+	}
+
+	public String getSecondName() {
+		return secondName;
+	}
+
+	public void setSecondName(String secondName) {
+		this.secondName = secondName;
+	}
+
+// Bug HHH-36
+//	@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
+//	@JoinColumn(name="CAT_ID", secondaryTable="ExtendedLife")
+//	public Set<Life> getLifes() {
+//		return lifes;
+//	}
+//
+//	public void setLifes(Set<Life> collection) {
+//		lifes = collection;
+//	}
+
+	@Column(table = "`Cat nbr1`")
+	@Index(name = "story1index")
+	public String getStoryPart1() {
+		return storyPart1;
+	}
+
+	@Column(table = "Cat2")
+	public String getStoryPart2() {
+		return storyPart2;
+	}
+
+
+	public void setStoryPart1(String string) {
+		storyPart1 = string;
+	}
+
+
+	public void setStoryPart2(String string) {
+		storyPart2 = string;
+	}
+
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/Death.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/Death.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/Death.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,30 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.join;
-
-import java.io.Serializable;
-import java.util.Date;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.SecondaryTable;
-import javax.persistence.PrimaryKeyJoinColumn;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at SecondaryTable(
-		name = "ExtendedDeath",
-		pkJoinColumns = @PrimaryKeyJoinColumn(name = "DEATH_ID")
-)
-public class Death implements Serializable {
-	@Id
-	@GeneratedValue(strategy = GenerationType.AUTO)
-	public Integer id;
-	@Column(name = "death_date")
-	public Date date;
-	@Column(table = "ExtendedDeath")
-	public String howDoesItHappen;
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/Death.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/Death.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/Death.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/Death.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,30 @@
+//$Id$
+package org.hibernate.test.annotations.join;
+
+import java.io.Serializable;
+import java.util.Date;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.SecondaryTable;
+import javax.persistence.PrimaryKeyJoinColumn;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at SecondaryTable(
+		name = "ExtendedDeath",
+		pkJoinColumns = @PrimaryKeyJoinColumn(name = "DEATH_ID")
+)
+public class Death implements Serializable {
+	@Id
+	@GeneratedValue(strategy = GenerationType.AUTO)
+	public Integer id;
+	@Column(name = "death_date")
+	public Date date;
+	@Column(table = "ExtendedDeath")
+	public String howDoesItHappen;
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/Dog.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/Dog.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/Dog.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,40 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.join;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.PrimaryKeyJoinColumn;
-import javax.persistence.SecondaryTable;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at SecondaryTable(
-		name = "DogThoroughbred",
-		pkJoinColumns = {@PrimaryKeyJoinColumn(name = "NAME", referencedColumnName = "name"),
-		@PrimaryKeyJoinColumn(name = "OWNER_NAME", referencedColumnName = "ownerName")}
-)
-public class Dog {
-	@Id
-	public DogPk id;
-	public int weight;
-	@Column(table = "DogThoroughbred")
-	public String thoroughbredName;
-
-	public boolean equals(Object o) {
-		if ( this == o ) return true;
-		if ( !( o instanceof Dog ) ) return false;
-
-		final Dog dog = (Dog) o;
-
-		if ( !id.equals( dog.id ) ) return false;
-
-		return true;
-	}
-
-	public int hashCode() {
-		return id.hashCode();
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/Dog.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/Dog.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/Dog.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/Dog.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,40 @@
+//$Id$
+package org.hibernate.test.annotations.join;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.PrimaryKeyJoinColumn;
+import javax.persistence.SecondaryTable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at SecondaryTable(
+		name = "DogThoroughbred",
+		pkJoinColumns = {@PrimaryKeyJoinColumn(name = "NAME", referencedColumnName = "name"),
+		@PrimaryKeyJoinColumn(name = "OWNER_NAME", referencedColumnName = "ownerName")}
+)
+public class Dog {
+	@Id
+	public DogPk id;
+	public int weight;
+	@Column(table = "DogThoroughbred")
+	public String thoroughbredName;
+
+	public boolean equals(Object o) {
+		if ( this == o ) return true;
+		if ( !( o instanceof Dog ) ) return false;
+
+		final Dog dog = (Dog) o;
+
+		if ( !id.equals( dog.id ) ) return false;
+
+		return true;
+	}
+
+	public int hashCode() {
+		return id.hashCode();
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/DogPk.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/DogPk.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/DogPk.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,33 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.join;
-
-import java.io.Serializable;
-import javax.persistence.Embeddable;
-
-/**
- * @author Emmanuel Bernard
- */
- at Embeddable
-public class DogPk implements Serializable {
-	public String name;
-	public String ownerName;
-
-	public boolean equals(Object o) {
-		if ( this == o ) return true;
-		if ( !( o instanceof DogPk ) ) return false;
-
-		final DogPk dogPk = (DogPk) o;
-
-		if ( !name.equals( dogPk.name ) ) return false;
-		if ( !ownerName.equals( dogPk.ownerName ) ) return false;
-
-		return true;
-	}
-
-	public int hashCode() {
-		int result;
-		result = name.hashCode();
-		result = 29 * result + ownerName.hashCode();
-		return result;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/DogPk.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/DogPk.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/DogPk.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/DogPk.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,33 @@
+//$Id$
+package org.hibernate.test.annotations.join;
+
+import java.io.Serializable;
+import javax.persistence.Embeddable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Embeddable
+public class DogPk implements Serializable {
+	public String name;
+	public String ownerName;
+
+	public boolean equals(Object o) {
+		if ( this == o ) return true;
+		if ( !( o instanceof DogPk ) ) return false;
+
+		final DogPk dogPk = (DogPk) o;
+
+		if ( !name.equals( dogPk.name ) ) return false;
+		if ( !ownerName.equals( dogPk.ownerName ) ) return false;
+
+		return true;
+	}
+
+	public int hashCode() {
+		int result;
+		result = name.hashCode();
+		result = 29 * result + ownerName.hashCode();
+		return result;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/JoinTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/JoinTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/JoinTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,190 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.join;
-
-import java.util.Date;
-
-import org.hibernate.Criteria;
-import org.hibernate.HibernateException;
-import org.hibernate.Query;
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-import org.hibernate.criterion.Expression;
-import org.hibernate.mapping.Join;
-import org.hibernate.test.annotations.TestCase;
-
-/**
- * @author Emmanuel Bernard
- */
-public class JoinTest extends TestCase {
-
-	public JoinTest(String x) {
-		super( x );
-	}
-
-	public void testDefaultValue() throws Exception {
-		Join join = (Join) getCfg().getClassMapping( Life.class.getName() ).getJoinClosureIterator().next();
-		assertEquals( "ExtendedLife", join.getTable().getName() );
-		org.hibernate.mapping.Column owner = new org.hibernate.mapping.Column();
-		owner.setName( "LIFE_ID" );
-		assertTrue( join.getTable().getPrimaryKey().containsColumn( owner ) );
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		Life life = new Life();
-		life.duration = 15;
-		life.fullDescription = "Long long description";
-		s.persist( life );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		Query q = s.createQuery( "from " + Life.class.getName() );
-		life = (Life) q.uniqueResult();
-		assertEquals( "Long long description", life.fullDescription );
-		tx.commit();
-		s.close();
-	}
-
-	public void testCompositePK() throws Exception {
-		Join join = (Join) getCfg().getClassMapping( Dog.class.getName() ).getJoinClosureIterator().next();
-		assertEquals( "DogThoroughbred", join.getTable().getName() );
-		org.hibernate.mapping.Column owner = new org.hibernate.mapping.Column();
-		owner.setName( "OWNER_NAME" );
-		assertTrue( join.getTable().getPrimaryKey().containsColumn( owner ) );
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		Dog dog = new Dog();
-		DogPk id = new DogPk();
-		id.name = "Thalie";
-		id.ownerName = "Martine";
-		dog.id = id;
-		dog.weight = 30;
-		dog.thoroughbredName = "Colley";
-		s.persist( dog );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		Query q = s.createQuery( "from Dog" );
-		dog = (Dog) q.uniqueResult();
-		assertEquals( "Colley", dog.thoroughbredName );
-		tx.commit();
-		s.close();
-	}
-
-	public void testExplicitValue() throws Exception {
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		Death death = new Death();
-		death.date = new Date();
-		death.howDoesItHappen = "Well, haven't seen it";
-		s.persist( death );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		Query q = s.createQuery( "from " + Death.class.getName() );
-		death = (Death) q.uniqueResult();
-		assertEquals( "Well, haven't seen it", death.howDoesItHappen );
-		s.delete( death );
-		tx.commit();
-		s.close();
-	}
-
-	public void testManyToOne() throws Exception {
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		Life life = new Life();
-		Cat cat = new Cat();
-		cat.setName( "kitty" );
-		life.duration = 15;
-		life.fullDescription = "Long long description";
-		life.owner = cat;
-		s.persist( life );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		Criteria crit = s.createCriteria( Life.class );
-		crit.createCriteria( "owner" ).add( Expression.eq( "name", "kitty" ) );
-		life = (Life) crit.uniqueResult();
-		assertEquals( "Long long description", life.fullDescription );
-		s.delete( life.owner );
-		s.delete( life );
-		tx.commit();
-		s.close();
-	}
-
-	public void testUniqueConstaintOnSecondaryTable() throws Exception {
-		Cat cat = new Cat();
-		cat.setStoryPart2( "My long story" );
-		Cat cat2 = new Cat();
-		cat2.setStoryPart2( "My long story" );
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		try {
-			s.persist( cat );
-			s.persist( cat2 );
-			tx.commit();
-			fail( "unique constraints violation on secondary table" );
-		}
-		catch (HibernateException e) {
-			//success
-		}
-		finally {
-			if ( tx != null ) tx.rollback();
-			s.close();
-		}
-	}
-
-	public void testFetchModeOnSecondaryTable() throws Exception {
-		Cat cat = new Cat();
-		cat.setStoryPart2( "My long story" );
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-
-		s.persist( cat );
-		s.flush();
-		s.clear();
-		
-		s.get( Cat.class, cat.getId() );
-		//Find a way to test it, I need to define the secondary table on a subclass
-
-		tx.rollback();
-		s.close();
-	}
-
-	public void testCustomSQL() throws Exception {
-		Cat cat = new Cat();
-		String storyPart2 = "My long story";
-		cat.setStoryPart2( storyPart2 );
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-
-		s.persist( cat );
-		s.flush();
-		s.clear();
-
-		Cat c = (Cat) s.get( Cat.class, cat.getId() );
-		assertEquals( storyPart2.toUpperCase(), c.getStoryPart2() );
-
-		tx.rollback();
-		s.close();
-	}
-
-	/**
-	 * @see org.hibernate.test.annotations.TestCase#getMappings()
-	 */
-	protected Class[] getMappings() {
-		return new Class[]{
-				Life.class,
-				Death.class,
-				Cat.class,
-				Dog.class
-		};
-	}
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/JoinTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/JoinTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/JoinTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/JoinTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,190 @@
+//$Id$
+package org.hibernate.test.annotations.join;
+
+import java.util.Date;
+
+import org.hibernate.Criteria;
+import org.hibernate.HibernateException;
+import org.hibernate.Query;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.criterion.Expression;
+import org.hibernate.mapping.Join;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class JoinTest extends TestCase {
+
+	public JoinTest(String x) {
+		super( x );
+	}
+
+	public void testDefaultValue() throws Exception {
+		Join join = (Join) getCfg().getClassMapping( Life.class.getName() ).getJoinClosureIterator().next();
+		assertEquals( "ExtendedLife", join.getTable().getName() );
+		org.hibernate.mapping.Column owner = new org.hibernate.mapping.Column();
+		owner.setName( "LIFE_ID" );
+		assertTrue( join.getTable().getPrimaryKey().containsColumn( owner ) );
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		Life life = new Life();
+		life.duration = 15;
+		life.fullDescription = "Long long description";
+		s.persist( life );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		Query q = s.createQuery( "from " + Life.class.getName() );
+		life = (Life) q.uniqueResult();
+		assertEquals( "Long long description", life.fullDescription );
+		tx.commit();
+		s.close();
+	}
+
+	public void testCompositePK() throws Exception {
+		Join join = (Join) getCfg().getClassMapping( Dog.class.getName() ).getJoinClosureIterator().next();
+		assertEquals( "DogThoroughbred", join.getTable().getName() );
+		org.hibernate.mapping.Column owner = new org.hibernate.mapping.Column();
+		owner.setName( "OWNER_NAME" );
+		assertTrue( join.getTable().getPrimaryKey().containsColumn( owner ) );
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		Dog dog = new Dog();
+		DogPk id = new DogPk();
+		id.name = "Thalie";
+		id.ownerName = "Martine";
+		dog.id = id;
+		dog.weight = 30;
+		dog.thoroughbredName = "Colley";
+		s.persist( dog );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		Query q = s.createQuery( "from Dog" );
+		dog = (Dog) q.uniqueResult();
+		assertEquals( "Colley", dog.thoroughbredName );
+		tx.commit();
+		s.close();
+	}
+
+	public void testExplicitValue() throws Exception {
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		Death death = new Death();
+		death.date = new Date();
+		death.howDoesItHappen = "Well, haven't seen it";
+		s.persist( death );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		Query q = s.createQuery( "from " + Death.class.getName() );
+		death = (Death) q.uniqueResult();
+		assertEquals( "Well, haven't seen it", death.howDoesItHappen );
+		s.delete( death );
+		tx.commit();
+		s.close();
+	}
+
+	public void testManyToOne() throws Exception {
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		Life life = new Life();
+		Cat cat = new Cat();
+		cat.setName( "kitty" );
+		life.duration = 15;
+		life.fullDescription = "Long long description";
+		life.owner = cat;
+		s.persist( life );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		Criteria crit = s.createCriteria( Life.class );
+		crit.createCriteria( "owner" ).add( Expression.eq( "name", "kitty" ) );
+		life = (Life) crit.uniqueResult();
+		assertEquals( "Long long description", life.fullDescription );
+		s.delete( life.owner );
+		s.delete( life );
+		tx.commit();
+		s.close();
+	}
+
+	public void testUniqueConstaintOnSecondaryTable() throws Exception {
+		Cat cat = new Cat();
+		cat.setStoryPart2( "My long story" );
+		Cat cat2 = new Cat();
+		cat2.setStoryPart2( "My long story" );
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		try {
+			s.persist( cat );
+			s.persist( cat2 );
+			tx.commit();
+			fail( "unique constraints violation on secondary table" );
+		}
+		catch (HibernateException e) {
+			//success
+		}
+		finally {
+			if ( tx != null ) tx.rollback();
+			s.close();
+		}
+	}
+
+	public void testFetchModeOnSecondaryTable() throws Exception {
+		Cat cat = new Cat();
+		cat.setStoryPart2( "My long story" );
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+
+		s.persist( cat );
+		s.flush();
+		s.clear();
+		
+		s.get( Cat.class, cat.getId() );
+		//Find a way to test it, I need to define the secondary table on a subclass
+
+		tx.rollback();
+		s.close();
+	}
+
+	public void testCustomSQL() throws Exception {
+		Cat cat = new Cat();
+		String storyPart2 = "My long story";
+		cat.setStoryPart2( storyPart2 );
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+
+		s.persist( cat );
+		s.flush();
+		s.clear();
+
+		Cat c = (Cat) s.get( Cat.class, cat.getId() );
+		assertEquals( storyPart2.toUpperCase(), c.getStoryPart2() );
+
+		tx.rollback();
+		s.close();
+	}
+
+	/**
+	 * @see org.hibernate.test.annotations.TestCase#getMappings()
+	 */
+	protected Class[] getMappings() {
+		return new Class[]{
+				Life.class,
+				Death.class,
+				Cat.class,
+				Dog.class
+		};
+	}
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/Life.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/Life.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/Life.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,34 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.join;
-
-import java.io.Serializable;
-import javax.persistence.CascadeType;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-import javax.persistence.SecondaryTable;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at SecondaryTable(name = "ExtendedLife")
-public class Life implements Serializable {
-	@Id
-	@GeneratedValue(strategy = GenerationType.AUTO)
-	@Column(name = "LIFE_ID")
-	public Integer id;
-
-	public int duration;
-	@Column(table = "ExtendedLife")
-	public String fullDescription;
-
-	@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
-	@JoinColumn(name = "CAT_ID", table = "ExtendedLife")
-	public Cat owner;
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/Life.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/Life.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/Life.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/join/Life.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,34 @@
+//$Id$
+package org.hibernate.test.annotations.join;
+
+import java.io.Serializable;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.SecondaryTable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at SecondaryTable(name = "ExtendedLife")
+public class Life implements Serializable {
+	@Id
+	@GeneratedValue(strategy = GenerationType.AUTO)
+	@Column(name = "LIFE_ID")
+	public Integer id;
+
+	public int duration;
+	@Column(table = "ExtendedLife")
+	public String fullDescription;
+
+	@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
+	@JoinColumn(name = "CAT_ID", table = "ExtendedLife")
+	public Cat owner;
+
+}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/loader (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/loader)

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/loader/Loader.hbm.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/loader/Loader.hbm.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/loader/Loader.hbm.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,21 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE hibernate-mapping PUBLIC
-        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
-        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
-
-<!--
-
-  Used to demonstrate the declarative configuration
-  of both hbm files and annotated classes
-  See hibernate.cfg.xml and ConfigurationTest
-
--->
-
-<hibernate-mapping package="org.hibernate.test.annotations.loader">
-
-    <sql-query name="loadByTeam">
-        <load-collection alias="p" role="Team.players"/>
-        select {p.*} from Player p where p.team_id = ?
-    </sql-query>
-
-</hibernate-mapping>
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/loader/Loader.hbm.xml (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/loader/Loader.hbm.xml)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/loader/Loader.hbm.xml	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/loader/Loader.hbm.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<!DOCTYPE hibernate-mapping PUBLIC
+        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+
+<!--
+
+  Used to demonstrate the declarative configuration
+  of both hbm files and annotated classes
+  See hibernate.cfg.xml and ConfigurationTest
+
+-->
+
+<hibernate-mapping package="org.hibernate.test.annotations.loader">
+
+    <sql-query name="loadByTeam">
+        <load-collection alias="p" role="Team.players"/>
+        select {p.*} from Player p where p.team_id = ?
+    </sql-query>
+
+</hibernate-mapping>
\ No newline at end of file

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/loader/LoaderTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/loader/LoaderTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/loader/LoaderTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,69 +0,0 @@
-//$Id: EntityTest.java 9838 2006-04-30 19:00:59Z epbernard $
-package org.hibernate.test.annotations.loader;
-
-import java.util.Set;
-import java.util.Iterator;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-import org.hibernate.test.annotations.TestCase;
-
-
-/**
- * @author Emmanuel Bernard
- */
-public class LoaderTest extends TestCase {
-
-
-	protected String[] getXmlFiles() {
-		return new String[] {
-				"org/hibernate/test/annotations/loader/Loader.hbm.xml"
-		};
-	}
-
-	public void testBasic() throws Exception {
-		Session s = openSession( );
-		Transaction tx = s.beginTransaction();
-		Team t = new Team();
-		Player p = new Player();
-		p.setName("me");
-		t.getPlayers().add(p);
-		p.setTeam(t);
-		
-
-		try {
-			s.persist(p);
-			s.persist(t);
-			tx.commit();
-			s.close();
-			
-			s= openSession( );
-			tx = s.beginTransaction();
-			Team t2 = (Team)s.load(Team.class,new Long(1));
-			Set<Player> players = t2.getPlayers();
-			Iterator<Player> iterator = players.iterator();
-			assertEquals("me", iterator.next().getName());
-			tx.commit();
-			
-		}
-		catch (Exception e) {
-			e.printStackTrace();
-			if ( tx != null ) tx.rollback();
-		}
-		finally {
-			s.close();
-		}
-	}
-
-	/**
-	 * @see org.hibernate.test.annotations.TestCase#getMappings()
-	 */
-	protected Class[] getMappings() {
-		return new Class[]{
-				Player.class,
-				Team.class
-		};
-	}
-
-}
-

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/loader/LoaderTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/loader/LoaderTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/loader/LoaderTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/loader/LoaderTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,69 @@
+//$Id: EntityTest.java 9838 2006-04-30 19:00:59Z epbernard $
+package org.hibernate.test.annotations.loader;
+
+import java.util.Set;
+import java.util.Iterator;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.TestCase;
+
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class LoaderTest extends TestCase {
+
+
+	protected String[] getXmlFiles() {
+		return new String[] {
+				"org/hibernate/test/annotations/loader/Loader.hbm.xml"
+		};
+	}
+
+	public void testBasic() throws Exception {
+		Session s = openSession( );
+		Transaction tx = s.beginTransaction();
+		Team t = new Team();
+		Player p = new Player();
+		p.setName("me");
+		t.getPlayers().add(p);
+		p.setTeam(t);
+		
+
+		try {
+			s.persist(p);
+			s.persist(t);
+			tx.commit();
+			s.close();
+			
+			s= openSession( );
+			tx = s.beginTransaction();
+			Team t2 = (Team)s.load(Team.class,new Long(1));
+			Set<Player> players = t2.getPlayers();
+			Iterator<Player> iterator = players.iterator();
+			assertEquals("me", iterator.next().getName());
+			tx.commit();
+			
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+			if ( tx != null ) tx.rollback();
+		}
+		finally {
+			s.close();
+		}
+	}
+
+	/**
+	 * @see org.hibernate.test.annotations.TestCase#getMappings()
+	 */
+	protected Class[] getMappings() {
+		return new Class[]{
+				Player.class,
+				Team.class
+		};
+	}
+
+}
+

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/loader/Player.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/loader/Player.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/loader/Player.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,48 +0,0 @@
-package org.hibernate.test.annotations.loader;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-
-import org.hibernate.annotations.Fetch;
-import org.hibernate.annotations.FetchMode;
-
- at Entity
-public class Player {
-	
-	private Long id;
-	private Team team;
-	private String name;
-	
-    @Id
-    @GeneratedValue
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-
-	@ManyToOne(targetEntity = Team.class)
-	@Fetch(FetchMode.SELECT)
-	@JoinColumn(name = "team_id")
-	public Team getTeam() {
-		return team;
-	}
-
-	public void setTeam(Team team) {
-		this.team = team;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-	
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/loader/Player.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/loader/Player.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/loader/Player.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/loader/Player.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,48 @@
+package org.hibernate.test.annotations.loader;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+
+import org.hibernate.annotations.Fetch;
+import org.hibernate.annotations.FetchMode;
+
+ at Entity
+public class Player {
+	
+	private Long id;
+	private Team team;
+	private String name;
+	
+    @Id
+    @GeneratedValue
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	@ManyToOne(targetEntity = Team.class)
+	@Fetch(FetchMode.SELECT)
+	@JoinColumn(name = "team_id")
+	public Team getTeam() {
+		return team;
+	}
+
+	public void setTeam(Team team) {
+		this.team = team;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+	
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/loader/Team.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/loader/Team.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/loader/Team.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,45 +0,0 @@
-package org.hibernate.test.annotations.loader;
-
-import java.util.HashSet;
-import java.util.Set;
-
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.OneToMany;
-
-import org.hibernate.annotations.Fetch;
-import org.hibernate.annotations.FetchMode;
-import org.hibernate.annotations.Loader;
-import org.hibernate.annotations.NamedNativeQueries;
-import org.hibernate.annotations.NamedNativeQuery;
-
-import javax.persistence.NamedQuery;
-
- at Entity
-public class Team {
-	private Long id;
-	private Set<Player> players = new HashSet<Player>();
-	
-    @Id
-    @GeneratedValue
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-	
-	@OneToMany(targetEntity = Player.class, mappedBy = "team", fetch = FetchType.EAGER)
-	@Fetch(FetchMode.SELECT)
-	@Loader(namedQuery = "loadByTeam")
-	public Set<Player> getPlayers() {
-		return players;
-	}
-
-	public void setPlayers(Set<Player> players) {
-		this.players = players;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/loader/Team.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/loader/Team.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/loader/Team.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/loader/Team.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,45 @@
+package org.hibernate.test.annotations.loader;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+
+import org.hibernate.annotations.Fetch;
+import org.hibernate.annotations.FetchMode;
+import org.hibernate.annotations.Loader;
+import org.hibernate.annotations.NamedNativeQueries;
+import org.hibernate.annotations.NamedNativeQuery;
+
+import javax.persistence.NamedQuery;
+
+ at Entity
+public class Team {
+	private Long id;
+	private Set<Player> players = new HashSet<Player>();
+	
+    @Id
+    @GeneratedValue
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+	
+	@OneToMany(targetEntity = Player.class, mappedBy = "team", fetch = FetchType.EAGER)
+	@Fetch(FetchMode.SELECT)
+	@Loader(namedQuery = "loadByTeam")
+	public Set<Player> getPlayers() {
+		return players;
+	}
+
+	public void setPlayers(Set<Player> players) {
+		this.players = players;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/loader/TestCase.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/loader/TestCase.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/loader/TestCase.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,146 +0,0 @@
-package org.hibernate.test.annotations.loader;
-import java.io.InputStream;
-
-import org.hibernate.HibernateException;
-import org.hibernate.Session;
-import org.hibernate.SessionFactory;
-import org.hibernate.cfg.AnnotationConfiguration;
-import org.hibernate.cfg.Configuration;
-import org.hibernate.cfg.Environment;
-import org.hibernate.dialect.Dialect;
-
-public abstract class TestCase extends junit.framework.TestCase {
-
-	private static SessionFactory sessions;
-	private static AnnotationConfiguration cfg;
-	private static Dialect dialect;
-	private static Class lastTestClass;
-	private Session session;
-
-	public TestCase() {
-		super();
-	}
-
-	public TestCase(String x) {
-		super( x );
-	}
-
-	protected void buildSessionFactory(Class[] classes, String[] packages, String[] xmlFiles) throws Exception {
-
-		if ( getSessions() != null ) getSessions().close();
-		try {
-			setCfg( new AnnotationConfiguration() );
-			configure( cfg );
-			if ( recreateSchema() ) {
-				cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
-			}
-			for ( int i = 0; i < packages.length ; i++ ) {
-				getCfg().addPackage( packages[i] );
-			}
-			for ( int i = 0; i < classes.length ; i++ ) {
-				getCfg().addAnnotatedClass( classes[i] );
-			}
-			for ( int i = 0; i < xmlFiles.length ; i++ ) {
-				InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream( xmlFiles[i] );
-				getCfg().addInputStream( is );
-			}
-			setDialect( Dialect.getDialect() );
-			setSessions( getCfg().buildSessionFactory( /*new TestInterceptor()*/ ) );
-		}
-		catch (Exception e) {
-			e.printStackTrace();
-			throw e;
-		}
-	}
-
-	protected void setUp() throws Exception {
-		if ( getSessions() == null || lastTestClass != getClass() ) {
-			buildSessionFactory( getMappings(), getAnnotatedPackages(), getXmlFiles() );
-			lastTestClass = getClass();
-		}
-	}
-
-	protected void runTest() throws Throwable {
-		try {
-			super.runTest();
-			if ( session != null && session.isOpen() ) {
-				if ( session.isConnected() ) session.connection().rollback();
-				session.close();
-				session = null;
-				fail( "unclosed session" );
-			}
-			else {
-				session = null;
-			}
-		}
-		catch (Throwable e) {
-			try {
-				if ( session != null && session.isOpen() ) {
-					if ( session.isConnected() ) session.connection().rollback();
-					session.close();
-				}
-			}
-			catch (Exception ignore) {
-			}
-			try {
-				if ( sessions != null ) {
-					sessions.close();
-					sessions = null;
-				}
-			}
-			catch (Exception ignore) {
-			}
-			throw e;
-		}
-	}
-
-	public Session openSession() throws HibernateException {
-		session = getSessions().openSession();
-		return session;
-	}
-
-	protected abstract Class[] getMappings();
-
-	protected String[] getAnnotatedPackages() {
-		return new String[]{};
-	}
-
-	protected String[] getXmlFiles() {
-		return new String[]{};
-	}
-
-	private void setSessions(SessionFactory sessions) {
-		TestCase.sessions = sessions;
-	}
-
-	protected SessionFactory getSessions() {
-		return sessions;
-	}
-
-	private void setDialect(Dialect dialect) {
-		TestCase.dialect = dialect;
-	}
-
-	protected Dialect getDialect() {
-		return dialect;
-	}
-
-	protected static void setCfg(AnnotationConfiguration cfg) {
-		TestCase.cfg = cfg;
-	}
-
-	protected static AnnotationConfiguration getCfg() {
-		return cfg;
-	}
-
-	protected void configure(Configuration cfg) {
-		//cfg.setNamingStrategy( AlternativeNamingStrategy.INSTANCE );
-		//cfg.getSessionEventListenerConfig().setFlushEventListener( new EJB3FlushEventListener() );
-		//cfg.getSessionEventListenerConfig().setAutoFlushEventListener( new EJB3AutoFlushEventListener() );
-	}
-
-	protected boolean recreateSchema() {
-		return true;
-	}
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/loader/TestCase.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/loader/TestCase.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/loader/TestCase.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/loader/TestCase.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,146 @@
+package org.hibernate.test.annotations.loader;
+import java.io.InputStream;
+
+import org.hibernate.HibernateException;
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.hibernate.cfg.AnnotationConfiguration;
+import org.hibernate.cfg.Configuration;
+import org.hibernate.cfg.Environment;
+import org.hibernate.dialect.Dialect;
+
+public abstract class TestCase extends junit.framework.TestCase {
+
+	private static SessionFactory sessions;
+	private static AnnotationConfiguration cfg;
+	private static Dialect dialect;
+	private static Class lastTestClass;
+	private Session session;
+
+	public TestCase() {
+		super();
+	}
+
+	public TestCase(String x) {
+		super( x );
+	}
+
+	protected void buildSessionFactory(Class[] classes, String[] packages, String[] xmlFiles) throws Exception {
+
+		if ( getSessions() != null ) getSessions().close();
+		try {
+			setCfg( new AnnotationConfiguration() );
+			configure( cfg );
+			if ( recreateSchema() ) {
+				cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
+			}
+			for ( int i = 0; i < packages.length ; i++ ) {
+				getCfg().addPackage( packages[i] );
+			}
+			for ( int i = 0; i < classes.length ; i++ ) {
+				getCfg().addAnnotatedClass( classes[i] );
+			}
+			for ( int i = 0; i < xmlFiles.length ; i++ ) {
+				InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream( xmlFiles[i] );
+				getCfg().addInputStream( is );
+			}
+			setDialect( Dialect.getDialect() );
+			setSessions( getCfg().buildSessionFactory( /*new TestInterceptor()*/ ) );
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+			throw e;
+		}
+	}
+
+	protected void setUp() throws Exception {
+		if ( getSessions() == null || lastTestClass != getClass() ) {
+			buildSessionFactory( getMappings(), getAnnotatedPackages(), getXmlFiles() );
+			lastTestClass = getClass();
+		}
+	}
+
+	protected void runTest() throws Throwable {
+		try {
+			super.runTest();
+			if ( session != null && session.isOpen() ) {
+				if ( session.isConnected() ) session.connection().rollback();
+				session.close();
+				session = null;
+				fail( "unclosed session" );
+			}
+			else {
+				session = null;
+			}
+		}
+		catch (Throwable e) {
+			try {
+				if ( session != null && session.isOpen() ) {
+					if ( session.isConnected() ) session.connection().rollback();
+					session.close();
+				}
+			}
+			catch (Exception ignore) {
+			}
+			try {
+				if ( sessions != null ) {
+					sessions.close();
+					sessions = null;
+				}
+			}
+			catch (Exception ignore) {
+			}
+			throw e;
+		}
+	}
+
+	public Session openSession() throws HibernateException {
+		session = getSessions().openSession();
+		return session;
+	}
+
+	protected abstract Class[] getMappings();
+
+	protected String[] getAnnotatedPackages() {
+		return new String[]{};
+	}
+
+	protected String[] getXmlFiles() {
+		return new String[]{};
+	}
+
+	private void setSessions(SessionFactory sessions) {
+		TestCase.sessions = sessions;
+	}
+
+	protected SessionFactory getSessions() {
+		return sessions;
+	}
+
+	private void setDialect(Dialect dialect) {
+		TestCase.dialect = dialect;
+	}
+
+	protected Dialect getDialect() {
+		return dialect;
+	}
+
+	protected static void setCfg(AnnotationConfiguration cfg) {
+		TestCase.cfg = cfg;
+	}
+
+	protected static AnnotationConfiguration getCfg() {
+		return cfg;
+	}
+
+	protected void configure(Configuration cfg) {
+		//cfg.setNamingStrategy( AlternativeNamingStrategy.INSTANCE );
+		//cfg.getSessionEventListenerConfig().setFlushEventListener( new EJB3FlushEventListener() );
+		//cfg.getSessionEventListenerConfig().setAutoFlushEventListener( new EJB3AutoFlushEventListener() );
+	}
+
+	protected boolean recreateSchema() {
+		return true;
+	}
+
+}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/lob (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/lob)

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/lob/Book.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/lob/Book.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/lob/Book.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,79 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.lob;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.Lob;
-import javax.persistence.Table;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Table(name = "lob_book")
-public class Book {
-	private Integer id;
-	private String shortDescription;
-	private String fullText;
-	private Character[] code;
-	private char[] code2;
-	private Editor editor;
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getShortDescription() {
-		return shortDescription;
-	}
-
-	public void setShortDescription(String shortDescription) {
-		this.shortDescription = shortDescription;
-	}
-
-	@Lob
-	@Column(name = "fld_fulltext")
-	public String getFullText() {
-		return fullText;
-	}
-
-	public void setFullText(String fullText) {
-		this.fullText = fullText;
-	}
-
-	@Lob
-	@Column(name = "fld_code")
-	public Character[] getCode() {
-		return code;
-	}
-
-	public void setCode(Character[] code) {
-		this.code = code;
-	}
-
-	@Lob
-	public char[] getCode2() {
-		return code2;
-	}
-
-	public void setCode2(char[] code2) {
-		this.code2 = code2;
-	}
-
-	@Lob
-	public Editor getEditor() {
-		return editor;
-	}
-
-	public void setEditor(Editor editor) {
-		this.editor = editor;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/lob/Book.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/lob/Book.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/lob/Book.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/lob/Book.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,79 @@
+//$Id$
+package org.hibernate.test.annotations.lob;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Lob;
+import javax.persistence.Table;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Table(name = "lob_book")
+public class Book {
+	private Integer id;
+	private String shortDescription;
+	private String fullText;
+	private Character[] code;
+	private char[] code2;
+	private Editor editor;
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getShortDescription() {
+		return shortDescription;
+	}
+
+	public void setShortDescription(String shortDescription) {
+		this.shortDescription = shortDescription;
+	}
+
+	@Lob
+	@Column(name = "fld_fulltext")
+	public String getFullText() {
+		return fullText;
+	}
+
+	public void setFullText(String fullText) {
+		this.fullText = fullText;
+	}
+
+	@Lob
+	@Column(name = "fld_code")
+	public Character[] getCode() {
+		return code;
+	}
+
+	public void setCode(Character[] code) {
+		this.code = code;
+	}
+
+	@Lob
+	public char[] getCode2() {
+		return code2;
+	}
+
+	public void setCode2(char[] code2) {
+		this.code2 = code2;
+	}
+
+	@Lob
+	public Editor getEditor() {
+		return editor;
+	}
+
+	public void setEditor(Editor editor) {
+		this.editor = editor;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/lob/CompiledCode.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/lob/CompiledCode.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/lob/CompiledCode.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,56 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.lob;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.Lob;
-
-/**
- * Compiled code representation
- *
- * @author Emmanuel Bernard
- */
- at Entity
-public class CompiledCode {
-	private Integer id;
-	private Byte[] header;
-	private byte[] fullCode;
-	private byte[] metadata;
-
-	public byte[] getMetadata() {
-		return metadata;
-	}
-
-	public void setMetadata(byte[] metadata) {
-		this.metadata = metadata;
-	}
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	@Lob
-	public Byte[] getHeader() {
-		return header;
-	}
-
-	public void setHeader(Byte[] header) {
-		this.header = header;
-	}
-
-	@Lob
-	public byte[] getFullCode() {
-		return fullCode;
-	}
-
-	public void setFullCode(byte[] fullCode) {
-		this.fullCode = fullCode;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/lob/CompiledCode.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/lob/CompiledCode.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/lob/CompiledCode.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/lob/CompiledCode.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,56 @@
+//$Id$
+package org.hibernate.test.annotations.lob;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Lob;
+
+/**
+ * Compiled code representation
+ *
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class CompiledCode {
+	private Integer id;
+	private Byte[] header;
+	private byte[] fullCode;
+	private byte[] metadata;
+
+	public byte[] getMetadata() {
+		return metadata;
+	}
+
+	public void setMetadata(byte[] metadata) {
+		this.metadata = metadata;
+	}
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	@Lob
+	public Byte[] getHeader() {
+		return header;
+	}
+
+	public void setHeader(Byte[] header) {
+		this.header = header;
+	}
+
+	@Lob
+	public byte[] getFullCode() {
+		return fullCode;
+	}
+
+	public void setFullCode(byte[] fullCode) {
+		this.fullCode = fullCode;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/lob/Editor.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/lob/Editor.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/lob/Editor.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,19 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.lob;
-
-import java.io.Serializable;
-
-/**
- * @author Emmanuel Bernard
- */
-public class Editor implements Serializable {
-	private String name;
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/lob/Editor.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/lob/Editor.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/lob/Editor.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/lob/Editor.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,19 @@
+//$Id$
+package org.hibernate.test.annotations.lob;
+
+import java.io.Serializable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Editor implements Serializable {
+	private String name;
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/lob/LobTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/lob/LobTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/lob/LobTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,126 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.lob;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-import org.hibernate.test.annotations.TestCase;
-
-/**
- * @author Emmanuel Bernard
- */
-public class LobTest extends TestCase {
-	public void testSerializableToBlob() throws Exception {
-		Book book = new Book();
-		Editor editor = new Editor();
-		editor.setName( "O'Reilly" );
-		book.setEditor( editor );
-		book.setCode2( new char[]{'r'} );
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		s.persist( book );
-		tx.commit();
-		s.close();
-		s = openSession();
-		tx = s.beginTransaction();
-		Book loadedBook = (Book) s.get( Book.class, book.getId() );
-		assertNotNull( loadedBook.getEditor() );
-		assertEquals( book.getEditor().getName(), loadedBook.getEditor().getName() );
-		loadedBook.setEditor( null );
-		tx.commit();
-		s.close();
-		s = openSession();
-		tx = s.beginTransaction();
-		loadedBook = (Book) s.get( Book.class, book.getId() );
-		assertNull( loadedBook.getEditor() );
-		tx.commit();
-		s.close();
-
-	}
-
-	public void testClob() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		Book b = new Book();
-		b.setShortDescription( "Hibernate Bible" );
-		b.setFullText( "Hibernate in Action aims to..." );
-		b.setCode( new Character[]{'a', 'b', 'c'} );
-		b.setCode2( new char[]{'a', 'b', 'c'} );
-		s.persist( b );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		Book b2 = (Book) s.get( Book.class, b.getId() );
-		assertNotNull( b2 );
-		assertEquals( b2.getFullText(), b.getFullText() );
-		assertEquals( b2.getCode()[1].charValue(), b.getCode()[1].charValue() );
-		assertEquals( b2.getCode2()[2], b.getCode2()[2] );
-		tx.commit();
-		s.close();
-	}
-
-	public void testBlob() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		CompiledCode cc = new CompiledCode();
-		Byte[] header = new Byte[2];
-		header[0] = new Byte( (byte) 3 );
-		header[1] = new Byte( (byte) 0 );
-		cc.setHeader( header );
-		int codeSize = 5;
-		byte[] full = new byte[codeSize];
-		for ( int i = 0; i < codeSize ; i++ ) {
-			full[i] = (byte) ( 1 + i );
-		}
-		cc.setFullCode( full );
-		s.persist( cc );
-		tx.commit();
-		s.close();
-		s = openSession();
-		tx = s.beginTransaction();
-		CompiledCode recompiled = (CompiledCode) s.get( CompiledCode.class, cc.getId() );
-		assertEquals( recompiled.getHeader()[1], cc.getHeader()[1] );
-		assertEquals( recompiled.getFullCode()[codeSize - 1], cc.getFullCode()[codeSize - 1] );
-		tx.commit();
-		s.close();
-	}
-
-	public void testBinary() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		CompiledCode cc = new CompiledCode();
-		byte[] metadata = new byte[2];
-		metadata[0] = (byte) 3;
-		metadata[1] = (byte) 0;
-		cc.setMetadata( metadata );
-		s.persist( cc );
-		tx.commit();
-		s.close();
-		s = openSession();
-		tx = s.beginTransaction();
-		CompiledCode recompiled = (CompiledCode) s.get( CompiledCode.class, cc.getId() );
-		assertEquals( recompiled.getMetadata()[1], cc.getMetadata()[1] );
-		tx.commit();
-		s.close();
-	}
-
-	public LobTest(String x) {
-		super( x );
-	}
-
-	protected Class[] getMappings() {
-		return new Class[]{
-				Book.class,
-				CompiledCode.class
-		};
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/lob/LobTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/lob/LobTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/lob/LobTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/lob/LobTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,126 @@
+//$Id$
+package org.hibernate.test.annotations.lob;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class LobTest extends TestCase {
+	public void testSerializableToBlob() throws Exception {
+		Book book = new Book();
+		Editor editor = new Editor();
+		editor.setName( "O'Reilly" );
+		book.setEditor( editor );
+		book.setCode2( new char[]{'r'} );
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		s.persist( book );
+		tx.commit();
+		s.close();
+		s = openSession();
+		tx = s.beginTransaction();
+		Book loadedBook = (Book) s.get( Book.class, book.getId() );
+		assertNotNull( loadedBook.getEditor() );
+		assertEquals( book.getEditor().getName(), loadedBook.getEditor().getName() );
+		loadedBook.setEditor( null );
+		tx.commit();
+		s.close();
+		s = openSession();
+		tx = s.beginTransaction();
+		loadedBook = (Book) s.get( Book.class, book.getId() );
+		assertNull( loadedBook.getEditor() );
+		tx.commit();
+		s.close();
+
+	}
+
+	public void testClob() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		Book b = new Book();
+		b.setShortDescription( "Hibernate Bible" );
+		b.setFullText( "Hibernate in Action aims to..." );
+		b.setCode( new Character[]{'a', 'b', 'c'} );
+		b.setCode2( new char[]{'a', 'b', 'c'} );
+		s.persist( b );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		Book b2 = (Book) s.get( Book.class, b.getId() );
+		assertNotNull( b2 );
+		assertEquals( b2.getFullText(), b.getFullText() );
+		assertEquals( b2.getCode()[1].charValue(), b.getCode()[1].charValue() );
+		assertEquals( b2.getCode2()[2], b.getCode2()[2] );
+		tx.commit();
+		s.close();
+	}
+
+	public void testBlob() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		CompiledCode cc = new CompiledCode();
+		Byte[] header = new Byte[2];
+		header[0] = new Byte( (byte) 3 );
+		header[1] = new Byte( (byte) 0 );
+		cc.setHeader( header );
+		int codeSize = 5;
+		byte[] full = new byte[codeSize];
+		for ( int i = 0; i < codeSize ; i++ ) {
+			full[i] = (byte) ( 1 + i );
+		}
+		cc.setFullCode( full );
+		s.persist( cc );
+		tx.commit();
+		s.close();
+		s = openSession();
+		tx = s.beginTransaction();
+		CompiledCode recompiled = (CompiledCode) s.get( CompiledCode.class, cc.getId() );
+		assertEquals( recompiled.getHeader()[1], cc.getHeader()[1] );
+		assertEquals( recompiled.getFullCode()[codeSize - 1], cc.getFullCode()[codeSize - 1] );
+		tx.commit();
+		s.close();
+	}
+
+	public void testBinary() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		CompiledCode cc = new CompiledCode();
+		byte[] metadata = new byte[2];
+		metadata[0] = (byte) 3;
+		metadata[1] = (byte) 0;
+		cc.setMetadata( metadata );
+		s.persist( cc );
+		tx.commit();
+		s.close();
+		s = openSession();
+		tx = s.beginTransaction();
+		CompiledCode recompiled = (CompiledCode) s.get( CompiledCode.class, cc.getId() );
+		assertEquals( recompiled.getMetadata()[1], cc.getMetadata()[1] );
+		tx.commit();
+		s.close();
+	}
+
+	public LobTest(String x) {
+		super( x );
+	}
+
+	protected Class[] getMappings() {
+		return new Class[]{
+				Book.class,
+				CompiledCode.class
+		};
+	}
+}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany)

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Building.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Building.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Building.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,35 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.manytomany;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Building {
-	@Id @GeneratedValue private Long id;
-
-	@ManyToOne @JoinColumn(name="company_id", referencedColumnName = "name")
-	private BuildingCompany company;
-
-	public BuildingCompany getCompany() {
-		return company;
-	}
-
-	public void setCompany(BuildingCompany company) {
-		this.company = company;
-	}
-
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Building.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Building.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Building.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Building.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,35 @@
+//$Id: $
+package org.hibernate.test.annotations.manytomany;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Building {
+	@Id @GeneratedValue private Long id;
+
+	@ManyToOne @JoinColumn(name="company_id", referencedColumnName = "name")
+	private BuildingCompany company;
+
+	public BuildingCompany getCompany() {
+		return company;
+	}
+
+	public void setCompany(BuildingCompany company) {
+		this.company = company;
+	}
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/BuildingCompany.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/BuildingCompany.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/BuildingCompany.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,29 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.manytomany;
-
-import java.util.Date;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.GeneratedValue;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class BuildingCompany extends Company {
-	@Id @GeneratedValue private Long id;
-	private Date foundedIn;
-
-	public Date getFoundedIn() {
-		return foundedIn;
-	}
-
-	public void setFoundedIn(Date foundedIn) {
-		this.foundedIn = foundedIn;
-	}
-
-	public Long getId() {
-		return id;
-	}
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/BuildingCompany.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/BuildingCompany.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/BuildingCompany.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/BuildingCompany.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,29 @@
+//$Id: $
+package org.hibernate.test.annotations.manytomany;
+
+import java.util.Date;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class BuildingCompany extends Company {
+	@Id @GeneratedValue private Long id;
+	private Date foundedIn;
+
+	public Date getFoundedIn() {
+		return foundedIn;
+	}
+
+	public void setFoundedIn(Date foundedIn) {
+		this.foundedIn = foundedIn;
+	}
+
+	public Long getId() {
+		return id;
+	}
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Cat.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Cat.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Cat.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,60 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.manytomany;
-
-import java.util.Set;
-import javax.persistence.EmbeddedId;
-import javax.persistence.Entity;
-import javax.persistence.ManyToMany;
-import javax.persistence.Table;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Table(name = "tbl_cat")
-public class Cat {
-	private CatPk id;
-	private int age;
-	private Set<Woman> humanContacts;
-
-	@ManyToMany
-	public Set<Woman> getHumanContacts() {
-		return humanContacts;
-	}
-
-	public void setHumanContacts(Set<Woman> humanContacts) {
-		this.humanContacts = humanContacts;
-	}
-
-	@EmbeddedId()
-	public CatPk getId() {
-		return id;
-	}
-
-	public void setId(CatPk id) {
-		this.id = id;
-	}
-
-	public int getAge() {
-		return age;
-	}
-
-	public void setAge(int age) {
-		this.age = age;
-	}
-
-	public boolean equals(Object o) {
-		if ( this == o ) return true;
-		if ( !( o instanceof Cat ) ) return false;
-
-		final Cat cat = (Cat) o;
-
-		if ( !id.equals( cat.id ) ) return false;
-
-		return true;
-	}
-
-	public int hashCode() {
-		return id.hashCode();
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Cat.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Cat.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Cat.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Cat.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,60 @@
+//$Id$
+package org.hibernate.test.annotations.manytomany;
+
+import java.util.Set;
+import javax.persistence.EmbeddedId;
+import javax.persistence.Entity;
+import javax.persistence.ManyToMany;
+import javax.persistence.Table;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Table(name = "tbl_cat")
+public class Cat {
+	private CatPk id;
+	private int age;
+	private Set<Woman> humanContacts;
+
+	@ManyToMany
+	public Set<Woman> getHumanContacts() {
+		return humanContacts;
+	}
+
+	public void setHumanContacts(Set<Woman> humanContacts) {
+		this.humanContacts = humanContacts;
+	}
+
+	@EmbeddedId()
+	public CatPk getId() {
+		return id;
+	}
+
+	public void setId(CatPk id) {
+		this.id = id;
+	}
+
+	public int getAge() {
+		return age;
+	}
+
+	public void setAge(int age) {
+		this.age = age;
+	}
+
+	public boolean equals(Object o) {
+		if ( this == o ) return true;
+		if ( !( o instanceof Cat ) ) return false;
+
+		final Cat cat = (Cat) o;
+
+		if ( !id.equals( cat.id ) ) return false;
+
+		return true;
+	}
+
+	public int hashCode() {
+		return id.hashCode();
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/CatPk.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/CatPk.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/CatPk.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,47 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.manytomany;
-
-import java.io.Serializable;
-
-/**
- * @author Emmanuel Bernard
- */
-public class CatPk implements Serializable {
-	private String name;
-	private String thoroughbred;
-
-	public String getThoroughbred() {
-		return thoroughbred;
-	}
-
-	public void setThoroughbred(String thoroughbred) {
-		this.thoroughbred = thoroughbred;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	public boolean equals(Object o) {
-		if ( this == o ) return true;
-		if ( !( o instanceof CatPk ) ) return false;
-
-		final CatPk catPk = (CatPk) o;
-
-		if ( !name.equals( catPk.name ) ) return false;
-		if ( !thoroughbred.equals( catPk.thoroughbred ) ) return false;
-
-		return true;
-	}
-
-	public int hashCode() {
-		int result;
-		result = name.hashCode();
-		result = 29 * result + thoroughbred.hashCode();
-		return result;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/CatPk.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/CatPk.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/CatPk.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/CatPk.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,47 @@
+//$Id$
+package org.hibernate.test.annotations.manytomany;
+
+import java.io.Serializable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class CatPk implements Serializable {
+	private String name;
+	private String thoroughbred;
+
+	public String getThoroughbred() {
+		return thoroughbred;
+	}
+
+	public void setThoroughbred(String thoroughbred) {
+		this.thoroughbred = thoroughbred;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public boolean equals(Object o) {
+		if ( this == o ) return true;
+		if ( !( o instanceof CatPk ) ) return false;
+
+		final CatPk catPk = (CatPk) o;
+
+		if ( !name.equals( catPk.name ) ) return false;
+		if ( !thoroughbred.equals( catPk.thoroughbred ) ) return false;
+
+		return true;
+	}
+
+	public int hashCode() {
+		int result;
+		result = name.hashCode();
+		result = 29 * result + thoroughbred.hashCode();
+		return result;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/City.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/City.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/City.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,35 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.manytomany;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.Table;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Table(name = "tbl_city")
-public class City {
-	private Integer id;
-	private String name;
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/City.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/City.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/City.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/City.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,35 @@
+//$Id$
+package org.hibernate.test.annotations.manytomany;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Table(name = "tbl_city")
+public class City {
+	private Integer id;
+	private String name;
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Company.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Company.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Company.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,22 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.manytomany;
-
-import java.io.Serializable;
-import javax.persistence.MappedSuperclass;
-import javax.persistence.Column;
-
-/**
- * @author Emmanuel Bernard
- */
- at MappedSuperclass
-public class Company implements Serializable {
-	@Column(unique = true) private String name;
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Company.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Company.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Company.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Company.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,22 @@
+//$Id: $
+package org.hibernate.test.annotations.manytomany;
+
+import java.io.Serializable;
+import javax.persistence.MappedSuperclass;
+import javax.persistence.Column;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at MappedSuperclass
+public class Company implements Serializable {
+	@Column(unique = true) private String name;
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Employee.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Employee.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Employee.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,58 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.manytomany;
-
-import java.io.Serializable;
-import java.util.Collection;
-import javax.persistence.CascadeType;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.ManyToMany;
-import javax.persistence.Column;
-
-import org.hibernate.annotations.Cascade;
-
-/**
- * Employee in an Employer-Employee relationship
- *
- * @author Emmanuel Bernard
- */
- at Entity()
-public class Employee implements Serializable {
-	private Integer id;
-	private Collection<Employer> employers;
-	private String name;
-
-	@Column(name="fld_name")
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer integer) {
-		id = integer;
-	}
-
-	@ManyToMany(
-			cascade = {CascadeType.PERSIST, CascadeType.MERGE},
-			mappedBy = "employees"
-	)
-	@Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE,
-			org.hibernate.annotations.CascadeType.PERSIST})
-	public Collection<Employer> getEmployers() {
-		return employers;
-	}
-
-	public void setEmployers(Collection<Employer> employers) {
-		this.employers = employers;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Employee.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Employee.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Employee.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Employee.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,58 @@
+//$Id$
+package org.hibernate.test.annotations.manytomany;
+
+import java.io.Serializable;
+import java.util.Collection;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.ManyToMany;
+import javax.persistence.Column;
+
+import org.hibernate.annotations.Cascade;
+
+/**
+ * Employee in an Employer-Employee relationship
+ *
+ * @author Emmanuel Bernard
+ */
+ at Entity()
+public class Employee implements Serializable {
+	private Integer id;
+	private Collection<Employer> employers;
+	private String name;
+
+	@Column(name="fld_name")
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer integer) {
+		id = integer;
+	}
+
+	@ManyToMany(
+			cascade = {CascadeType.PERSIST, CascadeType.MERGE},
+			mappedBy = "employees"
+	)
+	@Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE,
+			org.hibernate.annotations.CascadeType.PERSIST})
+	public Collection<Employer> getEmployers() {
+		return employers;
+	}
+
+	public void setEmployers(Collection<Employer> employers) {
+		this.employers = employers;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Employer.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Employer.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Employer.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,57 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.manytomany;
-
-import java.io.Serializable;
-import java.util.Collection;
-import javax.persistence.CascadeType;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.JoinTable;
-import javax.persistence.ManyToMany;
-import javax.persistence.OrderBy;
-import javax.persistence.Table;
-
-import org.hibernate.annotations.Cascade;
-
-/**
- * Employer in a employer-Employee relationship
- *
- * @author Emmanuel Bernard
- */
- at Entity()
- at Table(name="`Employer`")
-public class Employer implements Serializable {
-	private Integer id;
-	private Collection employees;
-
-	@ManyToMany(
-			targetEntity = org.hibernate.test.annotations.manytomany.Employee.class,
-			cascade = {CascadeType.PERSIST, CascadeType.MERGE}
-	)
-	@JoinTable(
-			name = "EMPLOYER_EMPLOYEE",
-			joinColumns = {@JoinColumn(name = "EMPER_ID")},
-			inverseJoinColumns = {@JoinColumn(name = "EMPEE_ID")}
-	)
-	@Cascade(org.hibernate.annotations.CascadeType.SAVE_UPDATE)
-	@OrderBy("name")
-	public Collection getEmployees() {
-		return employees;
-	}
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setEmployees(Collection set) {
-		employees = set;
-	}
-
-	public void setId(Integer integer) {
-		id = integer;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Employer.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Employer.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Employer.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Employer.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,57 @@
+//$Id$
+package org.hibernate.test.annotations.manytomany;
+
+import java.io.Serializable;
+import java.util.Collection;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
+import javax.persistence.ManyToMany;
+import javax.persistence.OrderBy;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.Cascade;
+
+/**
+ * Employer in a employer-Employee relationship
+ *
+ * @author Emmanuel Bernard
+ */
+ at Entity()
+ at Table(name="`Employer`")
+public class Employer implements Serializable {
+	private Integer id;
+	private Collection employees;
+
+	@ManyToMany(
+			targetEntity = org.hibernate.test.annotations.manytomany.Employee.class,
+			cascade = {CascadeType.PERSIST, CascadeType.MERGE}
+	)
+	@JoinTable(
+			name = "EMPLOYER_EMPLOYEE",
+			joinColumns = {@JoinColumn(name = "EMPER_ID")},
+			inverseJoinColumns = {@JoinColumn(name = "EMPEE_ID")}
+	)
+	@Cascade(org.hibernate.annotations.CascadeType.SAVE_UPDATE)
+	@OrderBy("name")
+	public Collection getEmployees() {
+		return employees;
+	}
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setEmployees(Collection set) {
+		employees = set;
+	}
+
+	public void setId(Integer integer) {
+		id = integer;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Friend.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Friend.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Friend.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,59 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.manytomany;
-
-import java.io.Serializable;
-import java.util.Set;
-import javax.persistence.CascadeType;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.JoinTable;
-import javax.persistence.ManyToMany;
-
-
-/**
- * Friend has other friends in a many to many way
- *
- * @author Emmanuel Bernard
- */
- at Entity()
-public class Friend implements Serializable {
-	private Integer id;
-	private String name;
-	private Set<Friend> friends;
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setId(Integer integer) {
-		id = integer;
-	}
-
-	public void setName(String string) {
-		name = string;
-	}
-
-	@ManyToMany(
-			cascade = {CascadeType.PERSIST, CascadeType.MERGE}
-	)
-	@JoinTable(
-			name = "FRIEND2FRIEND",
-			joinColumns = {@JoinColumn(name = "FROM_FR", nullable = false)},
-			inverseJoinColumns = {@JoinColumn(name = "TO_FR", nullable = false)}
-	)
-	public Set<Friend> getFriends() {
-		return friends;
-	}
-
-	public void setFriends(Set<Friend> friend) {
-		this.friends = friend;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Friend.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Friend.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Friend.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Friend.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,59 @@
+//$Id$
+package org.hibernate.test.annotations.manytomany;
+
+import java.io.Serializable;
+import java.util.Set;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
+import javax.persistence.ManyToMany;
+
+
+/**
+ * Friend has other friends in a many to many way
+ *
+ * @author Emmanuel Bernard
+ */
+ at Entity()
+public class Friend implements Serializable {
+	private Integer id;
+	private String name;
+	private Set<Friend> friends;
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setId(Integer integer) {
+		id = integer;
+	}
+
+	public void setName(String string) {
+		name = string;
+	}
+
+	@ManyToMany(
+			cascade = {CascadeType.PERSIST, CascadeType.MERGE}
+	)
+	@JoinTable(
+			name = "FRIEND2FRIEND",
+			joinColumns = {@JoinColumn(name = "FROM_FR", nullable = false)},
+			inverseJoinColumns = {@JoinColumn(name = "TO_FR", nullable = false)}
+	)
+	public Set<Friend> getFriends() {
+		return friends;
+	}
+
+	public void setFriends(Set<Friend> friend) {
+		this.friends = friend;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Group.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Group.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Group.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,58 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.manytomany;
-
-import java.util.Collection;
-import javax.persistence.CascadeType;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.JoinTable;
-import javax.persistence.ManyToMany;
-import javax.persistence.OrderBy;
-import javax.persistence.Table;
-import javax.persistence.UniqueConstraint;
-
-import org.hibernate.annotations.Where;
-import org.hibernate.annotations.FilterDef;
-import org.hibernate.annotations.Filter;
-import org.hibernate.annotations.FilterJoinTable;
-import org.hibernate.annotations.WhereJoinTable;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Table(name = "tbl_group")
- at FilterDef(name="Groupfilter")
-public class Group {
-	private Integer id;
-	private Collection<Permission> permissions;
-
-	@Id
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	@ManyToMany(cascade = CascadeType.PERSIST)
-	@JoinTable(name = "GROUPS_PERMISSIONS",
-			uniqueConstraints = @UniqueConstraint(columnNames = {"group_id", "permission"}),
-			joinColumns = @JoinColumn(name = "group_id", referencedColumnName = "id"),
-			inverseJoinColumns = @JoinColumn(name = "permission", referencedColumnName = "permission")
-	)
-	@OrderBy("expirationDate")
-	@Where(clause = "1=1")
-	@WhereJoinTable(clause = "2=2")
-	@Filter(name="Groupfilter", condition = "3=3")
-	@FilterJoinTable(name="Groupfilter", condition = "4=4")
-	public Collection<Permission> getPermissions() {
-		return permissions;
-	}
-
-	public void setPermissions(Collection<Permission> permissions) {
-		this.permissions = permissions;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Group.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Group.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Group.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Group.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,58 @@
+//$Id$
+package org.hibernate.test.annotations.manytomany;
+
+import java.util.Collection;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
+import javax.persistence.ManyToMany;
+import javax.persistence.OrderBy;
+import javax.persistence.Table;
+import javax.persistence.UniqueConstraint;
+
+import org.hibernate.annotations.Where;
+import org.hibernate.annotations.FilterDef;
+import org.hibernate.annotations.Filter;
+import org.hibernate.annotations.FilterJoinTable;
+import org.hibernate.annotations.WhereJoinTable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Table(name = "tbl_group")
+ at FilterDef(name="Groupfilter")
+public class Group {
+	private Integer id;
+	private Collection<Permission> permissions;
+
+	@Id
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	@ManyToMany(cascade = CascadeType.PERSIST)
+	@JoinTable(name = "GROUPS_PERMISSIONS",
+			uniqueConstraints = @UniqueConstraint(columnNames = {"group_id", "permission"}),
+			joinColumns = @JoinColumn(name = "group_id", referencedColumnName = "id"),
+			inverseJoinColumns = @JoinColumn(name = "permission", referencedColumnName = "permission")
+	)
+	@OrderBy("expirationDate")
+	@Where(clause = "1=1")
+	@WhereJoinTable(clause = "2=2")
+	@Filter(name="Groupfilter", condition = "3=3")
+	@FilterJoinTable(name="Groupfilter", condition = "4=4")
+	public Collection<Permission> getPermissions() {
+		return permissions;
+	}
+
+	public void setPermissions(Collection<Permission> permissions) {
+		this.permissions = permissions;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/GroupWithSet.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/GroupWithSet.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/GroupWithSet.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,60 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.manytomany;
-
-import java.util.Collection;
-import java.util.Set;
-
-import javax.persistence.CascadeType;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.JoinTable;
-import javax.persistence.ManyToMany;
-import javax.persistence.OrderBy;
-import javax.persistence.Table;
-import javax.persistence.UniqueConstraint;
-
-import org.hibernate.annotations.Where;
-import org.hibernate.annotations.FilterDef;
-import org.hibernate.annotations.Filter;
-import org.hibernate.annotations.FilterJoinTable;
-import org.hibernate.annotations.WhereJoinTable;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Table(name = "tbl_group")
- at FilterDef(name="Groupfilter")
-public class GroupWithSet {
-	private Integer id;
-	private Set<Permission> permissions;
-
-	@Id
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	@ManyToMany(cascade = CascadeType.PERSIST)
-	@JoinTable(name = "GROUPS_PERMISSIONS",
-			uniqueConstraints = @UniqueConstraint(columnNames = {"group_id", "permission"}),
-			joinColumns = @JoinColumn(name = "group_id", referencedColumnName = "id"),
-			inverseJoinColumns = @JoinColumn(name = "permission", referencedColumnName = "permission")
-	)
-	@OrderBy("expirationDate")
-	@Where(clause = "1=1")
-	@WhereJoinTable(clause = "2=2")
-	@Filter(name="Groupfilter", condition = "3=3")
-	@FilterJoinTable(name="Groupfilter", condition = "4=4")
-	public Set<Permission> getPermissions() {
-		return permissions;
-	}
-
-	public void setPermissions(Set<Permission> permissions) {
-		this.permissions = permissions;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/GroupWithSet.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/GroupWithSet.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/GroupWithSet.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/GroupWithSet.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,60 @@
+//$Id$
+package org.hibernate.test.annotations.manytomany;
+
+import java.util.Collection;
+import java.util.Set;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
+import javax.persistence.ManyToMany;
+import javax.persistence.OrderBy;
+import javax.persistence.Table;
+import javax.persistence.UniqueConstraint;
+
+import org.hibernate.annotations.Where;
+import org.hibernate.annotations.FilterDef;
+import org.hibernate.annotations.Filter;
+import org.hibernate.annotations.FilterJoinTable;
+import org.hibernate.annotations.WhereJoinTable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Table(name = "tbl_group")
+ at FilterDef(name="Groupfilter")
+public class GroupWithSet {
+	private Integer id;
+	private Set<Permission> permissions;
+
+	@Id
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	@ManyToMany(cascade = CascadeType.PERSIST)
+	@JoinTable(name = "GROUPS_PERMISSIONS",
+			uniqueConstraints = @UniqueConstraint(columnNames = {"group_id", "permission"}),
+			joinColumns = @JoinColumn(name = "group_id", referencedColumnName = "id"),
+			inverseJoinColumns = @JoinColumn(name = "permission", referencedColumnName = "permission")
+	)
+	@OrderBy("expirationDate")
+	@Where(clause = "1=1")
+	@WhereJoinTable(clause = "2=2")
+	@Filter(name="Groupfilter", condition = "3=3")
+	@FilterJoinTable(name="Groupfilter", condition = "4=4")
+	public Set<Permission> getPermissions() {
+		return permissions;
+	}
+
+	public void setPermissions(Set<Permission> permissions) {
+		this.permissions = permissions;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Inspector.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Inspector.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Inspector.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,37 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.manytomany;
-
-import java.io.Serializable;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.Inheritance;
-import javax.persistence.InheritanceType;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Inheritance(strategy = InheritanceType.JOINED)
-class Inspector implements Serializable {
-	@Id
-	@GeneratedValue
-	@Column(name = "id")
-	private Long _id;
-
-	private String name;
-
-	public Long getId() {
-		return _id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-}
-

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Inspector.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Inspector.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Inspector.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Inspector.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,37 @@
+//$Id$
+package org.hibernate.test.annotations.manytomany;
+
+import java.io.Serializable;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Inheritance(strategy = InheritanceType.JOINED)
+class Inspector implements Serializable {
+	@Id
+	@GeneratedValue
+	@Column(name = "id")
+	private Long _id;
+
+	private String name;
+
+	public Long getId() {
+		return _id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+}
+

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/InspectorPrefixes.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/InspectorPrefixes.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/InspectorPrefixes.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,51 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.manytomany;
-
-import java.util.ArrayList;
-import java.util.List;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.JoinColumn;
-import javax.persistence.JoinTable;
-import javax.persistence.ManyToMany;
-import javax.persistence.PrimaryKeyJoinColumn;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at PrimaryKeyJoinColumn(name = "inspector_id")
-class InspectorPrefixes extends Inspector {
-	@Column(name = "prefixes", nullable = false)
-	private String prefixes;
-	@ManyToMany()
-	@JoinTable(name = "deserted_area",
-			joinColumns = @JoinColumn(name = "inspector_name", referencedColumnName = "name"),
-			inverseJoinColumns = @JoinColumn(name = "area_id", referencedColumnName = "id"))
-	private List<Zone> desertedAreas = new ArrayList<Zone>();
-
-	@ManyToMany()
-	@JoinTable(name = "inspector_prefixes_areas",
-			joinColumns = @JoinColumn(name = "inspector_id", referencedColumnName = "inspector_id"),
-			inverseJoinColumns = @JoinColumn(name = "area_id", referencedColumnName = "id"))
-	private List<Zone> areas = new ArrayList<Zone>();
-
-	InspectorPrefixes() {
-	}
-
-	InspectorPrefixes(String prefixes) {
-		this.prefixes = prefixes;
-	}
-
-	public String getPrefixes() {
-		return this.prefixes;
-	}
-
-	public List<Zone> getAreas() {
-		return areas;
-	}
-
-	public List<Zone> getDesertedAreas() {
-		return desertedAreas;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/InspectorPrefixes.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/InspectorPrefixes.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/InspectorPrefixes.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/InspectorPrefixes.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,51 @@
+//$Id$
+package org.hibernate.test.annotations.manytomany;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
+import javax.persistence.ManyToMany;
+import javax.persistence.PrimaryKeyJoinColumn;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at PrimaryKeyJoinColumn(name = "inspector_id")
+class InspectorPrefixes extends Inspector {
+	@Column(name = "prefixes", nullable = false)
+	private String prefixes;
+	@ManyToMany()
+	@JoinTable(name = "deserted_area",
+			joinColumns = @JoinColumn(name = "inspector_name", referencedColumnName = "name"),
+			inverseJoinColumns = @JoinColumn(name = "area_id", referencedColumnName = "id"))
+	private List<Zone> desertedAreas = new ArrayList<Zone>();
+
+	@ManyToMany()
+	@JoinTable(name = "inspector_prefixes_areas",
+			joinColumns = @JoinColumn(name = "inspector_id", referencedColumnName = "inspector_id"),
+			inverseJoinColumns = @JoinColumn(name = "area_id", referencedColumnName = "id"))
+	private List<Zone> areas = new ArrayList<Zone>();
+
+	InspectorPrefixes() {
+	}
+
+	InspectorPrefixes(String prefixes) {
+		this.prefixes = prefixes;
+	}
+
+	public String getPrefixes() {
+		return this.prefixes;
+	}
+
+	public List<Zone> getAreas() {
+		return areas;
+	}
+
+	public List<Zone> getDesertedAreas() {
+		return desertedAreas;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/KnownClient.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/KnownClient.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/KnownClient.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,45 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.manytomany;
-
-import java.util.Set;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.ManyToMany;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class KnownClient {
-	private Integer id;
-	private String name;
-	private Set<Store> stores;
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	@ManyToMany(mappedBy = "customers")
-	public Set<Store> getStores() {
-		return stores;
-	}
-
-	public void setStores(Set<Store> stores) {
-		this.stores = stores;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/KnownClient.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/KnownClient.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/KnownClient.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/KnownClient.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,45 @@
+//$Id$
+package org.hibernate.test.annotations.manytomany;
+
+import java.util.Set;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.ManyToMany;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class KnownClient {
+	private Integer id;
+	private String name;
+	private Set<Store> stores;
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	@ManyToMany(mappedBy = "customers")
+	public Set<Store> getStores() {
+		return stores;
+	}
+
+	public void setStores(Set<Store> stores) {
+		this.stores = stores;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Man.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Man.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Man.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,63 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.manytomany;
-
-import java.io.Serializable;
-import java.util.Set;
-import javax.persistence.CascadeType;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.ManyToMany;
-
-/**
- * Man knowing sevezral womens
- *
- * @author Emmanuel Bernard
- */
- at Entity
-public class Man implements Serializable {
-	private ManPk id;
-	private String carName;
-	private Set<Woman> womens;
-
-	@ManyToMany(cascade = {CascadeType.ALL}, mappedBy = "mens")
-	public Set<Woman> getWomens() {
-		return womens;
-	}
-
-	public void setWomens(Set<Woman> womens) {
-		this.womens = womens;
-	}
-
-	@Id
-	public ManPk getId() {
-		return id;
-	}
-
-	public void setId(ManPk id) {
-		this.id = id;
-	}
-
-	public String getCarName() {
-		return carName;
-	}
-
-	public void setCarName(String carName) {
-		this.carName = carName;
-	}
-
-	public int hashCode() {
-		//a NPE can occurs, but I don't expect hashcode to be used before pk is set
-		return getId().hashCode();
-	}
-
-	public boolean equals(Object obj) {
-		//a NPE can occurs, but I don't expect equals to be used before pk is set
-		if ( obj != null && obj instanceof Man ) {
-			return getId().equals( ( (Man) obj ).getId() );
-		}
-		else {
-			return false;
-		}
-	}
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Man.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Man.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Man.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Man.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,63 @@
+//$Id$
+package org.hibernate.test.annotations.manytomany;
+
+import java.io.Serializable;
+import java.util.Set;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.ManyToMany;
+
+/**
+ * Man knowing sevezral womens
+ *
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Man implements Serializable {
+	private ManPk id;
+	private String carName;
+	private Set<Woman> womens;
+
+	@ManyToMany(cascade = {CascadeType.ALL}, mappedBy = "mens")
+	public Set<Woman> getWomens() {
+		return womens;
+	}
+
+	public void setWomens(Set<Woman> womens) {
+		this.womens = womens;
+	}
+
+	@Id
+	public ManPk getId() {
+		return id;
+	}
+
+	public void setId(ManPk id) {
+		this.id = id;
+	}
+
+	public String getCarName() {
+		return carName;
+	}
+
+	public void setCarName(String carName) {
+		this.carName = carName;
+	}
+
+	public int hashCode() {
+		//a NPE can occurs, but I don't expect hashcode to be used before pk is set
+		return getId().hashCode();
+	}
+
+	public boolean equals(Object obj) {
+		//a NPE can occurs, but I don't expect equals to be used before pk is set
+		if ( obj != null && obj instanceof Man ) {
+			return getId().equals( ( (Man) obj ).getId() );
+		}
+		else {
+			return false;
+		}
+	}
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/ManPk.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/ManPk.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/ManPk.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,57 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.manytomany;
-
-import java.io.Serializable;
-import javax.persistence.Embeddable;
-
-/**
- * @author Emmanuel Bernard
- */
- at Embeddable
-public class ManPk implements Serializable {
-	private String firstName;
-	private String lastName;
-	private boolean isElder;
-
-	public boolean isElder() {
-		return isElder;
-	}
-
-	public void setElder(boolean elder) {
-		isElder = elder;
-	}
-
-	public int hashCode() {
-		//this implem sucks
-		return getFirstName().hashCode() + getLastName().hashCode() + ( isElder() ? 0 : 1 );
-	}
-
-	public boolean equals(Object obj) {
-		//firstName and lastName are expected to be set in this implem
-		if ( obj != null && obj instanceof ManPk ) {
-			ManPk other = (ManPk) obj;
-			return getFirstName().equals( other.getFirstName() )
-					&& getLastName().equals( other.getLastName() )
-					&& isElder() == other.isElder();
-		}
-		else {
-			return false;
-		}
-	}
-
-	public void setFirstName(String firstName) {
-		this.firstName = firstName;
-	}
-
-	public void setLastName(String lastName) {
-		this.lastName = lastName;
-	}
-
-	public String getFirstName() {
-		return firstName;
-	}
-
-	public String getLastName() {
-		return lastName;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/ManPk.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/ManPk.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/ManPk.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/ManPk.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,57 @@
+//$Id$
+package org.hibernate.test.annotations.manytomany;
+
+import java.io.Serializable;
+import javax.persistence.Embeddable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Embeddable
+public class ManPk implements Serializable {
+	private String firstName;
+	private String lastName;
+	private boolean isElder;
+
+	public boolean isElder() {
+		return isElder;
+	}
+
+	public void setElder(boolean elder) {
+		isElder = elder;
+	}
+
+	public int hashCode() {
+		//this implem sucks
+		return getFirstName().hashCode() + getLastName().hashCode() + ( isElder() ? 0 : 1 );
+	}
+
+	public boolean equals(Object obj) {
+		//firstName and lastName are expected to be set in this implem
+		if ( obj != null && obj instanceof ManPk ) {
+			ManPk other = (ManPk) obj;
+			return getFirstName().equals( other.getFirstName() )
+					&& getLastName().equals( other.getLastName() )
+					&& isElder() == other.isElder();
+		}
+		else {
+			return false;
+		}
+	}
+
+	public void setFirstName(String firstName) {
+		this.firstName = firstName;
+	}
+
+	public void setLastName(String lastName) {
+		this.lastName = lastName;
+	}
+
+	public String getFirstName() {
+		return firstName;
+	}
+
+	public String getLastName() {
+		return lastName;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/ManyToManyTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/ManyToManyTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/ManyToManyTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,597 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.manytomany;
-
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Date;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-
-import org.hibernate.Hibernate;
-import org.hibernate.JDBCException;
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-import org.hibernate.test.annotations.TestCase;
-
-/**
- * Many to many tests
- *
- * @author Emmanuel Bernard
- */
-public class ManyToManyTest extends TestCase {
-
-	public ManyToManyTest(String x) {
-		super( x );
-	}
-
-	public void testDefault() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		Store fnac = new Store();
-		fnac.setName( "Fnac" );
-		KnownClient emmanuel = new KnownClient();
-		emmanuel.setName( "Emmanuel" );
-		emmanuel.setStores( new HashSet<Store>() );
-		fnac.setCustomers( new HashSet<KnownClient>() );
-		fnac.getCustomers().add( emmanuel );
-		emmanuel.getStores().add( fnac );
-		fnac.setImplantedIn( new HashSet<City>() );
-		City paris = new City();
-		fnac.getImplantedIn().add( paris );
-		paris.setName( "Paris" );
-		s.persist( fnac );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		Store store;
-		KnownClient knownClient;
-		City city;
-		store = (Store) s.get( Store.class, fnac.getId() );
-		assertNotNull( store );
-		assertNotNull( store.getCustomers() );
-		assertEquals( 1, store.getCustomers().size() );
-		knownClient = (KnownClient) store.getCustomers().iterator().next();
-		assertEquals( emmanuel.getName(), knownClient.getName() );
-		assertNotNull( store.getImplantedIn() );
-		assertEquals( 1, store.getImplantedIn().size() );
-		city = (City) store.getImplantedIn().iterator().next();
-		assertEquals( paris.getName(), city.getName() );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		knownClient = (KnownClient) s.get( KnownClient.class, emmanuel.getId() );
-		assertNotNull( knownClient );
-		assertNotNull( knownClient.getStores() );
-		assertEquals( 1, knownClient.getStores().size() );
-		store = (Store) knownClient.getStores().iterator().next();
-		assertEquals( fnac.getName(), store.getName() );
-		tx.commit();
-		s.close();
-	}
-
-	public void testDefaultCompositePk() throws Exception {
-		Session s;
-		Transaction tx;
-
-		s = openSession();
-		tx = s.beginTransaction();
-		CatPk catPk = new CatPk();
-		catPk.setName( "Minou" );
-		catPk.setThoroughbred( "Persan" );
-		Cat cat = new Cat();
-		cat.setId( catPk );
-		cat.setAge( 32 );
-		Woman woman = new Woman();
-		WomanPk womanPk = new WomanPk();
-		womanPk.setFirstName( "Emma" );
-		womanPk.setLastName( "Peel" );
-		woman.setId( womanPk );
-		woman.setCats( new HashSet<Cat>() );
-		woman.getCats().add( cat );
-		cat.setHumanContacts( new HashSet<Woman>() );
-		cat.getHumanContacts().add( woman );
-		s.persist( woman );
-		s.persist( cat );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		Cat sameCat = (Cat) s.get( Cat.class, cat.getId() );
-		assertNotNull( sameCat );
-		assertNotNull( sameCat.getHumanContacts() );
-		assertEquals( 1, sameCat.getHumanContacts().size() );
-		Woman sameWoman = sameCat.getHumanContacts().iterator().next();
-		assertEquals( sameWoman.getId().getLastName(), woman.getId().getLastName() );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		sameWoman = (Woman) s.get( Woman.class, woman.getId() );
-		assertNotNull( sameWoman );
-		assertNotNull( sameWoman.getCats() );
-		assertEquals( 1, sameWoman.getCats().size() );
-		sameCat = sameWoman.getCats().iterator().next();
-		assertEquals( cat.getAge(), sameCat.getAge() );
-		tx.commit();
-		s.close();
-	}
-
-	public void testMappedBy() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		Store fnac = new Store();
-		fnac.setName( "Fnac" );
-		Supplier emi = new Supplier();
-		emi.setName( "Emmanuel" );
-		emi.setSuppStores( new HashSet<Store>() );
-		fnac.setSuppliers( new HashSet<Supplier>() );
-		fnac.getSuppliers().add( emi );
-		emi.getSuppStores().add( fnac );
-		s.persist( fnac );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		Store store;
-		Supplier supplier;
-		store = (Store) s.get( Store.class, fnac.getId() );
-		assertNotNull( store );
-		assertNotNull( store.getSuppliers() );
-		assertEquals( 1, store.getSuppliers().size() );
-		supplier = (Supplier) store.getSuppliers().iterator().next();
-		assertEquals( emi.getName(), supplier.getName() );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		supplier = (Supplier) s.get( Supplier.class, emi.getId() );
-		assertNotNull( supplier );
-		assertNotNull( supplier.getSuppStores() );
-		assertEquals( 1, supplier.getSuppStores().size() );
-		store = (Store) supplier.getSuppStores().iterator().next();
-		assertEquals( fnac.getName(), store.getName() );
-		tx.commit();
-		s.close();
-	}
-
-	public void testBasic() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		Employer er = new Employer();
-		Employee ee = new Employee();
-		s.persist( ee );
-		Set erColl = new HashSet();
-		Collection eeColl = new ArrayList();
-		erColl.add( ee );
-		eeColl.add( er );
-		er.setEmployees( erColl );
-		ee.setEmployers( eeColl );
-		//s.persist(ee);
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		er = (Employer) s.load( Employer.class, er.getId() );
-		assertNotNull( er );
-		assertNotNull( er.getEmployees() );
-		assertEquals( 1, er.getEmployees().size() );
-		Employee eeFromDb = (Employee) er.getEmployees().iterator().next();
-		assertEquals( ee.getId(), eeFromDb.getId() );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		ee = (Employee) s.get( Employee.class, ee.getId() );
-		assertNotNull( ee );
-		assertFalse( "ManyToMany mappedBy lazyness", Hibernate.isInitialized( ee.getEmployers() ) );
-		tx.commit();
-		assertFalse( "ManyToMany mappedBy lazyness", Hibernate.isInitialized( ee.getEmployers() ) );
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		ee = (Employee) s.get( Employee.class, ee.getId() );
-		assertNotNull( ee );
-		er = ee.getEmployers().iterator().next();
-		assertTrue( "second join non lazy", Hibernate.isInitialized( er ) );
-		s.delete( er );
-		s.delete( ee );
-		tx.commit();
-		s.close();
-	}
-
-	public void testOrderBy() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		Employer er = new Employer();
-		Employee ee = new Employee();
-		ee.setName( "Emmanuel" );
-		Employee ee2 = new Employee();
-		ee2.setName( "Alice" );
-		s.persist( ee );
-		s.persist( ee2 );
-		Set erColl = new HashSet();
-		Collection eeColl = new ArrayList();
-		Collection eeColl2 = new ArrayList();
-		erColl.add( ee );
-		erColl.add( ee2 );
-		eeColl.add( er );
-		eeColl2.add( er );
-		er.setEmployees( erColl );
-		ee.setEmployers( eeColl );
-		ee2.setEmployers( eeColl2 );
-		//s.persist(ee);
-
-		s.flush();
-		s.clear();
-
-		er = (Employer) s.get( Employer.class, er.getId() );
-		assertNotNull( er );
-		assertNotNull( er.getEmployees() );
-		assertEquals( 2, er.getEmployees().size() );
-		Employee eeFromDb = (Employee) er.getEmployees().iterator().next();
-		assertEquals( ee2.getName(), eeFromDb.getName() );
-		tx.rollback();
-		s.close();
-
-	}
-
-	public void testRemoveInBetween() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		Employer er = new Employer();
-		Employee ee = new Employee();
-		Employee ee2 = new Employee();
-		s.persist( ee );
-		s.persist( ee2 );
-		Set erColl = new HashSet();
-		Collection eeColl = new ArrayList();
-		erColl.add( ee );
-		erColl.add( ee2 );
-		eeColl.add( er );
-		er.setEmployees( erColl );
-		ee.setEmployers( eeColl );
-		//s.persist(ee);
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		er = (Employer) s.load( Employer.class, er.getId() );
-		assertNotNull( er );
-		assertNotNull( er.getEmployees() );
-		assertEquals( 2, er.getEmployees().size() );
-		Iterator iterator = er.getEmployees().iterator();
-		Employee eeFromDb = (Employee) iterator.next();
-		if ( eeFromDb.getId().equals( ee.getId() ) ) {
-			eeFromDb = (Employee) iterator.next();
-		}
-		assertEquals( ee2.getId(), eeFromDb.getId() );
-		er.getEmployees().remove( eeFromDb );
-		eeFromDb.getEmployers().remove( er );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		ee = (Employee) s.get( Employee.class, ee.getId() );
-		assertNotNull( ee );
-		assertFalse( "ManyToMany mappedBy lazyness", Hibernate.isInitialized( ee.getEmployers() ) );
-		tx.commit();
-		assertFalse( "ManyToMany mappedBy lazyness", Hibernate.isInitialized( ee.getEmployers() ) );
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		ee = (Employee) s.get( Employee.class, ee.getId() );
-		assertNotNull( ee );
-		er = ee.getEmployers().iterator().next();
-		assertTrue( "second join non lazy", Hibernate.isInitialized( er ) );
-		assertEquals( 1, er.getEmployees().size() );
-		s.delete( er );
-		s.delete( ee );
-		tx.commit();
-		s.close();
-	}
-
-	public void testSelf() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		Friend f = new Friend();
-		Friend sndF = new Friend();
-		f.setName( "Starsky" );
-		sndF.setName( "Hutch" );
-		Set frnds = new HashSet();
-		frnds.add( sndF );
-		f.setFriends( frnds );
-		//Starsky is a friend of Hutch but hutch is not
-		s.persist( f );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		f = (Friend) s.load( Friend.class, f.getId() );
-		assertNotNull( f );
-		assertNotNull( f.getFriends() );
-		assertEquals( 1, f.getFriends().size() );
-		Friend fromDb2ndFrnd = (Friend) f.getFriends().iterator().next();
-		assertEquals( fromDb2ndFrnd.getId(), sndF.getId() );
-		assertEquals( 0, fromDb2ndFrnd.getFriends().size() );
-		tx.commit();
-		s.close();
-	}
-
-	public void testCompositePk() throws Exception {
-		Session s;
-		Transaction tx;
-
-		ManPk m1pk = new ManPk();
-		m1pk.setElder( true );
-		m1pk.setFirstName( "Lucky" );
-		m1pk.setLastName( "Luke" );
-		ManPk m2pk = new ManPk();
-		m2pk.setElder( false );
-		m2pk.setFirstName( "Joe" );
-		m2pk.setLastName( "Dalton" );
-
-		Man m1 = new Man();
-		m1.setId( m1pk );
-		m1.setCarName( "Jolly Jumper" );
-		Man m2 = new Man();
-		m2.setId( m2pk );
-
-		WomanPk w1pk = new WomanPk();
-		w1pk.setFirstName( "Ma" );
-		w1pk.setLastName( "Dalton" );
-		WomanPk w2pk = new WomanPk();
-		w2pk.setFirstName( "Carla" );
-		w2pk.setLastName( "Bruni" );
-
-		Woman w1 = new Woman();
-		w1.setId( w1pk );
-		Woman w2 = new Woman();
-		w2.setId( w2pk );
-
-		Set<Woman> womens = new HashSet<Woman>();
-		womens.add( w1 );
-		m1.setWomens( womens );
-		Set<Woman> womens2 = new HashSet<Woman>();
-		womens2.add( w1 );
-		womens2.add( w2 );
-		m2.setWomens( womens2 );
-
-		Set<Man> mens = new HashSet<Man>();
-		mens.add( m1 );
-		mens.add( m2 );
-		w1.setMens( mens );
-		Set<Man> mens2 = new HashSet<Man>();
-		mens2.add( m2 );
-		w2.setMens( mens2 );
-
-		s = openSession();
-		tx = s.beginTransaction();
-		s.persist( m1 );
-		s.persist( m2 );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		m1 = (Man) s.load( Man.class, m1pk );
-		assertFalse( m1.getWomens().isEmpty() );
-		assertEquals( 1, m1.getWomens().size() );
-		w1 = (Woman) s.load( Woman.class, w1pk );
-		assertFalse( w1.getMens().isEmpty() );
-		assertEquals( 2, w1.getMens().size() );
-
-		tx.commit();
-		s.close();
-	}
-
-	public void testAssociationTableUniqueConstraints() throws Exception {
-		Session s = openSession();
-		Permission readAccess = new Permission();
-		readAccess.setPermission( "read" );
-		readAccess.setExpirationDate( new Date() );
-		Collection<Permission> coll = new ArrayList<Permission>( 2 );
-		coll.add( readAccess );
-		coll.add( readAccess );
-		Group group = new Group();
-		group.setId( new Integer( 1 ) );
-		group.setPermissions( coll );
-		s.getTransaction().begin();
-		try {
-			s.persist( group );
-			s.getTransaction().commit();
-			fail( "Unique constraints not applied on association table" );
-		}
-		catch (JDBCException e) {
-			//success
-			s.getTransaction().rollback();
-		}
-		finally {
-			s.close();
-		}
-	}
-
-	public void testAssociationTableAndOrderBy() throws Exception {
-		Session s = openSession();
-		s.enableFilter( "Groupfilter" );
-		Permission readAccess = new Permission();
-		readAccess.setPermission( "read" );
-		readAccess.setExpirationDate( new Date() );
-		Permission writeAccess = new Permission();
-		writeAccess.setPermission( "write" );
-		writeAccess.setExpirationDate( new Date( new Date().getTime() - 10*60*1000 ) );
-		Collection<Permission> coll = new ArrayList<Permission>( 2 );
-		coll.add( readAccess );
-		coll.add( writeAccess );
-		Group group = new Group();
-		group.setId( new Integer( 1 ) );
-		group.setPermissions( coll );
-		s.getTransaction().begin();
-		s.persist( group );
-		s.flush();
-		s.clear();
-		group = (Group) s.get( Group.class, group.getId() );
-		s.createQuery( "select g from Group g join fetch g.permissions").list();
-		assertEquals( "write", group.getPermissions().iterator().next().getPermission() );
-		s.getTransaction().rollback();
-		s.close();
-	}
-
-	public void testAssociationTableAndOrderByWithSet() throws Exception {
-		Session s = openSession();
-		s.enableFilter( "Groupfilter" );
-
-		Permission readAccess = new Permission();
-		readAccess.setPermission( "read" );
-		readAccess.setExpirationDate( new Date() );
-		
-		Permission writeAccess = new Permission();
-		writeAccess.setPermission( "write" );
-		writeAccess.setExpirationDate( new Date( new Date().getTime() - 10*60*1000 ) );
-		
-		Permission executeAccess = new Permission();
-		executeAccess.setPermission( "execute" );
-		executeAccess.setExpirationDate( new Date( new Date().getTime() - 5*60*1000 ) );
-		
-		Set<Permission> coll = new HashSet<Permission>( 3 );
-		coll.add( readAccess );
-		coll.add( writeAccess );
-		coll.add( executeAccess );
-
-		GroupWithSet group = new GroupWithSet();
-		group.setId( new Integer( 1 ) );
-		group.setPermissions( coll );
-		s.getTransaction().begin();
-		s.persist( group );
-		s.flush();
-		s.clear();
-
-		group = (GroupWithSet) s.get( GroupWithSet.class, group.getId() );
-		s.createQuery( "select g from Group g join fetch g.permissions").list();
-		Iterator<Permission> permIter = group.getPermissions().iterator();
-		assertEquals( "write", permIter.next().getPermission() );
-		assertEquals( "execute", permIter.next().getPermission() );
-		assertEquals( "read", permIter.next().getPermission() );
-		s.getTransaction().rollback();
-		s.close();
-	}
-	
-	public void testJoinedSubclassManyToMany() throws Exception {
-		Session s = openSession();
-		Zone a = new Zone();
-		InspectorPrefixes ip = new InspectorPrefixes( "dgi" );
-		Transaction tx = s.beginTransaction();
-		s.save( a );
-		s.save( ip );
-		ip.getAreas().add( a );
-		tx.commit();
-		s.close();
-		s = openSession();
-		tx = s.beginTransaction();
-		ip = (InspectorPrefixes) s.get( InspectorPrefixes.class, ip.getId() );
-		assertNotNull( ip );
-		assertEquals( 1, ip.getAreas().size() );
-		assertEquals( a.getId(), ip.getAreas().get( 0 ).getId() );
-		s.delete( ip );
-		s.delete( ip.getAreas().get( 0 ) );
-		tx.commit();
-		s.close();
-	}
-
-	public void testJoinedSubclassManyToManyWithNonPkReference() throws Exception {
-		Session s = openSession();
-		Zone a = new Zone();
-		InspectorPrefixes ip = new InspectorPrefixes( "dgi" );
-		ip.setName( "Inspector" );
-		Transaction tx = s.beginTransaction();
-		s.save( a );
-		s.save( ip );
-		ip.getDesertedAreas().add( a );
-		tx.commit();
-		s.close();
-		s = openSession();
-		tx = s.beginTransaction();
-		ip = (InspectorPrefixes) s.get( InspectorPrefixes.class, ip.getId() );
-		assertNotNull( ip );
-		assertEquals( 1, ip.getDesertedAreas().size() );
-		assertEquals( a.getId(), ip.getDesertedAreas().get( 0 ).getId() );
-		s.delete( ip );
-		s.delete( ip.getDesertedAreas().get( 0 ) );
-		tx.commit();
-		s.close();
-	}
-
-	public void testReferencedColumnNameToSuperclass() throws Exception {
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		BuildingCompany comp = new BuildingCompany();
-		comp.setFoundedIn( new Date() );
-		comp.setName( "Builder century corp.");
-		s.persist( comp );
-		Building building = new Building();
-		building.setCompany( comp );
-		s.persist( building );
-		s.flush();
-		s.clear();
-		building = (Building) s.get( Building.class, building.getId() );
-		assertEquals( comp.getName(), building.getCompany().getName() );
-		tx.rollback();
-		s.close();
-	}
-
-	/**
-	 * @see org.hibernate.test.annotations.TestCase#getMappings()
-	 */
-	protected Class[] getMappings() {
-		return new Class[]{
-				Friend.class,
-				Employer.class,
-				Employee.class,
-				Man.class,
-				Woman.class,
-				Store.class,
-				KnownClient.class,
-				Supplier.class,
-				City.class,
-				Cat.class,
-				Group.class,
-				GroupWithSet.class,
-				Permission.class,
-				Zone.class,
-				Inspector.class,
-				InspectorPrefixes.class,
-				BuildingCompany.class,
-				Building.class
-
-		};
-	}
-
-}
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/ManyToManyTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/ManyToManyTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/ManyToManyTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/ManyToManyTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,597 @@
+//$Id$
+package org.hibernate.test.annotations.manytomany;
+
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+import org.hibernate.Hibernate;
+import org.hibernate.JDBCException;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * Many to many tests
+ *
+ * @author Emmanuel Bernard
+ */
+public class ManyToManyTest extends TestCase {
+
+	public ManyToManyTest(String x) {
+		super( x );
+	}
+
+	public void testDefault() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		Store fnac = new Store();
+		fnac.setName( "Fnac" );
+		KnownClient emmanuel = new KnownClient();
+		emmanuel.setName( "Emmanuel" );
+		emmanuel.setStores( new HashSet<Store>() );
+		fnac.setCustomers( new HashSet<KnownClient>() );
+		fnac.getCustomers().add( emmanuel );
+		emmanuel.getStores().add( fnac );
+		fnac.setImplantedIn( new HashSet<City>() );
+		City paris = new City();
+		fnac.getImplantedIn().add( paris );
+		paris.setName( "Paris" );
+		s.persist( fnac );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		Store store;
+		KnownClient knownClient;
+		City city;
+		store = (Store) s.get( Store.class, fnac.getId() );
+		assertNotNull( store );
+		assertNotNull( store.getCustomers() );
+		assertEquals( 1, store.getCustomers().size() );
+		knownClient = (KnownClient) store.getCustomers().iterator().next();
+		assertEquals( emmanuel.getName(), knownClient.getName() );
+		assertNotNull( store.getImplantedIn() );
+		assertEquals( 1, store.getImplantedIn().size() );
+		city = (City) store.getImplantedIn().iterator().next();
+		assertEquals( paris.getName(), city.getName() );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		knownClient = (KnownClient) s.get( KnownClient.class, emmanuel.getId() );
+		assertNotNull( knownClient );
+		assertNotNull( knownClient.getStores() );
+		assertEquals( 1, knownClient.getStores().size() );
+		store = (Store) knownClient.getStores().iterator().next();
+		assertEquals( fnac.getName(), store.getName() );
+		tx.commit();
+		s.close();
+	}
+
+	public void testDefaultCompositePk() throws Exception {
+		Session s;
+		Transaction tx;
+
+		s = openSession();
+		tx = s.beginTransaction();
+		CatPk catPk = new CatPk();
+		catPk.setName( "Minou" );
+		catPk.setThoroughbred( "Persan" );
+		Cat cat = new Cat();
+		cat.setId( catPk );
+		cat.setAge( 32 );
+		Woman woman = new Woman();
+		WomanPk womanPk = new WomanPk();
+		womanPk.setFirstName( "Emma" );
+		womanPk.setLastName( "Peel" );
+		woman.setId( womanPk );
+		woman.setCats( new HashSet<Cat>() );
+		woman.getCats().add( cat );
+		cat.setHumanContacts( new HashSet<Woman>() );
+		cat.getHumanContacts().add( woman );
+		s.persist( woman );
+		s.persist( cat );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		Cat sameCat = (Cat) s.get( Cat.class, cat.getId() );
+		assertNotNull( sameCat );
+		assertNotNull( sameCat.getHumanContacts() );
+		assertEquals( 1, sameCat.getHumanContacts().size() );
+		Woman sameWoman = sameCat.getHumanContacts().iterator().next();
+		assertEquals( sameWoman.getId().getLastName(), woman.getId().getLastName() );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		sameWoman = (Woman) s.get( Woman.class, woman.getId() );
+		assertNotNull( sameWoman );
+		assertNotNull( sameWoman.getCats() );
+		assertEquals( 1, sameWoman.getCats().size() );
+		sameCat = sameWoman.getCats().iterator().next();
+		assertEquals( cat.getAge(), sameCat.getAge() );
+		tx.commit();
+		s.close();
+	}
+
+	public void testMappedBy() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		Store fnac = new Store();
+		fnac.setName( "Fnac" );
+		Supplier emi = new Supplier();
+		emi.setName( "Emmanuel" );
+		emi.setSuppStores( new HashSet<Store>() );
+		fnac.setSuppliers( new HashSet<Supplier>() );
+		fnac.getSuppliers().add( emi );
+		emi.getSuppStores().add( fnac );
+		s.persist( fnac );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		Store store;
+		Supplier supplier;
+		store = (Store) s.get( Store.class, fnac.getId() );
+		assertNotNull( store );
+		assertNotNull( store.getSuppliers() );
+		assertEquals( 1, store.getSuppliers().size() );
+		supplier = (Supplier) store.getSuppliers().iterator().next();
+		assertEquals( emi.getName(), supplier.getName() );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		supplier = (Supplier) s.get( Supplier.class, emi.getId() );
+		assertNotNull( supplier );
+		assertNotNull( supplier.getSuppStores() );
+		assertEquals( 1, supplier.getSuppStores().size() );
+		store = (Store) supplier.getSuppStores().iterator().next();
+		assertEquals( fnac.getName(), store.getName() );
+		tx.commit();
+		s.close();
+	}
+
+	public void testBasic() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		Employer er = new Employer();
+		Employee ee = new Employee();
+		s.persist( ee );
+		Set erColl = new HashSet();
+		Collection eeColl = new ArrayList();
+		erColl.add( ee );
+		eeColl.add( er );
+		er.setEmployees( erColl );
+		ee.setEmployers( eeColl );
+		//s.persist(ee);
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		er = (Employer) s.load( Employer.class, er.getId() );
+		assertNotNull( er );
+		assertNotNull( er.getEmployees() );
+		assertEquals( 1, er.getEmployees().size() );
+		Employee eeFromDb = (Employee) er.getEmployees().iterator().next();
+		assertEquals( ee.getId(), eeFromDb.getId() );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		ee = (Employee) s.get( Employee.class, ee.getId() );
+		assertNotNull( ee );
+		assertFalse( "ManyToMany mappedBy lazyness", Hibernate.isInitialized( ee.getEmployers() ) );
+		tx.commit();
+		assertFalse( "ManyToMany mappedBy lazyness", Hibernate.isInitialized( ee.getEmployers() ) );
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		ee = (Employee) s.get( Employee.class, ee.getId() );
+		assertNotNull( ee );
+		er = ee.getEmployers().iterator().next();
+		assertTrue( "second join non lazy", Hibernate.isInitialized( er ) );
+		s.delete( er );
+		s.delete( ee );
+		tx.commit();
+		s.close();
+	}
+
+	public void testOrderBy() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		Employer er = new Employer();
+		Employee ee = new Employee();
+		ee.setName( "Emmanuel" );
+		Employee ee2 = new Employee();
+		ee2.setName( "Alice" );
+		s.persist( ee );
+		s.persist( ee2 );
+		Set erColl = new HashSet();
+		Collection eeColl = new ArrayList();
+		Collection eeColl2 = new ArrayList();
+		erColl.add( ee );
+		erColl.add( ee2 );
+		eeColl.add( er );
+		eeColl2.add( er );
+		er.setEmployees( erColl );
+		ee.setEmployers( eeColl );
+		ee2.setEmployers( eeColl2 );
+		//s.persist(ee);
+
+		s.flush();
+		s.clear();
+
+		er = (Employer) s.get( Employer.class, er.getId() );
+		assertNotNull( er );
+		assertNotNull( er.getEmployees() );
+		assertEquals( 2, er.getEmployees().size() );
+		Employee eeFromDb = (Employee) er.getEmployees().iterator().next();
+		assertEquals( ee2.getName(), eeFromDb.getName() );
+		tx.rollback();
+		s.close();
+
+	}
+
+	public void testRemoveInBetween() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		Employer er = new Employer();
+		Employee ee = new Employee();
+		Employee ee2 = new Employee();
+		s.persist( ee );
+		s.persist( ee2 );
+		Set erColl = new HashSet();
+		Collection eeColl = new ArrayList();
+		erColl.add( ee );
+		erColl.add( ee2 );
+		eeColl.add( er );
+		er.setEmployees( erColl );
+		ee.setEmployers( eeColl );
+		//s.persist(ee);
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		er = (Employer) s.load( Employer.class, er.getId() );
+		assertNotNull( er );
+		assertNotNull( er.getEmployees() );
+		assertEquals( 2, er.getEmployees().size() );
+		Iterator iterator = er.getEmployees().iterator();
+		Employee eeFromDb = (Employee) iterator.next();
+		if ( eeFromDb.getId().equals( ee.getId() ) ) {
+			eeFromDb = (Employee) iterator.next();
+		}
+		assertEquals( ee2.getId(), eeFromDb.getId() );
+		er.getEmployees().remove( eeFromDb );
+		eeFromDb.getEmployers().remove( er );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		ee = (Employee) s.get( Employee.class, ee.getId() );
+		assertNotNull( ee );
+		assertFalse( "ManyToMany mappedBy lazyness", Hibernate.isInitialized( ee.getEmployers() ) );
+		tx.commit();
+		assertFalse( "ManyToMany mappedBy lazyness", Hibernate.isInitialized( ee.getEmployers() ) );
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		ee = (Employee) s.get( Employee.class, ee.getId() );
+		assertNotNull( ee );
+		er = ee.getEmployers().iterator().next();
+		assertTrue( "second join non lazy", Hibernate.isInitialized( er ) );
+		assertEquals( 1, er.getEmployees().size() );
+		s.delete( er );
+		s.delete( ee );
+		tx.commit();
+		s.close();
+	}
+
+	public void testSelf() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		Friend f = new Friend();
+		Friend sndF = new Friend();
+		f.setName( "Starsky" );
+		sndF.setName( "Hutch" );
+		Set frnds = new HashSet();
+		frnds.add( sndF );
+		f.setFriends( frnds );
+		//Starsky is a friend of Hutch but hutch is not
+		s.persist( f );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		f = (Friend) s.load( Friend.class, f.getId() );
+		assertNotNull( f );
+		assertNotNull( f.getFriends() );
+		assertEquals( 1, f.getFriends().size() );
+		Friend fromDb2ndFrnd = (Friend) f.getFriends().iterator().next();
+		assertEquals( fromDb2ndFrnd.getId(), sndF.getId() );
+		assertEquals( 0, fromDb2ndFrnd.getFriends().size() );
+		tx.commit();
+		s.close();
+	}
+
+	public void testCompositePk() throws Exception {
+		Session s;
+		Transaction tx;
+
+		ManPk m1pk = new ManPk();
+		m1pk.setElder( true );
+		m1pk.setFirstName( "Lucky" );
+		m1pk.setLastName( "Luke" );
+		ManPk m2pk = new ManPk();
+		m2pk.setElder( false );
+		m2pk.setFirstName( "Joe" );
+		m2pk.setLastName( "Dalton" );
+
+		Man m1 = new Man();
+		m1.setId( m1pk );
+		m1.setCarName( "Jolly Jumper" );
+		Man m2 = new Man();
+		m2.setId( m2pk );
+
+		WomanPk w1pk = new WomanPk();
+		w1pk.setFirstName( "Ma" );
+		w1pk.setLastName( "Dalton" );
+		WomanPk w2pk = new WomanPk();
+		w2pk.setFirstName( "Carla" );
+		w2pk.setLastName( "Bruni" );
+
+		Woman w1 = new Woman();
+		w1.setId( w1pk );
+		Woman w2 = new Woman();
+		w2.setId( w2pk );
+
+		Set<Woman> womens = new HashSet<Woman>();
+		womens.add( w1 );
+		m1.setWomens( womens );
+		Set<Woman> womens2 = new HashSet<Woman>();
+		womens2.add( w1 );
+		womens2.add( w2 );
+		m2.setWomens( womens2 );
+
+		Set<Man> mens = new HashSet<Man>();
+		mens.add( m1 );
+		mens.add( m2 );
+		w1.setMens( mens );
+		Set<Man> mens2 = new HashSet<Man>();
+		mens2.add( m2 );
+		w2.setMens( mens2 );
+
+		s = openSession();
+		tx = s.beginTransaction();
+		s.persist( m1 );
+		s.persist( m2 );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		m1 = (Man) s.load( Man.class, m1pk );
+		assertFalse( m1.getWomens().isEmpty() );
+		assertEquals( 1, m1.getWomens().size() );
+		w1 = (Woman) s.load( Woman.class, w1pk );
+		assertFalse( w1.getMens().isEmpty() );
+		assertEquals( 2, w1.getMens().size() );
+
+		tx.commit();
+		s.close();
+	}
+
+	public void testAssociationTableUniqueConstraints() throws Exception {
+		Session s = openSession();
+		Permission readAccess = new Permission();
+		readAccess.setPermission( "read" );
+		readAccess.setExpirationDate( new Date() );
+		Collection<Permission> coll = new ArrayList<Permission>( 2 );
+		coll.add( readAccess );
+		coll.add( readAccess );
+		Group group = new Group();
+		group.setId( new Integer( 1 ) );
+		group.setPermissions( coll );
+		s.getTransaction().begin();
+		try {
+			s.persist( group );
+			s.getTransaction().commit();
+			fail( "Unique constraints not applied on association table" );
+		}
+		catch (JDBCException e) {
+			//success
+			s.getTransaction().rollback();
+		}
+		finally {
+			s.close();
+		}
+	}
+
+	public void testAssociationTableAndOrderBy() throws Exception {
+		Session s = openSession();
+		s.enableFilter( "Groupfilter" );
+		Permission readAccess = new Permission();
+		readAccess.setPermission( "read" );
+		readAccess.setExpirationDate( new Date() );
+		Permission writeAccess = new Permission();
+		writeAccess.setPermission( "write" );
+		writeAccess.setExpirationDate( new Date( new Date().getTime() - 10*60*1000 ) );
+		Collection<Permission> coll = new ArrayList<Permission>( 2 );
+		coll.add( readAccess );
+		coll.add( writeAccess );
+		Group group = new Group();
+		group.setId( new Integer( 1 ) );
+		group.setPermissions( coll );
+		s.getTransaction().begin();
+		s.persist( group );
+		s.flush();
+		s.clear();
+		group = (Group) s.get( Group.class, group.getId() );
+		s.createQuery( "select g from Group g join fetch g.permissions").list();
+		assertEquals( "write", group.getPermissions().iterator().next().getPermission() );
+		s.getTransaction().rollback();
+		s.close();
+	}
+
+	public void testAssociationTableAndOrderByWithSet() throws Exception {
+		Session s = openSession();
+		s.enableFilter( "Groupfilter" );
+
+		Permission readAccess = new Permission();
+		readAccess.setPermission( "read" );
+		readAccess.setExpirationDate( new Date() );
+		
+		Permission writeAccess = new Permission();
+		writeAccess.setPermission( "write" );
+		writeAccess.setExpirationDate( new Date( new Date().getTime() - 10*60*1000 ) );
+		
+		Permission executeAccess = new Permission();
+		executeAccess.setPermission( "execute" );
+		executeAccess.setExpirationDate( new Date( new Date().getTime() - 5*60*1000 ) );
+		
+		Set<Permission> coll = new HashSet<Permission>( 3 );
+		coll.add( readAccess );
+		coll.add( writeAccess );
+		coll.add( executeAccess );
+
+		GroupWithSet group = new GroupWithSet();
+		group.setId( new Integer( 1 ) );
+		group.setPermissions( coll );
+		s.getTransaction().begin();
+		s.persist( group );
+		s.flush();
+		s.clear();
+
+		group = (GroupWithSet) s.get( GroupWithSet.class, group.getId() );
+		s.createQuery( "select g from Group g join fetch g.permissions").list();
+		Iterator<Permission> permIter = group.getPermissions().iterator();
+		assertEquals( "write", permIter.next().getPermission() );
+		assertEquals( "execute", permIter.next().getPermission() );
+		assertEquals( "read", permIter.next().getPermission() );
+		s.getTransaction().rollback();
+		s.close();
+	}
+	
+	public void testJoinedSubclassManyToMany() throws Exception {
+		Session s = openSession();
+		Zone a = new Zone();
+		InspectorPrefixes ip = new InspectorPrefixes( "dgi" );
+		Transaction tx = s.beginTransaction();
+		s.save( a );
+		s.save( ip );
+		ip.getAreas().add( a );
+		tx.commit();
+		s.close();
+		s = openSession();
+		tx = s.beginTransaction();
+		ip = (InspectorPrefixes) s.get( InspectorPrefixes.class, ip.getId() );
+		assertNotNull( ip );
+		assertEquals( 1, ip.getAreas().size() );
+		assertEquals( a.getId(), ip.getAreas().get( 0 ).getId() );
+		s.delete( ip );
+		s.delete( ip.getAreas().get( 0 ) );
+		tx.commit();
+		s.close();
+	}
+
+	public void testJoinedSubclassManyToManyWithNonPkReference() throws Exception {
+		Session s = openSession();
+		Zone a = new Zone();
+		InspectorPrefixes ip = new InspectorPrefixes( "dgi" );
+		ip.setName( "Inspector" );
+		Transaction tx = s.beginTransaction();
+		s.save( a );
+		s.save( ip );
+		ip.getDesertedAreas().add( a );
+		tx.commit();
+		s.close();
+		s = openSession();
+		tx = s.beginTransaction();
+		ip = (InspectorPrefixes) s.get( InspectorPrefixes.class, ip.getId() );
+		assertNotNull( ip );
+		assertEquals( 1, ip.getDesertedAreas().size() );
+		assertEquals( a.getId(), ip.getDesertedAreas().get( 0 ).getId() );
+		s.delete( ip );
+		s.delete( ip.getDesertedAreas().get( 0 ) );
+		tx.commit();
+		s.close();
+	}
+
+	public void testReferencedColumnNameToSuperclass() throws Exception {
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		BuildingCompany comp = new BuildingCompany();
+		comp.setFoundedIn( new Date() );
+		comp.setName( "Builder century corp.");
+		s.persist( comp );
+		Building building = new Building();
+		building.setCompany( comp );
+		s.persist( building );
+		s.flush();
+		s.clear();
+		building = (Building) s.get( Building.class, building.getId() );
+		assertEquals( comp.getName(), building.getCompany().getName() );
+		tx.rollback();
+		s.close();
+	}
+
+	/**
+	 * @see org.hibernate.test.annotations.TestCase#getMappings()
+	 */
+	protected Class[] getMappings() {
+		return new Class[]{
+				Friend.class,
+				Employer.class,
+				Employee.class,
+				Man.class,
+				Woman.class,
+				Store.class,
+				KnownClient.class,
+				Supplier.class,
+				City.class,
+				Cat.class,
+				Group.class,
+				GroupWithSet.class,
+				Permission.class,
+				Zone.class,
+				Inspector.class,
+				InspectorPrefixes.class,
+				BuildingCompany.class,
+				Building.class
+
+		};
+	}
+
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Permission.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Permission.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Permission.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,32 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.manytomany;
-
-import java.util.Date;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Permission {
-	private String permission;
-	private Date expirationDate;
-
-	@Id
-	public String getPermission() {
-		return permission;
-	}
-
-	public void setPermission(String permission) {
-		this.permission = permission;
-	}
-
-	public Date getExpirationDate() {
-		return expirationDate;
-	}
-
-	public void setExpirationDate(Date expirationDate) {
-		this.expirationDate = expirationDate;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Permission.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Permission.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Permission.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Permission.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,32 @@
+//$Id$
+package org.hibernate.test.annotations.manytomany;
+
+import java.util.Date;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Permission {
+	private String permission;
+	private Date expirationDate;
+
+	@Id
+	public String getPermission() {
+		return permission;
+	}
+
+	public void setPermission(String permission) {
+		this.permission = permission;
+	}
+
+	public Date getExpirationDate() {
+		return expirationDate;
+	}
+
+	public void setExpirationDate(Date expirationDate) {
+		this.expirationDate = expirationDate;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Store.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Store.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Store.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,74 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.manytomany;
-
-import java.util.Set;
-import javax.persistence.CascadeType;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.JoinTable;
-import javax.persistence.ManyToMany;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Store {
-	private Integer id;
-	private String name;
-	private Set<KnownClient> customers;
-	private Set<Supplier> suppliers;
-
-	@ManyToMany(cascade = CascadeType.PERSIST)
-	public Set<City> getImplantedIn() {
-		return implantedIn;
-	}
-
-	public void setImplantedIn(Set<City> implantedIn) {
-		this.implantedIn = implantedIn;
-	}
-
-	private Set<City> implantedIn;
-
-	@ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
-	@JoinTable(
-			name = "StoreSupplier",
-			joinColumns = @JoinColumn(name = "store"),
-			inverseJoinColumns = @JoinColumn(name = "supplier")
-	)
-	public Set<Supplier> getSuppliers() {
-		return suppliers;
-	}
-
-	public void setSuppliers(Set<Supplier> suppliers) {
-		this.suppliers = suppliers;
-	}
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	@ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
-	public Set<KnownClient> getCustomers() {
-		return customers;
-	}
-
-	public void setCustomers(Set<KnownClient> customers) {
-		this.customers = customers;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Store.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Store.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Store.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Store.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,74 @@
+//$Id$
+package org.hibernate.test.annotations.manytomany;
+
+import java.util.Set;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
+import javax.persistence.ManyToMany;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Store {
+	private Integer id;
+	private String name;
+	private Set<KnownClient> customers;
+	private Set<Supplier> suppliers;
+
+	@ManyToMany(cascade = CascadeType.PERSIST)
+	public Set<City> getImplantedIn() {
+		return implantedIn;
+	}
+
+	public void setImplantedIn(Set<City> implantedIn) {
+		this.implantedIn = implantedIn;
+	}
+
+	private Set<City> implantedIn;
+
+	@ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
+	@JoinTable(
+			name = "StoreSupplier",
+			joinColumns = @JoinColumn(name = "store"),
+			inverseJoinColumns = @JoinColumn(name = "supplier")
+	)
+	public Set<Supplier> getSuppliers() {
+		return suppliers;
+	}
+
+	public void setSuppliers(Set<Supplier> suppliers) {
+		this.suppliers = suppliers;
+	}
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	@ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
+	public Set<KnownClient> getCustomers() {
+		return customers;
+	}
+
+	public void setCustomers(Set<KnownClient> customers) {
+		this.customers = customers;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Supplier.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Supplier.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Supplier.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,46 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.manytomany;
-
-import java.util.Set;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.ManyToMany;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Supplier {
-	private Integer id;
-	private String name;
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	private Set<Store> suppStores;
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	@ManyToMany(mappedBy = "suppliers")
-	public Set<Store> getSuppStores() {
-		return suppStores;
-	}
-
-	public void setSuppStores(Set<Store> suppStores) {
-		this.suppStores = suppStores;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Supplier.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Supplier.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Supplier.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Supplier.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,46 @@
+//$Id$
+package org.hibernate.test.annotations.manytomany;
+
+import java.util.Set;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.ManyToMany;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Supplier {
+	private Integer id;
+	private String name;
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	private Set<Store> suppStores;
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	@ManyToMany(mappedBy = "suppliers")
+	public Set<Store> getSuppStores() {
+		return suppStores;
+	}
+
+	public void setSuppStores(Set<Store> suppStores) {
+		this.suppStores = suppStores;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Woman.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Woman.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Woman.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,91 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.manytomany;
-
-import java.io.Serializable;
-import java.util.Set;
-import javax.persistence.CascadeType;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.JoinTable;
-import javax.persistence.ManyToMany;
-
-import org.hibernate.annotations.ForeignKey;
-
-/**
- * Woman knowing several mens
- *
- * @author Emmanuel Bernard
- */
- at Entity
-public class Woman implements Serializable {
-	private WomanPk id;
-	private String carName;
-	private Set<Man> mens;
-	private Set<Cat> cats;
-
-	@ManyToMany(mappedBy = "humanContacts")
-	public Set<Cat> getCats() {
-		return cats;
-	}
-
-	public void setCats(Set<Cat> cats) {
-		this.cats = cats;
-	}
-
-	@ManyToMany(cascade = {CascadeType.ALL})
-	@JoinTable(
-			name = "Man_Woman",
-			joinColumns = {
-			@JoinColumn(name = "womanLastName", referencedColumnName = "lastName"),
-			@JoinColumn(name = "womanFirstName", referencedColumnName = "firstName")
-					},
-			inverseJoinColumns = {
-			@JoinColumn(name = "manIsElder", referencedColumnName = "elder"),
-			@JoinColumn(name = "manLastName", referencedColumnName = "lastName"),
-			@JoinColumn(name = "manFirstName", referencedColumnName = "firstName")
-					}
-	)
-	@ForeignKey(name = "WM_W_FK", inverseName = "WM_M_FK")
-	public Set<Man> getMens() {
-		return mens;
-	}
-
-	public void setMens(Set<Man> mens) {
-		this.mens = mens;
-	}
-
-	@Id
-	public WomanPk getId() {
-		return id;
-	}
-
-	public void setId(WomanPk id) {
-		this.id = id;
-	}
-
-	public String getCarName() {
-		return carName;
-	}
-
-	public void setCarName(String carName) {
-		this.carName = carName;
-	}
-
-
-	public int hashCode() {
-		//a NPE can occurs, but I don't expect hashcode to be used before pk is set
-		return getId().hashCode();
-	}
-
-	public boolean equals(Object obj) {
-		//a NPE can occurs, but I don't expect equals to be used before pk is set
-		if ( obj != null && obj instanceof Woman ) {
-			return getId().equals( ( (Woman) obj ).getId() );
-		}
-		else {
-			return false;
-		}
-	}
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Woman.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Woman.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Woman.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Woman.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,91 @@
+//$Id$
+package org.hibernate.test.annotations.manytomany;
+
+import java.io.Serializable;
+import java.util.Set;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
+import javax.persistence.ManyToMany;
+
+import org.hibernate.annotations.ForeignKey;
+
+/**
+ * Woman knowing several mens
+ *
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Woman implements Serializable {
+	private WomanPk id;
+	private String carName;
+	private Set<Man> mens;
+	private Set<Cat> cats;
+
+	@ManyToMany(mappedBy = "humanContacts")
+	public Set<Cat> getCats() {
+		return cats;
+	}
+
+	public void setCats(Set<Cat> cats) {
+		this.cats = cats;
+	}
+
+	@ManyToMany(cascade = {CascadeType.ALL})
+	@JoinTable(
+			name = "Man_Woman",
+			joinColumns = {
+			@JoinColumn(name = "womanLastName", referencedColumnName = "lastName"),
+			@JoinColumn(name = "womanFirstName", referencedColumnName = "firstName")
+					},
+			inverseJoinColumns = {
+			@JoinColumn(name = "manIsElder", referencedColumnName = "elder"),
+			@JoinColumn(name = "manLastName", referencedColumnName = "lastName"),
+			@JoinColumn(name = "manFirstName", referencedColumnName = "firstName")
+					}
+	)
+	@ForeignKey(name = "WM_W_FK", inverseName = "WM_M_FK")
+	public Set<Man> getMens() {
+		return mens;
+	}
+
+	public void setMens(Set<Man> mens) {
+		this.mens = mens;
+	}
+
+	@Id
+	public WomanPk getId() {
+		return id;
+	}
+
+	public void setId(WomanPk id) {
+		this.id = id;
+	}
+
+	public String getCarName() {
+		return carName;
+	}
+
+	public void setCarName(String carName) {
+		this.carName = carName;
+	}
+
+
+	public int hashCode() {
+		//a NPE can occurs, but I don't expect hashcode to be used before pk is set
+		return getId().hashCode();
+	}
+
+	public boolean equals(Object obj) {
+		//a NPE can occurs, but I don't expect equals to be used before pk is set
+		if ( obj != null && obj instanceof Woman ) {
+			return getId().equals( ( (Woman) obj ).getId() );
+		}
+		else {
+			return false;
+		}
+	}
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/WomanPk.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/WomanPk.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/WomanPk.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,49 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.manytomany;
-
-import java.io.Serializable;
-import javax.persistence.Embeddable;
-
-/**
- * @author Emmanuel Bernard
- */
- at Embeddable
-public class WomanPk implements Serializable {
-
-
-	private String firstName;
-	private String lastName;
-
-	public int hashCode() {
-		//this implem sucks
-		return getFirstName().hashCode() + getLastName().hashCode();
-	}
-
-	public boolean equals(Object obj) {
-		//firstName and lastName are expected to be set in this implem
-		if ( obj != null && obj instanceof WomanPk ) {
-			WomanPk other = (WomanPk) obj;
-			return getFirstName().equals( other.getFirstName() )
-					&& getLastName().equals( other.getLastName() );
-		}
-		else {
-			return false;
-		}
-	}
-
-	public void setFirstName(String firstName) {
-		this.firstName = firstName;
-	}
-
-	public void setLastName(String lastName) {
-		this.lastName = lastName;
-	}
-
-	public String getFirstName() {
-		return firstName;
-	}
-
-	public String getLastName() {
-		return lastName;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/WomanPk.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/WomanPk.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/WomanPk.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/WomanPk.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,49 @@
+//$Id$
+package org.hibernate.test.annotations.manytomany;
+
+import java.io.Serializable;
+import javax.persistence.Embeddable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Embeddable
+public class WomanPk implements Serializable {
+
+
+	private String firstName;
+	private String lastName;
+
+	public int hashCode() {
+		//this implem sucks
+		return getFirstName().hashCode() + getLastName().hashCode();
+	}
+
+	public boolean equals(Object obj) {
+		//firstName and lastName are expected to be set in this implem
+		if ( obj != null && obj instanceof WomanPk ) {
+			WomanPk other = (WomanPk) obj;
+			return getFirstName().equals( other.getFirstName() )
+					&& getLastName().equals( other.getLastName() );
+		}
+		else {
+			return false;
+		}
+	}
+
+	public void setFirstName(String firstName) {
+		this.firstName = firstName;
+	}
+
+	public void setLastName(String lastName) {
+		this.lastName = lastName;
+	}
+
+	public String getFirstName() {
+		return firstName;
+	}
+
+	public String getLastName() {
+		return lastName;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Zone.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Zone.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Zone.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,27 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.manytomany;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Zone {
-	private Integer id;
-
-	@Id
-	@GeneratedValue
-	@Column(name = "id")
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Zone.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Zone.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Zone.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytomany/Zone.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,27 @@
+//$Id$
+package org.hibernate.test.annotations.manytomany;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Zone {
+	private Integer id;
+
+	@Id
+	@GeneratedValue
+	@Column(name = "id")
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone)

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/BiggestForest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/BiggestForest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/BiggestForest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,34 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.manytoone;
-
-import javax.persistence.Entity;
-import javax.persistence.OneToOne;
-import javax.persistence.Id;
-import javax.persistence.GeneratedValue;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class BiggestForest {
-	private Integer id;
-	private ForestType type;
-
-	@Id @GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	@OneToOne(mappedBy = "biggestRepresentative")
-	public ForestType getType() {
-		return type;
-	}
-
-	public void setType(ForestType type) {
-		this.type = type;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/BiggestForest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/BiggestForest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/BiggestForest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/BiggestForest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,34 @@
+//$Id: $
+package org.hibernate.test.annotations.manytoone;
+
+import javax.persistence.Entity;
+import javax.persistence.OneToOne;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class BiggestForest {
+	private Integer id;
+	private ForestType type;
+
+	@Id @GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	@OneToOne(mappedBy = "biggestRepresentative")
+	public ForestType getType() {
+		return type;
+	}
+
+	public void setType(ForestType type) {
+		this.type = type;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Car.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Car.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Car.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,51 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.manytoone;
-
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.ManyToOne;
-
-import org.hibernate.annotations.ForeignKey;
-
-/**
- * Many to one sample using default mapping values
- *
- * @author Emmanuel Bernard
- */
- at Entity
-public class Car {
-	private Integer id;
-	private Color bodyColor;
-	private Parent owner;
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	@ManyToOne(fetch = FetchType.EAGER)
-	@ForeignKey(name="BODY_COLOR_FK")
-	public Color getBodyColor() {
-		return bodyColor;
-	}
-
-	public void setBodyColor(Color bodyColor) {
-		this.bodyColor = bodyColor;
-	}
-
-	@ManyToOne
-	public Parent getOwner() {
-		return owner;
-	}
-
-	public void setOwner(Parent owner) {
-		this.owner = owner;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Car.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Car.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Car.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Car.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,51 @@
+//$Id$
+package org.hibernate.test.annotations.manytoone;
+
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+
+import org.hibernate.annotations.ForeignKey;
+
+/**
+ * Many to one sample using default mapping values
+ *
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Car {
+	private Integer id;
+	private Color bodyColor;
+	private Parent owner;
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	@ManyToOne(fetch = FetchType.EAGER)
+	@ForeignKey(name="BODY_COLOR_FK")
+	public Color getBodyColor() {
+		return bodyColor;
+	}
+
+	public void setBodyColor(Color bodyColor) {
+		this.bodyColor = bodyColor;
+	}
+
+	@ManyToOne
+	public Parent getOwner() {
+		return owner;
+	}
+
+	public void setOwner(Parent owner) {
+		this.owner = owner;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Carz.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Carz.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Carz.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,124 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.manytoone;
-
-import java.io.Serializable;
-import java.util.Date;
-import javax.persistence.Entity;
-import javax.persistence.ManyToOne;
-import javax.persistence.Column;
-import javax.persistence.JoinColumns;
-import javax.persistence.FetchType;
-import javax.persistence.JoinColumn;
-import javax.persistence.TemporalType;
-import javax.persistence.Id;
-import javax.persistence.Temporal;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Carz implements Serializable {
-	@Id
-	private Integer id;
-
-	@Column( name = "make", nullable = false )
-	private String make;
-
-	@Column( name = "model", nullable = false )
-	private String model;
-
-	@Column( name = "manufactured", nullable = false )
-	@Temporal( TemporalType.TIMESTAMP )
-	private Date manufactured;
-
-	@ManyToOne( fetch = FetchType.LAZY )
-	@JoinColumn( name = "loc_code", referencedColumnName = "loc_code" )
-	private Lotz lot;
-
-	public Carz() {
-	}
-
-	public Integer getId() {
-		return this.id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public Lotz getLot() {
-		return this.lot;
-	}
-
-	public void setLot(Lotz lot) {
-		this.lot = lot;
-	}
-
-	public String getMake() {
-		return this.make;
-	}
-
-	public void setMake(String make) {
-		this.make = make;
-	}
-
-	public Date getManufactured() {
-		return this.manufactured;
-	}
-
-	public void setManufactured(Date manufactured) {
-		this.manufactured = manufactured;
-	}
-
-	public String getModel() {
-		return this.model;
-	}
-
-	public void setModel(String model) {
-		this.model = model;
-	}
-
-	@Override
-	public int hashCode() {
-		final int PRIME = 31;
-		int result = 1;
-		result = PRIME * result + ( ( this.id == null ) ?
-				0 :
-				this.id.hashCode() );
-		result = PRIME * result + ( ( this.make == null ) ?
-				0 :
-				this.make.hashCode() );
-		result = PRIME * result + ( ( this.manufactured == null ) ?
-				0 :
-				this.manufactured.hashCode() );
-		result = PRIME * result + ( ( this.model == null ) ?
-				0 :
-				this.model.hashCode() );
-		return result;
-	}
-
-	@Override
-	public boolean equals(Object obj) {
-		if ( this == obj ) return true;
-		if ( obj == null ) return false;
-		if ( getClass() != obj.getClass() ) return false;
-		final Carz other = (Carz) obj;
-		if ( this.id == null ) {
-			if ( other.id != null ) return false;
-		}
-		else if ( !this.id.equals( other.id ) ) return false;
-		if ( this.make == null ) {
-			if ( other.make != null ) return false;
-		}
-		else if ( !this.make.equals( other.make ) ) return false;
-		if ( this.manufactured == null ) {
-			if ( other.manufactured != null ) return false;
-		}
-		else if ( !this.manufactured.equals( other.manufactured ) ) return false;
-		if ( this.model == null ) {
-			if ( other.model != null ) return false;
-		}
-		else if ( !this.model.equals( other.model ) ) return false;
-		return true;
-	}
-}
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Carz.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Carz.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Carz.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Carz.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,124 @@
+//$Id: $
+package org.hibernate.test.annotations.manytoone;
+
+import java.io.Serializable;
+import java.util.Date;
+import javax.persistence.Entity;
+import javax.persistence.ManyToOne;
+import javax.persistence.Column;
+import javax.persistence.JoinColumns;
+import javax.persistence.FetchType;
+import javax.persistence.JoinColumn;
+import javax.persistence.TemporalType;
+import javax.persistence.Id;
+import javax.persistence.Temporal;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Carz implements Serializable {
+	@Id
+	private Integer id;
+
+	@Column( name = "make", nullable = false )
+	private String make;
+
+	@Column( name = "model", nullable = false )
+	private String model;
+
+	@Column( name = "manufactured", nullable = false )
+	@Temporal( TemporalType.TIMESTAMP )
+	private Date manufactured;
+
+	@ManyToOne( fetch = FetchType.LAZY )
+	@JoinColumn( name = "loc_code", referencedColumnName = "loc_code" )
+	private Lotz lot;
+
+	public Carz() {
+	}
+
+	public Integer getId() {
+		return this.id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public Lotz getLot() {
+		return this.lot;
+	}
+
+	public void setLot(Lotz lot) {
+		this.lot = lot;
+	}
+
+	public String getMake() {
+		return this.make;
+	}
+
+	public void setMake(String make) {
+		this.make = make;
+	}
+
+	public Date getManufactured() {
+		return this.manufactured;
+	}
+
+	public void setManufactured(Date manufactured) {
+		this.manufactured = manufactured;
+	}
+
+	public String getModel() {
+		return this.model;
+	}
+
+	public void setModel(String model) {
+		this.model = model;
+	}
+
+	@Override
+	public int hashCode() {
+		final int PRIME = 31;
+		int result = 1;
+		result = PRIME * result + ( ( this.id == null ) ?
+				0 :
+				this.id.hashCode() );
+		result = PRIME * result + ( ( this.make == null ) ?
+				0 :
+				this.make.hashCode() );
+		result = PRIME * result + ( ( this.manufactured == null ) ?
+				0 :
+				this.manufactured.hashCode() );
+		result = PRIME * result + ( ( this.model == null ) ?
+				0 :
+				this.model.hashCode() );
+		return result;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if ( this == obj ) return true;
+		if ( obj == null ) return false;
+		if ( getClass() != obj.getClass() ) return false;
+		final Carz other = (Carz) obj;
+		if ( this.id == null ) {
+			if ( other.id != null ) return false;
+		}
+		else if ( !this.id.equals( other.id ) ) return false;
+		if ( this.make == null ) {
+			if ( other.make != null ) return false;
+		}
+		else if ( !this.make.equals( other.make ) ) return false;
+		if ( this.manufactured == null ) {
+			if ( other.manufactured != null ) return false;
+		}
+		else if ( !this.manufactured.equals( other.manufactured ) ) return false;
+		if ( this.model == null ) {
+			if ( other.model != null ) return false;
+		}
+		else if ( !this.model.equals( other.model ) ) return false;
+		return true;
+	}
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Child.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Child.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Child.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,32 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.manytoone;
-
-import java.io.Serializable;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.JoinColumns;
-import javax.persistence.ManyToOne;
-import javax.persistence.Table;
-
-/**
- * TODO: change this sample with an Address -> Country relation. This is more accurate
- *
- * @author Emmanuel Bernard
- */
- at Entity
- at Table(name = "tbl_child")
-public class Child implements Serializable {
-	@Id
-	@GeneratedValue
-	public Integer id;
-
-	@ManyToOne()
-	@JoinColumns({
-	@JoinColumn(name = "parentCivility", referencedColumnName = "isMale"),
-	@JoinColumn(name = "parentLastName", referencedColumnName = "lastName"),
-	@JoinColumn(name = "parentFirstName", referencedColumnName = "firstName")
-			})
-	public Parent parent;
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Child.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Child.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Child.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Child.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,32 @@
+//$Id$
+package org.hibernate.test.annotations.manytoone;
+
+import java.io.Serializable;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinColumns;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+/**
+ * TODO: change this sample with an Address -> Country relation. This is more accurate
+ *
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Table(name = "tbl_child")
+public class Child implements Serializable {
+	@Id
+	@GeneratedValue
+	public Integer id;
+
+	@ManyToOne()
+	@JoinColumns({
+	@JoinColumn(name = "parentCivility", referencedColumnName = "isMale"),
+	@JoinColumn(name = "parentLastName", referencedColumnName = "lastName"),
+	@JoinColumn(name = "parentFirstName", referencedColumnName = "firstName")
+			})
+	public Parent parent;
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Color.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Color.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Color.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,37 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.manytoone;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-
-/**
- * Color showing a surrogate key and a unique constraint to ensure business rule
- *
- * @author Emmanuel Bernard
- */
- at Entity
-public class Color {
-	private Integer id;
-	private String name;
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	@Column(unique = true)
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Color.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Color.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Color.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Color.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,37 @@
+//$Id$
+package org.hibernate.test.annotations.manytoone;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * Color showing a surrogate key and a unique constraint to ensure business rule
+ *
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Color {
+	private Integer id;
+	private String name;
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	@Column(unique = true)
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Customer.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Customer.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Customer.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,16 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.manytoone;
-
-import java.io.Serializable;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity(name="DealedCustomer")
-public class Customer implements Serializable {
-	@Id @GeneratedValue public Integer id;
-	public String userId;
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Customer.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Customer.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Customer.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Customer.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,16 @@
+//$Id: $
+package org.hibernate.test.annotations.manytoone;
+
+import java.io.Serializable;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity(name="DealedCustomer")
+public class Customer implements Serializable {
+	@Id @GeneratedValue public Integer id;
+	public String userId;
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Deal.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Deal.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Deal.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,19 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.manytoone;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.GeneratedValue;
-import javax.persistence.ManyToOne;
-import javax.persistence.JoinColumn;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Deal {
-	@Id @GeneratedValue public Integer id;
-	@ManyToOne @JoinColumn(referencedColumnName = "userId") public Customer from;
-	@ManyToOne @JoinColumn(referencedColumnName = "userId") public Customer to;
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Deal.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Deal.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Deal.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Deal.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,19 @@
+//$Id: $
+package org.hibernate.test.annotations.manytoone;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+import javax.persistence.ManyToOne;
+import javax.persistence.JoinColumn;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Deal {
+	@Id @GeneratedValue public Integer id;
+	@ManyToOne @JoinColumn(referencedColumnName = "userId") public Customer from;
+	@ManyToOne @JoinColumn(referencedColumnName = "userId") public Customer to;
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/DistrictUser.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/DistrictUser.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/DistrictUser.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,43 +0,0 @@
-package org.hibernate.test.annotations.manytoone;
-
-import java.util.Date;
-import javax.persistence.CascadeType;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.JoinColumns;
-import javax.persistence.ManyToOne;
-import javax.persistence.Table;
-
- at Entity
- at Table(name = "CLRUS2DI")
-public class DistrictUser {
-	@Id
-	@GeneratedValue
-	@Column(name = "CLRUS2DI_KEY")
-	private Long id;
-
-	@Column(name = "CLRUS2DI_CREATE_USERS_KEY")
-	private Long createdBy;
-
-	@Column(name = "CLRUS2DI_CREATE_DATE")
-	private Date createdOn;
-
-	//@ManyToOne(cascade = CascadeType.ALL)
-	//@JoinColumn(name = "CLRUS2DI_DISTR_KEY")
-	//private District district;
-
-	@ManyToOne(cascade = CascadeType.ALL)
-	@JoinColumns({@JoinColumn(name = "CLRUS2DI_USERS_KEY", referencedColumnName = "CTVUSERS_KEY"),
-	@JoinColumn(name = "CLRUS2DI_BEGIN_DATE", referencedColumnName = "CTVUSERS_START_DATE"),
-	@JoinColumn(name = "CLRUS2DI_END_DATE", referencedColumnName = "CTVUSERS_END_DATE")})
-	private User user;
-
-	@Column(name = "CLRUS2DI_LDTMD_KEY")
-	private Long ldtmd;
-
-	@Column(name = "CLRUS2DI_PMTMP_KEY")
-	private Long pmtmp;
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/DistrictUser.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/DistrictUser.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/DistrictUser.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/DistrictUser.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,43 @@
+package org.hibernate.test.annotations.manytoone;
+
+import java.util.Date;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinColumns;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+ at Entity
+ at Table(name = "CLRUS2DI")
+public class DistrictUser {
+	@Id
+	@GeneratedValue
+	@Column(name = "CLRUS2DI_KEY")
+	private Long id;
+
+	@Column(name = "CLRUS2DI_CREATE_USERS_KEY")
+	private Long createdBy;
+
+	@Column(name = "CLRUS2DI_CREATE_DATE")
+	private Date createdOn;
+
+	//@ManyToOne(cascade = CascadeType.ALL)
+	//@JoinColumn(name = "CLRUS2DI_DISTR_KEY")
+	//private District district;
+
+	@ManyToOne(cascade = CascadeType.ALL)
+	@JoinColumns({@JoinColumn(name = "CLRUS2DI_USERS_KEY", referencedColumnName = "CTVUSERS_KEY"),
+	@JoinColumn(name = "CLRUS2DI_BEGIN_DATE", referencedColumnName = "CTVUSERS_START_DATE"),
+	@JoinColumn(name = "CLRUS2DI_END_DATE", referencedColumnName = "CTVUSERS_END_DATE")})
+	private User user;
+
+	@Column(name = "CLRUS2DI_LDTMD_KEY")
+	private Long ldtmd;
+
+	@Column(name = "CLRUS2DI_PMTMP_KEY")
+	private Long pmtmp;
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/ForestType.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/ForestType.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/ForestType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,66 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.manytoone;
-
-import java.util.Set;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.OneToMany;
-import javax.persistence.OneToOne;
-import javax.persistence.JoinTable;
-import javax.persistence.JoinColumn;
-
-import org.hibernate.annotations.ForeignKey;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class ForestType {
-	private Integer id;
-	private String name;
-	private Set<TreeType> trees;
-	private BiggestForest biggestRepresentative;
-
-	@OneToOne
-	@JoinTable(name="BiggestRepresentativePerForestType",
-		joinColumns = @JoinColumn(name="forest_type"),
-		inverseJoinColumns = @JoinColumn(name="forest")
-	)
-	@ForeignKey(name="A_TYP_FK",
-			inverseName = "A_FOR_FK" //inverse fail cause it involves a Join
-	)
-	public BiggestForest getBiggestRepresentative() {
-		return biggestRepresentative;
-	}
-
-	public void setBiggestRepresentative(BiggestForest biggestRepresentative) {
-		this.biggestRepresentative = biggestRepresentative;
-	}
-
-	@OneToMany(mappedBy="forestType")
-	public Set<TreeType> getTrees() {
-		return trees;
-	}
-
-	public void setTrees(Set<TreeType> trees) {
-		this.trees = trees;
-	}
-
-	@Id @GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/ForestType.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/ForestType.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/ForestType.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/ForestType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,66 @@
+//$Id: $
+package org.hibernate.test.annotations.manytoone;
+
+import java.util.Set;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+import javax.persistence.OneToOne;
+import javax.persistence.JoinTable;
+import javax.persistence.JoinColumn;
+
+import org.hibernate.annotations.ForeignKey;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class ForestType {
+	private Integer id;
+	private String name;
+	private Set<TreeType> trees;
+	private BiggestForest biggestRepresentative;
+
+	@OneToOne
+	@JoinTable(name="BiggestRepresentativePerForestType",
+		joinColumns = @JoinColumn(name="forest_type"),
+		inverseJoinColumns = @JoinColumn(name="forest")
+	)
+	@ForeignKey(name="A_TYP_FK",
+			inverseName = "A_FOR_FK" //inverse fail cause it involves a Join
+	)
+	public BiggestForest getBiggestRepresentative() {
+		return biggestRepresentative;
+	}
+
+	public void setBiggestRepresentative(BiggestForest biggestRepresentative) {
+		this.biggestRepresentative = biggestRepresentative;
+	}
+
+	@OneToMany(mappedBy="forestType")
+	public Set<TreeType> getTrees() {
+		return trees;
+	}
+
+	public void setTrees(Set<TreeType> trees) {
+		this.trees = trees;
+	}
+
+	@Id @GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Frame.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Frame.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Frame.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,52 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.manytoone;
-
-import java.util.Set;
-import java.io.Serializable;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.OneToMany;
-
-import org.hibernate.annotations.Formula;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Frame implements Serializable {
-	@Id
-	@GeneratedValue
-	private Long id;
-	@OneToMany( mappedBy = "frame" )
-	private Set<Lens> lenses;
-	@Column( unique = true )
-	private String name;
-	@Formula("lower(name)")
-	private String lowerName;
-
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-
-	public Set<Lens> getLenses() {
-		return lenses;
-	}
-
-	public void setLenses(Set<Lens> lenses) {
-		this.lenses = lenses;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Frame.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Frame.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Frame.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Frame.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,52 @@
+//$Id: $
+package org.hibernate.test.annotations.manytoone;
+
+import java.util.Set;
+import java.io.Serializable;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+
+import org.hibernate.annotations.Formula;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Frame implements Serializable {
+	@Id
+	@GeneratedValue
+	private Long id;
+	@OneToMany( mappedBy = "frame" )
+	private Set<Lens> lenses;
+	@Column( unique = true )
+	private String name;
+	@Formula("lower(name)")
+	private String lowerName;
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public Set<Lens> getLenses() {
+		return lenses;
+	}
+
+	public void setLenses(Set<Lens> lenses) {
+		this.lenses = lenses;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Lens.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Lens.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Lens.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,58 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.manytoone;
-
-import javax.persistence.Entity;
-import javax.persistence.ManyToOne;
-import javax.persistence.JoinColumn;
-import javax.persistence.Id;
-import javax.persistence.GeneratedValue;
-
-import org.hibernate.annotations.Formula;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Lens {
-	@Id
-	@GeneratedValue
-	private Long id;
-	private float focal;
-	@Formula("(1/focal)")
-	private float length;
-	@ManyToOne()
-	@JoinColumn(name="`frame_fk`", referencedColumnName = "name")
-	private Frame frame;
-
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-
-	public float getFocal() {
-		return focal;
-	}
-
-	public void setFocal(float focal) {
-		this.focal = focal;
-	}
-
-	public float getLength() {
-		return length;
-	}
-
-	public void setLength(float length) {
-		this.length = length;
-	}
-
-	public Frame getFrame() {
-		return frame;
-	}
-
-	public void setFrame(Frame frame) {
-		this.frame = frame;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Lens.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Lens.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Lens.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Lens.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,58 @@
+//$Id: $
+package org.hibernate.test.annotations.manytoone;
+
+import javax.persistence.Entity;
+import javax.persistence.ManyToOne;
+import javax.persistence.JoinColumn;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+
+import org.hibernate.annotations.Formula;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Lens {
+	@Id
+	@GeneratedValue
+	private Long id;
+	private float focal;
+	@Formula("(1/focal)")
+	private float length;
+	@ManyToOne()
+	@JoinColumn(name="`frame_fk`", referencedColumnName = "name")
+	private Frame frame;
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public float getFocal() {
+		return focal;
+	}
+
+	public void setFocal(float focal) {
+		this.focal = focal;
+	}
+
+	public float getLength() {
+		return length;
+	}
+
+	public void setLength(float length) {
+		this.length = length;
+	}
+
+	public Frame getFrame() {
+		return frame;
+	}
+
+	public void setFrame(Frame frame) {
+		this.frame = frame;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Lotz.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Lotz.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Lotz.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,101 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.manytoone;
-
-import java.util.List;
-import java.io.Serializable;
-import javax.persistence.Entity;
-import javax.persistence.EmbeddedId;
-import javax.persistence.Column;
-import javax.persistence.FetchType;
-import javax.persistence.OneToMany;
-import javax.persistence.CascadeType;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Lotz implements Serializable {
-	@EmbeddedId
-	protected LotzPK lotPK;
-
-	@Column( name = "name", nullable = false )
-	private String name;
-
-	@Column( name = "location", nullable = false )
-	private String location;
-
-	@OneToMany( mappedBy = "lot", fetch = FetchType.LAZY, cascade = CascadeType.ALL )
-	private List<Carz> cars;
-
-	public Lotz() {
-	}
-
-	public List<Carz> getCars() {
-		return this.cars;
-	}
-
-	public void setCars(List<Carz> cars) {
-		this.cars = cars;
-	}
-
-	public String getLocation() {
-		return this.location;
-	}
-
-	public void setLocation(String location) {
-		this.location = location;
-	}
-
-	public LotzPK getLotPK() {
-		return this.lotPK;
-	}
-
-	public void setLotPK(LotzPK lotPK) {
-		this.lotPK = lotPK;
-	}
-
-	public String getName() {
-		return this.name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	@Override
-	public int hashCode() {
-		final int PRIME = 31;
-		int result = 1;
-		result = PRIME * result + ( ( this.location == null ) ?
-				0 :
-				this.location.hashCode() );
-		result = PRIME * result + ( ( this.lotPK == null ) ?
-				0 :
-				this.lotPK.hashCode() );
-		result = PRIME * result + ( ( this.name == null ) ?
-				0 :
-				this.name.hashCode() );
-		return result;
-	}
-
-	@Override
-	public boolean equals(Object obj) {
-		if ( this == obj ) return true;
-		if ( obj == null ) return false;
-		if ( getClass() != obj.getClass() ) return false;
-		final Lotz other = (Lotz) obj;
-		if ( this.location == null ) {
-			if ( other.location != null ) return false;
-		}
-		else if ( !this.location.equals( other.location ) ) return false;
-		if ( this.lotPK == null ) {
-			if ( other.lotPK != null ) return false;
-		}
-		else if ( !this.lotPK.equals( other.lotPK ) ) return false;
-		if ( this.name == null ) {
-			if ( other.name != null ) return false;
-		}
-		else if ( !this.name.equals( other.name ) ) return false;
-		return true;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Lotz.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Lotz.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Lotz.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Lotz.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,101 @@
+//$Id: $
+package org.hibernate.test.annotations.manytoone;
+
+import java.util.List;
+import java.io.Serializable;
+import javax.persistence.Entity;
+import javax.persistence.EmbeddedId;
+import javax.persistence.Column;
+import javax.persistence.FetchType;
+import javax.persistence.OneToMany;
+import javax.persistence.CascadeType;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Lotz implements Serializable {
+	@EmbeddedId
+	protected LotzPK lotPK;
+
+	@Column( name = "name", nullable = false )
+	private String name;
+
+	@Column( name = "location", nullable = false )
+	private String location;
+
+	@OneToMany( mappedBy = "lot", fetch = FetchType.LAZY, cascade = CascadeType.ALL )
+	private List<Carz> cars;
+
+	public Lotz() {
+	}
+
+	public List<Carz> getCars() {
+		return this.cars;
+	}
+
+	public void setCars(List<Carz> cars) {
+		this.cars = cars;
+	}
+
+	public String getLocation() {
+		return this.location;
+	}
+
+	public void setLocation(String location) {
+		this.location = location;
+	}
+
+	public LotzPK getLotPK() {
+		return this.lotPK;
+	}
+
+	public void setLotPK(LotzPK lotPK) {
+		this.lotPK = lotPK;
+	}
+
+	public String getName() {
+		return this.name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	@Override
+	public int hashCode() {
+		final int PRIME = 31;
+		int result = 1;
+		result = PRIME * result + ( ( this.location == null ) ?
+				0 :
+				this.location.hashCode() );
+		result = PRIME * result + ( ( this.lotPK == null ) ?
+				0 :
+				this.lotPK.hashCode() );
+		result = PRIME * result + ( ( this.name == null ) ?
+				0 :
+				this.name.hashCode() );
+		return result;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if ( this == obj ) return true;
+		if ( obj == null ) return false;
+		if ( getClass() != obj.getClass() ) return false;
+		final Lotz other = (Lotz) obj;
+		if ( this.location == null ) {
+			if ( other.location != null ) return false;
+		}
+		else if ( !this.location.equals( other.location ) ) return false;
+		if ( this.lotPK == null ) {
+			if ( other.lotPK != null ) return false;
+		}
+		else if ( !this.lotPK.equals( other.lotPK ) ) return false;
+		if ( this.name == null ) {
+			if ( other.name != null ) return false;
+		}
+		else if ( !this.name.equals( other.name ) ) return false;
+		return true;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/LotzPK.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/LotzPK.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/LotzPK.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,34 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.manytoone;
-
-import java.io.Serializable;
-import javax.persistence.Column;
-import javax.persistence.Embeddable;
-
-/**
- * @author Emmanuel Bernard
- */
- at Embeddable
-public class LotzPK implements Serializable {
-	@Column( name = "id", nullable = false )
-	private Integer id;
-
-	@Column( name = "loc_code", nullable = false, unique = true )
-	private String locCode;
-
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getLocCode() {
-		return locCode;
-	}
-
-	public void setLocCode(String locCode) {
-		this.locCode = locCode;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/LotzPK.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/LotzPK.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/LotzPK.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/LotzPK.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,34 @@
+//$Id: $
+package org.hibernate.test.annotations.manytoone;
+
+import java.io.Serializable;
+import javax.persistence.Column;
+import javax.persistence.Embeddable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Embeddable
+public class LotzPK implements Serializable {
+	@Column( name = "id", nullable = false )
+	private Integer id;
+
+	@Column( name = "loc_code", nullable = false, unique = true )
+	private String locCode;
+
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getLocCode() {
+		return locCode;
+	}
+
+	public void setLocCode(String locCode) {
+		this.locCode = locCode;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/ManyToOneJoinTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/ManyToOneJoinTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/ManyToOneJoinTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,62 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.manytoone;
-
-import org.hibernate.test.annotations.TestCase;
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-
-/**
- * @author Emmanuel Bernard
- */
-public class ManyToOneJoinTest extends TestCase {
-	public void testManyToOneJoinTable() throws Exception {
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		ForestType forest = new ForestType();
-		forest.setName( "Original forest" );
-		s.persist( forest );
-		TreeType tree = new TreeType();
-		tree.setForestType( forest );
-		tree.setAlternativeForestType( forest );
-		tree.setName( "just a tree");
-		s.persist( tree );
-		s.flush();
-		s.clear();
-		tree = (TreeType) s.get(TreeType.class, tree.getId() );
-		assertNotNull( tree.getForestType() );
-		assertNotNull( tree.getAlternativeForestType() );
-		s.clear();
-		forest = (ForestType) s.get( ForestType.class, forest.getId() );
-		assertEquals( 1, forest.getTrees().size() );
-		assertEquals( tree.getId(), forest.getTrees().iterator().next().getId() );
-		tx.rollback();
-		s.close();
-	}
-
-	public void testOneToOneJoinTable() throws Exception {
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		ForestType forest = new ForestType();
-		forest.setName( "Original forest" );
-		s.persist( forest );
-		BiggestForest forestRepr = new BiggestForest();
-		forestRepr.setType( forest );
-		forest.setBiggestRepresentative( forestRepr );
-		s.persist( forestRepr );
-		s.flush();
-		s.clear();
-		forest = (ForestType) s.get( ForestType.class, forest.getId() );
-		assertNotNull( forest.getBiggestRepresentative() );
-		assertEquals( forest, forest.getBiggestRepresentative().getType() );
-		tx.rollback();
-		s.close();
-	}
-
-	protected Class[] getMappings() {
-		return new Class[] {
-				BiggestForest.class,
-				ForestType.class,
-				TreeType.class
-		};
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/ManyToOneJoinTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/ManyToOneJoinTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/ManyToOneJoinTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/ManyToOneJoinTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,62 @@
+//$Id: $
+package org.hibernate.test.annotations.manytoone;
+
+import org.hibernate.test.annotations.TestCase;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class ManyToOneJoinTest extends TestCase {
+	public void testManyToOneJoinTable() throws Exception {
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		ForestType forest = new ForestType();
+		forest.setName( "Original forest" );
+		s.persist( forest );
+		TreeType tree = new TreeType();
+		tree.setForestType( forest );
+		tree.setAlternativeForestType( forest );
+		tree.setName( "just a tree");
+		s.persist( tree );
+		s.flush();
+		s.clear();
+		tree = (TreeType) s.get(TreeType.class, tree.getId() );
+		assertNotNull( tree.getForestType() );
+		assertNotNull( tree.getAlternativeForestType() );
+		s.clear();
+		forest = (ForestType) s.get( ForestType.class, forest.getId() );
+		assertEquals( 1, forest.getTrees().size() );
+		assertEquals( tree.getId(), forest.getTrees().iterator().next().getId() );
+		tx.rollback();
+		s.close();
+	}
+
+	public void testOneToOneJoinTable() throws Exception {
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		ForestType forest = new ForestType();
+		forest.setName( "Original forest" );
+		s.persist( forest );
+		BiggestForest forestRepr = new BiggestForest();
+		forestRepr.setType( forest );
+		forest.setBiggestRepresentative( forestRepr );
+		s.persist( forestRepr );
+		s.flush();
+		s.clear();
+		forest = (ForestType) s.get( ForestType.class, forest.getId() );
+		assertNotNull( forest.getBiggestRepresentative() );
+		assertEquals( forest, forest.getBiggestRepresentative().getType() );
+		tx.rollback();
+		s.close();
+	}
+
+	protected Class[] getMappings() {
+		return new Class[] {
+				BiggestForest.class,
+				ForestType.class,
+				TreeType.class
+		};
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/ManyToOneOnNonPkTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/ManyToOneOnNonPkTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/ManyToOneOnNonPkTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,54 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.manytoone;
-
-import java.util.Date;
-
-import org.hibernate.test.annotations.TestCase;
-import org.hibernate.Session;
-
-
-/**
- * FIXME test for ANN-548
- * @author Emmanuel Bernard
- */
-public class ManyToOneOnNonPkTest extends TestCase {
-
-	public void testNonPkPartOfPk() throws Exception {
-//		Session s = openSession( );
-//		s.getTransaction().begin();
-//
-//		LotzPK pk = new LotzPK();
-//		pk.setId( 1 );
-//		pk.setLocCode( "fr" );
-//		Lotz lot = new Lotz();
-//		lot.setLocation( "France" );
-//		lot.setName( "Chez Dede" );
-//		lot.setLotPK( pk );
-//		Carz car = new Carz();
-//		car.setId( 1 );
-//		car.setLot( lot );
-//		car.setMake( "Citroen" );
-//		car.setManufactured( new Date() );
-//		car.setModel( "C5" );
-//		s.persist( lot );
-//		s.persist( car );
-//
-//		s.flush();
-//		s.clear();
-//		s.clear();
-//
-//		car = (Carz) s.createQuery( "from Carz car left join fetch car.lot").uniqueResult();
-//		assertNotNull( car.getLot() );
-//
-//		s.getTransaction().commit();
-//		s.close();
-//
-	}
-
-	protected Class[] getMappings() {
-		return new Class[] {
-			//Carz.class,
-			//Lotz.class
-		};
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/ManyToOneOnNonPkTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/ManyToOneOnNonPkTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/ManyToOneOnNonPkTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/ManyToOneOnNonPkTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,54 @@
+//$Id: $
+package org.hibernate.test.annotations.manytoone;
+
+import java.util.Date;
+
+import org.hibernate.test.annotations.TestCase;
+import org.hibernate.Session;
+
+
+/**
+ * FIXME test for ANN-548
+ * @author Emmanuel Bernard
+ */
+public class ManyToOneOnNonPkTest extends TestCase {
+
+	public void testNonPkPartOfPk() throws Exception {
+//		Session s = openSession( );
+//		s.getTransaction().begin();
+//
+//		LotzPK pk = new LotzPK();
+//		pk.setId( 1 );
+//		pk.setLocCode( "fr" );
+//		Lotz lot = new Lotz();
+//		lot.setLocation( "France" );
+//		lot.setName( "Chez Dede" );
+//		lot.setLotPK( pk );
+//		Carz car = new Carz();
+//		car.setId( 1 );
+//		car.setLot( lot );
+//		car.setMake( "Citroen" );
+//		car.setManufactured( new Date() );
+//		car.setModel( "C5" );
+//		s.persist( lot );
+//		s.persist( car );
+//
+//		s.flush();
+//		s.clear();
+//		s.clear();
+//
+//		car = (Carz) s.createQuery( "from Carz car left join fetch car.lot").uniqueResult();
+//		assertNotNull( car.getLot() );
+//
+//		s.getTransaction().commit();
+//		s.close();
+//
+	}
+
+	protected Class[] getMappings() {
+		return new Class[] {
+			//Carz.class,
+			//Lotz.class
+		};
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/ManyToOneTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/ManyToOneTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/ManyToOneTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,350 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.manytoone;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-import org.hibernate.Hibernate;
-import org.hibernate.Query;
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-import org.hibernate.test.annotations.Company;
-import org.hibernate.test.annotations.Customer;
-import org.hibernate.test.annotations.Discount;
-import org.hibernate.test.annotations.Flight;
-import org.hibernate.test.annotations.Passport;
-import org.hibernate.test.annotations.TestCase;
-import org.hibernate.test.annotations.Ticket;
-
-/**
- * @author Emmanuel Bernard
- */
-public class ManyToOneTest extends TestCase {
-
-	public ManyToOneTest(String x) {
-		super( x );
-	}
-
-	public void testEager() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		Color c = new Color();
-		c.setName( "Yellow" );
-		s.persist( c );
-		Car car = new Car();
-		car.setBodyColor( c );
-		s.persist( car );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		car = (Car) s.get( Car.class, car.getId() );
-		tx.commit();
-		s.close();
-		assertNotNull( car );
-		assertNotNull( car.getBodyColor() );
-		assertEquals( "Yellow", car.getBodyColor().getName() );
-
-	}
-
-	public void testDefaultMetadata() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		Color c = new Color();
-		c.setName( "Blue" );
-		s.persist( c );
-		Car car = new Car();
-		car.setBodyColor( c );
-		s.persist( car );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		car = (Car) s.get( Car.class, car.getId() );
-		assertNotNull( car );
-		assertNotNull( car.getBodyColor() );
-		assertEquals( c.getId(), car.getBodyColor().getId() );
-		tx.rollback();
-		s.close();
-	}
-
-	public void testCreate() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		Flight firstOne = new Flight();
-		firstOne.setId( new Long( 1 ) );
-		firstOne.setName( "AF0101" );
-		firstOne.setDuration( new Long( 1000 ) );
-		Company frenchOne = new Company();
-		frenchOne.setName( "Air France" );
-		firstOne.setCompany( frenchOne );
-		s.persist( firstOne );
-		tx.commit();
-		s.close();
-		assertNotNull( "identity id should work", frenchOne.getId() );
-
-		s = openSession();
-		tx = s.beginTransaction();
-		firstOne = (Flight) s.get( Flight.class, new Long( 1 ) );
-		assertNotNull( firstOne.getCompany() );
-		assertEquals( frenchOne.getName(), firstOne.getCompany().getName() );
-		tx.commit();
-		s.close();
-	}
-
-	public void testCascade() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		Discount discount = new Discount();
-		discount.setDiscount( 20.12 );
-		Customer customer = new Customer();
-		Collection discounts = new ArrayList();
-		discounts.add( discount );
-		customer.setName( "Quentin Tarantino" );
-		discount.setOwner( customer );
-		customer.setDiscountTickets( discounts );
-		s.persist( discount );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		discount = (Discount) s.get( Discount.class, discount.getId() );
-		assertNotNull( discount );
-		assertEquals( 20.12, discount.getDiscount() );
-		assertNotNull( discount.getOwner() );
-		customer = new Customer();
-		customer.setName( "Clooney" );
-		discount.setOwner( customer );
-		discounts = new ArrayList();
-		discounts.add( discount );
-		customer.setDiscountTickets( discounts );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		discount = (Discount) s.get( Discount.class, discount.getId() );
-		assertNotNull( discount );
-		assertNotNull( discount.getOwner() );
-		assertEquals( "Clooney", discount.getOwner().getName() );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		customer = (Customer) s.get( Customer.class, customer.getId() );
-		s.delete( customer );
-		tx.commit();
-		s.close();
-	}
-
-	public void testFetch() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		Discount discount = new Discount();
-		discount.setDiscount( 20 );
-		Customer customer = new Customer();
-		Collection discounts = new ArrayList();
-		discounts.add( discount );
-		customer.setName( "Quentin Tarantino" );
-		discount.setOwner( customer );
-		customer.setDiscountTickets( discounts );
-		s.persist( discount );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		discount = (Discount) s.get( Discount.class, discount.getId() );
-		assertNotNull( discount );
-		assertFalse( Hibernate.isInitialized( discount.getOwner() ) );
-		tx.commit();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		discount = (Discount) s.load( Discount.class, discount.getId() );
-		assertNotNull( discount );
-		assertFalse( Hibernate.isInitialized( discount.getOwner() ) );
-		tx.commit();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		s.delete( s.get( Discount.class, discount.getId() ) );
-		tx.commit();
-		s.close();
-	}
-
-	public void testCompositeFK() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		ParentPk ppk = new ParentPk();
-		ppk.firstName = "John";
-		ppk.lastName = "Doe";
-		Parent p = new Parent();
-		p.age = 45;
-		p.id = ppk;
-		s.persist( p );
-		Child c = new Child();
-		c.parent = p;
-		s.persist( c );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		//FIXME: fix this when the small parser bug will be fixed 
-		Query q = s.createQuery( "from " + Child.class.getName() ); //+ " c where c.parent.id.lastName = :lastName");
-		//q.setString("lastName", p.id.lastName);
-		List result = q.list();
-		assertEquals( 1, result.size() );
-		Child c2 = (Child) result.get( 0 );
-		assertEquals( c2.id, c.id );
-		tx.commit();
-		s.close();
-	}
-
-	public void testImplicitCompositeFk() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		Node n1 = new Node();
-		n1.setDescription( "Parent" );
-		NodePk n1pk = new NodePk();
-		n1pk.setLevel( 1 );
-		n1pk.setName( "Root" );
-		n1.setId( n1pk );
-		Node n2 = new Node();
-		NodePk n2pk = new NodePk();
-		n2pk.setLevel( 2 );
-		n2pk.setName( "Level 1: A" );
-		n2.setParent( n1 );
-		n2.setId( n2pk );
-		s.persist( n2 );
-		tx.commit();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		n2 = (Node) s.get( Node.class, n2pk );
-		assertNotNull( n2 );
-		assertNotNull( n2.getParent() );
-		assertEquals( 1, n2.getParent().getId().getLevel() );
-		tx.commit();
-		s.close();
-	}
-
-	public void testManyToOneAndIdClass() throws Exception {
-
-	}
-
-	public void testManyToOneNonPk() throws Exception {
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		Order order = new Order();
-		order.setOrderNbr( "123" );
-		s.persist( order );
-		OrderLine ol = new OrderLine();
-		ol.setItem( "Mouse" );
-		ol.setOrder( order );
-		s.persist( ol );
-		s.flush();
-		s.clear();
-		ol = (OrderLine) s.get( OrderLine.class, ol.getId() );
-		assertNotNull( ol.getOrder() );
-		assertEquals( "123", ol.getOrder().getOrderNbr() );
-		assertTrue( ol.getOrder().getOrderLines().contains( ol ) );
-		tx.rollback();
-		s.close();
-	}
-
-	public void testTwoManyToOneNonPk() throws Exception {
-		//2 many to one non pk pointing to the same referencedColumnName should not fail
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		org.hibernate.test.annotations.manytoone.Customer customer = new org.hibernate.test.annotations.manytoone.Customer();
-		customer.userId="123";
-		org.hibernate.test.annotations.manytoone.Customer customer2 = new org.hibernate.test.annotations.manytoone.Customer();
-		customer2.userId="124";
-		s.persist( customer2 );
-		s.persist( customer );
-		Deal deal = new Deal();
-		deal.from = customer;
-		deal.to = customer2;
-		s.persist( deal );
-		s.flush();
-		s.clear();
-		deal = (Deal) s.get( Deal.class, deal.id );
-		assertNotNull( deal.from );
-		assertNotNull( deal.to );
-		tx.rollback();
-		s.close();
-	}
-
-	public void testFormulaOnOtherSide() throws Exception {
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		Frame frame = new Frame();
-		frame.setName( "Prada" );
-		s.persist( frame );
-		Lens l = new Lens();
-		l.setFocal( 2.5f );
-		l.setFrame( frame );
-		s.persist( l );
-		Lens r = new Lens();
-		r.setFocal( 1.2f);
-		r.setFrame( frame );
-		s.persist( r );
-		s.flush();
-		s.clear();
-		frame = (Frame) s.get( Frame.class, frame.getId() );
-		assertEquals( 2, frame.getLenses().size() );
-		assertTrue( frame.getLenses().iterator().next().getLength() <= 1/1.2f );
-		assertTrue( frame.getLenses().iterator().next().getLength() >= 1/2.5f );
-		tx.rollback();
-		s.close();
-	}
-
-	/**
-	 * @see org.hibernate.test.annotations.TestCase#getMappings()
-	 */
-	protected java.lang.Class[] getMappings() {
-		return new java.lang.Class[]{
-				Deal.class,
-				org.hibernate.test.annotations.manytoone.Customer.class,
-				Car.class,
-				Color.class,
-				Flight.class,
-				Company.class,
-				Customer.class,
-				Discount.class,
-				Ticket.class,
-				Passport.class,
-				Parent.class,
-				Child.class,
-				Node.class,
-				User.class,
-				DistrictUser.class,
-				Order.class,
-				OrderLine.class,
-				Frame.class,
-				Lens.class
-		};
-	}
-
-}
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/ManyToOneTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/ManyToOneTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/ManyToOneTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/ManyToOneTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,350 @@
+//$Id$
+package org.hibernate.test.annotations.manytoone;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.hibernate.Hibernate;
+import org.hibernate.Query;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.Company;
+import org.hibernate.test.annotations.Customer;
+import org.hibernate.test.annotations.Discount;
+import org.hibernate.test.annotations.Flight;
+import org.hibernate.test.annotations.Passport;
+import org.hibernate.test.annotations.TestCase;
+import org.hibernate.test.annotations.Ticket;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class ManyToOneTest extends TestCase {
+
+	public ManyToOneTest(String x) {
+		super( x );
+	}
+
+	public void testEager() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		Color c = new Color();
+		c.setName( "Yellow" );
+		s.persist( c );
+		Car car = new Car();
+		car.setBodyColor( c );
+		s.persist( car );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		car = (Car) s.get( Car.class, car.getId() );
+		tx.commit();
+		s.close();
+		assertNotNull( car );
+		assertNotNull( car.getBodyColor() );
+		assertEquals( "Yellow", car.getBodyColor().getName() );
+
+	}
+
+	public void testDefaultMetadata() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		Color c = new Color();
+		c.setName( "Blue" );
+		s.persist( c );
+		Car car = new Car();
+		car.setBodyColor( c );
+		s.persist( car );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		car = (Car) s.get( Car.class, car.getId() );
+		assertNotNull( car );
+		assertNotNull( car.getBodyColor() );
+		assertEquals( c.getId(), car.getBodyColor().getId() );
+		tx.rollback();
+		s.close();
+	}
+
+	public void testCreate() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		Flight firstOne = new Flight();
+		firstOne.setId( new Long( 1 ) );
+		firstOne.setName( "AF0101" );
+		firstOne.setDuration( new Long( 1000 ) );
+		Company frenchOne = new Company();
+		frenchOne.setName( "Air France" );
+		firstOne.setCompany( frenchOne );
+		s.persist( firstOne );
+		tx.commit();
+		s.close();
+		assertNotNull( "identity id should work", frenchOne.getId() );
+
+		s = openSession();
+		tx = s.beginTransaction();
+		firstOne = (Flight) s.get( Flight.class, new Long( 1 ) );
+		assertNotNull( firstOne.getCompany() );
+		assertEquals( frenchOne.getName(), firstOne.getCompany().getName() );
+		tx.commit();
+		s.close();
+	}
+
+	public void testCascade() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		Discount discount = new Discount();
+		discount.setDiscount( 20.12 );
+		Customer customer = new Customer();
+		Collection discounts = new ArrayList();
+		discounts.add( discount );
+		customer.setName( "Quentin Tarantino" );
+		discount.setOwner( customer );
+		customer.setDiscountTickets( discounts );
+		s.persist( discount );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		discount = (Discount) s.get( Discount.class, discount.getId() );
+		assertNotNull( discount );
+		assertEquals( 20.12, discount.getDiscount() );
+		assertNotNull( discount.getOwner() );
+		customer = new Customer();
+		customer.setName( "Clooney" );
+		discount.setOwner( customer );
+		discounts = new ArrayList();
+		discounts.add( discount );
+		customer.setDiscountTickets( discounts );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		discount = (Discount) s.get( Discount.class, discount.getId() );
+		assertNotNull( discount );
+		assertNotNull( discount.getOwner() );
+		assertEquals( "Clooney", discount.getOwner().getName() );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		customer = (Customer) s.get( Customer.class, customer.getId() );
+		s.delete( customer );
+		tx.commit();
+		s.close();
+	}
+
+	public void testFetch() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		Discount discount = new Discount();
+		discount.setDiscount( 20 );
+		Customer customer = new Customer();
+		Collection discounts = new ArrayList();
+		discounts.add( discount );
+		customer.setName( "Quentin Tarantino" );
+		discount.setOwner( customer );
+		customer.setDiscountTickets( discounts );
+		s.persist( discount );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		discount = (Discount) s.get( Discount.class, discount.getId() );
+		assertNotNull( discount );
+		assertFalse( Hibernate.isInitialized( discount.getOwner() ) );
+		tx.commit();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		discount = (Discount) s.load( Discount.class, discount.getId() );
+		assertNotNull( discount );
+		assertFalse( Hibernate.isInitialized( discount.getOwner() ) );
+		tx.commit();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		s.delete( s.get( Discount.class, discount.getId() ) );
+		tx.commit();
+		s.close();
+	}
+
+	public void testCompositeFK() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		ParentPk ppk = new ParentPk();
+		ppk.firstName = "John";
+		ppk.lastName = "Doe";
+		Parent p = new Parent();
+		p.age = 45;
+		p.id = ppk;
+		s.persist( p );
+		Child c = new Child();
+		c.parent = p;
+		s.persist( c );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		//FIXME: fix this when the small parser bug will be fixed 
+		Query q = s.createQuery( "from " + Child.class.getName() ); //+ " c where c.parent.id.lastName = :lastName");
+		//q.setString("lastName", p.id.lastName);
+		List result = q.list();
+		assertEquals( 1, result.size() );
+		Child c2 = (Child) result.get( 0 );
+		assertEquals( c2.id, c.id );
+		tx.commit();
+		s.close();
+	}
+
+	public void testImplicitCompositeFk() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		Node n1 = new Node();
+		n1.setDescription( "Parent" );
+		NodePk n1pk = new NodePk();
+		n1pk.setLevel( 1 );
+		n1pk.setName( "Root" );
+		n1.setId( n1pk );
+		Node n2 = new Node();
+		NodePk n2pk = new NodePk();
+		n2pk.setLevel( 2 );
+		n2pk.setName( "Level 1: A" );
+		n2.setParent( n1 );
+		n2.setId( n2pk );
+		s.persist( n2 );
+		tx.commit();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		n2 = (Node) s.get( Node.class, n2pk );
+		assertNotNull( n2 );
+		assertNotNull( n2.getParent() );
+		assertEquals( 1, n2.getParent().getId().getLevel() );
+		tx.commit();
+		s.close();
+	}
+
+	public void testManyToOneAndIdClass() throws Exception {
+
+	}
+
+	public void testManyToOneNonPk() throws Exception {
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		Order order = new Order();
+		order.setOrderNbr( "123" );
+		s.persist( order );
+		OrderLine ol = new OrderLine();
+		ol.setItem( "Mouse" );
+		ol.setOrder( order );
+		s.persist( ol );
+		s.flush();
+		s.clear();
+		ol = (OrderLine) s.get( OrderLine.class, ol.getId() );
+		assertNotNull( ol.getOrder() );
+		assertEquals( "123", ol.getOrder().getOrderNbr() );
+		assertTrue( ol.getOrder().getOrderLines().contains( ol ) );
+		tx.rollback();
+		s.close();
+	}
+
+	public void testTwoManyToOneNonPk() throws Exception {
+		//2 many to one non pk pointing to the same referencedColumnName should not fail
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		org.hibernate.test.annotations.manytoone.Customer customer = new org.hibernate.test.annotations.manytoone.Customer();
+		customer.userId="123";
+		org.hibernate.test.annotations.manytoone.Customer customer2 = new org.hibernate.test.annotations.manytoone.Customer();
+		customer2.userId="124";
+		s.persist( customer2 );
+		s.persist( customer );
+		Deal deal = new Deal();
+		deal.from = customer;
+		deal.to = customer2;
+		s.persist( deal );
+		s.flush();
+		s.clear();
+		deal = (Deal) s.get( Deal.class, deal.id );
+		assertNotNull( deal.from );
+		assertNotNull( deal.to );
+		tx.rollback();
+		s.close();
+	}
+
+	public void testFormulaOnOtherSide() throws Exception {
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		Frame frame = new Frame();
+		frame.setName( "Prada" );
+		s.persist( frame );
+		Lens l = new Lens();
+		l.setFocal( 2.5f );
+		l.setFrame( frame );
+		s.persist( l );
+		Lens r = new Lens();
+		r.setFocal( 1.2f);
+		r.setFrame( frame );
+		s.persist( r );
+		s.flush();
+		s.clear();
+		frame = (Frame) s.get( Frame.class, frame.getId() );
+		assertEquals( 2, frame.getLenses().size() );
+		assertTrue( frame.getLenses().iterator().next().getLength() <= 1/1.2f );
+		assertTrue( frame.getLenses().iterator().next().getLength() >= 1/2.5f );
+		tx.rollback();
+		s.close();
+	}
+
+	/**
+	 * @see org.hibernate.test.annotations.TestCase#getMappings()
+	 */
+	protected java.lang.Class[] getMappings() {
+		return new java.lang.Class[]{
+				Deal.class,
+				org.hibernate.test.annotations.manytoone.Customer.class,
+				Car.class,
+				Color.class,
+				Flight.class,
+				Company.class,
+				Customer.class,
+				Discount.class,
+				Ticket.class,
+				Passport.class,
+				Parent.class,
+				Child.class,
+				Node.class,
+				User.class,
+				DistrictUser.class,
+				Order.class,
+				OrderLine.class,
+				Frame.class,
+				Lens.class
+		};
+	}
+
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Node.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Node.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Node.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,68 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.manytoone;
-
-import java.io.Serializable;
-import javax.persistence.CascadeType;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.JoinColumns;
-import javax.persistence.ManyToOne;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Node implements Serializable {
-
-	private NodePk id;
-	private String description;
-	private Node parent;
-
-	public boolean equals(Object o) {
-		if ( this == o ) return true;
-		if ( !( o instanceof Node ) ) return false;
-
-		final Node node = (Node) o;
-
-		if ( !id.equals( node.id ) ) return false;
-
-		return true;
-	}
-
-	public int hashCode() {
-		return id.hashCode();
-	}
-
-	@Id
-	public NodePk getId() {
-		return id;
-	}
-
-	public void setId(NodePk id) {
-		this.id = id;
-	}
-
-	public String getDescription() {
-		return description;
-	}
-
-	public void setDescription(String description) {
-		this.description = description;
-	}
-
-	@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
-	@JoinColumns({
-	@JoinColumn(name = "parentName"),
-	@JoinColumn(name = "parentLevel")
-			})
-	public Node getParent() {
-		return parent;
-	}
-
-	public void setParent(Node parent) {
-		this.parent = parent;
-	}
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Node.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Node.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Node.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Node.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,68 @@
+//$Id$
+package org.hibernate.test.annotations.manytoone;
+
+import java.io.Serializable;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinColumns;
+import javax.persistence.ManyToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Node implements Serializable {
+
+	private NodePk id;
+	private String description;
+	private Node parent;
+
+	public boolean equals(Object o) {
+		if ( this == o ) return true;
+		if ( !( o instanceof Node ) ) return false;
+
+		final Node node = (Node) o;
+
+		if ( !id.equals( node.id ) ) return false;
+
+		return true;
+	}
+
+	public int hashCode() {
+		return id.hashCode();
+	}
+
+	@Id
+	public NodePk getId() {
+		return id;
+	}
+
+	public void setId(NodePk id) {
+		this.id = id;
+	}
+
+	public String getDescription() {
+		return description;
+	}
+
+	public void setDescription(String description) {
+		this.description = description;
+	}
+
+	@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
+	@JoinColumns({
+	@JoinColumn(name = "parentName"),
+	@JoinColumn(name = "parentLevel")
+			})
+	public Node getParent() {
+		return parent;
+	}
+
+	public void setParent(Node parent) {
+		this.parent = parent;
+	}
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/NodePk.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/NodePk.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/NodePk.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,51 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.manytoone;
-
-import java.io.Serializable;
-import javax.persistence.Column;
-import javax.persistence.Embeddable;
-
-/**
- * @author Emmanuel Bernard
- */
- at Embeddable
-public class NodePk implements Serializable {
-	private String name;
-	private int level;
-
-	public boolean equals(Object o) {
-		if ( this == o ) return true;
-		if ( !( o instanceof NodePk ) ) return false;
-
-		final NodePk nodePk = (NodePk) o;
-
-		if ( level != nodePk.level ) return false;
-		if ( !name.equals( nodePk.name ) ) return false;
-
-		return true;
-	}
-
-	public int hashCode() {
-		int result;
-		result = name.hashCode();
-		result = 29 * result + level;
-		return result;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	@Column(name = "fld_lvl")
-	public int getLevel() {
-		return level;
-	}
-
-	public void setLevel(int level) {
-		this.level = level;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/NodePk.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/NodePk.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/NodePk.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/NodePk.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,51 @@
+//$Id$
+package org.hibernate.test.annotations.manytoone;
+
+import java.io.Serializable;
+import javax.persistence.Column;
+import javax.persistence.Embeddable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Embeddable
+public class NodePk implements Serializable {
+	private String name;
+	private int level;
+
+	public boolean equals(Object o) {
+		if ( this == o ) return true;
+		if ( !( o instanceof NodePk ) ) return false;
+
+		final NodePk nodePk = (NodePk) o;
+
+		if ( level != nodePk.level ) return false;
+		if ( !name.equals( nodePk.name ) ) return false;
+
+		return true;
+	}
+
+	public int hashCode() {
+		int result;
+		result = name.hashCode();
+		result = 29 * result + level;
+		return result;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	@Column(name = "fld_lvl")
+	public int getLevel() {
+		return level;
+	}
+
+	public void setLevel(int level) {
+		this.level = level;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Order.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Order.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Order.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,50 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.manytoone;
-
-import java.io.Serializable;
-import java.util.Set;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.Column;
-import javax.persistence.Table;
-import javax.persistence.OneToMany;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Table(name="ORDERS")
-public class Order implements Serializable {
-	private Integer id;
-	private String orderNbr;
-	private Set<OrderLine> orderLines;
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	@Column(name="order_nbr", unique = true)
-	public String getOrderNbr() {
-		return orderNbr;
-	}
-
-	public void setOrderNbr(String orderNbr) {
-		this.orderNbr = orderNbr;
-	}
-
-	@OneToMany(mappedBy = "order")
-	public Set<OrderLine> getOrderLines() {
-		return orderLines;
-	}
-
-	public void setOrderLines(Set<OrderLine> orderLines) {
-		this.orderLines = orderLines;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Order.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Order.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Order.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Order.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,50 @@
+//$Id: $
+package org.hibernate.test.annotations.manytoone;
+
+import java.io.Serializable;
+import java.util.Set;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Column;
+import javax.persistence.Table;
+import javax.persistence.OneToMany;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Table(name="ORDERS")
+public class Order implements Serializable {
+	private Integer id;
+	private String orderNbr;
+	private Set<OrderLine> orderLines;
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	@Column(name="order_nbr", unique = true)
+	public String getOrderNbr() {
+		return orderNbr;
+	}
+
+	public void setOrderNbr(String orderNbr) {
+		this.orderNbr = orderNbr;
+	}
+
+	@OneToMany(mappedBy = "order")
+	public Set<OrderLine> getOrderLines() {
+		return orderLines;
+	}
+
+	public void setOrderLines(Set<OrderLine> orderLines) {
+		this.orderLines = orderLines;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/OrderLine.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/OrderLine.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/OrderLine.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,45 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.manytoone;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.GeneratedValue;
-import javax.persistence.ManyToOne;
-import javax.persistence.JoinColumn;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class OrderLine {
-	private Integer id;
-	private String item;
-	private Order order;
-
-	@Id @GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getItem() {
-		return item;
-	}
-
-	public void setItem(String item) {
-		this.item = item;
-	}
-
-	@ManyToOne
-	@JoinColumn(name="order_nbr", referencedColumnName = "order_nbr", unique = true)
-	public Order getOrder() {
-		return order;
-	}
-
-	public void setOrder(Order order) {
-		this.order = order;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/OrderLine.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/OrderLine.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/OrderLine.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/OrderLine.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,45 @@
+//$Id: $
+package org.hibernate.test.annotations.manytoone;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+import javax.persistence.ManyToOne;
+import javax.persistence.JoinColumn;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class OrderLine {
+	private Integer id;
+	private String item;
+	private Order order;
+
+	@Id @GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getItem() {
+		return item;
+	}
+
+	public void setItem(String item) {
+		this.item = item;
+	}
+
+	@ManyToOne
+	@JoinColumn(name="order_nbr", referencedColumnName = "order_nbr", unique = true)
+	public Order getOrder() {
+		return order;
+	}
+
+	public void setOrder(Order order) {
+		this.order = order;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Parent.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Parent.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Parent.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,33 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.manytoone;
-
-import java.io.Serializable;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Table;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Table(name = "tbl_parent")
-public class Parent implements Serializable {
-	@Id
-	public ParentPk id;
-	public int age;
-
-	public int hashCode() {
-		//a NPE can occurs, but I don't expect hashcode to be used before pk is set
-		return id.hashCode();
-	}
-
-	public boolean equals(Object obj) {
-		//a NPE can occurs, but I don't expect equals to be used before pk is set
-		if ( obj != null && obj instanceof Parent ) {
-			return id.equals( ( (Parent) obj ).id );
-		}
-		else {
-			return false;
-		}
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Parent.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Parent.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Parent.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/Parent.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,33 @@
+//$Id$
+package org.hibernate.test.annotations.manytoone;
+
+import java.io.Serializable;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Table(name = "tbl_parent")
+public class Parent implements Serializable {
+	@Id
+	public ParentPk id;
+	public int age;
+
+	public int hashCode() {
+		//a NPE can occurs, but I don't expect hashcode to be used before pk is set
+		return id.hashCode();
+	}
+
+	public boolean equals(Object obj) {
+		//a NPE can occurs, but I don't expect equals to be used before pk is set
+		if ( obj != null && obj instanceof Parent ) {
+			return id.equals( ( (Parent) obj ).id );
+		}
+		else {
+			return false;
+		}
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/ParentPk.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/ParentPk.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/ParentPk.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,40 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.manytoone;
-
-import java.io.Serializable;
-import javax.persistence.Column;
-import javax.persistence.Embeddable;
-
-/**
- * @author Emmanuel Bernard
- */
- at Embeddable
-public class ParentPk implements Serializable {
-	@Column(length = 50)
-	String firstName;
-	String lastName;
-
-	/**
-	 * is a male or a female
-	 */
-	//show hetereogenous PK types
-	boolean isMale;
-
-	public int hashCode() {
-		//this implem sucks
-		return firstName.hashCode() + lastName.hashCode() + ( isMale ? 0 : 1 );
-	}
-
-	public boolean equals(Object obj) {
-		//firstName and lastName are expected to be set in this implem
-		if ( obj != null && obj instanceof ParentPk ) {
-			ParentPk other = (ParentPk) obj;
-			return firstName.equals( other.firstName )
-					&& lastName.equals( other.lastName )
-					&& isMale == other.isMale;
-		}
-		else {
-			return false;
-		}
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/ParentPk.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/ParentPk.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/ParentPk.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/ParentPk.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,40 @@
+//$Id$
+package org.hibernate.test.annotations.manytoone;
+
+import java.io.Serializable;
+import javax.persistence.Column;
+import javax.persistence.Embeddable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Embeddable
+public class ParentPk implements Serializable {
+	@Column(length = 50)
+	String firstName;
+	String lastName;
+
+	/**
+	 * is a male or a female
+	 */
+	//show hetereogenous PK types
+	boolean isMale;
+
+	public int hashCode() {
+		//this implem sucks
+		return firstName.hashCode() + lastName.hashCode() + ( isMale ? 0 : 1 );
+	}
+
+	public boolean equals(Object obj) {
+		//firstName and lastName are expected to be set in this implem
+		if ( obj != null && obj instanceof ParentPk ) {
+			ParentPk other = (ParentPk) obj;
+			return firstName.equals( other.firstName )
+					&& lastName.equals( other.lastName )
+					&& isMale == other.isMale;
+		}
+		else {
+			return false;
+		}
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/TreeType.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/TreeType.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/TreeType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,61 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.manytoone;
-
-import javax.persistence.Entity;
-import javax.persistence.ManyToOne;
-import javax.persistence.JoinTable;
-import javax.persistence.Id;
-import javax.persistence.GeneratedValue;
-import javax.persistence.JoinColumn;
-import javax.persistence.FetchType;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class TreeType {
-	private Integer id;
-	private String name;
-	private ForestType forestType;
-	private ForestType alternativeForestType;
-
-	@ManyToOne(fetch = FetchType.LAZY)
-	@JoinTable(name="Tree_Forest")
-	public ForestType getForestType() {
-		return forestType;
-	}
-
-	public void setForestType(ForestType forestType) {
-		this.forestType = forestType;
-	}
-
-	@ManyToOne(fetch = FetchType.LAZY)
-	@JoinTable(name="Atl_Forest_Type",
-		joinColumns = @JoinColumn(name="tree_id"),
-		inverseJoinColumns = @JoinColumn(name="forest_id") )
-	public ForestType getAlternativeForestType() {
-		return alternativeForestType;
-	}
-
-	public void setAlternativeForestType(ForestType alternativeForestType) {
-		this.alternativeForestType = alternativeForestType;
-	}
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/TreeType.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/TreeType.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/TreeType.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/TreeType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,61 @@
+//$Id: $
+package org.hibernate.test.annotations.manytoone;
+
+import javax.persistence.Entity;
+import javax.persistence.ManyToOne;
+import javax.persistence.JoinTable;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+import javax.persistence.JoinColumn;
+import javax.persistence.FetchType;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class TreeType {
+	private Integer id;
+	private String name;
+	private ForestType forestType;
+	private ForestType alternativeForestType;
+
+	@ManyToOne(fetch = FetchType.LAZY)
+	@JoinTable(name="Tree_Forest")
+	public ForestType getForestType() {
+		return forestType;
+	}
+
+	public void setForestType(ForestType forestType) {
+		this.forestType = forestType;
+	}
+
+	@ManyToOne(fetch = FetchType.LAZY)
+	@JoinTable(name="Atl_Forest_Type",
+		joinColumns = @JoinColumn(name="tree_id"),
+		inverseJoinColumns = @JoinColumn(name="forest_id") )
+	public ForestType getAlternativeForestType() {
+		return alternativeForestType;
+	}
+
+	public void setAlternativeForestType(ForestType alternativeForestType) {
+		this.alternativeForestType = alternativeForestType;
+	}
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/User.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/User.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/User.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,113 +0,0 @@
-package org.hibernate.test.annotations.manytoone;
-
-import java.util.Date;
-import java.util.Set;
-import javax.persistence.CascadeType;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.Id;
-import javax.persistence.IdClass;
-import javax.persistence.OneToMany;
-import javax.persistence.SequenceGenerator;
-import javax.persistence.Table;
-
- at Entity
- at Table(name = "CTVUSERS")
- at IdClass(UserPK.class)
- at SequenceGenerator(name = "UserSeq", sequenceName = "SQ_USER")
-public class User {
-	@Id
-	@Column(name = "CTVUSERS_KEY")
-	private Long userKey;
-
-	@Id
-	@Column(name = "CTVUSERS_START_DATE")
-	private Date startDate;
-
-	@Id
-	@Column(name = "CTVUSERS_END_DATE")
-	private Date endDate;
-
-	@Column(name = "CTVUSERS_CREATE_USERS_KEY")
-	private Long createdBy;
-
-	@Column(name = "CTVUSERS_CREATE_DATE")
-	private Date createdOn;
-
-	@Column(name = "CTVUSERS_ID")
-	private String userId;
-
-	@Column(name = "CTVUSERS_PREFX_KEY")
-	private Integer prefix;
-
-	@Column(name = "CTVUSERS_FIRST_NAME")
-	private String firstName;
-
-	@Column(name = "CTVUSERS_LAST_NAME1")
-	private String lastName1;
-
-	@Column(name = "CTVUSERS_LAST_NAME2")
-	private String lastName2;
-
-	@Column(name = "CTVUSERS_MIDDLE_NAME1")
-	private String middleName1;
-
-	@Column(name = "CTVUSERS_MIDDLE_NAME2")
-	private String middleName2;
-
-	@Column(name = "CTVUSERS_SUFFX_KEY")
-	private Integer suffix;
-
-	@Column(name = "CTVUSERS_BIRTH_DATE")
-	private Date birthDate;
-
-	@Column(name = "CTVUSERS_BIRTH_STATE_KEY")
-	private Integer birthState;
-
-	@Column(name = "CTVUSERS_BIRTH_CNTRY_KEY")
-	private Integer birthCountry;
-
-	@Column(name = "CTVUSERS_USERNAME")
-	private String username;
-
-	@Column(name = "CTVUSERS_PASSWORD")
-	private String password;
-
-	@Column(name = "CTVUSERS_LOTYP_KEY")
-	private Integer userType;
-
-	@Column(name = "CTVUSERS_PRIVL_KEY")
-	private Integer privilege;
-
-	@Column(name = "CTVUSERS_STATE_KEY")
-	private Integer state;
-
-	@Column(name = "CTVUSERS_CNTRY_KEY")
-	private Integer country;
-
-	@Column(name = "CTVUSERS_PREFERRED_NAME")
-	private String preferredName;
-
-	@Column(name = "CTVUSERS_BIRTH_PLACE")
-	private String birthPlace;
-
-	@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "user")
-	private Set<DistrictUser> districtUsers;
-
-	@Column(name = "CTVUSERS_SCHOL_KEY")
-	private Long school;
-
-	@Column(name = "CTVUSERS_CLSTR_KEY")
-	private Long cluster;
-
-	@Column(name = "CTVUSERS_LDTMM_KEY")
-	private Long ldtmm;
-
-	@Column(name = "CTVUSERS_LDTMD_KEY")
-	private Long ldtmd;
-
-	@Column(name = "CTVUSERS_PMTMP_KEY")
-	private Long pmtmp;
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/User.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/User.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/User.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/User.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,113 @@
+package org.hibernate.test.annotations.manytoone;
+
+import java.util.Date;
+import java.util.Set;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.Id;
+import javax.persistence.IdClass;
+import javax.persistence.OneToMany;
+import javax.persistence.SequenceGenerator;
+import javax.persistence.Table;
+
+ at Entity
+ at Table(name = "CTVUSERS")
+ at IdClass(UserPK.class)
+ at SequenceGenerator(name = "UserSeq", sequenceName = "SQ_USER")
+public class User {
+	@Id
+	@Column(name = "CTVUSERS_KEY")
+	private Long userKey;
+
+	@Id
+	@Column(name = "CTVUSERS_START_DATE")
+	private Date startDate;
+
+	@Id
+	@Column(name = "CTVUSERS_END_DATE")
+	private Date endDate;
+
+	@Column(name = "CTVUSERS_CREATE_USERS_KEY")
+	private Long createdBy;
+
+	@Column(name = "CTVUSERS_CREATE_DATE")
+	private Date createdOn;
+
+	@Column(name = "CTVUSERS_ID")
+	private String userId;
+
+	@Column(name = "CTVUSERS_PREFX_KEY")
+	private Integer prefix;
+
+	@Column(name = "CTVUSERS_FIRST_NAME")
+	private String firstName;
+
+	@Column(name = "CTVUSERS_LAST_NAME1")
+	private String lastName1;
+
+	@Column(name = "CTVUSERS_LAST_NAME2")
+	private String lastName2;
+
+	@Column(name = "CTVUSERS_MIDDLE_NAME1")
+	private String middleName1;
+
+	@Column(name = "CTVUSERS_MIDDLE_NAME2")
+	private String middleName2;
+
+	@Column(name = "CTVUSERS_SUFFX_KEY")
+	private Integer suffix;
+
+	@Column(name = "CTVUSERS_BIRTH_DATE")
+	private Date birthDate;
+
+	@Column(name = "CTVUSERS_BIRTH_STATE_KEY")
+	private Integer birthState;
+
+	@Column(name = "CTVUSERS_BIRTH_CNTRY_KEY")
+	private Integer birthCountry;
+
+	@Column(name = "CTVUSERS_USERNAME")
+	private String username;
+
+	@Column(name = "CTVUSERS_PASSWORD")
+	private String password;
+
+	@Column(name = "CTVUSERS_LOTYP_KEY")
+	private Integer userType;
+
+	@Column(name = "CTVUSERS_PRIVL_KEY")
+	private Integer privilege;
+
+	@Column(name = "CTVUSERS_STATE_KEY")
+	private Integer state;
+
+	@Column(name = "CTVUSERS_CNTRY_KEY")
+	private Integer country;
+
+	@Column(name = "CTVUSERS_PREFERRED_NAME")
+	private String preferredName;
+
+	@Column(name = "CTVUSERS_BIRTH_PLACE")
+	private String birthPlace;
+
+	@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "user")
+	private Set<DistrictUser> districtUsers;
+
+	@Column(name = "CTVUSERS_SCHOL_KEY")
+	private Long school;
+
+	@Column(name = "CTVUSERS_CLSTR_KEY")
+	private Long cluster;
+
+	@Column(name = "CTVUSERS_LDTMM_KEY")
+	private Long ldtmm;
+
+	@Column(name = "CTVUSERS_LDTMD_KEY")
+	private Long ldtmd;
+
+	@Column(name = "CTVUSERS_PMTMP_KEY")
+	private Long pmtmp;
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/UserPK.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/UserPK.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/UserPK.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,39 +0,0 @@
-package org.hibernate.test.annotations.manytoone;
-
-import java.io.Serializable;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import javax.persistence.Column;
-
-public class UserPK implements Serializable {
-	private static final long serialVersionUID = -7720874756224520523L;
-	@Column(name = "CTVUSERS_KEY")
-	public Long userKey;
-
-	@Column(name = "CTVUSERS_START_DATE")
-	public Date startDate;
-
-
-	@Column(name = "CTVUSERS_END_DATE")
-	public Date endDate;
-
-	public UserPK() {
-	}
-
-	@Override
-	public boolean equals(Object obj) {
-		if ( !( obj instanceof UserPK ) ) {
-			return false;
-		}
-		UserPK userPK = (UserPK) obj;
-		SimpleDateFormat formatter = new SimpleDateFormat( "MM/dd/yyyy" );
-		return userKey.equals( userPK.userKey ) && formatter.format( startDate )
-				.equals( formatter.format( userPK.startDate ) )
-				&& formatter.format( endDate ).equals( formatter.format( userPK.endDate ) );
-	}
-
-	@Override
-	public int hashCode() {
-		return userKey.hashCode() * startDate.hashCode() * endDate.hashCode();
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/UserPK.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/UserPK.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/UserPK.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/manytoone/UserPK.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,39 @@
+package org.hibernate.test.annotations.manytoone;
+
+import java.io.Serializable;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import javax.persistence.Column;
+
+public class UserPK implements Serializable {
+	private static final long serialVersionUID = -7720874756224520523L;
+	@Column(name = "CTVUSERS_KEY")
+	public Long userKey;
+
+	@Column(name = "CTVUSERS_START_DATE")
+	public Date startDate;
+
+
+	@Column(name = "CTVUSERS_END_DATE")
+	public Date endDate;
+
+	public UserPK() {
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if ( !( obj instanceof UserPK ) ) {
+			return false;
+		}
+		UserPK userPK = (UserPK) obj;
+		SimpleDateFormat formatter = new SimpleDateFormat( "MM/dd/yyyy" );
+		return userKey.equals( userPK.userKey ) && formatter.format( startDate )
+				.equals( formatter.format( userPK.startDate ) )
+				&& formatter.format( endDate ).equals( formatter.format( userPK.endDate ) );
+	}
+
+	@Override
+	public int hashCode() {
+		return userKey.hashCode() * startDate.hashCode() * endDate.hashCode();
+	}
+}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/notfound (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/notfound)

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/notfound/Coin.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/notfound/Coin.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/notfound/Coin.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,50 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.notfound;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-
-import org.hibernate.annotations.NotFound;
-import org.hibernate.annotations.NotFoundAction;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Coin {
-	private Integer id;
-	private String name;
-	private Currency currency;
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	@ManyToOne
-	@JoinColumn(name = "currency", referencedColumnName = "name")
-	@NotFound(action = NotFoundAction.IGNORE)
-	public Currency getCurrency() {
-		return currency;
-	}
-
-	public void setCurrency(Currency currency) {
-		this.currency = currency;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/notfound/Coin.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/notfound/Coin.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/notfound/Coin.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/notfound/Coin.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,50 @@
+//$Id$
+package org.hibernate.test.annotations.notfound;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+
+import org.hibernate.annotations.NotFound;
+import org.hibernate.annotations.NotFoundAction;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Coin {
+	private Integer id;
+	private String name;
+	private Currency currency;
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	@ManyToOne
+	@JoinColumn(name = "currency", referencedColumnName = "name")
+	@NotFound(action = NotFoundAction.IGNORE)
+	public Currency getCurrency() {
+		return currency;
+	}
+
+	public void setCurrency(Currency currency) {
+		this.currency = currency;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/notfound/Currency.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/notfound/Currency.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/notfound/Currency.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,34 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.notfound;
-
-import java.io.Serializable;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Currency implements Serializable {
-	private Integer id;
-	private String name;
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/notfound/Currency.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/notfound/Currency.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/notfound/Currency.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/notfound/Currency.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,34 @@
+//$Id$
+package org.hibernate.test.annotations.notfound;
+
+import java.io.Serializable;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Currency implements Serializable {
+	private Integer id;
+	private String name;
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/notfound/NotFoundTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/notfound/NotFoundTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/notfound/NotFoundTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,45 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.notfound;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-import org.hibernate.test.annotations.TestCase;
-
-/**
- * @author Emmanuel Bernard
- */
-public class NotFoundTest extends TestCase {
-
-	public void testManyToOne() throws Exception {
-		Currency euro = new Currency();
-		euro.setName( "Euro" );
-		Coin fiveC = new Coin();
-		fiveC.setName( "Five cents" );
-		fiveC.setCurrency( euro );
-		Session s = openSession();
-		s.getTransaction().begin();
-		s.persist( euro );
-		s.persist( fiveC );
-		s.getTransaction().commit();
-		s.clear();
-		Transaction tx = s.beginTransaction();
-		euro = (Currency) s.get( Currency.class, euro.getId() );
-		s.delete( euro );
-		tx.commit();
-		s.clear();
-		tx = s.beginTransaction();
-		fiveC = (Coin) s.get( Coin.class, fiveC.getId() );
-		assertNull( fiveC.getCurrency() );
-		s.delete( fiveC );
-		tx.commit();
-		s.close();
-
-	}
-
-	protected Class[] getMappings() {
-		return new Class[]{
-				Coin.class,
-				Currency.class
-		};
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/notfound/NotFoundTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/notfound/NotFoundTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/notfound/NotFoundTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/notfound/NotFoundTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,45 @@
+//$Id$
+package org.hibernate.test.annotations.notfound;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class NotFoundTest extends TestCase {
+
+	public void testManyToOne() throws Exception {
+		Currency euro = new Currency();
+		euro.setName( "Euro" );
+		Coin fiveC = new Coin();
+		fiveC.setName( "Five cents" );
+		fiveC.setCurrency( euro );
+		Session s = openSession();
+		s.getTransaction().begin();
+		s.persist( euro );
+		s.persist( fiveC );
+		s.getTransaction().commit();
+		s.clear();
+		Transaction tx = s.beginTransaction();
+		euro = (Currency) s.get( Currency.class, euro.getId() );
+		s.delete( euro );
+		tx.commit();
+		s.clear();
+		tx = s.beginTransaction();
+		fiveC = (Coin) s.get( Coin.class, fiveC.getId() );
+		assertNull( fiveC.getCurrency() );
+		s.delete( fiveC );
+		tx.commit();
+		s.close();
+
+	}
+
+	protected Class[] getMappings() {
+		return new Class[]{
+				Coin.class,
+				Currency.class
+		};
+	}
+}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany)

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Child.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Child.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Child.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,33 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.onetomany;
-
-import java.io.Serializable;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.JoinColumns;
-import javax.persistence.ManyToOne;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Child implements Serializable {
-	@Id
-	@GeneratedValue
-	public Integer id;
-
-	@ManyToOne()
-	@JoinColumns({
-	@JoinColumn(name = "parentCivility", referencedColumnName = "isMale"),
-	@JoinColumn(name = "parentLastName", referencedColumnName = "lastName"),
-	@JoinColumn(name = "parentFirstName", referencedColumnName = "firstName")
-			})
-	public Parent parent;
-	@Column(name = "fav_sup_hero")
-	public String favoriteSuperhero;
-	@Column(name = "fav_singer")
-	public String favoriteSinger;
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Child.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Child.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Child.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Child.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,33 @@
+//$Id$
+package org.hibernate.test.annotations.onetomany;
+
+import java.io.Serializable;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinColumns;
+import javax.persistence.ManyToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Child implements Serializable {
+	@Id
+	@GeneratedValue
+	public Integer id;
+
+	@ManyToOne()
+	@JoinColumns({
+	@JoinColumn(name = "parentCivility", referencedColumnName = "isMale"),
+	@JoinColumn(name = "parentLastName", referencedColumnName = "lastName"),
+	@JoinColumn(name = "parentFirstName", referencedColumnName = "firstName")
+			})
+	public Parent parent;
+	@Column(name = "fav_sup_hero")
+	public String favoriteSuperhero;
+	@Column(name = "fav_singer")
+	public String favoriteSinger;
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/City.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/City.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/City.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,72 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.onetomany;
-
-import java.util.ArrayList;
-import java.util.List;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.OneToMany;
-import javax.persistence.OrderBy;
-
-import org.hibernate.annotations.ForeignKey;
-import org.hibernate.annotations.Immutable;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-class City {
-	private Integer id;
-	private String name;
-	private List<Street> streets;
-	private List<Street> mainStreets;
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	@OneToMany(mappedBy = "city")
-	@OrderBy("streetNameCopy, streetName, id")
-	public synchronized List<Street> getStreets() {
-		return streets;
-	}
-
-	public void setStreets(List<Street> streets) {
-		this.streets = streets;
-	}
-
-	@OneToMany()
-	@JoinColumn(name = "mainstreetcity_id")
-	@ForeignKey(name = "CITYSTR_FK")
-	@OrderBy
-	@Immutable
-	public List<Street> getMainStreets() {
-		return mainStreets;
-	}
-
-	public void setMainStreets(List<Street> streets) {
-		this.mainStreets = streets;
-	}
-
-	public void addMainStreet(Street street) {
-		if ( mainStreets == null ) mainStreets = new ArrayList<Street>();
-		mainStreets.add( street );
-	}
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/City.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/City.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/City.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/City.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,72 @@
+//$Id$
+package org.hibernate.test.annotations.onetomany;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.OneToMany;
+import javax.persistence.OrderBy;
+
+import org.hibernate.annotations.ForeignKey;
+import org.hibernate.annotations.Immutable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+class City {
+	private Integer id;
+	private String name;
+	private List<Street> streets;
+	private List<Street> mainStreets;
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	@OneToMany(mappedBy = "city")
+	@OrderBy("streetNameCopy, streetName, id")
+	public synchronized List<Street> getStreets() {
+		return streets;
+	}
+
+	public void setStreets(List<Street> streets) {
+		this.streets = streets;
+	}
+
+	@OneToMany()
+	@JoinColumn(name = "mainstreetcity_id")
+	@ForeignKey(name = "CITYSTR_FK")
+	@OrderBy
+	@Immutable
+	public List<Street> getMainStreets() {
+		return mainStreets;
+	}
+
+	public void setMainStreets(List<Street> streets) {
+		this.mainStreets = streets;
+	}
+
+	public void addMainStreet(Street street) {
+		if ( mainStreets == null ) mainStreets = new ArrayList<Street>();
+		mainStreets.add( street );
+	}
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Monkey.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Monkey.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Monkey.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,33 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.onetomany;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Monkey {
-	private Integer id;
-	private String name;
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Monkey.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Monkey.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Monkey.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Monkey.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,33 @@
+//$Id$
+package org.hibernate.test.annotations.onetomany;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Monkey {
+	private Integer id;
+	private String name;
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/OneToManyTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/OneToManyTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/OneToManyTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,429 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.onetomany;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.List;
-import java.util.SortedSet;
-import java.util.TreeSet;
-import java.util.Set;
-
-import org.hibernate.Hibernate;
-import org.hibernate.HibernateException;
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-import org.hibernate.test.annotations.Customer;
-import org.hibernate.test.annotations.Discount;
-import org.hibernate.test.annotations.Passport;
-import org.hibernate.test.annotations.TestCase;
-import org.hibernate.test.annotations.Ticket;
-import org.hibernate.test.annotations.TicketComparator;
-
-/**
- * Test various case of a one to many relationship
- *
- * @author Emmanuel Bernard
- */
-public class OneToManyTest extends TestCase {
-
-	public OneToManyTest(String x) {
-		super( x );
-	}
-
-	public void testColumnDefinitionPropagation() throws Exception {
-		Session s;
-		s = openSession();
-		s.getTransaction().begin();
-		Politician casimir = new Politician();
-		casimir.setName( "Casimir" );
-		PoliticalParty dream = new PoliticalParty();
-		dream.setName( "Dream" );
-		dream.addPolitician( casimir );
-		s.persist( dream );
-		s.getTransaction().commit();
-		s.clear();
-
-		Transaction tx = s.beginTransaction();
-		s.delete( s.get( PoliticalParty.class, dream.getName() ) );
-		tx.commit();
-		s.close();
-	}
-
-	public void testListWithBagSemanticAndOrderBy() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		City paris = new City();
-		paris.setName( "Paris" );
-		s.persist( paris );
-		Street rochechoir = new Street();
-		rochechoir.setStreetName( "Rochechoir" );
-		rochechoir.setCity( paris );
-		Street chmpsElysees = new Street();
-		chmpsElysees.setStreetName( "Champs Elysees" );
-		chmpsElysees.setCity( paris );
-		Street grandeArmee = new Street();
-		grandeArmee.setStreetName( "Grande Armée" );
-		grandeArmee.setCity( paris );
-		s.persist( rochechoir );
-		s.persist( chmpsElysees );
-		s.persist( grandeArmee );
-		paris.addMainStreet( chmpsElysees );
-		paris.addMainStreet( grandeArmee );
-
-		s.flush();
-		s.clear();
-
-		//testing @OrderBy with explicit values including Formula
-		paris = (City) s.get( City.class, paris.getId() );
-		assertEquals( 3, paris.getStreets().size() );
-		assertEquals( chmpsElysees.getStreetName(), paris.getStreets().get( 0 ).getStreetName() );
-		List<Street> mainStreets = paris.getMainStreets();
-		assertEquals( 2, mainStreets.size() );
-		Integer previousId = new Integer( -1 );
-		for ( Street street : mainStreets ) {
-			assertTrue( previousId < street.getId() );
-			previousId = street.getId();
-		}
-		tx.rollback();
-		s.close();
-
-	}
-
-	public void testUnidirectionalDefault() throws Exception {
-		Session s;
-		Transaction tx;
-		Trainer trainer = new Trainer();
-		trainer.setName( "First trainer" );
-		Tiger regularTiger = new Tiger();
-		regularTiger.setName( "Regular Tiger" );
-		Tiger whiteTiger = new Tiger();
-		whiteTiger.setName( "White Tiger" );
-		trainer.setTrainedTigers( new HashSet<Tiger>() );
-		s = openSession();
-		tx = s.beginTransaction();
-		s.persist( trainer );
-		s.persist( regularTiger );
-		s.persist( whiteTiger );
-		trainer.getTrainedTigers().add( regularTiger );
-		trainer.getTrainedTigers().add( whiteTiger );
-
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		trainer = (Trainer) s.get( Trainer.class, trainer.getId() );
-		assertNotNull( trainer );
-		assertNotNull( trainer.getTrainedTigers() );
-		assertEquals( 2, trainer.getTrainedTigers().size() );
-		tx.rollback();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		trainer = new Trainer();
-		trainer.setName( "new trainer" );
-		trainer.setTrainedTigers( new HashSet<Tiger>() );
-		trainer.getTrainedTigers().add( whiteTiger );
-		try {
-			s.persist( trainer );
-			tx.commit();
-			fail( "A one to many should not allow several trainer per Tiger" );
-		}
-		catch (HibernateException ce) {
-			tx.rollback();
-			//success
-		}
-		s.close();
-	}
-
-	public void testUnidirectionalExplicit() throws Exception {
-		Session s;
-		Transaction tx;
-		Trainer trainer = new Trainer();
-		trainer.setName( "First trainer" );
-		Monkey regularMonkey = new Monkey();
-		regularMonkey.setName( "Regular Monkey" );
-		Monkey miniMonkey = new Monkey();
-		miniMonkey.setName( "Mini Monkey" );
-		trainer.setTrainedMonkeys( new HashSet<Monkey>() );
-		s = openSession();
-		tx = s.beginTransaction();
-		s.persist( trainer );
-		s.persist( regularMonkey );
-		s.persist( miniMonkey );
-		trainer.getTrainedMonkeys().add( regularMonkey );
-		trainer.getTrainedMonkeys().add( miniMonkey );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		trainer = (Trainer) s.get( Trainer.class, trainer.getId() );
-		assertNotNull( trainer );
-		assertNotNull( trainer.getTrainedMonkeys() );
-		assertEquals( 2, trainer.getTrainedMonkeys().size() );
-		tx.rollback();
-		s.close();
-	}
-
-	public void testFetching() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		Troop t = new Troop();
-		t.setName( "Final cut" );
-		Soldier vandamme = new Soldier();
-		vandamme.setName( "JC Vandamme" );
-		t.addSoldier( vandamme );
-		Soldier rambo = new Soldier();
-		rambo.setName( "Rambo" );
-		t.addSoldier( rambo );
-		s.persist( t );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		t = (Troop) s.get( Troop.class, t.getId() );
-		assertNotNull( t.getSoldiers() );
-		assertFalse( Hibernate.isInitialized( t.getSoldiers() ) );
-		assertEquals( 2, t.getSoldiers().size() );
-		assertEquals( rambo.getName(), t.getSoldiers().iterator().next().getName() );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		t = (Troop) s.createQuery( "from " + Troop.class.getName() + " as t where t.id = :id" )
-				.setParameter( "id", t.getId() ).uniqueResult();
-		assertFalse( Hibernate.isInitialized( t.getSoldiers() ) );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		rambo = (Soldier) s.get( Soldier.class, rambo.getId() );
-		assertTrue( Hibernate.isInitialized( rambo.getTroop() ) );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		rambo = (Soldier) s.createQuery( "from " + Soldier.class.getName() + " as s where s.id = :rid" )
-				.setParameter( "rid", rambo.getId() ).uniqueResult();
-		assertTrue( "fetching strategy used when we do query", Hibernate.isInitialized( rambo.getTroop() ) );
-		tx.commit();
-		s.close();
-	}
-
-	public void testCascadeDeleteOrphan() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		Troop disney = new Troop();
-		disney.setName( "Disney" );
-		Soldier mickey = new Soldier();
-		mickey.setName( "Mickey" );
-		disney.addSoldier( mickey );
-		s.persist( disney );
-		tx.commit();
-		s.close();
-		s = openSession();
-		tx = s.beginTransaction();
-		Troop troop = (Troop) s.get( Troop.class, disney.getId() );
-		Soldier soldier = (Soldier) troop.getSoldiers().iterator().next();
-		tx.commit();
-		s.close();
-		//troop.getSoldiers().remove(soldier);
-		troop.getSoldiers().clear();
-		s = openSession();
-		tx = s.beginTransaction();
-		s.merge( troop );
-		tx.commit();
-		s.close();
-		s = openSession();
-		tx = s.beginTransaction();
-		soldier = (Soldier) s.get( Soldier.class, mickey.getId() );
-		assertNull( "delete-orphan should work", soldier );
-		troop = (Troop) s.get( Troop.class, disney.getId() );
-		s.delete( troop );
-		tx.commit();
-		s.close();
-	}
-
-	public void testCascadeDelete() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		Troop disney = new Troop();
-		disney.setName( "Disney" );
-		Soldier mickey = new Soldier();
-		mickey.setName( "Mickey" );
-		disney.addSoldier( mickey );
-		s.persist( disney );
-		tx.commit();
-		s.close();
-		s = openSession();
-		tx = s.beginTransaction();
-		Troop troop = (Troop) s.get( Troop.class, disney.getId() );
-		s.delete( troop );
-		tx.commit();
-		s.close();
-		s = openSession();
-		tx = s.beginTransaction();
-		Soldier soldier = (Soldier) s.get( Soldier.class, mickey.getId() );
-		assertNull( "delete-orphan should work", soldier );
-		tx.commit();
-		s.close();
-	}
-
-	public void testSimpleOneToManySet() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		Ticket t = new Ticket();
-		t.setNumber( "33A" );
-		Ticket t2 = new Ticket();
-		t2.setNumber( "234ER" );
-		Customer c = new Customer();
-		s.persist( c );
-		//s.persist(t);
-		SortedSet<Ticket> tickets = new TreeSet<Ticket>( new TicketComparator() );
-		tickets.add( t );
-		tickets.add( t2 );
-		c.setTickets( tickets );
-
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		c = (Customer) s.load( Customer.class, c.getId() );
-		assertNotNull( c );
-		assertTrue( Hibernate.isInitialized( c.getTickets() ) );
-		assertNotNull( c.getTickets() );
-		tickets = c.getTickets();
-		assertTrue( tickets.size() > 0 );
-		assertEquals( t2.getNumber(), c.getTickets().first().getNumber() );
-		tx.commit();
-		s.close();
-	}
-
-	public void testSimpleOneToManyCollection() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		Discount d = new Discount();
-		d.setDiscount( 10 );
-		Customer c = new Customer();
-		List discounts = new ArrayList();
-		discounts.add( d );
-		d.setOwner( c );
-		c.setDiscountTickets( discounts );
-		s.persist( c );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		c = (Customer) s.load( Customer.class, c.getId() );
-		assertNotNull( c );
-		assertFalse( Hibernate.isInitialized( c.getDiscountTickets() ) );
-		assertNotNull( c.getDiscountTickets() );
-		Collection collecDiscount = c.getDiscountTickets();
-		assertTrue( collecDiscount.size() > 0 );
-		tx.commit();
-		s.close();
-	}
-
-	public void testJoinColumns() throws Exception {
-		Parent parent = new Parent();
-		ParentPk pk = new ParentPk();
-		pk.firstName = "Bruce";
-		pk.lastName = "Willis";
-		pk.isMale = true;
-		parent.id = pk;
-		parent.age = 40;
-		Child child = new Child();
-		Child child2 = new Child();
-		parent.addChild( child );
-		parent.addChild( child2 );
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		s.persist( parent );
-		tx.commit();
-		s.close();
-
-		assertNotNull( child.id );
-		assertNotNull( child2.id );
-		assertNotSame( child.id, child2.id );
-
-		s = openSession();
-		tx = s.beginTransaction();
-		parent = (Parent) s.get( Parent.class, pk );
-		assertNotNull( parent.children );
-		Hibernate.initialize( parent.children );
-		assertEquals( 2, parent.children.size() );
-		tx.commit();
-		s.close();
-	}
-
-	public void testOrderByOnSuperclassProperty() {
-		OrganisationUser user = new OrganisationUser();
-		user.setFirstName( "Emmanuel" );
-		user.setLastName( "Bernard" );
-		user.setIdPerson( new Long(1) );
-		user.setSomeText( "SomeText" );
-		Organisation org = new Organisation();
-		org.setIdOrganisation( new Long(1) );
-		org.setName( "S Diego Zoo" );
-		user.setOrganisation( org );
-		Session s = openSession();
-		s.getTransaction().begin();
-		s.persist( user );
-		s.persist( org );
-		s.flush();
-		s.clear();
-		List l = s.createQuery( "select org from Organisation org left join fetch org.organisationUsers" ).list();
-		s.getTransaction().rollback();
-		s.close();
-	}
-
-	/**
-	 * @see org.hibernate.test.annotations.TestCase#getMappings()
-	 */
-	protected Class[] getMappings() {
-		return new Class[]{
-				Troop.class,
-				Soldier.class,
-				Customer.class,
-				Ticket.class,
-				Discount.class,
-				Passport.class,
-				Parent.class,
-				Child.class,
-				Trainer.class,
-				Tiger.class,
-				Monkey.class,
-				City.class,
-				Street.class,
-				PoliticalParty.class,
-				Politician.class,
-				Person.class,
-				Organisation.class,
-				OrganisationUser.class
-		};
-	}
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/OneToManyTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/OneToManyTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/OneToManyTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/OneToManyTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,429 @@
+//$Id$
+package org.hibernate.test.annotations.onetomany;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.SortedSet;
+import java.util.TreeSet;
+import java.util.Set;
+
+import org.hibernate.Hibernate;
+import org.hibernate.HibernateException;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.Customer;
+import org.hibernate.test.annotations.Discount;
+import org.hibernate.test.annotations.Passport;
+import org.hibernate.test.annotations.TestCase;
+import org.hibernate.test.annotations.Ticket;
+import org.hibernate.test.annotations.TicketComparator;
+
+/**
+ * Test various case of a one to many relationship
+ *
+ * @author Emmanuel Bernard
+ */
+public class OneToManyTest extends TestCase {
+
+	public OneToManyTest(String x) {
+		super( x );
+	}
+
+	public void testColumnDefinitionPropagation() throws Exception {
+		Session s;
+		s = openSession();
+		s.getTransaction().begin();
+		Politician casimir = new Politician();
+		casimir.setName( "Casimir" );
+		PoliticalParty dream = new PoliticalParty();
+		dream.setName( "Dream" );
+		dream.addPolitician( casimir );
+		s.persist( dream );
+		s.getTransaction().commit();
+		s.clear();
+
+		Transaction tx = s.beginTransaction();
+		s.delete( s.get( PoliticalParty.class, dream.getName() ) );
+		tx.commit();
+		s.close();
+	}
+
+	public void testListWithBagSemanticAndOrderBy() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		City paris = new City();
+		paris.setName( "Paris" );
+		s.persist( paris );
+		Street rochechoir = new Street();
+		rochechoir.setStreetName( "Rochechoir" );
+		rochechoir.setCity( paris );
+		Street chmpsElysees = new Street();
+		chmpsElysees.setStreetName( "Champs Elysees" );
+		chmpsElysees.setCity( paris );
+		Street grandeArmee = new Street();
+		grandeArmee.setStreetName( "Grande Armée" );
+		grandeArmee.setCity( paris );
+		s.persist( rochechoir );
+		s.persist( chmpsElysees );
+		s.persist( grandeArmee );
+		paris.addMainStreet( chmpsElysees );
+		paris.addMainStreet( grandeArmee );
+
+		s.flush();
+		s.clear();
+
+		//testing @OrderBy with explicit values including Formula
+		paris = (City) s.get( City.class, paris.getId() );
+		assertEquals( 3, paris.getStreets().size() );
+		assertEquals( chmpsElysees.getStreetName(), paris.getStreets().get( 0 ).getStreetName() );
+		List<Street> mainStreets = paris.getMainStreets();
+		assertEquals( 2, mainStreets.size() );
+		Integer previousId = new Integer( -1 );
+		for ( Street street : mainStreets ) {
+			assertTrue( previousId < street.getId() );
+			previousId = street.getId();
+		}
+		tx.rollback();
+		s.close();
+
+	}
+
+	public void testUnidirectionalDefault() throws Exception {
+		Session s;
+		Transaction tx;
+		Trainer trainer = new Trainer();
+		trainer.setName( "First trainer" );
+		Tiger regularTiger = new Tiger();
+		regularTiger.setName( "Regular Tiger" );
+		Tiger whiteTiger = new Tiger();
+		whiteTiger.setName( "White Tiger" );
+		trainer.setTrainedTigers( new HashSet<Tiger>() );
+		s = openSession();
+		tx = s.beginTransaction();
+		s.persist( trainer );
+		s.persist( regularTiger );
+		s.persist( whiteTiger );
+		trainer.getTrainedTigers().add( regularTiger );
+		trainer.getTrainedTigers().add( whiteTiger );
+
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		trainer = (Trainer) s.get( Trainer.class, trainer.getId() );
+		assertNotNull( trainer );
+		assertNotNull( trainer.getTrainedTigers() );
+		assertEquals( 2, trainer.getTrainedTigers().size() );
+		tx.rollback();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		trainer = new Trainer();
+		trainer.setName( "new trainer" );
+		trainer.setTrainedTigers( new HashSet<Tiger>() );
+		trainer.getTrainedTigers().add( whiteTiger );
+		try {
+			s.persist( trainer );
+			tx.commit();
+			fail( "A one to many should not allow several trainer per Tiger" );
+		}
+		catch (HibernateException ce) {
+			tx.rollback();
+			//success
+		}
+		s.close();
+	}
+
+	public void testUnidirectionalExplicit() throws Exception {
+		Session s;
+		Transaction tx;
+		Trainer trainer = new Trainer();
+		trainer.setName( "First trainer" );
+		Monkey regularMonkey = new Monkey();
+		regularMonkey.setName( "Regular Monkey" );
+		Monkey miniMonkey = new Monkey();
+		miniMonkey.setName( "Mini Monkey" );
+		trainer.setTrainedMonkeys( new HashSet<Monkey>() );
+		s = openSession();
+		tx = s.beginTransaction();
+		s.persist( trainer );
+		s.persist( regularMonkey );
+		s.persist( miniMonkey );
+		trainer.getTrainedMonkeys().add( regularMonkey );
+		trainer.getTrainedMonkeys().add( miniMonkey );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		trainer = (Trainer) s.get( Trainer.class, trainer.getId() );
+		assertNotNull( trainer );
+		assertNotNull( trainer.getTrainedMonkeys() );
+		assertEquals( 2, trainer.getTrainedMonkeys().size() );
+		tx.rollback();
+		s.close();
+	}
+
+	public void testFetching() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		Troop t = new Troop();
+		t.setName( "Final cut" );
+		Soldier vandamme = new Soldier();
+		vandamme.setName( "JC Vandamme" );
+		t.addSoldier( vandamme );
+		Soldier rambo = new Soldier();
+		rambo.setName( "Rambo" );
+		t.addSoldier( rambo );
+		s.persist( t );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		t = (Troop) s.get( Troop.class, t.getId() );
+		assertNotNull( t.getSoldiers() );
+		assertFalse( Hibernate.isInitialized( t.getSoldiers() ) );
+		assertEquals( 2, t.getSoldiers().size() );
+		assertEquals( rambo.getName(), t.getSoldiers().iterator().next().getName() );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		t = (Troop) s.createQuery( "from " + Troop.class.getName() + " as t where t.id = :id" )
+				.setParameter( "id", t.getId() ).uniqueResult();
+		assertFalse( Hibernate.isInitialized( t.getSoldiers() ) );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		rambo = (Soldier) s.get( Soldier.class, rambo.getId() );
+		assertTrue( Hibernate.isInitialized( rambo.getTroop() ) );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		rambo = (Soldier) s.createQuery( "from " + Soldier.class.getName() + " as s where s.id = :rid" )
+				.setParameter( "rid", rambo.getId() ).uniqueResult();
+		assertTrue( "fetching strategy used when we do query", Hibernate.isInitialized( rambo.getTroop() ) );
+		tx.commit();
+		s.close();
+	}
+
+	public void testCascadeDeleteOrphan() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		Troop disney = new Troop();
+		disney.setName( "Disney" );
+		Soldier mickey = new Soldier();
+		mickey.setName( "Mickey" );
+		disney.addSoldier( mickey );
+		s.persist( disney );
+		tx.commit();
+		s.close();
+		s = openSession();
+		tx = s.beginTransaction();
+		Troop troop = (Troop) s.get( Troop.class, disney.getId() );
+		Soldier soldier = (Soldier) troop.getSoldiers().iterator().next();
+		tx.commit();
+		s.close();
+		//troop.getSoldiers().remove(soldier);
+		troop.getSoldiers().clear();
+		s = openSession();
+		tx = s.beginTransaction();
+		s.merge( troop );
+		tx.commit();
+		s.close();
+		s = openSession();
+		tx = s.beginTransaction();
+		soldier = (Soldier) s.get( Soldier.class, mickey.getId() );
+		assertNull( "delete-orphan should work", soldier );
+		troop = (Troop) s.get( Troop.class, disney.getId() );
+		s.delete( troop );
+		tx.commit();
+		s.close();
+	}
+
+	public void testCascadeDelete() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		Troop disney = new Troop();
+		disney.setName( "Disney" );
+		Soldier mickey = new Soldier();
+		mickey.setName( "Mickey" );
+		disney.addSoldier( mickey );
+		s.persist( disney );
+		tx.commit();
+		s.close();
+		s = openSession();
+		tx = s.beginTransaction();
+		Troop troop = (Troop) s.get( Troop.class, disney.getId() );
+		s.delete( troop );
+		tx.commit();
+		s.close();
+		s = openSession();
+		tx = s.beginTransaction();
+		Soldier soldier = (Soldier) s.get( Soldier.class, mickey.getId() );
+		assertNull( "delete-orphan should work", soldier );
+		tx.commit();
+		s.close();
+	}
+
+	public void testSimpleOneToManySet() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		Ticket t = new Ticket();
+		t.setNumber( "33A" );
+		Ticket t2 = new Ticket();
+		t2.setNumber( "234ER" );
+		Customer c = new Customer();
+		s.persist( c );
+		//s.persist(t);
+		SortedSet<Ticket> tickets = new TreeSet<Ticket>( new TicketComparator() );
+		tickets.add( t );
+		tickets.add( t2 );
+		c.setTickets( tickets );
+
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		c = (Customer) s.load( Customer.class, c.getId() );
+		assertNotNull( c );
+		assertTrue( Hibernate.isInitialized( c.getTickets() ) );
+		assertNotNull( c.getTickets() );
+		tickets = c.getTickets();
+		assertTrue( tickets.size() > 0 );
+		assertEquals( t2.getNumber(), c.getTickets().first().getNumber() );
+		tx.commit();
+		s.close();
+	}
+
+	public void testSimpleOneToManyCollection() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		Discount d = new Discount();
+		d.setDiscount( 10 );
+		Customer c = new Customer();
+		List discounts = new ArrayList();
+		discounts.add( d );
+		d.setOwner( c );
+		c.setDiscountTickets( discounts );
+		s.persist( c );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		c = (Customer) s.load( Customer.class, c.getId() );
+		assertNotNull( c );
+		assertFalse( Hibernate.isInitialized( c.getDiscountTickets() ) );
+		assertNotNull( c.getDiscountTickets() );
+		Collection collecDiscount = c.getDiscountTickets();
+		assertTrue( collecDiscount.size() > 0 );
+		tx.commit();
+		s.close();
+	}
+
+	public void testJoinColumns() throws Exception {
+		Parent parent = new Parent();
+		ParentPk pk = new ParentPk();
+		pk.firstName = "Bruce";
+		pk.lastName = "Willis";
+		pk.isMale = true;
+		parent.id = pk;
+		parent.age = 40;
+		Child child = new Child();
+		Child child2 = new Child();
+		parent.addChild( child );
+		parent.addChild( child2 );
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		s.persist( parent );
+		tx.commit();
+		s.close();
+
+		assertNotNull( child.id );
+		assertNotNull( child2.id );
+		assertNotSame( child.id, child2.id );
+
+		s = openSession();
+		tx = s.beginTransaction();
+		parent = (Parent) s.get( Parent.class, pk );
+		assertNotNull( parent.children );
+		Hibernate.initialize( parent.children );
+		assertEquals( 2, parent.children.size() );
+		tx.commit();
+		s.close();
+	}
+
+	public void testOrderByOnSuperclassProperty() {
+		OrganisationUser user = new OrganisationUser();
+		user.setFirstName( "Emmanuel" );
+		user.setLastName( "Bernard" );
+		user.setIdPerson( new Long(1) );
+		user.setSomeText( "SomeText" );
+		Organisation org = new Organisation();
+		org.setIdOrganisation( new Long(1) );
+		org.setName( "S Diego Zoo" );
+		user.setOrganisation( org );
+		Session s = openSession();
+		s.getTransaction().begin();
+		s.persist( user );
+		s.persist( org );
+		s.flush();
+		s.clear();
+		List l = s.createQuery( "select org from Organisation org left join fetch org.organisationUsers" ).list();
+		s.getTransaction().rollback();
+		s.close();
+	}
+
+	/**
+	 * @see org.hibernate.test.annotations.TestCase#getMappings()
+	 */
+	protected Class[] getMappings() {
+		return new Class[]{
+				Troop.class,
+				Soldier.class,
+				Customer.class,
+				Ticket.class,
+				Discount.class,
+				Passport.class,
+				Parent.class,
+				Child.class,
+				Trainer.class,
+				Tiger.class,
+				Monkey.class,
+				City.class,
+				Street.class,
+				PoliticalParty.class,
+				Politician.class,
+				Person.class,
+				Organisation.class,
+				OrganisationUser.class
+		};
+	}
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Organisation.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Organisation.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Organisation.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,60 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.onetomany;
-
-import java.io.Serializable;
-import java.util.Set;
-import javax.persistence.Entity;
-import javax.persistence.Table;
-import javax.persistence.Column;
-import javax.persistence.Id;
-import javax.persistence.OneToMany;
-import javax.persistence.OrderBy;
-import javax.persistence.CascadeType;
-import javax.persistence.FetchType;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Table( name = "ORGANISATION" )
-public class Organisation implements Serializable {
-
-	private Long idOrganisation;
-	private String name;
-	private Set<OrganisationUser> organisationUsers;
-
-	public Organisation() {
-	}
-
-	public void setIdOrganisation(Long idOrganisation) {
-		this.idOrganisation = idOrganisation;
-	}
-
-	@Id
-	@Column( name = "id_organisation", nullable = false )
-	public Long getIdOrganisation() {
-		return idOrganisation;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	@Column( name = "name", nullable = false, length = 40 )
-	public String getName() {
-		return name;
-	}
-
-	public void setOrganisationUsers(Set<OrganisationUser> organisationUsers) {
-		this.organisationUsers = organisationUsers;
-	}
-
-	@OneToMany( mappedBy = "organisation",
-			fetch = FetchType.LAZY,
-			cascade = {CascadeType.PERSIST, CascadeType.MERGE} )
-	@OrderBy( value = "firstName" )
-	public Set<OrganisationUser> getOrganisationUsers() {
-		return organisationUsers;
-	}
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Organisation.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Organisation.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Organisation.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Organisation.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,60 @@
+//$Id: $
+package org.hibernate.test.annotations.onetomany;
+
+import java.io.Serializable;
+import java.util.Set;
+import javax.persistence.Entity;
+import javax.persistence.Table;
+import javax.persistence.Column;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+import javax.persistence.OrderBy;
+import javax.persistence.CascadeType;
+import javax.persistence.FetchType;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Table( name = "ORGANISATION" )
+public class Organisation implements Serializable {
+
+	private Long idOrganisation;
+	private String name;
+	private Set<OrganisationUser> organisationUsers;
+
+	public Organisation() {
+	}
+
+	public void setIdOrganisation(Long idOrganisation) {
+		this.idOrganisation = idOrganisation;
+	}
+
+	@Id
+	@Column( name = "id_organisation", nullable = false )
+	public Long getIdOrganisation() {
+		return idOrganisation;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	@Column( name = "name", nullable = false, length = 40 )
+	public String getName() {
+		return name;
+	}
+
+	public void setOrganisationUsers(Set<OrganisationUser> organisationUsers) {
+		this.organisationUsers = organisationUsers;
+	}
+
+	@OneToMany( mappedBy = "organisation",
+			fetch = FetchType.LAZY,
+			cascade = {CascadeType.PERSIST, CascadeType.MERGE} )
+	@OrderBy( value = "firstName" )
+	public Set<OrganisationUser> getOrganisationUsers() {
+		return organisationUsers;
+	}
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/OrganisationUser.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/OrganisationUser.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/OrganisationUser.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,46 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.onetomany;
-
-import java.io.Serializable;
-import javax.persistence.CascadeType;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-import javax.persistence.PrimaryKeyJoinColumn;
-import javax.persistence.Table;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at PrimaryKeyJoinColumn( name = "id_organisation_user" )
- at Table( name = "ORGANISATION_USER" )
-public class OrganisationUser extends Person implements Serializable {
-
-	private String someText;
-	private Organisation organisation;
-
-	public OrganisationUser() {
-	}
-
-	public void setSomeText(String someText) {
-		this.someText = someText;
-	}
-
-	@Column( name = "some_text", nullable=true,length=1024)
-	public String getSomeText() {
-		return someText;
-	}
-
-	public void setOrganisation(Organisation organisation) {
-		this.organisation = organisation;
-	}
-
-	@ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE} )
-	@JoinColumn( name = "fk_id_organisation", nullable = false )
-	public Organisation getOrganisation() {
-		return organisation;
-	}
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/OrganisationUser.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/OrganisationUser.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/OrganisationUser.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/OrganisationUser.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,46 @@
+//$Id: $
+package org.hibernate.test.annotations.onetomany;
+
+import java.io.Serializable;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.PrimaryKeyJoinColumn;
+import javax.persistence.Table;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at PrimaryKeyJoinColumn( name = "id_organisation_user" )
+ at Table( name = "ORGANISATION_USER" )
+public class OrganisationUser extends Person implements Serializable {
+
+	private String someText;
+	private Organisation organisation;
+
+	public OrganisationUser() {
+	}
+
+	public void setSomeText(String someText) {
+		this.someText = someText;
+	}
+
+	@Column( name = "some_text", nullable=true,length=1024)
+	public String getSomeText() {
+		return someText;
+	}
+
+	public void setOrganisation(Organisation organisation) {
+		this.organisation = organisation;
+	}
+
+	@ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE} )
+	@JoinColumn( name = "fk_id_organisation", nullable = false )
+	public Organisation getOrganisation() {
+		return organisation;
+	}
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Parent.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Parent.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Parent.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,50 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.onetomany;
-
-import java.io.Serializable;
-import java.util.HashSet;
-import java.util.Set;
-import javax.persistence.CascadeType;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.OneToMany;
-
-import org.hibernate.annotations.BatchSize;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Parent implements Serializable {
-	@Id
-	public ParentPk id;
-	public int age;
-
-	@OneToMany(cascade = CascadeType.ALL, mappedBy = "parent")
-	@BatchSize(size = 5)
-	@javax.persistence.OrderBy("favoriteSuperhero asc, favoriteSinger desc")
-	public Set<Child> children;
-
-	public int hashCode() {
-		//a NPE can occurs, but I don't expect hashcode to be used before pk is set
-		return id.hashCode();
-	}
-
-	public boolean equals(Object obj) {
-		//a NPE can occurs, but I don't expect equals to be used before pk is set
-		if ( obj != null && obj instanceof Parent ) {
-			return id.equals( ( (Parent) obj ).id );
-		}
-		else {
-			return false;
-		}
-	}
-
-	public void addChild(Child child) {
-		if ( children == null ) {
-			children = new HashSet();
-		}
-		child.parent = this;
-		children.add( child );
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Parent.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Parent.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Parent.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Parent.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,50 @@
+//$Id$
+package org.hibernate.test.annotations.onetomany;
+
+import java.io.Serializable;
+import java.util.HashSet;
+import java.util.Set;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+
+import org.hibernate.annotations.BatchSize;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Parent implements Serializable {
+	@Id
+	public ParentPk id;
+	public int age;
+
+	@OneToMany(cascade = CascadeType.ALL, mappedBy = "parent")
+	@BatchSize(size = 5)
+	@javax.persistence.OrderBy("favoriteSuperhero asc, favoriteSinger desc")
+	public Set<Child> children;
+
+	public int hashCode() {
+		//a NPE can occurs, but I don't expect hashcode to be used before pk is set
+		return id.hashCode();
+	}
+
+	public boolean equals(Object obj) {
+		//a NPE can occurs, but I don't expect equals to be used before pk is set
+		if ( obj != null && obj instanceof Parent ) {
+			return id.equals( ( (Parent) obj ).id );
+		}
+		else {
+			return false;
+		}
+	}
+
+	public void addChild(Child child) {
+		if ( children == null ) {
+			children = new HashSet();
+		}
+		child.parent = this;
+		children.add( child );
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/ParentPk.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/ParentPk.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/ParentPk.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,38 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.onetomany;
-
-import java.io.Serializable;
-import javax.persistence.Embeddable;
-
-/**
- * @author Emmanuel Bernard
- */
- at Embeddable
-public class ParentPk implements Serializable {
-	String firstName;
-	String lastName;
-
-	/**
-	 * is a male or a female
-	 */
-	//show hetereogenous PK types
-	boolean isMale;
-
-	public int hashCode() {
-		//this implem sucks
-		return firstName.hashCode() + lastName.hashCode() + ( isMale ? 0 : 1 );
-	}
-
-	public boolean equals(Object obj) {
-		//firstName and lastName are expected to be set in this implem
-		if ( obj != null && obj instanceof ParentPk ) {
-			ParentPk other = (ParentPk) obj;
-			return firstName.equals( other.firstName )
-					&& lastName.equals( other.lastName )
-					&& isMale == other.isMale;
-		}
-		else {
-			return false;
-		}
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/ParentPk.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/ParentPk.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/ParentPk.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/ParentPk.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,38 @@
+//$Id$
+package org.hibernate.test.annotations.onetomany;
+
+import java.io.Serializable;
+import javax.persistence.Embeddable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Embeddable
+public class ParentPk implements Serializable {
+	String firstName;
+	String lastName;
+
+	/**
+	 * is a male or a female
+	 */
+	//show hetereogenous PK types
+	boolean isMale;
+
+	public int hashCode() {
+		//this implem sucks
+		return firstName.hashCode() + lastName.hashCode() + ( isMale ? 0 : 1 );
+	}
+
+	public boolean equals(Object obj) {
+		//firstName and lastName are expected to be set in this implem
+		if ( obj != null && obj instanceof ParentPk ) {
+			ParentPk other = (ParentPk) obj;
+			return firstName.equals( other.firstName )
+					&& lastName.equals( other.lastName )
+					&& isMale == other.isMale;
+		}
+		else {
+			return false;
+		}
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Person.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Person.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Person.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,55 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.onetomany;
-
-import java.io.Serializable;
-import javax.persistence.Column;
-import javax.persistence.Id;
-import javax.persistence.Entity;
-import javax.persistence.Table;
-import javax.persistence.InheritanceType;
-import javax.persistence.Inheritance;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Inheritance( strategy = InheritanceType.JOINED )
- at Table( name = "PERSON_Orderby" )
-public class Person implements Serializable {
-
-	private Long idPerson;
-	private String firstName, lastName;
-
-	public Person() {
-	}
-
-	public void setIdPerson(Long idPerson) {
-		this.idPerson = idPerson;
-	}
-
-	@Id
-	@Column( name = "id_person", nullable = false )
-	public Long getIdPerson() {
-		return idPerson;
-	}
-
-	public void setFirstName(String firstName) {
-		this.firstName = firstName;
-	}
-
-	@Column( name = "first_name", length = 40, nullable = false )
-	public String getFirstName() {
-		return firstName;
-	}
-
-	public void setLastName(String lastName) {
-		this.lastName = lastName;
-	}
-
-	@Column( name = "last_name", length = 40, nullable = false )
-	public String getLastName() {
-		return lastName;
-	}
-
-}
-

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Person.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Person.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Person.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Person.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,55 @@
+//$Id: $
+package org.hibernate.test.annotations.onetomany;
+
+import java.io.Serializable;
+import javax.persistence.Column;
+import javax.persistence.Id;
+import javax.persistence.Entity;
+import javax.persistence.Table;
+import javax.persistence.InheritanceType;
+import javax.persistence.Inheritance;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Inheritance( strategy = InheritanceType.JOINED )
+ at Table( name = "PERSON_Orderby" )
+public class Person implements Serializable {
+
+	private Long idPerson;
+	private String firstName, lastName;
+
+	public Person() {
+	}
+
+	public void setIdPerson(Long idPerson) {
+		this.idPerson = idPerson;
+	}
+
+	@Id
+	@Column( name = "id_person", nullable = false )
+	public Long getIdPerson() {
+		return idPerson;
+	}
+
+	public void setFirstName(String firstName) {
+		this.firstName = firstName;
+	}
+
+	@Column( name = "first_name", length = 40, nullable = false )
+	public String getFirstName() {
+		return firstName;
+	}
+
+	public void setLastName(String lastName) {
+		this.lastName = lastName;
+	}
+
+	@Column( name = "last_name", length = 40, nullable = false )
+	public String getLastName() {
+		return lastName;
+	}
+
+}
+

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/PoliticalParty.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/PoliticalParty.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/PoliticalParty.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,43 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.onetomany;
-
-import java.util.HashSet;
-import java.util.Set;
-import javax.persistence.CascadeType;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.OneToMany;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class PoliticalParty {
-	private String name;
-	private Set<Politician> politicians = new HashSet<Politician>();
-
-	@Id
-	@Column(columnDefinition = "VARCHAR(60)")
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	@OneToMany(mappedBy = "party", cascade = CascadeType.ALL)
-	public Set<Politician> getPoliticians() {
-		return politicians;
-	}
-
-	public void setPoliticians(Set<Politician> politicians) {
-		this.politicians = politicians;
-	}
-
-	public void addPolitician(Politician politician) {
-		politicians.add( politician );
-		politician.setParty( this );
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/PoliticalParty.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/PoliticalParty.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/PoliticalParty.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/PoliticalParty.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,43 @@
+//$Id$
+package org.hibernate.test.annotations.onetomany;
+
+import java.util.HashSet;
+import java.util.Set;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class PoliticalParty {
+	private String name;
+	private Set<Politician> politicians = new HashSet<Politician>();
+
+	@Id
+	@Column(columnDefinition = "VARCHAR(60)")
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	@OneToMany(mappedBy = "party", cascade = CascadeType.ALL)
+	public Set<Politician> getPoliticians() {
+		return politicians;
+	}
+
+	public void setPoliticians(Set<Politician> politicians) {
+		this.politicians = politicians;
+	}
+
+	public void addPolitician(Politician politician) {
+		politicians.add( politician );
+		politician.setParty( this );
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Politician.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Politician.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Politician.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,37 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.onetomany;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Politician {
-	private String name;
-	private PoliticalParty party;
-
-	@Id
-	@Column(columnDefinition = "VARCHAR(30)")
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	@ManyToOne
-	@JoinColumn(name = "party_fk")
-	public PoliticalParty getParty() {
-		return party;
-	}
-
-	public void setParty(PoliticalParty party) {
-		this.party = party;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Politician.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Politician.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Politician.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Politician.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,37 @@
+//$Id$
+package org.hibernate.test.annotations.onetomany;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Politician {
+	private String name;
+	private PoliticalParty party;
+
+	@Id
+	@Column(columnDefinition = "VARCHAR(30)")
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	@ManyToOne
+	@JoinColumn(name = "party_fk")
+	public PoliticalParty getParty() {
+		return party;
+	}
+
+	public void setParty(PoliticalParty party) {
+		this.party = party;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Soldier.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Soldier.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Soldier.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,62 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.onetomany;
-
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Soldier {
-	private Integer id;
-	private String name;
-	private Troop troop;
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	@ManyToOne(fetch = FetchType.EAGER)
-	@JoinColumn(name = "troop_fk")
-	public Troop getTroop() {
-		return troop;
-	}
-
-	public void setTroop(Troop troop) {
-		this.troop = troop;
-	}
-
-	public boolean equals(Object o) {
-		if ( this == o ) return true;
-		if ( !( o instanceof Soldier ) ) return false;
-
-		final Soldier soldier = (Soldier) o;
-
-		if ( !name.equals( soldier.name ) ) return false;
-
-		return true;
-	}
-
-	public int hashCode() {
-		return name.hashCode();
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Soldier.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Soldier.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Soldier.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Soldier.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,62 @@
+//$Id$
+package org.hibernate.test.annotations.onetomany;
+
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Soldier {
+	private Integer id;
+	private String name;
+	private Troop troop;
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	@ManyToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name = "troop_fk")
+	public Troop getTroop() {
+		return troop;
+	}
+
+	public void setTroop(Troop troop) {
+		this.troop = troop;
+	}
+
+	public boolean equals(Object o) {
+		if ( this == o ) return true;
+		if ( !( o instanceof Soldier ) ) return false;
+
+		final Soldier soldier = (Soldier) o;
+
+		if ( !name.equals( soldier.name ) ) return false;
+
+		return true;
+	}
+
+	public int hashCode() {
+		return name.hashCode();
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Street.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Street.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Street.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,58 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.onetomany;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.ManyToOne;
-import javax.persistence.Column;
-
-import org.hibernate.annotations.Formula;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Street {
-	private Integer id;
-	private String streetName;
-	private String streetNameCopy;
-	private City city;
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	@Column(name="STREET_NAME")
-	public String getStreetName() {
-		return streetName;
-	}
-
-	public void setStreetName(String streetName) {
-		this.streetName = streetName;
-	}
-
-	@Formula("STREET_NAME")
-	public String getStreetNameCopy() {
-		return streetNameCopy;
-	}
-
-	public void setStreetNameCopy(String streetNameCopy) {
-		this.streetNameCopy = streetNameCopy;
-	}
-
-	@ManyToOne
-	public City getCity() {
-		return city;
-	}
-
-	public void setCity(City city) {
-		this.city = city;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Street.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Street.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Street.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Street.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,58 @@
+//$Id$
+package org.hibernate.test.annotations.onetomany;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+import javax.persistence.Column;
+
+import org.hibernate.annotations.Formula;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Street {
+	private Integer id;
+	private String streetName;
+	private String streetNameCopy;
+	private City city;
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	@Column(name="STREET_NAME")
+	public String getStreetName() {
+		return streetName;
+	}
+
+	public void setStreetName(String streetName) {
+		this.streetName = streetName;
+	}
+
+	@Formula("STREET_NAME")
+	public String getStreetNameCopy() {
+		return streetNameCopy;
+	}
+
+	public void setStreetNameCopy(String streetNameCopy) {
+		this.streetNameCopy = streetNameCopy;
+	}
+
+	@ManyToOne
+	public City getCity() {
+		return city;
+	}
+
+	public void setCity(City city) {
+		this.city = city;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Tiger.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Tiger.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Tiger.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,33 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.onetomany;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Tiger {
-	private Integer id;
-	private String name;
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Tiger.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Tiger.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Tiger.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Tiger.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,33 @@
+//$Id$
+package org.hibernate.test.annotations.onetomany;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Tiger {
+	private Integer id;
+	private String name;
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Trainer.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Trainer.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Trainer.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,67 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.onetomany;
-
-import java.util.Set;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.JoinTable;
-import javax.persistence.OneToMany;
-
-import org.hibernate.annotations.ForeignKey;
-
-/**
- * Unidirectional one to many sample
- *
- * @author Emmanuel Bernard
- */
- at Entity()
-public class Trainer {
-	private Integer id;
-	private String name;
-	private Set<Tiger> trainedTigers;
-	private Set<Monkey> trainedMonkeys;
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	@OneToMany
-	public Set<Tiger> getTrainedTigers() {
-		return trainedTigers;
-	}
-
-	public void setTrainedTigers(Set<Tiger> trainedTigers) {
-		this.trainedTigers = trainedTigers;
-	}
-
-	@OneToMany
-	@JoinTable(
-			name = "TrainedMonkeys",
-			joinColumns = {@JoinColumn(name = "trainer_id")},
-			inverseJoinColumns = @JoinColumn(name = "monkey_id")
-	)
-	@ForeignKey(name = "TM_TRA_FK", inverseName = "TM_MON_FK")
-	public Set<Monkey> getTrainedMonkeys() {
-		return trainedMonkeys;
-	}
-
-	public void setTrainedMonkeys(Set<Monkey> trainedMonkeys) {
-		this.trainedMonkeys = trainedMonkeys;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Trainer.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Trainer.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Trainer.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Trainer.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,67 @@
+//$Id$
+package org.hibernate.test.annotations.onetomany;
+
+import java.util.Set;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
+import javax.persistence.OneToMany;
+
+import org.hibernate.annotations.ForeignKey;
+
+/**
+ * Unidirectional one to many sample
+ *
+ * @author Emmanuel Bernard
+ */
+ at Entity()
+public class Trainer {
+	private Integer id;
+	private String name;
+	private Set<Tiger> trainedTigers;
+	private Set<Monkey> trainedMonkeys;
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	@OneToMany
+	public Set<Tiger> getTrainedTigers() {
+		return trainedTigers;
+	}
+
+	public void setTrainedTigers(Set<Tiger> trainedTigers) {
+		this.trainedTigers = trainedTigers;
+	}
+
+	@OneToMany
+	@JoinTable(
+			name = "TrainedMonkeys",
+			joinColumns = {@JoinColumn(name = "trainer_id")},
+			inverseJoinColumns = @JoinColumn(name = "monkey_id")
+	)
+	@ForeignKey(name = "TM_TRA_FK", inverseName = "TM_MON_FK")
+	public Set<Monkey> getTrainedMonkeys() {
+		return trainedMonkeys;
+	}
+
+	public void setTrainedMonkeys(Set<Monkey> trainedMonkeys) {
+		this.trainedMonkeys = trainedMonkeys;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Troop.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Troop.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Troop.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,64 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.onetomany;
-
-import java.util.HashSet;
-import java.util.Set;
-import javax.persistence.CascadeType;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.OneToMany;
-
-import org.hibernate.annotations.OnDelete;
-import org.hibernate.annotations.OnDeleteAction;
-import org.hibernate.annotations.OrderBy;
-
-/**
- * Shows a default one to many
- *
- * @author Emmanuel Bernard
- */
- at Entity
-public class Troop {
-	private Integer id;
-	private String name;
-	private Set<Soldier> soldiers;
-
-	@OneToMany(mappedBy = "troop", cascade = {CascadeType.ALL}, fetch = FetchType.LAZY)
-	@OrderBy(clause = "name desc")
-	@org.hibernate.annotations.Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
-	@OnDelete(action = OnDeleteAction.CASCADE)
-	public Set<Soldier> getSoldiers() {
-		return soldiers;
-	}
-
-	public void setSoldiers(Set<Soldier> soldiers) {
-		this.soldiers = soldiers;
-	}
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	public void addSoldier(Soldier s) {
-		if ( soldiers == null ) soldiers = new HashSet<Soldier>();
-		soldiers.add( s );
-		s.setTroop( this );
-	}
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Troop.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Troop.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Troop.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetomany/Troop.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,64 @@
+//$Id$
+package org.hibernate.test.annotations.onetomany;
+
+import java.util.HashSet;
+import java.util.Set;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+
+import org.hibernate.annotations.OnDelete;
+import org.hibernate.annotations.OnDeleteAction;
+import org.hibernate.annotations.OrderBy;
+
+/**
+ * Shows a default one to many
+ *
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Troop {
+	private Integer id;
+	private String name;
+	private Set<Soldier> soldiers;
+
+	@OneToMany(mappedBy = "troop", cascade = {CascadeType.ALL}, fetch = FetchType.LAZY)
+	@OrderBy(clause = "name desc")
+	@org.hibernate.annotations.Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
+	@OnDelete(action = OnDeleteAction.CASCADE)
+	public Set<Soldier> getSoldiers() {
+		return soldiers;
+	}
+
+	public void setSoldiers(Set<Soldier> soldiers) {
+		this.soldiers = soldiers;
+	}
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public void addSoldier(Soldier s) {
+		if ( soldiers == null ) soldiers = new HashSet<Soldier>();
+		soldiers.add( s );
+		s.setTroop( this );
+	}
+
+}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone)

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Address.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Address.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Address.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,34 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.onetoone;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Address {
-
-	private Integer id;
-	private String city;
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getCity() {
-		return city;
-	}
-
-	public void setCity(String city) {
-		this.city = city;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Address.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Address.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Address.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Address.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,34 @@
+//$Id$
+package org.hibernate.test.annotations.onetoone;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Address {
+
+	private Integer id;
+	private String city;
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getCity() {
+		return city;
+	}
+
+	public void setCity(String city) {
+		this.city = city;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Body.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Body.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Body.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,35 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.onetoone;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.OneToOne;
-import javax.persistence.PrimaryKeyJoinColumn;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Body {
-	private Integer id;
-	private Heart heart;
-
-	@OneToOne
-	@PrimaryKeyJoinColumn
-	public Heart getHeart() {
-		return heart;
-	}
-
-	public void setHeart(Heart heart) {
-		this.heart = heart;
-	}
-
-	@Id
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Body.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Body.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Body.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Body.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,35 @@
+//$Id$
+package org.hibernate.test.annotations.onetoone;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.OneToOne;
+import javax.persistence.PrimaryKeyJoinColumn;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Body {
+	private Integer id;
+	private Heart heart;
+
+	@OneToOne
+	@PrimaryKeyJoinColumn
+	public Heart getHeart() {
+		return heart;
+	}
+
+	public void setHeart(Heart heart) {
+		this.heart = heart;
+	}
+
+	@Id
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Client.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Client.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Client.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,49 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.onetoone;
-
-import javax.persistence.CascadeType;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.OneToOne;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Client {
-
-	private Integer id;
-	private String name;
-	private Address address;
-
-	@OneToOne(cascade = CascadeType.ALL)
-	@JoinColumn(name = "ADDRESS_ID")
-	public Address getAddress() {
-		return address;
-	}
-
-	public void setAddress(Address address) {
-		this.address = address;
-	}
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Client.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Client.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Client.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Client.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,49 @@
+//$Id$
+package org.hibernate.test.annotations.onetoone;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.OneToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Client {
+
+	private Integer id;
+	private String name;
+	private Address address;
+
+	@OneToOne(cascade = CascadeType.ALL)
+	@JoinColumn(name = "ADDRESS_ID")
+	public Address getAddress() {
+		return address;
+	}
+
+	public void setAddress(Address address) {
+		this.address = address;
+	}
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Computer.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Computer.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Computer.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,73 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.onetoone;
-
-import javax.persistence.AttributeOverride;
-import javax.persistence.AttributeOverrides;
-import javax.persistence.CascadeType;
-import javax.persistence.Column;
-import javax.persistence.EmbeddedId;
-import javax.persistence.Entity;
-import javax.persistence.JoinColumn;
-import javax.persistence.JoinColumns;
-import javax.persistence.OneToOne;
-
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Computer {
-
-	private ComputerPk id;
-	private String cpu;
-	private SerialNumber serial;
-
-	@OneToOne(cascade = {CascadeType.PERSIST})
-	@JoinColumns({
-	@JoinColumn(name = "serialbrand", referencedColumnName = "brand"),
-	@JoinColumn(name = "serialmodel", referencedColumnName = "model")
-			})
-	public SerialNumber getSerial() {
-		return serial;
-	}
-
-	public void setSerial(SerialNumber serial) {
-		this.serial = serial;
-	}
-
-	public boolean equals(Object o) {
-		if ( this == o ) return true;
-		if ( !( o instanceof Computer ) ) return false;
-
-		final Computer computer = (Computer) o;
-
-		if ( !id.equals( computer.id ) ) return false;
-
-		return true;
-	}
-
-	public int hashCode() {
-		return id.hashCode();
-	}
-
-	@EmbeddedId
-	@AttributeOverrides({
-	@AttributeOverride(name = "brand", column = @Column(name = "computer_brand")),
-	@AttributeOverride(name = "model", column = @Column(name = "computer_model"))
-			})
-	public ComputerPk getId() {
-		return id;
-	}
-
-	public void setId(ComputerPk id) {
-		this.id = id;
-	}
-
-	public String getCpu() {
-		return cpu;
-	}
-
-	public void setCpu(String cpu) {
-		this.cpu = cpu;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Computer.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Computer.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Computer.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Computer.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,73 @@
+//$Id$
+package org.hibernate.test.annotations.onetoone;
+
+import javax.persistence.AttributeOverride;
+import javax.persistence.AttributeOverrides;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.EmbeddedId;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinColumns;
+import javax.persistence.OneToOne;
+
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Computer {
+
+	private ComputerPk id;
+	private String cpu;
+	private SerialNumber serial;
+
+	@OneToOne(cascade = {CascadeType.PERSIST})
+	@JoinColumns({
+	@JoinColumn(name = "serialbrand", referencedColumnName = "brand"),
+	@JoinColumn(name = "serialmodel", referencedColumnName = "model")
+			})
+	public SerialNumber getSerial() {
+		return serial;
+	}
+
+	public void setSerial(SerialNumber serial) {
+		this.serial = serial;
+	}
+
+	public boolean equals(Object o) {
+		if ( this == o ) return true;
+		if ( !( o instanceof Computer ) ) return false;
+
+		final Computer computer = (Computer) o;
+
+		if ( !id.equals( computer.id ) ) return false;
+
+		return true;
+	}
+
+	public int hashCode() {
+		return id.hashCode();
+	}
+
+	@EmbeddedId
+	@AttributeOverrides({
+	@AttributeOverride(name = "brand", column = @Column(name = "computer_brand")),
+	@AttributeOverride(name = "model", column = @Column(name = "computer_model"))
+			})
+	public ComputerPk getId() {
+		return id;
+	}
+
+	public void setId(ComputerPk id) {
+		this.id = id;
+	}
+
+	public String getCpu() {
+		return cpu;
+	}
+
+	public void setCpu(String cpu) {
+		this.cpu = cpu;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/ComputerPk.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/ComputerPk.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/ComputerPk.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,49 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.onetoone;
-
-import java.io.Serializable;
-import javax.persistence.Embeddable;
-
-/**
- * @author Emmanuel Bernard
- */
- at Embeddable
-public class ComputerPk implements Serializable {
-	private String brand;
-	private String model;
-
-	public boolean equals(Object o) {
-		if ( this == o ) return true;
-		if ( !( o instanceof ComputerPk ) ) return false;
-
-		final ComputerPk computerPk = (ComputerPk) o;
-
-		if ( !brand.equals( computerPk.brand ) ) return false;
-		if ( !model.equals( computerPk.model ) ) return false;
-
-		return true;
-	}
-
-	public int hashCode() {
-		int result;
-		result = brand.hashCode();
-		result = 29 * result + model.hashCode();
-		return result;
-	}
-
-	public String getBrand() {
-		return brand;
-	}
-
-	public void setBrand(String brand) {
-		this.brand = brand;
-	}
-
-	public String getModel() {
-		return model;
-	}
-
-	public void setModel(String model) {
-		this.model = model;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/ComputerPk.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/ComputerPk.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/ComputerPk.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/ComputerPk.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,49 @@
+//$Id$
+package org.hibernate.test.annotations.onetoone;
+
+import java.io.Serializable;
+import javax.persistence.Embeddable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Embeddable
+public class ComputerPk implements Serializable {
+	private String brand;
+	private String model;
+
+	public boolean equals(Object o) {
+		if ( this == o ) return true;
+		if ( !( o instanceof ComputerPk ) ) return false;
+
+		final ComputerPk computerPk = (ComputerPk) o;
+
+		if ( !brand.equals( computerPk.brand ) ) return false;
+		if ( !model.equals( computerPk.model ) ) return false;
+
+		return true;
+	}
+
+	public int hashCode() {
+		int result;
+		result = brand.hashCode();
+		result = 29 * result + model.hashCode();
+		return result;
+	}
+
+	public String getBrand() {
+		return brand;
+	}
+
+	public void setBrand(String brand) {
+		this.brand = brand;
+	}
+
+	public String getModel() {
+		return model;
+	}
+
+	public void setModel(String model) {
+		this.model = model;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Heart.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Heart.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Heart.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,22 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.onetoone;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Heart {
-	private Integer id;
-
-	@Id
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Heart.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Heart.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Heart.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Heart.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,22 @@
+//$Id$
+package org.hibernate.test.annotations.onetoone;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Heart {
+	private Integer id;
+
+	@Id
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/OneToOneTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/OneToOneTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/OneToOneTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,268 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.onetoone;
-
-import org.hibernate.Query;
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-import org.hibernate.test.annotations.Customer;
-import org.hibernate.test.annotations.Discount;
-import org.hibernate.test.annotations.Passport;
-import org.hibernate.test.annotations.TestCase;
-import org.hibernate.test.annotations.Ticket;
-
-/**
- * @author Emmanuel Bernard
- */
-public class OneToOneTest extends TestCase {
-
-	public OneToOneTest(String x) {
-		super( x );
-	}
-
-	public void testEagerFetching() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		Client c = new Client();
-		c.setName( "Emmanuel" );
-		Address a = new Address();
-		a.setCity( "Courbevoie" );
-		c.setAddress( a );
-		s.persist( c );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		Query q = s.createQuery( "select c from Client c where c.name = :name" );
-		q.setString( "name", c.getName() );
-		c = (Client) q.uniqueResult();
-		//c = (Client) s.get(Client.class, c.getId());
-		assertNotNull( c );
-		tx.commit();
-		s.close();
-		assertNotNull( c.getAddress() );
-		//assertTrue( "Should be eager fetched", Hibernate.isInitialized( c.getAddress() ) );
-
-	}
-
-	public void testDefaultOneToOne() throws Exception {
-		//test a default one to one and a mappedBy in the other side
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		Customer c = new Customer();
-		c.setName( "Hibernatus" );
-		Passport p = new Passport();
-		p.setNumber( "123456789" );
-		s.persist( c ); //we need the id to assigned it to passport
-		c.setPassport( p );
-		p.setOwner( c );
-		p.setId( c.getId() );
-		tx.commit();
-		s.close();
-		s = openSession();
-		tx = s.beginTransaction();
-		c = (Customer) s.get( Customer.class, c.getId() );
-		assertNotNull( c );
-		p = c.getPassport();
-		assertNotNull( p );
-		assertEquals( "123456789", p.getNumber() );
-		assertNotNull( p.getOwner() );
-		assertEquals( "Hibernatus", p.getOwner().getName() );
-		tx.commit(); // commit or rollback is the same, we don't care for read queries
-		s.close();
-	}
-
-	public void testOneToOneWithExplicitFk() throws Exception {
-		Client c = new Client();
-		Address a = new Address();
-		a.setCity( "Paris" );
-		c.setName( "Emmanuel" );
-		c.setAddress( a );
-
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		s.persist( c );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		c = (Client) s.get( Client.class, c.getId() );
-		assertNotNull( c );
-		assertNotNull( c.getAddress() );
-		assertEquals( "Paris", c.getAddress().getCity() );
-		tx.commit();
-		s.close();
-	}
-
-	public void testUnidirectionalTrueOneToOne() throws Exception {
-		Body b = new Body();
-		Heart h = new Heart();
-		b.setHeart( h );
-		b.setId( new Integer( 1 ) );
-		h.setId( b.getId() ); //same PK
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		s.persist( h );
-		s.persist( b );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		b = (Body) s.get( Body.class, b.getId() );
-		assertNotNull( b );
-		assertNotNull( b.getHeart() );
-		assertEquals( h.getId(), b.getHeart().getId() );
-		tx.commit();
-		s.close();
-
-	}
-
-	public void testCompositePk() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		ComputerPk cid = new ComputerPk();
-		cid.setBrand( "IBM" );
-		cid.setModel( "ThinkPad" );
-		Computer c = new Computer();
-		c.setId( cid );
-		c.setCpu( "2 GHz" );
-		SerialNumberPk sid = new SerialNumberPk();
-		sid.setBrand( cid.getBrand() );
-		sid.setModel( cid.getModel() );
-		SerialNumber sn = new SerialNumber();
-		sn.setId( sid );
-		sn.setValue( "REZREZ23424" );
-		c.setSerial( sn );
-		s.persist( c );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		c = (Computer) s.get( Computer.class, cid );
-		assertNotNull( c );
-		assertNotNull( c.getSerial() );
-		assertEquals( sn.getValue(), c.getSerial().getValue() );
-		tx.commit();
-		s.close();
-	}
-
-	public void testBidirectionalTrueOneToOne() throws Exception {
-		Session s = openSession();
-		s.getTransaction().begin();
-		Party party = new Party();
-		PartyAffiliate affiliate = new PartyAffiliate();
-		affiliate.partyId = "id";
-		party.partyId = "id";
-		party.partyAffiliate = affiliate;
-		affiliate.party = party;
-		s.persist( party );
-		s.persist( affiliate );
-		s.getTransaction().commit();
-
-		s.clear();
-
-		Transaction tx = s.beginTransaction();
-		affiliate = (PartyAffiliate) s.get( PartyAffiliate.class, "id" );
-		assertNotNull( affiliate.party );
-		assertEquals( affiliate.partyId, affiliate.party.partyId );
-
-		s.clear();
-
-		party = (Party) s.get( Party.class, "id" );
-		assertNotNull( party.partyAffiliate );
-		assertEquals( party.partyId, party.partyAffiliate.partyId );
-
-		s.delete( party );
-		s.delete( party.partyAffiliate );
-		tx.commit();
-		s.close();
-	}
-
-	public void testBidirectionalFkOneToOne() throws Exception {
-		Session s = openSession();
-		s.getTransaction().begin();
-		Trousers trousers = new Trousers();
-		TrousersZip zip = new TrousersZip();
-		trousers.id = new Integer( 1 );
-		zip.id = new Integer( 2 );
-		trousers.zip = zip;
-		zip.trousers = trousers;
-		s.persist( trousers );
-		s.persist( zip );
-		s.getTransaction().commit();
-
-		s.clear();
-
-		Transaction tx = s.beginTransaction();
-		trousers = (Trousers) s.get( Trousers.class, trousers.id );
-		assertNotNull( trousers.zip );
-		assertEquals( zip.id, trousers.zip.id );
-
-		s.clear();
-
-		zip = (TrousersZip) s.get( TrousersZip.class, zip.id );
-		assertNotNull( zip.trousers );
-		assertEquals( trousers.id, zip.trousers.id );
-
-		s.delete( zip );
-		s.delete( zip.trousers );
-		tx.commit();
-		s.close();
-	}
-
-	public void testForeignGenerator() {
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		Owner owner = new Owner();
-		OwnerAddress address = new OwnerAddress();
-		owner.setAddress( address );
-		address.setOwner( owner );
-		s.persist( owner );
-		s.flush();
-		s.clear();
-		owner = (Owner) s.get( Owner.class, owner.getId() );
-		assertNotNull( owner );
-		assertNotNull( owner.getAddress() );
-		assertEquals( owner.getId(), owner.getAddress().getId() );
-		tx.rollback();
-		s.close();
-	}
-
-	/**
-	 * @see org.hibernate.test.annotations.TestCase#getMappings()
-	 */
-	protected Class[] getMappings() {
-		return new Class[]{
-				PartyAffiliate.class,
-				Party.class,
-				Trousers.class,
-				TrousersZip.class,
-				Customer.class,
-				Ticket.class,
-				Discount.class,
-				Passport.class,
-				Client.class,
-				Address.class,
-				Computer.class,
-				SerialNumber.class,
-				Body.class,
-				Heart.class,
-				Owner.class,
-				OwnerAddress.class
-		};
-	}
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/OneToOneTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/OneToOneTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/OneToOneTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/OneToOneTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,268 @@
+//$Id$
+package org.hibernate.test.annotations.onetoone;
+
+import org.hibernate.Query;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.Customer;
+import org.hibernate.test.annotations.Discount;
+import org.hibernate.test.annotations.Passport;
+import org.hibernate.test.annotations.TestCase;
+import org.hibernate.test.annotations.Ticket;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class OneToOneTest extends TestCase {
+
+	public OneToOneTest(String x) {
+		super( x );
+	}
+
+	public void testEagerFetching() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		Client c = new Client();
+		c.setName( "Emmanuel" );
+		Address a = new Address();
+		a.setCity( "Courbevoie" );
+		c.setAddress( a );
+		s.persist( c );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		Query q = s.createQuery( "select c from Client c where c.name = :name" );
+		q.setString( "name", c.getName() );
+		c = (Client) q.uniqueResult();
+		//c = (Client) s.get(Client.class, c.getId());
+		assertNotNull( c );
+		tx.commit();
+		s.close();
+		assertNotNull( c.getAddress() );
+		//assertTrue( "Should be eager fetched", Hibernate.isInitialized( c.getAddress() ) );
+
+	}
+
+	public void testDefaultOneToOne() throws Exception {
+		//test a default one to one and a mappedBy in the other side
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		Customer c = new Customer();
+		c.setName( "Hibernatus" );
+		Passport p = new Passport();
+		p.setNumber( "123456789" );
+		s.persist( c ); //we need the id to assigned it to passport
+		c.setPassport( p );
+		p.setOwner( c );
+		p.setId( c.getId() );
+		tx.commit();
+		s.close();
+		s = openSession();
+		tx = s.beginTransaction();
+		c = (Customer) s.get( Customer.class, c.getId() );
+		assertNotNull( c );
+		p = c.getPassport();
+		assertNotNull( p );
+		assertEquals( "123456789", p.getNumber() );
+		assertNotNull( p.getOwner() );
+		assertEquals( "Hibernatus", p.getOwner().getName() );
+		tx.commit(); // commit or rollback is the same, we don't care for read queries
+		s.close();
+	}
+
+	public void testOneToOneWithExplicitFk() throws Exception {
+		Client c = new Client();
+		Address a = new Address();
+		a.setCity( "Paris" );
+		c.setName( "Emmanuel" );
+		c.setAddress( a );
+
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		s.persist( c );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		c = (Client) s.get( Client.class, c.getId() );
+		assertNotNull( c );
+		assertNotNull( c.getAddress() );
+		assertEquals( "Paris", c.getAddress().getCity() );
+		tx.commit();
+		s.close();
+	}
+
+	public void testUnidirectionalTrueOneToOne() throws Exception {
+		Body b = new Body();
+		Heart h = new Heart();
+		b.setHeart( h );
+		b.setId( new Integer( 1 ) );
+		h.setId( b.getId() ); //same PK
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		s.persist( h );
+		s.persist( b );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		b = (Body) s.get( Body.class, b.getId() );
+		assertNotNull( b );
+		assertNotNull( b.getHeart() );
+		assertEquals( h.getId(), b.getHeart().getId() );
+		tx.commit();
+		s.close();
+
+	}
+
+	public void testCompositePk() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		ComputerPk cid = new ComputerPk();
+		cid.setBrand( "IBM" );
+		cid.setModel( "ThinkPad" );
+		Computer c = new Computer();
+		c.setId( cid );
+		c.setCpu( "2 GHz" );
+		SerialNumberPk sid = new SerialNumberPk();
+		sid.setBrand( cid.getBrand() );
+		sid.setModel( cid.getModel() );
+		SerialNumber sn = new SerialNumber();
+		sn.setId( sid );
+		sn.setValue( "REZREZ23424" );
+		c.setSerial( sn );
+		s.persist( c );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		c = (Computer) s.get( Computer.class, cid );
+		assertNotNull( c );
+		assertNotNull( c.getSerial() );
+		assertEquals( sn.getValue(), c.getSerial().getValue() );
+		tx.commit();
+		s.close();
+	}
+
+	public void testBidirectionalTrueOneToOne() throws Exception {
+		Session s = openSession();
+		s.getTransaction().begin();
+		Party party = new Party();
+		PartyAffiliate affiliate = new PartyAffiliate();
+		affiliate.partyId = "id";
+		party.partyId = "id";
+		party.partyAffiliate = affiliate;
+		affiliate.party = party;
+		s.persist( party );
+		s.persist( affiliate );
+		s.getTransaction().commit();
+
+		s.clear();
+
+		Transaction tx = s.beginTransaction();
+		affiliate = (PartyAffiliate) s.get( PartyAffiliate.class, "id" );
+		assertNotNull( affiliate.party );
+		assertEquals( affiliate.partyId, affiliate.party.partyId );
+
+		s.clear();
+
+		party = (Party) s.get( Party.class, "id" );
+		assertNotNull( party.partyAffiliate );
+		assertEquals( party.partyId, party.partyAffiliate.partyId );
+
+		s.delete( party );
+		s.delete( party.partyAffiliate );
+		tx.commit();
+		s.close();
+	}
+
+	public void testBidirectionalFkOneToOne() throws Exception {
+		Session s = openSession();
+		s.getTransaction().begin();
+		Trousers trousers = new Trousers();
+		TrousersZip zip = new TrousersZip();
+		trousers.id = new Integer( 1 );
+		zip.id = new Integer( 2 );
+		trousers.zip = zip;
+		zip.trousers = trousers;
+		s.persist( trousers );
+		s.persist( zip );
+		s.getTransaction().commit();
+
+		s.clear();
+
+		Transaction tx = s.beginTransaction();
+		trousers = (Trousers) s.get( Trousers.class, trousers.id );
+		assertNotNull( trousers.zip );
+		assertEquals( zip.id, trousers.zip.id );
+
+		s.clear();
+
+		zip = (TrousersZip) s.get( TrousersZip.class, zip.id );
+		assertNotNull( zip.trousers );
+		assertEquals( trousers.id, zip.trousers.id );
+
+		s.delete( zip );
+		s.delete( zip.trousers );
+		tx.commit();
+		s.close();
+	}
+
+	public void testForeignGenerator() {
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		Owner owner = new Owner();
+		OwnerAddress address = new OwnerAddress();
+		owner.setAddress( address );
+		address.setOwner( owner );
+		s.persist( owner );
+		s.flush();
+		s.clear();
+		owner = (Owner) s.get( Owner.class, owner.getId() );
+		assertNotNull( owner );
+		assertNotNull( owner.getAddress() );
+		assertEquals( owner.getId(), owner.getAddress().getId() );
+		tx.rollback();
+		s.close();
+	}
+
+	/**
+	 * @see org.hibernate.test.annotations.TestCase#getMappings()
+	 */
+	protected Class[] getMappings() {
+		return new Class[]{
+				PartyAffiliate.class,
+				Party.class,
+				Trousers.class,
+				TrousersZip.class,
+				Customer.class,
+				Ticket.class,
+				Discount.class,
+				Passport.class,
+				Client.class,
+				Address.class,
+				Computer.class,
+				SerialNumber.class,
+				Body.class,
+				Heart.class,
+				Owner.class,
+				OwnerAddress.class
+		};
+	}
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Owner.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Owner.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Owner.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,35 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.onetoone;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.GeneratedValue;
-import javax.persistence.OneToOne;
-import javax.persistence.PrimaryKeyJoinColumn;
-import javax.persistence.CascadeType;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Owner {
-	@Id @GeneratedValue private Integer id;
-
-	@OneToOne(cascade = CascadeType.ALL) @PrimaryKeyJoinColumn private OwnerAddress address;
-
-	public OwnerAddress getAddress() {
-		return address;
-	}
-
-	public void setAddress(OwnerAddress address) {
-		this.address = address;
-	}
-
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Owner.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Owner.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Owner.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Owner.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,35 @@
+//$Id: $
+package org.hibernate.test.annotations.onetoone;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+import javax.persistence.OneToOne;
+import javax.persistence.PrimaryKeyJoinColumn;
+import javax.persistence.CascadeType;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Owner {
+	@Id @GeneratedValue private Integer id;
+
+	@OneToOne(cascade = CascadeType.ALL) @PrimaryKeyJoinColumn private OwnerAddress address;
+
+	public OwnerAddress getAddress() {
+		return address;
+	}
+
+	public void setAddress(OwnerAddress address) {
+		this.address = address;
+	}
+
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/OwnerAddress.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/OwnerAddress.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/OwnerAddress.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,39 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.onetoone;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.GeneratedValue;
-import javax.persistence.OneToOne;
-
-import org.hibernate.annotations.GenericGenerator;
-import org.hibernate.annotations.Parameter;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class OwnerAddress {
-	@Id @GeneratedValue(generator = "fk")
-	@GenericGenerator(strategy = "foreign", name = "fk", parameters = @Parameter(name="property", value="owner"))
-	private Integer id;
-
-	@OneToOne(mappedBy="address", optional = false)
-	private Owner owner;
-
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public Owner getOwner() {
-		return owner;
-	}
-
-	public void setOwner(Owner owner) {
-		this.owner = owner;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/OwnerAddress.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/OwnerAddress.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/OwnerAddress.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/OwnerAddress.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,39 @@
+//$Id: $
+package org.hibernate.test.annotations.onetoone;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+import javax.persistence.OneToOne;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.hibernate.annotations.Parameter;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class OwnerAddress {
+	@Id @GeneratedValue(generator = "fk")
+	@GenericGenerator(strategy = "foreign", name = "fk", parameters = @Parameter(name="property", value="owner"))
+	private Integer id;
+
+	@OneToOne(mappedBy="address", optional = false)
+	private Owner owner;
+
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public Owner getOwner() {
+		return owner;
+	}
+
+	public void setOwner(Owner owner) {
+		this.owner = owner;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Party.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Party.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Party.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,20 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.onetoone;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.OneToOne;
-import javax.persistence.PrimaryKeyJoinColumn;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Party {
-	@Id
-	String partyId;
-
-	@OneToOne
-	@PrimaryKeyJoinColumn
-	PartyAffiliate partyAffiliate;
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Party.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Party.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Party.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Party.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,20 @@
+//$Id$
+package org.hibernate.test.annotations.onetoone;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.OneToOne;
+import javax.persistence.PrimaryKeyJoinColumn;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Party {
+	@Id
+	String partyId;
+
+	@OneToOne
+	@PrimaryKeyJoinColumn
+	PartyAffiliate partyAffiliate;
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/PartyAffiliate.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/PartyAffiliate.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/PartyAffiliate.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,21 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.onetoone;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.OneToOne;
-import javax.persistence.PrimaryKeyJoinColumn;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class PartyAffiliate {
-	@Id
-	String partyId;
-
-	@OneToOne(mappedBy="partyAffiliate")
-	Party party;
-
-	String affiliateName;
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/PartyAffiliate.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/PartyAffiliate.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/PartyAffiliate.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/PartyAffiliate.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,21 @@
+//$Id$
+package org.hibernate.test.annotations.onetoone;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.OneToOne;
+import javax.persistence.PrimaryKeyJoinColumn;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class PartyAffiliate {
+	@Id
+	String partyId;
+
+	@OneToOne(mappedBy="partyAffiliate")
+	Party party;
+
+	String affiliateName;
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/SerialNumber.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/SerialNumber.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/SerialNumber.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,46 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.onetoone;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class SerialNumber {
-	private SerialNumberPk id;
-	private String value;
-
-	public boolean equals(Object o) {
-		if ( this == o ) return true;
-		if ( !( o instanceof SerialNumber ) ) return false;
-
-		final SerialNumber serialNumber = (SerialNumber) o;
-
-		if ( !id.equals( serialNumber.id ) ) return false;
-
-		return true;
-	}
-
-	public int hashCode() {
-		return id.hashCode();
-	}
-
-	@Id
-	public SerialNumberPk getId() {
-		return id;
-	}
-
-	public void setId(SerialNumberPk id) {
-		this.id = id;
-	}
-
-	public String getValue() {
-		return value;
-	}
-
-	public void setValue(String value) {
-		this.value = value;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/SerialNumber.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/SerialNumber.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/SerialNumber.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/SerialNumber.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,46 @@
+//$Id$
+package org.hibernate.test.annotations.onetoone;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class SerialNumber {
+	private SerialNumberPk id;
+	private String value;
+
+	public boolean equals(Object o) {
+		if ( this == o ) return true;
+		if ( !( o instanceof SerialNumber ) ) return false;
+
+		final SerialNumber serialNumber = (SerialNumber) o;
+
+		if ( !id.equals( serialNumber.id ) ) return false;
+
+		return true;
+	}
+
+	public int hashCode() {
+		return id.hashCode();
+	}
+
+	@Id
+	public SerialNumberPk getId() {
+		return id;
+	}
+
+	public void setId(SerialNumberPk id) {
+		this.id = id;
+	}
+
+	public String getValue() {
+		return value;
+	}
+
+	public void setValue(String value) {
+		this.value = value;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/SerialNumberPk.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/SerialNumberPk.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/SerialNumberPk.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,49 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.onetoone;
-
-import java.io.Serializable;
-import javax.persistence.Embeddable;
-
-/**
- * @author Emmanuel Bernard
- */
- at Embeddable
-public class SerialNumberPk implements Serializable {
-	private String brand;
-	private String model;
-
-	public boolean equals(Object o) {
-		if ( this == o ) return true;
-		if ( !( o instanceof SerialNumberPk ) ) return false;
-
-		final SerialNumberPk serialNumberPk = (SerialNumberPk) o;
-
-		if ( !brand.equals( serialNumberPk.brand ) ) return false;
-		if ( !model.equals( serialNumberPk.model ) ) return false;
-
-		return true;
-	}
-
-	public int hashCode() {
-		int result;
-		result = brand.hashCode();
-		result = 13 * result + model.hashCode();
-		return result;
-	}
-
-	public String getBrand() {
-		return brand;
-	}
-
-	public void setBrand(String brand) {
-		this.brand = brand;
-	}
-
-	public String getModel() {
-		return model;
-	}
-
-	public void setModel(String model) {
-		this.model = model;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/SerialNumberPk.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/SerialNumberPk.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/SerialNumberPk.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/SerialNumberPk.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,49 @@
+//$Id$
+package org.hibernate.test.annotations.onetoone;
+
+import java.io.Serializable;
+import javax.persistence.Embeddable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Embeddable
+public class SerialNumberPk implements Serializable {
+	private String brand;
+	private String model;
+
+	public boolean equals(Object o) {
+		if ( this == o ) return true;
+		if ( !( o instanceof SerialNumberPk ) ) return false;
+
+		final SerialNumberPk serialNumberPk = (SerialNumberPk) o;
+
+		if ( !brand.equals( serialNumberPk.brand ) ) return false;
+		if ( !model.equals( serialNumberPk.model ) ) return false;
+
+		return true;
+	}
+
+	public int hashCode() {
+		int result;
+		result = brand.hashCode();
+		result = 13 * result + model.hashCode();
+		return result;
+	}
+
+	public String getBrand() {
+		return brand;
+	}
+
+	public void setBrand(String brand) {
+		this.brand = brand;
+	}
+
+	public String getModel() {
+		return model;
+	}
+
+	public void setModel(String model) {
+		this.model = model;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Trousers.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Trousers.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Trousers.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,21 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.onetoone;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.OneToOne;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Trousers {
-	@Id
-	public Integer id;
-
-	@OneToOne
-	@JoinColumn(name = "zip_id")
-	public TrousersZip zip;
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Trousers.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Trousers.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Trousers.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/Trousers.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,21 @@
+//$Id$
+package org.hibernate.test.annotations.onetoone;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.OneToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Trousers {
+	@Id
+	public Integer id;
+
+	@OneToOne
+	@JoinColumn(name = "zip_id")
+	public TrousersZip zip;
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/TrousersZip.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/TrousersZip.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/TrousersZip.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,17 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.onetoone;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.OneToOne;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class TrousersZip {
-	@Id
-	public Integer id;
-	@OneToOne(mappedBy = "zip")
-	public Trousers trousers;
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/TrousersZip.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/TrousersZip.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/TrousersZip.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/onetoone/TrousersZip.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,17 @@
+//$Id$
+package org.hibernate.test.annotations.onetoone;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.OneToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class TrousersZip {
+	@Id
+	public Integer id;
+	@OneToOne(mappedBy = "zip")
+	public Trousers trousers;
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/orm.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/orm.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/orm.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,11 +0,0 @@
-<?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"
-                 version="1.0"
-        >
-    <sequence-generator name="SEQ_GEN" sequence-name="my_sequence"/>
-    <table-generator name="EMP_GEN" table="GENERATOR_TABLE"
-                     pk-column-name="pkey" pk-column-value="EMP"
-                     value-column-name="hi" allocation-size="20"/>
-</entity-mappings>
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/orm.xml (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/orm.xml)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/orm.xml	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/orm.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,11 @@
+<?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"
+                 version="1.0"
+        >
+    <sequence-generator name="SEQ_GEN" sequence-name="my_sequence"/>
+    <table-generator name="EMP_GEN" table="GENERATOR_TABLE"
+                     pk-column-name="pkey" pk-column-value="EMP"
+                     value-column-name="hi" allocation-size="20"/>
+</entity-mappings>
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/override (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/override)

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/override/AssociationOverrideTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/override/AssociationOverrideTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/override/AssociationOverrideTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,47 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.override;
-
-import org.hibernate.HibernateException;
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-import org.hibernate.test.annotations.TestCase;
-
-/**
- * @author Emmanuel Bernard
- */
-public class AssociationOverrideTest extends TestCase {
-
-	public void testOverriding() throws Exception {
-		Location paris = new Location();
-		paris.setName( "Paris" );
-		Location atlanta = new Location();
-		atlanta.setName( "Atlanta" );
-		Trip trip = new Trip();
-		trip.setFrom( paris );
-		//trip.setTo( atlanta );
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		s.persist( paris );
-		s.persist( atlanta );
-		try {
-			s.persist( trip );
-			s.flush();
-			fail( "Should be non nullable" );
-		}
-		catch (HibernateException e) {
-			//success
-		}
-		finally {
-			tx.rollback();
-			s.close();
-		}
-	}
-
-	protected Class[] getMappings() {
-		return new Class[]{
-				Location.class,
-				Move.class,
-				Trip.class
-		};
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/override/AssociationOverrideTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/override/AssociationOverrideTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/override/AssociationOverrideTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/override/AssociationOverrideTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,47 @@
+//$Id: $
+package org.hibernate.test.annotations.override;
+
+import org.hibernate.HibernateException;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class AssociationOverrideTest extends TestCase {
+
+	public void testOverriding() throws Exception {
+		Location paris = new Location();
+		paris.setName( "Paris" );
+		Location atlanta = new Location();
+		atlanta.setName( "Atlanta" );
+		Trip trip = new Trip();
+		trip.setFrom( paris );
+		//trip.setTo( atlanta );
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		s.persist( paris );
+		s.persist( atlanta );
+		try {
+			s.persist( trip );
+			s.flush();
+			fail( "Should be non nullable" );
+		}
+		catch (HibernateException e) {
+			//success
+		}
+		finally {
+			tx.rollback();
+			s.close();
+		}
+	}
+
+	protected Class[] getMappings() {
+		return new Class[]{
+				Location.class,
+				Move.class,
+				Trip.class
+		};
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/override/Location.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/override/Location.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/override/Location.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,22 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.override;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Location {
-	private String name;
-
-	@Id
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/override/Location.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/override/Location.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/override/Location.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/override/Location.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,22 @@
+//$Id: $
+package org.hibernate.test.annotations.override;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Location {
+	private String name;
+
+	@Id
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/override/Move.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/override/Move.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/override/Move.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,47 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.override;
-
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-import javax.persistence.MappedSuperclass;
-
-/**
- * @author Emmanuel Bernard
- */
- at MappedSuperclass
-public class Move {
-	private int id;
-	private Location from;
-	private Location to;
-
-	@ManyToOne
-	public Location getFrom() {
-		return from;
-	}
-
-	public void setFrom(Location from) {
-		this.from = from;
-	}
-
-	@Id
-	@GeneratedValue
-	public int getId() {
-		return id;
-	}
-
-	public void setId(int id) {
-		this.id = id;
-	}
-
-	@ManyToOne
-	@JoinColumn(name = "to", nullable = true)
-	public Location getTo() {
-		return to;
-	}
-
-	public void setTo(Location to) {
-		this.to = to;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/override/Move.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/override/Move.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/override/Move.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/override/Move.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,47 @@
+//$Id: $
+package org.hibernate.test.annotations.override;
+
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.MappedSuperclass;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at MappedSuperclass
+public class Move {
+	private int id;
+	private Location from;
+	private Location to;
+
+	@ManyToOne
+	public Location getFrom() {
+		return from;
+	}
+
+	public void setFrom(Location from) {
+		this.from = from;
+	}
+
+	@Id
+	@GeneratedValue
+	public int getId() {
+		return id;
+	}
+
+	public void setId(int id) {
+		this.id = id;
+	}
+
+	@ManyToOne
+	@JoinColumn(name = "to", nullable = true)
+	public Location getTo() {
+		return to;
+	}
+
+	public void setTo(Location to) {
+		this.to = to;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/override/Trip.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/override/Trip.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/override/Trip.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,18 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.override;
-
-import javax.persistence.AssociationOverride;
-import javax.persistence.AssociationOverrides;
-import javax.persistence.Entity;
-import javax.persistence.JoinColumn;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at AssociationOverrides({
- at AssociationOverride(name = "from", joinColumns = @JoinColumn(name = "from2", nullable = false)),
- at AssociationOverride(name = "to", joinColumns = @JoinColumn(name = "to2", nullable = false))
-		})
-public class Trip extends Move {
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/override/Trip.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/override/Trip.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/override/Trip.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/override/Trip.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,18 @@
+//$Id: $
+package org.hibernate.test.annotations.override;
+
+import javax.persistence.AssociationOverride;
+import javax.persistence.AssociationOverrides;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at AssociationOverrides({
+ at AssociationOverride(name = "from", joinColumns = @JoinColumn(name = "from2", nullable = false)),
+ at AssociationOverride(name = "to", joinColumns = @JoinColumn(name = "to2", nullable = false))
+		})
+public class Trip extends Move {
+}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/persister (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/persister)

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/persister/Card.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/persister/Card.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/persister/Card.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,21 +0,0 @@
-package org.hibernate.test.annotations.persister;
-
-import java.io.Serializable;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-
-/**
- * @author Shawn Clowater
- */
- at Entity
- at org.hibernate.annotations.Entity( persister = "org.hibernate.persister.entity.SingleTableEntityPersister" )
-public class Card implements Serializable {
-	@Id
-	public Integer id;
-
-	@ManyToOne()
-	@JoinColumn()
-	public Deck deck;
-}
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/persister/Card.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/persister/Card.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/persister/Card.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/persister/Card.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,21 @@
+package org.hibernate.test.annotations.persister;
+
+import java.io.Serializable;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+
+/**
+ * @author Shawn Clowater
+ */
+ at Entity
+ at org.hibernate.annotations.Entity( persister = "org.hibernate.persister.entity.SingleTableEntityPersister" )
+public class Card implements Serializable {
+	@Id
+	public Integer id;
+
+	@ManyToOne()
+	@JoinColumn()
+	public Deck deck;
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/persister/CollectionPersister.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/persister/CollectionPersister.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/persister/CollectionPersister.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,19 +0,0 @@
-package org.hibernate.test.annotations.persister;
-
-import org.hibernate.MappingException;
-import org.hibernate.cache.CacheConcurrencyStrategy;
-import org.hibernate.cache.CacheException;
-import org.hibernate.cfg.Configuration;
-import org.hibernate.engine.SessionFactoryImplementor;
-import org.hibernate.mapping.Collection;
-import org.hibernate.persister.collection.OneToManyPersister;
-
-/**
- * @author Shawn Clowater
- */
-public class CollectionPersister extends OneToManyPersister {
-	public CollectionPersister(Collection collection, CacheConcurrencyStrategy cache, Configuration cfg,
-							   SessionFactoryImplementor factory) throws MappingException, CacheException {
-		super( collection, cache, cfg, factory );
-	}
-}
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/persister/CollectionPersister.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/persister/CollectionPersister.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/persister/CollectionPersister.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/persister/CollectionPersister.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,19 @@
+package org.hibernate.test.annotations.persister;
+
+import org.hibernate.MappingException;
+import org.hibernate.cache.CacheConcurrencyStrategy;
+import org.hibernate.cache.CacheException;
+import org.hibernate.cfg.Configuration;
+import org.hibernate.engine.SessionFactoryImplementor;
+import org.hibernate.mapping.Collection;
+import org.hibernate.persister.collection.OneToManyPersister;
+
+/**
+ * @author Shawn Clowater
+ */
+public class CollectionPersister extends OneToManyPersister {
+	public CollectionPersister(Collection collection, CacheConcurrencyStrategy cache, Configuration cfg,
+							   SessionFactoryImplementor factory) throws MappingException, CacheException {
+		super( collection, cache, cfg, factory );
+	}
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/persister/Deck.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/persister/Deck.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/persister/Deck.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,25 +0,0 @@
-package org.hibernate.test.annotations.persister;
-
-import java.io.Serializable;
-import java.util.Set;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.OneToMany;
-
-import org.hibernate.annotations.Persister;
-
-
-/**
- * @author Shawn Clowater
- */
- at Entity
- at org.hibernate.annotations.Entity( persister = "org.hibernate.persister.entity.SingleTableEntityPersister" )
- at Persister( impl = org.hibernate.test.annotations.persister.EntityPersister.class )
-public class Deck implements Serializable {
-	@Id
-	public Integer id;
-
-	@OneToMany( mappedBy = "deck" )
-	@Persister( impl = org.hibernate.test.annotations.persister.CollectionPersister.class )
-	public Set<Card> cards;
-}
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/persister/Deck.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/persister/Deck.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/persister/Deck.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/persister/Deck.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,25 @@
+package org.hibernate.test.annotations.persister;
+
+import java.io.Serializable;
+import java.util.Set;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+
+import org.hibernate.annotations.Persister;
+
+
+/**
+ * @author Shawn Clowater
+ */
+ at Entity
+ at org.hibernate.annotations.Entity( persister = "org.hibernate.persister.entity.SingleTableEntityPersister" )
+ at Persister( impl = org.hibernate.test.annotations.persister.EntityPersister.class )
+public class Deck implements Serializable {
+	@Id
+	public Integer id;
+
+	@OneToMany( mappedBy = "deck" )
+	@Persister( impl = org.hibernate.test.annotations.persister.CollectionPersister.class )
+	public Set<Card> cards;
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/persister/EntityPersister.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/persister/EntityPersister.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/persister/EntityPersister.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,18 +0,0 @@
-package org.hibernate.test.annotations.persister;
-
-import org.hibernate.HibernateException;
-import org.hibernate.cache.CacheConcurrencyStrategy;
-import org.hibernate.engine.Mapping;
-import org.hibernate.engine.SessionFactoryImplementor;
-import org.hibernate.mapping.PersistentClass;
-import org.hibernate.persister.entity.SingleTableEntityPersister;
-
-/**
- * @author Shawn Clowater
- */
-public class EntityPersister extends SingleTableEntityPersister {
-	public EntityPersister(PersistentClass persistentClass, CacheConcurrencyStrategy cache,
-						   SessionFactoryImplementor factory, Mapping cfg) throws HibernateException {
-		super( persistentClass, cache, factory, cfg );
-	}
-}
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/persister/EntityPersister.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/persister/EntityPersister.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/persister/EntityPersister.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/persister/EntityPersister.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,18 @@
+package org.hibernate.test.annotations.persister;
+
+import org.hibernate.HibernateException;
+import org.hibernate.cache.CacheConcurrencyStrategy;
+import org.hibernate.engine.Mapping;
+import org.hibernate.engine.SessionFactoryImplementor;
+import org.hibernate.mapping.PersistentClass;
+import org.hibernate.persister.entity.SingleTableEntityPersister;
+
+/**
+ * @author Shawn Clowater
+ */
+public class EntityPersister extends SingleTableEntityPersister {
+	public EntityPersister(PersistentClass persistentClass, CacheConcurrencyStrategy cache,
+						   SessionFactoryImplementor factory, Mapping cfg) throws HibernateException {
+		super( persistentClass, cache, factory, cfg );
+	}
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/persister/PersisterTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/persister/PersisterTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/persister/PersisterTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,47 +0,0 @@
-package org.hibernate.test.annotations.persister;
-
-import org.hibernate.mapping.Collection;
-import org.hibernate.mapping.PersistentClass;
-import org.hibernate.persister.entity.SingleTableEntityPersister;
-import org.hibernate.test.annotations.TestCase;
-
-/**
- * @author Shawn Clowater
- */
-public class PersisterTest extends TestCase {
-	public PersisterTest(String x) {
-		super( x );
-	}
-
-	public void testEntityEntityPersisterAndPersisterSpecified() throws Exception {
-		//checks to see that the persister specified with the @Persister annotation takes precedence if a @Entity.persister() is also specified		
-		PersistentClass persistentClass = (PersistentClass) getCfg().getClassMapping( Deck.class.getName() );
-		assertEquals( "Incorrect Persister class for " + persistentClass.getMappedClass(), EntityPersister.class,
-				persistentClass.getEntityPersisterClass() );
-	}
-
-	public void testEntityEntityPersisterSpecified() throws Exception {
-		//tests the persister specified with an @Entity.persister()		
-		PersistentClass persistentClass = (PersistentClass) getCfg().getClassMapping( Card.class.getName() );
-		assertEquals( "Incorrect Persister class for " + persistentClass.getMappedClass(),
-				SingleTableEntityPersister.class, persistentClass.getEntityPersisterClass() );
-	}
-
-	public void testCollectionPersisterSpecified() throws Exception {
-		//tests the persister specified by the @Persister annotation on a collection
-		Collection collection = (Collection) getCfg().getCollectionMapping( Deck.class.getName() + ".cards" );
-		assertEquals( "Incorrect Persister class for collection " + collection.getRole(), CollectionPersister.class,
-				collection.getCollectionPersisterClass() );
-	}
-
-	/**
-	 * @see org.hibernate.test.annotations.TestCase#getMappings()
-	 */
-	protected Class[] getMappings() {
-		return new Class[]{
-				Card.class,
-				Deck.class
-		};
-	}
-
-}
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/persister/PersisterTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/persister/PersisterTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/persister/PersisterTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/persister/PersisterTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,47 @@
+package org.hibernate.test.annotations.persister;
+
+import org.hibernate.mapping.Collection;
+import org.hibernate.mapping.PersistentClass;
+import org.hibernate.persister.entity.SingleTableEntityPersister;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Shawn Clowater
+ */
+public class PersisterTest extends TestCase {
+	public PersisterTest(String x) {
+		super( x );
+	}
+
+	public void testEntityEntityPersisterAndPersisterSpecified() throws Exception {
+		//checks to see that the persister specified with the @Persister annotation takes precedence if a @Entity.persister() is also specified		
+		PersistentClass persistentClass = (PersistentClass) getCfg().getClassMapping( Deck.class.getName() );
+		assertEquals( "Incorrect Persister class for " + persistentClass.getMappedClass(), EntityPersister.class,
+				persistentClass.getEntityPersisterClass() );
+	}
+
+	public void testEntityEntityPersisterSpecified() throws Exception {
+		//tests the persister specified with an @Entity.persister()		
+		PersistentClass persistentClass = (PersistentClass) getCfg().getClassMapping( Card.class.getName() );
+		assertEquals( "Incorrect Persister class for " + persistentClass.getMappedClass(),
+				SingleTableEntityPersister.class, persistentClass.getEntityPersisterClass() );
+	}
+
+	public void testCollectionPersisterSpecified() throws Exception {
+		//tests the persister specified by the @Persister annotation on a collection
+		Collection collection = (Collection) getCfg().getCollectionMapping( Deck.class.getName() + ".cards" );
+		assertEquals( "Incorrect Persister class for collection " + collection.getRole(), CollectionPersister.class,
+				collection.getCollectionPersisterClass() );
+	}
+
+	/**
+	 * @see org.hibernate.test.annotations.TestCase#getMappings()
+	 */
+	protected Class[] getMappings() {
+		return new Class[]{
+				Card.class,
+				Deck.class
+		};
+	}
+
+}
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/polymorphism (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/polymorphism)

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/polymorphism/Car.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/polymorphism/Car.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/polymorphism/Car.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,39 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.polymorphism;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.Inheritance;
-import javax.persistence.InheritanceType;
-
-import org.hibernate.annotations.PolymorphismType;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Inheritance(strategy= InheritanceType.TABLE_PER_CLASS)
- at org.hibernate.annotations.Entity(polymorphism = PolymorphismType.EXPLICIT)
-public class Car extends MovingThing {
-	private Integer id;
-	private String model;
-
-	public String getModel() {
-		return model;
-	}
-
-	public void setModel(String model) {
-		this.model = model;
-	}
-
-	@Id @GeneratedValue(strategy = GenerationType.TABLE )
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/polymorphism/Car.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/polymorphism/Car.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/polymorphism/Car.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/polymorphism/Car.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,39 @@
+//$Id: $
+package org.hibernate.test.annotations.polymorphism;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+
+import org.hibernate.annotations.PolymorphismType;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Inheritance(strategy= InheritanceType.TABLE_PER_CLASS)
+ at org.hibernate.annotations.Entity(polymorphism = PolymorphismType.EXPLICIT)
+public class Car extends MovingThing {
+	private Integer id;
+	private String model;
+
+	public String getModel() {
+		return model;
+	}
+
+	public void setModel(String model) {
+		this.model = model;
+	}
+
+	@Id @GeneratedValue(strategy = GenerationType.TABLE )
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/polymorphism/MovingThing.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/polymorphism/MovingThing.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/polymorphism/MovingThing.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,8 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.polymorphism;
-
-/**
- * @author Emmanuel Bernard
- */
-public class MovingThing {
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/polymorphism/MovingThing.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/polymorphism/MovingThing.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/polymorphism/MovingThing.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/polymorphism/MovingThing.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,8 @@
+//$Id: $
+package org.hibernate.test.annotations.polymorphism;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class MovingThing {
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/polymorphism/PolymorphismTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/polymorphism/PolymorphismTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/polymorphism/PolymorphismTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,37 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.polymorphism;
-
-import org.hibernate.test.annotations.TestCase;
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-
-/**
- * @author Emmanuel Bernard
- */
-public class PolymorphismTest extends TestCase {
-
-	public void testPolymorphism() throws Exception {
-		Car car = new Car();
-		car.setModel( "SUV" );
-		SportCar car2 = new SportCar();
-		car2.setModel( "350Z" );
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		tx.begin();
-		s.persist( car );
-		s.persist( car2 );
-		s.flush();
-		assertEquals( 2, s.createQuery( "select car from Car car").list().size() );
-		assertEquals( 0, s.createQuery( "select count(m) from " + MovingThing.class.getName() + " m").list().size() );
-		tx.rollback();
-		s.close();
-
-	}
-
-	protected Class[] getMappings() {
-		return new Class[] {
-				Car.class,
-				SportCar.class
-		};
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/polymorphism/PolymorphismTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/polymorphism/PolymorphismTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/polymorphism/PolymorphismTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/polymorphism/PolymorphismTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,37 @@
+//$Id: $
+package org.hibernate.test.annotations.polymorphism;
+
+import org.hibernate.test.annotations.TestCase;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class PolymorphismTest extends TestCase {
+
+	public void testPolymorphism() throws Exception {
+		Car car = new Car();
+		car.setModel( "SUV" );
+		SportCar car2 = new SportCar();
+		car2.setModel( "350Z" );
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		tx.begin();
+		s.persist( car );
+		s.persist( car2 );
+		s.flush();
+		assertEquals( 2, s.createQuery( "select car from Car car").list().size() );
+		assertEquals( 0, s.createQuery( "select count(m) from " + MovingThing.class.getName() + " m").list().size() );
+		tx.rollback();
+		s.close();
+
+	}
+
+	protected Class[] getMappings() {
+		return new Class[] {
+				Car.class,
+				SportCar.class
+		};
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/polymorphism/SportCar.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/polymorphism/SportCar.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/polymorphism/SportCar.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,16 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.polymorphism;
-
-import javax.persistence.Entity;
-import javax.persistence.Table;
-
-import org.hibernate.annotations.PolymorphismType;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Table(name = "sport_car")
- at org.hibernate.annotations.Entity(polymorphism = PolymorphismType.EXPLICIT) //raise a warn
-public class SportCar extends Car {
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/polymorphism/SportCar.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/polymorphism/SportCar.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/polymorphism/SportCar.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/polymorphism/SportCar.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,16 @@
+//$Id: $
+package org.hibernate.test.annotations.polymorphism;
+
+import javax.persistence.Entity;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.PolymorphismType;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Table(name = "sport_car")
+ at org.hibernate.annotations.Entity(polymorphism = PolymorphismType.EXPLICIT) //raise a warn
+public class SportCar extends Car {
+}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query)

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Area.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Area.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Area.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,73 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.query;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.EntityResult;
-import javax.persistence.FieldResult;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.NamedNativeQueries;
-import javax.persistence.NamedNativeQuery;
-import javax.persistence.SqlResultSetMapping;
-import javax.persistence.SqlResultSetMappings;
-import javax.persistence.Table;
-
-/**
- * Example of a entity load incl a join fetching of an associated *ToOne entity
- *
- * @author Emmanuel Bernard
- */
- at Entity
- at NamedNativeQueries({
- at NamedNativeQuery(
-		name = "night&area", query = "select night.id as nid, night.night_duration, night.night_date, area.id as aid, "
-		+ "night.area_id, area.name from Night night, tbl_area area where night.area_id = area.id",
-		resultSetMapping = "joinMapping")
-		})
- at org.hibernate.annotations.NamedNativeQueries({
- at org.hibernate.annotations.NamedNativeQuery(
-		name = "night&areaCached",
-		query = "select night.id as nid, night.night_duration, night.night_date, area.id as aid, "
-				+ "night.area_id, area.name from Night night, tbl_area area where night.area_id = area.id",
-		resultSetMapping = "joinMapping")
-		})
- at SqlResultSetMappings(
-		@SqlResultSetMapping(name = "joinMapping", entities = {
-		@EntityResult(entityClass = org.hibernate.test.annotations.query.Night.class, fields = {
-		@FieldResult(name = "id", column = "nid"),
-		@FieldResult(name = "duration", column = "night_duration"),
-		@FieldResult(name = "date", column = "night_date"),
-		@FieldResult(name = "area", column = "area_id")
-				}),
-		@EntityResult(entityClass = org.hibernate.test.annotations.query.Area.class, fields = {
-		@FieldResult(name = "id", column = "aid"),
-		@FieldResult(name = "name", column = "name")
-				})
-				}
-		)
-)
- at Table(name = "tbl_area")
-public class Area {
-	private Integer id;
-	private String name;
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	@Column(unique = true)
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Area.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Area.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Area.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Area.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,73 @@
+//$Id$
+package org.hibernate.test.annotations.query;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EntityResult;
+import javax.persistence.FieldResult;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedNativeQueries;
+import javax.persistence.NamedNativeQuery;
+import javax.persistence.SqlResultSetMapping;
+import javax.persistence.SqlResultSetMappings;
+import javax.persistence.Table;
+
+/**
+ * Example of a entity load incl a join fetching of an associated *ToOne entity
+ *
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at NamedNativeQueries({
+ at NamedNativeQuery(
+		name = "night&area", query = "select night.id as nid, night.night_duration, night.night_date, area.id as aid, "
+		+ "night.area_id, area.name from Night night, tbl_area area where night.area_id = area.id",
+		resultSetMapping = "joinMapping")
+		})
+ at org.hibernate.annotations.NamedNativeQueries({
+ at org.hibernate.annotations.NamedNativeQuery(
+		name = "night&areaCached",
+		query = "select night.id as nid, night.night_duration, night.night_date, area.id as aid, "
+				+ "night.area_id, area.name from Night night, tbl_area area where night.area_id = area.id",
+		resultSetMapping = "joinMapping")
+		})
+ at SqlResultSetMappings(
+		@SqlResultSetMapping(name = "joinMapping", entities = {
+		@EntityResult(entityClass = org.hibernate.test.annotations.query.Night.class, fields = {
+		@FieldResult(name = "id", column = "nid"),
+		@FieldResult(name = "duration", column = "night_duration"),
+		@FieldResult(name = "date", column = "night_date"),
+		@FieldResult(name = "area", column = "area_id")
+				}),
+		@EntityResult(entityClass = org.hibernate.test.annotations.query.Area.class, fields = {
+		@FieldResult(name = "id", column = "aid"),
+		@FieldResult(name = "name", column = "name")
+				})
+				}
+		)
+)
+ at Table(name = "tbl_area")
+public class Area {
+	private Integer id;
+	private String name;
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	@Column(unique = true)
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Captain.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Captain.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Captain.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,52 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.query;
-
-import java.io.Serializable;
-import javax.persistence.ColumnResult;
-import javax.persistence.Entity;
-import javax.persistence.EntityResult;
-import javax.persistence.FieldResult;
-import javax.persistence.Id;
-import javax.persistence.IdClass;
-import javax.persistence.SqlResultSetMapping;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at IdClass(Identity.class)
- at SqlResultSetMapping(name = "compositekey",
-		entities = @EntityResult(entityClass = org.hibernate.test.annotations.query.SpaceShip.class,
-				fields = {
-				@FieldResult(name = "name", column = "name"),
-				@FieldResult(name = "model", column = "model"),
-				@FieldResult(name = "speed", column = "speed"),
-				@FieldResult(name = "dimensions.width", column = "width"),
-				@FieldResult(name = "captain.lastname", column = "lastn"),
-				@FieldResult(name = "dimensions.length", column = "length"),
-				@FieldResult(name = "captain.firstname", column = "firstn")
-						}),
-		columns = {@ColumnResult(name = "surface"),
-		@ColumnResult(name = "volume")})
-public class Captain implements Serializable {
-	private String firstname;
-	private String lastname;
-
-	@Id
-	public String getFirstname() {
-		return firstname;
-	}
-
-	public void setFirstname(String firstname) {
-		this.firstname = firstname;
-	}
-
-	@Id
-	public String getLastname() {
-		return lastname;
-	}
-
-	public void setLastname(String lastname) {
-		this.lastname = lastname;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Captain.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Captain.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Captain.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Captain.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,52 @@
+//$Id$
+package org.hibernate.test.annotations.query;
+
+import java.io.Serializable;
+import javax.persistence.ColumnResult;
+import javax.persistence.Entity;
+import javax.persistence.EntityResult;
+import javax.persistence.FieldResult;
+import javax.persistence.Id;
+import javax.persistence.IdClass;
+import javax.persistence.SqlResultSetMapping;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at IdClass(Identity.class)
+ at SqlResultSetMapping(name = "compositekey",
+		entities = @EntityResult(entityClass = org.hibernate.test.annotations.query.SpaceShip.class,
+				fields = {
+				@FieldResult(name = "name", column = "name"),
+				@FieldResult(name = "model", column = "model"),
+				@FieldResult(name = "speed", column = "speed"),
+				@FieldResult(name = "dimensions.width", column = "width"),
+				@FieldResult(name = "captain.lastname", column = "lastn"),
+				@FieldResult(name = "dimensions.length", column = "length"),
+				@FieldResult(name = "captain.firstname", column = "firstn")
+						}),
+		columns = {@ColumnResult(name = "surface"),
+		@ColumnResult(name = "volume")})
+public class Captain implements Serializable {
+	private String firstname;
+	private String lastname;
+
+	@Id
+	public String getFirstname() {
+		return firstname;
+	}
+
+	public void setFirstname(String firstname) {
+		this.firstname = firstname;
+	}
+
+	@Id
+	public String getLastname() {
+		return lastname;
+	}
+
+	public void setLastname(String lastname) {
+		this.lastname = lastname;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/CasimirParticle.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/CasimirParticle.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/CasimirParticle.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,25 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.query;
-
-import javax.persistence.Entity;
-import javax.persistence.Table;
-import javax.persistence.Id;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Table(name="CASIMIR_PARTICULE")
-public class CasimirParticle {
-	@Id
-	private Long id;
-
-
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/CasimirParticle.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/CasimirParticle.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/CasimirParticle.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/CasimirParticle.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,25 @@
+//$Id: $
+package org.hibernate.test.annotations.query;
+
+import javax.persistence.Entity;
+import javax.persistence.Table;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Table(name="CASIMIR_PARTICULE")
+public class CasimirParticle {
+	@Id
+	private Long id;
+
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Chaos.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Chaos.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Chaos.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,83 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.query;
-
-import java.util.Set;
-import java.util.HashSet;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Table;
-import javax.persistence.NamedQuery;
-import javax.persistence.NamedNativeQuery;
-import javax.persistence.OneToMany;
-import javax.persistence.JoinColumn;
-
-import org.hibernate.annotations.SQLInsert;
-import org.hibernate.annotations.SQLUpdate;
-import org.hibernate.annotations.SQLDelete;
-import org.hibernate.annotations.SQLDeleteAll;
-import org.hibernate.annotations.Loader;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Table(name="CHAOS")
- at SQLInsert( sql="INSERT INTO CHAOS(name, nickname, size, id) VALUES(upper(?),?,?,?)")
- at SQLUpdate( sql="UPDATE CHAOS SET name = upper(?), nickname = ?, size = ? WHERE id = ?")
- at SQLDelete( sql="DELETE CHAOS WHERE id = ?")
- at SQLDeleteAll( sql="DELETE CHAOS")
- at Loader(namedQuery = "chaos")
- at NamedNativeQuery(name="chaos", query="select id, size, name, lower( nickname ) as nickname from CHAOS where id= ?", resultClass = Chaos.class)
-public class Chaos {
-	@Id
-	private Long id;
-	private Long size;
-	private String name;
-	private String nickname;
-
-	@OneToMany
-	@JoinColumn(name="chaos_fk")
-	@SQLInsert( sql="UPDATE CASIMIR_PARTICULE SET chaos_fk = ? where id = ?")
-	@SQLDelete( sql="UPDATE CASIMIR_PARTICULE SET chaos_fk = null where id = ?")
-	private Set<CasimirParticle> particles = new HashSet<CasimirParticle>();
-
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-
-	public Long getSize() {
-		return size;
-	}
-
-	public void setSize(Long size) {
-		this.size = size;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	public String getNickname() {
-		return nickname;
-	}
-
-	public void setNickname(String nickname) {
-		this.nickname = nickname;
-	}
-
-	public Set<CasimirParticle> getParticles() {
-		return particles;
-	}
-
-	public void setParticles(Set<CasimirParticle> particles) {
-		this.particles = particles;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Chaos.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Chaos.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Chaos.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Chaos.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,83 @@
+//$Id: $
+package org.hibernate.test.annotations.query;
+
+import java.util.Set;
+import java.util.HashSet;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.NamedQuery;
+import javax.persistence.NamedNativeQuery;
+import javax.persistence.OneToMany;
+import javax.persistence.JoinColumn;
+
+import org.hibernate.annotations.SQLInsert;
+import org.hibernate.annotations.SQLUpdate;
+import org.hibernate.annotations.SQLDelete;
+import org.hibernate.annotations.SQLDeleteAll;
+import org.hibernate.annotations.Loader;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Table(name="CHAOS")
+ at SQLInsert( sql="INSERT INTO CHAOS(name, nickname, size, id) VALUES(upper(?),?,?,?)")
+ at SQLUpdate( sql="UPDATE CHAOS SET name = upper(?), nickname = ?, size = ? WHERE id = ?")
+ at SQLDelete( sql="DELETE CHAOS WHERE id = ?")
+ at SQLDeleteAll( sql="DELETE CHAOS")
+ at Loader(namedQuery = "chaos")
+ at NamedNativeQuery(name="chaos", query="select id, size, name, lower( nickname ) as nickname from CHAOS where id= ?", resultClass = Chaos.class)
+public class Chaos {
+	@Id
+	private Long id;
+	private Long size;
+	private String name;
+	private String nickname;
+
+	@OneToMany
+	@JoinColumn(name="chaos_fk")
+	@SQLInsert( sql="UPDATE CASIMIR_PARTICULE SET chaos_fk = ? where id = ?")
+	@SQLDelete( sql="UPDATE CASIMIR_PARTICULE SET chaos_fk = null where id = ?")
+	private Set<CasimirParticle> particles = new HashSet<CasimirParticle>();
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public Long getSize() {
+		return size;
+	}
+
+	public void setSize(Long size) {
+		this.size = size;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getNickname() {
+		return nickname;
+	}
+
+	public void setNickname(String nickname) {
+		this.nickname = nickname;
+	}
+
+	public Set<CasimirParticle> getParticles() {
+		return particles;
+	}
+
+	public void setParticles(Set<CasimirParticle> particles) {
+		this.particles = particles;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Dictionary.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Dictionary.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Dictionary.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,66 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.query;
-
-import javax.persistence.DiscriminatorColumn;
-import javax.persistence.DiscriminatorValue;
-import javax.persistence.Entity;
-import javax.persistence.EntityResult;
-import javax.persistence.FieldResult;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.NamedNativeQuery;
-import javax.persistence.SqlResultSetMapping;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at DiscriminatorColumn(name = "disc")
- at DiscriminatorValue("Dic")
- at SqlResultSetMapping(
-		name = "dictionary", entities = {
- at EntityResult(
-		entityClass = org.hibernate.test.annotations.query.Dictionary.class,
-		fields = {
-		@FieldResult(name = "id", column = "id"),
-		@FieldResult(name = "name", column = "name"),
-		@FieldResult(name = "editor", column = "editor")
-				},
-		discriminatorColumn = "type"
-)
-		}
-)
- at NamedNativeQuery(name = "all.dictionaries",
-		query = "select id, name, editor, disc as type from Dictionary",
-		resultSetMapping = "dictionary")
-public class Dictionary {
-	private Integer id;
-	private String name;
-	private String editor;
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	public String getEditor() {
-		return editor;
-	}
-
-	public void setEditor(String editor) {
-		this.editor = editor;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Dictionary.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Dictionary.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Dictionary.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Dictionary.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,66 @@
+//$Id$
+package org.hibernate.test.annotations.query;
+
+import javax.persistence.DiscriminatorColumn;
+import javax.persistence.DiscriminatorValue;
+import javax.persistence.Entity;
+import javax.persistence.EntityResult;
+import javax.persistence.FieldResult;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedNativeQuery;
+import javax.persistence.SqlResultSetMapping;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at DiscriminatorColumn(name = "disc")
+ at DiscriminatorValue("Dic")
+ at SqlResultSetMapping(
+		name = "dictionary", entities = {
+ at EntityResult(
+		entityClass = org.hibernate.test.annotations.query.Dictionary.class,
+		fields = {
+		@FieldResult(name = "id", column = "id"),
+		@FieldResult(name = "name", column = "name"),
+		@FieldResult(name = "editor", column = "editor")
+				},
+		discriminatorColumn = "type"
+)
+		}
+)
+ at NamedNativeQuery(name = "all.dictionaries",
+		query = "select id, name, editor, disc as type from Dictionary",
+		resultSetMapping = "dictionary")
+public class Dictionary {
+	private Integer id;
+	private String name;
+	private String editor;
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getEditor() {
+		return editor;
+	}
+
+	public void setEditor(String editor) {
+		this.editor = editor;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Dimensions.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Dimensions.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Dimensions.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,31 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.query;
-
-import javax.persistence.Embeddable;
-
-/**
- * @author Emmanuel Bernard
- */
- at Embeddable
-public class Dimensions {
-	
-
-	private int length;
-	private int width;
-
-	public int getLength() {
-		return length;
-	}
-
-	public void setLength(int length) {
-		this.length = length;
-	}
-
-	public int getWidth() {
-		return width;
-	}
-
-	public void setWidth(int width) {
-		this.width = width;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Dimensions.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Dimensions.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Dimensions.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Dimensions.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,31 @@
+//$Id$
+package org.hibernate.test.annotations.query;
+
+import javax.persistence.Embeddable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Embeddable
+public class Dimensions {
+	
+
+	private int length;
+	private int width;
+
+	public int getLength() {
+		return length;
+	}
+
+	public void setLength(int length) {
+		this.length = length;
+	}
+
+	public int getWidth() {
+		return width;
+	}
+
+	public void setWidth(int width) {
+		this.width = width;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Identity.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Identity.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Identity.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,47 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.query;
-
-import java.io.Serializable;
-
-/**
- * @author Emmanuel Bernard
- */
-public class Identity implements Serializable {
-	private String firstname;
-	private String lastname;
-
-	public String getFirstname() {
-		return firstname;
-	}
-
-	public void setFirstname(String firstname) {
-		this.firstname = firstname;
-	}
-
-	public String getLastname() {
-		return lastname;
-	}
-
-	public void setLastname(String lastname) {
-		this.lastname = lastname;
-	}
-
-	public boolean equals(Object o) {
-		if ( this == o ) return true;
-		if ( o == null || getClass() != o.getClass() ) return false;
-
-		final Identity identity = (Identity) o;
-
-		if ( !firstname.equals( identity.firstname ) ) return false;
-		if ( !lastname.equals( identity.lastname ) ) return false;
-
-		return true;
-	}
-
-	public int hashCode() {
-		int result;
-		result = firstname.hashCode();
-		result = 29 * result + lastname.hashCode();
-		return result;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Identity.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Identity.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Identity.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Identity.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,47 @@
+//$Id$
+package org.hibernate.test.annotations.query;
+
+import java.io.Serializable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Identity implements Serializable {
+	private String firstname;
+	private String lastname;
+
+	public String getFirstname() {
+		return firstname;
+	}
+
+	public void setFirstname(String firstname) {
+		this.firstname = firstname;
+	}
+
+	public String getLastname() {
+		return lastname;
+	}
+
+	public void setLastname(String lastname) {
+		this.lastname = lastname;
+	}
+
+	public boolean equals(Object o) {
+		if ( this == o ) return true;
+		if ( o == null || getClass() != o.getClass() ) return false;
+
+		final Identity identity = (Identity) o;
+
+		if ( !firstname.equals( identity.firstname ) ) return false;
+		if ( !lastname.equals( identity.lastname ) ) return false;
+
+		return true;
+	}
+
+	public int hashCode() {
+		int result;
+		result = firstname.hashCode();
+		result = 29 * result + lastname.hashCode();
+		return result;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Mark.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Mark.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Mark.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,27 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.query;
-
-import javax.persistence.ColumnResult;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.NamedNativeQuery;
-import javax.persistence.SqlResultSetMapping;
-
-/**
- * Example of scalar result (not working right now)
- *
- * @author Emmanuel Bernard
- */
- at Entity
- at NamedNativeQuery(name = "average", query = "select avg(m.value) from Mark m", resultSetMapping = "columnmapping")
- at SqlResultSetMapping(
-		name = "columnmapping",
-		columns = @ColumnResult(name = "aver")
-)
-public class Mark {
-	@Id
-	@GeneratedValue
-	public int id;
-	public int value;
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Mark.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Mark.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Mark.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Mark.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,27 @@
+//$Id$
+package org.hibernate.test.annotations.query;
+
+import javax.persistence.ColumnResult;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedNativeQuery;
+import javax.persistence.SqlResultSetMapping;
+
+/**
+ * Example of scalar result (not working right now)
+ *
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at NamedNativeQuery(name = "average", query = "select avg(m.value) from Mark m", resultSetMapping = "columnmapping")
+ at SqlResultSetMapping(
+		name = "columnmapping",
+		columns = @ColumnResult(name = "aver")
+)
+public class Mark {
+	@Id
+	@GeneratedValue
+	public int id;
+	public int value;
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Night.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Night.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Night.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,66 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.query;
-
-import java.util.Date;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.ManyToOne;
-import javax.persistence.NamedQuery;
-
-/**
- * Entity declaring a named query
- *
- * @author Emmanuel Bernard
- */
- at Entity
- at NamedQuery(name = "night.moreRecentThan", query = "select n from Night n where n.date >= :date")
- at org.hibernate.annotations.NamedQuery(
-		name = "night.duration",
-		query = "select n from Night n where n.duration = :duration",
-		cacheable = true, cacheRegion = "nightQuery"
-)
-public class Night {
-	private Integer id;
-	private long duration;
-	private Date date;
-	private Area area;
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	@Column(name = "night_duration")
-	public long getDuration() {
-		return duration;
-	}
-
-	public void setDuration(long duration) {
-		this.duration = duration;
-	}
-
-	@Column(name = "night_date")
-	public Date getDate() {
-		return date;
-	}
-
-	public void setDate(Date date) {
-		this.date = date;
-	}
-
-	@ManyToOne
-	public Area getArea() {
-		return area;
-	}
-
-	public void setArea(Area area) {
-		this.area = area;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Night.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Night.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Night.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/Night.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,66 @@
+//$Id$
+package org.hibernate.test.annotations.query;
+
+import java.util.Date;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQuery;
+
+/**
+ * Entity declaring a named query
+ *
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at NamedQuery(name = "night.moreRecentThan", query = "select n from Night n where n.date >= :date")
+ at org.hibernate.annotations.NamedQuery(
+		name = "night.duration",
+		query = "select n from Night n where n.duration = :duration",
+		cacheable = true, cacheRegion = "nightQuery"
+)
+public class Night {
+	private Integer id;
+	private long duration;
+	private Date date;
+	private Area area;
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	@Column(name = "night_duration")
+	public long getDuration() {
+		return duration;
+	}
+
+	public void setDuration(long duration) {
+		this.duration = duration;
+	}
+
+	@Column(name = "night_date")
+	public Date getDate() {
+		return date;
+	}
+
+	public void setDate(Date date) {
+		this.date = date;
+	}
+
+	@ManyToOne
+	public Area getArea() {
+		return area;
+	}
+
+	public void setArea(Area area) {
+		this.area = area;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/QueryAndSQLTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/QueryAndSQLTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/QueryAndSQLTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,380 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.query;
-
-import java.util.Calendar;
-import java.util.Date;
-import java.util.GregorianCalendar;
-import java.util.List;
-
-import org.hibernate.Query;
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-import org.hibernate.stat.Statistics;
-import org.hibernate.test.annotations.A320;
-import org.hibernate.test.annotations.A320b;
-import org.hibernate.test.annotations.Plane;
-import org.hibernate.test.annotations.TestCase;
-
-/**
- * Test named queries
- *
- * @author Emmanuel Bernard
- */
-public class QueryAndSQLTest extends TestCase {
-	public QueryAndSQLTest(String x) {
-		super( x );
-	}
-
-	public void testPackageQueries() throws Exception {
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		Plane p = new Plane();
-		s.persist( p );
-		Query q = s.getNamedQuery( "plane.getAll" );
-		assertEquals( 1, q.list().size() );
-		tx.commit();
-		s.close();
-	}
-
-	public void testClassQueries() throws Exception {
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		Night n = new Night();
-		Calendar c = new GregorianCalendar();
-		c.set( 2000, 2, 2 );
-		Date now = c.getTime();
-		c.add( Calendar.MONTH, -1 );
-		Date aMonthAgo = c.getTime();
-		c.add( Calendar.MONTH, 2 );
-		Date inAMonth = c.getTime();
-		n.setDate( now );
-		n.setDuration( 14 );
-		s.persist( n );
-		tx.commit();
-		s.close();
-		s = openSession();
-		tx = s.beginTransaction();
-		Query q = s.getNamedQuery( "night.moreRecentThan" );
-		q.setDate( "date", aMonthAgo );
-		assertEquals( 1, q.list().size() );
-		q = s.getNamedQuery( "night.moreRecentThan" );
-		q.setDate( "date", inAMonth );
-		assertEquals( 0, q.list().size() );
-		Statistics stats = getSessions().getStatistics();
-		stats.setStatisticsEnabled( true );
-		stats.clear();
-		q = s.getNamedQuery( "night.duration" );
-		q.setParameter( "duration", 14l );
-		assertEquals( 1, q.list().size() );
-		assertEquals( 1, stats.getQueryCachePutCount() );
-		q = s.getNamedQuery( "night.duration" );
-		q.setParameter( "duration", 14l );
-		s.delete( q.list().get( 0 ) );
-		assertEquals( 1, stats.getQueryCacheHitCount() );
-		tx.commit();
-		s.close();
-	}
-
-	public void testSQLQuery() {
-		Night n = new Night();
-		Calendar c = new GregorianCalendar();
-		c.set( 2000, 2, 2 );
-		Date now = c.getTime();
-		c.add( Calendar.MONTH, -1 );
-		Date aMonthAgo = c.getTime();
-		c.add( Calendar.MONTH, 2 );
-		Date inAMonth = c.getTime();
-		n.setDate( now );
-		n.setDuration( 9999 );
-		Area area = new Area();
-		area.setName( "Monceau" );
-
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		s.persist( n );
-		s.persist( area );
-		tx.commit();
-		s.clear();
-		tx = s.beginTransaction();
-		Query q = s.getNamedQuery( "night.getAll.bySQL" );
-		q.setParameter( 0, 9990 );
-		List result = q.list();
-		assertEquals( 1, result.size() );
-		Night n2 = (Night) result.get( 0 );
-		assertEquals( n2.getDuration(), n.getDuration() );
-		List areas = s.getNamedQuery( "getAreaByNative" ).list();
-		assertTrue( 1 == areas.size() );
-		assertEquals( area.getName(), ( (Area) areas.get( 0 ) ).getName() );
-		tx.commit();
-		s.close();
-	}
-
-	public void testSQLQueryWithManyToOne() {
-		Night n = new Night();
-		Calendar c = new GregorianCalendar();
-		c.set( 2000, 2, 2 );
-		Date now = c.getTime();
-		c.add( Calendar.MONTH, -1 );
-		Date aMonthAgo = c.getTime();
-		c.add( Calendar.MONTH, 2 );
-		Date inAMonth = c.getTime();
-		n.setDate( now );
-		n.setDuration( 9999 );
-		Area a = new Area();
-		a.setName( "Paris" );
-		n.setArea( a );
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		s.persist( a );
-		s.persist( n );
-		tx.commit();
-		s.close();
-		s = openSession();
-		tx = s.beginTransaction();
-		Statistics stats = getSessions().getStatistics();
-		stats.setStatisticsEnabled( true );
-		Query q = s.getNamedQuery( "night&areaCached" );
-		List result = q.list();
-		assertEquals( 1, result.size() );
-		assertEquals( 1, stats.getQueryCachePutCount() );
-		q.list();
-		assertEquals( 1, stats.getQueryCacheHitCount() );
-		Night n2 = (Night) ( (Object[]) result.get( 0 ) )[0];
-		assertEquals( n2.getDuration(), n.getDuration() );
-		tx.commit();
-		s.close();
-	}
-
-	public void testImplicitNativeQuery() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		SpaceShip ship = new SpaceShip();
-		ship.setModel( "X-Wing" );
-		ship.setName( "YuBlue" );
-		ship.setSpeed( 2000 );
-		ship.setDimensions( new Dimensions() );
-		s.persist( ship );
-		tx.commit();
-		s.clear();
-		tx = s.beginTransaction();
-		Query q = s.getNamedQuery( "implicitSample" );
-		List result = q.list();
-		assertEquals( 1, result.size() );
-		assertEquals( ship.getModel(), ( (SpaceShip) result.get( 0 ) ).getModel() );
-		s.delete( result.get( 0 ) );
-		tx.commit();
-		s.close();
-	}
-
-	public void testNativeQueryAndCompositePKAndComponents() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		SpaceShip ship = new SpaceShip();
-		ship.setModel( "X-Wing" );
-		ship.setName( "YuBlue" );
-		ship.setSpeed( 2000 );
-		ship.setDimensions( new Dimensions() );
-		ship.getDimensions().setLength( 10 );
-		ship.getDimensions().setWidth( 5 );
-		Captain captain = new Captain();
-		captain.setFirstname( "Luke" );
-		captain.setLastname( "Skywalker" );
-		ship.setCaptain( captain );
-		s.persist( captain );
-		s.persist( ship );
-		tx.commit();
-		s.clear();
-		tx = s.beginTransaction();
-		Query q = s.getNamedQuery( "compositekey" );
-		List result = q.list();
-		assertEquals( 1, result.size() );
-		Object[] row = (Object[]) result.get( 0 );
-		SpaceShip spaceShip = (SpaceShip) row[0];
-		assertEquals( ship.getModel(), spaceShip.getModel() );
-		assertNotNull( spaceShip.getDimensions() );
-		assertEquals( ship.getDimensions().getWidth(), spaceShip.getDimensions().getWidth() );
-		assertEquals( ship.getDimensions().getLength(), spaceShip.getDimensions().getLength() );
-		assertEquals( ship.getCaptain().getFirstname(), ship.getCaptain().getFirstname() );
-		assertEquals( ship.getCaptain().getLastname(), ship.getCaptain().getLastname() );
-		//FIXME vary depending on databases
-		assertTrue( row[1].toString().startsWith( "50" ) );
-		assertTrue( row[2].toString().startsWith( "500" ) );
-		s.delete( spaceShip.getCaptain() );
-		s.delete( spaceShip );
-		tx.commit();
-		s.close();
-	}
-
-	public void testDiscriminator() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		Dictionary dic = new Dictionary();
-		dic.setName( "Anglais-Francais" );
-		dic.setEditor( "Harrap's" );
-		SynonymousDictionary syn = new SynonymousDictionary();
-		syn.setName( "Synonymes de tous les temps" );
-		syn.setEditor( "Imagination edition" );
-		s.persist( dic );
-		s.persist( syn );
-		tx.commit();
-		s.clear();
-		tx = s.beginTransaction();
-		List results = s.getNamedQuery( "all.dictionaries" ).list();
-		assertEquals( 2, results.size() );
-		assertTrue(
-				results.get( 0 ) instanceof SynonymousDictionary
-						|| results.get( 1 ) instanceof SynonymousDictionary
-		);
-		tx.commit();
-		s.close();
-	}
-
-//	public void testScalarQuery() throws Exception {
-//        Session s = openSession();
-//		Transaction tx;
-//		tx = s.beginTransaction();
-//		Mark bad = new Mark();
-//		bad.value = 5;
-//		Mark good = new Mark();
-//		good.value = 15;
-//		s.persist(bad);
-//		s.persist(good);
-//		tx.commit();
-//		s.clear();
-//		tx = s.beginTransaction();
-//		List result = s.getNamedQuery("average").list();
-//		assertEquals( 1, result.size() );
-//		tx.commit();
-//		s.close();
-//
-//	}
-
-	public void testCache() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		Plane plane = new Plane();
-		plane.setNbrOfSeats( 5 );
-		s.persist( plane );
-		tx.commit();
-		s.close();
-		getSessions().getStatistics().clear();
-		getSessions().getStatistics().setStatisticsEnabled( true );
-		s = openSession();
-		tx = s.beginTransaction();
-		Query query = s.getNamedQuery( "plane.byId" ).setParameter( "id", plane.getId() );
-		plane = (Plane) query.uniqueResult();
-		assertEquals( 1, getSessions().getStatistics().getQueryCachePutCount() );
-		plane = (Plane) s.getNamedQuery( "plane.byId" ).setParameter( "id", plane.getId() ).uniqueResult();
-		assertEquals( 1, getSessions().getStatistics().getQueryCacheHitCount() );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		s.delete( s.get( Plane.class, plane.getId() ) );
-		tx.commit();
-		s.close();
-	}
-
-	public void testEntitySQLOverriding() {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		Chaos chaos = new Chaos();
-		chaos.setSize( 123l );
-		chaos.setId( 1l );
-
-		String lowerName = "hello";
-		String upperName = lowerName.toUpperCase();
-		assertFalse( lowerName.equals( upperName ) );
-
-		chaos.setName( "hello" );
-		chaos.setNickname( "NickName" );
-		s.persist( chaos );
-		s.flush();
-		s.clear();
-		s.getSessionFactory().evict( Chaos.class );
-
-		Chaos resultChaos = (Chaos) s.load( Chaos.class, chaos.getId() );
-		assertEquals( upperName, resultChaos.getName() );
-		assertEquals( "nickname", resultChaos.getNickname() );
-
-		tx.rollback();
-		s.close();
-	}
-
-	public void testCollectionSQLOverriding() {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		Chaos chaos = new Chaos();
-		chaos.setSize( 123l );
-		chaos.setId( 1l );
-
-		chaos.setName( "hello" );
-		s.persist( chaos );
-		CasimirParticle p = new CasimirParticle();
-		p.setId( 1l );
-		s.persist( p );
-		chaos.getParticles().add(p);
-		p = new CasimirParticle();
-		p.setId( 2l );
-		s.persist( p );
-		chaos.getParticles().add(p);
-		s.flush();
-		s.clear();
-		s.getSessionFactory().evict( Chaos.class );
-
-		Chaos resultChaos = (Chaos) s.load( Chaos.class, chaos.getId() );
-		assertEquals( 2, resultChaos.getParticles().size() );
-		resultChaos.getParticles().remove( resultChaos.getParticles().iterator().next() );
-		resultChaos.getParticles().remove( resultChaos.getParticles().iterator().next() );
-		s.flush();
-
-		s.clear();
-		resultChaos = (Chaos) s.load( Chaos.class, chaos.getId() );
-		assertEquals( 0, resultChaos.getParticles().size() );
-
-		tx.rollback();
-		s.close();
-	}
-
-	protected Class[] getMappings() {
-		return new Class[]{
-				Plane.class,
-				A320.class,
-				A320b.class,
-				Night.class,
-				Area.class,
-				SpaceShip.class,
-				Dictionary.class,
-				SynonymousDictionary.class,
-				Captain.class,
-				Chaos.class,
-				CasimirParticle.class
-		};
-	}
-
-	protected String[] getAnnotatedPackages() {
-		return new String[]{
-				"org.hibernate.test.annotations.query"
-		};
-	}
-
-	@Override
-	protected String[] getXmlFiles() {
-		return new String[]{
-				"org/hibernate/test/annotations/query/orm.xml"
-		};
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/QueryAndSQLTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/QueryAndSQLTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/QueryAndSQLTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/QueryAndSQLTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,380 @@
+//$Id$
+package org.hibernate.test.annotations.query;
+
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.List;
+
+import org.hibernate.Query;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.stat.Statistics;
+import org.hibernate.test.annotations.A320;
+import org.hibernate.test.annotations.A320b;
+import org.hibernate.test.annotations.Plane;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * Test named queries
+ *
+ * @author Emmanuel Bernard
+ */
+public class QueryAndSQLTest extends TestCase {
+	public QueryAndSQLTest(String x) {
+		super( x );
+	}
+
+	public void testPackageQueries() throws Exception {
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		Plane p = new Plane();
+		s.persist( p );
+		Query q = s.getNamedQuery( "plane.getAll" );
+		assertEquals( 1, q.list().size() );
+		tx.commit();
+		s.close();
+	}
+
+	public void testClassQueries() throws Exception {
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		Night n = new Night();
+		Calendar c = new GregorianCalendar();
+		c.set( 2000, 2, 2 );
+		Date now = c.getTime();
+		c.add( Calendar.MONTH, -1 );
+		Date aMonthAgo = c.getTime();
+		c.add( Calendar.MONTH, 2 );
+		Date inAMonth = c.getTime();
+		n.setDate( now );
+		n.setDuration( 14 );
+		s.persist( n );
+		tx.commit();
+		s.close();
+		s = openSession();
+		tx = s.beginTransaction();
+		Query q = s.getNamedQuery( "night.moreRecentThan" );
+		q.setDate( "date", aMonthAgo );
+		assertEquals( 1, q.list().size() );
+		q = s.getNamedQuery( "night.moreRecentThan" );
+		q.setDate( "date", inAMonth );
+		assertEquals( 0, q.list().size() );
+		Statistics stats = getSessions().getStatistics();
+		stats.setStatisticsEnabled( true );
+		stats.clear();
+		q = s.getNamedQuery( "night.duration" );
+		q.setParameter( "duration", 14l );
+		assertEquals( 1, q.list().size() );
+		assertEquals( 1, stats.getQueryCachePutCount() );
+		q = s.getNamedQuery( "night.duration" );
+		q.setParameter( "duration", 14l );
+		s.delete( q.list().get( 0 ) );
+		assertEquals( 1, stats.getQueryCacheHitCount() );
+		tx.commit();
+		s.close();
+	}
+
+	public void testSQLQuery() {
+		Night n = new Night();
+		Calendar c = new GregorianCalendar();
+		c.set( 2000, 2, 2 );
+		Date now = c.getTime();
+		c.add( Calendar.MONTH, -1 );
+		Date aMonthAgo = c.getTime();
+		c.add( Calendar.MONTH, 2 );
+		Date inAMonth = c.getTime();
+		n.setDate( now );
+		n.setDuration( 9999 );
+		Area area = new Area();
+		area.setName( "Monceau" );
+
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		s.persist( n );
+		s.persist( area );
+		tx.commit();
+		s.clear();
+		tx = s.beginTransaction();
+		Query q = s.getNamedQuery( "night.getAll.bySQL" );
+		q.setParameter( 0, 9990 );
+		List result = q.list();
+		assertEquals( 1, result.size() );
+		Night n2 = (Night) result.get( 0 );
+		assertEquals( n2.getDuration(), n.getDuration() );
+		List areas = s.getNamedQuery( "getAreaByNative" ).list();
+		assertTrue( 1 == areas.size() );
+		assertEquals( area.getName(), ( (Area) areas.get( 0 ) ).getName() );
+		tx.commit();
+		s.close();
+	}
+
+	public void testSQLQueryWithManyToOne() {
+		Night n = new Night();
+		Calendar c = new GregorianCalendar();
+		c.set( 2000, 2, 2 );
+		Date now = c.getTime();
+		c.add( Calendar.MONTH, -1 );
+		Date aMonthAgo = c.getTime();
+		c.add( Calendar.MONTH, 2 );
+		Date inAMonth = c.getTime();
+		n.setDate( now );
+		n.setDuration( 9999 );
+		Area a = new Area();
+		a.setName( "Paris" );
+		n.setArea( a );
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		s.persist( a );
+		s.persist( n );
+		tx.commit();
+		s.close();
+		s = openSession();
+		tx = s.beginTransaction();
+		Statistics stats = getSessions().getStatistics();
+		stats.setStatisticsEnabled( true );
+		Query q = s.getNamedQuery( "night&areaCached" );
+		List result = q.list();
+		assertEquals( 1, result.size() );
+		assertEquals( 1, stats.getQueryCachePutCount() );
+		q.list();
+		assertEquals( 1, stats.getQueryCacheHitCount() );
+		Night n2 = (Night) ( (Object[]) result.get( 0 ) )[0];
+		assertEquals( n2.getDuration(), n.getDuration() );
+		tx.commit();
+		s.close();
+	}
+
+	public void testImplicitNativeQuery() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		SpaceShip ship = new SpaceShip();
+		ship.setModel( "X-Wing" );
+		ship.setName( "YuBlue" );
+		ship.setSpeed( 2000 );
+		ship.setDimensions( new Dimensions() );
+		s.persist( ship );
+		tx.commit();
+		s.clear();
+		tx = s.beginTransaction();
+		Query q = s.getNamedQuery( "implicitSample" );
+		List result = q.list();
+		assertEquals( 1, result.size() );
+		assertEquals( ship.getModel(), ( (SpaceShip) result.get( 0 ) ).getModel() );
+		s.delete( result.get( 0 ) );
+		tx.commit();
+		s.close();
+	}
+
+	public void testNativeQueryAndCompositePKAndComponents() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		SpaceShip ship = new SpaceShip();
+		ship.setModel( "X-Wing" );
+		ship.setName( "YuBlue" );
+		ship.setSpeed( 2000 );
+		ship.setDimensions( new Dimensions() );
+		ship.getDimensions().setLength( 10 );
+		ship.getDimensions().setWidth( 5 );
+		Captain captain = new Captain();
+		captain.setFirstname( "Luke" );
+		captain.setLastname( "Skywalker" );
+		ship.setCaptain( captain );
+		s.persist( captain );
+		s.persist( ship );
+		tx.commit();
+		s.clear();
+		tx = s.beginTransaction();
+		Query q = s.getNamedQuery( "compositekey" );
+		List result = q.list();
+		assertEquals( 1, result.size() );
+		Object[] row = (Object[]) result.get( 0 );
+		SpaceShip spaceShip = (SpaceShip) row[0];
+		assertEquals( ship.getModel(), spaceShip.getModel() );
+		assertNotNull( spaceShip.getDimensions() );
+		assertEquals( ship.getDimensions().getWidth(), spaceShip.getDimensions().getWidth() );
+		assertEquals( ship.getDimensions().getLength(), spaceShip.getDimensions().getLength() );
+		assertEquals( ship.getCaptain().getFirstname(), ship.getCaptain().getFirstname() );
+		assertEquals( ship.getCaptain().getLastname(), ship.getCaptain().getLastname() );
+		//FIXME vary depending on databases
+		assertTrue( row[1].toString().startsWith( "50" ) );
+		assertTrue( row[2].toString().startsWith( "500" ) );
+		s.delete( spaceShip.getCaptain() );
+		s.delete( spaceShip );
+		tx.commit();
+		s.close();
+	}
+
+	public void testDiscriminator() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		Dictionary dic = new Dictionary();
+		dic.setName( "Anglais-Francais" );
+		dic.setEditor( "Harrap's" );
+		SynonymousDictionary syn = new SynonymousDictionary();
+		syn.setName( "Synonymes de tous les temps" );
+		syn.setEditor( "Imagination edition" );
+		s.persist( dic );
+		s.persist( syn );
+		tx.commit();
+		s.clear();
+		tx = s.beginTransaction();
+		List results = s.getNamedQuery( "all.dictionaries" ).list();
+		assertEquals( 2, results.size() );
+		assertTrue(
+				results.get( 0 ) instanceof SynonymousDictionary
+						|| results.get( 1 ) instanceof SynonymousDictionary
+		);
+		tx.commit();
+		s.close();
+	}
+
+//	public void testScalarQuery() throws Exception {
+//        Session s = openSession();
+//		Transaction tx;
+//		tx = s.beginTransaction();
+//		Mark bad = new Mark();
+//		bad.value = 5;
+//		Mark good = new Mark();
+//		good.value = 15;
+//		s.persist(bad);
+//		s.persist(good);
+//		tx.commit();
+//		s.clear();
+//		tx = s.beginTransaction();
+//		List result = s.getNamedQuery("average").list();
+//		assertEquals( 1, result.size() );
+//		tx.commit();
+//		s.close();
+//
+//	}
+
+	public void testCache() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		Plane plane = new Plane();
+		plane.setNbrOfSeats( 5 );
+		s.persist( plane );
+		tx.commit();
+		s.close();
+		getSessions().getStatistics().clear();
+		getSessions().getStatistics().setStatisticsEnabled( true );
+		s = openSession();
+		tx = s.beginTransaction();
+		Query query = s.getNamedQuery( "plane.byId" ).setParameter( "id", plane.getId() );
+		plane = (Plane) query.uniqueResult();
+		assertEquals( 1, getSessions().getStatistics().getQueryCachePutCount() );
+		plane = (Plane) s.getNamedQuery( "plane.byId" ).setParameter( "id", plane.getId() ).uniqueResult();
+		assertEquals( 1, getSessions().getStatistics().getQueryCacheHitCount() );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		s.delete( s.get( Plane.class, plane.getId() ) );
+		tx.commit();
+		s.close();
+	}
+
+	public void testEntitySQLOverriding() {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		Chaos chaos = new Chaos();
+		chaos.setSize( 123l );
+		chaos.setId( 1l );
+
+		String lowerName = "hello";
+		String upperName = lowerName.toUpperCase();
+		assertFalse( lowerName.equals( upperName ) );
+
+		chaos.setName( "hello" );
+		chaos.setNickname( "NickName" );
+		s.persist( chaos );
+		s.flush();
+		s.clear();
+		s.getSessionFactory().evict( Chaos.class );
+
+		Chaos resultChaos = (Chaos) s.load( Chaos.class, chaos.getId() );
+		assertEquals( upperName, resultChaos.getName() );
+		assertEquals( "nickname", resultChaos.getNickname() );
+
+		tx.rollback();
+		s.close();
+	}
+
+	public void testCollectionSQLOverriding() {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		Chaos chaos = new Chaos();
+		chaos.setSize( 123l );
+		chaos.setId( 1l );
+
+		chaos.setName( "hello" );
+		s.persist( chaos );
+		CasimirParticle p = new CasimirParticle();
+		p.setId( 1l );
+		s.persist( p );
+		chaos.getParticles().add(p);
+		p = new CasimirParticle();
+		p.setId( 2l );
+		s.persist( p );
+		chaos.getParticles().add(p);
+		s.flush();
+		s.clear();
+		s.getSessionFactory().evict( Chaos.class );
+
+		Chaos resultChaos = (Chaos) s.load( Chaos.class, chaos.getId() );
+		assertEquals( 2, resultChaos.getParticles().size() );
+		resultChaos.getParticles().remove( resultChaos.getParticles().iterator().next() );
+		resultChaos.getParticles().remove( resultChaos.getParticles().iterator().next() );
+		s.flush();
+
+		s.clear();
+		resultChaos = (Chaos) s.load( Chaos.class, chaos.getId() );
+		assertEquals( 0, resultChaos.getParticles().size() );
+
+		tx.rollback();
+		s.close();
+	}
+
+	protected Class[] getMappings() {
+		return new Class[]{
+				Plane.class,
+				A320.class,
+				A320b.class,
+				Night.class,
+				Area.class,
+				SpaceShip.class,
+				Dictionary.class,
+				SynonymousDictionary.class,
+				Captain.class,
+				Chaos.class,
+				CasimirParticle.class
+		};
+	}
+
+	protected String[] getAnnotatedPackages() {
+		return new String[]{
+				"org.hibernate.test.annotations.query"
+		};
+	}
+
+	@Override
+	protected String[] getXmlFiles() {
+		return new String[]{
+				"org/hibernate/test/annotations/query/orm.xml"
+		};
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/SpaceShip.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/SpaceShip.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/SpaceShip.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,80 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.query;
-
-import javax.persistence.Entity;
-import javax.persistence.EntityResult;
-import javax.persistence.FetchType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.JoinColumns;
-import javax.persistence.ManyToOne;
-import javax.persistence.NamedNativeQueries;
-import javax.persistence.NamedNativeQuery;
-import javax.persistence.SqlResultSetMapping;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at SqlResultSetMapping(name = "implicit",
-		entities = @EntityResult(entityClass = org.hibernate.test.annotations.query.SpaceShip.class))
- at NamedNativeQueries({
- at NamedNativeQuery(name = "implicitSample", query = "select * from SpaceShip", resultSetMapping = "implicit"),
- at NamedNativeQuery(name = "compositekey",
-		query = "select name, model, speed, lname as lastn, fname as firstn, length, width, length * width as surface, length * width *10 as volume from SpaceShip",
-		resultSetMapping = "compositekey")
-		})
-//we're missins @SqlREsultSetMappings so look at Captain
-public class SpaceShip {
-	private String name;
-	private String model;
-	private double speed;
-	private Captain captain;
-	private Dimensions dimensions;
-
-	@Id
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	@ManyToOne(fetch = FetchType.LAZY)
-	@JoinColumns({
-	@JoinColumn(name = "fname", referencedColumnName = "firstname"),
-	@JoinColumn(name = "lname", referencedColumnName = "lastname")
-			})
-	public Captain getCaptain() {
-		return captain;
-	}
-
-	public void setCaptain(Captain captain) {
-		this.captain = captain;
-	}
-
-	public String getModel() {
-		return model;
-	}
-
-	public void setModel(String model) {
-		this.model = model;
-	}
-
-	public double getSpeed() {
-		return speed;
-	}
-
-	public void setSpeed(double speed) {
-		this.speed = speed;
-	}
-
-	public Dimensions getDimensions() {
-		return dimensions;
-	}
-
-	public void setDimensions(Dimensions dimensions) {
-		this.dimensions = dimensions;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/SpaceShip.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/SpaceShip.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/SpaceShip.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/SpaceShip.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,80 @@
+//$Id$
+package org.hibernate.test.annotations.query;
+
+import javax.persistence.Entity;
+import javax.persistence.EntityResult;
+import javax.persistence.FetchType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinColumns;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedNativeQueries;
+import javax.persistence.NamedNativeQuery;
+import javax.persistence.SqlResultSetMapping;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at SqlResultSetMapping(name = "implicit",
+		entities = @EntityResult(entityClass = org.hibernate.test.annotations.query.SpaceShip.class))
+ at NamedNativeQueries({
+ at NamedNativeQuery(name = "implicitSample", query = "select * from SpaceShip", resultSetMapping = "implicit"),
+ at NamedNativeQuery(name = "compositekey",
+		query = "select name, model, speed, lname as lastn, fname as firstn, length, width, length * width as surface, length * width *10 as volume from SpaceShip",
+		resultSetMapping = "compositekey")
+		})
+//we're missins @SqlREsultSetMappings so look at Captain
+public class SpaceShip {
+	private String name;
+	private String model;
+	private double speed;
+	private Captain captain;
+	private Dimensions dimensions;
+
+	@Id
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	@ManyToOne(fetch = FetchType.LAZY)
+	@JoinColumns({
+	@JoinColumn(name = "fname", referencedColumnName = "firstname"),
+	@JoinColumn(name = "lname", referencedColumnName = "lastname")
+			})
+	public Captain getCaptain() {
+		return captain;
+	}
+
+	public void setCaptain(Captain captain) {
+		this.captain = captain;
+	}
+
+	public String getModel() {
+		return model;
+	}
+
+	public void setModel(String model) {
+		this.model = model;
+	}
+
+	public double getSpeed() {
+		return speed;
+	}
+
+	public void setSpeed(double speed) {
+		this.speed = speed;
+	}
+
+	public Dimensions getDimensions() {
+		return dimensions;
+	}
+
+	public void setDimensions(Dimensions dimensions) {
+		this.dimensions = dimensions;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/SynonymousDictionary.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/SynonymousDictionary.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/SynonymousDictionary.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,13 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.query;
-
-import javax.persistence.DiscriminatorValue;
-import javax.persistence.Entity;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at DiscriminatorValue("Syn")
-public class SynonymousDictionary extends Dictionary {
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/SynonymousDictionary.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/SynonymousDictionary.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/SynonymousDictionary.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/SynonymousDictionary.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,13 @@
+//$Id$
+package org.hibernate.test.annotations.query;
+
+import javax.persistence.DiscriminatorValue;
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at DiscriminatorValue("Syn")
+public class SynonymousDictionary extends Dictionary {
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/orm.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/orm.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/orm.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,24 +0,0 @@
-<?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"
-                 version="1.0"
-        >
-    <named-query name="plane.getAll">
-        <query>select p from Plane p</query>
-    </named-query>
-    <named-native-query name="night.getAll.bySQL" result-set-mapping="sqlmapping">
-        <query>select id, night_duration, night_date as dte, area_id from Night where night_duration > ?</query>
-    </named-native-query>
-    <named-native-query name="getAreaByNative" result-class="org.hibernate.test.annotations.query.Area">
-        <query>select * from tbl_area</query>
-    </named-native-query>
-    <sql-result-set-mapping name="sqlmapping">
-        <entity-result entity-class="org.hibernate.test.annotations.query.Night">
-            <field-result name="id" column="id"/>
-            <field-result name="duration" column="night_duration"/>
-            <field-result name="date" column="dte"/>
-            <field-result name="area" column="area_id"/>
-        </entity-result>
-    </sql-result-set-mapping>
-</entity-mappings>
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/orm.xml (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/orm.xml)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/orm.xml	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/query/orm.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,24 @@
+<?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"
+                 version="1.0"
+        >
+    <named-query name="plane.getAll">
+        <query>select p from Plane p</query>
+    </named-query>
+    <named-native-query name="night.getAll.bySQL" result-set-mapping="sqlmapping">
+        <query>select id, night_duration, night_date as dte, area_id from Night where night_duration > ?</query>
+    </named-native-query>
+    <named-native-query name="getAreaByNative" result-class="org.hibernate.test.annotations.query.Area">
+        <query>select * from tbl_area</query>
+    </named-native-query>
+    <sql-result-set-mapping name="sqlmapping">
+        <entity-result entity-class="org.hibernate.test.annotations.query.Night">
+            <field-result name="id" column="id"/>
+            <field-result name="duration" column="night_duration"/>
+            <field-result name="date" column="dte"/>
+            <field-result name="area" column="area_id"/>
+        </entity-result>
+    </sql-result-set-mapping>
+</entity-mappings>
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/quote (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/quote)

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/quote/QuoteTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/quote/QuoteTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/quote/QuoteTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,35 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.quote;
-
-import org.hibernate.test.annotations.TestCase;
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-
-/**
- * @author Emmanuel Bernard
- */
-public class QuoteTest extends TestCase {
-	public void testQuoteManytoMany() {
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		User u = new User();
-		s.persist( u );
-		Role r = new Role();
-		s.persist( r );
-		u.getRoles().add( r );
-		s.flush();
-		s.clear();
-		u = (User) s.get( User.class, u.getId() );
-		assertEquals( 1, u.getRoles().size() );
-		tx.rollback();
-		String role = User.class.getName() + ".roles";
-		assertEquals( "User_Role", getCfg().getCollectionMapping( role ).getCollectionTable().getName() );
-		s.close();
-	}
-	protected Class[] getMappings() {
-		return new Class[] {
-				User.class,
-				Role.class
-		};
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/quote/QuoteTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/quote/QuoteTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/quote/QuoteTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/quote/QuoteTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,35 @@
+//$Id: $
+package org.hibernate.test.annotations.quote;
+
+import org.hibernate.test.annotations.TestCase;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class QuoteTest extends TestCase {
+	public void testQuoteManytoMany() {
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		User u = new User();
+		s.persist( u );
+		Role r = new Role();
+		s.persist( r );
+		u.getRoles().add( r );
+		s.flush();
+		s.clear();
+		u = (User) s.get( User.class, u.getId() );
+		assertEquals( 1, u.getRoles().size() );
+		tx.rollback();
+		String role = User.class.getName() + ".roles";
+		assertEquals( "User_Role", getCfg().getCollectionMapping( role ).getCollectionTable().getName() );
+		s.close();
+	}
+	protected Class[] getMappings() {
+		return new Class[] {
+				User.class,
+				Role.class
+		};
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/quote/Role.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/quote/Role.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/quote/Role.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,22 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.quote;
-
-import java.io.Serializable;
-import javax.persistence.Id;
-import javax.persistence.Entity;
-import javax.persistence.GenerationType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Table;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Table(name = "`Role`")
-public class Role implements Serializable {
-
-   @Id
-   @GeneratedValue(strategy = GenerationType.AUTO)
-   private long id;
-
-}
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/quote/Role.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/quote/Role.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/quote/Role.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/quote/Role.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,22 @@
+//$Id: $
+package org.hibernate.test.annotations.quote;
+
+import java.io.Serializable;
+import javax.persistence.Id;
+import javax.persistence.Entity;
+import javax.persistence.GenerationType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Table;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Table(name = "`Role`")
+public class Role implements Serializable {
+
+   @Id
+   @GeneratedValue(strategy = GenerationType.AUTO)
+   private long id;
+
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/quote/User.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/quote/User.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/quote/User.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,44 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.quote;
-
-import java.io.Serializable;
-import java.util.Set;
-import java.util.HashSet;
-import javax.persistence.ManyToMany;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Table;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Table(name = "`User`")
-public class User implements Serializable {
-
-   @Id
-   @GeneratedValue(strategy = GenerationType.AUTO)
-   private long id;
-
-   @ManyToMany
-   private Set<Role> roles = new HashSet<Role>();
-
-
-	public long getId() {
-		return id;
-	}
-
-	public void setId(long id) {
-		this.id = id;
-	}
-
-	public Set<Role> getRoles() {
-		return roles;
-	}
-
-	public void setRoles(Set<Role> roles) {
-		this.roles = roles;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/quote/User.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/quote/User.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/quote/User.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/quote/User.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,44 @@
+//$Id: $
+package org.hibernate.test.annotations.quote;
+
+import java.io.Serializable;
+import java.util.Set;
+import java.util.HashSet;
+import javax.persistence.ManyToMany;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Table;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Table(name = "`User`")
+public class User implements Serializable {
+
+   @Id
+   @GeneratedValue(strategy = GenerationType.AUTO)
+   private long id;
+
+   @ManyToMany
+   private Set<Role> roles = new HashSet<Role>();
+
+
+	public long getId() {
+		return id;
+	}
+
+	public void setId(long id) {
+		this.id = id;
+	}
+
+	public Set<Role> getRoles() {
+		return roles;
+	}
+
+	public void setRoles(Set<Role> roles) {
+		this.roles = roles;
+	}
+}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname)

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Bag.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Bag.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Bag.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,56 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.referencedcolumnname;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Bag {
-	private Integer id;
-	private String serial;
-	private Rambler owner;
-
-	public Bag() {
-	}
-
-	public Bag(String serial, Rambler owner) {
-		this.serial = serial;
-		this.owner = owner;
-	}
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	@Column(unique = true)
-	public String getSerial() {
-		return serial;
-	}
-
-	public void setSerial(String serial) {
-		this.serial = serial;
-	}
-
-	@ManyToOne
-	@JoinColumn(referencedColumnName = "fld_name")
-	public Rambler getOwner() {
-		return owner;
-	}
-
-	public void setOwner(Rambler owner) {
-		this.owner = owner;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Bag.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Bag.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Bag.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Bag.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,56 @@
+//$Id$
+package org.hibernate.test.annotations.referencedcolumnname;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Bag {
+	private Integer id;
+	private String serial;
+	private Rambler owner;
+
+	public Bag() {
+	}
+
+	public Bag(String serial, Rambler owner) {
+		this.serial = serial;
+		this.owner = owner;
+	}
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	@Column(unique = true)
+	public String getSerial() {
+		return serial;
+	}
+
+	public void setSerial(String serial) {
+		this.serial = serial;
+	}
+
+	@ManyToOne
+	@JoinColumn(referencedColumnName = "fld_name")
+	public Rambler getOwner() {
+		return owner;
+	}
+
+	public void setOwner(Rambler owner) {
+		this.owner = owner;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Clothes.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Clothes.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Clothes.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,69 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.referencedcolumnname;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Clothes {
-	private Integer id;
-	private String type;
-	private String flavor;
-
-	public Clothes() {
-	}
-
-	public Clothes(String type, String flavor) {
-		this.type = type;
-		this.flavor = flavor;
-	}
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getType() {
-		return type;
-	}
-
-	public void setType(String type) {
-		this.type = type;
-	}
-
-	public String getFlavor() {
-		return flavor;
-	}
-
-	public void setFlavor(String flavor) {
-		this.flavor = flavor;
-	}
-
-	public boolean equals(Object o) {
-		if ( this == o ) return true;
-		if ( !( o instanceof Clothes ) ) return false;
-
-		final Clothes clothes = (Clothes) o;
-
-		if ( !flavor.equals( clothes.flavor ) ) return false;
-		if ( !type.equals( clothes.type ) ) return false;
-
-		return true;
-	}
-
-	public int hashCode() {
-		int result;
-		result = type.hashCode();
-		result = 29 * result + flavor.hashCode();
-		return result;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Clothes.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Clothes.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Clothes.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Clothes.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,69 @@
+//$Id$
+package org.hibernate.test.annotations.referencedcolumnname;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Clothes {
+	private Integer id;
+	private String type;
+	private String flavor;
+
+	public Clothes() {
+	}
+
+	public Clothes(String type, String flavor) {
+		this.type = type;
+		this.flavor = flavor;
+	}
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getType() {
+		return type;
+	}
+
+	public void setType(String type) {
+		this.type = type;
+	}
+
+	public String getFlavor() {
+		return flavor;
+	}
+
+	public void setFlavor(String flavor) {
+		this.flavor = flavor;
+	}
+
+	public boolean equals(Object o) {
+		if ( this == o ) return true;
+		if ( !( o instanceof Clothes ) ) return false;
+
+		final Clothes clothes = (Clothes) o;
+
+		if ( !flavor.equals( clothes.flavor ) ) return false;
+		if ( !type.equals( clothes.type ) ) return false;
+
+		return true;
+	}
+
+	public int hashCode() {
+		int result;
+		result = type.hashCode();
+		result = 29 * result + flavor.hashCode();
+		return result;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/House.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/House.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/House.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,80 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.referencedcolumnname;
-
-import java.io.Serializable;
-import java.util.HashSet;
-import java.util.Set;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.JoinTable;
-import javax.persistence.ManyToMany;
-import javax.persistence.ManyToOne;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class House implements Serializable {
-	private Integer id;
-	private String address;
-	private Postman postman;
-	private Set<Inhabitant> hasInhabitants = new HashSet<Inhabitant>();
-
-	@ManyToOne
-	@JoinColumn(referencedColumnName = "name")
-	public Postman getPostman() {
-		return postman;
-	}
-
-	public void setPostman(Postman postman) {
-		this.postman = postman;
-	}
-
-	@Id
-	@GeneratedValue(strategy = GenerationType.AUTO)
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getAddress() {
-		return address;
-	}
-
-	public void setAddress(String address) {
-		this.address = address;
-	}
-
-	@ManyToMany
-	@JoinTable(joinColumns = @JoinColumn(referencedColumnName = "address"),
-			inverseJoinColumns = @JoinColumn(referencedColumnName = "name")
-	)
-	public Set<Inhabitant> getHasInhabitants() {
-		return hasInhabitants;
-	}
-
-	public void setHasInhabitants(Set<Inhabitant> hasInhabitants) {
-		this.hasInhabitants = hasInhabitants;
-	}
-
-	public boolean equals(Object o) {
-		if ( this == o ) return true;
-		if ( !( o instanceof House ) ) return false;
-
-		final House house = (House) o;
-
-		if ( address != null ? !address.equals( house.address ) : house.address != null ) return false;
-
-		return true;
-	}
-
-	public int hashCode() {
-		return ( address != null ? address.hashCode() : 0 );
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/House.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/House.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/House.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/House.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,80 @@
+//$Id$
+package org.hibernate.test.annotations.referencedcolumnname;
+
+import java.io.Serializable;
+import java.util.HashSet;
+import java.util.Set;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
+import javax.persistence.ManyToMany;
+import javax.persistence.ManyToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class House implements Serializable {
+	private Integer id;
+	private String address;
+	private Postman postman;
+	private Set<Inhabitant> hasInhabitants = new HashSet<Inhabitant>();
+
+	@ManyToOne
+	@JoinColumn(referencedColumnName = "name")
+	public Postman getPostman() {
+		return postman;
+	}
+
+	public void setPostman(Postman postman) {
+		this.postman = postman;
+	}
+
+	@Id
+	@GeneratedValue(strategy = GenerationType.AUTO)
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getAddress() {
+		return address;
+	}
+
+	public void setAddress(String address) {
+		this.address = address;
+	}
+
+	@ManyToMany
+	@JoinTable(joinColumns = @JoinColumn(referencedColumnName = "address"),
+			inverseJoinColumns = @JoinColumn(referencedColumnName = "name")
+	)
+	public Set<Inhabitant> getHasInhabitants() {
+		return hasInhabitants;
+	}
+
+	public void setHasInhabitants(Set<Inhabitant> hasInhabitants) {
+		this.hasInhabitants = hasInhabitants;
+	}
+
+	public boolean equals(Object o) {
+		if ( this == o ) return true;
+		if ( !( o instanceof House ) ) return false;
+
+		final House house = (House) o;
+
+		if ( address != null ? !address.equals( house.address ) : house.address != null ) return false;
+
+		return true;
+	}
+
+	public int hashCode() {
+		return ( address != null ? address.hashCode() : 0 );
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Inhabitant.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Inhabitant.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Inhabitant.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,62 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.referencedcolumnname;
-
-import java.io.Serializable;
-import java.util.HashSet;
-import java.util.Set;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.ManyToMany;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Inhabitant implements Serializable {
-	private Integer id;
-	private String name;
-	private Set<House> livesIn = new HashSet<House>();
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	@ManyToMany(mappedBy = "hasInhabitants")
-	public Set<House> getLivesIn() {
-		return livesIn;
-	}
-
-	public void setLivesIn(Set<House> livesIn) {
-		this.livesIn = livesIn;
-	}
-
-	public boolean equals(Object o) {
-		if ( this == o ) return true;
-		if ( !( o instanceof Inhabitant ) ) return false;
-
-		final Inhabitant inhabitant = (Inhabitant) o;
-
-		if ( name != null ? !name.equals( inhabitant.name ) : inhabitant.name != null ) return false;
-
-		return true;
-	}
-
-	public int hashCode() {
-		return ( name != null ? name.hashCode() : 0 );
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Inhabitant.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Inhabitant.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Inhabitant.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Inhabitant.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,62 @@
+//$Id$
+package org.hibernate.test.annotations.referencedcolumnname;
+
+import java.io.Serializable;
+import java.util.HashSet;
+import java.util.Set;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.ManyToMany;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Inhabitant implements Serializable {
+	private Integer id;
+	private String name;
+	private Set<House> livesIn = new HashSet<House>();
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	@ManyToMany(mappedBy = "hasInhabitants")
+	public Set<House> getLivesIn() {
+		return livesIn;
+	}
+
+	public void setLivesIn(Set<House> livesIn) {
+		this.livesIn = livesIn;
+	}
+
+	public boolean equals(Object o) {
+		if ( this == o ) return true;
+		if ( !( o instanceof Inhabitant ) ) return false;
+
+		final Inhabitant inhabitant = (Inhabitant) o;
+
+		if ( name != null ? !name.equals( inhabitant.name ) : inhabitant.name != null ) return false;
+
+		return true;
+	}
+
+	public int hashCode() {
+		return ( name != null ? name.hashCode() : 0 );
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Item.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Item.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Item.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,23 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.referencedcolumnname;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Item {
-	int id;
-
-	@Id
-	public int getId() {
-		return id;
-	}
-
-	public void setId(int id) {
-		this.id = id;
-	}
-
-}
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Item.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Item.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Item.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Item.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,23 @@
+//$Id: $
+package org.hibernate.test.annotations.referencedcolumnname;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Item {
+	int id;
+
+	@Id
+	public int getId() {
+		return id;
+	}
+
+	public void setId(int id) {
+		this.id = id;
+	}
+
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/ItemCost.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/ItemCost.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/ItemCost.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,55 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.referencedcolumnname;
-
-import java.math.BigDecimal;
-import java.io.Serializable;
-import javax.persistence.Id;
-import javax.persistence.Entity;
-import javax.persistence.ManyToOne;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class ItemCost implements Serializable {
-	int id;
-	Item item;
-	Vendor vendor;
-	BigDecimal cost;
-
-
-	@Id
-	public int getId() {
-		return id;
-	}
-
-	public void setId(int id) {
-		this.id = id;
-	}
-
-	@ManyToOne
-	public Item getItem() {
-		return item;
-	}
-
-	public void setItem(Item item) {
-		this.item = item;
-	}
-
-	@ManyToOne
-	public Vendor getVendor() {
-		return vendor;
-	}
-
-	public void setVendor(Vendor vendor) {
-		this.vendor = vendor;
-	}
-
-	public BigDecimal getCost() {
-		return cost;
-	}
-
-	public void setCost(BigDecimal cost) {
-		this.cost = cost;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/ItemCost.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/ItemCost.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/ItemCost.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/ItemCost.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,55 @@
+//$Id: $
+package org.hibernate.test.annotations.referencedcolumnname;
+
+import java.math.BigDecimal;
+import java.io.Serializable;
+import javax.persistence.Id;
+import javax.persistence.Entity;
+import javax.persistence.ManyToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class ItemCost implements Serializable {
+	int id;
+	Item item;
+	Vendor vendor;
+	BigDecimal cost;
+
+
+	@Id
+	public int getId() {
+		return id;
+	}
+
+	public void setId(int id) {
+		this.id = id;
+	}
+
+	@ManyToOne
+	public Item getItem() {
+		return item;
+	}
+
+	public void setItem(Item item) {
+		this.item = item;
+	}
+
+	@ManyToOne
+	public Vendor getVendor() {
+		return vendor;
+	}
+
+	public void setVendor(Vendor vendor) {
+		this.vendor = vendor;
+	}
+
+	public BigDecimal getCost() {
+		return cost;
+	}
+
+	public void setCost(BigDecimal cost) {
+		this.cost = cost;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Luggage.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Luggage.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Luggage.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,90 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.referencedcolumnname;
-
-import java.io.Serializable;
-import java.util.HashSet;
-import java.util.Set;
-import javax.persistence.CascadeType;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.JoinColumns;
-import javax.persistence.OneToMany;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Luggage implements Serializable {
-	private Integer id;
-	private String owner;
-	private String type;
-	private Set<Clothes> hasInside = new HashSet<Clothes>();
-
-	public Luggage() {
-	}
-
-	public Luggage(String owner, String type) {
-		this.owner = owner;
-		this.type = type;
-	}
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getOwner() {
-		return owner;
-	}
-
-	public void setOwner(String owner) {
-		this.owner = owner;
-	}
-
-	public String getType() {
-		return type;
-	}
-
-	public void setType(String type) {
-		this.type = type;
-	}
-
-	@OneToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
-	@JoinColumns({
-	@JoinColumn(name = "lug_type", referencedColumnName = "type"),
-	@JoinColumn(name = "lug_owner", referencedColumnName = "owner")
-			})
-	public Set<Clothes> getHasInside() {
-		return hasInside;
-	}
-
-	public void setHasInside(Set<Clothes> hasInside) {
-		this.hasInside = hasInside;
-	}
-
-	public boolean equals(Object o) {
-		if ( this == o ) return true;
-		if ( !( o instanceof Luggage ) ) return false;
-
-		final Luggage luggage = (Luggage) o;
-
-		if ( !owner.equals( luggage.owner ) ) return false;
-		if ( !type.equals( luggage.type ) ) return false;
-
-		return true;
-	}
-
-	public int hashCode() {
-		int result;
-		result = owner.hashCode();
-		result = 29 * result + type.hashCode();
-		return result;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Luggage.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Luggage.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Luggage.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Luggage.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,90 @@
+//$Id$
+package org.hibernate.test.annotations.referencedcolumnname;
+
+import java.io.Serializable;
+import java.util.HashSet;
+import java.util.Set;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinColumns;
+import javax.persistence.OneToMany;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Luggage implements Serializable {
+	private Integer id;
+	private String owner;
+	private String type;
+	private Set<Clothes> hasInside = new HashSet<Clothes>();
+
+	public Luggage() {
+	}
+
+	public Luggage(String owner, String type) {
+		this.owner = owner;
+		this.type = type;
+	}
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getOwner() {
+		return owner;
+	}
+
+	public void setOwner(String owner) {
+		this.owner = owner;
+	}
+
+	public String getType() {
+		return type;
+	}
+
+	public void setType(String type) {
+		this.type = type;
+	}
+
+	@OneToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
+	@JoinColumns({
+	@JoinColumn(name = "lug_type", referencedColumnName = "type"),
+	@JoinColumn(name = "lug_owner", referencedColumnName = "owner")
+			})
+	public Set<Clothes> getHasInside() {
+		return hasInside;
+	}
+
+	public void setHasInside(Set<Clothes> hasInside) {
+		this.hasInside = hasInside;
+	}
+
+	public boolean equals(Object o) {
+		if ( this == o ) return true;
+		if ( !( o instanceof Luggage ) ) return false;
+
+		final Luggage luggage = (Luggage) o;
+
+		if ( !owner.equals( luggage.owner ) ) return false;
+		if ( !type.equals( luggage.type ) ) return false;
+
+		return true;
+	}
+
+	public int hashCode() {
+		int result;
+		result = owner.hashCode();
+		result = 29 * result + type.hashCode();
+		return result;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Postman.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Postman.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Postman.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,40 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.referencedcolumnname;
-
-import java.io.Serializable;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Postman implements Serializable {
-	private String name;
-	private String id;
-
-	public Postman() {
-	}
-
-	@Id
-	public String getId() {
-		return id;
-	}
-
-	public void setId(String id) {
-		this.id = id;
-	}
-
-	public Postman(String name, String id) {
-		this.name = name;
-		this.id = id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Postman.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Postman.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Postman.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Postman.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,40 @@
+//$Id$
+package org.hibernate.test.annotations.referencedcolumnname;
+
+import java.io.Serializable;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Postman implements Serializable {
+	private String name;
+	private String id;
+
+	public Postman() {
+	}
+
+	@Id
+	public String getId() {
+		return id;
+	}
+
+	public void setId(String id) {
+		this.id = id;
+	}
+
+	public Postman(String name, String id) {
+		this.name = name;
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Rambler.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Rambler.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Rambler.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,57 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.referencedcolumnname;
-
-import java.io.Serializable;
-import java.util.HashSet;
-import java.util.Set;
-import javax.persistence.CascadeType;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.OneToMany;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Rambler implements Serializable {
-	private Integer id;
-	private String name;
-	private Set<Bag> bags = new HashSet<Bag>();
-
-	public Rambler() {
-	}
-
-	public Rambler(String name) {
-		this.name = name;
-	}
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	@Column(name = "fld_name")
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	@OneToMany(mappedBy = "owner", cascade = {CascadeType.PERSIST, CascadeType.MERGE})
-	public Set<Bag> getBags() {
-		return bags;
-	}
-
-	public void setBags(Set<Bag> bags) {
-		this.bags = bags;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Rambler.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Rambler.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Rambler.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Rambler.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,57 @@
+//$Id$
+package org.hibernate.test.annotations.referencedcolumnname;
+
+import java.io.Serializable;
+import java.util.HashSet;
+import java.util.Set;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Rambler implements Serializable {
+	private Integer id;
+	private String name;
+	private Set<Bag> bags = new HashSet<Bag>();
+
+	public Rambler() {
+	}
+
+	public Rambler(String name) {
+		this.name = name;
+	}
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	@Column(name = "fld_name")
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	@OneToMany(mappedBy = "owner", cascade = {CascadeType.PERSIST, CascadeType.MERGE})
+	public Set<Bag> getBags() {
+		return bags;
+	}
+
+	public void setBags(Set<Bag> bags) {
+		this.bags = bags;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/ReferencedColumnNameTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/ReferencedColumnNameTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/ReferencedColumnNameTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,196 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.referencedcolumnname;
-
-import java.util.Iterator;
-import java.math.BigDecimal;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-import org.hibernate.test.annotations.TestCase;
-
-/**
- * @author Emmanuel Bernard
- */
-public class ReferencedColumnNameTest extends TestCase {
-	public void testManyToOne() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		Postman pm = new Postman( "Bob", "A01" );
-		House house = new House();
-		house.setPostman( pm );
-		house.setAddress( "Rue des prés" );
-		s.persist( pm );
-		s.persist( house );
-		tx.commit();
-		s.close();
-		s = openSession();
-		tx = s.beginTransaction();
-		house = (House) s.get( House.class, house.getId() );
-		assertNotNull( house.getPostman() );
-		assertEquals( "Bob", house.getPostman().getName() );
-		pm = house.getPostman();
-		s.delete( house );
-		s.delete( pm );
-		tx.commit();
-		s.close();
-	}
-
-	public void testOneToMany() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-
-		Rambler rambler = new Rambler( "Emmanuel" );
-		Bag bag = new Bag( "0001", rambler );
-		rambler.getBags().add( bag );
-		s.persist( rambler );
-
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-
-		bag = (Bag) s.createQuery( "select b from Bag b left join fetch b.owner" ).uniqueResult();
-		assertNotNull( bag );
-		assertNotNull( bag.getOwner() );
-
-		rambler = (Rambler) s.createQuery( "select r from Rambler r left join fetch r.bags" ).uniqueResult();
-		assertNotNull( rambler );
-		assertNotNull( rambler.getBags() );
-		assertEquals( 1, rambler.getBags().size() );
-		s.delete( rambler.getBags().iterator().next() );
-		s.delete( rambler );
-
-		tx.commit();
-		s.close();
-	}
-
-	public void testUnidirectionalOneToMany() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-
-		Clothes clothes = new Clothes( "underwear", "interesting" );
-		Luggage luggage = new Luggage( "Emmanuel", "Cabin Luggage" );
-		luggage.getHasInside().add( clothes );
-		s.persist( luggage );
-
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-
-		luggage = (Luggage) s.createQuery( "select l from Luggage l left join fetch l.hasInside" ).uniqueResult();
-		assertNotNull( luggage );
-		assertNotNull( luggage.getHasInside() );
-		assertEquals( 1, luggage.getHasInside().size() );
-
-		s.delete( luggage.getHasInside().iterator().next() );
-		s.delete( luggage );
-
-		tx.commit();
-		s.close();
-	}
-
-	public void testManyToMany() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-
-		House whiteHouse = new House();
-		whiteHouse.setAddress( "1600 Pennsylvania Avenue, Washington" );
-		Inhabitant bill = new Inhabitant();
-		bill.setName( "Bill Clinton" );
-		Inhabitant george = new Inhabitant();
-		george.setName( "George W Bush" );
-		s.persist( george );
-		s.persist( bill );
-		whiteHouse.getHasInhabitants().add( bill );
-		whiteHouse.getHasInhabitants().add( george );
-		//bill.getLivesIn().add( whiteHouse );
-		//george.getLivesIn().add( whiteHouse );
-
-		s.persist( whiteHouse );
-		tx.commit();
-		s = openSession();
-		tx = s.beginTransaction();
-
-		whiteHouse = (House) s.get( House.class, whiteHouse.getId() );
-		assertNotNull( whiteHouse );
-		assertEquals( 2, whiteHouse.getHasInhabitants().size() );
-
-		tx.commit();
-		s.clear();
-		tx = s.beginTransaction();
-		bill = (Inhabitant) s.get( Inhabitant.class, bill.getId() );
-		assertNotNull( bill );
-		assertEquals( 1, bill.getLivesIn().size() );
-		assertEquals( whiteHouse.getAddress(), bill.getLivesIn().iterator().next().getAddress() );
-
-		whiteHouse = bill.getLivesIn().iterator().next();
-		s.delete( whiteHouse );
-		Iterator it = whiteHouse.getHasInhabitants().iterator();
-		while ( it.hasNext() ) {
-			s.delete( it.next() );
-		}
-		tx.commit();
-		s.close();
-	}
-
-	public void testManyToOneReferenceManyToOne() throws Exception {
-		Item item = new Item();
-		item.setId( 1 );
-		Vendor vendor = new Vendor();
-		vendor.setId( 1 );
-		ItemCost cost = new ItemCost();
-		cost.setCost( new BigDecimal(1) );
-		cost.setId( 1 );
-		cost.setItem( item );
-		cost.setVendor( vendor );
-		WarehouseItem wItem = new WarehouseItem();
-		wItem.setDefaultCost( cost );
-		wItem.setId( 1 );
-		wItem.setItem( item );
-		wItem.setQtyInStock( new BigDecimal(1) );
-		wItem.setVendor( vendor );
-		Session s = openSession( );
-		s.getTransaction().begin();
-		s.persist( item );
-		s.persist( vendor );
-		s.persist( cost );
-		s.persist( wItem );
-		s.flush();
-		s.clear();
-		wItem = (WarehouseItem) s.get(WarehouseItem.class, wItem.getId() );
-		assertNotNull( wItem.getDefaultCost().getItem() );
-		s.getTransaction().rollback();
-		s.close();
-	}
-
-	public ReferencedColumnNameTest(String x) {
-		super( x );
-	}
-
-	protected Class[] getMappings() {
-		return new Class[]{
-				House.class,
-				Postman.class,
-				Bag.class,
-				Rambler.class,
-				Luggage.class,
-				Clothes.class,
-				Inhabitant.class,
-				Item.class,
-				ItemCost.class,
-				Vendor.class,
-				WarehouseItem.class
-		};
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/ReferencedColumnNameTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/ReferencedColumnNameTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/ReferencedColumnNameTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/ReferencedColumnNameTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,196 @@
+//$Id$
+package org.hibernate.test.annotations.referencedcolumnname;
+
+import java.util.Iterator;
+import java.math.BigDecimal;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class ReferencedColumnNameTest extends TestCase {
+	public void testManyToOne() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		Postman pm = new Postman( "Bob", "A01" );
+		House house = new House();
+		house.setPostman( pm );
+		house.setAddress( "Rue des prés" );
+		s.persist( pm );
+		s.persist( house );
+		tx.commit();
+		s.close();
+		s = openSession();
+		tx = s.beginTransaction();
+		house = (House) s.get( House.class, house.getId() );
+		assertNotNull( house.getPostman() );
+		assertEquals( "Bob", house.getPostman().getName() );
+		pm = house.getPostman();
+		s.delete( house );
+		s.delete( pm );
+		tx.commit();
+		s.close();
+	}
+
+	public void testOneToMany() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+
+		Rambler rambler = new Rambler( "Emmanuel" );
+		Bag bag = new Bag( "0001", rambler );
+		rambler.getBags().add( bag );
+		s.persist( rambler );
+
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+
+		bag = (Bag) s.createQuery( "select b from Bag b left join fetch b.owner" ).uniqueResult();
+		assertNotNull( bag );
+		assertNotNull( bag.getOwner() );
+
+		rambler = (Rambler) s.createQuery( "select r from Rambler r left join fetch r.bags" ).uniqueResult();
+		assertNotNull( rambler );
+		assertNotNull( rambler.getBags() );
+		assertEquals( 1, rambler.getBags().size() );
+		s.delete( rambler.getBags().iterator().next() );
+		s.delete( rambler );
+
+		tx.commit();
+		s.close();
+	}
+
+	public void testUnidirectionalOneToMany() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+
+		Clothes clothes = new Clothes( "underwear", "interesting" );
+		Luggage luggage = new Luggage( "Emmanuel", "Cabin Luggage" );
+		luggage.getHasInside().add( clothes );
+		s.persist( luggage );
+
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+
+		luggage = (Luggage) s.createQuery( "select l from Luggage l left join fetch l.hasInside" ).uniqueResult();
+		assertNotNull( luggage );
+		assertNotNull( luggage.getHasInside() );
+		assertEquals( 1, luggage.getHasInside().size() );
+
+		s.delete( luggage.getHasInside().iterator().next() );
+		s.delete( luggage );
+
+		tx.commit();
+		s.close();
+	}
+
+	public void testManyToMany() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+
+		House whiteHouse = new House();
+		whiteHouse.setAddress( "1600 Pennsylvania Avenue, Washington" );
+		Inhabitant bill = new Inhabitant();
+		bill.setName( "Bill Clinton" );
+		Inhabitant george = new Inhabitant();
+		george.setName( "George W Bush" );
+		s.persist( george );
+		s.persist( bill );
+		whiteHouse.getHasInhabitants().add( bill );
+		whiteHouse.getHasInhabitants().add( george );
+		//bill.getLivesIn().add( whiteHouse );
+		//george.getLivesIn().add( whiteHouse );
+
+		s.persist( whiteHouse );
+		tx.commit();
+		s = openSession();
+		tx = s.beginTransaction();
+
+		whiteHouse = (House) s.get( House.class, whiteHouse.getId() );
+		assertNotNull( whiteHouse );
+		assertEquals( 2, whiteHouse.getHasInhabitants().size() );
+
+		tx.commit();
+		s.clear();
+		tx = s.beginTransaction();
+		bill = (Inhabitant) s.get( Inhabitant.class, bill.getId() );
+		assertNotNull( bill );
+		assertEquals( 1, bill.getLivesIn().size() );
+		assertEquals( whiteHouse.getAddress(), bill.getLivesIn().iterator().next().getAddress() );
+
+		whiteHouse = bill.getLivesIn().iterator().next();
+		s.delete( whiteHouse );
+		Iterator it = whiteHouse.getHasInhabitants().iterator();
+		while ( it.hasNext() ) {
+			s.delete( it.next() );
+		}
+		tx.commit();
+		s.close();
+	}
+
+	public void testManyToOneReferenceManyToOne() throws Exception {
+		Item item = new Item();
+		item.setId( 1 );
+		Vendor vendor = new Vendor();
+		vendor.setId( 1 );
+		ItemCost cost = new ItemCost();
+		cost.setCost( new BigDecimal(1) );
+		cost.setId( 1 );
+		cost.setItem( item );
+		cost.setVendor( vendor );
+		WarehouseItem wItem = new WarehouseItem();
+		wItem.setDefaultCost( cost );
+		wItem.setId( 1 );
+		wItem.setItem( item );
+		wItem.setQtyInStock( new BigDecimal(1) );
+		wItem.setVendor( vendor );
+		Session s = openSession( );
+		s.getTransaction().begin();
+		s.persist( item );
+		s.persist( vendor );
+		s.persist( cost );
+		s.persist( wItem );
+		s.flush();
+		s.clear();
+		wItem = (WarehouseItem) s.get(WarehouseItem.class, wItem.getId() );
+		assertNotNull( wItem.getDefaultCost().getItem() );
+		s.getTransaction().rollback();
+		s.close();
+	}
+
+	public ReferencedColumnNameTest(String x) {
+		super( x );
+	}
+
+	protected Class[] getMappings() {
+		return new Class[]{
+				House.class,
+				Postman.class,
+				Bag.class,
+				Rambler.class,
+				Luggage.class,
+				Clothes.class,
+				Inhabitant.class,
+				Item.class,
+				ItemCost.class,
+				Vendor.class,
+				WarehouseItem.class
+		};
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Vendor.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Vendor.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Vendor.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,24 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.referencedcolumnname;
-
-import javax.persistence.Id;
-import javax.persistence.Entity;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Vendor {
-	int id;
-
-	@Id
-	public int getId() {
-		return id;
-	}
-
-	public void setId(int id) {
-		this.id = id;
-	}
-
-}
-

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Vendor.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Vendor.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Vendor.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/Vendor.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,24 @@
+//$Id: $
+package org.hibernate.test.annotations.referencedcolumnname;
+
+import javax.persistence.Id;
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Vendor {
+	int id;
+
+	@Id
+	public int getId() {
+		return id;
+	}
+
+	public void setId(int id) {
+		this.id = id;
+	}
+
+}
+

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/WarehouseItem.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/WarehouseItem.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/WarehouseItem.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,71 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.referencedcolumnname;
-
-import java.math.BigDecimal;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.JoinColumns;
-import javax.persistence.ManyToOne;
-import javax.persistence.JoinColumn;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class WarehouseItem {
-
-	int id;
-	Item item;
-	Vendor vendor;
-	ItemCost defaultCost;
-	BigDecimal qtyInStock;
-
-	@Id
-	public int getId() {
-		return id;
-	}
-
-	public void setId(int id) {
-		this.id = id;
-	}
-
-	public BigDecimal getQtyInStock() {
-		return qtyInStock;
-	}
-
-	public void setQtyInStock(BigDecimal qtyInStock) {
-		this.qtyInStock = qtyInStock;
-	}
-
-	@ManyToOne
-	public Item getItem() {
-		return item;
-	}
-
-	public void setItem(Item item) {
-		this.item = item;
-	}
-
-	@ManyToOne
-	public Vendor getVendor() {
-		return vendor;
-	}
-
-	public void setVendor(Vendor vendor) {
-		this.vendor = vendor;
-	}
-
-    @ManyToOne
-	@JoinColumns({
-     	@JoinColumn(name="vendor_id", referencedColumnName="vendor_id", insertable=false, updatable=false),
-     	@JoinColumn(name="item_id", referencedColumnName="item_id", insertable=false, updatable=false)
-     })
-	public ItemCost getDefaultCost() {
-		return defaultCost;
-	}
-
-	public void setDefaultCost(ItemCost defaultCost) {
-		this.defaultCost = defaultCost;
-	}
-}
-

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/WarehouseItem.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/WarehouseItem.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/WarehouseItem.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/referencedcolumnname/WarehouseItem.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,71 @@
+//$Id: $
+package org.hibernate.test.annotations.referencedcolumnname;
+
+import java.math.BigDecimal;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.JoinColumns;
+import javax.persistence.ManyToOne;
+import javax.persistence.JoinColumn;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class WarehouseItem {
+
+	int id;
+	Item item;
+	Vendor vendor;
+	ItemCost defaultCost;
+	BigDecimal qtyInStock;
+
+	@Id
+	public int getId() {
+		return id;
+	}
+
+	public void setId(int id) {
+		this.id = id;
+	}
+
+	public BigDecimal getQtyInStock() {
+		return qtyInStock;
+	}
+
+	public void setQtyInStock(BigDecimal qtyInStock) {
+		this.qtyInStock = qtyInStock;
+	}
+
+	@ManyToOne
+	public Item getItem() {
+		return item;
+	}
+
+	public void setItem(Item item) {
+		this.item = item;
+	}
+
+	@ManyToOne
+	public Vendor getVendor() {
+		return vendor;
+	}
+
+	public void setVendor(Vendor vendor) {
+		this.vendor = vendor;
+	}
+
+    @ManyToOne
+	@JoinColumns({
+     	@JoinColumn(name="vendor_id", referencedColumnName="vendor_id", insertable=false, updatable=false),
+     	@JoinColumn(name="item_id", referencedColumnName="item_id", insertable=false, updatable=false)
+     })
+	public ItemCost getDefaultCost() {
+		return defaultCost;
+	}
+
+	public void setDefaultCost(ItemCost defaultCost) {
+		this.defaultCost = defaultCost;
+	}
+}
+

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection)

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/Administration.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/Administration.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/Administration.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,77 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.reflection;
-
-import javax.persistence.Basic;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.JoinColumns;
-import javax.persistence.OneToOne;
-import javax.persistence.PostLoad;
-import javax.persistence.SecondaryTable;
-import javax.persistence.Table;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity(name = "JavaAdministration")
- at Table(name = "JavaAdministration")
- at SecondaryTable(name = "Extend")
-public class Administration extends Organization {
-	@Id
-	private Integer id;
-	private String firstname;
-	private String lastname;
-	private String address;
-	private Integer version;
-	@Basic
-	private String transientField;
-	@OneToOne
-	@JoinColumns({@JoinColumn(name = "busNumber_fk"), @JoinColumn(name = "busDriver_fk")})
-	private BusTrip defaultBusTrip;
-
-	public String getAddress() {
-		return address;
-	}
-
-	public void setAddress(String address) {
-		this.address = address;
-	}
-
-	public Integer getVersion() {
-		return version;
-	}
-
-	public void setVersion(Integer version) {
-		this.version = version;
-	}
-
-	public String getFirstname() {
-		return firstname;
-	}
-
-	public void setFirstname(String firstname) {
-		this.firstname = firstname;
-	}
-
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getLastname() {
-		return lastname;
-	}
-
-	public void setLastname(String lastname) {
-		this.lastname = lastname;
-	}
-
-	@PostLoad
-	public void calculate() {
-		//...
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/Administration.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/Administration.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/Administration.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/Administration.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,77 @@
+//$Id: $
+package org.hibernate.test.annotations.reflection;
+
+import javax.persistence.Basic;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinColumns;
+import javax.persistence.OneToOne;
+import javax.persistence.PostLoad;
+import javax.persistence.SecondaryTable;
+import javax.persistence.Table;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity(name = "JavaAdministration")
+ at Table(name = "JavaAdministration")
+ at SecondaryTable(name = "Extend")
+public class Administration extends Organization {
+	@Id
+	private Integer id;
+	private String firstname;
+	private String lastname;
+	private String address;
+	private Integer version;
+	@Basic
+	private String transientField;
+	@OneToOne
+	@JoinColumns({@JoinColumn(name = "busNumber_fk"), @JoinColumn(name = "busDriver_fk")})
+	private BusTrip defaultBusTrip;
+
+	public String getAddress() {
+		return address;
+	}
+
+	public void setAddress(String address) {
+		this.address = address;
+	}
+
+	public Integer getVersion() {
+		return version;
+	}
+
+	public void setVersion(Integer version) {
+		this.version = version;
+	}
+
+	public String getFirstname() {
+		return firstname;
+	}
+
+	public void setFirstname(String firstname) {
+		this.firstname = firstname;
+	}
+
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getLastname() {
+		return lastname;
+	}
+
+	public void setLastname(String lastname) {
+		this.lastname = lastname;
+	}
+
+	@PostLoad
+	public void calculate() {
+		//...
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/Availability.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/Availability.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/Availability.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,10 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.reflection;
-
-/**
- * @author Emmanuel Bernard
- */
-public enum Availability {
-	ON_DUTY,
-	NO_SERVICE
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/Availability.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/Availability.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/Availability.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/Availability.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,10 @@
+//$Id: $
+package org.hibernate.test.annotations.reflection;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public enum Availability {
+	ON_DUTY,
+	NO_SERVICE
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/BusTrip.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/BusTrip.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/BusTrip.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,54 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.reflection;
-
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import javax.persistence.EmbeddedId;
-import javax.persistence.Entity;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class BusTrip {
-	private BusTripPk id;
-	private Availability status;
-	private byte[] serial;
-	private Date terminusTime;
-	private Map<String, SocialSecurityPhysicalAccount> players;
-	private List roads;
-
-	@EmbeddedId
-	public BusTripPk getId() {
-		return id;
-	}
-
-	public void setId(BusTripPk id) {
-		this.id = id;
-	}
-
-	public Availability getStatus() {
-		return status;
-	}
-
-	public void setStatus(Availability status) {
-		this.status = status;
-	}
-
-	public byte[] getSerial() {
-		return serial;
-	}
-
-	public void setSerial(byte[] serial) {
-		this.serial = serial;
-	}
-
-	public Date getTerminusTime() {
-		return terminusTime;
-	}
-
-	public void setTerminusTime(Date terminusTime) {
-		this.terminusTime = terminusTime;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/BusTrip.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/BusTrip.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/BusTrip.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/BusTrip.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,54 @@
+//$Id: $
+package org.hibernate.test.annotations.reflection;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import javax.persistence.EmbeddedId;
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class BusTrip {
+	private BusTripPk id;
+	private Availability status;
+	private byte[] serial;
+	private Date terminusTime;
+	private Map<String, SocialSecurityPhysicalAccount> players;
+	private List roads;
+
+	@EmbeddedId
+	public BusTripPk getId() {
+		return id;
+	}
+
+	public void setId(BusTripPk id) {
+		this.id = id;
+	}
+
+	public Availability getStatus() {
+		return status;
+	}
+
+	public void setStatus(Availability status) {
+		this.status = status;
+	}
+
+	public byte[] getSerial() {
+		return serial;
+	}
+
+	public void setSerial(byte[] serial) {
+		this.serial = serial;
+	}
+
+	public Date getTerminusTime() {
+		return terminusTime;
+	}
+
+	public void setTerminusTime(Date terminusTime) {
+		this.terminusTime = terminusTime;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/BusTripPk.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/BusTripPk.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/BusTripPk.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,26 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.reflection;
-
-/**
- * @author Emmanuel Bernard
- */
-public class BusTripPk {
-	private String busNumber;
-	private String busDriver;
-
-	public String getBusDriver() {
-		return busDriver;
-	}
-
-	public void setBusDriver(String busDriver) {
-		this.busDriver = busDriver;
-	}
-
-	public String getBusNumber() {
-		return busNumber;
-	}
-
-	public void setBusNumber(String busNumber) {
-		this.busNumber = busNumber;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/BusTripPk.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/BusTripPk.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/BusTripPk.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/BusTripPk.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,26 @@
+//$Id: $
+package org.hibernate.test.annotations.reflection;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class BusTripPk {
+	private String busNumber;
+	private String busDriver;
+
+	public String getBusDriver() {
+		return busDriver;
+	}
+
+	public void setBusDriver(String busDriver) {
+		this.busDriver = busDriver;
+	}
+
+	public String getBusNumber() {
+		return busNumber;
+	}
+
+	public void setBusNumber(String busNumber) {
+		this.busNumber = busNumber;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/Competition.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/Competition.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/Competition.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,11 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.reflection;
-
-import javax.persistence.MappedSuperclass;
-
-/**
- * @author Emmanuel Bernard
- */
- at MappedSuperclass
-public class Competition {
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/Competition.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/Competition.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/Competition.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/Competition.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,11 @@
+//$Id: $
+package org.hibernate.test.annotations.reflection;
+
+import javax.persistence.MappedSuperclass;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at MappedSuperclass
+public class Competition {
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/EJB3OverridenAnnotationReaderTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/EJB3OverridenAnnotationReaderTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/EJB3OverridenAnnotationReaderTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,434 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.reflection;
-
-import java.io.BufferedInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.List;
-import javax.persistence.AssociationOverrides;
-import javax.persistence.AttributeOverrides;
-import javax.persistence.Basic;
-import javax.persistence.Column;
-import javax.persistence.DiscriminatorColumn;
-import javax.persistence.DiscriminatorValue;
-import javax.persistence.Embedded;
-import javax.persistence.EmbeddedId;
-import javax.persistence.Entity;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
-import javax.persistence.ExcludeDefaultListeners;
-import javax.persistence.ExcludeSuperclassListeners;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.IdClass;
-import javax.persistence.Inheritance;
-import javax.persistence.InheritanceType;
-import javax.persistence.JoinColumns;
-import javax.persistence.JoinTable;
-import javax.persistence.Lob;
-import javax.persistence.ManyToMany;
-import javax.persistence.MapKey;
-import javax.persistence.MappedSuperclass;
-import javax.persistence.NamedNativeQueries;
-import javax.persistence.NamedQueries;
-import javax.persistence.OneToMany;
-import javax.persistence.OneToOne;
-import javax.persistence.OrderBy;
-import javax.persistence.PrimaryKeyJoinColumn;
-import javax.persistence.PrimaryKeyJoinColumns;
-import javax.persistence.SecondaryTable;
-import javax.persistence.SecondaryTables;
-import javax.persistence.SequenceGenerator;
-import javax.persistence.SqlResultSetMappings;
-import javax.persistence.Table;
-import javax.persistence.TableGenerator;
-import javax.persistence.Temporal;
-import javax.persistence.TemporalType;
-import javax.persistence.Transient;
-import javax.persistence.Version;
-import javax.persistence.PrePersist;
-import javax.persistence.EntityListeners;
-import javax.persistence.PostLoad;
-import javax.persistence.PostPersist;
-
-import junit.framework.TestCase;
-import org.dom4j.DocumentException;
-import org.dom4j.io.SAXReader;
-import org.hibernate.annotations.Columns;
-import org.hibernate.cfg.EJB3DTDEntityResolver;
-import org.hibernate.cfg.annotations.reflection.EJB3OverridenAnnotationReader;
-import org.hibernate.cfg.annotations.reflection.XMLContext;
-import org.hibernate.util.XMLHelper;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
-import org.xml.sax.SAXNotSupportedException;
-
-
-/**
- * @author Emmanuel Bernard
- */
-public class EJB3OverridenAnnotationReaderTest extends TestCase {
-	public void testMappedSuperclassAnnotations() throws Exception {
-		XMLContext context = buildContext(
-				"org/hibernate/test/annotations/reflection/metadata-complete.xml" );
-		EJB3OverridenAnnotationReader reader = new EJB3OverridenAnnotationReader( Organization.class, context );
-		assertTrue( reader.isAnnotationPresent( MappedSuperclass.class ) );
-	}
-
-	public void testEntityRelatedAnnotations() throws Exception {
-		XMLContext context = buildContext( "org/hibernate/test/annotations/reflection/orm.xml" );
-		EJB3OverridenAnnotationReader reader = new EJB3OverridenAnnotationReader( Administration.class, context );
-		assertNotNull( reader.getAnnotation( Entity.class ) );
-		assertEquals(
-				"Default value in xml entity should not override @Entity.name", "JavaAdministration",
-				reader.getAnnotation( Entity.class ).name()
-		);
-		assertNotNull( reader.getAnnotation( Table.class ) );
-		assertEquals( "@Table not overriden", "tbl_admin", reader.getAnnotation( Table.class ).name() );
-		assertEquals( "Default schema not overriden", "myschema", reader.getAnnotation( Table.class ).schema() );
-		assertEquals(
-				"Proper @Table.uniqueConstraints", 2,
-				reader.getAnnotation( Table.class ).uniqueConstraints()[0].columnNames().length
-		);
-		String columnName = reader.getAnnotation( Table.class ).uniqueConstraints()[0].columnNames()[0];
-		assertTrue(
-				"Proper @Table.uniqueConstraints", "firstname".equals( columnName ) || "lastname".equals( columnName )
-		);
-		assertNull( "Both Java and XML used", reader.getAnnotation( SecondaryTable.class ) );
-		assertNotNull( "XML does not work", reader.getAnnotation( SecondaryTables.class ) );
-		SecondaryTable[] tables = reader.getAnnotation( SecondaryTables.class ).value();
-		assertEquals( 1, tables.length );
-		assertEquals( "admin2", tables[0].name() );
-		assertEquals( "unique constraints ignored", 1, tables[0].uniqueConstraints().length );
-		assertEquals( "pk join column ignored", 1, tables[0].pkJoinColumns().length );
-		assertEquals( "pk join column ignored", "admin_id", tables[0].pkJoinColumns()[0].name() );
-		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()
-		);
-		assertEquals(
-				"Java annotation not taken into account", "matchschema", reader.getAnnotation( Table.class ).schema()
-		);
-		assertEquals( "Overriding not taken into account", "mycatalog", reader.getAnnotation( Table.class ).catalog() );
-		assertNotNull( "SecondaryTable swallowed", reader.getAnnotation( SecondaryTables.class ) );
-		assertEquals(
-				"Default schema not taken into account", "myschema",
-				reader.getAnnotation( SecondaryTables.class ).value()[0].schema()
-		);
-		assertNotNull( reader.getAnnotation( Inheritance.class ) );
-		assertEquals(
-				"inheritance strategy not overriden", InheritanceType.JOINED,
-				reader.getAnnotation( Inheritance.class ).strategy()
-		);
-		assertNotNull( "NamedQuery not overriden", reader.getAnnotation( NamedQueries.class ) );
-		assertEquals( "No deduplication", 3, reader.getAnnotation( NamedQueries.class ).value().length );
-		assertEquals(
-				"deduplication kept the Java version", 1,
-				reader.getAnnotation( NamedQueries.class ).value()[1].hints().length
-		);
-		assertEquals(
-				"org.hibernate.timeout", reader.getAnnotation( NamedQueries.class ).value()[1].hints()[0].name()
-		);
-		assertNotNull( "NamedNativeQuery not overriden", reader.getAnnotation( NamedNativeQueries.class ) );
-		assertEquals( "No deduplication", 3, reader.getAnnotation( NamedNativeQueries.class ).value().length );
-		assertEquals(
-				"deduplication kept the Java version", 1,
-				reader.getAnnotation( NamedNativeQueries.class ).value()[1].hints().length
-		);
-		assertEquals(
-				"org.hibernate.timeout", reader.getAnnotation( NamedNativeQueries.class ).value()[1].hints()[0].name()
-		);
-		assertNotNull( reader.getAnnotation( SqlResultSetMappings.class ) );
-		assertEquals(
-				"competitor1Point", reader.getAnnotation( SqlResultSetMappings.class ).value()[0].columns()[0].name()
-		);
-		assertEquals(
-				"competitor1Point",
-				reader.getAnnotation( SqlResultSetMappings.class ).value()[0].entities()[0].fields()[0].column()
-		);
-		assertNotNull( reader.getAnnotation( ExcludeSuperclassListeners.class ) );
-		assertNotNull( reader.getAnnotation( ExcludeDefaultListeners.class ) );
-
-		reader = new EJB3OverridenAnnotationReader( Competition.class, context );
-		assertNotNull( reader.getAnnotation( MappedSuperclass.class ) );
-
-		reader = new EJB3OverridenAnnotationReader( TennisMatch.class, context );
-		assertNull( "Mutualize PKJC into PKJCs", reader.getAnnotation( PrimaryKeyJoinColumn.class ) );
-		assertNotNull( reader.getAnnotation( PrimaryKeyJoinColumns.class ) );
-		assertEquals(
-				"PrimaryKeyJoinColumn overrden", "id",
-				reader.getAnnotation( PrimaryKeyJoinColumns.class ).value()[0].name()
-		);
-		assertNotNull( reader.getAnnotation( AttributeOverrides.class ) );
-		assertEquals( "Wrong deduplication", 3, reader.getAnnotation( AttributeOverrides.class ).value().length );
-		assertEquals(
-				"Wrong priority (XML vs java annotations)", "fld_net",
-				reader.getAnnotation( AttributeOverrides.class ).value()[0].column().name()
-		);
-		assertEquals(
-				"Column mapping", 2, reader.getAnnotation( AttributeOverrides.class ).value()[1].column().scale()
-		);
-		assertEquals(
-				"Column mapping", true, reader.getAnnotation( AttributeOverrides.class ).value()[1].column().unique()
-		);
-		assertNotNull( reader.getAnnotation( AssociationOverrides.class ) );
-		assertEquals( "no XML processing", 1, reader.getAnnotation( AssociationOverrides.class ).value().length );
-		assertEquals(
-				"wrong xml processing", "id",
-				reader.getAnnotation( AssociationOverrides.class ).value()[0].joinColumns()[0].referencedColumnName()
-		);
-
-
-		reader = new EJB3OverridenAnnotationReader( SocialSecurityPhysicalAccount.class, context );
-		assertNotNull( reader.getAnnotation( IdClass.class ) );
-		assertEquals( "id-class not used", SocialSecurityNumber.class, reader.getAnnotation( IdClass.class ).value() );
-		assertEquals(
-				"discriminator-value not used", "Physical", reader.getAnnotation( DiscriminatorValue.class ).value()
-		);
-		assertNotNull( "discriminator-column not used", reader.getAnnotation( DiscriminatorColumn.class ) );
-		assertEquals(
-				"discriminator-column.name default value broken", "DTYPE",
-				reader.getAnnotation( DiscriminatorColumn.class ).name()
-		);
-		assertEquals(
-				"discriminator-column.length broken", 34, reader.getAnnotation( DiscriminatorColumn.class ).length()
-		);
-	}
-
-	public void testEntityRelatedAnnotationsMetadataComplete() throws Exception {
-		XMLContext context = buildContext(
-				"org/hibernate/test/annotations/reflection/metadata-complete.xml" );
-		EJB3OverridenAnnotationReader reader = new EJB3OverridenAnnotationReader( Administration.class, context );
-		assertNotNull( reader.getAnnotation( Entity.class ) );
-		assertEquals(
-				"Metadata complete should ignore java annotations", "", reader.getAnnotation( Entity.class ).name()
-		);
-		assertNotNull( reader.getAnnotation( Table.class ) );
-		assertEquals( "@Table should not be used", "", reader.getAnnotation( Table.class ).name() );
-		assertEquals( "Default schema not overriden", "myschema", reader.getAnnotation( Table.class ).schema() );
-
-		reader = new EJB3OverridenAnnotationReader( Match.class, context );
-		assertNotNull( reader.getAnnotation( Table.class ) );
-		assertEquals( "@Table should not be used", "", reader.getAnnotation( Table.class ).name() );
-		assertEquals( "Overriding not taken into account", "myschema", reader.getAnnotation( Table.class ).schema() );
-		assertEquals( "Overriding not taken into account", "mycatalog", reader.getAnnotation( Table.class ).catalog() );
-		assertNull( "Ignore Java annotation", reader.getAnnotation( SecondaryTable.class ) );
-		assertNull( "Ignore Java annotation", reader.getAnnotation( SecondaryTables.class ) );
-		assertNull( "Ignore Java annotation", reader.getAnnotation( Inheritance.class ) );
-		assertNull( reader.getAnnotation( NamedQueries.class ) );
-		assertNull( reader.getAnnotation( NamedNativeQueries.class ) );
-
-		reader = new EJB3OverridenAnnotationReader( TennisMatch.class, context );
-		assertNull( reader.getAnnotation( PrimaryKeyJoinColumn.class ) );
-		assertNull( reader.getAnnotation( PrimaryKeyJoinColumns.class ) );
-
-		reader = new EJB3OverridenAnnotationReader( Competition.class, context );
-		assertNull( reader.getAnnotation( MappedSuperclass.class ) );
-
-		reader = new EJB3OverridenAnnotationReader( SocialSecurityMoralAccount.class, context );
-		assertNull( reader.getAnnotation( IdClass.class ) );
-		assertNull( reader.getAnnotation( DiscriminatorValue.class ) );
-		assertNull( reader.getAnnotation( DiscriminatorColumn.class ) );
-		assertNull( reader.getAnnotation( SequenceGenerator.class ) );
-		assertNull( reader.getAnnotation( TableGenerator.class ) );
-	}
-
-	public void testIdRelatedAnnotations() throws Exception {
-		XMLContext context = buildContext( "org/hibernate/test/annotations/reflection/orm.xml" );
-		Method method = Administration.class.getDeclaredMethod( "getId" );
-		EJB3OverridenAnnotationReader reader = new EJB3OverridenAnnotationReader( method, context );
-		assertNull( reader.getAnnotation( Id.class ) );
-		assertNull( reader.getAnnotation( Column.class ) );
-		Field field = Administration.class.getDeclaredField( "id" );
-		reader = new EJB3OverridenAnnotationReader( field, context );
-		assertNotNull( reader.getAnnotation( Id.class ) );
-		assertNotNull( reader.getAnnotation( GeneratedValue.class ) );
-		assertEquals( GenerationType.SEQUENCE, reader.getAnnotation( GeneratedValue.class ).strategy() );
-		assertEquals( "generator", reader.getAnnotation( GeneratedValue.class ).generator() );
-		assertNotNull( reader.getAnnotation( SequenceGenerator.class ) );
-		assertEquals( "seq", reader.getAnnotation( SequenceGenerator.class ).sequenceName() );
-		assertNotNull( reader.getAnnotation( Columns.class ) );
-		assertEquals( 1, reader.getAnnotation( Columns.class ).columns().length );
-		assertEquals( "fld_id", reader.getAnnotation( Columns.class ).columns()[0].name() );
-		assertNotNull( reader.getAnnotation( Temporal.class ) );
-		assertEquals( TemporalType.DATE, reader.getAnnotation( Temporal.class ).value() );
-
-		context = buildContext(
-				"org/hibernate/test/annotations/reflection/metadata-complete.xml" );
-		method = Administration.class.getDeclaredMethod( "getId" );
-		reader = new EJB3OverridenAnnotationReader( method, context );
-		assertNotNull(
-				"Default access type when not defined in metadata complete should be property",
-				reader.getAnnotation( Id.class )
-		);
-		field = Administration.class.getDeclaredField( "id" );
-		reader = new EJB3OverridenAnnotationReader( field, context );
-		assertNull(
-				"Default access type when not defined in metadata complete should be property",
-				reader.getAnnotation( Id.class )
-		);
-
-		method = BusTrip.class.getDeclaredMethod( "getId" );
-		reader = new EJB3OverridenAnnotationReader( method, context );
-		assertNull( reader.getAnnotation( EmbeddedId.class ) );
-		field = BusTrip.class.getDeclaredField( "id" );
-		reader = new EJB3OverridenAnnotationReader( field, context );
-		assertNotNull( reader.getAnnotation( EmbeddedId.class ) );
-		assertNotNull( reader.getAnnotation( AttributeOverrides.class ) );
-		assertEquals( 1, reader.getAnnotation( AttributeOverrides.class ).value().length );
-	}
-
-	public void testBasicRelatedAnnotations() throws Exception {
-		XMLContext context = buildContext(
-				"org/hibernate/test/annotations/reflection/metadata-complete.xml" );
-		Field field = BusTrip.class.getDeclaredField( "status" );
-		EJB3OverridenAnnotationReader reader = new EJB3OverridenAnnotationReader( field, context );
-		assertNotNull( reader.getAnnotation( Enumerated.class ) );
-		assertEquals( EnumType.STRING, reader.getAnnotation( Enumerated.class ).value() );
-		assertEquals( false, reader.getAnnotation( Basic.class ).optional() );
-		field = BusTrip.class.getDeclaredField( "serial" );
-		reader = new EJB3OverridenAnnotationReader( field, context );
-		assertNotNull( reader.getAnnotation( Lob.class ) );
-		assertEquals( "serialbytes", reader.getAnnotation( Columns.class ).columns()[0].name() );
-		field = BusTrip.class.getDeclaredField( "terminusTime" );
-		reader = new EJB3OverridenAnnotationReader( field, context );
-		assertNotNull( reader.getAnnotation( Temporal.class ) );
-		assertEquals( TemporalType.TIMESTAMP, reader.getAnnotation( Temporal.class ).value() );
-		assertEquals( FetchType.LAZY, reader.getAnnotation( Basic.class ).fetch() );
-
-		field = BusTripPk.class.getDeclaredField( "busDriver" );
-		reader = new EJB3OverridenAnnotationReader( field, context );
-		assertNotNull( reader.isAnnotationPresent( Basic.class ) );
-	}
-
-	public void testVersionRelatedAnnotations() throws Exception {
-		XMLContext context = buildContext( "org/hibernate/test/annotations/reflection/orm.xml" );
-		Method method = Administration.class.getDeclaredMethod( "getVersion" );
-		EJB3OverridenAnnotationReader reader = new EJB3OverridenAnnotationReader( method, context );
-		assertNotNull( reader.getAnnotation( Version.class ) );
-
-		Field field = Match.class.getDeclaredField( "version" );
-		reader = new EJB3OverridenAnnotationReader( field, context );
-		assertNotNull( reader.getAnnotation( Version.class ) );
-	}
-
-	public void testTransientAndEmbeddedRelatedAnnotations() throws Exception {
-		XMLContext context = buildContext( "org/hibernate/test/annotations/reflection/orm.xml" );
-
-		Field field = Administration.class.getDeclaredField( "transientField" );
-		EJB3OverridenAnnotationReader reader = new EJB3OverridenAnnotationReader( field, context );
-		assertNotNull( reader.getAnnotation( Transient.class ) );
-		assertNull( reader.getAnnotation( Basic.class ) );
-
-		field = Match.class.getDeclaredField( "playerASSN" );
-		reader = new EJB3OverridenAnnotationReader( field, context );
-		assertNotNull( reader.getAnnotation( Embedded.class ) );
-	}
-
-	public void testAssociationRelatedAnnotations() throws Exception {
-		XMLContext context = buildContext( "org/hibernate/test/annotations/reflection/orm.xml" );
-
-		Field field = Administration.class.getDeclaredField( "defaultBusTrip" );
-		EJB3OverridenAnnotationReader reader = new EJB3OverridenAnnotationReader( field, context );
-		assertNotNull( reader.getAnnotation( OneToOne.class ) );
-		assertNull( reader.getAnnotation( JoinColumns.class ) );
-		assertNotNull( reader.getAnnotation( PrimaryKeyJoinColumns.class ) );
-		assertEquals( "pk", reader.getAnnotation( PrimaryKeyJoinColumns.class ).value()[0].name() );
-		assertEquals( 5, reader.getAnnotation( OneToOne.class ).cascade().length );
-		assertEquals( FetchType.LAZY, reader.getAnnotation( OneToOne.class ).fetch() );
-		assertEquals( "test", reader.getAnnotation( OneToOne.class ).mappedBy() );
-
-		context = buildContext(
-				"org/hibernate/test/annotations/reflection/metadata-complete.xml" );
-		field = BusTrip.class.getDeclaredField( "players" );
-		reader = new EJB3OverridenAnnotationReader( field, context );
-		assertNotNull( reader.getAnnotation( OneToMany.class ) );
-		assertNotNull( reader.getAnnotation( JoinColumns.class ) );
-		assertEquals( 2, reader.getAnnotation( JoinColumns.class ).value().length );
-		assertEquals( "driver", reader.getAnnotation( JoinColumns.class ).value()[0].name() );
-		assertNotNull( reader.getAnnotation( MapKey.class ) );
-		assertEquals( "name", reader.getAnnotation( MapKey.class ).name() );
-
-		field = BusTrip.class.getDeclaredField( "roads" );
-		reader = new EJB3OverridenAnnotationReader( field, context );
-		assertNotNull( reader.getAnnotation( ManyToMany.class ) );
-		assertNotNull( reader.getAnnotation( JoinTable.class ) );
-		assertEquals( "bus_road", reader.getAnnotation( JoinTable.class ).name() );
-		assertEquals( 2, reader.getAnnotation( JoinTable.class ).joinColumns().length );
-		assertEquals( 1, reader.getAnnotation( JoinTable.class ).inverseJoinColumns().length );
-		assertEquals( 2, reader.getAnnotation( JoinTable.class ).uniqueConstraints()[0].columnNames().length );
-		assertNotNull( reader.getAnnotation( OrderBy.class ) );
-		assertEquals( "maxSpeed", reader.getAnnotation( OrderBy.class ).value() );
-	}
-
-	public void testEntityListeners() throws Exception {
-		XMLContext context = buildContext( "org/hibernate/test/annotations/reflection/orm.xml" );
-
-		Method method = Administration.class.getDeclaredMethod( "calculate" );
-		EJB3OverridenAnnotationReader reader = new EJB3OverridenAnnotationReader( method, context );
-		assertTrue( reader.isAnnotationPresent( PrePersist.class ) );
-
-		reader = new EJB3OverridenAnnotationReader( Administration.class, context );
-		assertTrue( reader.isAnnotationPresent( EntityListeners.class ) );
-		assertEquals( 1, reader.getAnnotation( EntityListeners.class ).value().length );
-		assertEquals( LogListener.class, reader.getAnnotation( EntityListeners.class ).value()[0] );
-
-		method = LogListener.class.getDeclaredMethod( "noLog", Object.class );
-		reader = new EJB3OverridenAnnotationReader( method, context );
-		assertTrue( reader.isAnnotationPresent( PostLoad.class ) );
-
-		method = LogListener.class.getDeclaredMethod( "log", Object.class );
-		reader = new EJB3OverridenAnnotationReader( method, context );
-		assertTrue( reader.isAnnotationPresent( PrePersist.class ) );
-		assertFalse( reader.isAnnotationPresent( PostPersist.class ) );
-
-		assertEquals( 1, context.getDefaultEntityListeners().size() );
-		assertEquals( OtherLogListener.class.getName(), context.getDefaultEntityListeners().get(0) );
-	}
-
-	private XMLContext buildContext(String ormfile) throws SAXException, DocumentException, IOException {
-		XMLHelper xmlHelper = new XMLHelper();
-		ClassLoader cl = Thread.currentThread().getContextClassLoader();
-		InputStream is = cl.getResourceAsStream( ormfile );
-		assertNotNull( "ORM.xml not found: " + ormfile, is );
-		XMLContext context = new XMLContext();
-		List errors = new ArrayList();
-		SAXReader saxReader = xmlHelper.createSAXReader( "XML InputStream", errors, EJB3DTDEntityResolver.INSTANCE );
-		//saxReader.setValidation( false );
-		try {
-			saxReader.setFeature( "http://apache.org/xml/features/validation/schema", true );
-		}
-		catch (SAXNotSupportedException e) {
-			saxReader.setValidation( false );
-		}
-		org.dom4j.Document doc;
-		try {
-			doc = saxReader
-					.read( new InputSource( new BufferedInputStream( is ) ) );
-		}
-		finally {
-			is.close();
-		}
-		if (errors.size() > 0) {
-			System.out.println( errors.get( 0 ) );
-		}
-		assertEquals( 0, errors.size() );
-		context.addDocument( doc );
-		return context;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/EJB3OverridenAnnotationReaderTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/EJB3OverridenAnnotationReaderTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/EJB3OverridenAnnotationReaderTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/EJB3OverridenAnnotationReaderTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,434 @@
+//$Id: $
+package org.hibernate.test.annotations.reflection;
+
+import java.io.BufferedInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
+import javax.persistence.AssociationOverrides;
+import javax.persistence.AttributeOverrides;
+import javax.persistence.Basic;
+import javax.persistence.Column;
+import javax.persistence.DiscriminatorColumn;
+import javax.persistence.DiscriminatorValue;
+import javax.persistence.Embedded;
+import javax.persistence.EmbeddedId;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.ExcludeDefaultListeners;
+import javax.persistence.ExcludeSuperclassListeners;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.IdClass;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+import javax.persistence.JoinColumns;
+import javax.persistence.JoinTable;
+import javax.persistence.Lob;
+import javax.persistence.ManyToMany;
+import javax.persistence.MapKey;
+import javax.persistence.MappedSuperclass;
+import javax.persistence.NamedNativeQueries;
+import javax.persistence.NamedQueries;
+import javax.persistence.OneToMany;
+import javax.persistence.OneToOne;
+import javax.persistence.OrderBy;
+import javax.persistence.PrimaryKeyJoinColumn;
+import javax.persistence.PrimaryKeyJoinColumns;
+import javax.persistence.SecondaryTable;
+import javax.persistence.SecondaryTables;
+import javax.persistence.SequenceGenerator;
+import javax.persistence.SqlResultSetMappings;
+import javax.persistence.Table;
+import javax.persistence.TableGenerator;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+import javax.persistence.Transient;
+import javax.persistence.Version;
+import javax.persistence.PrePersist;
+import javax.persistence.EntityListeners;
+import javax.persistence.PostLoad;
+import javax.persistence.PostPersist;
+
+import junit.framework.TestCase;
+import org.dom4j.DocumentException;
+import org.dom4j.io.SAXReader;
+import org.hibernate.annotations.Columns;
+import org.hibernate.cfg.EJB3DTDEntityResolver;
+import org.hibernate.cfg.annotations.reflection.EJB3OverridenAnnotationReader;
+import org.hibernate.cfg.annotations.reflection.XMLContext;
+import org.hibernate.util.XMLHelper;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXNotSupportedException;
+
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class EJB3OverridenAnnotationReaderTest extends TestCase {
+	public void testMappedSuperclassAnnotations() throws Exception {
+		XMLContext context = buildContext(
+				"org/hibernate/test/annotations/reflection/metadata-complete.xml" );
+		EJB3OverridenAnnotationReader reader = new EJB3OverridenAnnotationReader( Organization.class, context );
+		assertTrue( reader.isAnnotationPresent( MappedSuperclass.class ) );
+	}
+
+	public void testEntityRelatedAnnotations() throws Exception {
+		XMLContext context = buildContext( "org/hibernate/test/annotations/reflection/orm.xml" );
+		EJB3OverridenAnnotationReader reader = new EJB3OverridenAnnotationReader( Administration.class, context );
+		assertNotNull( reader.getAnnotation( Entity.class ) );
+		assertEquals(
+				"Default value in xml entity should not override @Entity.name", "JavaAdministration",
+				reader.getAnnotation( Entity.class ).name()
+		);
+		assertNotNull( reader.getAnnotation( Table.class ) );
+		assertEquals( "@Table not overriden", "tbl_admin", reader.getAnnotation( Table.class ).name() );
+		assertEquals( "Default schema not overriden", "myschema", reader.getAnnotation( Table.class ).schema() );
+		assertEquals(
+				"Proper @Table.uniqueConstraints", 2,
+				reader.getAnnotation( Table.class ).uniqueConstraints()[0].columnNames().length
+		);
+		String columnName = reader.getAnnotation( Table.class ).uniqueConstraints()[0].columnNames()[0];
+		assertTrue(
+				"Proper @Table.uniqueConstraints", "firstname".equals( columnName ) || "lastname".equals( columnName )
+		);
+		assertNull( "Both Java and XML used", reader.getAnnotation( SecondaryTable.class ) );
+		assertNotNull( "XML does not work", reader.getAnnotation( SecondaryTables.class ) );
+		SecondaryTable[] tables = reader.getAnnotation( SecondaryTables.class ).value();
+		assertEquals( 1, tables.length );
+		assertEquals( "admin2", tables[0].name() );
+		assertEquals( "unique constraints ignored", 1, tables[0].uniqueConstraints().length );
+		assertEquals( "pk join column ignored", 1, tables[0].pkJoinColumns().length );
+		assertEquals( "pk join column ignored", "admin_id", tables[0].pkJoinColumns()[0].name() );
+		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()
+		);
+		assertEquals(
+				"Java annotation not taken into account", "matchschema", reader.getAnnotation( Table.class ).schema()
+		);
+		assertEquals( "Overriding not taken into account", "mycatalog", reader.getAnnotation( Table.class ).catalog() );
+		assertNotNull( "SecondaryTable swallowed", reader.getAnnotation( SecondaryTables.class ) );
+		assertEquals(
+				"Default schema not taken into account", "myschema",
+				reader.getAnnotation( SecondaryTables.class ).value()[0].schema()
+		);
+		assertNotNull( reader.getAnnotation( Inheritance.class ) );
+		assertEquals(
+				"inheritance strategy not overriden", InheritanceType.JOINED,
+				reader.getAnnotation( Inheritance.class ).strategy()
+		);
+		assertNotNull( "NamedQuery not overriden", reader.getAnnotation( NamedQueries.class ) );
+		assertEquals( "No deduplication", 3, reader.getAnnotation( NamedQueries.class ).value().length );
+		assertEquals(
+				"deduplication kept the Java version", 1,
+				reader.getAnnotation( NamedQueries.class ).value()[1].hints().length
+		);
+		assertEquals(
+				"org.hibernate.timeout", reader.getAnnotation( NamedQueries.class ).value()[1].hints()[0].name()
+		);
+		assertNotNull( "NamedNativeQuery not overriden", reader.getAnnotation( NamedNativeQueries.class ) );
+		assertEquals( "No deduplication", 3, reader.getAnnotation( NamedNativeQueries.class ).value().length );
+		assertEquals(
+				"deduplication kept the Java version", 1,
+				reader.getAnnotation( NamedNativeQueries.class ).value()[1].hints().length
+		);
+		assertEquals(
+				"org.hibernate.timeout", reader.getAnnotation( NamedNativeQueries.class ).value()[1].hints()[0].name()
+		);
+		assertNotNull( reader.getAnnotation( SqlResultSetMappings.class ) );
+		assertEquals(
+				"competitor1Point", reader.getAnnotation( SqlResultSetMappings.class ).value()[0].columns()[0].name()
+		);
+		assertEquals(
+				"competitor1Point",
+				reader.getAnnotation( SqlResultSetMappings.class ).value()[0].entities()[0].fields()[0].column()
+		);
+		assertNotNull( reader.getAnnotation( ExcludeSuperclassListeners.class ) );
+		assertNotNull( reader.getAnnotation( ExcludeDefaultListeners.class ) );
+
+		reader = new EJB3OverridenAnnotationReader( Competition.class, context );
+		assertNotNull( reader.getAnnotation( MappedSuperclass.class ) );
+
+		reader = new EJB3OverridenAnnotationReader( TennisMatch.class, context );
+		assertNull( "Mutualize PKJC into PKJCs", reader.getAnnotation( PrimaryKeyJoinColumn.class ) );
+		assertNotNull( reader.getAnnotation( PrimaryKeyJoinColumns.class ) );
+		assertEquals(
+				"PrimaryKeyJoinColumn overrden", "id",
+				reader.getAnnotation( PrimaryKeyJoinColumns.class ).value()[0].name()
+		);
+		assertNotNull( reader.getAnnotation( AttributeOverrides.class ) );
+		assertEquals( "Wrong deduplication", 3, reader.getAnnotation( AttributeOverrides.class ).value().length );
+		assertEquals(
+				"Wrong priority (XML vs java annotations)", "fld_net",
+				reader.getAnnotation( AttributeOverrides.class ).value()[0].column().name()
+		);
+		assertEquals(
+				"Column mapping", 2, reader.getAnnotation( AttributeOverrides.class ).value()[1].column().scale()
+		);
+		assertEquals(
+				"Column mapping", true, reader.getAnnotation( AttributeOverrides.class ).value()[1].column().unique()
+		);
+		assertNotNull( reader.getAnnotation( AssociationOverrides.class ) );
+		assertEquals( "no XML processing", 1, reader.getAnnotation( AssociationOverrides.class ).value().length );
+		assertEquals(
+				"wrong xml processing", "id",
+				reader.getAnnotation( AssociationOverrides.class ).value()[0].joinColumns()[0].referencedColumnName()
+		);
+
+
+		reader = new EJB3OverridenAnnotationReader( SocialSecurityPhysicalAccount.class, context );
+		assertNotNull( reader.getAnnotation( IdClass.class ) );
+		assertEquals( "id-class not used", SocialSecurityNumber.class, reader.getAnnotation( IdClass.class ).value() );
+		assertEquals(
+				"discriminator-value not used", "Physical", reader.getAnnotation( DiscriminatorValue.class ).value()
+		);
+		assertNotNull( "discriminator-column not used", reader.getAnnotation( DiscriminatorColumn.class ) );
+		assertEquals(
+				"discriminator-column.name default value broken", "DTYPE",
+				reader.getAnnotation( DiscriminatorColumn.class ).name()
+		);
+		assertEquals(
+				"discriminator-column.length broken", 34, reader.getAnnotation( DiscriminatorColumn.class ).length()
+		);
+	}
+
+	public void testEntityRelatedAnnotationsMetadataComplete() throws Exception {
+		XMLContext context = buildContext(
+				"org/hibernate/test/annotations/reflection/metadata-complete.xml" );
+		EJB3OverridenAnnotationReader reader = new EJB3OverridenAnnotationReader( Administration.class, context );
+		assertNotNull( reader.getAnnotation( Entity.class ) );
+		assertEquals(
+				"Metadata complete should ignore java annotations", "", reader.getAnnotation( Entity.class ).name()
+		);
+		assertNotNull( reader.getAnnotation( Table.class ) );
+		assertEquals( "@Table should not be used", "", reader.getAnnotation( Table.class ).name() );
+		assertEquals( "Default schema not overriden", "myschema", reader.getAnnotation( Table.class ).schema() );
+
+		reader = new EJB3OverridenAnnotationReader( Match.class, context );
+		assertNotNull( reader.getAnnotation( Table.class ) );
+		assertEquals( "@Table should not be used", "", reader.getAnnotation( Table.class ).name() );
+		assertEquals( "Overriding not taken into account", "myschema", reader.getAnnotation( Table.class ).schema() );
+		assertEquals( "Overriding not taken into account", "mycatalog", reader.getAnnotation( Table.class ).catalog() );
+		assertNull( "Ignore Java annotation", reader.getAnnotation( SecondaryTable.class ) );
+		assertNull( "Ignore Java annotation", reader.getAnnotation( SecondaryTables.class ) );
+		assertNull( "Ignore Java annotation", reader.getAnnotation( Inheritance.class ) );
+		assertNull( reader.getAnnotation( NamedQueries.class ) );
+		assertNull( reader.getAnnotation( NamedNativeQueries.class ) );
+
+		reader = new EJB3OverridenAnnotationReader( TennisMatch.class, context );
+		assertNull( reader.getAnnotation( PrimaryKeyJoinColumn.class ) );
+		assertNull( reader.getAnnotation( PrimaryKeyJoinColumns.class ) );
+
+		reader = new EJB3OverridenAnnotationReader( Competition.class, context );
+		assertNull( reader.getAnnotation( MappedSuperclass.class ) );
+
+		reader = new EJB3OverridenAnnotationReader( SocialSecurityMoralAccount.class, context );
+		assertNull( reader.getAnnotation( IdClass.class ) );
+		assertNull( reader.getAnnotation( DiscriminatorValue.class ) );
+		assertNull( reader.getAnnotation( DiscriminatorColumn.class ) );
+		assertNull( reader.getAnnotation( SequenceGenerator.class ) );
+		assertNull( reader.getAnnotation( TableGenerator.class ) );
+	}
+
+	public void testIdRelatedAnnotations() throws Exception {
+		XMLContext context = buildContext( "org/hibernate/test/annotations/reflection/orm.xml" );
+		Method method = Administration.class.getDeclaredMethod( "getId" );
+		EJB3OverridenAnnotationReader reader = new EJB3OverridenAnnotationReader( method, context );
+		assertNull( reader.getAnnotation( Id.class ) );
+		assertNull( reader.getAnnotation( Column.class ) );
+		Field field = Administration.class.getDeclaredField( "id" );
+		reader = new EJB3OverridenAnnotationReader( field, context );
+		assertNotNull( reader.getAnnotation( Id.class ) );
+		assertNotNull( reader.getAnnotation( GeneratedValue.class ) );
+		assertEquals( GenerationType.SEQUENCE, reader.getAnnotation( GeneratedValue.class ).strategy() );
+		assertEquals( "generator", reader.getAnnotation( GeneratedValue.class ).generator() );
+		assertNotNull( reader.getAnnotation( SequenceGenerator.class ) );
+		assertEquals( "seq", reader.getAnnotation( SequenceGenerator.class ).sequenceName() );
+		assertNotNull( reader.getAnnotation( Columns.class ) );
+		assertEquals( 1, reader.getAnnotation( Columns.class ).columns().length );
+		assertEquals( "fld_id", reader.getAnnotation( Columns.class ).columns()[0].name() );
+		assertNotNull( reader.getAnnotation( Temporal.class ) );
+		assertEquals( TemporalType.DATE, reader.getAnnotation( Temporal.class ).value() );
+
+		context = buildContext(
+				"org/hibernate/test/annotations/reflection/metadata-complete.xml" );
+		method = Administration.class.getDeclaredMethod( "getId" );
+		reader = new EJB3OverridenAnnotationReader( method, context );
+		assertNotNull(
+				"Default access type when not defined in metadata complete should be property",
+				reader.getAnnotation( Id.class )
+		);
+		field = Administration.class.getDeclaredField( "id" );
+		reader = new EJB3OverridenAnnotationReader( field, context );
+		assertNull(
+				"Default access type when not defined in metadata complete should be property",
+				reader.getAnnotation( Id.class )
+		);
+
+		method = BusTrip.class.getDeclaredMethod( "getId" );
+		reader = new EJB3OverridenAnnotationReader( method, context );
+		assertNull( reader.getAnnotation( EmbeddedId.class ) );
+		field = BusTrip.class.getDeclaredField( "id" );
+		reader = new EJB3OverridenAnnotationReader( field, context );
+		assertNotNull( reader.getAnnotation( EmbeddedId.class ) );
+		assertNotNull( reader.getAnnotation( AttributeOverrides.class ) );
+		assertEquals( 1, reader.getAnnotation( AttributeOverrides.class ).value().length );
+	}
+
+	public void testBasicRelatedAnnotations() throws Exception {
+		XMLContext context = buildContext(
+				"org/hibernate/test/annotations/reflection/metadata-complete.xml" );
+		Field field = BusTrip.class.getDeclaredField( "status" );
+		EJB3OverridenAnnotationReader reader = new EJB3OverridenAnnotationReader( field, context );
+		assertNotNull( reader.getAnnotation( Enumerated.class ) );
+		assertEquals( EnumType.STRING, reader.getAnnotation( Enumerated.class ).value() );
+		assertEquals( false, reader.getAnnotation( Basic.class ).optional() );
+		field = BusTrip.class.getDeclaredField( "serial" );
+		reader = new EJB3OverridenAnnotationReader( field, context );
+		assertNotNull( reader.getAnnotation( Lob.class ) );
+		assertEquals( "serialbytes", reader.getAnnotation( Columns.class ).columns()[0].name() );
+		field = BusTrip.class.getDeclaredField( "terminusTime" );
+		reader = new EJB3OverridenAnnotationReader( field, context );
+		assertNotNull( reader.getAnnotation( Temporal.class ) );
+		assertEquals( TemporalType.TIMESTAMP, reader.getAnnotation( Temporal.class ).value() );
+		assertEquals( FetchType.LAZY, reader.getAnnotation( Basic.class ).fetch() );
+
+		field = BusTripPk.class.getDeclaredField( "busDriver" );
+		reader = new EJB3OverridenAnnotationReader( field, context );
+		assertNotNull( reader.isAnnotationPresent( Basic.class ) );
+	}
+
+	public void testVersionRelatedAnnotations() throws Exception {
+		XMLContext context = buildContext( "org/hibernate/test/annotations/reflection/orm.xml" );
+		Method method = Administration.class.getDeclaredMethod( "getVersion" );
+		EJB3OverridenAnnotationReader reader = new EJB3OverridenAnnotationReader( method, context );
+		assertNotNull( reader.getAnnotation( Version.class ) );
+
+		Field field = Match.class.getDeclaredField( "version" );
+		reader = new EJB3OverridenAnnotationReader( field, context );
+		assertNotNull( reader.getAnnotation( Version.class ) );
+	}
+
+	public void testTransientAndEmbeddedRelatedAnnotations() throws Exception {
+		XMLContext context = buildContext( "org/hibernate/test/annotations/reflection/orm.xml" );
+
+		Field field = Administration.class.getDeclaredField( "transientField" );
+		EJB3OverridenAnnotationReader reader = new EJB3OverridenAnnotationReader( field, context );
+		assertNotNull( reader.getAnnotation( Transient.class ) );
+		assertNull( reader.getAnnotation( Basic.class ) );
+
+		field = Match.class.getDeclaredField( "playerASSN" );
+		reader = new EJB3OverridenAnnotationReader( field, context );
+		assertNotNull( reader.getAnnotation( Embedded.class ) );
+	}
+
+	public void testAssociationRelatedAnnotations() throws Exception {
+		XMLContext context = buildContext( "org/hibernate/test/annotations/reflection/orm.xml" );
+
+		Field field = Administration.class.getDeclaredField( "defaultBusTrip" );
+		EJB3OverridenAnnotationReader reader = new EJB3OverridenAnnotationReader( field, context );
+		assertNotNull( reader.getAnnotation( OneToOne.class ) );
+		assertNull( reader.getAnnotation( JoinColumns.class ) );
+		assertNotNull( reader.getAnnotation( PrimaryKeyJoinColumns.class ) );
+		assertEquals( "pk", reader.getAnnotation( PrimaryKeyJoinColumns.class ).value()[0].name() );
+		assertEquals( 5, reader.getAnnotation( OneToOne.class ).cascade().length );
+		assertEquals( FetchType.LAZY, reader.getAnnotation( OneToOne.class ).fetch() );
+		assertEquals( "test", reader.getAnnotation( OneToOne.class ).mappedBy() );
+
+		context = buildContext(
+				"org/hibernate/test/annotations/reflection/metadata-complete.xml" );
+		field = BusTrip.class.getDeclaredField( "players" );
+		reader = new EJB3OverridenAnnotationReader( field, context );
+		assertNotNull( reader.getAnnotation( OneToMany.class ) );
+		assertNotNull( reader.getAnnotation( JoinColumns.class ) );
+		assertEquals( 2, reader.getAnnotation( JoinColumns.class ).value().length );
+		assertEquals( "driver", reader.getAnnotation( JoinColumns.class ).value()[0].name() );
+		assertNotNull( reader.getAnnotation( MapKey.class ) );
+		assertEquals( "name", reader.getAnnotation( MapKey.class ).name() );
+
+		field = BusTrip.class.getDeclaredField( "roads" );
+		reader = new EJB3OverridenAnnotationReader( field, context );
+		assertNotNull( reader.getAnnotation( ManyToMany.class ) );
+		assertNotNull( reader.getAnnotation( JoinTable.class ) );
+		assertEquals( "bus_road", reader.getAnnotation( JoinTable.class ).name() );
+		assertEquals( 2, reader.getAnnotation( JoinTable.class ).joinColumns().length );
+		assertEquals( 1, reader.getAnnotation( JoinTable.class ).inverseJoinColumns().length );
+		assertEquals( 2, reader.getAnnotation( JoinTable.class ).uniqueConstraints()[0].columnNames().length );
+		assertNotNull( reader.getAnnotation( OrderBy.class ) );
+		assertEquals( "maxSpeed", reader.getAnnotation( OrderBy.class ).value() );
+	}
+
+	public void testEntityListeners() throws Exception {
+		XMLContext context = buildContext( "org/hibernate/test/annotations/reflection/orm.xml" );
+
+		Method method = Administration.class.getDeclaredMethod( "calculate" );
+		EJB3OverridenAnnotationReader reader = new EJB3OverridenAnnotationReader( method, context );
+		assertTrue( reader.isAnnotationPresent( PrePersist.class ) );
+
+		reader = new EJB3OverridenAnnotationReader( Administration.class, context );
+		assertTrue( reader.isAnnotationPresent( EntityListeners.class ) );
+		assertEquals( 1, reader.getAnnotation( EntityListeners.class ).value().length );
+		assertEquals( LogListener.class, reader.getAnnotation( EntityListeners.class ).value()[0] );
+
+		method = LogListener.class.getDeclaredMethod( "noLog", Object.class );
+		reader = new EJB3OverridenAnnotationReader( method, context );
+		assertTrue( reader.isAnnotationPresent( PostLoad.class ) );
+
+		method = LogListener.class.getDeclaredMethod( "log", Object.class );
+		reader = new EJB3OverridenAnnotationReader( method, context );
+		assertTrue( reader.isAnnotationPresent( PrePersist.class ) );
+		assertFalse( reader.isAnnotationPresent( PostPersist.class ) );
+
+		assertEquals( 1, context.getDefaultEntityListeners().size() );
+		assertEquals( OtherLogListener.class.getName(), context.getDefaultEntityListeners().get(0) );
+	}
+
+	private XMLContext buildContext(String ormfile) throws SAXException, DocumentException, IOException {
+		XMLHelper xmlHelper = new XMLHelper();
+		ClassLoader cl = Thread.currentThread().getContextClassLoader();
+		InputStream is = cl.getResourceAsStream( ormfile );
+		assertNotNull( "ORM.xml not found: " + ormfile, is );
+		XMLContext context = new XMLContext();
+		List errors = new ArrayList();
+		SAXReader saxReader = xmlHelper.createSAXReader( "XML InputStream", errors, EJB3DTDEntityResolver.INSTANCE );
+		//saxReader.setValidation( false );
+		try {
+			saxReader.setFeature( "http://apache.org/xml/features/validation/schema", true );
+		}
+		catch (SAXNotSupportedException e) {
+			saxReader.setValidation( false );
+		}
+		org.dom4j.Document doc;
+		try {
+			doc = saxReader
+					.read( new InputSource( new BufferedInputStream( is ) ) );
+		}
+		finally {
+			is.close();
+		}
+		if (errors.size() > 0) {
+			System.out.println( errors.get( 0 ) );
+		}
+		assertEquals( 0, errors.size() );
+		context.addDocument( doc );
+		return context;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/LogListener.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/LogListener.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/LogListener.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,26 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.reflection;
-
-import javax.persistence.PrePersist;
-import javax.persistence.PostPersist;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * @author Emmanuel Bernard
- */
-public class LogListener {
-	Log log = LogFactory.getLog( LogListener.class );
-
-	@PrePersist
-	@PostPersist
-	public void log(Object entity) {
-		log.debug( "Logging entity " +  entity.getClass().getName() + " with hashCode: " + entity.hashCode() );
-	}
-
-
-	public void noLog(Object entity) {
-		log.debug( "NoLogging entity " +  entity.getClass().getName() + " with hashCode: " + entity.hashCode() );
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/LogListener.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/LogListener.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/LogListener.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/LogListener.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,26 @@
+//$Id: $
+package org.hibernate.test.annotations.reflection;
+
+import javax.persistence.PrePersist;
+import javax.persistence.PostPersist;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class LogListener {
+	Log log = LogFactory.getLog( LogListener.class );
+
+	@PrePersist
+	@PostPersist
+	public void log(Object entity) {
+		log.debug( "Logging entity " +  entity.getClass().getName() + " with hashCode: " + entity.hashCode() );
+	}
+
+
+	public void noLog(Object entity) {
+		log.debug( "NoLogging entity " +  entity.getClass().getName() + " with hashCode: " + entity.hashCode() );
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/Match.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/Match.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/Match.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,35 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.reflection;
-
-import javax.persistence.Entity;
-import javax.persistence.Inheritance;
-import javax.persistence.InheritanceType;
-import javax.persistence.NamedNativeQueries;
-import javax.persistence.NamedNativeQuery;
-import javax.persistence.NamedQueries;
-import javax.persistence.NamedQuery;
-import javax.persistence.SecondaryTable;
-import javax.persistence.Table;
-import javax.persistence.Version;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Table(name = "matchtable", schema = "matchschema")
- at SecondaryTable(name = "extendedMatch")
- at Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
- at NamedQueries({
- at NamedQuery(name = "matchbyid", query = "select m from Match m where m.id = :id"),
- at NamedQuery(name = "getAllMatches2", query = "select m from Match m")
-		})
- at NamedNativeQueries({
- at NamedNativeQuery(name = "matchbyid", query = "select m from Match m where m.id = :id", resultSetMapping = "matchrs"),
- at NamedNativeQuery(name = "getAllMatches2", query = "select m from Match m", resultSetMapping = "matchrs")
-		})
-public class Match extends Competition {
-	public String competitor1Point;
-	@Version
-	public Integer version;
-	public SocialSecurityNumber playerASSN;
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/Match.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/Match.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/Match.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/Match.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,35 @@
+//$Id: $
+package org.hibernate.test.annotations.reflection;
+
+import javax.persistence.Entity;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+import javax.persistence.NamedNativeQueries;
+import javax.persistence.NamedNativeQuery;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.SecondaryTable;
+import javax.persistence.Table;
+import javax.persistence.Version;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Table(name = "matchtable", schema = "matchschema")
+ at SecondaryTable(name = "extendedMatch")
+ at Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
+ at NamedQueries({
+ at NamedQuery(name = "matchbyid", query = "select m from Match m where m.id = :id"),
+ at NamedQuery(name = "getAllMatches2", query = "select m from Match m")
+		})
+ at NamedNativeQueries({
+ at NamedNativeQuery(name = "matchbyid", query = "select m from Match m where m.id = :id", resultSetMapping = "matchrs"),
+ at NamedNativeQuery(name = "getAllMatches2", query = "select m from Match m", resultSetMapping = "matchrs")
+		})
+public class Match extends Competition {
+	public String competitor1Point;
+	@Version
+	public Integer version;
+	public SocialSecurityNumber playerASSN;
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/Organization.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/Organization.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/Organization.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,17 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.reflection;
-
-/**
- * @author Emmanuel Bernard
- */
-public class Organization {
-	private String organizationId;
-
-	public String getOrganizationId() {
-		return organizationId;
-	}
-
-	public void setOrganizationId(String organizationId) {
-		this.organizationId = organizationId;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/Organization.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/Organization.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/Organization.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/Organization.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,17 @@
+//$Id: $
+package org.hibernate.test.annotations.reflection;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Organization {
+	private String organizationId;
+
+	public String getOrganizationId() {
+		return organizationId;
+	}
+
+	public void setOrganizationId(String organizationId) {
+		this.organizationId = organizationId;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/OtherLogListener.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/OtherLogListener.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/OtherLogListener.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,26 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.reflection;
-
-import javax.persistence.PrePersist;
-import javax.persistence.PostPersist;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * @author Emmanuel Bernard
- */
-public class OtherLogListener {
-	Log log = LogFactory.getLog( OtherLogListener.class );
-
-	@PrePersist
-	@PostPersist
-	public void log(Object entity) {
-		log.debug( "Logging entity " +  entity.getClass().getName() + " with hashCode: " + entity.hashCode() );
-	}
-
-
-	public void noLog(Object entity) {
-		log.debug( "NoLogging entity " +  entity.getClass().getName() + " with hashCode: " + entity.hashCode() );
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/OtherLogListener.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/OtherLogListener.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/OtherLogListener.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/OtherLogListener.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,26 @@
+//$Id: $
+package org.hibernate.test.annotations.reflection;
+
+import javax.persistence.PrePersist;
+import javax.persistence.PostPersist;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class OtherLogListener {
+	Log log = LogFactory.getLog( OtherLogListener.class );
+
+	@PrePersist
+	@PostPersist
+	public void log(Object entity) {
+		log.debug( "Logging entity " +  entity.getClass().getName() + " with hashCode: " + entity.hashCode() );
+	}
+
+
+	public void noLog(Object entity) {
+		log.debug( "NoLogging entity " +  entity.getClass().getName() + " with hashCode: " + entity.hashCode() );
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/SocialSecurityMoralAccount.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/SocialSecurityMoralAccount.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/SocialSecurityMoralAccount.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,21 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.reflection;
-
-import javax.persistence.DiscriminatorValue;
-import javax.persistence.Entity;
-import javax.persistence.IdClass;
-import javax.persistence.SequenceGenerator;
-import javax.persistence.TableGenerator;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at IdClass(SocialSecurityNumber.class)
- at DiscriminatorValue("Moral")
- at SequenceGenerator(name = "seq")
- at TableGenerator(name = "table")
-public class SocialSecurityMoralAccount {
-	public String number;
-	public String countryCode;
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/SocialSecurityMoralAccount.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/SocialSecurityMoralAccount.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/SocialSecurityMoralAccount.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/SocialSecurityMoralAccount.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,21 @@
+//$Id: $
+package org.hibernate.test.annotations.reflection;
+
+import javax.persistence.DiscriminatorValue;
+import javax.persistence.Entity;
+import javax.persistence.IdClass;
+import javax.persistence.SequenceGenerator;
+import javax.persistence.TableGenerator;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at IdClass(SocialSecurityNumber.class)
+ at DiscriminatorValue("Moral")
+ at SequenceGenerator(name = "seq")
+ at TableGenerator(name = "table")
+public class SocialSecurityMoralAccount {
+	public String number;
+	public String countryCode;
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/SocialSecurityNumber.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/SocialSecurityNumber.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/SocialSecurityNumber.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,33 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.reflection;
-
-import java.io.Serializable;
-import javax.persistence.Embeddable;
-
-/**
- * @author Emmanuel Bernard
- */
- at Embeddable
-public class SocialSecurityNumber implements Serializable {
-	public String number;
-	public String countryCode;
-
-	public boolean equals(Object o) {
-		if ( this == o ) return true;
-		if ( o == null || getClass() != o.getClass() ) return false;
-
-		final SocialSecurityNumber that = (SocialSecurityNumber) o;
-
-		if ( !countryCode.equals( that.countryCode ) ) return false;
-		if ( !number.equals( that.number ) ) return false;
-
-		return true;
-	}
-
-	public int hashCode() {
-		int result;
-		result = number.hashCode();
-		result = 29 * result + countryCode.hashCode();
-		return result;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/SocialSecurityNumber.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/SocialSecurityNumber.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/SocialSecurityNumber.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/SocialSecurityNumber.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,33 @@
+//$Id: $
+package org.hibernate.test.annotations.reflection;
+
+import java.io.Serializable;
+import javax.persistence.Embeddable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Embeddable
+public class SocialSecurityNumber implements Serializable {
+	public String number;
+	public String countryCode;
+
+	public boolean equals(Object o) {
+		if ( this == o ) return true;
+		if ( o == null || getClass() != o.getClass() ) return false;
+
+		final SocialSecurityNumber that = (SocialSecurityNumber) o;
+
+		if ( !countryCode.equals( that.countryCode ) ) return false;
+		if ( !number.equals( that.number ) ) return false;
+
+		return true;
+	}
+
+	public int hashCode() {
+		int result;
+		result = number.hashCode();
+		result = 29 * result + countryCode.hashCode();
+		return result;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/SocialSecurityPhysicalAccount.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/SocialSecurityPhysicalAccount.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/SocialSecurityPhysicalAccount.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,13 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.reflection;
-
-import javax.persistence.Entity;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class SocialSecurityPhysicalAccount {
-	public String number;
-	public String countryCode;
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/SocialSecurityPhysicalAccount.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/SocialSecurityPhysicalAccount.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/SocialSecurityPhysicalAccount.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/SocialSecurityPhysicalAccount.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,13 @@
+//$Id: $
+package org.hibernate.test.annotations.reflection;
+
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class SocialSecurityPhysicalAccount {
+	public String number;
+	public String countryCode;
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/TennisMatch.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/TennisMatch.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/TennisMatch.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,21 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.reflection;
-
-import javax.persistence.AttributeOverride;
-import javax.persistence.AttributeOverrides;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.PrimaryKeyJoinColumn;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at PrimaryKeyJoinColumn(name = "match_id")
- at AttributeOverrides(
-		{@AttributeOverride(name = "net", column = @Column(name = "net")),
-		@AttributeOverride(name = "line", column = @Column(name = "line"))
-				})
-public class TennisMatch {
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/TennisMatch.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/TennisMatch.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/TennisMatch.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/TennisMatch.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,21 @@
+//$Id: $
+package org.hibernate.test.annotations.reflection;
+
+import javax.persistence.AttributeOverride;
+import javax.persistence.AttributeOverrides;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.PrimaryKeyJoinColumn;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at PrimaryKeyJoinColumn(name = "match_id")
+ at AttributeOverrides(
+		{@AttributeOverride(name = "net", column = @Column(name = "net")),
+		@AttributeOverride(name = "line", column = @Column(name = "line"))
+				})
+public class TennisMatch {
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/XMLContextTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/XMLContextTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/XMLContextTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,54 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.reflection;
-
-import java.io.BufferedInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.List;
-
-import junit.framework.TestCase;
-import org.dom4j.io.SAXReader;
-import org.hibernate.cfg.EJB3DTDEntityResolver;
-import org.hibernate.cfg.annotations.reflection.XMLContext;
-import org.hibernate.util.XMLHelper;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXNotSupportedException;
-
-/**
- * @author Emmanuel Bernard
- */
-public class XMLContextTest extends TestCase {
-	public void testAll() throws Exception {
-		XMLHelper xmlHelper = new XMLHelper();
-		ClassLoader cl = Thread.currentThread().getContextClassLoader();
-		InputStream is = cl.getResourceAsStream(
-				"org/hibernate/test/annotations/reflection/orm.xml" );
-		assertNotNull( "ORM.xml not found", is );
-		XMLContext context = new XMLContext();
-		List errors = new ArrayList();
-		SAXReader saxReader = xmlHelper.createSAXReader( "XML InputStream", errors, EJB3DTDEntityResolver.INSTANCE );
-		//saxReader.setValidation( false );
-		try {
-			saxReader.setFeature( "http://apache.org/xml/features/validation/schema", true );
-		}
-		catch (SAXNotSupportedException e) {
-			saxReader.setValidation( false );
-		}
-		org.dom4j.Document doc;
-		try {
-			doc = saxReader
-					.read( new InputSource( new BufferedInputStream( is ) ) );
-		}
-		finally {
-			try {
-				is.close();
-			}
-			catch (IOException ioe) {
-				//log.warn( "Could not close input stream", ioe );
-			}
-		}
-		assertEquals( 0, errors.size() );
-		context.addDocument( doc );
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/XMLContextTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/XMLContextTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/XMLContextTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/XMLContextTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,54 @@
+//$Id: $
+package org.hibernate.test.annotations.reflection;
+
+import java.io.BufferedInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+import junit.framework.TestCase;
+import org.dom4j.io.SAXReader;
+import org.hibernate.cfg.EJB3DTDEntityResolver;
+import org.hibernate.cfg.annotations.reflection.XMLContext;
+import org.hibernate.util.XMLHelper;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXNotSupportedException;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class XMLContextTest extends TestCase {
+	public void testAll() throws Exception {
+		XMLHelper xmlHelper = new XMLHelper();
+		ClassLoader cl = Thread.currentThread().getContextClassLoader();
+		InputStream is = cl.getResourceAsStream(
+				"org/hibernate/test/annotations/reflection/orm.xml" );
+		assertNotNull( "ORM.xml not found", is );
+		XMLContext context = new XMLContext();
+		List errors = new ArrayList();
+		SAXReader saxReader = xmlHelper.createSAXReader( "XML InputStream", errors, EJB3DTDEntityResolver.INSTANCE );
+		//saxReader.setValidation( false );
+		try {
+			saxReader.setFeature( "http://apache.org/xml/features/validation/schema", true );
+		}
+		catch (SAXNotSupportedException e) {
+			saxReader.setValidation( false );
+		}
+		org.dom4j.Document doc;
+		try {
+			doc = saxReader
+					.read( new InputSource( new BufferedInputStream( is ) ) );
+		}
+		finally {
+			try {
+				is.close();
+			}
+			catch (IOException ioe) {
+				//log.warn( "Could not close input stream", ioe );
+			}
+		}
+		assertEquals( 0, errors.size() );
+		context.addDocument( doc );
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/metadata-complete.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/metadata-complete.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/metadata-complete.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,76 +0,0 @@
-<?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 orm_1_0.xsd"
-                 version="1.0"
-        >
-    <persistence-unit-metadata>
-        <xml-mapping-metadata-complete/>
-        <persistence-unit-defaults>
-            <schema>myschema</schema>
-            <catalog>mycatalog</catalog>
-            <cascade-persist/>
-        </persistence-unit-defaults>
-    </persistence-unit-metadata>
-    <package>org.hibernate.test.annotations.reflection</package>
-    <mapped-superclass class="Organization">
-        <attributes>
-            <basic name="organizationId"/>
-        </attributes>
-    </mapped-superclass>
-    <entity class="Administration">
-        <attributes>
-            <id name="id"/>
-        </attributes>
-    </entity>
-    <entity class="Match">
-    </entity>
-    <entity class="SocialSecurityMoralAccount"/>
-    <entity class="BusTrip" access="FIELD">
-        <attributes>
-            <embedded-id name="id">
-                <attribute-override name="busDriver">
-                    <column name="fld_busdriver"/>
-                </attribute-override>
-            </embedded-id>
-            <basic name="status" optional="false">
-                <enumerated>STRING</enumerated>
-            </basic>
-            <basic name="serial" optional="true">
-                <column name="serialbytes"/>
-                <lob/>
-            </basic>
-            <basic name="terminusTime" fetch="LAZY">
-                <temporal>TIMESTAMP</temporal>
-            </basic>
-            <one-to-many name="players">
-                <map-key name="name"/>
-                <join-column name="driver"/>
-                <join-column name="number"/>
-            </one-to-many>
-            <many-to-many name="roads" target-entity="Administration">
-                <order-by>maxSpeed</order-by>
-                <join-table name="bus_road">
-                    <join-column name="driver"/>
-                    <join-column name="number"/>
-                    <inverse-join-column name="road_id"/>
-                    <unique-constraint>
-                        <column-name>driver</column-name>
-                        <column-name>number</column-name>
-                    </unique-constraint>
-                </join-table>
-            </many-to-many>
-        </attributes>
-    </entity>
-    <embeddable class="BusTripPk" access="FIELD">
-        <attributes>
-            <basic name="busDriver">
-                <column name="busdriver"/>
-            </basic>
-            <basic name="busNumber">
-                <column name="busnumber"/>
-            </basic>
-        </attributes>
-    </embeddable>
-</entity-mappings>
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/metadata-complete.xml (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/metadata-complete.xml)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/metadata-complete.xml	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/metadata-complete.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,76 @@
+<?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 orm_1_0.xsd"
+                 version="1.0"
+        >
+    <persistence-unit-metadata>
+        <xml-mapping-metadata-complete/>
+        <persistence-unit-defaults>
+            <schema>myschema</schema>
+            <catalog>mycatalog</catalog>
+            <cascade-persist/>
+        </persistence-unit-defaults>
+    </persistence-unit-metadata>
+    <package>org.hibernate.test.annotations.reflection</package>
+    <mapped-superclass class="Organization">
+        <attributes>
+            <basic name="organizationId"/>
+        </attributes>
+    </mapped-superclass>
+    <entity class="Administration">
+        <attributes>
+            <id name="id"/>
+        </attributes>
+    </entity>
+    <entity class="Match">
+    </entity>
+    <entity class="SocialSecurityMoralAccount"/>
+    <entity class="BusTrip" access="FIELD">
+        <attributes>
+            <embedded-id name="id">
+                <attribute-override name="busDriver">
+                    <column name="fld_busdriver"/>
+                </attribute-override>
+            </embedded-id>
+            <basic name="status" optional="false">
+                <enumerated>STRING</enumerated>
+            </basic>
+            <basic name="serial" optional="true">
+                <column name="serialbytes"/>
+                <lob/>
+            </basic>
+            <basic name="terminusTime" fetch="LAZY">
+                <temporal>TIMESTAMP</temporal>
+            </basic>
+            <one-to-many name="players">
+                <map-key name="name"/>
+                <join-column name="driver"/>
+                <join-column name="number"/>
+            </one-to-many>
+            <many-to-many name="roads" target-entity="Administration">
+                <order-by>maxSpeed</order-by>
+                <join-table name="bus_road">
+                    <join-column name="driver"/>
+                    <join-column name="number"/>
+                    <inverse-join-column name="road_id"/>
+                    <unique-constraint>
+                        <column-name>driver</column-name>
+                        <column-name>number</column-name>
+                    </unique-constraint>
+                </join-table>
+            </many-to-many>
+        </attributes>
+    </entity>
+    <embeddable class="BusTripPk" access="FIELD">
+        <attributes>
+            <basic name="busDriver">
+                <column name="busdriver"/>
+            </basic>
+            <basic name="busNumber">
+                <column name="busnumber"/>
+            </basic>
+        </attributes>
+    </embeddable>
+</entity-mappings>
\ No newline at end of file

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/orm.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/orm.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/orm.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,117 +0,0 @@
-<?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 orm_1_0.xsd"
-                 version="1.0"
-        >
-    <persistence-unit-metadata>
-        <persistence-unit-defaults>
-            <schema>myschema</schema>
-            <catalog>mycatalog</catalog>
-            <cascade-persist/>
-            <entity-listeners>
-                <entity-listener class="org.hibernate.test.annotations.reflection.OtherLogListener">
-                    <post-update method-name="log"/>
-                </entity-listener>
-            </entity-listeners>
-        </persistence-unit-defaults>
-    </persistence-unit-metadata>
-    <package>org.hibernate.test.annotations.reflection</package>
-    <entity class="Administration">
-        <table name="tbl_admin">
-            <unique-constraint>
-                <column-name>firstname</column-name>
-                <column-name>lastname</column-name>
-            </unique-constraint>
-        </table>
-        <secondary-table name="admin2">
-            <primary-key-join-column name="admin_id" referenced-column-name="id"/>
-            <unique-constraint>
-                <column-name>address</column-name>
-            </unique-constraint>
-        </secondary-table>
-        <sequence-generator name="seqhilo" sequence-name="seqhilo"/>
-        <table-generator name="table" table="tablehilo"/>
-        <entity-listeners>
-            <entity-listener class="LogListener">
-                <pre-persist method-name="log"/>
-                <post-load method-name="noLog"/>
-            </entity-listener>
-        </entity-listeners>
-        <pre-persist method-name="calculate"/>
-        <attributes>
-            <id name="id">
-                <column name="fld_id"/>
-                <generated-value generator="generator" strategy="SEQUENCE"/>
-                <temporal>DATE</temporal>
-                <sequence-generator name="generator" sequence-name="seq"/>
-            </id>
-            <version name="version"/>
-            <one-to-one name="defaultBusTrip" fetch="LAZY" mapped-by="test">
-                <primary-key-join-column name="pk"/>
-                <cascade>
-                    <cascade-all/>
-                    <cascade-persist/>
-                    <cascade-merge/>
-                    <cascade-remove/>
-                    <cascade-refresh/>
-                </cascade>
-            </one-to-one>
-            <transient name="transientField"/>
-        </attributes>
-    </entity>
-    <entity class="Match">
-        <inheritance strategy="JOINED"/>
-        <named-query name="allmatches">
-            <query>select m from Match m</query>
-            <hint name="org.hibernate.timeout" value="200"/>
-        </named-query>
-        <named-query name="matchbyid">
-            <query>select m from Match m where m.id = :id</query>
-            <hint name="org.hibernate.timeout" value="200"/>
-        </named-query>
-        <named-native-query name="allmatches" result-set-mapping="matchrs">
-            <query>select m from Match m</query>
-            <hint name="org.hibernate.timeout" value="200"/>
-        </named-native-query>
-        <named-native-query name="matchbyid" result-set-mapping="matchrs">
-            <query>select m from Match m where m.id = :id</query>
-            <hint name="org.hibernate.timeout" value="200"/>
-        </named-native-query>
-        <sql-result-set-mapping name="matchrs">
-            <entity-result entity-class="org.hibernate.test.annotations.reflection.Match">
-                <field-result name="competitor1Point" column="competitor1Point"/>
-            </entity-result>
-            <column-result name="competitor1Point"/>
-        </sql-result-set-mapping>
-        <exclude-default-listeners/>
-        <exclude-superclass-listeners/>
-        <entity-listeners>
-            <entity-listener class="LogListener">
-                <pre-persist method-name="log"/>
-                <post-load method-name="noLog"/>
-            </entity-listener>
-        </entity-listeners>
-        <attributes>
-            <embedded name="playerASSN"/>
-        </attributes>
-    </entity>
-    <entity class="TennisMatch">
-        <primary-key-join-column name="id"/>
-        <attribute-override name="net">
-            <column name="fld_net"/>
-        </attribute-override>
-        <attribute-override name="ground">
-            <column name="fld_ground" unique="true" scale="2"/>
-        </attribute-override>
-        <association-override name="referer">
-            <join-column name="referer_id" referenced-column-name="id"/>
-        </association-override>
-    </entity>
-    <entity class="SocialSecurityPhysicalAccount">
-        <id-class class="org.hibernate.test.annotations.reflection.SocialSecurityNumber"/>
-        <discriminator-value>Physical</discriminator-value>
-        <discriminator-column length="34"/>
-    </entity>
-</entity-mappings>
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/orm.xml (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/orm.xml)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/orm.xml	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/reflection/orm.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,117 @@
+<?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 orm_1_0.xsd"
+                 version="1.0"
+        >
+    <persistence-unit-metadata>
+        <persistence-unit-defaults>
+            <schema>myschema</schema>
+            <catalog>mycatalog</catalog>
+            <cascade-persist/>
+            <entity-listeners>
+                <entity-listener class="org.hibernate.test.annotations.reflection.OtherLogListener">
+                    <post-update method-name="log"/>
+                </entity-listener>
+            </entity-listeners>
+        </persistence-unit-defaults>
+    </persistence-unit-metadata>
+    <package>org.hibernate.test.annotations.reflection</package>
+    <entity class="Administration">
+        <table name="tbl_admin">
+            <unique-constraint>
+                <column-name>firstname</column-name>
+                <column-name>lastname</column-name>
+            </unique-constraint>
+        </table>
+        <secondary-table name="admin2">
+            <primary-key-join-column name="admin_id" referenced-column-name="id"/>
+            <unique-constraint>
+                <column-name>address</column-name>
+            </unique-constraint>
+        </secondary-table>
+        <sequence-generator name="seqhilo" sequence-name="seqhilo"/>
+        <table-generator name="table" table="tablehilo"/>
+        <entity-listeners>
+            <entity-listener class="LogListener">
+                <pre-persist method-name="log"/>
+                <post-load method-name="noLog"/>
+            </entity-listener>
+        </entity-listeners>
+        <pre-persist method-name="calculate"/>
+        <attributes>
+            <id name="id">
+                <column name="fld_id"/>
+                <generated-value generator="generator" strategy="SEQUENCE"/>
+                <temporal>DATE</temporal>
+                <sequence-generator name="generator" sequence-name="seq"/>
+            </id>
+            <version name="version"/>
+            <one-to-one name="defaultBusTrip" fetch="LAZY" mapped-by="test">
+                <primary-key-join-column name="pk"/>
+                <cascade>
+                    <cascade-all/>
+                    <cascade-persist/>
+                    <cascade-merge/>
+                    <cascade-remove/>
+                    <cascade-refresh/>
+                </cascade>
+            </one-to-one>
+            <transient name="transientField"/>
+        </attributes>
+    </entity>
+    <entity class="Match">
+        <inheritance strategy="JOINED"/>
+        <named-query name="allmatches">
+            <query>select m from Match m</query>
+            <hint name="org.hibernate.timeout" value="200"/>
+        </named-query>
+        <named-query name="matchbyid">
+            <query>select m from Match m where m.id = :id</query>
+            <hint name="org.hibernate.timeout" value="200"/>
+        </named-query>
+        <named-native-query name="allmatches" result-set-mapping="matchrs">
+            <query>select m from Match m</query>
+            <hint name="org.hibernate.timeout" value="200"/>
+        </named-native-query>
+        <named-native-query name="matchbyid" result-set-mapping="matchrs">
+            <query>select m from Match m where m.id = :id</query>
+            <hint name="org.hibernate.timeout" value="200"/>
+        </named-native-query>
+        <sql-result-set-mapping name="matchrs">
+            <entity-result entity-class="org.hibernate.test.annotations.reflection.Match">
+                <field-result name="competitor1Point" column="competitor1Point"/>
+            </entity-result>
+            <column-result name="competitor1Point"/>
+        </sql-result-set-mapping>
+        <exclude-default-listeners/>
+        <exclude-superclass-listeners/>
+        <entity-listeners>
+            <entity-listener class="LogListener">
+                <pre-persist method-name="log"/>
+                <post-load method-name="noLog"/>
+            </entity-listener>
+        </entity-listeners>
+        <attributes>
+            <embedded name="playerASSN"/>
+        </attributes>
+    </entity>
+    <entity class="TennisMatch">
+        <primary-key-join-column name="id"/>
+        <attribute-override name="net">
+            <column name="fld_net"/>
+        </attribute-override>
+        <attribute-override name="ground">
+            <column name="fld_ground" unique="true" scale="2"/>
+        </attribute-override>
+        <association-override name="referer">
+            <join-column name="referer_id" referenced-column-name="id"/>
+        </association-override>
+    </entity>
+    <entity class="SocialSecurityPhysicalAccount">
+        <id-class class="org.hibernate.test.annotations.reflection.SocialSecurityNumber"/>
+        <discriminator-value>Physical</discriminator-value>
+        <discriminator-column length="34"/>
+    </entity>
+</entity-mappings>
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/strategy (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/strategy)

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/strategy/Location.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/strategy/Location.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/strategy/Location.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,26 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.strategy;
-
-/**
- * @author Emmanuel Bernard
- */
-public class Location {
-	private String city;
-	private String country;
-
-	public String getCity() {
-		return city;
-	}
-
-	public void setCity(String city) {
-		this.city = city;
-	}
-
-	public String getCountry() {
-		return country;
-	}
-
-	public void setCountry(String country) {
-		this.country = country;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/strategy/Location.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/strategy/Location.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/strategy/Location.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/strategy/Location.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,26 @@
+//$Id$
+package org.hibernate.test.annotations.strategy;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Location {
+	private String city;
+	private String country;
+
+	public String getCity() {
+		return city;
+	}
+
+	public void setCity(String city) {
+		this.city = city;
+	}
+
+	public String getCountry() {
+		return country;
+	}
+
+	public void setCountry(String country) {
+		this.country = country;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/strategy/Storm.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/strategy/Storm.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/strategy/Storm.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,62 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.strategy;
-
-import javax.persistence.Column;
-import javax.persistence.Embedded;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.UniqueConstraint;
-import javax.persistence.Table;
-
-import org.hibernate.annotations.Index;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Table(uniqueConstraints = {@UniqueConstraint(columnNames = {"start.country", "start.city"})})
-public class Storm {
-	private Integer id;
-	private Location start;
-	private Location end;
-	private String stormName;
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	@Embedded
-	public Location getStart() {
-		return start;
-	}
-
-	public void setStart(Location start) {
-		this.start = start;
-	}
-
-	@Embedded
-	public Location getEnd() {
-		return end;
-	}
-
-	public void setEnd(Location end) {
-		this.end = end;
-	}
-
-	@Index(name="storm_name_idx")
-	@Column(unique = true)
-	public String getStormName() {
-		return stormName;
-	}
-
-	public void setStormName(String name) {
-		this.stormName = name;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/strategy/Storm.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/strategy/Storm.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/strategy/Storm.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/strategy/Storm.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,62 @@
+//$Id$
+package org.hibernate.test.annotations.strategy;
+
+import javax.persistence.Column;
+import javax.persistence.Embedded;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.UniqueConstraint;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.Index;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Table(uniqueConstraints = {@UniqueConstraint(columnNames = {"start.country", "start.city"})})
+public class Storm {
+	private Integer id;
+	private Location start;
+	private Location end;
+	private String stormName;
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	@Embedded
+	public Location getStart() {
+		return start;
+	}
+
+	public void setStart(Location start) {
+		this.start = start;
+	}
+
+	@Embedded
+	public Location getEnd() {
+		return end;
+	}
+
+	public void setEnd(Location end) {
+		this.end = end;
+	}
+
+	@Index(name="storm_name_idx")
+	@Column(unique = true)
+	public String getStormName() {
+		return stormName;
+	}
+
+	public void setStormName(String name) {
+		this.stormName = name;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/strategy/StrategyTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/strategy/StrategyTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/strategy/StrategyTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,44 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.strategy;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-import org.hibernate.cfg.Configuration;
-import org.hibernate.cfg.DefaultComponentSafeNamingStrategy;
-import org.hibernate.test.annotations.TestCase;
-
-/**
- * @author Emmanuel Bernard
- */
-public class StrategyTest extends TestCase {
-
-	public void testComponentSafeStrategy() throws Exception {
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		Location start = new Location();
-		start.setCity( "Paris" );
-		start.setCountry( "France" );
-		Location end = new Location();
-		end.setCity( "London" );
-		end.setCountry( "UK" );
-		Storm storm = new Storm();
-		storm.setEnd( end );
-		storm.setStart( start );
-		s.persist( storm );
-		s.flush();
-		tx.rollback();
-		s.close();
-	}
-
-	protected void configure(Configuration cfg) {
-		cfg.setNamingStrategy( DefaultComponentSafeNamingStrategy.INSTANCE );
-		//cfg.getSessionEventListenerConfig().setFlushEventListener( new EJB3FlushEventListener() );
-		//cfg.getSessionEventListenerConfig().setAutoFlushEventListener( new EJB3AutoFlushEventListener() );
-	}
-
-	protected Class[] getMappings() {
-		return new Class[]{
-				Storm.class
-		};
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/strategy/StrategyTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/strategy/StrategyTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/strategy/StrategyTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/strategy/StrategyTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,44 @@
+//$Id$
+package org.hibernate.test.annotations.strategy;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.cfg.Configuration;
+import org.hibernate.cfg.DefaultComponentSafeNamingStrategy;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class StrategyTest extends TestCase {
+
+	public void testComponentSafeStrategy() throws Exception {
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		Location start = new Location();
+		start.setCity( "Paris" );
+		start.setCountry( "France" );
+		Location end = new Location();
+		end.setCity( "London" );
+		end.setCountry( "UK" );
+		Storm storm = new Storm();
+		storm.setEnd( end );
+		storm.setStart( start );
+		s.persist( storm );
+		s.flush();
+		tx.rollback();
+		s.close();
+	}
+
+	protected void configure(Configuration cfg) {
+		cfg.setNamingStrategy( DefaultComponentSafeNamingStrategy.INSTANCE );
+		//cfg.getSessionEventListenerConfig().setFlushEventListener( new EJB3FlushEventListener() );
+		//cfg.getSessionEventListenerConfig().setAutoFlushEventListener( new EJB3AutoFlushEventListener() );
+	}
+
+	protected Class[] getMappings() {
+		return new Class[]{
+				Storm.class
+		};
+	}
+}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass)

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass/Component.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass/Component.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass/Component.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,56 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.tableperclass;
-
-import javax.persistence.Id;
-import javax.persistence.Inheritance;
-import javax.persistence.Entity;
-import javax.persistence.InheritanceType;
-
-import org.hibernate.validator.NotNull;
-import org.hibernate.validator.Length;
-import org.hibernate.annotations.Index;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity(name = "xpmComponent")
- at Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
-public abstract class Component {
-	private String manufacturerPartNumber;
-	private Long manufacturerId;
-	private Long id;
-
-
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-
-
-	@Id
-	public Long getId() {
-		return id;
-	}
-
-
-	@NotNull
-	@Length(max = 40)
-	@Index(name = "manufacturerPartNumber")
-	public String getManufacturerPartNumber() {
-		return manufacturerPartNumber;
-	}
-
-	@NotNull
-	public Long getManufacturerId() {
-		return manufacturerId;
-	}
-
-	public void setManufacturerId(Long manufacturerId) {
-		this.manufacturerId = manufacturerId;
-	}
-
-
-	public void setManufacturerPartNumber(String manufacturerPartNumber) {
-		this.manufacturerPartNumber = manufacturerPartNumber;
-	}
-}
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass/Component.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass/Component.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass/Component.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass/Component.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,56 @@
+//$Id: $
+package org.hibernate.test.annotations.tableperclass;
+
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.Entity;
+import javax.persistence.InheritanceType;
+
+import org.hibernate.validator.NotNull;
+import org.hibernate.validator.Length;
+import org.hibernate.annotations.Index;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity(name = "xpmComponent")
+ at Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
+public abstract class Component {
+	private String manufacturerPartNumber;
+	private Long manufacturerId;
+	private Long id;
+
+
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+
+	@Id
+	public Long getId() {
+		return id;
+	}
+
+
+	@NotNull
+	@Length(max = 40)
+	@Index(name = "manufacturerPartNumber")
+	public String getManufacturerPartNumber() {
+		return manufacturerPartNumber;
+	}
+
+	@NotNull
+	public Long getManufacturerId() {
+		return manufacturerId;
+	}
+
+	public void setManufacturerId(Long manufacturerId) {
+		this.manufacturerId = manufacturerId;
+	}
+
+
+	public void setManufacturerPartNumber(String manufacturerPartNumber) {
+		this.manufacturerPartNumber = manufacturerPartNumber;
+	}
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass/Machine.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass/Machine.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass/Machine.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,37 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.tableperclass;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.Inheritance;
-import javax.persistence.InheritanceType;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
-public class Machine {
-	private Integer id;
-	private Double weight;
-
-	@Id
-	@GeneratedValue(strategy = GenerationType.TABLE)
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public Double getWeight() {
-		return weight;
-	}
-
-	public void setWeight(Double weight) {
-		this.weight = weight;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass/Machine.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass/Machine.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass/Machine.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass/Machine.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,37 @@
+//$Id$
+package org.hibernate.test.annotations.tableperclass;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
+public class Machine {
+	private Integer id;
+	private Double weight;
+
+	@Id
+	@GeneratedValue(strategy = GenerationType.TABLE)
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public Double getWeight() {
+		return weight;
+	}
+
+	public void setWeight(Double weight) {
+		this.weight = weight;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass/Product.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass/Product.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass/Product.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,15 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.tableperclass;
-
-import javax.persistence.Entity;
-import javax.persistence.Table;
-import javax.persistence.UniqueConstraint;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Table( name = "xPM_Product", uniqueConstraints = {@UniqueConstraint( columnNames = {
-		"manufacturerPartNumber", "manufacturerId"} )} )
-public class Product extends Component {
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass/Product.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass/Product.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass/Product.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass/Product.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,15 @@
+//$Id: $
+package org.hibernate.test.annotations.tableperclass;
+
+import javax.persistence.Entity;
+import javax.persistence.Table;
+import javax.persistence.UniqueConstraint;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Table( name = "xPM_Product", uniqueConstraints = {@UniqueConstraint( columnNames = {
+		"manufacturerPartNumber", "manufacturerId"} )} )
+public class Product extends Component {
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass/Robot.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass/Robot.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass/Robot.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,20 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.tableperclass;
-
-import javax.persistence.Entity;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Robot extends Machine {
-	private String name;
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass/Robot.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass/Robot.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass/Robot.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass/Robot.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,20 @@
+//$Id$
+package org.hibernate.test.annotations.tableperclass;
+
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Robot extends Machine {
+	private String name;
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass/T800.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass/T800.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass/T800.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,20 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.tableperclass;
-
-import javax.persistence.Entity;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class T800 extends Robot {
-	public String getTargetName() {
-		return targetName;
-	}
-
-	public void setTargetName(String targetName) {
-		this.targetName = targetName;
-	}
-
-	private String targetName;
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass/T800.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass/T800.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass/T800.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass/T800.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,20 @@
+//$Id$
+package org.hibernate.test.annotations.tableperclass;
+
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class T800 extends Robot {
+	public String getTargetName() {
+		return targetName;
+	}
+
+	public void setTargetName(String targetName) {
+		this.targetName = targetName;
+	}
+
+	private String targetName;
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass/TablePerClassTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass/TablePerClassTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass/TablePerClassTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,90 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.tableperclass;
-
-import java.util.List;
-import java.sql.SQLException;
-
-import org.hibernate.Query;
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-import org.hibernate.JDBCException;
-import org.hibernate.test.annotations.TestCase;
-
-/**
- * @author Emmanuel Bernard
- */
-public class TablePerClassTest extends TestCase {
-	public void testUnionSubClass() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		Machine computer = new Machine();
-		computer.setWeight( new Double( 4 ) );
-		Robot asimov = new Robot();
-		asimov.setWeight( new Double( 120 ) );
-		asimov.setName( "Asimov" );
-		T800 terminator = new T800();
-		terminator.setName( "Terminator" );
-		terminator.setWeight( new Double( 300 ) );
-		terminator.setTargetName( "Sarah Connor" );
-		s.persist( computer );
-		s.persist( asimov );
-		s.persist( terminator );
-		tx.commit();
-		s.close();
-		s = openSession();
-		tx = s.beginTransaction();
-		Query q = s.createQuery( "from Machine m where m.weight >= :weight" );
-		q.setDouble( "weight", new Double( 10 ) );
-		List result = q.list();
-		assertEquals( 2, result.size() );
-		tx.commit();
-		s.close();
-		s = openSession();
-		tx = s.beginTransaction();
-		tx.commit();
-		s.close();
-	}
-
-	public void testConstraintsOnSuperclassProperties() throws Exception {
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		Product product1 = new Product();
-		product1.setId( 1l );
-		product1.setManufacturerId( 1l );
-		product1.setManufacturerPartNumber( "AAFR");
-		s.persist( product1 );
-		s.flush();
-		Product product2 = new Product();
-		product2.setId( 2l );
-		product2.setManufacturerId( 1l );
-		product2.setManufacturerPartNumber( "AAFR");
-		s.persist( product2 );
-		try {
-			s.flush();
-			fail("Database Exception not handled");
-		}
-		catch( JDBCException e ) {
-			//success
-		}
-		tx.rollback();
-		s.close();
-	}
-
-	
-
-	public TablePerClassTest(String x) {
-		super( x );	//To change body of overridden methods use File | Settings | File Templates.
-	}
-
-	protected Class[] getMappings() {
-		return new Class[]{
-				Robot.class,
-				T800.class,
-				Machine.class,
-				Component.class,
-				Product.class
-		};
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass/TablePerClassTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass/TablePerClassTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass/TablePerClassTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tableperclass/TablePerClassTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,90 @@
+//$Id$
+package org.hibernate.test.annotations.tableperclass;
+
+import java.util.List;
+import java.sql.SQLException;
+
+import org.hibernate.Query;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.JDBCException;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class TablePerClassTest extends TestCase {
+	public void testUnionSubClass() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		Machine computer = new Machine();
+		computer.setWeight( new Double( 4 ) );
+		Robot asimov = new Robot();
+		asimov.setWeight( new Double( 120 ) );
+		asimov.setName( "Asimov" );
+		T800 terminator = new T800();
+		terminator.setName( "Terminator" );
+		terminator.setWeight( new Double( 300 ) );
+		terminator.setTargetName( "Sarah Connor" );
+		s.persist( computer );
+		s.persist( asimov );
+		s.persist( terminator );
+		tx.commit();
+		s.close();
+		s = openSession();
+		tx = s.beginTransaction();
+		Query q = s.createQuery( "from Machine m where m.weight >= :weight" );
+		q.setDouble( "weight", new Double( 10 ) );
+		List result = q.list();
+		assertEquals( 2, result.size() );
+		tx.commit();
+		s.close();
+		s = openSession();
+		tx = s.beginTransaction();
+		tx.commit();
+		s.close();
+	}
+
+	public void testConstraintsOnSuperclassProperties() throws Exception {
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		Product product1 = new Product();
+		product1.setId( 1l );
+		product1.setManufacturerId( 1l );
+		product1.setManufacturerPartNumber( "AAFR");
+		s.persist( product1 );
+		s.flush();
+		Product product2 = new Product();
+		product2.setId( 2l );
+		product2.setManufacturerId( 1l );
+		product2.setManufacturerPartNumber( "AAFR");
+		s.persist( product2 );
+		try {
+			s.flush();
+			fail("Database Exception not handled");
+		}
+		catch( JDBCException e ) {
+			//success
+		}
+		tx.rollback();
+		s.close();
+	}
+
+	
+
+	public TablePerClassTest(String x) {
+		super( x );	//To change body of overridden methods use File | Settings | File Templates.
+	}
+
+	protected Class[] getMappings() {
+		return new Class[]{
+				Robot.class,
+				T800.class,
+				Machine.class,
+				Component.class,
+				Product.class
+		};
+	}
+}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target)

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/Brand.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/Brand.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/Brand.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,56 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.target;
-
-import java.util.Map;
-import java.util.HashMap;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.GeneratedValue;
-import javax.persistence.ManyToMany;
-
-import org.hibernate.annotations.MapKey;
-import org.hibernate.annotations.CollectionOfElements;
-import org.hibernate.annotations.MapKeyManyToMany;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Brand {
-	@Id
-	@GeneratedValue
-	private Long id;
-
-	@ManyToMany(targetEntity = LuggageImpl.class)
-	@MapKey(targetElement = SizeImpl.class)
-	private Map<Size, Luggage> luggagesBySize = new HashMap<Size, Luggage>();
-
-	@CollectionOfElements(targetElement = SizeImpl.class)
-	@MapKeyManyToMany(targetEntity = LuggageImpl.class)
-	private Map<Luggage, Size> sizePerLuggage = new HashMap<Luggage, Size>();
-
-
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-
-	public Map<Size, Luggage> getLuggagesBySize() {
-		return luggagesBySize;
-	}
-
-	public void setLuggagesBySize(Map<Size, Luggage> luggagesBySize) {
-		this.luggagesBySize = luggagesBySize;
-	}
-
-	public Map<Luggage, Size> getSizePerLuggage() {
-		return sizePerLuggage;
-	}
-
-	public void setSizePerLuggage(Map<Luggage, Size> sizePerLuggage) {
-		this.sizePerLuggage = sizePerLuggage;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/Brand.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/Brand.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/Brand.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/Brand.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,56 @@
+//$Id: $
+package org.hibernate.test.annotations.target;
+
+import java.util.Map;
+import java.util.HashMap;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+import javax.persistence.ManyToMany;
+
+import org.hibernate.annotations.MapKey;
+import org.hibernate.annotations.CollectionOfElements;
+import org.hibernate.annotations.MapKeyManyToMany;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Brand {
+	@Id
+	@GeneratedValue
+	private Long id;
+
+	@ManyToMany(targetEntity = LuggageImpl.class)
+	@MapKey(targetElement = SizeImpl.class)
+	private Map<Size, Luggage> luggagesBySize = new HashMap<Size, Luggage>();
+
+	@CollectionOfElements(targetElement = SizeImpl.class)
+	@MapKeyManyToMany(targetEntity = LuggageImpl.class)
+	private Map<Luggage, Size> sizePerLuggage = new HashMap<Luggage, Size>();
+
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public Map<Size, Luggage> getLuggagesBySize() {
+		return luggagesBySize;
+	}
+
+	public void setLuggagesBySize(Map<Size, Luggage> luggagesBySize) {
+		this.luggagesBySize = luggagesBySize;
+	}
+
+	public Map<Luggage, Size> getSizePerLuggage() {
+		return sizePerLuggage;
+	}
+
+	public void setSizePerLuggage(Map<Luggage, Size> sizePerLuggage) {
+		this.sizePerLuggage = sizePerLuggage;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/Luggage.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/Luggage.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/Luggage.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,17 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.target;
-
-/**
- * @author Emmanuel Bernard
- */
-public interface Luggage {
-	double getHeight();
-	double getWidth();
-
-	void setHeight(double height);
-	void setWidth(double width);
-
-	Owner getOwner();
-
-	void setOwner(Owner owner);
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/Luggage.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/Luggage.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/Luggage.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/Luggage.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,17 @@
+//$Id: $
+package org.hibernate.test.annotations.target;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public interface Luggage {
+	double getHeight();
+	double getWidth();
+
+	void setHeight(double height);
+	void setWidth(double width);
+
+	Owner getOwner();
+
+	void setOwner(Owner owner);
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/LuggageImpl.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/LuggageImpl.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/LuggageImpl.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,57 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.target;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.GeneratedValue;
-import javax.persistence.ManyToOne;
-import javax.persistence.Embedded;
-
-import org.hibernate.annotations.Target;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class LuggageImpl implements Luggage {
-	private Long id;
-	private double height;
-	private double width;
-	private Owner owner;
-
-	@Embedded
-	@Target(OwnerImpl.class)
-	public Owner getOwner() {
-		return owner;
-	}
-
-	public void setOwner(Owner owner) {
-		this.owner = owner;
-	}
-
-	@Id
-	@GeneratedValue
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-
-	public double getHeight() {
-		return height;
-	}
-
-	public void setHeight(double height) {
-		this.height = height;
-	}
-
-	public double getWidth() {
-		return width;
-	}
-
-	public void setWidth(double width) {
-		this.width = width;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/LuggageImpl.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/LuggageImpl.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/LuggageImpl.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/LuggageImpl.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,57 @@
+//$Id: $
+package org.hibernate.test.annotations.target;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+import javax.persistence.ManyToOne;
+import javax.persistence.Embedded;
+
+import org.hibernate.annotations.Target;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class LuggageImpl implements Luggage {
+	private Long id;
+	private double height;
+	private double width;
+	private Owner owner;
+
+	@Embedded
+	@Target(OwnerImpl.class)
+	public Owner getOwner() {
+		return owner;
+	}
+
+	public void setOwner(Owner owner) {
+		this.owner = owner;
+	}
+
+	@Id
+	@GeneratedValue
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public double getHeight() {
+		return height;
+	}
+
+	public void setHeight(double height) {
+		this.height = height;
+	}
+
+	public double getWidth() {
+		return width;
+	}
+
+	public void setWidth(double width) {
+		this.width = width;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/Owner.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/Owner.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/Owner.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,12 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.target;
-
-import java.util.Map;
-
-/**
- * @author Emmanuel Bernard
- */
-public interface Owner {
-	String getName();
-	void setName(String name);
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/Owner.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/Owner.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/Owner.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/Owner.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,12 @@
+//$Id: $
+package org.hibernate.test.annotations.target;
+
+import java.util.Map;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public interface Owner {
+	String getName();
+	void setName(String name);
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/OwnerImpl.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/OwnerImpl.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/OwnerImpl.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,24 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.target;
-
-import java.util.Map;
-import java.util.HashMap;
-import javax.persistence.Embeddable;
-import org.hibernate.annotations.MapKey;
-import javax.persistence.ManyToMany;
-
-/**
- * @author Emmanuel Bernard
- */
- at Embeddable
-public class OwnerImpl implements Owner {
-	private String name;
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/OwnerImpl.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/OwnerImpl.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/OwnerImpl.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/OwnerImpl.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,24 @@
+//$Id: $
+package org.hibernate.test.annotations.target;
+
+import java.util.Map;
+import java.util.HashMap;
+import javax.persistence.Embeddable;
+import org.hibernate.annotations.MapKey;
+import javax.persistence.ManyToMany;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Embeddable
+public class OwnerImpl implements Owner {
+	private String name;
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/Size.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/Size.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/Size.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,10 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.target;
-
-/**
- * @author Emmanuel Bernard
- */
-public interface Size {
-	String getName();
-	void setName(String name);
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/Size.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/Size.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/Size.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/Size.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,10 @@
+//$Id: $
+package org.hibernate.test.annotations.target;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public interface Size {
+	String getName();
+	void setName(String name);
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/SizeImpl.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/SizeImpl.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/SizeImpl.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,20 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.target;
-
-import javax.persistence.Embeddable;
-
-/**
- * @author Emmanuel Bernard
- */
- at Embeddable
-public class SizeImpl implements Size {
-	private String name;
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/SizeImpl.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/SizeImpl.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/SizeImpl.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/SizeImpl.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,20 @@
+//$Id: $
+package org.hibernate.test.annotations.target;
+
+import javax.persistence.Embeddable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Embeddable
+public class SizeImpl implements Size {
+	private String name;
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/TargetTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/TargetTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/TargetTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,82 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.target;
-
-import org.hibernate.test.annotations.TestCase;
-import org.hibernate.Session;
-
-/**
- * @author Emmanuel Bernard
- */
-public class TargetTest extends TestCase {
-
-	public void testTargetOnEmbedded() throws Exception {
-		Session s = openSession();
-		s.getTransaction().begin();
-		Luggage l = new LuggageImpl();
-		l.setHeight( 12 );
-		l.setWidth( 12 );
-		Owner o = new OwnerImpl();
-		o.setName( "Emmanuel" );
-		l.setOwner( o );
-		s.persist( l );
-		s.flush();
-		s.clear();
-		l = (Luggage) s.get(LuggageImpl.class, ( (LuggageImpl) l).getId() );
-		assertEquals( "Emmanuel", l.getOwner().getName() );
-		s.getTransaction().rollback();
-		s.close();
-	}
-
-	public void testTargetOnMapKey() throws Exception {
-		Session s = openSession();
-		s.getTransaction().begin();
-		Luggage l = new LuggageImpl();
-		l.setHeight( 12 );
-		l.setWidth( 12 );
-		Size size = new SizeImpl();
-		size.setName( "S" );
-		Owner o = new OwnerImpl();
-		o.setName( "Emmanuel" );
-		l.setOwner( o );
-		s.persist( l );
-		Brand b = new Brand();
-		s.persist( b );
-		b.getLuggagesBySize().put( size, l );
-		s.flush();
-		s.clear();
-		b = (Brand) s.get(Brand.class, b.getId() );
-		assertEquals( "S", b.getLuggagesBySize().keySet().iterator().next().getName() );
-		s.getTransaction().rollback();
-		s.close();
-	}
-
-	public void testTargetOnMapKeyManyToMany() throws Exception {
-		Session s = openSession();
-		s.getTransaction().begin();
-		Luggage l = new LuggageImpl();
-		l.setHeight( 12 );
-		l.setWidth( 12 );
-		Size size = new SizeImpl();
-		size.setName( "S" );
-		Owner o = new OwnerImpl();
-		o.setName( "Emmanuel" );
-		l.setOwner( o );
-		s.persist( l );
-		Brand b = new Brand();
-		s.persist( b );
-		b.getSizePerLuggage().put( l, size );
-		s.flush();
-		s.clear();
-		b = (Brand) s.get(Brand.class, b.getId() );
-		assertEquals( 12d, b.getSizePerLuggage().keySet().iterator().next().getWidth() );
-		s.getTransaction().rollback();
-		s.close();
-	}
-
-	protected Class[] getMappings() {
-		return new Class[] {
-				LuggageImpl.class,
-				Brand.class
-		};
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/TargetTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/TargetTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/TargetTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/target/TargetTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,82 @@
+//$Id: $
+package org.hibernate.test.annotations.target;
+
+import org.hibernate.test.annotations.TestCase;
+import org.hibernate.Session;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class TargetTest extends TestCase {
+
+	public void testTargetOnEmbedded() throws Exception {
+		Session s = openSession();
+		s.getTransaction().begin();
+		Luggage l = new LuggageImpl();
+		l.setHeight( 12 );
+		l.setWidth( 12 );
+		Owner o = new OwnerImpl();
+		o.setName( "Emmanuel" );
+		l.setOwner( o );
+		s.persist( l );
+		s.flush();
+		s.clear();
+		l = (Luggage) s.get(LuggageImpl.class, ( (LuggageImpl) l).getId() );
+		assertEquals( "Emmanuel", l.getOwner().getName() );
+		s.getTransaction().rollback();
+		s.close();
+	}
+
+	public void testTargetOnMapKey() throws Exception {
+		Session s = openSession();
+		s.getTransaction().begin();
+		Luggage l = new LuggageImpl();
+		l.setHeight( 12 );
+		l.setWidth( 12 );
+		Size size = new SizeImpl();
+		size.setName( "S" );
+		Owner o = new OwnerImpl();
+		o.setName( "Emmanuel" );
+		l.setOwner( o );
+		s.persist( l );
+		Brand b = new Brand();
+		s.persist( b );
+		b.getLuggagesBySize().put( size, l );
+		s.flush();
+		s.clear();
+		b = (Brand) s.get(Brand.class, b.getId() );
+		assertEquals( "S", b.getLuggagesBySize().keySet().iterator().next().getName() );
+		s.getTransaction().rollback();
+		s.close();
+	}
+
+	public void testTargetOnMapKeyManyToMany() throws Exception {
+		Session s = openSession();
+		s.getTransaction().begin();
+		Luggage l = new LuggageImpl();
+		l.setHeight( 12 );
+		l.setWidth( 12 );
+		Size size = new SizeImpl();
+		size.setName( "S" );
+		Owner o = new OwnerImpl();
+		o.setName( "Emmanuel" );
+		l.setOwner( o );
+		s.persist( l );
+		Brand b = new Brand();
+		s.persist( b );
+		b.getSizePerLuggage().put( l, size );
+		s.flush();
+		s.clear();
+		b = (Brand) s.get(Brand.class, b.getId() );
+		assertEquals( 12d, b.getSizePerLuggage().keySet().iterator().next().getWidth() );
+		s.getTransaction().rollback();
+		s.close();
+	}
+
+	protected Class[] getMappings() {
+		return new Class[] {
+				LuggageImpl.class,
+				Brand.class
+		};
+	}
+}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer)

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/Country.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/Country.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/Country.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,15 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.tuplizer;
-
-import javax.persistence.Embeddable;
-import javax.persistence.Column;
-
-/**
- * @author Emmanuel Bernard
- */
- at Embeddable
-public interface Country {
-	@Column(name = "CountryName")
-	public String getName();
-	public void setName(String name);
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/Country.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/Country.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/Country.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/Country.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,15 @@
+//$Id: $
+package org.hibernate.test.annotations.tuplizer;
+
+import javax.persistence.Embeddable;
+import javax.persistence.Column;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Embeddable
+public interface Country {
+	@Column(name = "CountryName")
+	public String getName();
+	public void setName(String name);
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/Cuisine.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/Cuisine.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/Cuisine.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,29 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.tuplizer;
-
-import javax.persistence.Id;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Entity;
-
-import org.hibernate.annotations.Tuplizer;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Tuplizer(impl = DynamicEntityTuplizer.class)
-public interface Cuisine {
-	@Id
-	@GeneratedValue
-	public Long getId();
-	public void setId(Long id);
-
-	public String getName();
-	public void setName(String name);
-
-	@Tuplizer(impl = DynamicComponentTuplizer.class)
-	public Country getCountry();
-	public void setCountry(Country country);
-
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/Cuisine.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/Cuisine.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/Cuisine.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/Cuisine.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,29 @@
+//$Id: $
+package org.hibernate.test.annotations.tuplizer;
+
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Entity;
+
+import org.hibernate.annotations.Tuplizer;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Tuplizer(impl = DynamicEntityTuplizer.class)
+public interface Cuisine {
+	@Id
+	@GeneratedValue
+	public Long getId();
+	public void setId(Long id);
+
+	public String getName();
+	public void setName(String name);
+
+	@Tuplizer(impl = DynamicComponentTuplizer.class)
+	public Country getCountry();
+	public void setCountry(Country country);
+
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/DataProxyHandler.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/DataProxyHandler.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/DataProxyHandler.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,53 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.tuplizer;
-
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.Method;
-import java.util.HashMap;
-import java.io.Serializable;
-
-/**
- * A simple {@link java.lang.reflect.InvocationHandler} to act as the handler for our generated
- * {@link java.lang.reflect.Proxy}-based entity instances.
- * <p/>
- * This is a trivial impl which simply keeps the property values into
- * a Map.
- *
- * @author <a href="mailto:steve at hibernate.org">Steve Ebersole </a>
- */
-public final class DataProxyHandler implements InvocationHandler {
-	private String entityName;
-	private HashMap data = new HashMap();
-
-	public DataProxyHandler(String entityName, Serializable id) {
-		this.entityName = entityName;
-		data.put( "Id", id );
-	}
-
-	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
-		String methodName = method.getName();
-		if ( methodName.startsWith( "set" ) ) {
-			String propertyName = methodName.substring( 3 );
-			data.put( propertyName, args[0] );
-		}
-		else if ( methodName.startsWith( "get" ) ) {
-			String propertyName = methodName.substring( 3 );
-			return data.get( propertyName );
-		}
-		else if ( "toString".equals( methodName ) ) {
-			return entityName + "#" + data.get( "Id" );
-		}
-		else if ( "hashCode".equals( methodName ) ) {
-			return new Integer( this.hashCode() );
-		}
-		return null;
-	}
-
-	public String getEntityName() {
-		return entityName;
-	}
-
-	public HashMap getData() {
-		return data;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/DataProxyHandler.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/DataProxyHandler.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/DataProxyHandler.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/DataProxyHandler.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,53 @@
+//$Id: $
+package org.hibernate.test.annotations.tuplizer;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.io.Serializable;
+
+/**
+ * A simple {@link java.lang.reflect.InvocationHandler} to act as the handler for our generated
+ * {@link java.lang.reflect.Proxy}-based entity instances.
+ * <p/>
+ * This is a trivial impl which simply keeps the property values into
+ * a Map.
+ *
+ * @author <a href="mailto:steve at hibernate.org">Steve Ebersole </a>
+ */
+public final class DataProxyHandler implements InvocationHandler {
+	private String entityName;
+	private HashMap data = new HashMap();
+
+	public DataProxyHandler(String entityName, Serializable id) {
+		this.entityName = entityName;
+		data.put( "Id", id );
+	}
+
+	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
+		String methodName = method.getName();
+		if ( methodName.startsWith( "set" ) ) {
+			String propertyName = methodName.substring( 3 );
+			data.put( propertyName, args[0] );
+		}
+		else if ( methodName.startsWith( "get" ) ) {
+			String propertyName = methodName.substring( 3 );
+			return data.get( propertyName );
+		}
+		else if ( "toString".equals( methodName ) ) {
+			return entityName + "#" + data.get( "Id" );
+		}
+		else if ( "hashCode".equals( methodName ) ) {
+			return new Integer( this.hashCode() );
+		}
+		return null;
+	}
+
+	public String getEntityName() {
+		return entityName;
+	}
+
+	public HashMap getData() {
+		return data;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/DynamicComponentTuplizer.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/DynamicComponentTuplizer.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/DynamicComponentTuplizer.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,29 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.tuplizer;
-
-import org.hibernate.tuple.entity.PojoEntityTuplizer;
-import org.hibernate.tuple.entity.EntityMetamodel;
-import org.hibernate.tuple.Instantiator;
-import org.hibernate.tuple.component.PojoComponentTuplizer;
-import org.hibernate.mapping.PersistentClass;
-import org.hibernate.mapping.Component;
-import org.hibernate.proxy.ProxyFactory;
-import org.hibernate.property.Getter;
-import org.hibernate.property.Setter;
-import org.hibernate.HibernateException;
-
-/**
- * @author Emmanuel Bernard
- */
-public class DynamicComponentTuplizer extends PojoComponentTuplizer {
-
-	public DynamicComponentTuplizer(Component component) {
-		super( component );
-	}
-
-
-	protected Instantiator buildInstantiator(Component component) {
-		return new DynamicInstantiator( component.getComponentClassName() );	//To change body of overridden methods use File | Settings | File Templates.
-	}
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/DynamicComponentTuplizer.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/DynamicComponentTuplizer.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/DynamicComponentTuplizer.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/DynamicComponentTuplizer.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,29 @@
+//$Id: $
+package org.hibernate.test.annotations.tuplizer;
+
+import org.hibernate.tuple.entity.PojoEntityTuplizer;
+import org.hibernate.tuple.entity.EntityMetamodel;
+import org.hibernate.tuple.Instantiator;
+import org.hibernate.tuple.component.PojoComponentTuplizer;
+import org.hibernate.mapping.PersistentClass;
+import org.hibernate.mapping.Component;
+import org.hibernate.proxy.ProxyFactory;
+import org.hibernate.property.Getter;
+import org.hibernate.property.Setter;
+import org.hibernate.HibernateException;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class DynamicComponentTuplizer extends PojoComponentTuplizer {
+
+	public DynamicComponentTuplizer(Component component) {
+		super( component );
+	}
+
+
+	protected Instantiator buildInstantiator(Component component) {
+		return new DynamicInstantiator( component.getComponentClassName() );	//To change body of overridden methods use File | Settings | File Templates.
+	}
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/DynamicEntityTuplizer.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/DynamicEntityTuplizer.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/DynamicEntityTuplizer.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,32 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.tuplizer;
-
-import org.hibernate.tuple.entity.PojoEntityTuplizer;
-import org.hibernate.tuple.entity.EntityMetamodel;
-import org.hibernate.tuple.Instantiator;
-import org.hibernate.mapping.PersistentClass;
-import org.hibernate.proxy.ProxyFactory;
-import org.hibernate.property.Getter;
-import org.hibernate.property.Setter;
-
-/**
- * @author Emmanuel Bernard
- */
-public class DynamicEntityTuplizer extends PojoEntityTuplizer {
-
-		public DynamicEntityTuplizer(EntityMetamodel entityMetamodel, PersistentClass mappedEntity) {
-			super( entityMetamodel, mappedEntity );
-		}
-
-		protected Instantiator buildInstantiator(PersistentClass persistentClass) {
-			return new DynamicInstantiator( persistentClass.getEntityName() );
-		}
-
-		protected ProxyFactory buildProxyFactory(PersistentClass persistentClass, Getter idGetter, Setter idSetter) {
-			// allows defining a custom proxy factory, which is responsible for
-			// generating lazy proxies for a given entity.
-			//
-			// Here we simply use the default...
-			return super.buildProxyFactory( persistentClass, idGetter, idSetter );
-		}
-	}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/DynamicEntityTuplizer.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/DynamicEntityTuplizer.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/DynamicEntityTuplizer.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/DynamicEntityTuplizer.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,32 @@
+//$Id: $
+package org.hibernate.test.annotations.tuplizer;
+
+import org.hibernate.tuple.entity.PojoEntityTuplizer;
+import org.hibernate.tuple.entity.EntityMetamodel;
+import org.hibernate.tuple.Instantiator;
+import org.hibernate.mapping.PersistentClass;
+import org.hibernate.proxy.ProxyFactory;
+import org.hibernate.property.Getter;
+import org.hibernate.property.Setter;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class DynamicEntityTuplizer extends PojoEntityTuplizer {
+
+		public DynamicEntityTuplizer(EntityMetamodel entityMetamodel, PersistentClass mappedEntity) {
+			super( entityMetamodel, mappedEntity );
+		}
+
+		protected Instantiator buildInstantiator(PersistentClass persistentClass) {
+			return new DynamicInstantiator( persistentClass.getEntityName() );
+		}
+
+		protected ProxyFactory buildProxyFactory(PersistentClass persistentClass, Getter idGetter, Setter idSetter) {
+			// allows defining a custom proxy factory, which is responsible for
+			// generating lazy proxies for a given entity.
+			//
+			// Here we simply use the default...
+			return super.buildProxyFactory( persistentClass, idGetter, idSetter );
+		}
+	}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/DynamicInstantiator.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/DynamicInstantiator.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/DynamicInstantiator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,56 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.tuplizer;
-
-import java.io.Serializable;
-import java.lang.reflect.Proxy;
-import java.lang.reflect.InvocationHandler;
-
-import org.hibernate.tuple.Instantiator;
-import org.hibernate.util.ReflectHelper;
-import org.hibernate.HibernateException;
-
-/**
- * @author Emmanuel Bernard
- */
-public class DynamicInstantiator implements Instantiator {
-	private final String entityName;
-
-	public DynamicInstantiator(String entityName) {
-		this.entityName = entityName;
-	}
-
-	public Object instantiate(Serializable id) {
-		if ( Cuisine.class.getName().equals( entityName ) ) {
-			return ProxyHelper.newCuisineProxy( id );
-		}
-		if ( Country.class.getName().equals( entityName ) ) {
-			return ProxyHelper.newCountryProxy( id );
-		}
-		else {
-			throw new IllegalArgumentException( "unknown entity for instantiation [" + entityName + "]" );
-		}
-	}
-
-	public Object instantiate() {
-		return instantiate( null );
-	}
-
-	public boolean isInstance(Object object) {
-		String resolvedEntityName = null;
-		if ( Proxy.isProxyClass( object.getClass() ) ) {
-			InvocationHandler handler = Proxy.getInvocationHandler( object );
-			if ( DataProxyHandler.class.isAssignableFrom( handler.getClass() ) ) {
-				DataProxyHandler myHandler = ( DataProxyHandler ) handler;
-				resolvedEntityName = myHandler.getEntityName();
-			}
-		}
-		try {
-			return ReflectHelper.classForName( entityName ).isInstance( object );
-		}
-		catch( Throwable t ) {
-			throw new HibernateException( "could not get handle to entity-name as interface : " + t );
-		}
-
-//		return entityName.equals( resolvedEntityName );
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/DynamicInstantiator.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/DynamicInstantiator.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/DynamicInstantiator.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/DynamicInstantiator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,56 @@
+//$Id: $
+package org.hibernate.test.annotations.tuplizer;
+
+import java.io.Serializable;
+import java.lang.reflect.Proxy;
+import java.lang.reflect.InvocationHandler;
+
+import org.hibernate.tuple.Instantiator;
+import org.hibernate.util.ReflectHelper;
+import org.hibernate.HibernateException;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class DynamicInstantiator implements Instantiator {
+	private final String entityName;
+
+	public DynamicInstantiator(String entityName) {
+		this.entityName = entityName;
+	}
+
+	public Object instantiate(Serializable id) {
+		if ( Cuisine.class.getName().equals( entityName ) ) {
+			return ProxyHelper.newCuisineProxy( id );
+		}
+		if ( Country.class.getName().equals( entityName ) ) {
+			return ProxyHelper.newCountryProxy( id );
+		}
+		else {
+			throw new IllegalArgumentException( "unknown entity for instantiation [" + entityName + "]" );
+		}
+	}
+
+	public Object instantiate() {
+		return instantiate( null );
+	}
+
+	public boolean isInstance(Object object) {
+		String resolvedEntityName = null;
+		if ( Proxy.isProxyClass( object.getClass() ) ) {
+			InvocationHandler handler = Proxy.getInvocationHandler( object );
+			if ( DataProxyHandler.class.isAssignableFrom( handler.getClass() ) ) {
+				DataProxyHandler myHandler = ( DataProxyHandler ) handler;
+				resolvedEntityName = myHandler.getEntityName();
+			}
+		}
+		try {
+			return ReflectHelper.classForName( entityName ).isInstance( object );
+		}
+		catch( Throwable t ) {
+			throw new HibernateException( "could not get handle to entity-name as interface : " + t );
+		}
+
+//		return entityName.equals( resolvedEntityName );
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/EntityNameInterceptor.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/EntityNameInterceptor.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/EntityNameInterceptor.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,25 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.tuplizer;
-
-import org.hibernate.EmptyInterceptor;
-
-/**
- * @author Emmanuel Bernard
- */
-public class EntityNameInterceptor extends EmptyInterceptor {
-	/**
-	 * The callback from Hibernate to determine the entity name given
-	 * a presumed entity instance.
-	 *
-	 * @param object The presumed entity instance.
-	 * @return The entity name (pointing to the proper entity mapping).
-	 */
-	public String getEntityName(Object object) {
-		String entityName = ProxyHelper.extractEntityName( object );
-		if ( entityName == null ) {
-			entityName = super.getEntityName( object );
-		}
-		return entityName;
-	}
-}
-

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/EntityNameInterceptor.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/EntityNameInterceptor.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/EntityNameInterceptor.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/EntityNameInterceptor.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,25 @@
+//$Id: $
+package org.hibernate.test.annotations.tuplizer;
+
+import org.hibernate.EmptyInterceptor;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class EntityNameInterceptor extends EmptyInterceptor {
+	/**
+	 * The callback from Hibernate to determine the entity name given
+	 * a presumed entity instance.
+	 *
+	 * @param object The presumed entity instance.
+	 * @return The entity name (pointing to the proper entity mapping).
+	 */
+	public String getEntityName(Object object) {
+		String entityName = ProxyHelper.extractEntityName( object );
+		if ( entityName == null ) {
+			entityName = super.getEntityName( object );
+		}
+		return entityName;
+	}
+}
+

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/ProxyHelper.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/ProxyHelper.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/ProxyHelper.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,50 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.tuplizer;
-
-import java.io.Serializable;
-import java.lang.reflect.Proxy;
-import java.lang.reflect.InvocationHandler;
-
-/**
- * @author Emmanuel Bernard
- */
-public class ProxyHelper {
-
-	public static Country newPersonProxy() {
-		return newCountryProxy( null );
-	}
-
-	public static Country newCountryProxy(Serializable id) {
-		return ( Country ) Proxy.newProxyInstance(
-				Country.class.getClassLoader(),
-		        new Class[] {Country.class},
-		        new DataProxyHandler( Country.class.getName(), id )
-		);
-	}
-
-	public static Cuisine newCustomerProxy() {
-		return newCuisineProxy( null );
-	}
-
-	public static Cuisine newCuisineProxy(Serializable id) {
-		return ( Cuisine ) Proxy.newProxyInstance(
-				Cuisine.class.getClassLoader(),
-		        new Class[] {Cuisine.class},
-		        new DataProxyHandler( Cuisine.class.getName(), id )
-		);
-	}
-
-	public static String extractEntityName(Object object) {
-		// Our custom java.lang.reflect.Proxy instances actually bundle
-		// their appropriate entity name, so we simply extract it from there
-		// if this represents one of our proxies; otherwise, we return null
-		if ( Proxy.isProxyClass( object.getClass() ) ) {
-			InvocationHandler handler = Proxy.getInvocationHandler( object );
-			if ( DataProxyHandler.class.isAssignableFrom( handler.getClass() ) ) {
-				DataProxyHandler myHandler = ( DataProxyHandler ) handler;
-				return myHandler.getEntityName();
-			}
-		}
-		return null;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/ProxyHelper.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/ProxyHelper.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/ProxyHelper.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/ProxyHelper.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,50 @@
+//$Id: $
+package org.hibernate.test.annotations.tuplizer;
+
+import java.io.Serializable;
+import java.lang.reflect.Proxy;
+import java.lang.reflect.InvocationHandler;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class ProxyHelper {
+
+	public static Country newPersonProxy() {
+		return newCountryProxy( null );
+	}
+
+	public static Country newCountryProxy(Serializable id) {
+		return ( Country ) Proxy.newProxyInstance(
+				Country.class.getClassLoader(),
+		        new Class[] {Country.class},
+		        new DataProxyHandler( Country.class.getName(), id )
+		);
+	}
+
+	public static Cuisine newCustomerProxy() {
+		return newCuisineProxy( null );
+	}
+
+	public static Cuisine newCuisineProxy(Serializable id) {
+		return ( Cuisine ) Proxy.newProxyInstance(
+				Cuisine.class.getClassLoader(),
+		        new Class[] {Cuisine.class},
+		        new DataProxyHandler( Cuisine.class.getName(), id )
+		);
+	}
+
+	public static String extractEntityName(Object object) {
+		// Our custom java.lang.reflect.Proxy instances actually bundle
+		// their appropriate entity name, so we simply extract it from there
+		// if this represents one of our proxies; otherwise, we return null
+		if ( Proxy.isProxyClass( object.getClass() ) ) {
+			InvocationHandler handler = Proxy.getInvocationHandler( object );
+			if ( DataProxyHandler.class.isAssignableFrom( handler.getClass() ) ) {
+				DataProxyHandler myHandler = ( DataProxyHandler ) handler;
+				return myHandler.getEntityName();
+			}
+		}
+		return null;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/TuplizerTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/TuplizerTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/TuplizerTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,34 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.tuplizer;
-
-import org.hibernate.test.annotations.TestCase;
-import org.hibernate.Session;
-
-/**
- * @author Emmanuel Bernard
- */
-public class TuplizerTest extends TestCase {
-	public void testEntityTuplizer() throws Exception {
-		Cuisine cuisine = ProxyHelper.newCuisineProxy( null );
-		cuisine.setName( "Française" );
-		Country country = ProxyHelper.newCountryProxy( null );
-		country.setName( "France" );
-		cuisine.setCountry( country );
-		Session s = openSession( new EntityNameInterceptor() );
-		s.getTransaction().begin();
-		s.persist( cuisine );
-		s.flush();
-		s.clear();
-		cuisine = (Cuisine) s.get(Cuisine.class, cuisine.getId() );
-		assertNotNull( cuisine );
-		assertEquals( "Française", cuisine.getName() );
-		assertEquals( "France", country.getName() );
-		s.getTransaction().rollback();
-		s.close();
-	}
-	protected Class[] getMappings() {
-		return new Class[] {
-				Cuisine.class
-		};
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/TuplizerTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/TuplizerTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/TuplizerTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/tuplizer/TuplizerTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,34 @@
+//$Id: $
+package org.hibernate.test.annotations.tuplizer;
+
+import org.hibernate.test.annotations.TestCase;
+import org.hibernate.Session;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class TuplizerTest extends TestCase {
+	public void testEntityTuplizer() throws Exception {
+		Cuisine cuisine = ProxyHelper.newCuisineProxy( null );
+		cuisine.setName( "Française" );
+		Country country = ProxyHelper.newCountryProxy( null );
+		country.setName( "France" );
+		cuisine.setCountry( country );
+		Session s = openSession( new EntityNameInterceptor() );
+		s.getTransaction().begin();
+		s.persist( cuisine );
+		s.flush();
+		s.clear();
+		cuisine = (Cuisine) s.get(Cuisine.class, cuisine.getId() );
+		assertNotNull( cuisine );
+		assertEquals( "Française", cuisine.getName() );
+		assertEquals( "France", country.getName() );
+		s.getTransaction().rollback();
+		s.close();
+	}
+	protected Class[] getMappings() {
+		return new Class[] {
+				Cuisine.class
+		};
+	}
+}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/type (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/type)

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/type/Dvd.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/type/Dvd.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/type/Dvd.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,48 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.type;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-
-import org.hibernate.annotations.Columns;
-import org.hibernate.annotations.GenericGenerator;
-import org.hibernate.annotations.Type;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Dvd {
-	private MyOid id;
-	private String title;
-
-	@Id
-	@GeneratedValue(generator = "custom-id")
-	@GenericGenerator(name = "custom-id", strategy = "org.hibernate.test.annotations.type.MyOidGenerator")
-	@Type(type = "org.hibernate.test.annotations.type.MyOidType")
-	@Columns(
-			columns = {
-			@Column(name = "high"),
-			@Column(name = "middle"),
-			@Column(name = "low"),
-			@Column(name = "other")
-					}
-	)
-	public MyOid getId() {
-		return id;
-	}
-
-	public void setId(MyOid id) {
-		this.id = id;
-	}
-
-	public String getTitle() {
-		return title;
-	}
-
-	public void setTitle(String title) {
-		this.title = title;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/type/Dvd.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/type/Dvd.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/type/Dvd.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/type/Dvd.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,48 @@
+//$Id$
+package org.hibernate.test.annotations.type;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+import org.hibernate.annotations.Columns;
+import org.hibernate.annotations.GenericGenerator;
+import org.hibernate.annotations.Type;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Dvd {
+	private MyOid id;
+	private String title;
+
+	@Id
+	@GeneratedValue(generator = "custom-id")
+	@GenericGenerator(name = "custom-id", strategy = "org.hibernate.test.annotations.type.MyOidGenerator")
+	@Type(type = "org.hibernate.test.annotations.type.MyOidType")
+	@Columns(
+			columns = {
+			@Column(name = "high"),
+			@Column(name = "middle"),
+			@Column(name = "low"),
+			@Column(name = "other")
+					}
+	)
+	public MyOid getId() {
+		return id;
+	}
+
+	public void setId(MyOid id) {
+		this.id = id;
+	}
+
+	public String getTitle() {
+		return title;
+	}
+
+	public void setTitle(String title) {
+		this.title = title;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/type/MyOid.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/type/MyOid.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/type/MyOid.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,79 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.type;
-
-import java.io.Serializable;
-
-/**
- * @author Emmanuel Bernard
- */
-public class MyOid implements Serializable {
-	private int high;
-	private int middle;
-	private int low;
-	private int other;
-
-	protected MyOid() {
-	}
-
-	public MyOid(int aHigh, int aMiddle, int aLow, int aOther) {
-		high = aHigh;
-		middle = aMiddle;
-		low = aLow;
-		other = aOther;
-	}
-
-	public int getHigh() {
-		return high;
-	}
-
-	public void setHigh(int aHigh) {
-		high = aHigh;
-	}
-
-	public int getMiddle() {
-		return middle;
-	}
-
-	public void setMiddle(int aMiddle) {
-		middle = aMiddle;
-	}
-
-	public int getLow() {
-		return low;
-	}
-
-	public void setLow(int aLow) {
-		low = aLow;
-	}
-
-	public int getOther() {
-		return other;
-	}
-
-	public void setOther(int aOther) {
-		other = aOther;
-	}
-
-	public boolean equals(Object o) {
-		if ( this == o ) return true;
-		if ( o == null || getClass() != o.getClass() ) return false;
-
-		final MyOid myOid = (MyOid) o;
-
-		if ( high != myOid.high ) return false;
-		if ( low != myOid.low ) return false;
-		if ( middle != myOid.middle ) return false;
-		if ( other != myOid.other ) return false;
-
-		return true;
-	}
-
-	public int hashCode() {
-		int result;
-		result = low;
-		result = 29 * result + middle;
-		result = 29 * result + high;
-		result = 29 * result + other;
-		return result;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/type/MyOid.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/type/MyOid.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/type/MyOid.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/type/MyOid.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,79 @@
+//$Id$
+package org.hibernate.test.annotations.type;
+
+import java.io.Serializable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class MyOid implements Serializable {
+	private int high;
+	private int middle;
+	private int low;
+	private int other;
+
+	protected MyOid() {
+	}
+
+	public MyOid(int aHigh, int aMiddle, int aLow, int aOther) {
+		high = aHigh;
+		middle = aMiddle;
+		low = aLow;
+		other = aOther;
+	}
+
+	public int getHigh() {
+		return high;
+	}
+
+	public void setHigh(int aHigh) {
+		high = aHigh;
+	}
+
+	public int getMiddle() {
+		return middle;
+	}
+
+	public void setMiddle(int aMiddle) {
+		middle = aMiddle;
+	}
+
+	public int getLow() {
+		return low;
+	}
+
+	public void setLow(int aLow) {
+		low = aLow;
+	}
+
+	public int getOther() {
+		return other;
+	}
+
+	public void setOther(int aOther) {
+		other = aOther;
+	}
+
+	public boolean equals(Object o) {
+		if ( this == o ) return true;
+		if ( o == null || getClass() != o.getClass() ) return false;
+
+		final MyOid myOid = (MyOid) o;
+
+		if ( high != myOid.high ) return false;
+		if ( low != myOid.low ) return false;
+		if ( middle != myOid.middle ) return false;
+		if ( other != myOid.other ) return false;
+
+		return true;
+	}
+
+	public int hashCode() {
+		int result;
+		result = low;
+		result = 29 * result + middle;
+		result = 29 * result + high;
+		result = 29 * result + other;
+		return result;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/type/MyOidGenerator.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/type/MyOidGenerator.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/type/MyOidGenerator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,22 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.type;
-
-import java.io.Serializable;
-
-import org.hibernate.HibernateException;
-import org.hibernate.engine.SessionImplementor;
-import org.hibernate.id.IdentifierGenerator;
-
-/**
- * @author Emmanuel Bernard
- */
-public class MyOidGenerator implements IdentifierGenerator {
-
-	private int counter;
-
-	public Serializable generate(SessionImplementor aSessionImplementor, Object aObject) throws HibernateException {
-		counter++;
-		return new MyOid( 0, 0, 0, counter );
-	}
-}
-

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/type/MyOidGenerator.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/type/MyOidGenerator.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/type/MyOidGenerator.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/type/MyOidGenerator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,22 @@
+//$Id$
+package org.hibernate.test.annotations.type;
+
+import java.io.Serializable;
+
+import org.hibernate.HibernateException;
+import org.hibernate.engine.SessionImplementor;
+import org.hibernate.id.IdentifierGenerator;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class MyOidGenerator implements IdentifierGenerator {
+
+	private int counter;
+
+	public Serializable generate(SessionImplementor aSessionImplementor, Object aObject) throws HibernateException {
+		counter++;
+		return new MyOid( 0, 0, 0, counter );
+	}
+}
+

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/type/MyOidType.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/type/MyOidType.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/type/MyOidType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,147 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.type;
-
-import java.io.Serializable;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-
-import org.hibernate.Hibernate;
-import org.hibernate.HibernateException;
-import org.hibernate.engine.SessionImplementor;
-import org.hibernate.type.Type;
-import org.hibernate.usertype.CompositeUserType;
-
-/**
- * @author Emmanuel Bernard
- */
-public class MyOidType implements CompositeUserType {
-
-	public static final String[] PROPERTY_NAMES = new String[]{"high", "middle", "low", "other"};
-	public static final Type[] TYPES = new Type[]{Hibernate.INTEGER, Hibernate.INTEGER, Hibernate.INTEGER, Hibernate.INTEGER};
-
-
-	public String[] getPropertyNames() {
-		return PROPERTY_NAMES;
-	}
-
-	public Type[] getPropertyTypes() {
-		return TYPES;
-	}
-
-	public Object getPropertyValue(Object aObject, int i) throws HibernateException {
-		MyOid dbOid = (MyOid) aObject;
-		switch ( i ) {
-			case 0:
-				return dbOid.getHigh();
-			case 1:
-				return dbOid.getMiddle();
-			case 2:
-				return dbOid.getLow();
-			case 3:
-				return dbOid.getOther();
-			default:
-				throw new HibernateException( "Unsupported property index " + i );
-		}
-
-	}
-
-	public void setPropertyValue(Object aObject, int i, Object aObject1) throws HibernateException {
-		MyOid dbOid = (MyOid) aObject;
-		switch ( i ) {
-			case 0:
-				dbOid.setHigh( (Integer) aObject1 );
-			case 1:
-				dbOid.setMiddle( (Integer) aObject1 );
-			case 2:
-				dbOid.setLow( (Integer) aObject1 );
-			case 3:
-				dbOid.setOther( (Integer) aObject1 );
-			default:
-				throw new HibernateException( "Unsupported property index " + i );
-		}
-	}
-
-	public Class returnedClass() {
-		return MyOid.class;
-	}
-
-	public boolean equals(Object x, Object y) throws HibernateException {
-		if ( x == y ) return true;
-		if ( x == null || y == null ) return false;
-
-		MyOid oid1 = (MyOid) x;
-		MyOid oid2 = (MyOid) y;
-
-		if ( oid1.getHigh() != oid2.getHigh() ) {
-			return false;
-		}
-		if ( oid1.getMiddle() != oid2.getMiddle() ) {
-			return false;
-		}
-		if ( oid1.getLow() != oid2.getLow() ) {
-			return false;
-		}
-		return oid1.getOther() == oid2.getOther();
-
-	}
-
-	public int hashCode(Object aObject) throws HibernateException {
-		return aObject.hashCode();
-	}
-
-	public Object nullSafeGet(
-			ResultSet aResultSet, String[] names, SessionImplementor aSessionImplementor, Object aObject
-	) throws HibernateException, SQLException {
-		Integer highval = (Integer) Hibernate.INTEGER.nullSafeGet( aResultSet, names[0] );
-		Integer midval = (Integer) Hibernate.INTEGER.nullSafeGet( aResultSet, names[1] );
-		Integer lowval = (Integer) Hibernate.INTEGER.nullSafeGet( aResultSet, names[2] );
-		Integer other = (Integer) Hibernate.INTEGER.nullSafeGet( aResultSet, names[3] );
-
-		return new MyOid( highval, midval, lowval, other );
-	}
-
-	public void nullSafeSet(
-			PreparedStatement aPreparedStatement, Object value, int index, SessionImplementor aSessionImplementor
-	) throws HibernateException, SQLException {
-		MyOid c;
-		if ( value == null ) {
-			// todo is this correct?
-			throw new HibernateException( "Oid object may not be null" );
-		}
-		else {
-			c = (MyOid) value;
-		}
-
-		Hibernate.INTEGER.nullSafeSet( aPreparedStatement, c.getHigh(), index );
-		Hibernate.INTEGER.nullSafeSet( aPreparedStatement, c.getMiddle(), index + 1 );
-		Hibernate.INTEGER.nullSafeSet( aPreparedStatement, c.getLow(), index + 2 );
-		Hibernate.INTEGER.nullSafeSet( aPreparedStatement, c.getOther(), index + 3 );
-	}
-
-	public Object deepCopy(Object aObject) throws HibernateException {
-		MyOid oldOid = (MyOid) aObject;
-
-		return new MyOid( oldOid.getHigh(), oldOid.getMiddle(), oldOid.getLow(), oldOid.getOther() );
-	}
-
-	public boolean isMutable() {
-		return false;
-	}
-
-	public Serializable disassemble(Object value, SessionImplementor aSessionImplementor) throws HibernateException {
-		return (Serializable) deepCopy( value );
-	}
-
-	public Object assemble(Serializable cached, SessionImplementor aSessionImplementor, Object aObject)
-			throws HibernateException {
-		return deepCopy( cached );
-	}
-
-	public Object replace(Object original, Object target, SessionImplementor aSessionImplementor, Object aObject2)
-			throws HibernateException {
-		// we are immutable. return original
-		return original;
-	}
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/type/MyOidType.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/type/MyOidType.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/type/MyOidType.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/type/MyOidType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,147 @@
+//$Id$
+package org.hibernate.test.annotations.type;
+
+import java.io.Serializable;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+import org.hibernate.Hibernate;
+import org.hibernate.HibernateException;
+import org.hibernate.engine.SessionImplementor;
+import org.hibernate.type.Type;
+import org.hibernate.usertype.CompositeUserType;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class MyOidType implements CompositeUserType {
+
+	public static final String[] PROPERTY_NAMES = new String[]{"high", "middle", "low", "other"};
+	public static final Type[] TYPES = new Type[]{Hibernate.INTEGER, Hibernate.INTEGER, Hibernate.INTEGER, Hibernate.INTEGER};
+
+
+	public String[] getPropertyNames() {
+		return PROPERTY_NAMES;
+	}
+
+	public Type[] getPropertyTypes() {
+		return TYPES;
+	}
+
+	public Object getPropertyValue(Object aObject, int i) throws HibernateException {
+		MyOid dbOid = (MyOid) aObject;
+		switch ( i ) {
+			case 0:
+				return dbOid.getHigh();
+			case 1:
+				return dbOid.getMiddle();
+			case 2:
+				return dbOid.getLow();
+			case 3:
+				return dbOid.getOther();
+			default:
+				throw new HibernateException( "Unsupported property index " + i );
+		}
+
+	}
+
+	public void setPropertyValue(Object aObject, int i, Object aObject1) throws HibernateException {
+		MyOid dbOid = (MyOid) aObject;
+		switch ( i ) {
+			case 0:
+				dbOid.setHigh( (Integer) aObject1 );
+			case 1:
+				dbOid.setMiddle( (Integer) aObject1 );
+			case 2:
+				dbOid.setLow( (Integer) aObject1 );
+			case 3:
+				dbOid.setOther( (Integer) aObject1 );
+			default:
+				throw new HibernateException( "Unsupported property index " + i );
+		}
+	}
+
+	public Class returnedClass() {
+		return MyOid.class;
+	}
+
+	public boolean equals(Object x, Object y) throws HibernateException {
+		if ( x == y ) return true;
+		if ( x == null || y == null ) return false;
+
+		MyOid oid1 = (MyOid) x;
+		MyOid oid2 = (MyOid) y;
+
+		if ( oid1.getHigh() != oid2.getHigh() ) {
+			return false;
+		}
+		if ( oid1.getMiddle() != oid2.getMiddle() ) {
+			return false;
+		}
+		if ( oid1.getLow() != oid2.getLow() ) {
+			return false;
+		}
+		return oid1.getOther() == oid2.getOther();
+
+	}
+
+	public int hashCode(Object aObject) throws HibernateException {
+		return aObject.hashCode();
+	}
+
+	public Object nullSafeGet(
+			ResultSet aResultSet, String[] names, SessionImplementor aSessionImplementor, Object aObject
+	) throws HibernateException, SQLException {
+		Integer highval = (Integer) Hibernate.INTEGER.nullSafeGet( aResultSet, names[0] );
+		Integer midval = (Integer) Hibernate.INTEGER.nullSafeGet( aResultSet, names[1] );
+		Integer lowval = (Integer) Hibernate.INTEGER.nullSafeGet( aResultSet, names[2] );
+		Integer other = (Integer) Hibernate.INTEGER.nullSafeGet( aResultSet, names[3] );
+
+		return new MyOid( highval, midval, lowval, other );
+	}
+
+	public void nullSafeSet(
+			PreparedStatement aPreparedStatement, Object value, int index, SessionImplementor aSessionImplementor
+	) throws HibernateException, SQLException {
+		MyOid c;
+		if ( value == null ) {
+			// todo is this correct?
+			throw new HibernateException( "Oid object may not be null" );
+		}
+		else {
+			c = (MyOid) value;
+		}
+
+		Hibernate.INTEGER.nullSafeSet( aPreparedStatement, c.getHigh(), index );
+		Hibernate.INTEGER.nullSafeSet( aPreparedStatement, c.getMiddle(), index + 1 );
+		Hibernate.INTEGER.nullSafeSet( aPreparedStatement, c.getLow(), index + 2 );
+		Hibernate.INTEGER.nullSafeSet( aPreparedStatement, c.getOther(), index + 3 );
+	}
+
+	public Object deepCopy(Object aObject) throws HibernateException {
+		MyOid oldOid = (MyOid) aObject;
+
+		return new MyOid( oldOid.getHigh(), oldOid.getMiddle(), oldOid.getLow(), oldOid.getOther() );
+	}
+
+	public boolean isMutable() {
+		return false;
+	}
+
+	public Serializable disassemble(Object value, SessionImplementor aSessionImplementor) throws HibernateException {
+		return (Serializable) deepCopy( value );
+	}
+
+	public Object assemble(Serializable cached, SessionImplementor aSessionImplementor, Object aObject)
+			throws HibernateException {
+		return deepCopy( cached );
+	}
+
+	public Object replace(Object original, Object target, SessionImplementor aSessionImplementor, Object aObject2)
+			throws HibernateException {
+		// we are immutable. return original
+		return original;
+	}
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/type/TypeTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/type/TypeTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/type/TypeTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,31 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.type;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-import org.hibernate.test.annotations.TestCase;
-
-/**
- * @author Emmanuel Bernard
- */
-public class TypeTest extends TestCase {
-	public void testIdWithMulticolumns() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		Dvd lesOiseaux = new Dvd();
-		lesOiseaux.setTitle( "Les oiseaux" );
-		s.persist( lesOiseaux );
-		s.flush();
-		assertNotNull( lesOiseaux.getId() );
-		tx.rollback();
-		s.close();
-	}
-
-	protected Class[] getMappings() {
-		return new Class[]{
-				Dvd.class
-		};
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/type/TypeTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/type/TypeTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/type/TypeTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/type/TypeTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,31 @@
+//$Id$
+package org.hibernate.test.annotations.type;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class TypeTest extends TestCase {
+	public void testIdWithMulticolumns() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		Dvd lesOiseaux = new Dvd();
+		lesOiseaux.setTitle( "Les oiseaux" );
+		s.persist( lesOiseaux );
+		s.flush();
+		assertNotNull( lesOiseaux.getId() );
+		tx.rollback();
+		s.close();
+	}
+
+	protected Class[] getMappings() {
+		return new Class[]{
+				Dvd.class
+		};
+	}
+}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various)

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/Antenna.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/Antenna.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/Antenna.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,25 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.various;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Column;
-
-import org.hibernate.annotations.Generated;
-import org.hibernate.annotations.GenerationTime;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Antenna {
-	@Id public Integer id;
-	@Generated(GenerationTime.ALWAYS) @Column()
-	public String longitude;
-
-	@Generated(GenerationTime.INSERT) @Column(insertable = false)
-	public String latitude;
-
-	@Generated(GenerationTime.NEVER)
-	public Double power;
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/Antenna.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/Antenna.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/Antenna.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/Antenna.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,25 @@
+//$Id: $
+package org.hibernate.test.annotations.various;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Column;
+
+import org.hibernate.annotations.Generated;
+import org.hibernate.annotations.GenerationTime;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Antenna {
+	@Id public Integer id;
+	@Generated(GenerationTime.ALWAYS) @Column()
+	public String longitude;
+
+	@Generated(GenerationTime.INSERT) @Column(insertable = false)
+	public String latitude;
+
+	@Generated(GenerationTime.NEVER)
+	public Double power;
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/Conductor.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/Conductor.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/Conductor.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,54 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.various;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.Version;
-
-import org.hibernate.annotations.Index;
-import org.hibernate.annotations.OptimisticLock;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Conductor {
-	@Id
-	@GeneratedValue
-	private Integer id;
-
-	@Column(name = "cond_name")
-	@Index(name = "cond_name")
-	@OptimisticLock(excluded = true)
-	private String name;
-
-	@Version
-	private Long version;
-
-
-	public Long getVersion() {
-		return version;
-	}
-
-	public void setVersion(Long version) {
-		this.version = version;
-	}
-
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/Conductor.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/Conductor.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/Conductor.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/Conductor.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,54 @@
+//$Id$
+package org.hibernate.test.annotations.various;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Version;
+
+import org.hibernate.annotations.Index;
+import org.hibernate.annotations.OptimisticLock;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Conductor {
+	@Id
+	@GeneratedValue
+	private Integer id;
+
+	@Column(name = "cond_name")
+	@Index(name = "cond_name")
+	@OptimisticLock(excluded = true)
+	private String name;
+
+	@Version
+	private Long version;
+
+
+	public Long getVersion() {
+		return version;
+	}
+
+	public void setVersion(Long version) {
+		this.version = version;
+	}
+
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/GeneratedTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/GeneratedTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/GeneratedTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,30 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.various;
-
-import org.hibernate.test.annotations.TestCase;
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-
-/**
- * @author Emmanuel Bernard
- */
-public class GeneratedTest extends TestCase {
-
-	public void testGenerated() throws Exception {
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		Antenna antenna = new Antenna();
-		antenna.id = new Integer(1);
-		s.persist( antenna );
-		assertNull( antenna.latitude );
-		assertNull( antenna.longitude );
-		tx.rollback();
-		s.close();
-	}
-
-	protected Class[] getMappings() {
-		return new Class[] {
-				Antenna.class
-		};
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/GeneratedTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/GeneratedTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/GeneratedTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/GeneratedTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,30 @@
+//$Id: $
+package org.hibernate.test.annotations.various;
+
+import org.hibernate.test.annotations.TestCase;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class GeneratedTest extends TestCase {
+
+	public void testGenerated() throws Exception {
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		Antenna antenna = new Antenna();
+		antenna.id = new Integer(1);
+		s.persist( antenna );
+		assertNull( antenna.latitude );
+		assertNull( antenna.longitude );
+		tx.rollback();
+		s.close();
+	}
+
+	protected Class[] getMappings() {
+		return new Class[] {
+				Antenna.class
+		};
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/IndexTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/IndexTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/IndexTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,63 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.various;
-
-import java.util.Date;
-
-import org.hibernate.Session;
-import org.hibernate.test.annotations.TestCase;
-
-/**
- * @author Emmanuel Bernard
- */
-public class IndexTest extends TestCase {
-	public void testIndexManyToOne() throws Exception {
-		//TODO find a way to test indexes???
-		Session s = openSession();
-		s.getTransaction().begin();
-		Conductor emmanuel = new Conductor();
-		emmanuel.setName( "Emmanuel" );
-		s.persist( emmanuel );
-		Vehicule tank = new Vehicule();
-		tank.setCurrentConductor( emmanuel );
-		tank.setRegistrationNumber( "324VX43" );
-		s.persist( tank );
-		s.flush();
-		s.delete( tank );
-		s.delete( emmanuel );
-		s.getTransaction().rollback();
-		s.close();
-	}
-
-	public void testIndexAndJoined() throws Exception {
-		Session s = openSession();
-		s.getTransaction().begin();
-		Conductor cond = new Conductor();
-		cond.setName( "Bob" );
-		s.persist( cond );
-		ProfessionalAgreement agreement = new ProfessionalAgreement();
-		agreement.setExpirationDate( new Date() );
-		s.persist( agreement );
-		Truck truck = new Truck();
-		truck.setAgreement( agreement );
-		truck.setWeight( 20 );
-		truck.setRegistrationNumber( "2003424" );
-		truck.setYear( 2005 );
-		truck.setCurrentConductor( cond );
-		s.persist( truck );
-		s.flush();
-		s.delete( truck );
-		s.delete( agreement );
-		s.delete( cond );
-		s.getTransaction().rollback();
-		s.close();
-	}
-
-	protected Class[] getMappings() {
-		return new Class[]{
-				Conductor.class,
-				Vehicule.class,
-				ProfessionalAgreement.class,
-				Truck.class
-		};
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/IndexTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/IndexTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/IndexTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/IndexTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,63 @@
+//$Id$
+package org.hibernate.test.annotations.various;
+
+import java.util.Date;
+
+import org.hibernate.Session;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class IndexTest extends TestCase {
+	public void testIndexManyToOne() throws Exception {
+		//TODO find a way to test indexes???
+		Session s = openSession();
+		s.getTransaction().begin();
+		Conductor emmanuel = new Conductor();
+		emmanuel.setName( "Emmanuel" );
+		s.persist( emmanuel );
+		Vehicule tank = new Vehicule();
+		tank.setCurrentConductor( emmanuel );
+		tank.setRegistrationNumber( "324VX43" );
+		s.persist( tank );
+		s.flush();
+		s.delete( tank );
+		s.delete( emmanuel );
+		s.getTransaction().rollback();
+		s.close();
+	}
+
+	public void testIndexAndJoined() throws Exception {
+		Session s = openSession();
+		s.getTransaction().begin();
+		Conductor cond = new Conductor();
+		cond.setName( "Bob" );
+		s.persist( cond );
+		ProfessionalAgreement agreement = new ProfessionalAgreement();
+		agreement.setExpirationDate( new Date() );
+		s.persist( agreement );
+		Truck truck = new Truck();
+		truck.setAgreement( agreement );
+		truck.setWeight( 20 );
+		truck.setRegistrationNumber( "2003424" );
+		truck.setYear( 2005 );
+		truck.setCurrentConductor( cond );
+		s.persist( truck );
+		s.flush();
+		s.delete( truck );
+		s.delete( agreement );
+		s.delete( cond );
+		s.getTransaction().rollback();
+		s.close();
+	}
+
+	protected Class[] getMappings() {
+		return new Class[]{
+				Conductor.class,
+				Vehicule.class,
+				ProfessionalAgreement.class,
+				Truck.class
+		};
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/ProfessionalAgreement.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/ProfessionalAgreement.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/ProfessionalAgreement.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,34 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.various;
-
-import java.util.Date;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class ProfessionalAgreement {
-	@Id
-	@GeneratedValue
-	private Integer id;
-	private Date expirationDate;
-
-	public Date getExpirationDate() {
-		return expirationDate;
-	}
-
-	public void setExpirationDate(Date expirationDate) {
-		this.expirationDate = expirationDate;
-	}
-
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/ProfessionalAgreement.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/ProfessionalAgreement.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/ProfessionalAgreement.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/ProfessionalAgreement.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,34 @@
+//$Id: $
+package org.hibernate.test.annotations.various;
+
+import java.util.Date;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class ProfessionalAgreement {
+	@Id
+	@GeneratedValue
+	private Integer id;
+	private Date expirationDate;
+
+	public Date getExpirationDate() {
+		return expirationDate;
+	}
+
+	public void setExpirationDate(Date expirationDate) {
+		this.expirationDate = expirationDate;
+	}
+
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/Truck.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/Truck.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/Truck.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,39 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.various;
-
-import javax.persistence.Entity;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-
-import org.hibernate.annotations.Index;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Truck extends Vehicule {
-	@Index(name = "weigth_idx")
-	private int weight;
-
-	@ManyToOne
-	@JoinColumn(name = "agreement_id")
-	@Index(name = "agreement_idx")
-	private ProfessionalAgreement agreement;
-
-	public int getWeight() {
-		return weight;
-	}
-
-	public void setWeight(int weight) {
-		this.weight = weight;
-	}
-
-	public ProfessionalAgreement getAgreement() {
-		return agreement;
-	}
-
-	public void setAgreement(ProfessionalAgreement agreement) {
-		this.agreement = agreement;
-	}
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/Truck.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/Truck.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/Truck.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/Truck.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,39 @@
+//$Id: $
+package org.hibernate.test.annotations.various;
+
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+
+import org.hibernate.annotations.Index;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Truck extends Vehicule {
+	@Index(name = "weigth_idx")
+	private int weight;
+
+	@ManyToOne
+	@JoinColumn(name = "agreement_id")
+	@Index(name = "agreement_idx")
+	private ProfessionalAgreement agreement;
+
+	public int getWeight() {
+		return weight;
+	}
+
+	public void setWeight(int weight) {
+		this.weight = weight;
+	}
+
+	public ProfessionalAgreement getAgreement() {
+		return agreement;
+	}
+
+	public void setAgreement(ProfessionalAgreement agreement) {
+		this.agreement = agreement;
+	}
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/Vehicule.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/Vehicule.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/Vehicule.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,83 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.various;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.Inheritance;
-import javax.persistence.InheritanceType;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-
-import org.hibernate.annotations.GenericGenerator;
-import org.hibernate.annotations.Index;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Inheritance(strategy = InheritanceType.JOINED)
- at org.hibernate.annotations.Table(appliesTo = "Vehicule",
-		indexes = {
-		@Index(name = "improbableindex", columnNames = {"registration", "Conductor_fk"}),
-		@Index(name = "secondone", columnNames = {"Conductor_fk"})
-				}
-)
-public class Vehicule {
-	@Id
-	@GeneratedValue(generator = "gen")
-	@GenericGenerator(name = "gen", strategy = "uuid")
-	private String id;
-	@Column(name = "registration")
-	private String registrationNumber;
-	@ManyToOne(optional = false)
-	@JoinColumn(name = "Conductor_fk")
-	@Index(name = "thirdone")
-	private Conductor currentConductor;
-	@Index(name = "year_idx")
-	private Integer year;
-	@ManyToOne(optional = true)
-	@Index(name = "forthone")
-	private Conductor previousConductor;
-
-	public String getId() {
-		return id;
-	}
-
-	public void setId(String id) {
-		this.id = id;
-	}
-
-	public String getRegistrationNumber() {
-		return registrationNumber;
-	}
-
-	public void setRegistrationNumber(String registrationNumber) {
-		this.registrationNumber = registrationNumber;
-	}
-
-	public Conductor getCurrentConductor() {
-		return currentConductor;
-	}
-
-	public void setCurrentConductor(Conductor currentConductor) {
-		this.currentConductor = currentConductor;
-	}
-
-	public Integer getYear() {
-		return year;
-	}
-
-	public void setYear(Integer year) {
-		this.year = year;
-	}
-
-	public Conductor getPreviousConductor() {
-		return previousConductor;
-	}
-
-	public void setPreviousConductor(Conductor previousConductor) {
-		this.previousConductor = previousConductor;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/Vehicule.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/Vehicule.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/Vehicule.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/Vehicule.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,83 @@
+//$Id$
+package org.hibernate.test.annotations.various;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.hibernate.annotations.Index;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Inheritance(strategy = InheritanceType.JOINED)
+ at org.hibernate.annotations.Table(appliesTo = "Vehicule",
+		indexes = {
+		@Index(name = "improbableindex", columnNames = {"registration", "Conductor_fk"}),
+		@Index(name = "secondone", columnNames = {"Conductor_fk"})
+				}
+)
+public class Vehicule {
+	@Id
+	@GeneratedValue(generator = "gen")
+	@GenericGenerator(name = "gen", strategy = "uuid")
+	private String id;
+	@Column(name = "registration")
+	private String registrationNumber;
+	@ManyToOne(optional = false)
+	@JoinColumn(name = "Conductor_fk")
+	@Index(name = "thirdone")
+	private Conductor currentConductor;
+	@Index(name = "year_idx")
+	private Integer year;
+	@ManyToOne(optional = true)
+	@Index(name = "forthone")
+	private Conductor previousConductor;
+
+	public String getId() {
+		return id;
+	}
+
+	public void setId(String id) {
+		this.id = id;
+	}
+
+	public String getRegistrationNumber() {
+		return registrationNumber;
+	}
+
+	public void setRegistrationNumber(String registrationNumber) {
+		this.registrationNumber = registrationNumber;
+	}
+
+	public Conductor getCurrentConductor() {
+		return currentConductor;
+	}
+
+	public void setCurrentConductor(Conductor currentConductor) {
+		this.currentConductor = currentConductor;
+	}
+
+	public Integer getYear() {
+		return year;
+	}
+
+	public void setYear(Integer year) {
+		this.year = year;
+	}
+
+	public Conductor getPreviousConductor() {
+		return previousConductor;
+	}
+
+	public void setPreviousConductor(Conductor previousConductor) {
+		this.previousConductor = previousConductor;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/VersionTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/VersionTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/VersionTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,41 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.various;
-
-import org.hibernate.Session;
-import org.hibernate.test.annotations.TestCase;
-
-/**
- * @author Emmanuel Bernard
- */
-public class VersionTest extends TestCase {
-
-	public void testOptimisticLockDisabled() throws Exception {
-		Conductor c = new Conductor();
-		c.setName( "Bob" );
-		Session s = openSession( );
-		s.getTransaction().begin();
-		s.persist( c );
-		s.flush();
-
-		s.clear();
-
-		c = (Conductor) s.get( Conductor.class, c.getId() );
-		Long version = c.getVersion();
-		c.setName( "Don" );
-		s.flush();
-
-		s.clear();
-
-		c = (Conductor) s.get( Conductor.class, c.getId() );
-		assertEquals( version, c.getVersion() );
-
-		s.getTransaction().rollback();
-		s.close();
-	}
-
-	protected Class[] getMappings() {
-		return new Class[] {
-				Conductor.class
-		};
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/VersionTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/VersionTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/VersionTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/various/VersionTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,41 @@
+//$Id: $
+package org.hibernate.test.annotations.various;
+
+import org.hibernate.Session;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class VersionTest extends TestCase {
+
+	public void testOptimisticLockDisabled() throws Exception {
+		Conductor c = new Conductor();
+		c.setName( "Bob" );
+		Session s = openSession( );
+		s.getTransaction().begin();
+		s.persist( c );
+		s.flush();
+
+		s.clear();
+
+		c = (Conductor) s.get( Conductor.class, c.getId() );
+		Long version = c.getVersion();
+		c.setName( "Don" );
+		s.flush();
+
+		s.clear();
+
+		c = (Conductor) s.get( Conductor.class, c.getId() );
+		assertEquals( version, c.getVersion() );
+
+		s.getTransaction().rollback();
+		s.close();
+	}
+
+	protected Class[] getMappings() {
+		return new Class[] {
+				Conductor.class
+		};
+	}
+}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/version (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/version)

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml)

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3 (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3)

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/CarModel.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/CarModel.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/CarModel.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,19 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.xml.ejb3;
-
-import java.util.Date;
-
-/**
- * @author Emmanuel Bernard
- */
-public class CarModel extends Model {
-	private Date year;
-
-	public Date getYear() {
-		return year;
-	}
-
-	public void setYear(Date year) {
-		this.year = year;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/CarModel.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/CarModel.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/CarModel.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/CarModel.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,19 @@
+//$Id: $
+package org.hibernate.test.annotations.xml.ejb3;
+
+import java.util.Date;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class CarModel extends Model {
+	private Date year;
+
+	public Date getYear() {
+		return year;
+	}
+
+	public void setYear(Date year) {
+		this.year = year;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/Ejb3XmlTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/Ejb3XmlTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/Ejb3XmlTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,86 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.xml.ejb3;
-
-import java.util.Date;
-import java.util.List;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-import org.hibernate.test.annotations.TestCase;
-
-/**
- * @author Emmanuel Bernard
- */
-public class Ejb3XmlTest extends TestCase {
-	public void testEjb3Xml() throws Exception {
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		CarModel model = new CarModel();
-		model.setYear( new Date() );
-		Manufacturer manufacturer = new Manufacturer();
-		//s.persist( manufacturer );
-		model.setManufacturer( manufacturer );
-		manufacturer.getModels().add( model );
-		s.persist( model );
-		s.flush();
-		s.clear();
-
-		model.setYear( new Date() );
-		manufacturer = (Manufacturer) s.get( Manufacturer.class, manufacturer.getId() );
-		List<Model> cars = s.getNamedQuery( "allModelsPerManufacturer" )
-				.setParameter( "manufacturer", manufacturer )
-				.list();
-		assertEquals( 1, cars.size() );
-		for ( Model car : cars ) {
-			assertNotNull( car.getManufacturer() );
-			s.delete( manufacturer );
-			s.delete( car );
-		}
-		tx.rollback();
-		s.close();
-	}
-
-	public void testXMLEntityHandled() throws Exception {
-		Session s = openSession();
-		s.getTransaction().begin();
-		Lighter l = new Lighter();
-		l.name = "Blue";
-		l.power = "400°F";
-		s.persist( l );
-		s.flush();
-		s.getTransaction().rollback();
-		s.close();
-	}
-
-	public void testXmlDefaultOverriding() throws Exception {
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		Manufacturer manufacturer = new Manufacturer();
-		s.persist( manufacturer );
-		s.flush();
-		s.clear();
-
-		assertEquals( 1, s.getNamedQuery( "manufacturer.findAll" ).list().size() );
-		tx.rollback();
-		s.close();
-	}
-
-	protected Class[] getMappings() {
-		return new Class[]{
-				CarModel.class,
-				Manufacturer.class,
-				Model.class,
-				Light.class
-				//Lighter.class xml only entuty
-		};
-	}
-
-	@Override
-	protected String[] getXmlFiles() {
-		return new String[]{
-				"org/hibernate/test/annotations/xml/ejb3/orm.xml",
-				"org/hibernate/test/annotations/xml/ejb3/orm2.xml",
-				"org/hibernate/test/annotations/xml/ejb3/orm3.xml"
-		};
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/Ejb3XmlTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/Ejb3XmlTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/Ejb3XmlTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/Ejb3XmlTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,86 @@
+//$Id: $
+package org.hibernate.test.annotations.xml.ejb3;
+
+import java.util.Date;
+import java.util.List;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Ejb3XmlTest extends TestCase {
+	public void testEjb3Xml() throws Exception {
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		CarModel model = new CarModel();
+		model.setYear( new Date() );
+		Manufacturer manufacturer = new Manufacturer();
+		//s.persist( manufacturer );
+		model.setManufacturer( manufacturer );
+		manufacturer.getModels().add( model );
+		s.persist( model );
+		s.flush();
+		s.clear();
+
+		model.setYear( new Date() );
+		manufacturer = (Manufacturer) s.get( Manufacturer.class, manufacturer.getId() );
+		List<Model> cars = s.getNamedQuery( "allModelsPerManufacturer" )
+				.setParameter( "manufacturer", manufacturer )
+				.list();
+		assertEquals( 1, cars.size() );
+		for ( Model car : cars ) {
+			assertNotNull( car.getManufacturer() );
+			s.delete( manufacturer );
+			s.delete( car );
+		}
+		tx.rollback();
+		s.close();
+	}
+
+	public void testXMLEntityHandled() throws Exception {
+		Session s = openSession();
+		s.getTransaction().begin();
+		Lighter l = new Lighter();
+		l.name = "Blue";
+		l.power = "400°F";
+		s.persist( l );
+		s.flush();
+		s.getTransaction().rollback();
+		s.close();
+	}
+
+	public void testXmlDefaultOverriding() throws Exception {
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		Manufacturer manufacturer = new Manufacturer();
+		s.persist( manufacturer );
+		s.flush();
+		s.clear();
+
+		assertEquals( 1, s.getNamedQuery( "manufacturer.findAll" ).list().size() );
+		tx.rollback();
+		s.close();
+	}
+
+	protected Class[] getMappings() {
+		return new Class[]{
+				CarModel.class,
+				Manufacturer.class,
+				Model.class,
+				Light.class
+				//Lighter.class xml only entuty
+		};
+	}
+
+	@Override
+	protected String[] getXmlFiles() {
+		return new String[]{
+				"org/hibernate/test/annotations/xml/ejb3/orm.xml",
+				"org/hibernate/test/annotations/xml/ejb3/orm2.xml",
+				"org/hibernate/test/annotations/xml/ejb3/orm3.xml"
+		};
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/Light.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/Light.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/Light.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,10 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.xml.ejb3;
-
-/**
- * @author Emmanuel Bernard
- */
-public class Light {
-	public String name;
-	public String power;
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/Light.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/Light.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/Light.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/Light.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,10 @@
+//$Id: $
+package org.hibernate.test.annotations.xml.ejb3;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Light {
+	public String name;
+	public String power;
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/Lighter.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/Lighter.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/Lighter.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,10 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.xml.ejb3;
-
-/**
- * @author Emmanuel Bernard
- */
-public class Lighter {
-	public String name;
-	public String power;
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/Lighter.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/Lighter.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/Lighter.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/Lighter.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,10 @@
+//$Id: $
+package org.hibernate.test.annotations.xml.ejb3;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Lighter {
+	public String name;
+	public String power;
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/Manufacturer.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/Manufacturer.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/Manufacturer.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,39 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.xml.ejb3;
-
-import java.util.HashSet;
-import java.util.Set;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.OneToMany;
-import javax.persistence.NamedQuery;
-import javax.persistence.TableGenerator;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at NamedQuery(name="manufacturer.findAll", query = "from Manufacturer where 1 = 2")
- at TableGenerator(name="generator", table = "this is a broken name with select from and other SQL keywords")
-public class Manufacturer {
-	private Integer id;
-	private Set<Model> models = new HashSet<Model>();
-
-	@Id
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	@OneToMany
-	public Set<Model> getModels() {
-		return models;
-	}
-
-	public void setModels(Set<Model> models) {
-		this.models = models;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/Manufacturer.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/Manufacturer.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/Manufacturer.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/Manufacturer.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,39 @@
+//$Id: $
+package org.hibernate.test.annotations.xml.ejb3;
+
+import java.util.HashSet;
+import java.util.Set;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+import javax.persistence.NamedQuery;
+import javax.persistence.TableGenerator;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at NamedQuery(name="manufacturer.findAll", query = "from Manufacturer where 1 = 2")
+ at TableGenerator(name="generator", table = "this is a broken name with select from and other SQL keywords")
+public class Manufacturer {
+	private Integer id;
+	private Set<Model> models = new HashSet<Model>();
+
+	@Id
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	@OneToMany
+	public Set<Model> getModels() {
+		return models;
+	}
+
+	public void setModels(Set<Model> models) {
+		this.models = models;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/Model.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/Model.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/Model.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,26 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.xml.ejb3;
-
-/**
- * @author Emmanuel Bernard
- */
-public class Model {
-	private Integer id;
-	private Manufacturer manufacturer;
-
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public Manufacturer getManufacturer() {
-		return manufacturer;
-	}
-
-	public void setManufacturer(Manufacturer manufacturer) {
-		this.manufacturer = manufacturer;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/Model.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/Model.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/Model.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/Model.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,26 @@
+//$Id: $
+package org.hibernate.test.annotations.xml.ejb3;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Model {
+	private Integer id;
+	private Manufacturer manufacturer;
+
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public Manufacturer getManufacturer() {
+		return manufacturer;
+	}
+
+	public void setManufacturer(Manufacturer manufacturer) {
+		this.manufacturer = manufacturer;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/orm.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/orm.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/orm.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,56 +0,0 @@
-<?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"
-                 version="1.0"
-        >
-    <!-- no grammar specified should pass -->
-    <persistence-unit-metadata>
-        <persistence-unit-defaults>
-            <cascade-persist/>
-        </persistence-unit-defaults>
-    </persistence-unit-metadata>
-    <package>org.hibernate.test.annotations.xml.ejb3</package>
-    <table-generator name="generator" table="table_id"/>
-    <named-query name="manufacturer.findAll">
-        <query>select m from Manufacturer m</query>
-    </named-query>
-    <entity class="Model" access="PROPERTY" name="ModelZ" metadata-complete="true">
-        <table name="ModelZ">
-        </table>
-        <inheritance strategy="JOINED"/>
-        <attributes>
-            <id name="id">
-                <column name="fld_id"/>
-                <generated-value strategy="TABLE" generator="generator"/>
-            </id>
-            <basic name="unknownProperty"/>
-            <many-to-one name="manufacturer" fetch="LAZY">
-                <join-column name="manufacturer_pk"/>
-            </many-to-one>
-        </attributes>
-    </entity>
-    <entity class="CarModel" metadata-complete="true">
-        <primary-key-join-column name="model_id"/>
-        <inheritance strategy="JOINED"/>
-        <named-query name="allModelsPerManufacturer">
-            <query>from ModelZ m where m.manufacturer = :manufacturer</query>
-            <hint name="org.hibernate.timeout" value="200"/>
-        </named-query>
-        <exclude-default-listeners/>
-        <exclude-superclass-listeners/>
-        <attributes>
-            <basic name="year" optional="false">
-                <temporal>DATE</temporal>
-            </basic>
-        </attributes>
-    </entity>
-    <entity class="Manufacturer">
-        <attributes>
-            <id name="id">
-                <generated-value strategy="AUTO"/>
-            </id>
-            <one-to-many name="models" mapped-by="manufacturer"/>
-        </attributes>
-    </entity>
-</entity-mappings>
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/orm.xml (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/orm.xml)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/orm.xml	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/orm.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,56 @@
+<?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"
+                 version="1.0"
+        >
+    <!-- no grammar specified should pass -->
+    <persistence-unit-metadata>
+        <persistence-unit-defaults>
+            <cascade-persist/>
+        </persistence-unit-defaults>
+    </persistence-unit-metadata>
+    <package>org.hibernate.test.annotations.xml.ejb3</package>
+    <table-generator name="generator" table="table_id"/>
+    <named-query name="manufacturer.findAll">
+        <query>select m from Manufacturer m</query>
+    </named-query>
+    <entity class="Model" access="PROPERTY" name="ModelZ" metadata-complete="true">
+        <table name="ModelZ">
+        </table>
+        <inheritance strategy="JOINED"/>
+        <attributes>
+            <id name="id">
+                <column name="fld_id"/>
+                <generated-value strategy="TABLE" generator="generator"/>
+            </id>
+            <basic name="unknownProperty"/>
+            <many-to-one name="manufacturer" fetch="LAZY">
+                <join-column name="manufacturer_pk"/>
+            </many-to-one>
+        </attributes>
+    </entity>
+    <entity class="CarModel" metadata-complete="true">
+        <primary-key-join-column name="model_id"/>
+        <inheritance strategy="JOINED"/>
+        <named-query name="allModelsPerManufacturer">
+            <query>from ModelZ m where m.manufacturer = :manufacturer</query>
+            <hint name="org.hibernate.timeout" value="200"/>
+        </named-query>
+        <exclude-default-listeners/>
+        <exclude-superclass-listeners/>
+        <attributes>
+            <basic name="year" optional="false">
+                <temporal>DATE</temporal>
+            </basic>
+        </attributes>
+    </entity>
+    <entity class="Manufacturer">
+        <attributes>
+            <id name="id">
+                <generated-value strategy="AUTO"/>
+            </id>
+            <one-to-many name="models" mapped-by="manufacturer"/>
+        </attributes>
+    </entity>
+</entity-mappings>
\ No newline at end of file

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/orm2.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/orm2.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/orm2.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,17 +0,0 @@
-<?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 orm_1_0.xsd"
-                 version="1.0"
-        >
-    <package>org.hibernate.test.annotations.xml.ejb3</package>
-    <entity class="Light" access="FIELD" metadata-complete="true">
-        <attributes>
-            <id name="name">
-                <column name="fld_id"/>
-            </id>
-            <basic name="power"></basic>
-        </attributes>
-    </entity>
-</entity-mappings>
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/orm2.xml (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/orm2.xml)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/orm2.xml	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/orm2.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,17 @@
+<?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 orm_1_0.xsd"
+                 version="1.0"
+        >
+    <package>org.hibernate.test.annotations.xml.ejb3</package>
+    <entity class="Light" access="FIELD" metadata-complete="true">
+        <attributes>
+            <id name="name">
+                <column name="fld_id"/>
+            </id>
+            <basic name="power"></basic>
+        </attributes>
+    </entity>
+</entity-mappings>
\ No newline at end of file

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/orm3.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/orm3.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/orm3.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,17 +0,0 @@
-<?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 orm_1_0.xsd"
-                 version="1.0"
-        >
-    <package>org.hibernate.test.annotations.xml.ejb3</package>
-    <entity class="Lighter" access="FIELD" metadata-complete="true">
-        <attributes>
-            <id name="name">
-                <column name="fld_id"/>
-            </id>
-            <basic name="power"></basic>
-        </attributes>
-    </entity>
-</entity-mappings>
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/orm3.xml (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/orm3.xml)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/orm3.xml	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/ejb3/orm3.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,17 @@
+<?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 orm_1_0.xsd"
+                 version="1.0"
+        >
+    <package>org.hibernate.test.annotations.xml.ejb3</package>
+    <entity class="Lighter" access="FIELD" metadata-complete="true">
+        <attributes>
+            <id name="name">
+                <column name="fld_id"/>
+            </id>
+            <basic name="power"></basic>
+        </attributes>
+    </entity>
+</entity-mappings>
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm)

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/A.hbm.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/A.hbm.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/A.hbm.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,12 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
-        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
-<!-- Generated Nov 9, 2006 6:27:53 PM by Hibernate Tools 3.2.0.beta7 -->
-<hibernate-mapping>
-    <class name="org.hibernate.test.annotations.xml.hbm.AImpl" table="A"
-           proxy="org.hibernate.test.annotations.xml.hbm.A">
-        <id name="AId" column="aID" type="java.lang.Integer">
-            <generator class="identity"/>
-        </id>
-    </class>
-</hibernate-mapping>
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/A.hbm.xml (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/A.hbm.xml)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/A.hbm.xml	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/A.hbm.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+<!-- Generated Nov 9, 2006 6:27:53 PM by Hibernate Tools 3.2.0.beta7 -->
+<hibernate-mapping>
+    <class name="org.hibernate.test.annotations.xml.hbm.AImpl" table="A"
+           proxy="org.hibernate.test.annotations.xml.hbm.A">
+        <id name="AId" column="aID" type="java.lang.Integer">
+            <generator class="identity"/>
+        </id>
+    </class>
+</hibernate-mapping>
\ No newline at end of file

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/A.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/A.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/A.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,11 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.xml.hbm;
-
-/**
- * @author Emmanuel Bernard
- */
-public interface A extends java.io.Serializable {
-	public Integer getAId();
-
-	public void setAId(Integer aId);
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/A.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/A.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/A.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/A.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,11 @@
+//$Id: $
+package org.hibernate.test.annotations.xml.hbm;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public interface A extends java.io.Serializable {
+	public Integer getAId();
+
+	public void setAId(Integer aId);
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/AImpl.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/AImpl.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/AImpl.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,34 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.xml.hbm;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Inheritance;
-import javax.persistence.InheritanceType;
-import javax.persistence.Table;
-import javax.persistence.GeneratedValue;
-
- at Entity
- at Inheritance( strategy = InheritanceType.JOINED )
- at org.hibernate.annotations.Proxy( proxyClass = A.class )
- at Table( name = "A" )
-public class AImpl implements A {
-	private static final long serialVersionUID = 1L;
-
-	private Integer aId = 0;
-
-	public AImpl() {
-	}
-
-	@Id
-	@GeneratedValue
-	@Column( name = "aID" )
-	public Integer getAId() {
-		return this.aId;
-	}
-
-	public void setAId(Integer aId) {
-		this.aId = aId;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/AImpl.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/AImpl.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/AImpl.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/AImpl.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,34 @@
+//$Id: $
+package org.hibernate.test.annotations.xml.hbm;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+import javax.persistence.Table;
+import javax.persistence.GeneratedValue;
+
+ at Entity
+ at Inheritance( strategy = InheritanceType.JOINED )
+ at org.hibernate.annotations.Proxy( proxyClass = A.class )
+ at Table( name = "A" )
+public class AImpl implements A {
+	private static final long serialVersionUID = 1L;
+
+	private Integer aId = 0;
+
+	public AImpl() {
+	}
+
+	@Id
+	@GeneratedValue
+	@Column( name = "aID" )
+	public Integer getAId() {
+		return this.aId;
+	}
+
+	public void setAId(Integer aId) {
+		this.aId = aId;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/B.hbm.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/B.hbm.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/B.hbm.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,13 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
-        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
-<!-- Generated Nov 9, 2006 6:27:53 PM by Hibernate Tools 3.2.0.beta7 -->
-<hibernate-mapping>
-    <joined-subclass name="org.hibernate.test.annotations.xml.hbm.BImpl" table="B"
-                     proxy="org.hibernate.test.annotations.xml.hbm.B"
-                     extends="org.hibernate.test.annotations.xml.hbm.AImpl">
-        <key column="aID"/>
-        <property name="BId" column="bID" type="java.lang.Integer"
-                  not-null="true"/>
-    </joined-subclass>
-</hibernate-mapping>
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/B.hbm.xml (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/B.hbm.xml)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/B.hbm.xml	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/B.hbm.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+<!-- Generated Nov 9, 2006 6:27:53 PM by Hibernate Tools 3.2.0.beta7 -->
+<hibernate-mapping>
+    <joined-subclass name="org.hibernate.test.annotations.xml.hbm.BImpl" table="B"
+                     proxy="org.hibernate.test.annotations.xml.hbm.B"
+                     extends="org.hibernate.test.annotations.xml.hbm.AImpl">
+        <key column="aID"/>
+        <property name="BId" column="bID" type="java.lang.Integer"
+                  not-null="true"/>
+    </joined-subclass>
+</hibernate-mapping>
\ No newline at end of file

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/B.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/B.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/B.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,11 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.xml.hbm;
-
-/**
- * @author Emmanuel Bernard
- */
-public interface B extends A {
-	public Integer getBId();
-
-	public void setBId(Integer bId);
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/B.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/B.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/B.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/B.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,11 @@
+//$Id: $
+package org.hibernate.test.annotations.xml.hbm;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public interface B extends A {
+	public Integer getBId();
+
+	public void setBId(Integer bId);
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/BImpl.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/BImpl.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/BImpl.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,26 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.xml.hbm;
-
-import javax.persistence.Entity;
-import javax.persistence.Table;
-
- at Entity
- at org.hibernate.annotations.Proxy( proxyClass = B.class )
- at Table( name = "B" )
-public class BImpl extends AImpl implements B {
-	private static final long serialVersionUID = 1L;
-
-	private Integer bId = 0;
-
-	public BImpl() {
-		super();
-	}
-
-	public Integer getBId() {
-		return bId;
-	}
-
-	public void setBId(Integer bId) {
-		this.bId = bId;
-	}
-}
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/BImpl.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/BImpl.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/BImpl.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/BImpl.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,26 @@
+//$Id: $
+package org.hibernate.test.annotations.xml.hbm;
+
+import javax.persistence.Entity;
+import javax.persistence.Table;
+
+ at Entity
+ at org.hibernate.annotations.Proxy( proxyClass = B.class )
+ at Table( name = "B" )
+public class BImpl extends AImpl implements B {
+	private static final long serialVersionUID = 1L;
+
+	private Integer bId = 0;
+
+	public BImpl() {
+		super();
+	}
+
+	public Integer getBId() {
+		return bId;
+	}
+
+	public void setBId(Integer bId) {
+		this.bId = bId;
+	}
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/CloudType.hbm.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/CloudType.hbm.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/CloudType.hbm.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,15 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE hibernate-mapping PUBLIC
-        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
-        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
-
-<hibernate-mapping package="org.hibernate.test.annotations.xml.hbm">
-
-    <class name="CloudType">
-        <id name="id">
-            <generator class="native"/>
-        </id>
-        <property name="name"/>
-    </class>
-
-</hibernate-mapping>
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/CloudType.hbm.xml (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/CloudType.hbm.xml)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/CloudType.hbm.xml	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/CloudType.hbm.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<!DOCTYPE hibernate-mapping PUBLIC
+        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+
+<hibernate-mapping package="org.hibernate.test.annotations.xml.hbm">
+
+    <class name="CloudType">
+        <id name="id">
+            <generator class="native"/>
+        </id>
+        <property name="name"/>
+    </class>
+
+</hibernate-mapping>
\ No newline at end of file

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/CloudType.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/CloudType.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/CloudType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,26 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.xml.hbm;
-
-/**
- * @author Emmanuel Bernard
- */
-public class CloudType {
-	private Integer id;
-	private String name;
-
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/CloudType.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/CloudType.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/CloudType.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/CloudType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,26 @@
+//$Id: $
+package org.hibernate.test.annotations.xml.hbm;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class CloudType {
+	private Integer id;
+	private String name;
+
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/Government.hbm.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/Government.hbm.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/Government.hbm.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,16 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE hibernate-mapping PUBLIC
-        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
-        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
-
-<hibernate-mapping package="org.hibernate.test.annotations.xml.hbm">
-
-    <class name="Government">
-        <id name="id">
-            <generator class="native"/>
-        </id>
-        <property name="name"/>
-        <many-to-one name="primeMinister" column="primeMinister_id"/>
-    </class>
-
-</hibernate-mapping>
\ No newline at end of file

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/Government.hbm.xml (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/Government.hbm.xml)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/Government.hbm.xml	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/Government.hbm.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<!DOCTYPE hibernate-mapping PUBLIC
+        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+
+<hibernate-mapping package="org.hibernate.test.annotations.xml.hbm">
+
+    <class name="Government">
+        <id name="id">
+            <generator class="native"/>
+        </id>
+        <property name="name"/>
+        <many-to-one name="primeMinister" column="primeMinister_id"/>
+    </class>
+
+</hibernate-mapping>
\ No newline at end of file

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/Government.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/Government.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/Government.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,35 +0,0 @@
-//$Id$
-package org.hibernate.test.annotations.xml.hbm;
-
-/**
- * @author Emmanuel Bernard
- */
-public class Government {
-	private Integer id;
-	private String name;
-	private PrimeMinister primeMinister;
-
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	public PrimeMinister getPrimeMinister() {
-		return primeMinister;
-	}
-
-	public void setPrimeMinister(PrimeMinister primeMinister) {
-		this.primeMinister = primeMinister;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/Government.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/Government.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/Government.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/Government.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,35 @@
+//$Id$
+package org.hibernate.test.annotations.xml.hbm;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Government {
+	private Integer id;
+	private String name;
+	private PrimeMinister primeMinister;
+
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public PrimeMinister getPrimeMinister() {
+		return primeMinister;
+	}
+
+	public void setPrimeMinister(PrimeMinister primeMinister) {
+		this.primeMinister = primeMinister;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/HbmTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/HbmTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/HbmTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,104 +0,0 @@
-//$Id:HbmTest.java 9793 2006-04-26 02:20:18 -0400 (mer., 26 avr. 2006) epbernard $
-package org.hibernate.test.annotations.xml.hbm;
-
-import java.util.HashSet;
-
-import org.hibernate.Session;
-import org.hibernate.cfg.Configuration;
-import org.hibernate.test.annotations.TestCase;
-
-/**
- * @author Emmanuel Bernard
- */
-public class HbmTest extends TestCase {
-
-	public void testManyToOne() throws Exception {
-		Session s = openSession();
-		s.getTransaction().begin();
-		Government gov = new Government();
-		gov.setName( "Liberals" );
-		s.save( gov );
-		PrimeMinister pm = new PrimeMinister();
-		pm.setName( "Murray" );
-		pm.setCurrentGovernment( gov );
-		s.save( pm );
-		s.getTransaction().rollback();
-		s.close();
-	}
-
-	public void testOneToMany() throws Exception {
-		Session s = openSession();
-		s.getTransaction().begin();
-		Government gov = new Government();
-		gov.setName( "Liberals" );
-		Government gov2 = new Government();
-		gov2.setName( "Liberals2" );
-		s.save( gov );
-		s.save( gov2 );
-		PrimeMinister pm = new PrimeMinister();
-		pm.setName( "Murray" );
-		pm.setCurrentGovernment( gov );
-		pm.setGovernments( new HashSet() );
-		pm.getGovernments().add( gov2 );
-		pm.getGovernments().add( gov );
-		gov.setPrimeMinister( pm );
-		gov2.setPrimeMinister( pm );
-		s.save( pm );
-		s.flush();
-		s.getTransaction().rollback();
-		s.close();
-	}
-
-	public void testManyToMany() throws Exception {
-		Session s = openSession();
-		s.getTransaction().begin();
-		CloudType type = new CloudType();
-		type.setName( "Cumulus" );
-		Sky sky = new Sky();
-		s.persist( type );
-		sky.getCloudTypes().add(type);
-		s.persist( sky );
-		s.flush();
-		s.getTransaction().rollback();
-		s.close();
-	}
-
-	public void testManyToOneAndInterface() throws Exception {
-		Session s = openSession();
-		s.getTransaction().begin();
-		B b = new BImpl();
-		b.setBId( 1 );
-		s.persist( b );
-		Z z = new ZImpl();
-		z.setB( b );
-		s.persist( z );
-		s.flush();
-		s.getTransaction().rollback();
-		s.close();
-	}
-
-	@Override
-	protected void configure(Configuration cfg) {
-		super.configure( cfg );
-		//cfg.addClass( Government.class );
-	}
-
-	protected Class[] getMappings() {
-		return new Class[]{
-				PrimeMinister.class,
-				Sky.class,
-				ZImpl.class
-
-		};
-	}
-
-	@Override
-	protected String[] getXmlFiles() {
-		return new String[]{
-				"org/hibernate/test/annotations/xml/hbm/Government.hbm.xml",
-				"org/hibernate/test/annotations/xml/hbm/CloudType.hbm.xml",
-				"org/hibernate/test/annotations/xml/hbm/A.hbm.xml",
-				"org/hibernate/test/annotations/xml/hbm/B.hbm.xml"
-		};
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/HbmTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/HbmTest.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/HbmTest.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/HbmTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,104 @@
+//$Id:HbmTest.java 9793 2006-04-26 02:20:18 -0400 (mer., 26 avr. 2006) epbernard $
+package org.hibernate.test.annotations.xml.hbm;
+
+import java.util.HashSet;
+
+import org.hibernate.Session;
+import org.hibernate.cfg.Configuration;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class HbmTest extends TestCase {
+
+	public void testManyToOne() throws Exception {
+		Session s = openSession();
+		s.getTransaction().begin();
+		Government gov = new Government();
+		gov.setName( "Liberals" );
+		s.save( gov );
+		PrimeMinister pm = new PrimeMinister();
+		pm.setName( "Murray" );
+		pm.setCurrentGovernment( gov );
+		s.save( pm );
+		s.getTransaction().rollback();
+		s.close();
+	}
+
+	public void testOneToMany() throws Exception {
+		Session s = openSession();
+		s.getTransaction().begin();
+		Government gov = new Government();
+		gov.setName( "Liberals" );
+		Government gov2 = new Government();
+		gov2.setName( "Liberals2" );
+		s.save( gov );
+		s.save( gov2 );
+		PrimeMinister pm = new PrimeMinister();
+		pm.setName( "Murray" );
+		pm.setCurrentGovernment( gov );
+		pm.setGovernments( new HashSet() );
+		pm.getGovernments().add( gov2 );
+		pm.getGovernments().add( gov );
+		gov.setPrimeMinister( pm );
+		gov2.setPrimeMinister( pm );
+		s.save( pm );
+		s.flush();
+		s.getTransaction().rollback();
+		s.close();
+	}
+
+	public void testManyToMany() throws Exception {
+		Session s = openSession();
+		s.getTransaction().begin();
+		CloudType type = new CloudType();
+		type.setName( "Cumulus" );
+		Sky sky = new Sky();
+		s.persist( type );
+		sky.getCloudTypes().add(type);
+		s.persist( sky );
+		s.flush();
+		s.getTransaction().rollback();
+		s.close();
+	}
+
+	public void testManyToOneAndInterface() throws Exception {
+		Session s = openSession();
+		s.getTransaction().begin();
+		B b = new BImpl();
+		b.setBId( 1 );
+		s.persist( b );
+		Z z = new ZImpl();
+		z.setB( b );
+		s.persist( z );
+		s.flush();
+		s.getTransaction().rollback();
+		s.close();
+	}
+
+	@Override
+	protected void configure(Configuration cfg) {
+		super.configure( cfg );
+		//cfg.addClass( Government.class );
+	}
+
+	protected Class[] getMappings() {
+		return new Class[]{
+				PrimeMinister.class,
+				Sky.class,
+				ZImpl.class
+
+		};
+	}
+
+	@Override
+	protected String[] getXmlFiles() {
+		return new String[]{
+				"org/hibernate/test/annotations/xml/hbm/Government.hbm.xml",
+				"org/hibernate/test/annotations/xml/hbm/CloudType.hbm.xml",
+				"org/hibernate/test/annotations/xml/hbm/A.hbm.xml",
+				"org/hibernate/test/annotations/xml/hbm/B.hbm.xml"
+		};
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/PrimeMinister.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/PrimeMinister.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/PrimeMinister.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,57 +0,0 @@
-//$Id:PrimeMinister.java 9793 2006-04-26 02:20:18 -0400 (mer., 26 avr. 2006) epbernard $
-package org.hibernate.test.annotations.xml.hbm;
-
-import java.util.Set;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.ManyToOne;
-import javax.persistence.OneToMany;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class PrimeMinister {
-	private Integer id;
-	private String name;
-	private Government currentGovernment;
-	private Set<Government> governments;
-
-	@ManyToOne
-	public Government getCurrentGovernment() {
-		return currentGovernment;
-	}
-
-	public void setCurrentGovernment(Government currentGovernment) {
-		this.currentGovernment = currentGovernment;
-	}
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	@OneToMany(mappedBy = "primeMinister")
-	public Set<Government> getGovernments() {
-		return governments;
-	}
-
-	public void setGovernments(Set<Government> governments) {
-		this.governments = governments;
-	}
-
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/PrimeMinister.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/PrimeMinister.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/PrimeMinister.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/PrimeMinister.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,57 @@
+//$Id:PrimeMinister.java 9793 2006-04-26 02:20:18 -0400 (mer., 26 avr. 2006) epbernard $
+package org.hibernate.test.annotations.xml.hbm;
+
+import java.util.Set;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToMany;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class PrimeMinister {
+	private Integer id;
+	private String name;
+	private Government currentGovernment;
+	private Set<Government> governments;
+
+	@ManyToOne
+	public Government getCurrentGovernment() {
+		return currentGovernment;
+	}
+
+	public void setCurrentGovernment(Government currentGovernment) {
+		this.currentGovernment = currentGovernment;
+	}
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	@OneToMany(mappedBy = "primeMinister")
+	public Set<Government> getGovernments() {
+		return governments;
+	}
+
+	public void setGovernments(Set<Government> governments) {
+		this.governments = governments;
+	}
+
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/Sky.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/Sky.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/Sky.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,47 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.xml.hbm;
-
-import java.util.HashSet;
-import java.util.Set;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.ManyToMany;
-import javax.persistence.ManyToOne;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity(name="EarthSky")
-public class Sky {
-	private Integer id;
-	private Set<CloudType> cloudTypes = new HashSet<CloudType>();
-	private CloudType mainCloud;
-
-	@ManyToMany
-	public Set<CloudType> getCloudTypes() {
-		return cloudTypes;
-	}
-
-	public void setCloudTypes(Set<CloudType> cloudTypes) {
-		this.cloudTypes = cloudTypes;
-	}
-
-	@Id @GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	@ManyToOne
-	public CloudType getMainCloud() {
-		return mainCloud;
-	}
-
-	public void setMainCloud(CloudType mainCloud) {
-		this.mainCloud = mainCloud;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/Sky.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/Sky.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/Sky.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/Sky.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,47 @@
+//$Id: $
+package org.hibernate.test.annotations.xml.hbm;
+
+import java.util.HashSet;
+import java.util.Set;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.ManyToMany;
+import javax.persistence.ManyToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity(name="EarthSky")
+public class Sky {
+	private Integer id;
+	private Set<CloudType> cloudTypes = new HashSet<CloudType>();
+	private CloudType mainCloud;
+
+	@ManyToMany
+	public Set<CloudType> getCloudTypes() {
+		return cloudTypes;
+	}
+
+	public void setCloudTypes(Set<CloudType> cloudTypes) {
+		this.cloudTypes = cloudTypes;
+	}
+
+	@Id @GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	@ManyToOne
+	public CloudType getMainCloud() {
+		return mainCloud;
+	}
+
+	public void setMainCloud(CloudType mainCloud) {
+		this.mainCloud = mainCloud;
+	}
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/Z.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/Z.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/Z.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,15 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.xml.hbm;
-
-/**
- * @author Emmanuel Bernard
- */
-public interface Z extends java.io.Serializable {
-  public Integer getZId();
-
-  public void setZId(Integer zId);
-
-  public B getB();
-
-  public void setB(B b);
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/Z.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/Z.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/Z.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/Z.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,15 @@
+//$Id: $
+package org.hibernate.test.annotations.xml.hbm;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public interface Z extends java.io.Serializable {
+  public Integer getZId();
+
+  public void setZId(Integer zId);
+
+  public B getB();
+
+  public void setB(B b);
+}

Deleted: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/ZImpl.java
===================================================================
--- branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/ZImpl.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/ZImpl.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,45 +0,0 @@
-//$Id: $
-package org.hibernate.test.annotations.xml.hbm;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.Id;
-import javax.persistence.Inheritance;
-import javax.persistence.InheritanceType;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-import javax.persistence.Table;
-import javax.persistence.GeneratedValue;
-
- at Entity
- at Inheritance( strategy = InheritanceType.JOINED )
- at org.hibernate.annotations.Proxy( proxyClass = Z.class )
- at Table( name = "Z" )
-public class ZImpl implements Z {
-	private static final long serialVersionUID = 1L;
-
-	private Integer zId = null;
-	private B b = null;
-
-	@Id
-	@GeneratedValue
-	@Column( name = "zID" )
-	public Integer getZId() {
-		return zId;
-	}
-
-	public void setZId(Integer zId) {
-		this.zId = zId;
-	}
-
-	@ManyToOne( optional = false, targetEntity = BImpl.class, fetch = FetchType.LAZY )
-	@JoinColumn( name = "bID", referencedColumnName = "bID")
-	public B getB() {
-		return b;
-	}
-
-	public void setB(B b) {
-		this.b = b;
-	}
-}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/ZImpl.java (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/ZImpl.java)
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/ZImpl.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/xml/hbm/ZImpl.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,45 @@
+//$Id: $
+package org.hibernate.test.annotations.xml.hbm;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+import javax.persistence.GeneratedValue;
+
+ at Entity
+ at Inheritance( strategy = InheritanceType.JOINED )
+ at org.hibernate.annotations.Proxy( proxyClass = Z.class )
+ at Table( name = "Z" )
+public class ZImpl implements Z {
+	private static final long serialVersionUID = 1L;
+
+	private Integer zId = null;
+	private B b = null;
+
+	@Id
+	@GeneratedValue
+	@Column( name = "zID" )
+	public Integer getZId() {
+		return zId;
+	}
+
+	public void setZId(Integer zId) {
+		this.zId = zId;
+	}
+
+	@ManyToOne( optional = false, targetEntity = BImpl.class, fetch = FetchType.LAZY )
+	@JoinColumn( name = "bID", referencedColumnName = "bID")
+	public B getB() {
+		return b;
+	}
+
+	public void setB(B b) {
+		this.b = b;
+	}
+}

Copied: trunk/HibernateExt/annotations/src/test/org/hibernate/test/lucene (from rev 11279, branches/Branch_3_2/HibernateExt/annotations/src/test/org/hibernate/test/lucene)

Modified: trunk/HibernateExt/common/common-build.xml
===================================================================
--- trunk/HibernateExt/common/common-build.xml	2007-03-14 22:02:55 UTC (rev 11281)
+++ trunk/HibernateExt/common/common-build.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -36,9 +36,11 @@
     <property name="javadoc" value="http://java.sun.com/j2se/1.4/docs/api"/>
     <property name="javac.debug" value="on"/>
     <property name="javac.optimize" value="off"/>
+	<property name="javac.source" value="1.4"/>
+	<property name="javac.target" value="1.4"/>
 
 
-    <!-- set Hibernate core related properties -->
+	<!-- set Hibernate core related properties -->
     <property name="hibernate-core.home" location="${common-build.basedir}/../../hibernate-3.2"/>
     <property name="hibernate-core.jar" location="${hibernate-core.home}/hibernate3.jar"/>
     <property name="hibernate-core.lib.dir" location="${hibernate-core.home}/lib"/>
@@ -48,7 +50,16 @@
 
 	<!--
 	Explicitly define tasks from ant..
-	Unfortunately, checkstyle-all.jar contains it's own version of ANTLR, so ANTLR cannot be in the classpath.
+	Unfortunately, checkstyle-a<path id="lib.class.path">
+    	<path location="${hibernate-core.jar}"></path>
+        <fileset dir="${hibernate-core.lib.dir}">
+            <include name="*.jar"/>
+        </fileset>
+        <fileset dir="${lib.dir}">
+            <include name="*.jar"/>
+        </fileset>
+        <pathelement path="${clover.jar}"/>
+    </path>ll.jar contains it's own version of ANTLR, so ANTLR cannot be in the classpath.
 	-->
 	<!-- Emmanuel: Removed antlr, shouldn't be useful in Ext package...
     taskdef name="antlr" classname="org.apache.tools.ant.taskdefs.optional.ANTLR">
@@ -84,10 +95,14 @@
         <fileset dir="${lib.dir}">
             <include name="*.jar"/>
         </fileset>
-        <pathelement path="${clover.jar}"/>   
+		<path refid="lib.moduleclass.path"/>
+		<pathelement path="${clover.jar}"/>
     </path>
 
-    <patternset id="support.files">
+	<!-- overridable in modules -->
+	<path id="lib.moduleclass.path"/>
+
+	<patternset id="support.files">
         <include name="**/*.jpg"/>
         <include name="**/*.gif"/>
         <include name="**/*.dtd"/>
@@ -193,8 +208,8 @@
             value="org.eclipse.jdt.core.JDTCompilerAdapter"
             classpath="${java.class.path}"/>
         <javac
-        	target="1.4"
-            source="1.4"   
+        	target="${javac.target}"
+            source="${javac.source}"
             srcdir="${src.dir}"
             destdir="${classes.dir}"
             classpathref="lib.class.path"
@@ -211,8 +226,8 @@
 			value="org.eclipse.jdt.core.JDTCompilerAdapter"
 			classpath="${java.class.path}"/>
 		<javac
-            target="1.4"
-            source="1.4"   
+            target="${javac.target}"
+            source="${javac.source}"
 			destdir="${testclasses.dir}"
 			classpathref="junit.classpath"
 			debug="${javac.debug}"
@@ -386,7 +401,18 @@
         </junit>
     </target>
 
-    <target name="junitinstrument" depends="compiletest,instrument"
+	<!-- Run a single unit test. -->
+	<target name="junitsingle" depends="compiletest" description="Run a single test suite (requires testname and jdbc.driver properties)">
+		<mkdir dir="test_output"/>
+		<junit printsummary="yes" fork="yes" haltonfailure="yes">
+			<classpath refid="junit.classpath"/>
+			<formatter type="plain"/>
+			<formatter type="xml"/>
+			<test fork="yes" todir="test_output" haltonfailure="no" name="${testname}"/>
+		</junit>
+	</target>
+
+	<target name="junitinstrument" depends="compiletest,instrument"
 			description="Run the instrument test suite (requires driver.jar property)">
 		<mkdir dir="${instrumenttest.out.dir}"/>
 		<junit printsummary="yes" haltonfailure="yes" dir="${basedir}"

Copied: trunk/HibernateExt/commons-annotations (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations)

Deleted: trunk/HibernateExt/commons-annotations/build.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/build.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/build.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,133 +0,0 @@
-<project name="Hibernate Commons Annotations" default="dist" basedir=".">
-
-	<!-- Give user a chance to override without editing this file
-		   (and without typing -D each time it compiles it) -->
-	<property file="build.properties"/>
-	<property file="${user.home}/.ant.properties"/>
-
-	<!-- Name of project and version, used to create filenames -->
-	<property name="Name" value="Hibernate Commons Annotations"/>
-	<property name="name" value="hibernate-commons-annotations"/>
-	<property name="version" value="3.2.2.GA"/>
-	<property name="javadoc.packagenames" value="org.hibernate.commons.annotations.*"/>
-	<property name="copy.test" value="true"/>
-	<property name="javac.source" value="1.5"/>
-	<property name="javac.target" value="1.5"/>
-	<property name="common.dir" value="${basedir}/../common"/>
-	<property name="hibernate-core.jar.available" value="true"/>
-	<property name="jpa-api.jar" value="${basedir}/../jpa-api/build/ejb3-persistence.jar"/>
-
-	<import file="${common.dir}/common-build.xml"/>
-
-	<path id="lib.class.path">
-    	<fileset dir="${hibernate-core.lib.dir}">
-			<include name="commons-logging*.jar"/>
-			<include name="log4j*.jar"/>
-		</fileset>
-        <fileset dir="${lib.dir}">
-            <include name="*.jar"/>
-        </fileset>
-		<path refid="lib.moduleclass.path"/>
-		<pathelement path="${clover.jar}"/>
-    </path>
-
-	<path id="junit.moduleclasspath">
-		<pathelement location="${src.dir}"/>
-		<pathelement location="${test.dir}"/>
-		<pathelement location="${jpa-api.jar}"/>
-		<fileset dir="${hibernate-core.lib.dir}">
-			<include name="junit*.jar"/>
-		</fileset>
-	</path>
-
-	<!-- target name="report">
-			<mkdir dir="test_output"/>
-			<junitreport todir="test_output">
-			  <fileset dir="test_output">
-				<include name="TEST-*.xml"/>
-			  </fileset>
-			  <report format="frames" todir="test_output/report"/>
-			</junitreport>
-		</target -->
-
-	<target name="init" description="Initialize the build">
-		<!-- CCed from common-build to avoid failure when hibernate core is not compiled -->
-		<tstamp>
-			<format property="subversion" pattern="yyyy-MM-dd hh:mm:ss"/>
-		</tstamp>
-		<echo message="Build ${Name}-${version} (${subversion})"/>
-		<mkdir dir="${classes.dir}"/>
-		<mkdir dir="${testclasses.dir}"/>
-		<copy todir="${classes.dir}">
-			<fileset dir="${src.dir}">
-				<patternset refid="support.files"/>
-			</fileset>
-		</copy>
-
-		<copy todir="${build.dir}">
-			<fileset dir=".">
-				<include name="readme.txt"/>
-				<include name="lgpl.txt"/>
-			</fileset>
-		</copy>
-
-		<!-- check for dependency artefacts -->
-		<available file="${jpa-api.jar}" type="file" property="jpa-api.jar.available"/>
-	</target>
-
-	<target name="compiletest" depends="get.jpa-api,compile" description="Compile the tests">
-		<available
-				classname="org.eclipse.core.launcher.Main"
-				property="build.compiler"
-				value="org.eclipse.jdt.core.JDTCompilerAdapter"
-				classpath="${java.class.path}"/>
-		<javac
-				target="${javac.target}"
-				source="${javac.source}"
-				destdir="${testclasses.dir}"
-				classpathref="junit.classpath"
-				debug="${javac.debug}"
-				optimize="${javac.optimize}"
-				nowarn="on">
-			<src refid="testsrc.path"/>
-		</javac>
-	</target>
-
-	<target name="get.jpa-api" depends="init" unless="jpa-api.jar.available">
-		<ant inheritall="false" dir="${basedir}/../jpa-api" target="clean"/>
-		<ant inheritall="false" dir="${basedir}/../jpa-api" target="jar"/>
-	</target>
-
-	<target name="jar" depends="compile" description="Build the distribution .jar file">
-		<mkdir dir="${classes.dir}/META-INF"/>
-		<manifest file="${classes.dir}/META-INF/MANIFEST.MF">
-			<attribute name="Product" value="${Name}"/>
-			<attribute name="Version" value="${version}"/>
-		</manifest>
-		<antcall target="common-build.jar"/>
-	</target>
-
-	<!-- Some of this can probably be moved to common-build... -->
-	<target name="dist" depends="jar,javadoc,copysource,copytest,copylib,extras" description="Build everything">
-
-		<copy todir="${dist.dir}" failonerror="false">
-			<fileset dir="${common.dir}">
-				<include name="common-build.xml"/>
-			</fileset>
-		</copy>
-		<copy file="${basedir}/build.properties.dist" tofile="${dist.dir}/build.properties" failonerror="false">
-		</copy>
-		<antcall target="common-build.dist"/>
-	</target>
-
-	<target name="zip-dist" description="zip the dist">
-		<zip zipfile="${dist.dir}-${version}.zip">
-			<zipfileset prefix="${name}-${version}" dir="${dist.dir}"/>
-		</zip>
-		<tar compression="gzip" tarfile="${dist.dir}-${version}.tar.gz">
-			<tarfileset prefix="${name}-${version}" dir="${dist.dir}"/>
-		</tar>
-	</target>
-
-
-</project>

Copied: trunk/HibernateExt/commons-annotations/build.xml (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/build.xml)
===================================================================
--- trunk/HibernateExt/commons-annotations/build.xml	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/build.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,133 @@
+<project name="Hibernate Commons Annotations" default="dist" basedir=".">
+
+	<!-- Give user a chance to override without editing this file
+		   (and without typing -D each time it compiles it) -->
+	<property file="build.properties"/>
+	<property file="${user.home}/.ant.properties"/>
+
+	<!-- Name of project and version, used to create filenames -->
+	<property name="Name" value="Hibernate Commons Annotations"/>
+	<property name="name" value="hibernate-commons-annotations"/>
+	<property name="version" value="3.2.2.GA"/>
+	<property name="javadoc.packagenames" value="org.hibernate.commons.annotations.*"/>
+	<property name="copy.test" value="true"/>
+	<property name="javac.source" value="1.5"/>
+	<property name="javac.target" value="1.5"/>
+	<property name="common.dir" value="${basedir}/../common"/>
+	<property name="hibernate-core.jar.available" value="true"/>
+	<property name="jpa-api.jar" value="${basedir}/../jpa-api/build/ejb3-persistence.jar"/>
+
+	<import file="${common.dir}/common-build.xml"/>
+
+	<path id="lib.class.path">
+    	<fileset dir="${hibernate-core.lib.dir}">
+			<include name="commons-logging*.jar"/>
+			<include name="log4j*.jar"/>
+		</fileset>
+        <fileset dir="${lib.dir}">
+            <include name="*.jar"/>
+        </fileset>
+		<path refid="lib.moduleclass.path"/>
+		<pathelement path="${clover.jar}"/>
+    </path>
+
+	<path id="junit.moduleclasspath">
+		<pathelement location="${src.dir}"/>
+		<pathelement location="${test.dir}"/>
+		<pathelement location="${jpa-api.jar}"/>
+		<fileset dir="${hibernate-core.lib.dir}">
+			<include name="junit*.jar"/>
+		</fileset>
+	</path>
+
+	<!-- target name="report">
+			<mkdir dir="test_output"/>
+			<junitreport todir="test_output">
+			  <fileset dir="test_output">
+				<include name="TEST-*.xml"/>
+			  </fileset>
+			  <report format="frames" todir="test_output/report"/>
+			</junitreport>
+		</target -->
+
+	<target name="init" description="Initialize the build">
+		<!-- CCed from common-build to avoid failure when hibernate core is not compiled -->
+		<tstamp>
+			<format property="subversion" pattern="yyyy-MM-dd hh:mm:ss"/>
+		</tstamp>
+		<echo message="Build ${Name}-${version} (${subversion})"/>
+		<mkdir dir="${classes.dir}"/>
+		<mkdir dir="${testclasses.dir}"/>
+		<copy todir="${classes.dir}">
+			<fileset dir="${src.dir}">
+				<patternset refid="support.files"/>
+			</fileset>
+		</copy>
+
+		<copy todir="${build.dir}">
+			<fileset dir=".">
+				<include name="readme.txt"/>
+				<include name="lgpl.txt"/>
+			</fileset>
+		</copy>
+
+		<!-- check for dependency artefacts -->
+		<available file="${jpa-api.jar}" type="file" property="jpa-api.jar.available"/>
+	</target>
+
+	<target name="compiletest" depends="get.jpa-api,compile" description="Compile the tests">
+		<available
+				classname="org.eclipse.core.launcher.Main"
+				property="build.compiler"
+				value="org.eclipse.jdt.core.JDTCompilerAdapter"
+				classpath="${java.class.path}"/>
+		<javac
+				target="${javac.target}"
+				source="${javac.source}"
+				destdir="${testclasses.dir}"
+				classpathref="junit.classpath"
+				debug="${javac.debug}"
+				optimize="${javac.optimize}"
+				nowarn="on">
+			<src refid="testsrc.path"/>
+		</javac>
+	</target>
+
+	<target name="get.jpa-api" depends="init" unless="jpa-api.jar.available">
+		<ant inheritall="false" dir="${basedir}/../jpa-api" target="clean"/>
+		<ant inheritall="false" dir="${basedir}/../jpa-api" target="jar"/>
+	</target>
+
+	<target name="jar" depends="compile" description="Build the distribution .jar file">
+		<mkdir dir="${classes.dir}/META-INF"/>
+		<manifest file="${classes.dir}/META-INF/MANIFEST.MF">
+			<attribute name="Product" value="${Name}"/>
+			<attribute name="Version" value="${version}"/>
+		</manifest>
+		<antcall target="common-build.jar"/>
+	</target>
+
+	<!-- Some of this can probably be moved to common-build... -->
+	<target name="dist" depends="jar,javadoc,copysource,copytest,copylib,extras" description="Build everything">
+
+		<copy todir="${dist.dir}" failonerror="false">
+			<fileset dir="${common.dir}">
+				<include name="common-build.xml"/>
+			</fileset>
+		</copy>
+		<copy file="${basedir}/build.properties.dist" tofile="${dist.dir}/build.properties" failonerror="false">
+		</copy>
+		<antcall target="common-build.dist"/>
+	</target>
+
+	<target name="zip-dist" description="zip the dist">
+		<zip zipfile="${dist.dir}-${version}.zip">
+			<zipfileset prefix="${name}-${version}" dir="${dist.dir}"/>
+		</zip>
+		<tar compression="gzip" tarfile="${dist.dir}-${version}.tar.gz">
+			<tarfileset prefix="${name}-${version}" dir="${dist.dir}"/>
+		</tar>
+	</target>
+
+
+</project>

Deleted: trunk/HibernateExt/commons-annotations/changelog.txt
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/changelog.txt	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/changelog.txt	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,7 +0,0 @@
-Hibernate Annotations Changelog
-===============================
-
-3.2.2.GA (xx-02-2007)
----------------------
-
-Initial release as a standalone product (see Hibernate Annotations changelog for previous informations)
\ No newline at end of file

Copied: trunk/HibernateExt/commons-annotations/changelog.txt (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/changelog.txt)
===================================================================
--- trunk/HibernateExt/commons-annotations/changelog.txt	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/changelog.txt	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,7 @@
+Hibernate Annotations Changelog
+===============================
+
+3.2.2.GA (xx-02-2007)
+---------------------
+
+Initial release as a standalone product (see Hibernate Annotations changelog for previous informations)
\ No newline at end of file

Deleted: trunk/HibernateExt/commons-annotations/lgpl.txt
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/lgpl.txt	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/lgpl.txt	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,504 +0,0 @@
-		  GNU LESSER GENERAL PUBLIC LICENSE
-		       Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
-     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL.  It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
-			    Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
-  This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it.  You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
-  When we speak of free software, we are referring to freedom of use,
-not price.  Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
-  To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights.  These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
-  For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you.  You must make sure that they, too, receive or can get the source
-code.  If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it.  And you must show them these terms so they know their rights.
-
-  We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
-  To protect each distributor, we want to make it very clear that
-there is no warranty for the free library.  Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-
-  Finally, software patents pose a constant threat to the existence of
-any free program.  We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder.  Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
-  Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License.  This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License.  We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
-  When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library.  The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom.  The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
-  We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License.  It also provides other free software developers Less
-of an advantage over competing non-free programs.  These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries.  However, the Lesser license provides advantages in certain
-special circumstances.
-
-  For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard.  To achieve this, non-free programs must be
-allowed to use the library.  A more frequent case is that a free
-library does the same job as widely used non-free libraries.  In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
-  In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software.  For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
-  Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.  Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library".  The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-
-		  GNU LESSER GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
-  A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
-  The "Library", below, refers to any such software library or work
-which has been distributed under these terms.  A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language.  (Hereinafter, translation is
-included without limitation in the term "modification".)
-
-  "Source code" for a work means the preferred form of the work for
-making modifications to it.  For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
-  Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it).  Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-  
-  1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
-  You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
-  2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) The modified work must itself be a software library.
-
-    b) You must cause the files modified to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    c) You must cause the whole of the work to be licensed at no
-    charge to all third parties under the terms of this License.
-
-    d) If a facility in the modified Library refers to a function or a
-    table of data to be supplied by an application program that uses
-    the facility, other than as an argument passed when the facility
-    is invoked, then you must make a good faith effort to ensure that,
-    in the event an application does not supply such function or
-    table, the facility still operates, and performs whatever part of
-    its purpose remains meaningful.
-
-    (For example, a function in a library to compute square roots has
-    a purpose that is entirely well-defined independent of the
-    application.  Therefore, Subsection 2d requires that any
-    application-supplied function or table used by this function must
-    be optional: if the application does not supply it, the square
-    root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library.  To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License.  (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.)  Do not make any other change in
-these notices.
-
-  Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
-  This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
-  4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
-  If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library".  Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
-  However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library".  The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
-  When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library.  The
-threshold for this to be true is not precisely defined by law.
-
-  If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work.  (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
-  Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
-  6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
-  You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License.  You must supply a copy of this License.  If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License.  Also, you must do one
-of these things:
-
-    a) Accompany the work with the complete corresponding
-    machine-readable source code for the Library including whatever
-    changes were used in the work (which must be distributed under
-    Sections 1 and 2 above); and, if the work is an executable linked
-    with the Library, with the complete machine-readable "work that
-    uses the Library", as object code and/or source code, so that the
-    user can modify the Library and then relink to produce a modified
-    executable containing the modified Library.  (It is understood
-    that the user who changes the contents of definitions files in the
-    Library will not necessarily be able to recompile the application
-    to use the modified definitions.)
-
-    b) Use a suitable shared library mechanism for linking with the
-    Library.  A suitable mechanism is one that (1) uses at run time a
-    copy of the library already present on the user's computer system,
-    rather than copying library functions into the executable, and (2)
-    will operate properly with a modified version of the library, if
-    the user installs one, as long as the modified version is
-    interface-compatible with the version that the work was made with.
-
-    c) Accompany the work with a written offer, valid for at
-    least three years, to give the same user the materials
-    specified in Subsection 6a, above, for a charge no more
-    than the cost of performing this distribution.
-
-    d) If distribution of the work is made by offering access to copy
-    from a designated place, offer equivalent access to copy the above
-    specified materials from the same place.
-
-    e) Verify that the user has already received a copy of these
-    materials or that you have already sent this user a copy.
-
-  For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it.  However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
-  It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system.  Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
-  7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
-    a) Accompany the combined library with a copy of the same work
-    based on the Library, uncombined with any other library
-    facilities.  This must be distributed under the terms of the
-    Sections above.
-
-    b) Give prominent notice with the combined library of the fact
-    that part of it is a work based on the Library, and explaining
-    where to find the accompanying uncombined form of the same work.
-
-  8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License.  Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License.  However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
-  9. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Library or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
-  10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-
-  11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded.  In such case, this License incorporates the limitation as if
-written in the body of this License.
-
-  13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation.  If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
-  14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission.  For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this.  Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
-			    NO WARRANTY
-
-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
-		     END OF TERMS AND CONDITIONS
-		     
-           How to Apply These Terms to Your New Libraries
-
-  If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change.  You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
-  To apply these terms, attach the following notices to the library.  It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the library's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the
-  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
-  <signature of Ty Coon>, 1 April 1990
-  Ty Coon, President of Vice
-
-That's all there is to it!
-
-

Copied: trunk/HibernateExt/commons-annotations/lgpl.txt (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/lgpl.txt)
===================================================================
--- trunk/HibernateExt/commons-annotations/lgpl.txt	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/lgpl.txt	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,504 @@
+		  GNU LESSER GENERAL PUBLIC LICENSE
+		       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+		  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+  
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+			    NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+		     
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+

Copied: trunk/HibernateExt/commons-annotations/lib (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/lib)

Deleted: trunk/HibernateExt/commons-annotations/lib/README.txt
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/lib/README.txt	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/lib/README.txt	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,11 +0,0 @@
-Hibernate Commons Annotations dependencies
-==========================================
-
-Core
-====
-commons-logging.jar (see Hibernate Core version): required
-log4j.jar (see Hibernate Core version): optional
-
-Test
-====
-ejb3-persistence.jar (final release version): required
\ No newline at end of file

Copied: trunk/HibernateExt/commons-annotations/lib/README.txt (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/lib/README.txt)
===================================================================
--- trunk/HibernateExt/commons-annotations/lib/README.txt	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/lib/README.txt	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,11 @@
+Hibernate Commons Annotations dependencies
+==========================================
+
+Core
+====
+commons-logging.jar (see Hibernate Core version): required
+log4j.jar (see Hibernate Core version): optional
+
+Test
+====
+ejb3-persistence.jar (final release version): required
\ No newline at end of file

Deleted: trunk/HibernateExt/commons-annotations/readme.txt
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/readme.txt	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/readme.txt	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,45 +0,0 @@
-Hibernate Commons Annotations
-==================================================
-Version: 3.2.2.GA, xx.02.2007
-
-Description
------------
-
-Hibernate Commons Annotations is a utility project used by annotations based
-Hibernate sub-projects.
-It's first scope is to support Java Generics type discovery.
-It's second scope is to support Java Annotations overriding through XML files
-(mainly but not conceptually limited to)
-
-
-Instructions
-------------
-
-TODO: Do something here
-
-
-Contact
-------------
-
-Latest Documentation:
-
-This project has no documentation per se, because of it's internal use focus.
-Please ask questions to the technical support forum.
-
-Bug Reports:
-
-   Hibernate JIRA (preferred)
-   hibernate-devel at lists.sourceforge.net
-
-Free Technical Support:
-
-   http://forum.hibernate.org (http://forum.hibernate.org/viewforum.php?f=9)
-
-
-Notes
------------
-
-If you want to contribute, go to http://www.hibernate.org/
-
-This software and its documentation are distributed under the terms of the
-FSF Lesser Gnu Public License (see lgpl.txt).
\ No newline at end of file

Copied: trunk/HibernateExt/commons-annotations/readme.txt (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/readme.txt)
===================================================================
--- trunk/HibernateExt/commons-annotations/readme.txt	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/readme.txt	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,45 @@
+Hibernate Commons Annotations
+==================================================
+Version: 3.2.2.GA, xx.02.2007
+
+Description
+-----------
+
+Hibernate Commons Annotations is a utility project used by annotations based
+Hibernate sub-projects.
+It's first scope is to support Java Generics type discovery.
+It's second scope is to support Java Annotations overriding through XML files
+(mainly but not conceptually limited to)
+
+
+Instructions
+------------
+
+TODO: Do something here
+
+
+Contact
+------------
+
+Latest Documentation:
+
+This project has no documentation per se, because of it's internal use focus.
+Please ask questions to the technical support forum.
+
+Bug Reports:
+
+   Hibernate JIRA (preferred)
+   hibernate-devel at lists.sourceforge.net
+
+Free Technical Support:
+
+   http://forum.hibernate.org (http://forum.hibernate.org/viewforum.php?f=9)
+
+
+Notes
+-----------
+
+If you want to contribute, go to http://www.hibernate.org/
+
+This software and its documentation are distributed under the terms of the
+FSF Lesser Gnu Public License (see lgpl.txt).
\ No newline at end of file

Copied: trunk/HibernateExt/commons-annotations/src (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src)

Copied: trunk/HibernateExt/commons-annotations/src/java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/java)

Copied: trunk/HibernateExt/commons-annotations/src/java/org (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org)

Copied: trunk/HibernateExt/commons-annotations/src/java/org/hibernate (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate)

Copied: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations)

Copied: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common)

Deleted: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/AssertionFailure.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/AssertionFailure.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/AssertionFailure.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,30 +0,0 @@
-//$Id: $
-package org.hibernate.annotations.common;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * Indicates failure of an assertion: a possible bug in Hibernate.
- *
- * @author Gavin King
- * @auhor Emmanuel Bernard
- */
-//TODO Copy from Hibernate Core, do some mutualization here?
-public class AssertionFailure extends RuntimeException {
-
-	private static final Log log = LogFactory.getLog(AssertionFailure.class);
-
-	private static final String MESSAGE = "an assertion failure occured (this may indicate a bug in Hibernate)";
-
-	public AssertionFailure(String s) {
-		super(s);
-		log.error(MESSAGE, this);
-	}
-
-	public AssertionFailure(String s, Throwable t) {
-		super(s, t);
-		log.error(MESSAGE, t);
-	}
-
-}

Copied: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/AssertionFailure.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/AssertionFailure.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/AssertionFailure.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/AssertionFailure.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,30 @@
+//$Id: $
+package org.hibernate.annotations.common;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * Indicates failure of an assertion: a possible bug in Hibernate.
+ *
+ * @author Gavin King
+ * @auhor Emmanuel Bernard
+ */
+//TODO Copy from Hibernate Core, do some mutualization here?
+public class AssertionFailure extends RuntimeException {
+
+	private static final Log log = LogFactory.getLog(AssertionFailure.class);
+
+	private static final String MESSAGE = "an assertion failure occured (this may indicate a bug in Hibernate)";
+
+	public AssertionFailure(String s) {
+		super(s);
+		log.error(MESSAGE, this);
+	}
+
+	public AssertionFailure(String s, Throwable t) {
+		super(s, t);
+		log.error(MESSAGE, t);
+	}
+
+}

Copied: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/annotationfactory (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/annotationfactory)

Deleted: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/annotationfactory/AnnotationDescriptor.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/annotationfactory/AnnotationDescriptor.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/annotationfactory/AnnotationDescriptor.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,47 +0,0 @@
-package org.hibernate.annotations.common.annotationfactory;
-
-import java.lang.annotation.Annotation;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Encapsulates the data you need to create an annotation. In
- * particular, it stores the type of an <code>Annotation</code> instance
- * and the values of its elements.
- * The "elements" we're talking about are the annotation attributes,
- * not its targets (the term "element" is used ambiguously
- * in Java's annotations documentation).
- *
- * @author Paolo Perrotta
- * @author Davide Marchignoli
- */
-public class AnnotationDescriptor {
-
-	private final Class<? extends Annotation> type;
-
-	private final Map<String, Object> elements = new HashMap<String, Object>();
-
-	public AnnotationDescriptor(Class<? extends Annotation> annotationType) {
-		type = annotationType;
-	}
-
-	public void setValue(String elementName, Object value) {
-		elements.put( elementName, value );
-	}
-
-	public Object valueOf(String elementName) {
-		return elements.get( elementName );
-	}
-
-	public boolean containsElement(String elementName) {
-		return elements.containsKey( elementName );
-	}
-
-	public int numberOfElements() {
-		return elements.size();
-	}
-
-	public Class<? extends Annotation> type() {
-		return type;
-	}
-}

Copied: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/annotationfactory/AnnotationDescriptor.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/annotationfactory/AnnotationDescriptor.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/annotationfactory/AnnotationDescriptor.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/annotationfactory/AnnotationDescriptor.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,47 @@
+package org.hibernate.annotations.common.annotationfactory;
+
+import java.lang.annotation.Annotation;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Encapsulates the data you need to create an annotation. In
+ * particular, it stores the type of an <code>Annotation</code> instance
+ * and the values of its elements.
+ * The "elements" we're talking about are the annotation attributes,
+ * not its targets (the term "element" is used ambiguously
+ * in Java's annotations documentation).
+ *
+ * @author Paolo Perrotta
+ * @author Davide Marchignoli
+ */
+public class AnnotationDescriptor {
+
+	private final Class<? extends Annotation> type;
+
+	private final Map<String, Object> elements = new HashMap<String, Object>();
+
+	public AnnotationDescriptor(Class<? extends Annotation> annotationType) {
+		type = annotationType;
+	}
+
+	public void setValue(String elementName, Object value) {
+		elements.put( elementName, value );
+	}
+
+	public Object valueOf(String elementName) {
+		return elements.get( elementName );
+	}
+
+	public boolean containsElement(String elementName) {
+		return elements.containsKey( elementName );
+	}
+
+	public int numberOfElements() {
+		return elements.size();
+	}
+
+	public Class<? extends Annotation> type() {
+		return type;
+	}
+}

Deleted: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/annotationfactory/AnnotationFactory.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/annotationfactory/AnnotationFactory.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/annotationfactory/AnnotationFactory.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,42 +0,0 @@
-package org.hibernate.annotations.common.annotationfactory;
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Proxy;
-
-/**
- * Creates live annotations (actually <code>AnnotationProxies</code>) from <code>AnnotationDescriptors</code>.
- *
- * @author Paolo Perrotta
- * @author Davide Marchignoli
- * @see AnnotationProxy
- */
-public class AnnotationFactory {
-
-	@SuppressWarnings("unchecked")
-	public static <T extends Annotation> T create(AnnotationDescriptor descriptor) {
-		ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
-        //TODO round 34ms to generate the proxy, hug! is Javassist Faster?
-        //TODO prebuild the javax.persistence and org.hibernate.annotations classes?
-        Class<T> proxyClass = (Class<T>) Proxy.getProxyClass( classLoader, descriptor.type() );
-		InvocationHandler handler = new AnnotationProxy( descriptor );
-		try {
-			return getProxyInstance( proxyClass, handler );
-		}
-		catch (RuntimeException e) {
-			throw e;
-		}
-		catch (Exception e) {
-			throw new RuntimeException( e );
-		}
-	}
-
-	private static <T extends Annotation> T getProxyInstance(Class<T> proxyClass, InvocationHandler handler) throws
-			SecurityException, NoSuchMethodException, IllegalArgumentException, InstantiationException,
-			IllegalAccessException, InvocationTargetException {
-		Constructor<T> constructor = proxyClass.getConstructor( new Class[]{InvocationHandler.class} );
-		return constructor.newInstance( new Object[]{handler} );
-	}
-}

Copied: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/annotationfactory/AnnotationFactory.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/annotationfactory/AnnotationFactory.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/annotationfactory/AnnotationFactory.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/annotationfactory/AnnotationFactory.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,42 @@
+package org.hibernate.annotations.common.annotationfactory;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Proxy;
+
+/**
+ * Creates live annotations (actually <code>AnnotationProxies</code>) from <code>AnnotationDescriptors</code>.
+ *
+ * @author Paolo Perrotta
+ * @author Davide Marchignoli
+ * @see AnnotationProxy
+ */
+public class AnnotationFactory {
+
+	@SuppressWarnings("unchecked")
+	public static <T extends Annotation> T create(AnnotationDescriptor descriptor) {
+		ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+        //TODO round 34ms to generate the proxy, hug! is Javassist Faster?
+        //TODO prebuild the javax.persistence and org.hibernate.annotations classes?
+        Class<T> proxyClass = (Class<T>) Proxy.getProxyClass( classLoader, descriptor.type() );
+		InvocationHandler handler = new AnnotationProxy( descriptor );
+		try {
+			return getProxyInstance( proxyClass, handler );
+		}
+		catch (RuntimeException e) {
+			throw e;
+		}
+		catch (Exception e) {
+			throw new RuntimeException( e );
+		}
+	}
+
+	private static <T extends Annotation> T getProxyInstance(Class<T> proxyClass, InvocationHandler handler) throws
+			SecurityException, NoSuchMethodException, IllegalArgumentException, InstantiationException,
+			IllegalAccessException, InvocationTargetException {
+		Constructor<T> constructor = proxyClass.getConstructor( new Class[]{InvocationHandler.class} );
+		return constructor.newInstance( new Object[]{handler} );
+	}
+}

Deleted: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/annotationfactory/AnnotationProxy.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/annotationfactory/AnnotationProxy.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/annotationfactory/AnnotationProxy.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,111 +0,0 @@
-package org.hibernate.annotations.common.annotationfactory;
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.Method;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.SortedSet;
-import java.util.TreeSet;
-
-/**
- * A concrete implementation of <code>Annotation</code> that pretends it is a
- * "real" source code annotation. It's also an <code>InvocationHandler</code>.
- * <p/>
- * When you create an <code>AnnotationProxy</code>, you must initialize it
- * with an <code>AnnotationDescriptor</code>.
- * The adapter checks that the provided elements are the same elements defined
- * in the annotation interface. However, it does <i>not</i> check that their
- * values are the right type. If you omit an element, the adapter will use the
- * default value for that element from the annotation interface, if it exists.
- * If no default exists, it will throw an exception.
- * <p/>
- * Warning: this class does not implement <code>hashCode()</code> and
- * <code>equals()</code> - it just uses the ones it inherits from <code>Object</code>.
- * This means that an <code>AnnotationProxy</code> does <i>not</i> follow the
- * recommendations of the <code>Annotation</code> javadoc about these two
- * methods. That's why you should never mix <code>AnnotationProxies</code>
- * with "real" annotations. For example, don't put them into the same
- * <code>Collection</code>.
- *
- * @author Paolo Perrotta
- * @author Davide Marchignoli
- * @see java.lang.annotation.Annotation
- */
-public class AnnotationProxy implements Annotation, InvocationHandler {
-
-	private final Class<? extends Annotation> annotationType;
-	//FIXME it's probably better to use String as a key rather than Method
-	//      to speed up and avoid any fancy permsize/GC issue
-	//      I'd better check the litterature on the subject
-	private final Map<Method, Object> values;
-
-	public AnnotationProxy(AnnotationDescriptor descriptor) {
-		this.annotationType = descriptor.type();
-		values = getAnnotationValues( descriptor );
-	}
-
-	private Map<Method, Object> getAnnotationValues(AnnotationDescriptor descriptor) {
-		Map<Method, Object> result = new HashMap<Method, Object>();
-		int processedValuesFromDescriptor = 0;
-		for ( Method m : annotationType.getDeclaredMethods() ) {
-			if ( descriptor.containsElement( m.getName() ) ) {
-				result.put( m, descriptor.valueOf( m.getName() ) );
-				processedValuesFromDescriptor++;
-			}
-			else if ( m.getDefaultValue() != null ) {
-				result.put( m, m.getDefaultValue() );
-			}
-			else {
-				throw new IllegalArgumentException( "No value provided for " + m.getName() );
-			}
-		}
-		if ( processedValuesFromDescriptor != descriptor.numberOfElements() ) {
-			throw new RuntimeException( "Trying to instanciate " + annotationType + " with unknown elements" );
-		}
-		return result;
-	}
-
-	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
-		if ( values.containsKey( method ) ) {
-			return values.get( method );
-		}
-		return method.invoke( this, args );
-	}
-
-	public Class<? extends Annotation> annotationType() {
-		return annotationType;
-	}
-
-	public String toString() {
-		StringBuilder result = new StringBuilder();
-		result.append( '@' ).append( annotationType().getName() ).append( '(' );
-		for ( Method m : getRegisteredMethodsInAlphabeticalOrder() ) {
-			result.append( m.getName() ).append( '=' ).append( values.get( m ) ).append( ", " );
-		}
-		// remove last separator:
-		if ( values.size() > 0 ) {
-			result.delete( result.length() - 2, result.length() );
-			result.append( ")" );
-		}
-		else {
-			result.delete( result.length() - 1, result.length() );
-		}
-
-		return result.toString();
-	}
-
-	private SortedSet<Method> getRegisteredMethodsInAlphabeticalOrder() {
-		SortedSet<Method> result = new TreeSet<Method>(
-				new Comparator<Method>() {
-					public int compare(Method o1, Method o2) {
-						return o1.getName().compareTo( o2.getName() );
-					}
-				}
-		);
-		//List<Method> result = new LinkedList<Method>();
-		result.addAll( values.keySet() );
-		return result;
-	}
-}

Copied: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/annotationfactory/AnnotationProxy.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/annotationfactory/AnnotationProxy.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/annotationfactory/AnnotationProxy.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/annotationfactory/AnnotationProxy.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,111 @@
+package org.hibernate.annotations.common.annotationfactory;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.SortedSet;
+import java.util.TreeSet;
+
+/**
+ * A concrete implementation of <code>Annotation</code> that pretends it is a
+ * "real" source code annotation. It's also an <code>InvocationHandler</code>.
+ * <p/>
+ * When you create an <code>AnnotationProxy</code>, you must initialize it
+ * with an <code>AnnotationDescriptor</code>.
+ * The adapter checks that the provided elements are the same elements defined
+ * in the annotation interface. However, it does <i>not</i> check that their
+ * values are the right type. If you omit an element, the adapter will use the
+ * default value for that element from the annotation interface, if it exists.
+ * If no default exists, it will throw an exception.
+ * <p/>
+ * Warning: this class does not implement <code>hashCode()</code> and
+ * <code>equals()</code> - it just uses the ones it inherits from <code>Object</code>.
+ * This means that an <code>AnnotationProxy</code> does <i>not</i> follow the
+ * recommendations of the <code>Annotation</code> javadoc about these two
+ * methods. That's why you should never mix <code>AnnotationProxies</code>
+ * with "real" annotations. For example, don't put them into the same
+ * <code>Collection</code>.
+ *
+ * @author Paolo Perrotta
+ * @author Davide Marchignoli
+ * @see java.lang.annotation.Annotation
+ */
+public class AnnotationProxy implements Annotation, InvocationHandler {
+
+	private final Class<? extends Annotation> annotationType;
+	//FIXME it's probably better to use String as a key rather than Method
+	//      to speed up and avoid any fancy permsize/GC issue
+	//      I'd better check the litterature on the subject
+	private final Map<Method, Object> values;
+
+	public AnnotationProxy(AnnotationDescriptor descriptor) {
+		this.annotationType = descriptor.type();
+		values = getAnnotationValues( descriptor );
+	}
+
+	private Map<Method, Object> getAnnotationValues(AnnotationDescriptor descriptor) {
+		Map<Method, Object> result = new HashMap<Method, Object>();
+		int processedValuesFromDescriptor = 0;
+		for ( Method m : annotationType.getDeclaredMethods() ) {
+			if ( descriptor.containsElement( m.getName() ) ) {
+				result.put( m, descriptor.valueOf( m.getName() ) );
+				processedValuesFromDescriptor++;
+			}
+			else if ( m.getDefaultValue() != null ) {
+				result.put( m, m.getDefaultValue() );
+			}
+			else {
+				throw new IllegalArgumentException( "No value provided for " + m.getName() );
+			}
+		}
+		if ( processedValuesFromDescriptor != descriptor.numberOfElements() ) {
+			throw new RuntimeException( "Trying to instanciate " + annotationType + " with unknown elements" );
+		}
+		return result;
+	}
+
+	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
+		if ( values.containsKey( method ) ) {
+			return values.get( method );
+		}
+		return method.invoke( this, args );
+	}
+
+	public Class<? extends Annotation> annotationType() {
+		return annotationType;
+	}
+
+	public String toString() {
+		StringBuilder result = new StringBuilder();
+		result.append( '@' ).append( annotationType().getName() ).append( '(' );
+		for ( Method m : getRegisteredMethodsInAlphabeticalOrder() ) {
+			result.append( m.getName() ).append( '=' ).append( values.get( m ) ).append( ", " );
+		}
+		// remove last separator:
+		if ( values.size() > 0 ) {
+			result.delete( result.length() - 2, result.length() );
+			result.append( ")" );
+		}
+		else {
+			result.delete( result.length() - 1, result.length() );
+		}
+
+		return result.toString();
+	}
+
+	private SortedSet<Method> getRegisteredMethodsInAlphabeticalOrder() {
+		SortedSet<Method> result = new TreeSet<Method>(
+				new Comparator<Method>() {
+					public int compare(Method o1, Method o2) {
+						return o1.getName().compareTo( o2.getName() );
+					}
+				}
+		);
+		//List<Method> result = new LinkedList<Method>();
+		result.addAll( values.keySet() );
+		return result;
+	}
+}

Copied: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection)

Deleted: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/AnnotationReader.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/AnnotationReader.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/AnnotationReader.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,15 +0,0 @@
-package org.hibernate.annotations.common.reflection;
-
-import java.lang.annotation.Annotation;
-
-/**
- * @author Paolo Perrotta
- */
-public interface AnnotationReader {
-
-    public <T extends Annotation> T getAnnotation(Class<T> annotationType);
-
-    public <T extends Annotation> boolean isAnnotationPresent(Class<T> annotationType);
-
-    public Annotation[] getAnnotations();
-}
\ No newline at end of file

Copied: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/AnnotationReader.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/AnnotationReader.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/AnnotationReader.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/AnnotationReader.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,15 @@
+package org.hibernate.annotations.common.reflection;
+
+import java.lang.annotation.Annotation;
+
+/**
+ * @author Paolo Perrotta
+ */
+public interface AnnotationReader {
+
+    public <T extends Annotation> T getAnnotation(Class<T> annotationType);
+
+    public <T extends Annotation> boolean isAnnotationPresent(Class<T> annotationType);
+
+    public Annotation[] getAnnotations();
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/Filter.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/Filter.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/Filter.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,13 +0,0 @@
-//$Id$
-package org.hibernate.annotations.common.reflection;
-
-/**
- * Filter properties
- *
- * @author Emmanuel Bernard
- */
-public interface Filter {
-	boolean returnStatic();
-
-	boolean returnTransient();
-}

Copied: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/Filter.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/Filter.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/Filter.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/Filter.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,13 @@
+//$Id$
+package org.hibernate.annotations.common.reflection;
+
+/**
+ * Filter properties
+ *
+ * @author Emmanuel Bernard
+ */
+public interface Filter {
+	boolean returnStatic();
+
+	boolean returnTransient();
+}

Deleted: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/ReflectionManager.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/ReflectionManager.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/ReflectionManager.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,30 +0,0 @@
-package org.hibernate.annotations.common.reflection;
-
-import java.lang.reflect.AnnotatedElement;
-import java.lang.reflect.Method;
-import java.util.Map;
-
-/**
- * The entry point to the reflection layer (a.k.a. the X* layer).
- *
- * @author Paolo Perrotta
- * @author Davide Marchignoli
- */
-public interface ReflectionManager {
-
-	public <T> XClass toXClass(Class<T> clazz);
-
-	public Class toClass(XClass xClazz);
-
-	public Method toMethod(XMethod method);
-
-	public <T> XClass classForName(String name, Class<T> caller) throws ClassNotFoundException;
-
-	public XPackage packageForName(String packageName) throws ClassNotFoundException;
-
-	public <T> boolean equals(XClass class1, Class<T> class2);
-
-    public AnnotationReader buildAnnotationReader(AnnotatedElement annotatedElement);
-
-    public Map getDefaults();
-}

Copied: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/ReflectionManager.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/ReflectionManager.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/ReflectionManager.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/ReflectionManager.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,30 @@
+package org.hibernate.annotations.common.reflection;
+
+import java.lang.reflect.AnnotatedElement;
+import java.lang.reflect.Method;
+import java.util.Map;
+
+/**
+ * The entry point to the reflection layer (a.k.a. the X* layer).
+ *
+ * @author Paolo Perrotta
+ * @author Davide Marchignoli
+ */
+public interface ReflectionManager {
+
+	public <T> XClass toXClass(Class<T> clazz);
+
+	public Class toClass(XClass xClazz);
+
+	public Method toMethod(XMethod method);
+
+	public <T> XClass classForName(String name, Class<T> caller) throws ClassNotFoundException;
+
+	public XPackage packageForName(String packageName) throws ClassNotFoundException;
+
+	public <T> boolean equals(XClass class1, Class<T> class2);
+
+    public AnnotationReader buildAnnotationReader(AnnotatedElement annotatedElement);
+
+    public Map getDefaults();
+}

Deleted: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/ReflectionUtil.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/ReflectionUtil.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/ReflectionUtil.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,36 +0,0 @@
-package org.hibernate.annotations.common.reflection;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.lang.reflect.Type;
-
-import org.hibernate.annotations.common.reflection.java.generics.TypeUtils;
-
-/**
- * @author Paolo Perrotta
- */
-public class ReflectionUtil {
-
-    public static boolean isProperty(Method m, Type boundType, Filter filter) {
-    	return ReflectionUtil.isPropertyType( boundType )
-    			&& !m.isSynthetic()
-    			&& !m.isBridge()
-    			&& ( filter.returnStatic() || !Modifier.isStatic( m.getModifiers() ) )
-    			&& m.getParameterTypes().length == 0
-    			&& ( m.getName().startsWith( "get" ) || m.getName().startsWith( "is" ) );
-    	// TODO should we use stronger checking on the naming of getters/setters, or just leave this to the validator?
-    }
-
-    public static boolean isProperty(Field f, Type boundType, Filter filter) {
-    	return ( filter.returnStatic() || ! Modifier.isStatic( f.getModifiers() ) )
-    			&& ( filter.returnTransient() || ! Modifier.isTransient( f.getModifiers() ) )
-                && !f.isSynthetic()
-                && ReflectionUtil.isPropertyType( boundType );
-    }
-
-    private static boolean isPropertyType(Type type) {
-    //		return TypeUtils.isArray( type ) || TypeUtils.isCollection( type ) || ( TypeUtils.isBase( type ) && ! TypeUtils.isVoid( type ) );
-    		return !TypeUtils.isVoid( type );
-    	}
-}

Copied: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/ReflectionUtil.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/ReflectionUtil.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/ReflectionUtil.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/ReflectionUtil.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,36 @@
+package org.hibernate.annotations.common.reflection;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.lang.reflect.Type;
+
+import org.hibernate.annotations.common.reflection.java.generics.TypeUtils;
+
+/**
+ * @author Paolo Perrotta
+ */
+public class ReflectionUtil {
+
+    public static boolean isProperty(Method m, Type boundType, Filter filter) {
+    	return ReflectionUtil.isPropertyType( boundType )
+    			&& !m.isSynthetic()
+    			&& !m.isBridge()
+    			&& ( filter.returnStatic() || !Modifier.isStatic( m.getModifiers() ) )
+    			&& m.getParameterTypes().length == 0
+    			&& ( m.getName().startsWith( "get" ) || m.getName().startsWith( "is" ) );
+    	// TODO should we use stronger checking on the naming of getters/setters, or just leave this to the validator?
+    }
+
+    public static boolean isProperty(Field f, Type boundType, Filter filter) {
+    	return ( filter.returnStatic() || ! Modifier.isStatic( f.getModifiers() ) )
+    			&& ( filter.returnTransient() || ! Modifier.isTransient( f.getModifiers() ) )
+                && !f.isSynthetic()
+                && ReflectionUtil.isPropertyType( boundType );
+    }
+
+    private static boolean isPropertyType(Type type) {
+    //		return TypeUtils.isArray( type ) || TypeUtils.isCollection( type ) || ( TypeUtils.isBase( type ) && ! TypeUtils.isVoid( type ) );
+    		return !TypeUtils.isVoid( type );
+    	}
+}

Deleted: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/XAnnotatedElement.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/XAnnotatedElement.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/XAnnotatedElement.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,22 +0,0 @@
-package org.hibernate.annotations.common.reflection;
-
-import java.lang.annotation.Annotation;
-
-/**
- * @author Paolo Perrotta
- * @author Davide Marchignoli
- */
-public interface XAnnotatedElement {
-
-	<T extends Annotation> T getAnnotation(Class<T> annotationType);
-
-	<T extends Annotation> boolean isAnnotationPresent(Class<T> annotationType);
-
-	Annotation[] getAnnotations();
-
-	/**
-	 * Returns true if the underlying artefact
-	 * is the same
-	 */
-	boolean equals(Object x);
-}

Copied: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/XAnnotatedElement.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/XAnnotatedElement.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/XAnnotatedElement.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/XAnnotatedElement.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,22 @@
+package org.hibernate.annotations.common.reflection;
+
+import java.lang.annotation.Annotation;
+
+/**
+ * @author Paolo Perrotta
+ * @author Davide Marchignoli
+ */
+public interface XAnnotatedElement {
+
+	<T extends Annotation> T getAnnotation(Class<T> annotationType);
+
+	<T extends Annotation> boolean isAnnotationPresent(Class<T> annotationType);
+
+	Annotation[] getAnnotations();
+
+	/**
+	 * Returns true if the underlying artefact
+	 * is the same
+	 */
+	boolean equals(Object x);
+}

Deleted: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/XClass.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/XClass.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/XClass.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,58 +0,0 @@
-package org.hibernate.annotations.common.reflection;
-
-import java.util.List;
-
-/**
- * @author Paolo Perrotta
- * @author Davide Marchignoli
- */
-public interface XClass extends XAnnotatedElement {
-
-	public static final String ACCESS_PROPERTY = "property";
-	public static final String ACCESS_FIELD = "field";
-
-	static final Filter DEFAULT_FILTER = new Filter() {
-
-		public boolean returnStatic() {
-			return false;
-		}
-
-		public boolean returnTransient() {
-			return false;
-		}
-	};
-
-	String getName();
-
-	/**
-	 * @see Class#getSuperclass()
-	 */
-	XClass getSuperclass();
-
-	/**
-	 * @see Class#getInterfaces()
-	 */
-	XClass[] getInterfaces();
-
-	/**
-	 * see Class#isInterface()
-	 */
-	boolean isInterface();
-
-	boolean isAbstract();
-
-	boolean isPrimitive();
-
-	boolean isEnum();
-
-	boolean isAssignableFrom(XClass c);
-
-	List<XProperty> getDeclaredProperties(String accessType);
-
-	List<XProperty> getDeclaredProperties(String accessType, Filter filter);
-
-	/**
-	 * Returns the <tt>Method</tt>s defined by this class.
-	 */
-	List<XMethod> getDeclaredMethods();
-}

Copied: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/XClass.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/XClass.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/XClass.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/XClass.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,58 @@
+package org.hibernate.annotations.common.reflection;
+
+import java.util.List;
+
+/**
+ * @author Paolo Perrotta
+ * @author Davide Marchignoli
+ */
+public interface XClass extends XAnnotatedElement {
+
+	public static final String ACCESS_PROPERTY = "property";
+	public static final String ACCESS_FIELD = "field";
+
+	static final Filter DEFAULT_FILTER = new Filter() {
+
+		public boolean returnStatic() {
+			return false;
+		}
+
+		public boolean returnTransient() {
+			return false;
+		}
+	};
+
+	String getName();
+
+	/**
+	 * @see Class#getSuperclass()
+	 */
+	XClass getSuperclass();
+
+	/**
+	 * @see Class#getInterfaces()
+	 */
+	XClass[] getInterfaces();
+
+	/**
+	 * see Class#isInterface()
+	 */
+	boolean isInterface();
+
+	boolean isAbstract();
+
+	boolean isPrimitive();
+
+	boolean isEnum();
+
+	boolean isAssignableFrom(XClass c);
+
+	List<XProperty> getDeclaredProperties(String accessType);
+
+	List<XProperty> getDeclaredProperties(String accessType, Filter filter);
+
+	/**
+	 * Returns the <tt>Method</tt>s defined by this class.
+	 */
+	List<XMethod> getDeclaredMethods();
+}

Deleted: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/XMember.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/XMember.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/XMember.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,56 +0,0 @@
-//$Id$
-package org.hibernate.annotations.common.reflection;
-
-import java.util.Collection;
-
-/**
- * @author Emmanuel Bernard
- */
-public abstract interface XMember extends XAnnotatedElement {
-
-	String getName();
-
-	boolean isCollection();
-
-	boolean isArray();
-
-	/**
-	 * The collection class for collections, null for others.
-	 */
-	Class<? extends Collection> getCollectionClass();
-
-	// TODO We should probably try to reduce the following three methods to two.
-	// the last one is particularly offensive
-
-	/**
-	 * This property's XClass.
-	 */
-	XClass getType();
-
-	/**
-	 * This property's type for simple properties, the type of its elements for arrays and collections.
-	 */
-	XClass getElementClass();
-
-	/**
-	 * The type of this property's elements for arrays, the type of the property itself for everything else.
-	 */
-	XClass getClassOrElementClass();
-
-	/**
-	 * The type of this map's key, or null for anything that is not a map.
-	 */
-	XClass getMapKey();
-
-	/**
-	 * Same modifiers as java.lang.Member#getModifiers()
-	 */
-	int getModifiers();
-
-	//this breaks the Java reflect hierarchy, since accessible belongs to AccessibleObject
-	void setAccessible(boolean accessible);
-
-	public Object invoke(Object target, Object... parameters);
-
-	boolean isTypeResolved();
-}

Copied: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/XMember.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/XMember.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/XMember.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/XMember.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,56 @@
+//$Id$
+package org.hibernate.annotations.common.reflection;
+
+import java.util.Collection;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public abstract interface XMember extends XAnnotatedElement {
+
+	String getName();
+
+	boolean isCollection();
+
+	boolean isArray();
+
+	/**
+	 * The collection class for collections, null for others.
+	 */
+	Class<? extends Collection> getCollectionClass();
+
+	// TODO We should probably try to reduce the following three methods to two.
+	// the last one is particularly offensive
+
+	/**
+	 * This property's XClass.
+	 */
+	XClass getType();
+
+	/**
+	 * This property's type for simple properties, the type of its elements for arrays and collections.
+	 */
+	XClass getElementClass();
+
+	/**
+	 * The type of this property's elements for arrays, the type of the property itself for everything else.
+	 */
+	XClass getClassOrElementClass();
+
+	/**
+	 * The type of this map's key, or null for anything that is not a map.
+	 */
+	XClass getMapKey();
+
+	/**
+	 * Same modifiers as java.lang.Member#getModifiers()
+	 */
+	int getModifiers();
+
+	//this breaks the Java reflect hierarchy, since accessible belongs to AccessibleObject
+	void setAccessible(boolean accessible);
+
+	public Object invoke(Object target, Object... parameters);
+
+	boolean isTypeResolved();
+}

Deleted: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/XMethod.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/XMethod.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/XMethod.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,14 +0,0 @@
-//$Id$
-package org.hibernate.annotations.common.reflection;
-
-/**
- * Represent an invokable method
- * <p/>
- * The underlying layer does not guaranty that xProperty == xMethod
- * if the underlying artefact is the same
- * However xProperty.equals(xMethod) is supposed to return true
- *
- * @author Emmanuel Bernard
- */
-public interface XMethod extends XMember {
-}

Copied: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/XMethod.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/XMethod.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/XMethod.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/XMethod.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,14 @@
+//$Id$
+package org.hibernate.annotations.common.reflection;
+
+/**
+ * Represent an invokable method
+ * <p/>
+ * The underlying layer does not guaranty that xProperty == xMethod
+ * if the underlying artefact is the same
+ * However xProperty.equals(xMethod) is supposed to return true
+ *
+ * @author Emmanuel Bernard
+ */
+public interface XMethod extends XMember {
+}

Deleted: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/XPackage.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/XPackage.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/XPackage.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,10 +0,0 @@
-package org.hibernate.annotations.common.reflection;
-
-/**
- * @author Paolo Perrotta
- * @author Davide Marchignoli
- */
-public interface XPackage extends XAnnotatedElement {
-
-	String getName();
-}

Copied: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/XPackage.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/XPackage.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/XPackage.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/XPackage.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,10 @@
+package org.hibernate.annotations.common.reflection;
+
+/**
+ * @author Paolo Perrotta
+ * @author Davide Marchignoli
+ */
+public interface XPackage extends XAnnotatedElement {
+
+	String getName();
+}

Deleted: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/XProperty.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/XProperty.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/XProperty.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,21 +0,0 @@
-package org.hibernate.annotations.common.reflection;
-
-/**
- * A member which actually is a property (as per the JavaBean spec)
- * Note that the same underlying artefact can be represented as both
- * XProperty and XMethod
- * The underlying layer does not guaranty that xProperty == xMethod
- * if the underlying artefact is the same
- * However xProperty.equals(xMethod) is supposed to return true
- *
- * @author Paolo Perrotta
- * @author Davide Marchignoli
- * @author Emmanuel Bernard
- */
-public interface XProperty extends XMember {
-
-	/**
-	 * Unqualify the getter name
-	 */
-	String getName();
-}

Copied: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/XProperty.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/XProperty.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/XProperty.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/XProperty.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,21 @@
+package org.hibernate.annotations.common.reflection;
+
+/**
+ * A member which actually is a property (as per the JavaBean spec)
+ * Note that the same underlying artefact can be represented as both
+ * XProperty and XMethod
+ * The underlying layer does not guaranty that xProperty == xMethod
+ * if the underlying artefact is the same
+ * However xProperty.equals(xMethod) is supposed to return true
+ *
+ * @author Paolo Perrotta
+ * @author Davide Marchignoli
+ * @author Emmanuel Bernard
+ */
+public interface XProperty extends XMember {
+
+	/**
+	 * Unqualify the getter name
+	 */
+	String getName();
+}

Copied: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java)

Deleted: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaAnnotationReader.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaAnnotationReader.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaAnnotationReader.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,33 +0,0 @@
-package org.hibernate.annotations.common.reflection.java;
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.AnnotatedElement;
-
-import org.hibernate.annotations.common.reflection.AnnotationReader;
-
-/**
- * Reads standard Java annotations.
- *
- * @author Paolo Perrotta
- * @author Davide Marchignoli
- */
-class JavaAnnotationReader implements AnnotationReader {
-
-	protected final AnnotatedElement element;
-
-	public JavaAnnotationReader(AnnotatedElement el) {
-		this.element = el;
-	}
-
-	public <T extends Annotation> T getAnnotation(Class<T> annotationType) {
-		return element.getAnnotation( annotationType );
-	}
-
-	public <T extends Annotation> boolean isAnnotationPresent(Class<T> annotationType) {
-		return element.isAnnotationPresent( annotationType );
-	}
-
-	public Annotation[] getAnnotations() {
-		return element.getAnnotations();
-	}
-}

Copied: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaAnnotationReader.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaAnnotationReader.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaAnnotationReader.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaAnnotationReader.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,33 @@
+package org.hibernate.annotations.common.reflection.java;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.AnnotatedElement;
+
+import org.hibernate.annotations.common.reflection.AnnotationReader;
+
+/**
+ * Reads standard Java annotations.
+ *
+ * @author Paolo Perrotta
+ * @author Davide Marchignoli
+ */
+class JavaAnnotationReader implements AnnotationReader {
+
+	protected final AnnotatedElement element;
+
+	public JavaAnnotationReader(AnnotatedElement el) {
+		this.element = el;
+	}
+
+	public <T extends Annotation> T getAnnotation(Class<T> annotationType) {
+		return element.getAnnotation( annotationType );
+	}
+
+	public <T extends Annotation> boolean isAnnotationPresent(Class<T> annotationType) {
+		return element.isAnnotationPresent( annotationType );
+	}
+
+	public Annotation[] getAnnotations() {
+		return element.getAnnotations();
+	}
+}

Deleted: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaReflectionManager.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaReflectionManager.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaReflectionManager.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,185 +0,0 @@
-package org.hibernate.annotations.common.reflection.java;
-
-import java.lang.reflect.AnnotatedElement;
-import java.lang.reflect.Member;
-import java.lang.reflect.Method;
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.hibernate.annotations.common.reflection.AnnotationReader;
-import org.hibernate.annotations.common.reflection.ReflectionManager;
-import org.hibernate.annotations.common.reflection.XClass;
-import org.hibernate.annotations.common.reflection.XMethod;
-import org.hibernate.annotations.common.reflection.XPackage;
-import org.hibernate.annotations.common.reflection.XProperty;
-import org.hibernate.annotations.common.reflection.java.generics.IdentityTypeEnvironment;
-import org.hibernate.annotations.common.reflection.java.generics.TypeEnvironment;
-import org.hibernate.annotations.common.reflection.java.generics.TypeEnvironmentFactory;
-import org.hibernate.annotations.common.reflection.java.generics.TypeSwitch;
-import org.hibernate.annotations.common.reflection.java.generics.TypeUtils;
-import org.hibernate.annotations.common.util.ReflectHelper;
-
-/**
- * The factory for all the objects in this package.
- *
- * @author Paolo Perrotta
- * @author Davide Marchignoli
- * @author Emmanuel Bernard
- */
-public class JavaReflectionManager implements ReflectionManager {
-
-    private static class TypeKey extends Pair<Type, TypeEnvironment> {
-		TypeKey(Type t, TypeEnvironment context) {
-			super( t, context );
-		}
-	}
-
-	private static class MemberKey extends Pair<Member, TypeEnvironment> {
-		MemberKey(Member member, TypeEnvironment context) {
-			super( member, context );
-		}
-	}
-
-	private final Map<TypeKey, JavaXClass> xClasses = new HashMap<TypeKey, JavaXClass>();
-
-	private final Map<Package, JavaXPackage> packagesToXPackages = new HashMap<Package, JavaXPackage>();
-
-	private final Map<MemberKey, JavaXProperty> xProperties = new HashMap<MemberKey, JavaXProperty>();
-
-	private final Map<MemberKey, JavaXMethod> xMethods = new HashMap<MemberKey, JavaXMethod>();
-
-	private final TypeEnvironmentFactory typeEnvs = new TypeEnvironmentFactory();
-
-	public XClass toXClass(Class clazz) {
-		return toXClass( clazz, IdentityTypeEnvironment.INSTANCE );
-	}
-
-	public Class toClass(XClass xClazz) {
-		if ( ! ( xClazz instanceof JavaXClass ) ) {
-			throw new IllegalArgumentException( "XClass not coming from this ReflectionManager implementation" );
-		}
-		return (Class) ( (JavaXClass) xClazz ).toAnnotatedElement();
-	}
-
-	public Method toMethod(XMethod xMethod) {
-		if ( ! ( xMethod instanceof JavaXMethod ) ) {
-			throw new IllegalArgumentException( "XMethod not coming from this ReflectionManager implementation" );
-		}
-		return (Method) ( (JavaXAnnotatedElement) xMethod ).toAnnotatedElement();
-	}
-
-	public XClass classForName(String name, Class caller) throws ClassNotFoundException {
-		return toXClass( ReflectHelper.classForName( name, caller ) );
-	}
-
-	public XPackage packageForName(String packageName) throws ClassNotFoundException {
-		return getXAnnotatedElement( ReflectHelper.classForName( packageName + ".package-info" ).getPackage() );
-	}
-
-	XClass toXClass(Type t, final TypeEnvironment context) {
-		return new TypeSwitch<XClass>() {
-			@Override
-			public XClass caseClass(Class classType) {
-				TypeKey key = new TypeKey( classType, context );
-				JavaXClass result = xClasses.get( key );
-				if ( result == null ) {
-					result = new JavaXClass( classType, context, JavaReflectionManager.this );
-					xClasses.put( key, result );
-				}
-				return result;
-			}
-
-			@Override
-			public XClass caseParameterizedType(ParameterizedType parameterizedType) {
-				return toXClass( parameterizedType.getRawType(),
-						typeEnvs.getEnvironment( parameterizedType, context )
-				);
-			}
-		}.doSwitch( context.bind( t ) );
-	}
-
-	XPackage getXAnnotatedElement(Package pkg) {
-		JavaXPackage xPackage = packagesToXPackages.get( pkg );
-		if ( xPackage == null ) {
-			xPackage = new JavaXPackage( pkg, this );
-			packagesToXPackages.put( pkg, xPackage );
-		}
-		return xPackage;
-	}
-
-	XProperty getXProperty(Member member, TypeEnvironment context) {
-		MemberKey key = new MemberKey( member, context );
-        //FIXME get is as expensive as create most time spent in hashCode and equals
-        JavaXProperty xProperty = xProperties.get( key );
-		if ( xProperty == null ) {
-			xProperty = JavaXProperty.create( member, context, this );
-			xProperties.put( key, xProperty );
-		}
-		return xProperty;
-	}
-
-	XMethod getXMethod(Member member, TypeEnvironment context) {
-		MemberKey key = new MemberKey( member, context );
-        //FIXME get is as expensive as create most time spent in hashCode and equals
-        JavaXMethod xMethod = xMethods.get( key );
-		if ( xMethod == null ) {
-			xMethod = JavaXMethod.create( member, context, this );
-			xMethods.put( key, xMethod );
-		}
-		return xMethod;
-	}
-
-	TypeEnvironment getTypeEnvironment(final Type t) {
-		return new TypeSwitch<TypeEnvironment>() {
-			@Override
-			public TypeEnvironment caseClass(Class classType) {
-				return typeEnvs.getEnvironment( classType );
-			}
-
-			@Override
-			public TypeEnvironment caseParameterizedType(ParameterizedType parameterizedType) {
-				return typeEnvs.getEnvironment( parameterizedType );
-			}
-
-			@Override
-			public TypeEnvironment defaultCase(Type type) {
-				return IdentityTypeEnvironment.INSTANCE;
-			}
-		}.doSwitch( t );
-	}
-
-	public JavaXType toXType(TypeEnvironment context, Type propType) {
-		Type boundType = toApproximatingEnvironment( context ).bind( propType );
-		if ( TypeUtils.isArray( boundType ) ) {
-			return new JavaXArrayType( propType, context, this );
-		}
-		if ( TypeUtils.isCollection( boundType ) ) {
-			return new JavaXCollectionType( propType, context, this );
-		}
-		if ( TypeUtils.isSimple( boundType ) ) {
-			return new JavaXSimpleType( propType, context, this );
-		}
-		throw new IllegalArgumentException( "No PropertyTypeExtractor available for type void " );
-	}
-
-	public boolean equals(XClass class1, Class class2) {
-		if ( class1 == null ) {
-			return class2 == null;
-		}
-		return ( (JavaXClass) class1 ).toClass().equals( class2 );
-	}
-
-	public TypeEnvironment toApproximatingEnvironment(TypeEnvironment context) {
-		return typeEnvs.toApproximatingEnvironment( context );
-	}
-
-    public AnnotationReader buildAnnotationReader(AnnotatedElement annotatedElement) {
-        return new JavaAnnotationReader(annotatedElement);
-    }
-    
-    public Map getDefaults() {
-        return new HashMap();
-    }
-}

Copied: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaReflectionManager.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaReflectionManager.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaReflectionManager.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaReflectionManager.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,185 @@
+package org.hibernate.annotations.common.reflection.java;
+
+import java.lang.reflect.AnnotatedElement;
+import java.lang.reflect.Member;
+import java.lang.reflect.Method;
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.hibernate.annotations.common.reflection.AnnotationReader;
+import org.hibernate.annotations.common.reflection.ReflectionManager;
+import org.hibernate.annotations.common.reflection.XClass;
+import org.hibernate.annotations.common.reflection.XMethod;
+import org.hibernate.annotations.common.reflection.XPackage;
+import org.hibernate.annotations.common.reflection.XProperty;
+import org.hibernate.annotations.common.reflection.java.generics.IdentityTypeEnvironment;
+import org.hibernate.annotations.common.reflection.java.generics.TypeEnvironment;
+import org.hibernate.annotations.common.reflection.java.generics.TypeEnvironmentFactory;
+import org.hibernate.annotations.common.reflection.java.generics.TypeSwitch;
+import org.hibernate.annotations.common.reflection.java.generics.TypeUtils;
+import org.hibernate.annotations.common.util.ReflectHelper;
+
+/**
+ * The factory for all the objects in this package.
+ *
+ * @author Paolo Perrotta
+ * @author Davide Marchignoli
+ * @author Emmanuel Bernard
+ */
+public class JavaReflectionManager implements ReflectionManager {
+
+    private static class TypeKey extends Pair<Type, TypeEnvironment> {
+		TypeKey(Type t, TypeEnvironment context) {
+			super( t, context );
+		}
+	}
+
+	private static class MemberKey extends Pair<Member, TypeEnvironment> {
+		MemberKey(Member member, TypeEnvironment context) {
+			super( member, context );
+		}
+	}
+
+	private final Map<TypeKey, JavaXClass> xClasses = new HashMap<TypeKey, JavaXClass>();
+
+	private final Map<Package, JavaXPackage> packagesToXPackages = new HashMap<Package, JavaXPackage>();
+
+	private final Map<MemberKey, JavaXProperty> xProperties = new HashMap<MemberKey, JavaXProperty>();
+
+	private final Map<MemberKey, JavaXMethod> xMethods = new HashMap<MemberKey, JavaXMethod>();
+
+	private final TypeEnvironmentFactory typeEnvs = new TypeEnvironmentFactory();
+
+	public XClass toXClass(Class clazz) {
+		return toXClass( clazz, IdentityTypeEnvironment.INSTANCE );
+	}
+
+	public Class toClass(XClass xClazz) {
+		if ( ! ( xClazz instanceof JavaXClass ) ) {
+			throw new IllegalArgumentException( "XClass not coming from this ReflectionManager implementation" );
+		}
+		return (Class) ( (JavaXClass) xClazz ).toAnnotatedElement();
+	}
+
+	public Method toMethod(XMethod xMethod) {
+		if ( ! ( xMethod instanceof JavaXMethod ) ) {
+			throw new IllegalArgumentException( "XMethod not coming from this ReflectionManager implementation" );
+		}
+		return (Method) ( (JavaXAnnotatedElement) xMethod ).toAnnotatedElement();
+	}
+
+	public XClass classForName(String name, Class caller) throws ClassNotFoundException {
+		return toXClass( ReflectHelper.classForName( name, caller ) );
+	}
+
+	public XPackage packageForName(String packageName) throws ClassNotFoundException {
+		return getXAnnotatedElement( ReflectHelper.classForName( packageName + ".package-info" ).getPackage() );
+	}
+
+	XClass toXClass(Type t, final TypeEnvironment context) {
+		return new TypeSwitch<XClass>() {
+			@Override
+			public XClass caseClass(Class classType) {
+				TypeKey key = new TypeKey( classType, context );
+				JavaXClass result = xClasses.get( key );
+				if ( result == null ) {
+					result = new JavaXClass( classType, context, JavaReflectionManager.this );
+					xClasses.put( key, result );
+				}
+				return result;
+			}
+
+			@Override
+			public XClass caseParameterizedType(ParameterizedType parameterizedType) {
+				return toXClass( parameterizedType.getRawType(),
+						typeEnvs.getEnvironment( parameterizedType, context )
+				);
+			}
+		}.doSwitch( context.bind( t ) );
+	}
+
+	XPackage getXAnnotatedElement(Package pkg) {
+		JavaXPackage xPackage = packagesToXPackages.get( pkg );
+		if ( xPackage == null ) {
+			xPackage = new JavaXPackage( pkg, this );
+			packagesToXPackages.put( pkg, xPackage );
+		}
+		return xPackage;
+	}
+
+	XProperty getXProperty(Member member, TypeEnvironment context) {
+		MemberKey key = new MemberKey( member, context );
+        //FIXME get is as expensive as create most time spent in hashCode and equals
+        JavaXProperty xProperty = xProperties.get( key );
+		if ( xProperty == null ) {
+			xProperty = JavaXProperty.create( member, context, this );
+			xProperties.put( key, xProperty );
+		}
+		return xProperty;
+	}
+
+	XMethod getXMethod(Member member, TypeEnvironment context) {
+		MemberKey key = new MemberKey( member, context );
+        //FIXME get is as expensive as create most time spent in hashCode and equals
+        JavaXMethod xMethod = xMethods.get( key );
+		if ( xMethod == null ) {
+			xMethod = JavaXMethod.create( member, context, this );
+			xMethods.put( key, xMethod );
+		}
+		return xMethod;
+	}
+
+	TypeEnvironment getTypeEnvironment(final Type t) {
+		return new TypeSwitch<TypeEnvironment>() {
+			@Override
+			public TypeEnvironment caseClass(Class classType) {
+				return typeEnvs.getEnvironment( classType );
+			}
+
+			@Override
+			public TypeEnvironment caseParameterizedType(ParameterizedType parameterizedType) {
+				return typeEnvs.getEnvironment( parameterizedType );
+			}
+
+			@Override
+			public TypeEnvironment defaultCase(Type type) {
+				return IdentityTypeEnvironment.INSTANCE;
+			}
+		}.doSwitch( t );
+	}
+
+	public JavaXType toXType(TypeEnvironment context, Type propType) {
+		Type boundType = toApproximatingEnvironment( context ).bind( propType );
+		if ( TypeUtils.isArray( boundType ) ) {
+			return new JavaXArrayType( propType, context, this );
+		}
+		if ( TypeUtils.isCollection( boundType ) ) {
+			return new JavaXCollectionType( propType, context, this );
+		}
+		if ( TypeUtils.isSimple( boundType ) ) {
+			return new JavaXSimpleType( propType, context, this );
+		}
+		throw new IllegalArgumentException( "No PropertyTypeExtractor available for type void " );
+	}
+
+	public boolean equals(XClass class1, Class class2) {
+		if ( class1 == null ) {
+			return class2 == null;
+		}
+		return ( (JavaXClass) class1 ).toClass().equals( class2 );
+	}
+
+	public TypeEnvironment toApproximatingEnvironment(TypeEnvironment context) {
+		return typeEnvs.toApproximatingEnvironment( context );
+	}
+
+    public AnnotationReader buildAnnotationReader(AnnotatedElement annotatedElement) {
+        return new JavaAnnotationReader(annotatedElement);
+    }
+    
+    public Map getDefaults() {
+        return new HashMap();
+    }
+}

Deleted: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXAnnotatedElement.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXAnnotatedElement.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXAnnotatedElement.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,71 +0,0 @@
-package org.hibernate.annotations.common.reflection.java;
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.AnnotatedElement;
-
-import org.hibernate.annotations.common.reflection.AnnotationReader;
-import org.hibernate.annotations.common.reflection.XAnnotatedElement;
-
-/**
- * @author Paolo Perrotta
- * @author Davide Marchignoli
- */
-abstract class JavaXAnnotatedElement implements XAnnotatedElement {
-
-	// responsible for extracting annotations
-	private AnnotationReader annotationReader;
-
-	private final JavaReflectionManager factory;
-
-	private final AnnotatedElement annotatedElement;
-
-	public JavaXAnnotatedElement(AnnotatedElement annotatedElement, JavaReflectionManager factory) {
-        this.factory = factory;
-		this.annotatedElement = annotatedElement;
-	}
-
-	protected JavaReflectionManager getFactory() {
-		return factory;
-	}
-
-	private AnnotationReader getAnnotationReader() {
-        if (annotationReader == null) {
-            annotationReader = factory.buildAnnotationReader(annotatedElement);
-        }
-        return annotationReader;
-	}
-
-	public <T extends Annotation> T getAnnotation(Class<T> annotationType) {
-		return getAnnotationReader().getAnnotation( annotationType );
-	}
-
-	public <T extends Annotation> boolean isAnnotationPresent(Class<T> annotationType) {
-		return getAnnotationReader().isAnnotationPresent( annotationType );
-	}
-
-	public Annotation[] getAnnotations() {
-		return getAnnotationReader().getAnnotations();
-	}
-
-	AnnotatedElement toAnnotatedElement() {
-		return annotatedElement;
-	}
-
-	@Override
-	public boolean equals(Object obj) {
-		if ( ! ( obj instanceof JavaXAnnotatedElement ) ) return false;
-		JavaXAnnotatedElement other = (JavaXAnnotatedElement) obj;
-		//FIXME yuk this defeat the type environment
-		return annotatedElement.equals( other.toAnnotatedElement() );
-	}
-
-	@Override
-	public int hashCode() {
-		return annotatedElement.hashCode();
-	}
-
-	@Override
-	public String toString() {
-		return annotatedElement.toString();
-	}
-}

Copied: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXAnnotatedElement.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXAnnotatedElement.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXAnnotatedElement.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXAnnotatedElement.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,71 @@
+package org.hibernate.annotations.common.reflection.java;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.AnnotatedElement;
+
+import org.hibernate.annotations.common.reflection.AnnotationReader;
+import org.hibernate.annotations.common.reflection.XAnnotatedElement;
+
+/**
+ * @author Paolo Perrotta
+ * @author Davide Marchignoli
+ */
+abstract class JavaXAnnotatedElement implements XAnnotatedElement {
+
+	// responsible for extracting annotations
+	private AnnotationReader annotationReader;
+
+	private final JavaReflectionManager factory;
+
+	private final AnnotatedElement annotatedElement;
+
+	public JavaXAnnotatedElement(AnnotatedElement annotatedElement, JavaReflectionManager factory) {
+        this.factory = factory;
+		this.annotatedElement = annotatedElement;
+	}
+
+	protected JavaReflectionManager getFactory() {
+		return factory;
+	}
+
+	private AnnotationReader getAnnotationReader() {
+        if (annotationReader == null) {
+            annotationReader = factory.buildAnnotationReader(annotatedElement);
+        }
+        return annotationReader;
+	}
+
+	public <T extends Annotation> T getAnnotation(Class<T> annotationType) {
+		return getAnnotationReader().getAnnotation( annotationType );
+	}
+
+	public <T extends Annotation> boolean isAnnotationPresent(Class<T> annotationType) {
+		return getAnnotationReader().isAnnotationPresent( annotationType );
+	}
+
+	public Annotation[] getAnnotations() {
+		return getAnnotationReader().getAnnotations();
+	}
+
+	AnnotatedElement toAnnotatedElement() {
+		return annotatedElement;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if ( ! ( obj instanceof JavaXAnnotatedElement ) ) return false;
+		JavaXAnnotatedElement other = (JavaXAnnotatedElement) obj;
+		//FIXME yuk this defeat the type environment
+		return annotatedElement.equals( other.toAnnotatedElement() );
+	}
+
+	@Override
+	public int hashCode() {
+		return annotatedElement.hashCode();
+	}
+
+	@Override
+	public String toString() {
+		return annotatedElement.toString();
+	}
+}

Deleted: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXArrayType.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXArrayType.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXArrayType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,77 +0,0 @@
-package org.hibernate.annotations.common.reflection.java;
-
-import java.lang.reflect.Array;
-import java.lang.reflect.GenericArrayType;
-import java.lang.reflect.Type;
-import java.util.Collection;
-
-import org.hibernate.annotations.common.reflection.XClass;
-import org.hibernate.annotations.common.reflection.java.generics.TypeEnvironment;
-import org.hibernate.annotations.common.reflection.java.generics.TypeSwitch;
-
-/**
- * @author Emmanuel Bernard
- * @author Paolo Perrotta
- */
-class JavaXArrayType extends JavaXType {
-
-	public JavaXArrayType(Type type, TypeEnvironment context, JavaReflectionManager factory) {
-		super( type, context, factory );
-	}
-
-	public boolean isArray() {
-		return true;
-	}
-
-	public boolean isCollection() {
-		return false;
-	}
-
-	public XClass getElementClass() {
-		return toXClass( getElementType() );
-	}
-
-	private Type getElementType() {
-		//TODO make it a static class for faster performance?
-		return new TypeSwitch<Type>() {
-			@Override
-			public Type caseClass(Class classType) {
-				return classType.getComponentType();
-			}
-
-			@Override
-			public Type caseGenericArrayType(GenericArrayType genericArrayType) {
-				return genericArrayType.getGenericComponentType();
-			}
-
-			@Override
-			public Type defaultCase(Type t) {
-				throw new IllegalArgumentException( t + " is not an array type" );
-			}
-		}.doSwitch( approximate() );
-	}
-
-	public XClass getClassOrElementClass() {
-		return getElementClass();
-	}
-
-	public Class<? extends Collection> getCollectionClass() {
-		return null;
-	}
-
-	public XClass getMapKey() {
-		return null;
-	}
-
-	public XClass getType() {
-		Type boundType = getElementType();
-		if ( boundType instanceof Class ) {
-			boundType = arrayTypeOf( (Class) boundType );
-		}
-		return toXClass( boundType );
-	}
-
-	private Class<? extends Object> arrayTypeOf(Class componentType) {
-		return Array.newInstance( componentType, 0 ).getClass();
-	}
-}
\ No newline at end of file

Copied: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXArrayType.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXArrayType.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXArrayType.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXArrayType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,77 @@
+package org.hibernate.annotations.common.reflection.java;
+
+import java.lang.reflect.Array;
+import java.lang.reflect.GenericArrayType;
+import java.lang.reflect.Type;
+import java.util.Collection;
+
+import org.hibernate.annotations.common.reflection.XClass;
+import org.hibernate.annotations.common.reflection.java.generics.TypeEnvironment;
+import org.hibernate.annotations.common.reflection.java.generics.TypeSwitch;
+
+/**
+ * @author Emmanuel Bernard
+ * @author Paolo Perrotta
+ */
+class JavaXArrayType extends JavaXType {
+
+	public JavaXArrayType(Type type, TypeEnvironment context, JavaReflectionManager factory) {
+		super( type, context, factory );
+	}
+
+	public boolean isArray() {
+		return true;
+	}
+
+	public boolean isCollection() {
+		return false;
+	}
+
+	public XClass getElementClass() {
+		return toXClass( getElementType() );
+	}
+
+	private Type getElementType() {
+		//TODO make it a static class for faster performance?
+		return new TypeSwitch<Type>() {
+			@Override
+			public Type caseClass(Class classType) {
+				return classType.getComponentType();
+			}
+
+			@Override
+			public Type caseGenericArrayType(GenericArrayType genericArrayType) {
+				return genericArrayType.getGenericComponentType();
+			}
+
+			@Override
+			public Type defaultCase(Type t) {
+				throw new IllegalArgumentException( t + " is not an array type" );
+			}
+		}.doSwitch( approximate() );
+	}
+
+	public XClass getClassOrElementClass() {
+		return getElementClass();
+	}
+
+	public Class<? extends Collection> getCollectionClass() {
+		return null;
+	}
+
+	public XClass getMapKey() {
+		return null;
+	}
+
+	public XClass getType() {
+		Type boundType = getElementType();
+		if ( boundType instanceof Class ) {
+			boundType = arrayTypeOf( (Class) boundType );
+		}
+		return toXClass( boundType );
+	}
+
+	private Class<? extends Object> arrayTypeOf(Class componentType) {
+		return Array.newInstance( componentType, 0 ).getClass();
+	}
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXClass.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXClass.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXClass.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,139 +0,0 @@
-package org.hibernate.annotations.common.reflection.java;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.util.LinkedList;
-import java.util.List;
-
-import org.hibernate.annotations.common.reflection.Filter;
-import org.hibernate.annotations.common.reflection.ReflectionUtil;
-import org.hibernate.annotations.common.reflection.XClass;
-import org.hibernate.annotations.common.reflection.XMethod;
-import org.hibernate.annotations.common.reflection.XProperty;
-import org.hibernate.annotations.common.reflection.java.generics.CompoundTypeEnvironment;
-import org.hibernate.annotations.common.reflection.java.generics.TypeEnvironment;
-
-/**
- * @author Paolo Perrotta
- * @author Davide Marchignoli
- */
-class JavaXClass extends JavaXAnnotatedElement implements XClass {
-
-	private final TypeEnvironment context;
-    private final Class clazz;
-
-    public JavaXClass(Class clazz, TypeEnvironment env, JavaReflectionManager factory) {
-		super( clazz, factory );
-        this.clazz = clazz; //optimization
-        this.context = env;
-	}
-
-	public String getName() {
-		return toClass().getName();
-	}
-
-	public XClass getSuperclass() {
-		return getFactory().toXClass( toClass().getSuperclass(),
-				CompoundTypeEnvironment.create(
-                        getTypeEnvironment(),
-                        getFactory().getTypeEnvironment( toClass() )
-				)
-		);
-	}
-
-	public XClass[] getInterfaces() {
-		Class[] classes = toClass().getInterfaces();
-		int length = classes.length;
-		XClass[] xClasses = new XClass[length];
-        if (length != 0) {
-            TypeEnvironment environment = CompoundTypeEnvironment.create(
-                    getTypeEnvironment(),
-                    getFactory().getTypeEnvironment( toClass() )
-                    );
-            for ( int index = 0; index < length ; index++ ) {
-                xClasses[index] = getFactory().toXClass( classes[index], environment );
-            }
-        }
-        return xClasses;
-	}
-
-	public boolean isInterface() {
-		return toClass().isInterface();
-	}
-
-	public boolean isAbstract() {
-		return Modifier.isAbstract( toClass().getModifiers() );
-	}
-
-	public boolean isPrimitive() {
-		return toClass().isPrimitive();
-	}
-
-	public boolean isEnum() {
-		return toClass().isEnum();
-	}
-
-	private List<XProperty> getDeclaredFieldProperties(Filter filter) {
-		List<XProperty> result = new LinkedList<XProperty>();
-		for ( Field f : toClass().getDeclaredFields() ) {
-			if ( ReflectionUtil.isProperty( f, getTypeEnvironment().bind( f.getGenericType() ), filter ) ) {
-				result.add( getFactory().getXProperty( f, getTypeEnvironment() ) );
-			}
-		}
-		return result;
-	}
-
-	private List<XProperty> getDeclaredMethodProperties(Filter filter) {
-		List<XProperty> result = new LinkedList<XProperty>();
-		for ( Method m : toClass().getDeclaredMethods() ) {
-			if ( ReflectionUtil.isProperty( m, getTypeEnvironment().bind( m.getGenericReturnType() ), filter ) ) {
-				result.add( getFactory().getXProperty( m, getTypeEnvironment() ) );
-			}
-		}
-		return result;
-	}
-
-	public List<XProperty> getDeclaredProperties(String accessType) {
-		return getDeclaredProperties( accessType, XClass.DEFAULT_FILTER );
-	}
-
-	public List<XProperty> getDeclaredProperties(String accessType, Filter filter) {
-		if ( accessType.equals( ACCESS_FIELD ) ) {
-			return getDeclaredFieldProperties( filter );
-		}
-		if ( accessType.equals( ACCESS_PROPERTY ) ) {
-			return getDeclaredMethodProperties( filter );
-		}
-		throw new IllegalArgumentException( "Unknown access type " + accessType );
-	}
-
-	public List<XMethod> getDeclaredMethods() {
-		List<XMethod> result = new LinkedList<XMethod>();
-		for ( Method m : toClass().getDeclaredMethods() ) {
-			result.add( getFactory().getXMethod( m, getTypeEnvironment() ) );
-		}
-		return result;
-	}
-
-	public Class<?> toClass() {
-		return clazz;
-	}
-
-	public boolean isAssignableFrom(XClass c) {
-		return toClass().isAssignableFrom( ( (JavaXClass) c ).toClass() );
-	}
-
-	boolean isArray() {
-		return toClass().isArray();
-	}
-
-	TypeEnvironment getTypeEnvironment() {
-		return context;
-	}
-    
-    @Override
-    public String toString() {
-        return getName();
-    }
-}
\ No newline at end of file

Copied: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXClass.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXClass.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXClass.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXClass.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,139 @@
+package org.hibernate.annotations.common.reflection.java;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.hibernate.annotations.common.reflection.Filter;
+import org.hibernate.annotations.common.reflection.ReflectionUtil;
+import org.hibernate.annotations.common.reflection.XClass;
+import org.hibernate.annotations.common.reflection.XMethod;
+import org.hibernate.annotations.common.reflection.XProperty;
+import org.hibernate.annotations.common.reflection.java.generics.CompoundTypeEnvironment;
+import org.hibernate.annotations.common.reflection.java.generics.TypeEnvironment;
+
+/**
+ * @author Paolo Perrotta
+ * @author Davide Marchignoli
+ */
+class JavaXClass extends JavaXAnnotatedElement implements XClass {
+
+	private final TypeEnvironment context;
+    private final Class clazz;
+
+    public JavaXClass(Class clazz, TypeEnvironment env, JavaReflectionManager factory) {
+		super( clazz, factory );
+        this.clazz = clazz; //optimization
+        this.context = env;
+	}
+
+	public String getName() {
+		return toClass().getName();
+	}
+
+	public XClass getSuperclass() {
+		return getFactory().toXClass( toClass().getSuperclass(),
+				CompoundTypeEnvironment.create(
+                        getTypeEnvironment(),
+                        getFactory().getTypeEnvironment( toClass() )
+				)
+		);
+	}
+
+	public XClass[] getInterfaces() {
+		Class[] classes = toClass().getInterfaces();
+		int length = classes.length;
+		XClass[] xClasses = new XClass[length];
+        if (length != 0) {
+            TypeEnvironment environment = CompoundTypeEnvironment.create(
+                    getTypeEnvironment(),
+                    getFactory().getTypeEnvironment( toClass() )
+                    );
+            for ( int index = 0; index < length ; index++ ) {
+                xClasses[index] = getFactory().toXClass( classes[index], environment );
+            }
+        }
+        return xClasses;
+	}
+
+	public boolean isInterface() {
+		return toClass().isInterface();
+	}
+
+	public boolean isAbstract() {
+		return Modifier.isAbstract( toClass().getModifiers() );
+	}
+
+	public boolean isPrimitive() {
+		return toClass().isPrimitive();
+	}
+
+	public boolean isEnum() {
+		return toClass().isEnum();
+	}
+
+	private List<XProperty> getDeclaredFieldProperties(Filter filter) {
+		List<XProperty> result = new LinkedList<XProperty>();
+		for ( Field f : toClass().getDeclaredFields() ) {
+			if ( ReflectionUtil.isProperty( f, getTypeEnvironment().bind( f.getGenericType() ), filter ) ) {
+				result.add( getFactory().getXProperty( f, getTypeEnvironment() ) );
+			}
+		}
+		return result;
+	}
+
+	private List<XProperty> getDeclaredMethodProperties(Filter filter) {
+		List<XProperty> result = new LinkedList<XProperty>();
+		for ( Method m : toClass().getDeclaredMethods() ) {
+			if ( ReflectionUtil.isProperty( m, getTypeEnvironment().bind( m.getGenericReturnType() ), filter ) ) {
+				result.add( getFactory().getXProperty( m, getTypeEnvironment() ) );
+			}
+		}
+		return result;
+	}
+
+	public List<XProperty> getDeclaredProperties(String accessType) {
+		return getDeclaredProperties( accessType, XClass.DEFAULT_FILTER );
+	}
+
+	public List<XProperty> getDeclaredProperties(String accessType, Filter filter) {
+		if ( accessType.equals( ACCESS_FIELD ) ) {
+			return getDeclaredFieldProperties( filter );
+		}
+		if ( accessType.equals( ACCESS_PROPERTY ) ) {
+			return getDeclaredMethodProperties( filter );
+		}
+		throw new IllegalArgumentException( "Unknown access type " + accessType );
+	}
+
+	public List<XMethod> getDeclaredMethods() {
+		List<XMethod> result = new LinkedList<XMethod>();
+		for ( Method m : toClass().getDeclaredMethods() ) {
+			result.add( getFactory().getXMethod( m, getTypeEnvironment() ) );
+		}
+		return result;
+	}
+
+	public Class<?> toClass() {
+		return clazz;
+	}
+
+	public boolean isAssignableFrom(XClass c) {
+		return toClass().isAssignableFrom( ( (JavaXClass) c ).toClass() );
+	}
+
+	boolean isArray() {
+		return toClass().isArray();
+	}
+
+	TypeEnvironment getTypeEnvironment() {
+		return context;
+	}
+    
+    @Override
+    public String toString() {
+        return getName();
+    }
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXCollectionType.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXCollectionType.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXCollectionType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,74 +0,0 @@
-package org.hibernate.annotations.common.reflection.java;
-
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-import java.util.Collection;
-import java.util.Map;
-import java.util.SortedMap;
-
-import org.hibernate.annotations.common.reflection.XClass;
-import org.hibernate.annotations.common.reflection.java.generics.TypeEnvironment;
-import org.hibernate.annotations.common.reflection.java.generics.TypeSwitch;
-import org.hibernate.annotations.common.reflection.java.generics.TypeUtils;
-
-/**
- * @author Emmanuel Bernard
- * @author Paolo Perrotta
- */
-class JavaXCollectionType extends JavaXType {
-
-	public JavaXCollectionType(Type type, TypeEnvironment context, JavaReflectionManager factory) {
-		super( type, context, factory );
-	}
-
-	public boolean isArray() {
-		return false;
-	}
-
-	public boolean isCollection() {
-		return true;
-	}
-
-	public XClass getElementClass() {
-		return new TypeSwitch<XClass>() {
-			@Override
-			public XClass caseParameterizedType(ParameterizedType parameterizedType) {
-				Type[] args = parameterizedType.getActualTypeArguments();
-				Type componentType;
-				Class<? extends Collection> collectionClass = getCollectionClass();
-				if ( collectionClass.isAssignableFrom( Map.class )
-						|| collectionClass.isAssignableFrom( SortedMap.class ) ) {
-					componentType = args[1];
-				}
-				else {
-					componentType = args[0];
-				}
-				return toXClass( componentType );
-			}
-		}.doSwitch( approximate() );
-	}
-
-	public XClass getMapKey() {
-		return new TypeSwitch<XClass>() {
-			@Override
-			public XClass caseParameterizedType(ParameterizedType parameterizedType) {
-				if ( getCollectionClass().isAssignableFrom( Map.class ) ) {
-					return toXClass( parameterizedType.getActualTypeArguments()[0] );
-				}
-				return null;
-			}
-		}.doSwitch( approximate() );
-	}
-
-	public XClass getClassOrElementClass() {
-		return toXClass( approximate() );
-	}
-
-	public Class<? extends Collection> getCollectionClass() {
-		return TypeUtils.getCollectionClass( approximate() );
-	}
-
-	public XClass getType() {
-		return toXClass( approximate() );
-	}
-}
\ No newline at end of file

Copied: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXCollectionType.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXCollectionType.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXCollectionType.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXCollectionType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,74 @@
+package org.hibernate.annotations.common.reflection.java;
+
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+import java.util.Collection;
+import java.util.Map;
+import java.util.SortedMap;
+
+import org.hibernate.annotations.common.reflection.XClass;
+import org.hibernate.annotations.common.reflection.java.generics.TypeEnvironment;
+import org.hibernate.annotations.common.reflection.java.generics.TypeSwitch;
+import org.hibernate.annotations.common.reflection.java.generics.TypeUtils;
+
+/**
+ * @author Emmanuel Bernard
+ * @author Paolo Perrotta
+ */
+class JavaXCollectionType extends JavaXType {
+
+	public JavaXCollectionType(Type type, TypeEnvironment context, JavaReflectionManager factory) {
+		super( type, context, factory );
+	}
+
+	public boolean isArray() {
+		return false;
+	}
+
+	public boolean isCollection() {
+		return true;
+	}
+
+	public XClass getElementClass() {
+		return new TypeSwitch<XClass>() {
+			@Override
+			public XClass caseParameterizedType(ParameterizedType parameterizedType) {
+				Type[] args = parameterizedType.getActualTypeArguments();
+				Type componentType;
+				Class<? extends Collection> collectionClass = getCollectionClass();
+				if ( collectionClass.isAssignableFrom( Map.class )
+						|| collectionClass.isAssignableFrom( SortedMap.class ) ) {
+					componentType = args[1];
+				}
+				else {
+					componentType = args[0];
+				}
+				return toXClass( componentType );
+			}
+		}.doSwitch( approximate() );
+	}
+
+	public XClass getMapKey() {
+		return new TypeSwitch<XClass>() {
+			@Override
+			public XClass caseParameterizedType(ParameterizedType parameterizedType) {
+				if ( getCollectionClass().isAssignableFrom( Map.class ) ) {
+					return toXClass( parameterizedType.getActualTypeArguments()[0] );
+				}
+				return null;
+			}
+		}.doSwitch( approximate() );
+	}
+
+	public XClass getClassOrElementClass() {
+		return toXClass( approximate() );
+	}
+
+	public Class<? extends Collection> getCollectionClass() {
+		return TypeUtils.getCollectionClass( approximate() );
+	}
+
+	public XClass getType() {
+		return toXClass( approximate() );
+	}
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXMember.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXMember.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXMember.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,94 +0,0 @@
-//$Id$
-package org.hibernate.annotations.common.reflection.java;
-
-import java.lang.reflect.AccessibleObject;
-import java.lang.reflect.AnnotatedElement;
-import java.lang.reflect.Field;
-import java.lang.reflect.Member;
-import java.lang.reflect.Method;
-import java.lang.reflect.Type;
-import java.util.Collection;
-
-import org.hibernate.annotations.common.reflection.XClass;
-import org.hibernate.annotations.common.reflection.XMember;
-import org.hibernate.annotations.common.reflection.java.generics.TypeEnvironment;
-
-/**
- * @author Emmanuel Bernard
- */
-public abstract class JavaXMember extends JavaXAnnotatedElement implements XMember {
-	private final Type type;
-	private final TypeEnvironment env;
-	private final JavaXType xType;
-
-	protected static Type typeOf(Member member, TypeEnvironment env) {
-		if ( member instanceof Field ) {
-			return env.bind( ( (Field) member ).getGenericType() );
-		}
-		if ( member instanceof Method ) {
-			return env.bind( ( (Method) member ).getGenericReturnType() );
-		}
-		throw new IllegalArgumentException( "Member " + member + " is neither a field nor a method" );
-	}
-
-	protected JavaXMember(Member member, Type type, TypeEnvironment env, JavaReflectionManager factory, JavaXType xType) {
-		super( (AnnotatedElement) member, factory );
-		this.type = type;
-		this.env = env;
-		this.xType = xType;
-	}
-
-	public XClass getType() {
-		return xType.getType();
-	}
-
-	public abstract String getName();
-
-	protected Type getJavaType() {
-		return env.bind( type );
-	}
-
-	protected TypeEnvironment getTypeEnvironment() {
-		return env;
-	}
-
-	protected Member getMember() {
-		return (Member) toAnnotatedElement();
-	}
-
-	public Class<? extends Collection> getCollectionClass() {
-		return xType.getCollectionClass();
-	}
-
-	public XClass getClassOrElementClass() {
-		return xType.getClassOrElementClass();
-	}
-
-	public XClass getElementClass() {
-		return xType.getElementClass();
-	}
-
-	public XClass getMapKey() {
-		return xType.getMapKey();
-	}
-
-	public boolean isArray() {
-		return xType.isArray();
-	}
-
-	public boolean isCollection() {
-		return xType.isCollection();
-	}
-
-	public int getModifiers() {
-		return getMember().getModifiers();
-	}
-
-	public final boolean isTypeResolved() {
-		return xType.isResolved();
-	}
-
-	public void setAccessible(boolean accessible) {
-		( (AccessibleObject) getMember() ).setAccessible( accessible );
-	}
-}

Copied: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXMember.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXMember.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXMember.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXMember.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,94 @@
+//$Id$
+package org.hibernate.annotations.common.reflection.java;
+
+import java.lang.reflect.AccessibleObject;
+import java.lang.reflect.AnnotatedElement;
+import java.lang.reflect.Field;
+import java.lang.reflect.Member;
+import java.lang.reflect.Method;
+import java.lang.reflect.Type;
+import java.util.Collection;
+
+import org.hibernate.annotations.common.reflection.XClass;
+import org.hibernate.annotations.common.reflection.XMember;
+import org.hibernate.annotations.common.reflection.java.generics.TypeEnvironment;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public abstract class JavaXMember extends JavaXAnnotatedElement implements XMember {
+	private final Type type;
+	private final TypeEnvironment env;
+	private final JavaXType xType;
+
+	protected static Type typeOf(Member member, TypeEnvironment env) {
+		if ( member instanceof Field ) {
+			return env.bind( ( (Field) member ).getGenericType() );
+		}
+		if ( member instanceof Method ) {
+			return env.bind( ( (Method) member ).getGenericReturnType() );
+		}
+		throw new IllegalArgumentException( "Member " + member + " is neither a field nor a method" );
+	}
+
+	protected JavaXMember(Member member, Type type, TypeEnvironment env, JavaReflectionManager factory, JavaXType xType) {
+		super( (AnnotatedElement) member, factory );
+		this.type = type;
+		this.env = env;
+		this.xType = xType;
+	}
+
+	public XClass getType() {
+		return xType.getType();
+	}
+
+	public abstract String getName();
+
+	protected Type getJavaType() {
+		return env.bind( type );
+	}
+
+	protected TypeEnvironment getTypeEnvironment() {
+		return env;
+	}
+
+	protected Member getMember() {
+		return (Member) toAnnotatedElement();
+	}
+
+	public Class<? extends Collection> getCollectionClass() {
+		return xType.getCollectionClass();
+	}
+
+	public XClass getClassOrElementClass() {
+		return xType.getClassOrElementClass();
+	}
+
+	public XClass getElementClass() {
+		return xType.getElementClass();
+	}
+
+	public XClass getMapKey() {
+		return xType.getMapKey();
+	}
+
+	public boolean isArray() {
+		return xType.isArray();
+	}
+
+	public boolean isCollection() {
+		return xType.isCollection();
+	}
+
+	public int getModifiers() {
+		return getMember().getModifiers();
+	}
+
+	public final boolean isTypeResolved() {
+		return xType.isResolved();
+	}
+
+	public void setAccessible(boolean accessible) {
+		( (AccessibleObject) getMember() ).setAccessible( accessible );
+	}
+}

Deleted: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXMethod.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXMethod.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXMethod.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,45 +0,0 @@
-//$Id$
-package org.hibernate.annotations.common.reflection.java;
-
-import java.lang.reflect.Member;
-import java.lang.reflect.Method;
-import java.lang.reflect.Type;
-
-import org.hibernate.annotations.common.reflection.XMethod;
-import org.hibernate.annotations.common.reflection.java.generics.TypeEnvironment;
-
-/**
- * @author Emmanuel Bernard
- */
-public class JavaXMethod extends JavaXMember implements XMethod {
-
-	static JavaXMethod create(Member member, TypeEnvironment context, JavaReflectionManager factory) {
-		final Type propType = typeOf( member, context );
-		JavaXType xType = factory.toXType( context, propType );
-		return new JavaXMethod( member, propType, context, factory, xType );
-	}
-
-	private JavaXMethod(Member member, Type type, TypeEnvironment env, JavaReflectionManager factory, JavaXType xType) {
-		super( member, type, env, factory, xType );
-		assert member instanceof Method;
-	}
-
-	public String getName() {
-		return getMember().getName();
-	}
-
-	public Object invoke(Object target, Object... parameters) {
-		try {
-			return ( (Method) getMember() ).invoke( target, parameters );
-		}
-		catch (NullPointerException e) {
-			throw new IllegalArgumentException( "Invoking " + getName() + " on a  null object", e );
-		}
-		catch (IllegalArgumentException e) {
-			throw new IllegalArgumentException( "Invoking " + getName() + " with wrong parameters", e );
-		}
-		catch (Exception e) {
-			throw new IllegalStateException( "Unable to invoke " + getName(), e );
-		}
-	}
-}

Copied: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXMethod.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXMethod.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXMethod.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXMethod.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,45 @@
+//$Id$
+package org.hibernate.annotations.common.reflection.java;
+
+import java.lang.reflect.Member;
+import java.lang.reflect.Method;
+import java.lang.reflect.Type;
+
+import org.hibernate.annotations.common.reflection.XMethod;
+import org.hibernate.annotations.common.reflection.java.generics.TypeEnvironment;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class JavaXMethod extends JavaXMember implements XMethod {
+
+	static JavaXMethod create(Member member, TypeEnvironment context, JavaReflectionManager factory) {
+		final Type propType = typeOf( member, context );
+		JavaXType xType = factory.toXType( context, propType );
+		return new JavaXMethod( member, propType, context, factory, xType );
+	}
+
+	private JavaXMethod(Member member, Type type, TypeEnvironment env, JavaReflectionManager factory, JavaXType xType) {
+		super( member, type, env, factory, xType );
+		assert member instanceof Method;
+	}
+
+	public String getName() {
+		return getMember().getName();
+	}
+
+	public Object invoke(Object target, Object... parameters) {
+		try {
+			return ( (Method) getMember() ).invoke( target, parameters );
+		}
+		catch (NullPointerException e) {
+			throw new IllegalArgumentException( "Invoking " + getName() + " on a  null object", e );
+		}
+		catch (IllegalArgumentException e) {
+			throw new IllegalArgumentException( "Invoking " + getName() + " with wrong parameters", e );
+		}
+		catch (Exception e) {
+			throw new IllegalStateException( "Unable to invoke " + getName(), e );
+		}
+	}
+}

Deleted: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXPackage.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXPackage.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXPackage.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,18 +0,0 @@
-package org.hibernate.annotations.common.reflection.java;
-
-import org.hibernate.annotations.common.reflection.XPackage;
-
-/**
- * @author Paolo Perrotta
- * @author Davide Marchignoli
- */
-class JavaXPackage extends JavaXAnnotatedElement implements XPackage {
-
-	public JavaXPackage(Package pkg, JavaReflectionManager factory) {
-		super( pkg, factory );
-	}
-
-	public String getName() {
-		return ( (Package) toAnnotatedElement() ).getName();
-	}
-}

Copied: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXPackage.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXPackage.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXPackage.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXPackage.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,18 @@
+package org.hibernate.annotations.common.reflection.java;
+
+import org.hibernate.annotations.common.reflection.XPackage;
+
+/**
+ * @author Paolo Perrotta
+ * @author Davide Marchignoli
+ */
+class JavaXPackage extends JavaXAnnotatedElement implements XPackage {
+
+	public JavaXPackage(Package pkg, JavaReflectionManager factory) {
+		super( pkg, factory );
+	}
+
+	public String getName() {
+		return ( (Package) toAnnotatedElement() ).getName();
+	}
+}

Deleted: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXProperty.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXProperty.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXProperty.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,72 +0,0 @@
-package org.hibernate.annotations.common.reflection.java;
-
-import java.beans.Introspector;
-import java.lang.reflect.Field;
-import java.lang.reflect.Member;
-import java.lang.reflect.Method;
-import java.lang.reflect.Type;
-
-import org.hibernate.annotations.common.reflection.XProperty;
-import org.hibernate.annotations.common.reflection.java.generics.TypeEnvironment;
-
-/**
- * @author Paolo Perrotta
- * @author Davide Marchignoli
- */
-class JavaXProperty extends JavaXMember implements XProperty {
-
-	static JavaXProperty create(Member member, final TypeEnvironment context, final JavaReflectionManager factory) {
-		final Type propType = typeOf( member, context );
-		JavaXType xType = factory.toXType( context, propType );
-		return new JavaXProperty( member, propType, context, factory, xType );
-	}
-
-	private JavaXProperty(Member member, Type type, TypeEnvironment env, JavaReflectionManager factory, JavaXType xType) {
-		super( member, type, env, factory, xType );
-		assert member instanceof Field || member instanceof Method;
-	}
-
-	public String getName() {
-		String fullName = getMember().getName();
-		if ( getMember() instanceof Method ) {
-			if ( fullName.startsWith( "get" ) ) {
-				return Introspector.decapitalize( fullName.substring( "get".length() ) );
-			}
-			if ( fullName.startsWith( "is" ) ) {
-				return Introspector.decapitalize( fullName.substring( "is".length() ) );
-			}
-			throw new RuntimeException( "Method " + fullName + " is not a property getter" );
-		}
-		else {
-			return fullName;
-		}
-	}
-
-	public Object invoke(Object target, Object... parameters) {
-		if ( parameters.length != 0 ) {
-			throw new IllegalArgumentException( "An XProperty cannot have invoke parameters" );
-		}
-		try {
-			if ( getMember() instanceof Method ) {
-				return ( (Method) getMember() ).invoke( target );
-			}
-			else {
-				return ( (Field) getMember() ).get( target );
-			}
-		}
-		catch (NullPointerException e) {
-			throw new IllegalArgumentException( "Invoking " + getName() + " on a  null object", e );
-		}
-		catch (IllegalArgumentException e) {
-			throw new IllegalArgumentException( "Invoking " + getName() + " with wrong parameters", e );
-		}
-		catch (Exception e) {
-			throw new IllegalStateException( "Unable to invoke " + getName(), e );
-		}
-	}
-
-	@Override
-	public String toString() {
-		return getName();
-	}
-}
\ No newline at end of file

Copied: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXProperty.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXProperty.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXProperty.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXProperty.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,72 @@
+package org.hibernate.annotations.common.reflection.java;
+
+import java.beans.Introspector;
+import java.lang.reflect.Field;
+import java.lang.reflect.Member;
+import java.lang.reflect.Method;
+import java.lang.reflect.Type;
+
+import org.hibernate.annotations.common.reflection.XProperty;
+import org.hibernate.annotations.common.reflection.java.generics.TypeEnvironment;
+
+/**
+ * @author Paolo Perrotta
+ * @author Davide Marchignoli
+ */
+class JavaXProperty extends JavaXMember implements XProperty {
+
+	static JavaXProperty create(Member member, final TypeEnvironment context, final JavaReflectionManager factory) {
+		final Type propType = typeOf( member, context );
+		JavaXType xType = factory.toXType( context, propType );
+		return new JavaXProperty( member, propType, context, factory, xType );
+	}
+
+	private JavaXProperty(Member member, Type type, TypeEnvironment env, JavaReflectionManager factory, JavaXType xType) {
+		super( member, type, env, factory, xType );
+		assert member instanceof Field || member instanceof Method;
+	}
+
+	public String getName() {
+		String fullName = getMember().getName();
+		if ( getMember() instanceof Method ) {
+			if ( fullName.startsWith( "get" ) ) {
+				return Introspector.decapitalize( fullName.substring( "get".length() ) );
+			}
+			if ( fullName.startsWith( "is" ) ) {
+				return Introspector.decapitalize( fullName.substring( "is".length() ) );
+			}
+			throw new RuntimeException( "Method " + fullName + " is not a property getter" );
+		}
+		else {
+			return fullName;
+		}
+	}
+
+	public Object invoke(Object target, Object... parameters) {
+		if ( parameters.length != 0 ) {
+			throw new IllegalArgumentException( "An XProperty cannot have invoke parameters" );
+		}
+		try {
+			if ( getMember() instanceof Method ) {
+				return ( (Method) getMember() ).invoke( target );
+			}
+			else {
+				return ( (Field) getMember() ).get( target );
+			}
+		}
+		catch (NullPointerException e) {
+			throw new IllegalArgumentException( "Invoking " + getName() + " on a  null object", e );
+		}
+		catch (IllegalArgumentException e) {
+			throw new IllegalArgumentException( "Invoking " + getName() + " with wrong parameters", e );
+		}
+		catch (Exception e) {
+			throw new IllegalStateException( "Unable to invoke " + getName(), e );
+		}
+	}
+
+	@Override
+	public String toString() {
+		return getName();
+	}
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXSimpleType.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXSimpleType.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXSimpleType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,46 +0,0 @@
-package org.hibernate.annotations.common.reflection.java;
-
-import java.lang.reflect.Type;
-import java.util.Collection;
-
-import org.hibernate.annotations.common.reflection.XClass;
-import org.hibernate.annotations.common.reflection.java.generics.TypeEnvironment;
-
-/**
- * @author Emmanuel Bernard
- * @author Paolo Perrotta
- */
-class JavaXSimpleType extends JavaXType {
-
-	public JavaXSimpleType(Type type, TypeEnvironment context, JavaReflectionManager factory) {
-		super( type, context, factory );
-	}
-
-	public boolean isArray() {
-		return false;
-	}
-
-	public boolean isCollection() {
-		return false;
-	}
-
-	public XClass getElementClass() {
-		return toXClass( approximate() );
-	}
-
-	public XClass getClassOrElementClass() {
-		return getElementClass();
-	}
-
-	public Class<? extends Collection> getCollectionClass() {
-		return null;
-	}
-
-	public XClass getType() {
-		return toXClass( approximate() );
-	}
-
-	public XClass getMapKey() {
-		return null;
-	}
-}
\ No newline at end of file

Copied: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXSimpleType.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXSimpleType.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXSimpleType.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXSimpleType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,46 @@
+package org.hibernate.annotations.common.reflection.java;
+
+import java.lang.reflect.Type;
+import java.util.Collection;
+
+import org.hibernate.annotations.common.reflection.XClass;
+import org.hibernate.annotations.common.reflection.java.generics.TypeEnvironment;
+
+/**
+ * @author Emmanuel Bernard
+ * @author Paolo Perrotta
+ */
+class JavaXSimpleType extends JavaXType {
+
+	public JavaXSimpleType(Type type, TypeEnvironment context, JavaReflectionManager factory) {
+		super( type, context, factory );
+	}
+
+	public boolean isArray() {
+		return false;
+	}
+
+	public boolean isCollection() {
+		return false;
+	}
+
+	public XClass getElementClass() {
+		return toXClass( approximate() );
+	}
+
+	public XClass getClassOrElementClass() {
+		return getElementClass();
+	}
+
+	public Class<? extends Collection> getCollectionClass() {
+		return null;
+	}
+
+	public XClass getType() {
+		return toXClass( approximate() );
+	}
+
+	public XClass getMapKey() {
+		return null;
+	}
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXType.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXType.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,56 +0,0 @@
-//$Id: PropertyTypeExtractor.java 9316 2006-02-22 20:47:31Z epbernard $
-package org.hibernate.annotations.common.reflection.java;
-
-import java.lang.reflect.Type;
-import java.util.Collection;
-
-import org.hibernate.annotations.common.reflection.XClass;
-import org.hibernate.annotations.common.reflection.java.generics.TypeEnvironment;
-import org.hibernate.annotations.common.reflection.java.generics.TypeUtils;
-
-/**
- * The Java X-layer equivalent to a Java <code>Type</code>.
- *
- * @author Emmanuel Bernard
- * @author Paolo Perrotta
- */
-abstract class JavaXType {
-
-	private final TypeEnvironment context;
-	private final JavaReflectionManager factory;
-	private final Type approximatedType;
-	private final Type boundType;
-
-	protected JavaXType(Type unboundType, TypeEnvironment context, JavaReflectionManager factory) {
-		this.context = context;
-		this.factory = factory;
-		this.boundType = context.bind( unboundType );
-		this.approximatedType = factory.toApproximatingEnvironment( context ).bind( unboundType );
-	}
-
-	abstract public boolean isArray();
-
-	abstract public boolean isCollection();
-
-	abstract public XClass getElementClass();
-
-	abstract public XClass getClassOrElementClass();
-
-	abstract public Class<? extends Collection> getCollectionClass();
-
-	abstract public XClass getMapKey();
-
-	abstract public XClass getType();
-
-	public boolean isResolved() {
-		return TypeUtils.isResolved( boundType );
-	}
-
-	protected Type approximate() {
-		return approximatedType;
-	}
-
-	protected XClass toXClass(Type type) {
-		return factory.toXClass( type, context );
-	}
-}

Copied: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXType.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXType.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXType.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/JavaXType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,56 @@
+//$Id: PropertyTypeExtractor.java 9316 2006-02-22 20:47:31Z epbernard $
+package org.hibernate.annotations.common.reflection.java;
+
+import java.lang.reflect.Type;
+import java.util.Collection;
+
+import org.hibernate.annotations.common.reflection.XClass;
+import org.hibernate.annotations.common.reflection.java.generics.TypeEnvironment;
+import org.hibernate.annotations.common.reflection.java.generics.TypeUtils;
+
+/**
+ * The Java X-layer equivalent to a Java <code>Type</code>.
+ *
+ * @author Emmanuel Bernard
+ * @author Paolo Perrotta
+ */
+abstract class JavaXType {
+
+	private final TypeEnvironment context;
+	private final JavaReflectionManager factory;
+	private final Type approximatedType;
+	private final Type boundType;
+
+	protected JavaXType(Type unboundType, TypeEnvironment context, JavaReflectionManager factory) {
+		this.context = context;
+		this.factory = factory;
+		this.boundType = context.bind( unboundType );
+		this.approximatedType = factory.toApproximatingEnvironment( context ).bind( unboundType );
+	}
+
+	abstract public boolean isArray();
+
+	abstract public boolean isCollection();
+
+	abstract public XClass getElementClass();
+
+	abstract public XClass getClassOrElementClass();
+
+	abstract public Class<? extends Collection> getCollectionClass();
+
+	abstract public XClass getMapKey();
+
+	abstract public XClass getType();
+
+	public boolean isResolved() {
+		return TypeUtils.isResolved( boundType );
+	}
+
+	protected Type approximate() {
+		return approximatedType;
+	}
+
+	protected XClass toXClass(Type type) {
+		return factory.toXClass( type, context );
+	}
+}

Deleted: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/Pair.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/Pair.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/Pair.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,58 +0,0 @@
-package org.hibernate.annotations.common.reflection.java;
-
-/**
- * A pair of objects that can be used as a key in a Map.
- *
- * @author Paolo Perrotta
- * @author Davide Marchignoli
- */
-abstract class Pair<T, U> {
-
-	private final T o1;
-
-	private final U o2;
-    private final int hashCode;
-
-    Pair(T o1, U o2) {
-		this.o1 = o1;
-		this.o2 = o2;
-        this.hashCode = doHashCode();
-    }
-
-	@Override
-	public boolean equals(Object obj) {
-		if ( ! (obj instanceof Pair) ) {
-			 return false;
-		}
-		Pair other = (Pair) obj;
-        return !differentHashCode( other ) && safeEquals( o1, other.o1 ) && safeEquals( o2, other.o2 );
-    }
-
-    private boolean differentHashCode(Pair other) {
-        return hashCode != other.hashCode;
-    }
-
-    @Override
-	public int hashCode() {
-        //cached because the inheritance can be big
-        return hashCode;
-	}
-
-    private int doHashCode() {
-		return safeHashCode( o1 ) ^ safeHashCode( o2 );
-	}
-
-	private int safeHashCode(Object o) {
-		if ( o == null ) {
-			return 0;
-		}
-		return o.hashCode();
-	}
-
-	private boolean safeEquals(Object obj1, Object obj2) {
-		if ( obj1 == null ) {
-			return obj2 == null;
-		}
-        return obj1.equals( obj2 );
-	}
-}

Copied: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/Pair.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/Pair.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/Pair.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/Pair.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,58 @@
+package org.hibernate.annotations.common.reflection.java;
+
+/**
+ * A pair of objects that can be used as a key in a Map.
+ *
+ * @author Paolo Perrotta
+ * @author Davide Marchignoli
+ */
+abstract class Pair<T, U> {
+
+	private final T o1;
+
+	private final U o2;
+    private final int hashCode;
+
+    Pair(T o1, U o2) {
+		this.o1 = o1;
+		this.o2 = o2;
+        this.hashCode = doHashCode();
+    }
+
+	@Override
+	public boolean equals(Object obj) {
+		if ( ! (obj instanceof Pair) ) {
+			 return false;
+		}
+		Pair other = (Pair) obj;
+        return !differentHashCode( other ) && safeEquals( o1, other.o1 ) && safeEquals( o2, other.o2 );
+    }
+
+    private boolean differentHashCode(Pair other) {
+        return hashCode != other.hashCode;
+    }
+
+    @Override
+	public int hashCode() {
+        //cached because the inheritance can be big
+        return hashCode;
+	}
+
+    private int doHashCode() {
+		return safeHashCode( o1 ) ^ safeHashCode( o2 );
+	}
+
+	private int safeHashCode(Object o) {
+		if ( o == null ) {
+			return 0;
+		}
+		return o.hashCode();
+	}
+
+	private boolean safeEquals(Object obj1, Object obj2) {
+		if ( obj1 == null ) {
+			return obj2 == null;
+		}
+        return obj1.equals( obj2 );
+	}
+}

Copied: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics)

Deleted: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/ApproximatingTypeEnvironment.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/ApproximatingTypeEnvironment.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/ApproximatingTypeEnvironment.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,151 +0,0 @@
-package org.hibernate.annotations.common.reflection.java.generics;
-
-import java.lang.reflect.Array;
-import java.lang.reflect.GenericArrayType;
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-import java.lang.reflect.TypeVariable;
-import java.lang.reflect.WildcardType;
-
-/**
- * A <code>TypeEnvironment</code> that approximates the unresolved components of a generic simple
- * type or collection to their nearest upper binding. The returned type is always fully resolved.
- * <p/>
- * The concept of "type approximation" is not really sound in general. This class just does what we need
- * within the Hibernate Annotations environment. It's more or less a hack. The idea is that certain
- * types can provide useful information even if they're not fully resolved in the environment. This class
- * tries to turn those types into the nearest fully resolved type that still carries that information.
- * <p/>
- * For example:<br>
- * <code>T</code> becomes <code>Object</code>.<br>
- * <code>T extends Foo</code> becomes <code>Foo</code>.<br>
- * <code>List&ltT&gt</code> becomes <code>List&ltObject&gt</code>.<br>
- * <code>List&ltT extends Foo&gt</code> becomes <code>List&ltFoo&gt</code>.<br>
- * An array of <code>T extends Foo</code> becomes an array of <code>Foo</code>.<p>
- * <p/>
- * If a type variable has multiple upper bounds, it will be approximated to <code>Object</code>.
- * Lower bounds are ignored.<p>
- * <p/>
- * Wildcards are generally not approximated. <code>Class&lt?&gt</code> stays <code>Class&lt?&gt</code>.
- * A wildcard within a generic collection is approximated to its upper binding. <code>List&lt?&gt</code> becomes
- * <code>List&ltObject&gt</code><p>
- * <p/>
- * Note that <code>Class&ltT&gt</code> is <emp>not</emp> approximated <code>Class&ltObject&gt</code>.
- * That would be wrong in any situation. All parametric types that are not type variables, collections or
- * arrays are coarsely approximated to <code>Object.class</code>.
- *
- * @author Paolo Perrotta
- * @return a type where the generic arguments have been replaced by raw classes.
- */
-class ApproximatingTypeEnvironment implements TypeEnvironment {
-
-	public Type bind(final Type type) {
-		Type result = fineApproximation( type );
-		assert TypeUtils.isResolved( result );
-		return result;
-	}
-
-	private Type fineApproximation(final Type type) {
-		return new TypeSwitch<Type>() {
-			public Type caseWildcardType(WildcardType wildcardType) {
-				return wildcardType;
-			}
-
-			@Override
-			public Type caseClass(Class classType) {
-				return classType;
-			}
-
-			@Override
-			public Type caseGenericArrayType(GenericArrayType genericArrayType) {
-				if ( TypeUtils.isResolved( genericArrayType ) ) {
-					return genericArrayType;
-				}
-				Type componentType = genericArrayType.getGenericComponentType();
-				Type boundComponentType = bind( componentType );
-				if ( boundComponentType instanceof Class ) {
-					return Array.newInstance( (Class) boundComponentType, 0 ).getClass();
-				}
-				// fall back to coarse approximation, because I found no standard way
-				// to instance arrays of a generic type
-				return Object[].class;
-			}
-
-			@Override
-			public Type caseParameterizedType(ParameterizedType parameterizedType) {
-				if ( TypeUtils.isResolved( parameterizedType ) ) {
-					return parameterizedType;
-				}
-
-				if ( !TypeUtils.isCollection( parameterizedType ) ) {
-					return Object.class; // fall back to coarse approximation
-				}
-
-				Type[] typeArguments = parameterizedType.getActualTypeArguments();
-				Type[] approximatedTypeArguments = new Type[typeArguments.length];
-				for ( int i = 0; i < typeArguments.length ; i++ ) {
-					approximatedTypeArguments[i] = coarseApproximation( typeArguments[i] );
-				}
-
-				return TypeFactory.createParameterizedType(
-						bind( parameterizedType.getRawType() ),
-						approximatedTypeArguments,
-						parameterizedType.getOwnerType()
-				);
-			}
-
-			@Override
-			public Type defaultCase(Type t) {
-				return coarseApproximation( t );
-			}
-		}.doSwitch( type );
-	}
-
-	private Type coarseApproximation(final Type type) {
-		Type result = new TypeSwitch<Type>() {
-			public Type caseWildcardType(WildcardType wildcardType) {
-				return approximateTo( wildcardType.getUpperBounds() );
-			}
-
-			@Override
-			public Type caseGenericArrayType(GenericArrayType genericArrayType) {
-				if ( TypeUtils.isResolved( genericArrayType ) ) {
-					return genericArrayType;
-				}
-				return Object[].class;
-			}
-
-			@Override
-			public Type caseParameterizedType(ParameterizedType parameterizedType) {
-				if ( TypeUtils.isResolved( parameterizedType ) ) {
-					return parameterizedType;
-				}
-				return Object.class;
-			}
-
-			@Override
-			public Type caseTypeVariable(TypeVariable typeVariable) {
-				return approximateTo( typeVariable.getBounds() );
-			}
-
-			private Type approximateTo(Type[] bounds) {
-				if ( bounds.length != 1 ) {
-					return Object.class;
-				}
-				return coarseApproximation( bounds[0] );
-			}
-
-			@Override
-			public Type defaultCase(Type t) {
-				return t;
-			}
-		}.doSwitch( type );
-		assert TypeUtils.isResolved( result );
-		return result;
-	}
-    
-    @Override
-    public String toString() {
-        return "approximated_types";
-    }
-}

Copied: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/ApproximatingTypeEnvironment.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/ApproximatingTypeEnvironment.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/ApproximatingTypeEnvironment.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/ApproximatingTypeEnvironment.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,151 @@
+package org.hibernate.annotations.common.reflection.java.generics;
+
+import java.lang.reflect.Array;
+import java.lang.reflect.GenericArrayType;
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+import java.lang.reflect.TypeVariable;
+import java.lang.reflect.WildcardType;
+
+/**
+ * A <code>TypeEnvironment</code> that approximates the unresolved components of a generic simple
+ * type or collection to their nearest upper binding. The returned type is always fully resolved.
+ * <p/>
+ * The concept of "type approximation" is not really sound in general. This class just does what we need
+ * within the Hibernate Annotations environment. It's more or less a hack. The idea is that certain
+ * types can provide useful information even if they're not fully resolved in the environment. This class
+ * tries to turn those types into the nearest fully resolved type that still carries that information.
+ * <p/>
+ * For example:<br>
+ * <code>T</code> becomes <code>Object</code>.<br>
+ * <code>T extends Foo</code> becomes <code>Foo</code>.<br>
+ * <code>List&ltT&gt</code> becomes <code>List&ltObject&gt</code>.<br>
+ * <code>List&ltT extends Foo&gt</code> becomes <code>List&ltFoo&gt</code>.<br>
+ * An array of <code>T extends Foo</code> becomes an array of <code>Foo</code>.<p>
+ * <p/>
+ * If a type variable has multiple upper bounds, it will be approximated to <code>Object</code>.
+ * Lower bounds are ignored.<p>
+ * <p/>
+ * Wildcards are generally not approximated. <code>Class&lt?&gt</code> stays <code>Class&lt?&gt</code>.
+ * A wildcard within a generic collection is approximated to its upper binding. <code>List&lt?&gt</code> becomes
+ * <code>List&ltObject&gt</code><p>
+ * <p/>
+ * Note that <code>Class&ltT&gt</code> is <emp>not</emp> approximated <code>Class&ltObject&gt</code>.
+ * That would be wrong in any situation. All parametric types that are not type variables, collections or
+ * arrays are coarsely approximated to <code>Object.class</code>.
+ *
+ * @author Paolo Perrotta
+ * @return a type where the generic arguments have been replaced by raw classes.
+ */
+class ApproximatingTypeEnvironment implements TypeEnvironment {
+
+	public Type bind(final Type type) {
+		Type result = fineApproximation( type );
+		assert TypeUtils.isResolved( result );
+		return result;
+	}
+
+	private Type fineApproximation(final Type type) {
+		return new TypeSwitch<Type>() {
+			public Type caseWildcardType(WildcardType wildcardType) {
+				return wildcardType;
+			}
+
+			@Override
+			public Type caseClass(Class classType) {
+				return classType;
+			}
+
+			@Override
+			public Type caseGenericArrayType(GenericArrayType genericArrayType) {
+				if ( TypeUtils.isResolved( genericArrayType ) ) {
+					return genericArrayType;
+				}
+				Type componentType = genericArrayType.getGenericComponentType();
+				Type boundComponentType = bind( componentType );
+				if ( boundComponentType instanceof Class ) {
+					return Array.newInstance( (Class) boundComponentType, 0 ).getClass();
+				}
+				// fall back to coarse approximation, because I found no standard way
+				// to instance arrays of a generic type
+				return Object[].class;
+			}
+
+			@Override
+			public Type caseParameterizedType(ParameterizedType parameterizedType) {
+				if ( TypeUtils.isResolved( parameterizedType ) ) {
+					return parameterizedType;
+				}
+
+				if ( !TypeUtils.isCollection( parameterizedType ) ) {
+					return Object.class; // fall back to coarse approximation
+				}
+
+				Type[] typeArguments = parameterizedType.getActualTypeArguments();
+				Type[] approximatedTypeArguments = new Type[typeArguments.length];
+				for ( int i = 0; i < typeArguments.length ; i++ ) {
+					approximatedTypeArguments[i] = coarseApproximation( typeArguments[i] );
+				}
+
+				return TypeFactory.createParameterizedType(
+						bind( parameterizedType.getRawType() ),
+						approximatedTypeArguments,
+						parameterizedType.getOwnerType()
+				);
+			}
+
+			@Override
+			public Type defaultCase(Type t) {
+				return coarseApproximation( t );
+			}
+		}.doSwitch( type );
+	}
+
+	private Type coarseApproximation(final Type type) {
+		Type result = new TypeSwitch<Type>() {
+			public Type caseWildcardType(WildcardType wildcardType) {
+				return approximateTo( wildcardType.getUpperBounds() );
+			}
+
+			@Override
+			public Type caseGenericArrayType(GenericArrayType genericArrayType) {
+				if ( TypeUtils.isResolved( genericArrayType ) ) {
+					return genericArrayType;
+				}
+				return Object[].class;
+			}
+
+			@Override
+			public Type caseParameterizedType(ParameterizedType parameterizedType) {
+				if ( TypeUtils.isResolved( parameterizedType ) ) {
+					return parameterizedType;
+				}
+				return Object.class;
+			}
+
+			@Override
+			public Type caseTypeVariable(TypeVariable typeVariable) {
+				return approximateTo( typeVariable.getBounds() );
+			}
+
+			private Type approximateTo(Type[] bounds) {
+				if ( bounds.length != 1 ) {
+					return Object.class;
+				}
+				return coarseApproximation( bounds[0] );
+			}
+
+			@Override
+			public Type defaultCase(Type t) {
+				return t;
+			}
+		}.doSwitch( type );
+		assert TypeUtils.isResolved( result );
+		return result;
+	}
+    
+    @Override
+    public String toString() {
+        return "approximated_types";
+    }
+}

Deleted: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/CompoundTypeEnvironment.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/CompoundTypeEnvironment.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/CompoundTypeEnvironment.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,70 +0,0 @@
-package org.hibernate.annotations.common.reflection.java.generics;
-
-import java.lang.reflect.Type;
-
-/**
- * A composition of two <code>TypeEnvironment</code> functions.
- *
- * @author Davide Marchignoli
- * @author Paolo Perrotta
- */
-public class CompoundTypeEnvironment implements TypeEnvironment {
-
-	private final TypeEnvironment f;
-
-	private final TypeEnvironment g;
-    
-    private final int hashCode;
-
-    public static TypeEnvironment create(TypeEnvironment f, TypeEnvironment g) {
-        if ( g == IdentityTypeEnvironment.INSTANCE )
-            return f;
-        if ( f == IdentityTypeEnvironment.INSTANCE )
-            return g;
-        return new CompoundTypeEnvironment( f, g );
-    }
-    
-    private CompoundTypeEnvironment(TypeEnvironment f, TypeEnvironment g) {
-		this.f = f;
-		this.g = g;
-        hashCode = doHashCode();
-    }
-
-	public Type bind(Type type) {
-		return f.bind( g.bind( type ) );
-	}
-
-	public boolean equals(Object o) {
-		if ( this == o ) return true;
-		if ( ! ( o instanceof CompoundTypeEnvironment ) ) return false;
-
-		final CompoundTypeEnvironment that = (CompoundTypeEnvironment) o;
-
-        if ( differentHashCode( that ) ) return false;
-
-        if ( !f.equals( that.f ) ) return false;
-        return g.equals( that.g );
-
-    }
-
-    private boolean differentHashCode(CompoundTypeEnvironment that) {
-        return hashCode != that.hashCode;
-    }
-
-    private int doHashCode() {
-		int result;
-		result = f.hashCode();
-		result = 29 * result + g.hashCode();
-		return result;
-	}
-
-    public int hashCode() {
-        //cached because the inheritance can be big
-        return hashCode;
-    }
-    
-    @Override
-    public String toString() {
-        return f.toString() + "(" + g.toString() + ")";
-    }
-}

Copied: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/CompoundTypeEnvironment.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/CompoundTypeEnvironment.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/CompoundTypeEnvironment.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/CompoundTypeEnvironment.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,70 @@
+package org.hibernate.annotations.common.reflection.java.generics;
+
+import java.lang.reflect.Type;
+
+/**
+ * A composition of two <code>TypeEnvironment</code> functions.
+ *
+ * @author Davide Marchignoli
+ * @author Paolo Perrotta
+ */
+public class CompoundTypeEnvironment implements TypeEnvironment {
+
+	private final TypeEnvironment f;
+
+	private final TypeEnvironment g;
+    
+    private final int hashCode;
+
+    public static TypeEnvironment create(TypeEnvironment f, TypeEnvironment g) {
+        if ( g == IdentityTypeEnvironment.INSTANCE )
+            return f;
+        if ( f == IdentityTypeEnvironment.INSTANCE )
+            return g;
+        return new CompoundTypeEnvironment( f, g );
+    }
+    
+    private CompoundTypeEnvironment(TypeEnvironment f, TypeEnvironment g) {
+		this.f = f;
+		this.g = g;
+        hashCode = doHashCode();
+    }
+
+	public Type bind(Type type) {
+		return f.bind( g.bind( type ) );
+	}
+
+	public boolean equals(Object o) {
+		if ( this == o ) return true;
+		if ( ! ( o instanceof CompoundTypeEnvironment ) ) return false;
+
+		final CompoundTypeEnvironment that = (CompoundTypeEnvironment) o;
+
+        if ( differentHashCode( that ) ) return false;
+
+        if ( !f.equals( that.f ) ) return false;
+        return g.equals( that.g );
+
+    }
+
+    private boolean differentHashCode(CompoundTypeEnvironment that) {
+        return hashCode != that.hashCode;
+    }
+
+    private int doHashCode() {
+		int result;
+		result = f.hashCode();
+		result = 29 * result + g.hashCode();
+		return result;
+	}
+
+    public int hashCode() {
+        //cached because the inheritance can be big
+        return hashCode;
+    }
+    
+    @Override
+    public String toString() {
+        return f.toString() + "(" + g.toString() + ")";
+    }
+}

Deleted: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/IdentityTypeEnvironment.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/IdentityTypeEnvironment.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/IdentityTypeEnvironment.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,25 +0,0 @@
-package org.hibernate.annotations.common.reflection.java.generics;
-
-import java.lang.reflect.Type;
-
-/**
- * Substitutes a <code>Type</code> for itself.
- *
- * @author Davide Marchignoli
- * @author Paolo Perrotta
- */
-public class IdentityTypeEnvironment implements TypeEnvironment {
-
-	public static final TypeEnvironment INSTANCE = new IdentityTypeEnvironment();
-
-	private IdentityTypeEnvironment() {
-	}
-
-	public Type bind(Type type) {
-		return type;
-	}
-    
-    public String toString() {
-        return "{}";
-    }
-}

Copied: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/IdentityTypeEnvironment.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/IdentityTypeEnvironment.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/IdentityTypeEnvironment.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/IdentityTypeEnvironment.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,25 @@
+package org.hibernate.annotations.common.reflection.java.generics;
+
+import java.lang.reflect.Type;
+
+/**
+ * Substitutes a <code>Type</code> for itself.
+ *
+ * @author Davide Marchignoli
+ * @author Paolo Perrotta
+ */
+public class IdentityTypeEnvironment implements TypeEnvironment {
+
+	public static final TypeEnvironment INSTANCE = new IdentityTypeEnvironment();
+
+	private IdentityTypeEnvironment() {
+	}
+
+	public Type bind(Type type) {
+		return type;
+	}
+    
+    public String toString() {
+        return "{}";
+    }
+}

Deleted: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/SimpleTypeEnvironment.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/SimpleTypeEnvironment.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/SimpleTypeEnvironment.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,93 +0,0 @@
-package org.hibernate.annotations.common.reflection.java.generics;
-
-import java.lang.reflect.GenericArrayType;
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-import java.lang.reflect.TypeVariable;
-import java.lang.reflect.WildcardType;
-import java.util.HashMap;
-
-/**
- * Binds formal type arguments (typically T, E, etc.) to actual types.
- * 
- * @author Davide Marchignoli
- * @author Paolo Perrotta
- */
-class SimpleTypeEnvironment extends HashMap<Type, Type> implements TypeEnvironment {
-
-	private static final long serialVersionUID = 1L;
-    
-    private final TypeSwitch<Type> substitute = new TypeSwitch<Type>() {
-		@Override
-		public Type caseClass(Class classType) {
-			return classType;
-		}
-
-		@Override
-		public Type caseGenericArrayType(GenericArrayType genericArrayType) {
-			Type originalComponentType = genericArrayType.getGenericComponentType();
-			Type boundComponentType = bind( originalComponentType );
-			// try to keep the original type if possible
-			if ( originalComponentType == boundComponentType ) {
-				return genericArrayType;
-			}
-			return TypeFactory.createArrayType( boundComponentType );
-		}
-
-		@Override
-		public Type caseParameterizedType(ParameterizedType parameterizedType) {
-			Type[] originalArguments = parameterizedType.getActualTypeArguments();
-			Type[] boundArguments = substitute( originalArguments );
-			// try to keep the original type if possible
-			if ( areSame( originalArguments, boundArguments ) ) {
-				return parameterizedType;
-			}
-			return TypeFactory.createParameterizedType(
-					parameterizedType.getRawType(), boundArguments, parameterizedType.getOwnerType()
-			);
-		}
-
-		private boolean areSame(Object[] array1, Object[] array2) {
-			if ( array1.length != array2.length ) {
-				return false;
-			}
-			for ( int i = 0; i < array1.length ; i++ ) {
-				if ( array1[i] != array2[i] ) {
-					return false;
-				}
-			}
-			return true;
-		}
-
-		@Override
-		public Type caseTypeVariable(TypeVariable typeVariable) {
-            if ( !containsKey( typeVariable )) {
-            	return typeVariable;
-            }
-            return get( typeVariable );
-		}
-
-		@Override
-		public Type caseWildcardType(WildcardType wildcardType) {
-			return wildcardType;
-		}
-	};
-
-	public SimpleTypeEnvironment(Type[] formalTypeArgs, Type[] actualTypeArgs) {
-        for (int i = 0; i < formalTypeArgs.length; i++) {
-            put( formalTypeArgs[i], actualTypeArgs[i] );
-        }
-	}
-
-	public Type bind(Type type) {
-		return substitute.doSwitch( type );
-	}
-
-	private Type[] substitute(Type[] types) {
-		Type[] substTypes = new Type[types.length];
-		for ( int i = 0; i < substTypes.length ; i++ ) {
-			substTypes[i] = bind( types[i] );
-		}
-		return substTypes;
-	}
-}

Copied: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/SimpleTypeEnvironment.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/SimpleTypeEnvironment.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/SimpleTypeEnvironment.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/SimpleTypeEnvironment.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,93 @@
+package org.hibernate.annotations.common.reflection.java.generics;
+
+import java.lang.reflect.GenericArrayType;
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+import java.lang.reflect.TypeVariable;
+import java.lang.reflect.WildcardType;
+import java.util.HashMap;
+
+/**
+ * Binds formal type arguments (typically T, E, etc.) to actual types.
+ * 
+ * @author Davide Marchignoli
+ * @author Paolo Perrotta
+ */
+class SimpleTypeEnvironment extends HashMap<Type, Type> implements TypeEnvironment {
+
+	private static final long serialVersionUID = 1L;
+    
+    private final TypeSwitch<Type> substitute = new TypeSwitch<Type>() {
+		@Override
+		public Type caseClass(Class classType) {
+			return classType;
+		}
+
+		@Override
+		public Type caseGenericArrayType(GenericArrayType genericArrayType) {
+			Type originalComponentType = genericArrayType.getGenericComponentType();
+			Type boundComponentType = bind( originalComponentType );
+			// try to keep the original type if possible
+			if ( originalComponentType == boundComponentType ) {
+				return genericArrayType;
+			}
+			return TypeFactory.createArrayType( boundComponentType );
+		}
+
+		@Override
+		public Type caseParameterizedType(ParameterizedType parameterizedType) {
+			Type[] originalArguments = parameterizedType.getActualTypeArguments();
+			Type[] boundArguments = substitute( originalArguments );
+			// try to keep the original type if possible
+			if ( areSame( originalArguments, boundArguments ) ) {
+				return parameterizedType;
+			}
+			return TypeFactory.createParameterizedType(
+					parameterizedType.getRawType(), boundArguments, parameterizedType.getOwnerType()
+			);
+		}
+
+		private boolean areSame(Object[] array1, Object[] array2) {
+			if ( array1.length != array2.length ) {
+				return false;
+			}
+			for ( int i = 0; i < array1.length ; i++ ) {
+				if ( array1[i] != array2[i] ) {
+					return false;
+				}
+			}
+			return true;
+		}
+
+		@Override
+		public Type caseTypeVariable(TypeVariable typeVariable) {
+            if ( !containsKey( typeVariable )) {
+            	return typeVariable;
+            }
+            return get( typeVariable );
+		}
+
+		@Override
+		public Type caseWildcardType(WildcardType wildcardType) {
+			return wildcardType;
+		}
+	};
+
+	public SimpleTypeEnvironment(Type[] formalTypeArgs, Type[] actualTypeArgs) {
+        for (int i = 0; i < formalTypeArgs.length; i++) {
+            put( formalTypeArgs[i], actualTypeArgs[i] );
+        }
+	}
+
+	public Type bind(Type type) {
+		return substitute.doSwitch( type );
+	}
+
+	private Type[] substitute(Type[] types) {
+		Type[] substTypes = new Type[types.length];
+		for ( int i = 0; i < substTypes.length ; i++ ) {
+			substTypes[i] = bind( types[i] );
+		}
+		return substTypes;
+	}
+}

Deleted: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/TypeEnvironment.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/TypeEnvironment.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/TypeEnvironment.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,53 +0,0 @@
-package org.hibernate.annotations.common.reflection.java.generics;
-
-import java.lang.reflect.Type;
-
-/**
- * A typing context that knows how to "resolve" the generic parameters of a
- * <code>Type</code>.
- * <p/>
- * For example:
- * <p/>
- * <p/>
- * <blockquote>
- * <p/>
- * <pre>
- *  class Shop&ltT&gt{
- *    List&ltT&gt getCatalog() { ... }
- *  }
- * <p/>
- *  class Bakery extends Shop&ltBread&gt{}
- * </pre>
- * <p/>
- * </blockquote>
- * <p/>
- * Consider the type returned by method <code>getCatalog()</code>. There are
- * two possible contexts here. In the context of <code>Shop</code>, the type
- * is <code>List&ltT&gt</code>. In the context of <code>Bakery</code>, the
- * type is <code>List&ltBread&gt</code>. Each of these contexts can be
- * represented by a <code>TypeEnvironment</code>.
- *
- * @author Davide Marchignoli
- * @author Paolo Perrotta
- */
-public interface TypeEnvironment {
-
-	/**
-	 * Binds as many generic components of the given type as possible in this
-	 * context.
-	 * <p/>
-	 * Warning: if the returned <code>Type</code> is a <code>Class</code>,
-	 * then it's guaranteed to be a regular Java <code>Class</code>. In all
-	 * other cases, this method might return a custom implementation of some
-	 * interface that extends <code>Type</code>. Be sure not to mix these
-	 * objects with Java's implementations of <code>Type</code> to avoid
-	 * potential identity problems.
-	 * <p/>
-	 * This class does not support bindings involving inner classes or
-	 * upper/lower bounds.
-	 *
-	 * @return a type where the generic arguments have been replaced by raw
-	 *         classes whenever this is possible.
-	 */
-	public Type bind(Type type);
-}
\ No newline at end of file

Copied: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/TypeEnvironment.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/TypeEnvironment.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/TypeEnvironment.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/TypeEnvironment.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,53 @@
+package org.hibernate.annotations.common.reflection.java.generics;
+
+import java.lang.reflect.Type;
+
+/**
+ * A typing context that knows how to "resolve" the generic parameters of a
+ * <code>Type</code>.
+ * <p/>
+ * For example:
+ * <p/>
+ * <p/>
+ * <blockquote>
+ * <p/>
+ * <pre>
+ *  class Shop&ltT&gt{
+ *    List&ltT&gt getCatalog() { ... }
+ *  }
+ * <p/>
+ *  class Bakery extends Shop&ltBread&gt{}
+ * </pre>
+ * <p/>
+ * </blockquote>
+ * <p/>
+ * Consider the type returned by method <code>getCatalog()</code>. There are
+ * two possible contexts here. In the context of <code>Shop</code>, the type
+ * is <code>List&ltT&gt</code>. In the context of <code>Bakery</code>, the
+ * type is <code>List&ltBread&gt</code>. Each of these contexts can be
+ * represented by a <code>TypeEnvironment</code>.
+ *
+ * @author Davide Marchignoli
+ * @author Paolo Perrotta
+ */
+public interface TypeEnvironment {
+
+	/**
+	 * Binds as many generic components of the given type as possible in this
+	 * context.
+	 * <p/>
+	 * Warning: if the returned <code>Type</code> is a <code>Class</code>,
+	 * then it's guaranteed to be a regular Java <code>Class</code>. In all
+	 * other cases, this method might return a custom implementation of some
+	 * interface that extends <code>Type</code>. Be sure not to mix these
+	 * objects with Java's implementations of <code>Type</code> to avoid
+	 * potential identity problems.
+	 * <p/>
+	 * This class does not support bindings involving inner classes or
+	 * upper/lower bounds.
+	 *
+	 * @return a type where the generic arguments have been replaced by raw
+	 *         classes whenever this is possible.
+	 */
+	public Type bind(Type type);
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/TypeEnvironmentFactory.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/TypeEnvironmentFactory.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/TypeEnvironmentFactory.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,95 +0,0 @@
-package org.hibernate.annotations.common.reflection.java.generics;
-
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-import java.lang.reflect.TypeVariable;
-
-/**
- * Returns the type context for a given <code>Class</code> or <code>ParameterizedType</code>.
- * <p/>
- * Does not support bindings involving inner classes, nor upper/lower bounds.
- *
- * @author Davide Marchignoli
- * @author Paolo Perrotta
- */
-public class TypeEnvironmentFactory {
-
-	/**
-	 * @return Returns a type environment suitable for resolving types occurring
-	 *         in subclasses of the context class.
-	 */
-	public TypeEnvironment getEnvironment(Class context) {
-		if ( context == null ) {
-        	return IdentityTypeEnvironment.INSTANCE;
-        }
-        return createEnvironment( context );
-	}
-
-	public TypeEnvironment getEnvironment(Type context) {
-		if ( context == null ) {
-        	return IdentityTypeEnvironment.INSTANCE;
-        }
-        return createEnvironment( context );
-	}
-
-	public TypeEnvironment getEnvironment(Type t, TypeEnvironment context) {
-		return CompoundTypeEnvironment.create( getEnvironment(t), context );
-	}
-
-	public TypeEnvironment toApproximatingEnvironment(TypeEnvironment context) {
-		return CompoundTypeEnvironment.create( new ApproximatingTypeEnvironment(), context );
-	}
-
-	private TypeEnvironment createEnvironment(Type context) {
-		return new TypeSwitch<TypeEnvironment>() {
-			@Override
-			public TypeEnvironment caseClass(Class classType) {
-				return CompoundTypeEnvironment.create(
-                        createSuperTypeEnvironment( classType ),
-                        getEnvironment( classType.getSuperclass() )
-                        );
-			}
-
-			@Override
-			public TypeEnvironment caseParameterizedType(ParameterizedType parameterizedType) {
-				return createEnvironment( parameterizedType );
-			}
-
-			@Override
-			public TypeEnvironment defaultCase(Type t) {
-				throw new IllegalArgumentException( "Invalid type for generating environment: " + t );
-			}
-		}.doSwitch( context );
-	}
-
-	private TypeEnvironment createSuperTypeEnvironment(Class clazz) {
-		Class superclass = clazz.getSuperclass();
-		if ( superclass == null ) {
-			return IdentityTypeEnvironment.INSTANCE;
-		}
-
-		Type[] formalArgs = superclass.getTypeParameters();
-		Type genericSuperclass = clazz.getGenericSuperclass();
-
-		if ( genericSuperclass instanceof Class ) {
-			return IdentityTypeEnvironment.INSTANCE;
-		}
-
-		if ( genericSuperclass instanceof ParameterizedType ) {
-			Type[] actualArgs = ( (ParameterizedType) genericSuperclass ).getActualTypeArguments();
-			return new SimpleTypeEnvironment( formalArgs, actualArgs );
-		}
-
-		throw new AssertionError( "Should be unreachable" );
-	}
-
-	private TypeEnvironment createEnvironment(ParameterizedType t) {
-		Type[] tactuals = t.getActualTypeArguments();
-		Type rawType = t.getRawType();
-		if ( rawType instanceof Class ) {
-			TypeVariable[] tparms = ( (Class) rawType ).getTypeParameters();
-			return new SimpleTypeEnvironment( tparms, tactuals );
-		}
-		return IdentityTypeEnvironment.INSTANCE;
-	}
-}

Copied: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/TypeEnvironmentFactory.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/TypeEnvironmentFactory.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/TypeEnvironmentFactory.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/TypeEnvironmentFactory.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,95 @@
+package org.hibernate.annotations.common.reflection.java.generics;
+
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+import java.lang.reflect.TypeVariable;
+
+/**
+ * Returns the type context for a given <code>Class</code> or <code>ParameterizedType</code>.
+ * <p/>
+ * Does not support bindings involving inner classes, nor upper/lower bounds.
+ *
+ * @author Davide Marchignoli
+ * @author Paolo Perrotta
+ */
+public class TypeEnvironmentFactory {
+
+	/**
+	 * @return Returns a type environment suitable for resolving types occurring
+	 *         in subclasses of the context class.
+	 */
+	public TypeEnvironment getEnvironment(Class context) {
+		if ( context == null ) {
+        	return IdentityTypeEnvironment.INSTANCE;
+        }
+        return createEnvironment( context );
+	}
+
+	public TypeEnvironment getEnvironment(Type context) {
+		if ( context == null ) {
+        	return IdentityTypeEnvironment.INSTANCE;
+        }
+        return createEnvironment( context );
+	}
+
+	public TypeEnvironment getEnvironment(Type t, TypeEnvironment context) {
+		return CompoundTypeEnvironment.create( getEnvironment(t), context );
+	}
+
+	public TypeEnvironment toApproximatingEnvironment(TypeEnvironment context) {
+		return CompoundTypeEnvironment.create( new ApproximatingTypeEnvironment(), context );
+	}
+
+	private TypeEnvironment createEnvironment(Type context) {
+		return new TypeSwitch<TypeEnvironment>() {
+			@Override
+			public TypeEnvironment caseClass(Class classType) {
+				return CompoundTypeEnvironment.create(
+                        createSuperTypeEnvironment( classType ),
+                        getEnvironment( classType.getSuperclass() )
+                        );
+			}
+
+			@Override
+			public TypeEnvironment caseParameterizedType(ParameterizedType parameterizedType) {
+				return createEnvironment( parameterizedType );
+			}
+
+			@Override
+			public TypeEnvironment defaultCase(Type t) {
+				throw new IllegalArgumentException( "Invalid type for generating environment: " + t );
+			}
+		}.doSwitch( context );
+	}
+
+	private TypeEnvironment createSuperTypeEnvironment(Class clazz) {
+		Class superclass = clazz.getSuperclass();
+		if ( superclass == null ) {
+			return IdentityTypeEnvironment.INSTANCE;
+		}
+
+		Type[] formalArgs = superclass.getTypeParameters();
+		Type genericSuperclass = clazz.getGenericSuperclass();
+
+		if ( genericSuperclass instanceof Class ) {
+			return IdentityTypeEnvironment.INSTANCE;
+		}
+
+		if ( genericSuperclass instanceof ParameterizedType ) {
+			Type[] actualArgs = ( (ParameterizedType) genericSuperclass ).getActualTypeArguments();
+			return new SimpleTypeEnvironment( formalArgs, actualArgs );
+		}
+
+		throw new AssertionError( "Should be unreachable" );
+	}
+
+	private TypeEnvironment createEnvironment(ParameterizedType t) {
+		Type[] tactuals = t.getActualTypeArguments();
+		Type rawType = t.getRawType();
+		if ( rawType instanceof Class ) {
+			TypeVariable[] tparms = ( (Class) rawType ).getTypeParameters();
+			return new SimpleTypeEnvironment( tparms, tactuals );
+		}
+		return IdentityTypeEnvironment.INSTANCE;
+	}
+}

Deleted: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/TypeFactory.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/TypeFactory.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/TypeFactory.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,100 +0,0 @@
-package org.hibernate.annotations.common.reflection.java.generics;
-
-import java.lang.reflect.Array;
-import java.lang.reflect.GenericArrayType;
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-import java.util.Arrays;
-
-/**
- * This class instances our own <code>ParameterizedTypes</code> and <code>GenericArrayTypes</code>.
- * These are not supposed to be mixed with Java's implementations - beware of
- * equality/identity problems.
- *
- * @author Paolo Perrotta
- */
-class TypeFactory {
-
-	static ParameterizedType createParameterizedType(
-			final Type rawType, final Type[] substTypeArgs,
-			final Type ownerType
-	) {
-		return new ParameterizedType() {
-
-			public Type[] getActualTypeArguments() {
-				return substTypeArgs;
-			}
-
-			public Type getRawType() {
-				return rawType;
-			}
-
-			public Type getOwnerType() {
-				return ownerType;
-			}
-
-			@Override
-			public boolean equals(Object obj) {
-				if ( !( obj instanceof ParameterizedType ) ) {
-					return false;
-				}
-				ParameterizedType other = (ParameterizedType) obj;
-				return Arrays.equals( getActualTypeArguments(), other.getActualTypeArguments() )
-						&& safeEquals( getRawType(), other.getRawType() ) && safeEquals(
-						getOwnerType(), other.getOwnerType()
-				);
-			}
-
-			@Override
-			public int hashCode() {
-				return safeHashCode( getActualTypeArguments() ) ^ safeHashCode( getRawType() ) ^ safeHashCode(
-						getOwnerType()
-				);
-			}
-		};
-	}
-
-	static Type createArrayType(Type componentType) {
-		if ( componentType instanceof Class ) {
-			return Array.newInstance( (Class) componentType, 0 ).getClass();
-		}
-		return TypeFactory.createGenericArrayType( componentType );
-	}
-
-	private static GenericArrayType createGenericArrayType(final Type componentType) {
-		return new GenericArrayType() {
-
-			public Type getGenericComponentType() {
-				return componentType;
-			}
-
-			@Override
-			public boolean equals(Object obj) {
-				if ( !( obj instanceof GenericArrayType ) ) {
-					return false;
-				}
-				GenericArrayType other = (GenericArrayType) obj;
-				return safeEquals( getGenericComponentType(), other.getGenericComponentType() );
-			}
-
-			@Override
-			public int hashCode() {
-				return safeHashCode( getGenericComponentType() );
-			}
-		};
-	}
-
-	private static boolean safeEquals(Type t1, Type t2) {
-		if ( t1 == null ) {
-			return t2 == null;
-		}
-		return t1.equals( t2 );
-	}
-
-	private static int safeHashCode(Object o) {
-		if ( o == null ) {
-			return 1;
-		}
-		return o.hashCode();
-	}
-}
\ No newline at end of file

Copied: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/TypeFactory.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/TypeFactory.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/TypeFactory.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/TypeFactory.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,100 @@
+package org.hibernate.annotations.common.reflection.java.generics;
+
+import java.lang.reflect.Array;
+import java.lang.reflect.GenericArrayType;
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+import java.util.Arrays;
+
+/**
+ * This class instances our own <code>ParameterizedTypes</code> and <code>GenericArrayTypes</code>.
+ * These are not supposed to be mixed with Java's implementations - beware of
+ * equality/identity problems.
+ *
+ * @author Paolo Perrotta
+ */
+class TypeFactory {
+
+	static ParameterizedType createParameterizedType(
+			final Type rawType, final Type[] substTypeArgs,
+			final Type ownerType
+	) {
+		return new ParameterizedType() {
+
+			public Type[] getActualTypeArguments() {
+				return substTypeArgs;
+			}
+
+			public Type getRawType() {
+				return rawType;
+			}
+
+			public Type getOwnerType() {
+				return ownerType;
+			}
+
+			@Override
+			public boolean equals(Object obj) {
+				if ( !( obj instanceof ParameterizedType ) ) {
+					return false;
+				}
+				ParameterizedType other = (ParameterizedType) obj;
+				return Arrays.equals( getActualTypeArguments(), other.getActualTypeArguments() )
+						&& safeEquals( getRawType(), other.getRawType() ) && safeEquals(
+						getOwnerType(), other.getOwnerType()
+				);
+			}
+
+			@Override
+			public int hashCode() {
+				return safeHashCode( getActualTypeArguments() ) ^ safeHashCode( getRawType() ) ^ safeHashCode(
+						getOwnerType()
+				);
+			}
+		};
+	}
+
+	static Type createArrayType(Type componentType) {
+		if ( componentType instanceof Class ) {
+			return Array.newInstance( (Class) componentType, 0 ).getClass();
+		}
+		return TypeFactory.createGenericArrayType( componentType );
+	}
+
+	private static GenericArrayType createGenericArrayType(final Type componentType) {
+		return new GenericArrayType() {
+
+			public Type getGenericComponentType() {
+				return componentType;
+			}
+
+			@Override
+			public boolean equals(Object obj) {
+				if ( !( obj instanceof GenericArrayType ) ) {
+					return false;
+				}
+				GenericArrayType other = (GenericArrayType) obj;
+				return safeEquals( getGenericComponentType(), other.getGenericComponentType() );
+			}
+
+			@Override
+			public int hashCode() {
+				return safeHashCode( getGenericComponentType() );
+			}
+		};
+	}
+
+	private static boolean safeEquals(Type t1, Type t2) {
+		if ( t1 == null ) {
+			return t2 == null;
+		}
+		return t1.equals( t2 );
+	}
+
+	private static int safeHashCode(Object o) {
+		if ( o == null ) {
+			return 1;
+		}
+		return o.hashCode();
+	}
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/TypeSwitch.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/TypeSwitch.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/TypeSwitch.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,59 +0,0 @@
-package org.hibernate.annotations.common.reflection.java.generics;
-
-import java.lang.reflect.GenericArrayType;
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-import java.lang.reflect.TypeVariable;
-import java.lang.reflect.WildcardType;
-
-/**
- * A visitor for the <code>java.lang.reflect.Type</code> hierarchy.
- *
- * @author Davide Marchignoli
- * @author Paolo Perrotta
- */
-public class TypeSwitch<T> {
-
-	public final T doSwitch(Type type) {
-		if ( type instanceof Class ) {
-			return caseClass( (Class) type );
-		}
-		if ( type instanceof GenericArrayType ) {
-			return caseGenericArrayType( (GenericArrayType) type );
-		}
-		if ( type instanceof ParameterizedType ) {
-			return caseParameterizedType( (ParameterizedType) type );
-		}
-		if ( type instanceof TypeVariable ) {
-			return caseTypeVariable( (TypeVariable) type );
-		}
-		if ( type instanceof WildcardType ) {
-			return caseWildcardType( (WildcardType) type );
-		}
-		return defaultCase( type );
-	}
-
-	public T caseWildcardType(WildcardType wildcardType) {
-		return defaultCase( wildcardType );
-	}
-
-	public T caseTypeVariable(TypeVariable typeVariable) {
-		return defaultCase( typeVariable );
-	}
-
-	public T caseClass(Class classType) {
-		return defaultCase( classType );
-	}
-
-	public T caseGenericArrayType(GenericArrayType genericArrayType) {
-		return defaultCase( genericArrayType );
-	}
-
-	public T caseParameterizedType(ParameterizedType parameterizedType) {
-		return defaultCase( parameterizedType );
-	}
-
-	public T defaultCase(Type t) {
-		return null;
-	}
-}

Copied: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/TypeSwitch.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/TypeSwitch.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/TypeSwitch.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/TypeSwitch.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,59 @@
+package org.hibernate.annotations.common.reflection.java.generics;
+
+import java.lang.reflect.GenericArrayType;
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+import java.lang.reflect.TypeVariable;
+import java.lang.reflect.WildcardType;
+
+/**
+ * A visitor for the <code>java.lang.reflect.Type</code> hierarchy.
+ *
+ * @author Davide Marchignoli
+ * @author Paolo Perrotta
+ */
+public class TypeSwitch<T> {
+
+	public final T doSwitch(Type type) {
+		if ( type instanceof Class ) {
+			return caseClass( (Class) type );
+		}
+		if ( type instanceof GenericArrayType ) {
+			return caseGenericArrayType( (GenericArrayType) type );
+		}
+		if ( type instanceof ParameterizedType ) {
+			return caseParameterizedType( (ParameterizedType) type );
+		}
+		if ( type instanceof TypeVariable ) {
+			return caseTypeVariable( (TypeVariable) type );
+		}
+		if ( type instanceof WildcardType ) {
+			return caseWildcardType( (WildcardType) type );
+		}
+		return defaultCase( type );
+	}
+
+	public T caseWildcardType(WildcardType wildcardType) {
+		return defaultCase( wildcardType );
+	}
+
+	public T caseTypeVariable(TypeVariable typeVariable) {
+		return defaultCase( typeVariable );
+	}
+
+	public T caseClass(Class classType) {
+		return defaultCase( classType );
+	}
+
+	public T caseGenericArrayType(GenericArrayType genericArrayType) {
+		return defaultCase( genericArrayType );
+	}
+
+	public T caseParameterizedType(ParameterizedType parameterizedType) {
+		return defaultCase( parameterizedType );
+	}
+
+	public T defaultCase(Type t) {
+		return null;
+	}
+}

Deleted: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/TypeUtils.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/TypeUtils.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/TypeUtils.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,161 +0,0 @@
-package org.hibernate.annotations.common.reflection.java.generics;
-
-import java.lang.reflect.GenericArrayType;
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-import java.lang.reflect.TypeVariable;
-import java.lang.reflect.WildcardType;
-import java.util.Collection;
-
-/**
- * @author Paolo Perrotta
- */
-public class TypeUtils {
-
-	public static boolean isResolved(Type t) {
-		return new TypeSwitch<Boolean>() {
-			@Override
-			public Boolean caseClass(Class classType) {
-				return true;
-			}
-
-			@Override
-			public Boolean caseGenericArrayType(GenericArrayType genericArrayType) {
-				return isResolved( genericArrayType.getGenericComponentType() );
-			}
-
-			@Override
-			public Boolean caseParameterizedType(ParameterizedType parameterizedType) {
-				Type[] typeArgs = parameterizedType.getActualTypeArguments();
-				for ( Type arg : typeArgs ) {
-					if ( !isResolved( arg ) ) {
-						return false;
-					}
-				}
-				return isResolved( parameterizedType.getRawType() );
-			}
-
-			@Override
-			public Boolean caseTypeVariable(TypeVariable typeVariable) {
-				return false;
-			}
-
-			@Override
-			public Boolean caseWildcardType(WildcardType wildcardType) {
-				return areResolved( wildcardType.getUpperBounds() ) && areResolved( wildcardType.getLowerBounds() );
-			}
-		}.doSwitch( t );
-	}
-
-	private static Boolean areResolved(Type[] types) {
-		for ( Type t : types ) {
-			if ( !isResolved( t ) ) {
-				return false;
-			}
-		}
-		return true;
-	}
-
-	public static Class<? extends Collection> getCollectionClass(Type type) {
-		return new TypeSwitch<Class<? extends Collection>>() {
-			@Override
-			public Class<? extends Collection> caseClass(Class clazz) {
-				return isCollectionClass( clazz ) ? (Class<? extends Collection>) clazz : null;
-			}
-
-			@Override
-			public Class<? extends Collection> caseParameterizedType(ParameterizedType parameterizedType) {
-				return getCollectionClass( (Class) parameterizedType.getRawType() );
-			}
-
-			@Override
-			public Class<? extends Collection> caseWildcardType(WildcardType wildcardType) {
-				Type[] upperBounds = wildcardType.getUpperBounds();
-				if ( upperBounds.length == 0 ) {
-					return null;
-				}
-				return getCollectionClass( upperBounds[0] );
-			}
-
-			@Override
-			public Class<? extends Collection> defaultCase(Type t) {
-				return null;
-			}
-		}.doSwitch( type );
-	}
-
-	private static boolean isCollectionClass(Class<?> clazz) {
-		return clazz == Collection.class
-				|| clazz == java.util.List.class
-				|| clazz == java.util.Set.class
-				|| clazz == java.util.Map.class
-				|| clazz == java.util.SortedSet.class // extension to the specs
-				|| clazz == java.util.SortedMap.class; // extension to the specs
-	}
-
-	public static boolean isSimple(Type type) {
-		return new TypeSwitch<Boolean>() {
-			@Override
-			public Boolean caseClass(Class clazz) {
-				return !clazz.isArray() && !isCollectionClass( clazz );// hum probably not fully accurate
-				//return classType != void.class;
-			}
-
-			@Override
-			public Boolean caseParameterizedType(ParameterizedType parameterizedType) {
-				for ( Type actualTypeArgument : parameterizedType.getActualTypeArguments() ) {
-					if ( !isSimple( actualTypeArgument ) ) {
-						return false;
-					}
-				}
-				return true;
-			}
-
-			@Override
-			public Boolean caseWildcardType(WildcardType wildcardType) {
-				return areSimple( wildcardType.getUpperBounds() ) && areSimple( wildcardType.getLowerBounds() );
-			}
-
-			@Override
-			public Boolean defaultCase(Type t) {
-				return false;
-			}
-		}.doSwitch( type );
-	}
-
-	private static Boolean areSimple(Type[] types) {
-		for ( Type t : types ) {
-			if ( !isSimple( t ) ) {
-				return false;
-			}
-		}
-		return true;
-	}
-
-	public static boolean isVoid(Type type) {
-		return void.class.equals( type );
-	}
-
-	public static boolean isArray(Type t) {
-		return new TypeSwitch<Boolean>() {
-			@Override
-			public Boolean caseClass(Class clazz) {
-				return clazz.isArray();
-			}
-
-			@Override
-			public Boolean caseGenericArrayType(GenericArrayType genericArrayType) {
-				return isSimple( genericArrayType.getGenericComponentType() );
-			}
-
-			@Override
-			public Boolean defaultCase(Type type) {
-				return false;
-			}
-		}.doSwitch( t );
-	}
-
-	public static boolean isCollection(Type t) {
-		return getCollectionClass( t ) != null;
-	}
-}

Copied: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/TypeUtils.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/TypeUtils.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/TypeUtils.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/reflection/java/generics/TypeUtils.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,161 @@
+package org.hibernate.annotations.common.reflection.java.generics;
+
+import java.lang.reflect.GenericArrayType;
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+import java.lang.reflect.TypeVariable;
+import java.lang.reflect.WildcardType;
+import java.util.Collection;
+
+/**
+ * @author Paolo Perrotta
+ */
+public class TypeUtils {
+
+	public static boolean isResolved(Type t) {
+		return new TypeSwitch<Boolean>() {
+			@Override
+			public Boolean caseClass(Class classType) {
+				return true;
+			}
+
+			@Override
+			public Boolean caseGenericArrayType(GenericArrayType genericArrayType) {
+				return isResolved( genericArrayType.getGenericComponentType() );
+			}
+
+			@Override
+			public Boolean caseParameterizedType(ParameterizedType parameterizedType) {
+				Type[] typeArgs = parameterizedType.getActualTypeArguments();
+				for ( Type arg : typeArgs ) {
+					if ( !isResolved( arg ) ) {
+						return false;
+					}
+				}
+				return isResolved( parameterizedType.getRawType() );
+			}
+
+			@Override
+			public Boolean caseTypeVariable(TypeVariable typeVariable) {
+				return false;
+			}
+
+			@Override
+			public Boolean caseWildcardType(WildcardType wildcardType) {
+				return areResolved( wildcardType.getUpperBounds() ) && areResolved( wildcardType.getLowerBounds() );
+			}
+		}.doSwitch( t );
+	}
+
+	private static Boolean areResolved(Type[] types) {
+		for ( Type t : types ) {
+			if ( !isResolved( t ) ) {
+				return false;
+			}
+		}
+		return true;
+	}
+
+	public static Class<? extends Collection> getCollectionClass(Type type) {
+		return new TypeSwitch<Class<? extends Collection>>() {
+			@Override
+			public Class<? extends Collection> caseClass(Class clazz) {
+				return isCollectionClass( clazz ) ? (Class<? extends Collection>) clazz : null;
+			}
+
+			@Override
+			public Class<? extends Collection> caseParameterizedType(ParameterizedType parameterizedType) {
+				return getCollectionClass( (Class) parameterizedType.getRawType() );
+			}
+
+			@Override
+			public Class<? extends Collection> caseWildcardType(WildcardType wildcardType) {
+				Type[] upperBounds = wildcardType.getUpperBounds();
+				if ( upperBounds.length == 0 ) {
+					return null;
+				}
+				return getCollectionClass( upperBounds[0] );
+			}
+
+			@Override
+			public Class<? extends Collection> defaultCase(Type t) {
+				return null;
+			}
+		}.doSwitch( type );
+	}
+
+	private static boolean isCollectionClass(Class<?> clazz) {
+		return clazz == Collection.class
+				|| clazz == java.util.List.class
+				|| clazz == java.util.Set.class
+				|| clazz == java.util.Map.class
+				|| clazz == java.util.SortedSet.class // extension to the specs
+				|| clazz == java.util.SortedMap.class; // extension to the specs
+	}
+
+	public static boolean isSimple(Type type) {
+		return new TypeSwitch<Boolean>() {
+			@Override
+			public Boolean caseClass(Class clazz) {
+				return !clazz.isArray() && !isCollectionClass( clazz );// hum probably not fully accurate
+				//return classType != void.class;
+			}
+
+			@Override
+			public Boolean caseParameterizedType(ParameterizedType parameterizedType) {
+				for ( Type actualTypeArgument : parameterizedType.getActualTypeArguments() ) {
+					if ( !isSimple( actualTypeArgument ) ) {
+						return false;
+					}
+				}
+				return true;
+			}
+
+			@Override
+			public Boolean caseWildcardType(WildcardType wildcardType) {
+				return areSimple( wildcardType.getUpperBounds() ) && areSimple( wildcardType.getLowerBounds() );
+			}
+
+			@Override
+			public Boolean defaultCase(Type t) {
+				return false;
+			}
+		}.doSwitch( type );
+	}
+
+	private static Boolean areSimple(Type[] types) {
+		for ( Type t : types ) {
+			if ( !isSimple( t ) ) {
+				return false;
+			}
+		}
+		return true;
+	}
+
+	public static boolean isVoid(Type type) {
+		return void.class.equals( type );
+	}
+
+	public static boolean isArray(Type t) {
+		return new TypeSwitch<Boolean>() {
+			@Override
+			public Boolean caseClass(Class clazz) {
+				return clazz.isArray();
+			}
+
+			@Override
+			public Boolean caseGenericArrayType(GenericArrayType genericArrayType) {
+				return isSimple( genericArrayType.getGenericComponentType() );
+			}
+
+			@Override
+			public Boolean defaultCase(Type type) {
+				return false;
+			}
+		}.doSwitch( t );
+	}
+
+	public static boolean isCollection(Type t) {
+		return getCollectionClass( t ) != null;
+	}
+}

Copied: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/util (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/util)

Deleted: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/util/ReflectHelper.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/util/ReflectHelper.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/util/ReflectHelper.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,122 +0,0 @@
-//$Id: $
-package org.hibernate.annotations.common.util;
-
-import java.lang.reflect.Method;
-import java.lang.reflect.Member;
-import java.lang.reflect.Modifier;
-
-import org.hibernate.annotations.common.AssertionFailure;
-
-/**
- * @author Emmanuel Bernard
- */
-
-public final class ReflectHelper {
-
-	private static final Class[] OBJECT = new Class[] { Object.class };
-	private static final Method OBJECT_EQUALS;
-	private static final Class[] NO_PARAM = new Class[] { };
-
-	private static final Method OBJECT_HASHCODE;
-	static {
-		Method eq;
-		Method hash;
-		try {
-			eq = Object.class.getMethod("equals", OBJECT);
-			hash = Object.class.getMethod("hashCode", NO_PARAM);
-		}
-		catch (Exception e) {
-			throw new AssertionFailure("Could not find Object.equals() or Object.hashCode()", e);
-		}
-		OBJECT_EQUALS = eq;
-		OBJECT_HASHCODE = hash;
-	}
-
-	public static boolean overridesEquals(Class clazz) {
-		Method equals;
-		try {
-			equals = clazz.getMethod("equals", OBJECT);
-		}
-		catch (NoSuchMethodException nsme) {
-			return false; //its an interface so we can't really tell anything...
-		}
-		return !OBJECT_EQUALS.equals(equals);
-	}
-
-	public static boolean overridesHashCode(Class clazz) {
-		Method hashCode;
-		try {
-			hashCode = clazz.getMethod("hashCode", NO_PARAM);
-		}
-		catch (NoSuchMethodException nsme) {
-			return false; //its an interface so we can't really tell anything...
-		}
-		return !OBJECT_HASHCODE.equals(hashCode);
-	}
-
-	public static Class classForName(String name) throws ClassNotFoundException {
-		try {
-			ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
-			if ( contextClassLoader != null ) {
-				return contextClassLoader.loadClass(name);
-			}
-		}
-		catch ( Throwable t ) {
-		}
-		return Class.forName( name );
-	}
-
-	public static Class classForName(String name, Class caller) throws ClassNotFoundException {
-		try {
-			ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
-			if ( contextClassLoader != null ) {
-				return contextClassLoader.loadClass( name );
-			}
-		}
-		catch ( Throwable e ) {
-		}
-		return Class.forName( name, true, caller.getClassLoader() );
-	}
-
-	public static boolean isPublic(Class clazz, Member member) {
-		return Modifier.isPublic( member.getModifiers() ) && Modifier.isPublic( clazz.getModifiers() );
-	}
-
-	public static Object getConstantValue(String name) {
-		Class clazz;
-		try {
-			clazz = classForName( StringHelper.qualifier( name ) );
-		}
-		catch ( Throwable t ) {
-			return null;
-		}
-		try {
-			return clazz.getField( StringHelper.unqualify( name ) ).get(null);
-		}
-		catch ( Throwable t ) {
-			return null;
-		}
-	}
-
-	public static boolean isAbstractClass(Class clazz) {
-		int modifier = clazz.getModifiers();
-		return Modifier.isAbstract(modifier) || Modifier.isInterface(modifier);
-	}
-
-	public static boolean isFinalClass(Class clazz) {
-		return Modifier.isFinal( clazz.getModifiers() );
-	}
-
-	public static Method getMethod(Class clazz, Method method) {
-		try {
-			return clazz.getMethod( method.getName(), method.getParameterTypes() );
-		}
-		catch (Exception e) {
-			return null;
-		}
-	}
-
-	private ReflectHelper() {}
-
-}
-

Copied: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/util/ReflectHelper.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/util/ReflectHelper.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/util/ReflectHelper.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/util/ReflectHelper.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,122 @@
+//$Id: $
+package org.hibernate.annotations.common.util;
+
+import java.lang.reflect.Method;
+import java.lang.reflect.Member;
+import java.lang.reflect.Modifier;
+
+import org.hibernate.annotations.common.AssertionFailure;
+
+/**
+ * @author Emmanuel Bernard
+ */
+
+public final class ReflectHelper {
+
+	private static final Class[] OBJECT = new Class[] { Object.class };
+	private static final Method OBJECT_EQUALS;
+	private static final Class[] NO_PARAM = new Class[] { };
+
+	private static final Method OBJECT_HASHCODE;
+	static {
+		Method eq;
+		Method hash;
+		try {
+			eq = Object.class.getMethod("equals", OBJECT);
+			hash = Object.class.getMethod("hashCode", NO_PARAM);
+		}
+		catch (Exception e) {
+			throw new AssertionFailure("Could not find Object.equals() or Object.hashCode()", e);
+		}
+		OBJECT_EQUALS = eq;
+		OBJECT_HASHCODE = hash;
+	}
+
+	public static boolean overridesEquals(Class clazz) {
+		Method equals;
+		try {
+			equals = clazz.getMethod("equals", OBJECT);
+		}
+		catch (NoSuchMethodException nsme) {
+			return false; //its an interface so we can't really tell anything...
+		}
+		return !OBJECT_EQUALS.equals(equals);
+	}
+
+	public static boolean overridesHashCode(Class clazz) {
+		Method hashCode;
+		try {
+			hashCode = clazz.getMethod("hashCode", NO_PARAM);
+		}
+		catch (NoSuchMethodException nsme) {
+			return false; //its an interface so we can't really tell anything...
+		}
+		return !OBJECT_HASHCODE.equals(hashCode);
+	}
+
+	public static Class classForName(String name) throws ClassNotFoundException {
+		try {
+			ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
+			if ( contextClassLoader != null ) {
+				return contextClassLoader.loadClass(name);
+			}
+		}
+		catch ( Throwable t ) {
+		}
+		return Class.forName( name );
+	}
+
+	public static Class classForName(String name, Class caller) throws ClassNotFoundException {
+		try {
+			ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
+			if ( contextClassLoader != null ) {
+				return contextClassLoader.loadClass( name );
+			}
+		}
+		catch ( Throwable e ) {
+		}
+		return Class.forName( name, true, caller.getClassLoader() );
+	}
+
+	public static boolean isPublic(Class clazz, Member member) {
+		return Modifier.isPublic( member.getModifiers() ) && Modifier.isPublic( clazz.getModifiers() );
+	}
+
+	public static Object getConstantValue(String name) {
+		Class clazz;
+		try {
+			clazz = classForName( StringHelper.qualifier( name ) );
+		}
+		catch ( Throwable t ) {
+			return null;
+		}
+		try {
+			return clazz.getField( StringHelper.unqualify( name ) ).get(null);
+		}
+		catch ( Throwable t ) {
+			return null;
+		}
+	}
+
+	public static boolean isAbstractClass(Class clazz) {
+		int modifier = clazz.getModifiers();
+		return Modifier.isAbstract(modifier) || Modifier.isInterface(modifier);
+	}
+
+	public static boolean isFinalClass(Class clazz) {
+		return Modifier.isFinal( clazz.getModifiers() );
+	}
+
+	public static Method getMethod(Class clazz, Method method) {
+		try {
+			return clazz.getMethod( method.getName(), method.getParameterTypes() );
+		}
+		catch (Exception e) {
+			return null;
+		}
+	}
+
+	private ReflectHelper() {}
+
+}
+

Deleted: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/util/StringHelper.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/util/StringHelper.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/util/StringHelper.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,431 +0,0 @@
-//$Id: $
-package org.hibernate.annotations.common.util;
-
-import java.util.Iterator;
-import java.util.StringTokenizer;
-import java.util.ArrayList;
-import java.util.Collection;
-
-/**
- * @author Emmanuel Bernard
- */
-//TODO copy from Hibernate Core, mutualization?
-public final class StringHelper {
-
-	private static final int ALIAS_TRUNCATE_LENGTH = 10;
-	public static final String WHITESPACE = " \n\r\f\t";
-
-	private StringHelper() { /* static methods only - hide constructor */
-	}
-
-	/*public static boolean containsDigits(String string) {
-		for ( int i=0; i<string.length(); i++ ) {
-			if ( Character.isDigit( string.charAt(i) ) ) return true;
-		}
-		return false;
-	}*/
-
-	public static int lastIndexOfLetter(String string) {
-		for ( int i=0; i<string.length(); i++ ) {
-			char character = string.charAt(i);
-			if ( !Character.isLetter(character) /*&& !('_'==character)*/ ) return i-1;
-		}
-		return string.length()-1;
-	}
-
-	public static String join(String seperator, String[] strings) {
-		int length = strings.length;
-		if ( length == 0 ) return "";
-		StringBuffer buf = new StringBuffer( length * strings[0].length() )
-				.append( strings[0] );
-		for ( int i = 1; i < length; i++ ) {
-			buf.append( seperator ).append( strings[i] );
-		}
-		return buf.toString();
-	}
-
-	public static String join(String seperator, Iterator objects) {
-		StringBuffer buf = new StringBuffer();
-		if ( objects.hasNext() ) buf.append( objects.next() );
-		while ( objects.hasNext() ) {
-			buf.append( seperator ).append( objects.next() );
-		}
-		return buf.toString();
-	}
-
-	public static String[] add(String[] x, String sep, String[] y) {
-		String[] result = new String[x.length];
-		for ( int i = 0; i < x.length; i++ ) {
-			result[i] = x[i] + sep + y[i];
-		}
-		return result;
-	}
-
-	public static String repeat(String string, int times) {
-		StringBuffer buf = new StringBuffer( string.length() * times );
-		for ( int i = 0; i < times; i++ ) buf.append( string );
-		return buf.toString();
-	}
-
-
-	public static String replace(String template, String placeholder, String replacement) {
-		return replace( template, placeholder, replacement, false );
-	}
-
-	public static String[] replace(String templates[], String placeholder, String replacement) {
-		String[] result = new String[templates.length];
-		for ( int i =0; i<templates.length; i++ ) {
-			result[i] = replace( templates[i], placeholder, replacement );;
-		}
-		return result;
-	}
-
-	public static String replace(String template, String placeholder, String replacement, boolean wholeWords) {
-		int loc = template == null ? -1 : template.indexOf( placeholder );
-		if ( loc < 0 ) {
-			return template;
-		}
-		else {
-			final boolean actuallyReplace = !wholeWords ||
-					loc + placeholder.length() == template.length() ||
-					!Character.isJavaIdentifierPart( template.charAt( loc + placeholder.length() ) );
-			String actualReplacement = actuallyReplace ? replacement : placeholder;
-			return new StringBuffer( template.substring( 0, loc ) )
-					.append( actualReplacement )
-					.append( replace( template.substring( loc + placeholder.length() ),
-							placeholder,
-							replacement,
-							wholeWords ) ).toString();
-		}
-	}
-
-
-	public static String replaceOnce(String template, String placeholder, String replacement) {
-        int loc = template == null ? -1 : template.indexOf( placeholder );
-		if ( loc < 0 ) {
-			return template;
-		}
-		else {
-			return new StringBuffer( template.substring( 0, loc ) )
-					.append( replacement )
-					.append( template.substring( loc + placeholder.length() ) )
-					.toString();
-		}
-	}
-
-
-	public static String[] split(String seperators, String list) {
-		return split( seperators, list, false );
-	}
-
-	public static String[] split(String seperators, String list, boolean include) {
-		StringTokenizer tokens = new StringTokenizer( list, seperators, include );
-		String[] result = new String[ tokens.countTokens() ];
-		int i = 0;
-		while ( tokens.hasMoreTokens() ) {
-			result[i++] = tokens.nextToken();
-		}
-		return result;
-	}
-
-	public static String unqualify(String qualifiedName) {
-		int loc = qualifiedName.lastIndexOf(".");
-		return ( loc < 0 ) ? qualifiedName : qualifiedName.substring( qualifiedName.lastIndexOf(".") + 1 );
-	}
-
-	public static String qualifier(String qualifiedName) {
-		int loc = qualifiedName.lastIndexOf(".");
-		return ( loc < 0 ) ? "" : qualifiedName.substring( 0, loc );
-	}
-
-	public static String[] suffix(String[] columns, String suffix) {
-		if ( suffix == null ) return columns;
-		String[] qualified = new String[columns.length];
-		for ( int i = 0; i < columns.length; i++ ) {
-			qualified[i] = suffix( columns[i], suffix );
-		}
-		return qualified;
-	}
-
-	private static String suffix(String name, String suffix) {
-		return ( suffix == null ) ? name : name + suffix;
-	}
-
-	public static String root(String qualifiedName) {
-		int loc = qualifiedName.indexOf( "." );
-		return ( loc < 0 ) ? qualifiedName : qualifiedName.substring( 0, loc );
-	}
-
-	public static String unroot(String qualifiedName) {
-		int loc = qualifiedName.indexOf( "." );
-		return ( loc < 0 ) ? qualifiedName : qualifiedName.substring( loc+1, qualifiedName.length() );
-	}
-
-	public static boolean booleanValue(String tfString) {
-		String trimmed = tfString.trim().toLowerCase();
-		return trimmed.equals( "true" ) || trimmed.equals( "t" );
-	}
-
-	public static String toString(Object[] array) {
-		int len = array.length;
-		if ( len == 0 ) return "";
-		StringBuffer buf = new StringBuffer( len * 12 );
-		for ( int i = 0; i < len - 1; i++ ) {
-			buf.append( array[i] ).append(", ");
-		}
-		return buf.append( array[len - 1] ).toString();
-	}
-
-	public static String[] multiply(String string, Iterator placeholders, Iterator replacements) {
-		String[] result = new String[]{string};
-		while ( placeholders.hasNext() ) {
-			result = multiply( result, ( String ) placeholders.next(), ( String[] ) replacements.next() );
-		}
-		return result;
-	}
-
-	private static String[] multiply(String[] strings, String placeholder, String[] replacements) {
-		String[] results = new String[replacements.length * strings.length];
-		int n = 0;
-		for ( int i = 0; i < replacements.length; i++ ) {
-			for ( int j = 0; j < strings.length; j++ ) {
-				results[n++] = replaceOnce( strings[j], placeholder, replacements[i] );
-			}
-		}
-		return results;
-	}
-
-	public static int countUnquoted(String string, char character) {
-		if ( '\'' == character ) {
-			throw new IllegalArgumentException( "Unquoted count of quotes is invalid" );
-		}
-		if (string == null)
-			return 0;
-		// Impl note: takes advantage of the fact that an escpaed single quote
-		// embedded within a quote-block can really be handled as two seperate
-		// quote-blocks for the purposes of this method...
-		int count = 0;
-		int stringLength = string.length();
-		boolean inQuote = false;
-		for ( int indx = 0; indx < stringLength; indx++ ) {
-			char c = string.charAt( indx );
-			if ( inQuote ) {
-				if ( '\'' == c ) {
-					inQuote = false;
-				}
-			}
-			else if ( '\'' == c ) {
-				inQuote = true;
-			}
-			else if ( c == character ) {
-				count++;
-			}
-		}
-		return count;
-	}
-
-	public static int[] locateUnquoted(String string, char character) {
-		if ( '\'' == character ) {
-			throw new IllegalArgumentException( "Unquoted count of quotes is invalid" );
-		}
-		if (string == null) {
-			return new int[0];
-		}
-
-		ArrayList locations = new ArrayList( 20 );
-
-		// Impl note: takes advantage of the fact that an escpaed single quote
-		// embedded within a quote-block can really be handled as two seperate
-		// quote-blocks for the purposes of this method...
-		int stringLength = string.length();
-		boolean inQuote = false;
-		for ( int indx = 0; indx < stringLength; indx++ ) {
-			char c = string.charAt( indx );
-			if ( inQuote ) {
-				if ( '\'' == c ) {
-					inQuote = false;
-				}
-			}
-			else if ( '\'' == c ) {
-				inQuote = true;
-			}
-			else if ( c == character ) {
-				locations.add( new Integer( indx ) );
-			}
-		}
-		return toIntArray( locations );
-	}
-
-	public static boolean isNotEmpty(String string) {
-		return string != null && string.length() > 0;
-	}
-
-	public static boolean isEmpty(String string) {
-		return string == null || string.length() == 0;
-	}
-
-	public static String qualify(String prefix, String name) {
-		if ( name == null || prefix == null ) {
-			throw new NullPointerException();
-		}
-		return new StringBuffer( prefix.length() + name.length() + 1 )
-				.append(prefix)
-				.append('.')
-				.append(name)
-				.toString();
-	}
-
-	public static String[] qualify(String prefix, String[] names) {
-		if ( prefix == null ) return names;
-		int len = names.length;
-		String[] qualified = new String[len];
-		for ( int i = 0; i < len; i++ ) {
-			qualified[i] = qualify( prefix, names[i] );
-		}
-		return qualified;
-	}
-
-	public static int firstIndexOfChar(String sqlString, String string, int startindex) {
-		int matchAt = -1;
-		for ( int i = 0; i < string.length(); i++ ) {
-			int curMatch = sqlString.indexOf( string.charAt( i ), startindex );
-			if ( curMatch >= 0 ) {
-				if ( matchAt == -1 ) { // first time we find match!
-					matchAt = curMatch;
-				}
-				else {
-					matchAt = Math.min( matchAt, curMatch );
-				}
-			}
-		}
-		return matchAt;
-	}
-
-	public static String truncate(String string, int length) {
-		if ( string.length() <= length ) {
-			return string;
-		}
-		else {
-			return string.substring( 0, length );
-		}
-	}
-
-	public static String generateAlias(String description) {
-		return generateAliasRoot(description) + '_';
-	}
-
-	/**
-	 * Generate a nice alias for the given class name or collection role
-	 * name and unique integer. Subclasses of Loader do <em>not</em> have
-	 * to use aliases of this form.
-	 * @return an alias of the form <tt>foo1_</tt>
-	 */
-	public static String generateAlias(String description, int unique) {
-		return generateAliasRoot(description) +
-			Integer.toString(unique) +
-			'_';
-	}
-
-	/**
-	 * Generates a root alias by truncating the "root name" defined by
-	 * the incoming decription and removing/modifying any non-valid
-	 * alias characters.
-	 *
-	 * @param description The root name from which to generate a root alias.
-	 * @return The generated root alias.
-	 */
-	private static String generateAliasRoot(String description) {
-		String result = truncate( unqualifyEntityName(description), ALIAS_TRUNCATE_LENGTH )
-				.toLowerCase()
-		        .replace( '/', '_' ) // entityNames may now include slashes for the representations
-				.replace( '$', '_' ); //classname may be an inner class
-		result = cleanAlias( result );
-		if ( Character.isDigit( result.charAt(result.length()-1) ) ) {
-			return result + "x"; //ick!
-		}
-		else {
-			return result;
-		}
-	}
-
-	/**
-	 * Clean the generated alias by removing any non-alpha characters from the
-	 * beginning.
-	 *
-	 * @param alias The generated alias to be cleaned.
-	 * @return The cleaned alias, stripped of any leading non-alpha characters.
-	 */
-	private static String cleanAlias(String alias) {
-		char[] chars = alias.toCharArray();
-		// short cut check...
-		if ( !Character.isLetter( chars[0] ) ) {
-			for ( int i = 1; i < chars.length; i++ ) {
-				// as soon as we encounter our first letter, return the substring
-				// from that position
-				if ( Character.isLetter( chars[i] ) ) {
-					return alias.substring( i );
-				}
-			}
-		}
-		return alias;
-	}
-
-	public static String unqualifyEntityName(String entityName) {
-		String result = unqualify(entityName);
-		int slashPos = result.indexOf( '/' );
-		if ( slashPos > 0 ) {
-			result = result.substring( 0, slashPos - 1 );
-		}
-		return result;
-	}
-
-	public static String toUpperCase(String str) {
-		return str==null ? null : str.toUpperCase();
-	}
-
-	public static String toLowerCase(String str) {
-		return str==null ? null : str.toLowerCase();
-	}
-
-	public static String moveAndToBeginning(String filter) {
-		if ( filter.trim().length()>0 ){
-			filter += " and ";
-			if ( filter.startsWith(" and ") ) filter = filter.substring(4);
-		}
-		return filter;
-	}
-
-	//TODO Copy from ArrayHelper in Hibernate Core
-	public static int[] toIntArray(Collection coll) {
-		Iterator iter = coll.iterator();
-		int[] arr = new int[ coll.size() ];
-		int i=0;
-		while( iter.hasNext() ) {
-			arr[i++] = ( (Integer) iter.next() ).intValue();
-		}
-		return arr;
-	}
-
-	public static boolean isQuoted(String name) {
-		return name != null && name.length() != 0 && name.charAt( 0 ) == '`';
-	}
-
-	public static String quote(String name) {
-		if ( name == null || name.length() == 0 || isQuoted( name ) ) {
-			return name;
-		}
-		else {
-			return new StringBuilder( name.length() + 2 ).append('`').append( name ).append( '`' ).toString();
-		}
-	}
-
-	public static String unquote(String name) {
-		if ( isQuoted( name ) ) {
-			return name.substring( 1, name.length() - 1 );
-		}
-		else {
-			return name;
-		}
-	}
-
-}

Copied: trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/util/StringHelper.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/util/StringHelper.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/util/StringHelper.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/java/org/hibernate/annotations/common/util/StringHelper.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,431 @@
+//$Id: $
+package org.hibernate.annotations.common.util;
+
+import java.util.Iterator;
+import java.util.StringTokenizer;
+import java.util.ArrayList;
+import java.util.Collection;
+
+/**
+ * @author Emmanuel Bernard
+ */
+//TODO copy from Hibernate Core, mutualization?
+public final class StringHelper {
+
+	private static final int ALIAS_TRUNCATE_LENGTH = 10;
+	public static final String WHITESPACE = " \n\r\f\t";
+
+	private StringHelper() { /* static methods only - hide constructor */
+	}
+
+	/*public static boolean containsDigits(String string) {
+		for ( int i=0; i<string.length(); i++ ) {
+			if ( Character.isDigit( string.charAt(i) ) ) return true;
+		}
+		return false;
+	}*/
+
+	public static int lastIndexOfLetter(String string) {
+		for ( int i=0; i<string.length(); i++ ) {
+			char character = string.charAt(i);
+			if ( !Character.isLetter(character) /*&& !('_'==character)*/ ) return i-1;
+		}
+		return string.length()-1;
+	}
+
+	public static String join(String seperator, String[] strings) {
+		int length = strings.length;
+		if ( length == 0 ) return "";
+		StringBuffer buf = new StringBuffer( length * strings[0].length() )
+				.append( strings[0] );
+		for ( int i = 1; i < length; i++ ) {
+			buf.append( seperator ).append( strings[i] );
+		}
+		return buf.toString();
+	}
+
+	public static String join(String seperator, Iterator objects) {
+		StringBuffer buf = new StringBuffer();
+		if ( objects.hasNext() ) buf.append( objects.next() );
+		while ( objects.hasNext() ) {
+			buf.append( seperator ).append( objects.next() );
+		}
+		return buf.toString();
+	}
+
+	public static String[] add(String[] x, String sep, String[] y) {
+		String[] result = new String[x.length];
+		for ( int i = 0; i < x.length; i++ ) {
+			result[i] = x[i] + sep + y[i];
+		}
+		return result;
+	}
+
+	public static String repeat(String string, int times) {
+		StringBuffer buf = new StringBuffer( string.length() * times );
+		for ( int i = 0; i < times; i++ ) buf.append( string );
+		return buf.toString();
+	}
+
+
+	public static String replace(String template, String placeholder, String replacement) {
+		return replace( template, placeholder, replacement, false );
+	}
+
+	public static String[] replace(String templates[], String placeholder, String replacement) {
+		String[] result = new String[templates.length];
+		for ( int i =0; i<templates.length; i++ ) {
+			result[i] = replace( templates[i], placeholder, replacement );;
+		}
+		return result;
+	}
+
+	public static String replace(String template, String placeholder, String replacement, boolean wholeWords) {
+		int loc = template == null ? -1 : template.indexOf( placeholder );
+		if ( loc < 0 ) {
+			return template;
+		}
+		else {
+			final boolean actuallyReplace = !wholeWords ||
+					loc + placeholder.length() == template.length() ||
+					!Character.isJavaIdentifierPart( template.charAt( loc + placeholder.length() ) );
+			String actualReplacement = actuallyReplace ? replacement : placeholder;
+			return new StringBuffer( template.substring( 0, loc ) )
+					.append( actualReplacement )
+					.append( replace( template.substring( loc + placeholder.length() ),
+							placeholder,
+							replacement,
+							wholeWords ) ).toString();
+		}
+	}
+
+
+	public static String replaceOnce(String template, String placeholder, String replacement) {
+        int loc = template == null ? -1 : template.indexOf( placeholder );
+		if ( loc < 0 ) {
+			return template;
+		}
+		else {
+			return new StringBuffer( template.substring( 0, loc ) )
+					.append( replacement )
+					.append( template.substring( loc + placeholder.length() ) )
+					.toString();
+		}
+	}
+
+
+	public static String[] split(String seperators, String list) {
+		return split( seperators, list, false );
+	}
+
+	public static String[] split(String seperators, String list, boolean include) {
+		StringTokenizer tokens = new StringTokenizer( list, seperators, include );
+		String[] result = new String[ tokens.countTokens() ];
+		int i = 0;
+		while ( tokens.hasMoreTokens() ) {
+			result[i++] = tokens.nextToken();
+		}
+		return result;
+	}
+
+	public static String unqualify(String qualifiedName) {
+		int loc = qualifiedName.lastIndexOf(".");
+		return ( loc < 0 ) ? qualifiedName : qualifiedName.substring( qualifiedName.lastIndexOf(".") + 1 );
+	}
+
+	public static String qualifier(String qualifiedName) {
+		int loc = qualifiedName.lastIndexOf(".");
+		return ( loc < 0 ) ? "" : qualifiedName.substring( 0, loc );
+	}
+
+	public static String[] suffix(String[] columns, String suffix) {
+		if ( suffix == null ) return columns;
+		String[] qualified = new String[columns.length];
+		for ( int i = 0; i < columns.length; i++ ) {
+			qualified[i] = suffix( columns[i], suffix );
+		}
+		return qualified;
+	}
+
+	private static String suffix(String name, String suffix) {
+		return ( suffix == null ) ? name : name + suffix;
+	}
+
+	public static String root(String qualifiedName) {
+		int loc = qualifiedName.indexOf( "." );
+		return ( loc < 0 ) ? qualifiedName : qualifiedName.substring( 0, loc );
+	}
+
+	public static String unroot(String qualifiedName) {
+		int loc = qualifiedName.indexOf( "." );
+		return ( loc < 0 ) ? qualifiedName : qualifiedName.substring( loc+1, qualifiedName.length() );
+	}
+
+	public static boolean booleanValue(String tfString) {
+		String trimmed = tfString.trim().toLowerCase();
+		return trimmed.equals( "true" ) || trimmed.equals( "t" );
+	}
+
+	public static String toString(Object[] array) {
+		int len = array.length;
+		if ( len == 0 ) return "";
+		StringBuffer buf = new StringBuffer( len * 12 );
+		for ( int i = 0; i < len - 1; i++ ) {
+			buf.append( array[i] ).append(", ");
+		}
+		return buf.append( array[len - 1] ).toString();
+	}
+
+	public static String[] multiply(String string, Iterator placeholders, Iterator replacements) {
+		String[] result = new String[]{string};
+		while ( placeholders.hasNext() ) {
+			result = multiply( result, ( String ) placeholders.next(), ( String[] ) replacements.next() );
+		}
+		return result;
+	}
+
+	private static String[] multiply(String[] strings, String placeholder, String[] replacements) {
+		String[] results = new String[replacements.length * strings.length];
+		int n = 0;
+		for ( int i = 0; i < replacements.length; i++ ) {
+			for ( int j = 0; j < strings.length; j++ ) {
+				results[n++] = replaceOnce( strings[j], placeholder, replacements[i] );
+			}
+		}
+		return results;
+	}
+
+	public static int countUnquoted(String string, char character) {
+		if ( '\'' == character ) {
+			throw new IllegalArgumentException( "Unquoted count of quotes is invalid" );
+		}
+		if (string == null)
+			return 0;
+		// Impl note: takes advantage of the fact that an escpaed single quote
+		// embedded within a quote-block can really be handled as two seperate
+		// quote-blocks for the purposes of this method...
+		int count = 0;
+		int stringLength = string.length();
+		boolean inQuote = false;
+		for ( int indx = 0; indx < stringLength; indx++ ) {
+			char c = string.charAt( indx );
+			if ( inQuote ) {
+				if ( '\'' == c ) {
+					inQuote = false;
+				}
+			}
+			else if ( '\'' == c ) {
+				inQuote = true;
+			}
+			else if ( c == character ) {
+				count++;
+			}
+		}
+		return count;
+	}
+
+	public static int[] locateUnquoted(String string, char character) {
+		if ( '\'' == character ) {
+			throw new IllegalArgumentException( "Unquoted count of quotes is invalid" );
+		}
+		if (string == null) {
+			return new int[0];
+		}
+
+		ArrayList locations = new ArrayList( 20 );
+
+		// Impl note: takes advantage of the fact that an escpaed single quote
+		// embedded within a quote-block can really be handled as two seperate
+		// quote-blocks for the purposes of this method...
+		int stringLength = string.length();
+		boolean inQuote = false;
+		for ( int indx = 0; indx < stringLength; indx++ ) {
+			char c = string.charAt( indx );
+			if ( inQuote ) {
+				if ( '\'' == c ) {
+					inQuote = false;
+				}
+			}
+			else if ( '\'' == c ) {
+				inQuote = true;
+			}
+			else if ( c == character ) {
+				locations.add( new Integer( indx ) );
+			}
+		}
+		return toIntArray( locations );
+	}
+
+	public static boolean isNotEmpty(String string) {
+		return string != null && string.length() > 0;
+	}
+
+	public static boolean isEmpty(String string) {
+		return string == null || string.length() == 0;
+	}
+
+	public static String qualify(String prefix, String name) {
+		if ( name == null || prefix == null ) {
+			throw new NullPointerException();
+		}
+		return new StringBuffer( prefix.length() + name.length() + 1 )
+				.append(prefix)
+				.append('.')
+				.append(name)
+				.toString();
+	}
+
+	public static String[] qualify(String prefix, String[] names) {
+		if ( prefix == null ) return names;
+		int len = names.length;
+		String[] qualified = new String[len];
+		for ( int i = 0; i < len; i++ ) {
+			qualified[i] = qualify( prefix, names[i] );
+		}
+		return qualified;
+	}
+
+	public static int firstIndexOfChar(String sqlString, String string, int startindex) {
+		int matchAt = -1;
+		for ( int i = 0; i < string.length(); i++ ) {
+			int curMatch = sqlString.indexOf( string.charAt( i ), startindex );
+			if ( curMatch >= 0 ) {
+				if ( matchAt == -1 ) { // first time we find match!
+					matchAt = curMatch;
+				}
+				else {
+					matchAt = Math.min( matchAt, curMatch );
+				}
+			}
+		}
+		return matchAt;
+	}
+
+	public static String truncate(String string, int length) {
+		if ( string.length() <= length ) {
+			return string;
+		}
+		else {
+			return string.substring( 0, length );
+		}
+	}
+
+	public static String generateAlias(String description) {
+		return generateAliasRoot(description) + '_';
+	}
+
+	/**
+	 * Generate a nice alias for the given class name or collection role
+	 * name and unique integer. Subclasses of Loader do <em>not</em> have
+	 * to use aliases of this form.
+	 * @return an alias of the form <tt>foo1_</tt>
+	 */
+	public static String generateAlias(String description, int unique) {
+		return generateAliasRoot(description) +
+			Integer.toString(unique) +
+			'_';
+	}
+
+	/**
+	 * Generates a root alias by truncating the "root name" defined by
+	 * the incoming decription and removing/modifying any non-valid
+	 * alias characters.
+	 *
+	 * @param description The root name from which to generate a root alias.
+	 * @return The generated root alias.
+	 */
+	private static String generateAliasRoot(String description) {
+		String result = truncate( unqualifyEntityName(description), ALIAS_TRUNCATE_LENGTH )
+				.toLowerCase()
+		        .replace( '/', '_' ) // entityNames may now include slashes for the representations
+				.replace( '$', '_' ); //classname may be an inner class
+		result = cleanAlias( result );
+		if ( Character.isDigit( result.charAt(result.length()-1) ) ) {
+			return result + "x"; //ick!
+		}
+		else {
+			return result;
+		}
+	}
+
+	/**
+	 * Clean the generated alias by removing any non-alpha characters from the
+	 * beginning.
+	 *
+	 * @param alias The generated alias to be cleaned.
+	 * @return The cleaned alias, stripped of any leading non-alpha characters.
+	 */
+	private static String cleanAlias(String alias) {
+		char[] chars = alias.toCharArray();
+		// short cut check...
+		if ( !Character.isLetter( chars[0] ) ) {
+			for ( int i = 1; i < chars.length; i++ ) {
+				// as soon as we encounter our first letter, return the substring
+				// from that position
+				if ( Character.isLetter( chars[i] ) ) {
+					return alias.substring( i );
+				}
+			}
+		}
+		return alias;
+	}
+
+	public static String unqualifyEntityName(String entityName) {
+		String result = unqualify(entityName);
+		int slashPos = result.indexOf( '/' );
+		if ( slashPos > 0 ) {
+			result = result.substring( 0, slashPos - 1 );
+		}
+		return result;
+	}
+
+	public static String toUpperCase(String str) {
+		return str==null ? null : str.toUpperCase();
+	}
+
+	public static String toLowerCase(String str) {
+		return str==null ? null : str.toLowerCase();
+	}
+
+	public static String moveAndToBeginning(String filter) {
+		if ( filter.trim().length()>0 ){
+			filter += " and ";
+			if ( filter.startsWith(" and ") ) filter = filter.substring(4);
+		}
+		return filter;
+	}
+
+	//TODO Copy from ArrayHelper in Hibernate Core
+	public static int[] toIntArray(Collection coll) {
+		Iterator iter = coll.iterator();
+		int[] arr = new int[ coll.size() ];
+		int i=0;
+		while( iter.hasNext() ) {
+			arr[i++] = ( (Integer) iter.next() ).intValue();
+		}
+		return arr;
+	}
+
+	public static boolean isQuoted(String name) {
+		return name != null && name.length() != 0 && name.charAt( 0 ) == '`';
+	}
+
+	public static String quote(String name) {
+		if ( name == null || name.length() == 0 || isQuoted( name ) ) {
+			return name;
+		}
+		else {
+			return new StringBuilder( name.length() + 2 ).append('`').append( name ).append( '`' ).toString();
+		}
+	}
+
+	public static String unquote(String name) {
+		if ( isQuoted( name ) ) {
+			return name.substring( 1, name.length() - 1 );
+		}
+		else {
+			return name;
+		}
+	}
+
+}

Copied: trunk/HibernateExt/commons-annotations/src/test (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/test)

Copied: trunk/HibernateExt/commons-annotations/src/test/org (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org)

Copied: trunk/HibernateExt/commons-annotations/src/test/org/hibernate (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate)

Copied: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations)

Copied: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common)

Copied: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test)

Copied: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/annotationfactory (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/annotationfactory)

Deleted: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/annotationfactory/AnnotationFactoryTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/annotationfactory/AnnotationFactoryTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/annotationfactory/AnnotationFactoryTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,38 +0,0 @@
-package org.hibernate.annotations.common.test.annotationfactory;
-
-import junit.framework.TestCase;
-import org.hibernate.annotations.common.annotationfactory.AnnotationDescriptor;
-import org.hibernate.annotations.common.annotationfactory.AnnotationFactory;
-
-/**
- * @author Paolo Perrotta
- * @author Davide Marchignoli
- */
-public class AnnotationFactoryTest extends TestCase {
-
-	public void testCreatesProxyInstancesOfAnnotations() {
-		// Step 1: define the annotation descriptor.
-		//
-		// What you can/must do:
-		// - You can assign values with the wrong type to the annotation
-		//   elements. The code won't check that the values are the same
-		//   types as required by the Annotation interface. You will
-		//   end up receiving an exception when you access the value, though.
-		// - You must assign a value in the descriptor to all the elements
-		//   defined in the Annotation interface that do not have a default
-		//   value.
-		// - You can ignore in the descriptor those Annotation elements that
-		//   have default values, or you can set them to override their
-		//   default values.
-		AnnotationDescriptor descriptor = new AnnotationDescriptor( TestAnnotation.class );
-		descriptor.setValue( "booleanElement", false );
-		descriptor.setValue( "stringElement", "abc" );
-		descriptor.setValue( "someOtherElement", "xyz" );
-
-		// Step 2: create the annotation from its descriptor.
-		TestAnnotation ann = AnnotationFactory.create( descriptor );
-
-		assertFalse( ann.booleanElement() );
-		assertEquals( "abc", ann.stringElement() );
-	}
-}

Copied: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/annotationfactory/AnnotationFactoryTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/annotationfactory/AnnotationFactoryTest.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/annotationfactory/AnnotationFactoryTest.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/annotationfactory/AnnotationFactoryTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,38 @@
+package org.hibernate.annotations.common.test.annotationfactory;
+
+import junit.framework.TestCase;
+import org.hibernate.annotations.common.annotationfactory.AnnotationDescriptor;
+import org.hibernate.annotations.common.annotationfactory.AnnotationFactory;
+
+/**
+ * @author Paolo Perrotta
+ * @author Davide Marchignoli
+ */
+public class AnnotationFactoryTest extends TestCase {
+
+	public void testCreatesProxyInstancesOfAnnotations() {
+		// Step 1: define the annotation descriptor.
+		//
+		// What you can/must do:
+		// - You can assign values with the wrong type to the annotation
+		//   elements. The code won't check that the values are the same
+		//   types as required by the Annotation interface. You will
+		//   end up receiving an exception when you access the value, though.
+		// - You must assign a value in the descriptor to all the elements
+		//   defined in the Annotation interface that do not have a default
+		//   value.
+		// - You can ignore in the descriptor those Annotation elements that
+		//   have default values, or you can set them to override their
+		//   default values.
+		AnnotationDescriptor descriptor = new AnnotationDescriptor( TestAnnotation.class );
+		descriptor.setValue( "booleanElement", false );
+		descriptor.setValue( "stringElement", "abc" );
+		descriptor.setValue( "someOtherElement", "xyz" );
+
+		// Step 2: create the annotation from its descriptor.
+		TestAnnotation ann = AnnotationFactory.create( descriptor );
+
+		assertFalse( ann.booleanElement() );
+		assertEquals( "abc", ann.stringElement() );
+	}
+}

Deleted: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/annotationfactory/AnnotationProxyTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/annotationfactory/AnnotationProxyTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/annotationfactory/AnnotationProxyTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,108 +0,0 @@
-package org.hibernate.annotations.common.test.annotationfactory;
-
-import java.lang.reflect.Method;
-
-import junit.framework.TestCase;
-import org.hibernate.annotations.common.annotationfactory.AnnotationDescriptor;
-import org.hibernate.annotations.common.annotationfactory.AnnotationProxy;
-
-/**
- * @author Paolo Perrotta
- * @author Davide Marchignoli
- */
-public class AnnotationProxyTest extends TestCase {
-
-	private AnnotationProxy ann;
-	private AnnotationDescriptor descriptor;
-
-	public void setUp() {
-		descriptor = new AnnotationDescriptor( TestAnnotation.class );
-		descriptor.setValue( "stringElement", "x" );
-		descriptor.setValue( "booleanElement", false );
-		descriptor.setValue( "someOtherElement", "y" );
-		ann = new AnnotationProxy( descriptor );
-	}
-
-	public void testConstructionFailsIfYouDoNotAssignValuesToAllTheElementsWithoutADefault() {
-		try {
-			AnnotationDescriptor desc = new AnnotationDescriptor( TestAnnotation.class );
-			desc.setValue( "stringElement", "x" );
-			desc.setValue( "booleanElement", false );
-			new AnnotationProxy( desc );
-			fail();
-		}
-		catch (Exception e) {
-			assertEquals( "No value provided for someOtherElement", e.getMessage() );
-		}
-	}
-
-	public void testConstructionFailsIfYouDefineElementsThatAreNotInTheAnnotationInterface() {
-		try {
-			AnnotationDescriptor desc = new AnnotationDescriptor( Deprecated.class );
-			desc.setValue( "wrongElement", "xxx" );
-			new AnnotationProxy( desc );
-			fail();
-		}
-		catch (Exception e) {
-			assertTrue( e.getMessage().contains( "unknown elements" ) );
-		}
-	}
-
-	public void testSupportsGenericCallsToAllElements() throws Throwable {
-		assertEquals( "x", invoke( ann, "stringElement" ) );
-		assertFalse( (Boolean) invoke( ann, "booleanElement" ) );
-	}
-
-	public void testPretendsThatItHasTheGivenType() {
-		assertSame( TestAnnotation.class, ann.annotationType() );
-	}
-
-	public void testItsToStringConformsToTheJavaAnnotationDocumentation() throws Throwable {
-		String expectedString = "@org.hibernate.annotations.common.test.annotationfactory.TestAnnotation(booleanElement=false, elementWithDefault=abc, someOtherElement=y, stringElement=x)";
-		assertEquals( expectedString, invoke( ann, "toString" ) );
-	}
-
-	public void testSupportsGenericCallsToMethods() throws Throwable {
-		assertEquals( ann.annotationType(), invoke( ann, "annotationType" ) );
-		assertEquals( ann.toString(), invoke( ann, "toString" ) );
-	}
-
-	public void testThrowsARuntimeExceptionIfYouUseAnElementWhichIsNotInTheAnnotationInterface() {
-		AnnotationDescriptor elements = new AnnotationDescriptor( TestAnnotation.class );
-		elements.setValue( "anOddElement", "x" );
-		try {
-			new AnnotationProxy( elements );
-			fail();
-		}
-		catch (RuntimeException e) {
-		}
-	}
-
-	public void testUsesTheDefaultValueForUndefinedElementsWhenAvailable() throws Throwable {
-		assertEquals( "abc", invoke( ann, "elementWithDefault" ) );
-	}
-
-	public void testThrowsANoSuchMethodExceptionWhenAccessingAnUndefinedMethod() throws Throwable {
-		try {
-			invoke( ann, "anElementThatDoesNotExist" );
-			fail();
-		}
-		catch (NoSuchMethodException e) {
-		}
-		try {
-			invoke( ann, "anOddElement", "arg1", "arg2" );
-			fail();
-		}
-		catch (NoSuchMethodException e) {
-		}
-	}
-
-	private Object invoke(AnnotationProxy proxy, String methodName, Object... args) throws Throwable {
-		Class[] parameterTypes = new Class[args.length];
-		for ( int i = 0; i < args.length ; i++ ) {
-			parameterTypes[i] = args[i].getClass();
-		}
-		Method method = TestAnnotation.class.getMethod( methodName, parameterTypes );
-		return proxy.invoke( proxy, method, parameterTypes );
-	}
-}

Copied: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/annotationfactory/AnnotationProxyTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/annotationfactory/AnnotationProxyTest.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/annotationfactory/AnnotationProxyTest.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/annotationfactory/AnnotationProxyTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,108 @@
+package org.hibernate.annotations.common.test.annotationfactory;
+
+import java.lang.reflect.Method;
+
+import junit.framework.TestCase;
+import org.hibernate.annotations.common.annotationfactory.AnnotationDescriptor;
+import org.hibernate.annotations.common.annotationfactory.AnnotationProxy;
+
+/**
+ * @author Paolo Perrotta
+ * @author Davide Marchignoli
+ */
+public class AnnotationProxyTest extends TestCase {
+
+	private AnnotationProxy ann;
+	private AnnotationDescriptor descriptor;
+
+	public void setUp() {
+		descriptor = new AnnotationDescriptor( TestAnnotation.class );
+		descriptor.setValue( "stringElement", "x" );
+		descriptor.setValue( "booleanElement", false );
+		descriptor.setValue( "someOtherElement", "y" );
+		ann = new AnnotationProxy( descriptor );
+	}
+
+	public void testConstructionFailsIfYouDoNotAssignValuesToAllTheElementsWithoutADefault() {
+		try {
+			AnnotationDescriptor desc = new AnnotationDescriptor( TestAnnotation.class );
+			desc.setValue( "stringElement", "x" );
+			desc.setValue( "booleanElement", false );
+			new AnnotationProxy( desc );
+			fail();
+		}
+		catch (Exception e) {
+			assertEquals( "No value provided for someOtherElement", e.getMessage() );
+		}
+	}
+
+	public void testConstructionFailsIfYouDefineElementsThatAreNotInTheAnnotationInterface() {
+		try {
+			AnnotationDescriptor desc = new AnnotationDescriptor( Deprecated.class );
+			desc.setValue( "wrongElement", "xxx" );
+			new AnnotationProxy( desc );
+			fail();
+		}
+		catch (Exception e) {
+			assertTrue( e.getMessage().contains( "unknown elements" ) );
+		}
+	}
+
+	public void testSupportsGenericCallsToAllElements() throws Throwable {
+		assertEquals( "x", invoke( ann, "stringElement" ) );
+		assertFalse( (Boolean) invoke( ann, "booleanElement" ) );
+	}
+
+	public void testPretendsThatItHasTheGivenType() {
+		assertSame( TestAnnotation.class, ann.annotationType() );
+	}
+
+	public void testItsToStringConformsToTheJavaAnnotationDocumentation() throws Throwable {
+		String expectedString = "@org.hibernate.annotations.common.test.annotationfactory.TestAnnotation(booleanElement=false, elementWithDefault=abc, someOtherElement=y, stringElement=x)";
+		assertEquals( expectedString, invoke( ann, "toString" ) );
+	}
+
+	public void testSupportsGenericCallsToMethods() throws Throwable {
+		assertEquals( ann.annotationType(), invoke( ann, "annotationType" ) );
+		assertEquals( ann.toString(), invoke( ann, "toString" ) );
+	}
+
+	public void testThrowsARuntimeExceptionIfYouUseAnElementWhichIsNotInTheAnnotationInterface() {
+		AnnotationDescriptor elements = new AnnotationDescriptor( TestAnnotation.class );
+		elements.setValue( "anOddElement", "x" );
+		try {
+			new AnnotationProxy( elements );
+			fail();
+		}
+		catch (RuntimeException e) {
+		}
+	}
+
+	public void testUsesTheDefaultValueForUndefinedElementsWhenAvailable() throws Throwable {
+		assertEquals( "abc", invoke( ann, "elementWithDefault" ) );
+	}
+
+	public void testThrowsANoSuchMethodExceptionWhenAccessingAnUndefinedMethod() throws Throwable {
+		try {
+			invoke( ann, "anElementThatDoesNotExist" );
+			fail();
+		}
+		catch (NoSuchMethodException e) {
+		}
+		try {
+			invoke( ann, "anOddElement", "arg1", "arg2" );
+			fail();
+		}
+		catch (NoSuchMethodException e) {
+		}
+	}
+
+	private Object invoke(AnnotationProxy proxy, String methodName, Object... args) throws Throwable {
+		Class[] parameterTypes = new Class[args.length];
+		for ( int i = 0; i < args.length ; i++ ) {
+			parameterTypes[i] = args[i].getClass();
+		}
+		Method method = TestAnnotation.class.getMethod( methodName, parameterTypes );
+		return proxy.invoke( proxy, method, parameterTypes );
+	}
+}

Deleted: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/annotationfactory/TestAnnotation.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/annotationfactory/TestAnnotation.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/annotationfactory/TestAnnotation.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,18 +0,0 @@
-/**
- * 
- */
-package org.hibernate.annotations.common.test.annotationfactory;
-
-/**
- * @author Paolo Perrotta
- * @author Davide Marchignoli
- */
- at interface TestAnnotation {
-	String stringElement();
-
-	String elementWithDefault() default "abc";
-
-	boolean booleanElement();
-
-	String someOtherElement();
-}
\ No newline at end of file

Copied: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/annotationfactory/TestAnnotation.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/annotationfactory/TestAnnotation.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/annotationfactory/TestAnnotation.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/annotationfactory/TestAnnotation.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,18 @@
+/**
+ * 
+ */
+package org.hibernate.annotations.common.test.annotationfactory;
+
+/**
+ * @author Paolo Perrotta
+ * @author Davide Marchignoli
+ */
+ at interface TestAnnotation {
+	String stringElement();
+
+	String elementWithDefault() default "abc";
+
+	boolean booleanElement();
+
+	String someOtherElement();
+}
\ No newline at end of file

Copied: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection)

Copied: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java)

Deleted: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/Foo.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/Foo.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/Foo.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,31 +0,0 @@
-package org.hibernate.annotations.common.test.reflection.java;
-
-import java.util.List;
-
-/**
- * @author Paolo Perrotta
- */
- at TestAnnotation(name = "xyz")
-public class Foo extends FooFather {
-
-	public static Integer staticField;
-
-	Integer fieldProperty;
-
-	public List<String> getCollectionProperty() {
-		return null;
-	}
-
-	@TestAnnotation(name = "xyz")
-	public Integer getMethodProperty() {
-		return null;
-	}
-
-	public int getPrimitiveProperty() {
-		return 0;
-	}
-
-	public static Integer getStaticThing() {
-		return null;
-	}
-}

Copied: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/Foo.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/Foo.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/Foo.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/Foo.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,31 @@
+package org.hibernate.annotations.common.test.reflection.java;
+
+import java.util.List;
+
+/**
+ * @author Paolo Perrotta
+ */
+ at TestAnnotation(name = "xyz")
+public class Foo extends FooFather {
+
+	public static Integer staticField;
+
+	Integer fieldProperty;
+
+	public List<String> getCollectionProperty() {
+		return null;
+	}
+
+	@TestAnnotation(name = "xyz")
+	public Integer getMethodProperty() {
+		return null;
+	}
+
+	public int getPrimitiveProperty() {
+		return 0;
+	}
+
+	public static Integer getStaticThing() {
+		return null;
+	}
+}

Deleted: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/FooFather.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/FooFather.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/FooFather.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,23 +0,0 @@
-package org.hibernate.annotations.common.test.reflection.java;
-
-import java.util.List;
-
-/**
- * @author Paolo Perrotta
- */
-public abstract class FooFather<T> {
-
-	public Integer fatherField;
-
-	public Boolean isFatherMethod() {
-		return null;
-	}
-
-	public T getParameterizedProperty() {
-		return null;
-	}
-
-	public List<T> getParameterizedCollectionProperty() {
-		return null;
-	}
-}

Copied: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/FooFather.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/FooFather.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/FooFather.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/FooFather.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,23 @@
+package org.hibernate.annotations.common.test.reflection.java;
+
+import java.util.List;
+
+/**
+ * @author Paolo Perrotta
+ */
+public abstract class FooFather<T> {
+
+	public Integer fatherField;
+
+	public Boolean isFatherMethod() {
+		return null;
+	}
+
+	public T getParameterizedProperty() {
+		return null;
+	}
+
+	public List<T> getParameterizedCollectionProperty() {
+		return null;
+	}
+}

Deleted: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/JavaReflectionManagerTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/JavaReflectionManagerTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/JavaReflectionManagerTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,42 +0,0 @@
-package org.hibernate.annotations.common.test.reflection.java;
-
-import com.sun.org.apache.xpath.internal.operations.Number;
-import junit.framework.TestCase;
-import org.hibernate.annotations.common.reflection.ReflectionManager;
-import org.hibernate.annotations.common.reflection.XClass;
-import org.hibernate.annotations.common.reflection.java.JavaReflectionManager;
-
-/**
- * @author Paolo Perrotta
- */
-public class JavaReflectionManagerTest extends TestCase {
-
-	private ReflectionManager rm = new JavaReflectionManager();
-
-	public void testReturnsAnXClassThatWrapsTheGivenClass() {
-		XClass xc = rm.toXClass( Integer.class );
-		assertEquals( "java.lang.Integer", xc.getName() );
-	}
-
-	public void testReturnsSameXClassForSameClass() {
-		XClass xc1 = rm.toXClass( void.class );
-		XClass xc2 = rm.toXClass( void.class );
-		assertSame( xc2, xc1 );
-	}
-
-	public void testReturnsNullForANullClass() {
-		assertNull( rm.toXClass( null ) );
-	}
-
-	public void testComparesXClassesWithClasses() {
-		XClass xc = rm.toXClass( Integer.class );
-		assertTrue( rm.equals( xc, Integer.class ) );
-	}
-
-	public void testSupportsNullsInComparisons() {
-		XClass xc = rm.toXClass( Integer.class );
-		assertFalse( rm.equals( null, Number.class ) );
-		assertFalse( rm.equals( xc, null ) );
-		assertTrue( rm.equals( null, null ) );
-	}
-}

Copied: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/JavaReflectionManagerTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/JavaReflectionManagerTest.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/JavaReflectionManagerTest.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/JavaReflectionManagerTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,42 @@
+package org.hibernate.annotations.common.test.reflection.java;
+
+import com.sun.org.apache.xpath.internal.operations.Number;
+import junit.framework.TestCase;
+import org.hibernate.annotations.common.reflection.ReflectionManager;
+import org.hibernate.annotations.common.reflection.XClass;
+import org.hibernate.annotations.common.reflection.java.JavaReflectionManager;
+
+/**
+ * @author Paolo Perrotta
+ */
+public class JavaReflectionManagerTest extends TestCase {
+
+	private ReflectionManager rm = new JavaReflectionManager();
+
+	public void testReturnsAnXClassThatWrapsTheGivenClass() {
+		XClass xc = rm.toXClass( Integer.class );
+		assertEquals( "java.lang.Integer", xc.getName() );
+	}
+
+	public void testReturnsSameXClassForSameClass() {
+		XClass xc1 = rm.toXClass( void.class );
+		XClass xc2 = rm.toXClass( void.class );
+		assertSame( xc2, xc1 );
+	}
+
+	public void testReturnsNullForANullClass() {
+		assertNull( rm.toXClass( null ) );
+	}
+
+	public void testComparesXClassesWithClasses() {
+		XClass xc = rm.toXClass( Integer.class );
+		assertTrue( rm.equals( xc, Integer.class ) );
+	}
+
+	public void testSupportsNullsInComparisons() {
+		XClass xc = rm.toXClass( Integer.class );
+		assertFalse( rm.equals( null, Number.class ) );
+		assertFalse( rm.equals( xc, null ) );
+		assertTrue( rm.equals( null, null ) );
+	}
+}

Deleted: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/JavaXClassTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/JavaXClassTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/JavaXClassTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,90 +0,0 @@
-package org.hibernate.annotations.common.test.reflection.java;
-
-import java.io.Serializable;
-import java.util.List;
-
-import org.hibernate.annotations.common.reflection.ReflectionManager;
-import org.hibernate.annotations.common.reflection.XAnnotatedElement;
-import org.hibernate.annotations.common.reflection.XClass;
-import org.hibernate.annotations.common.reflection.XProperty;
-import org.hibernate.annotations.common.reflection.java.JavaReflectionManager;
-import org.hibernate.annotations.common.test.reflection.java.generics.Dad;
-import org.hibernate.annotations.common.test.reflection.java.generics.Grandpa;
-import org.hibernate.annotations.common.test.reflection.java.generics.Language;
-import org.hibernate.annotations.common.test.reflection.java.generics.Son;
-
-/**
- * @author Paolo Perrotta
- */
-public class JavaXClassTest extends XAnnotatedElementTestCase {
-	ReflectionManager factory = new JavaReflectionManager();
-
-	XClass fatherAsSeenFromSon = factory.toXClass( Son.class ).getSuperclass();
-	XClass grandpa = factory.toXClass( Grandpa.class );
-
-	public void testHasAPointOfViewClass() {
-		// Since Dad is an Entity, getting it through Son.getSuperclass() gives
-		// us a view of properties from Dad with Son as a point of view.
-		XClass sameView = factory.toXClass( Son.class ).getSuperclass();
-		XClass differentView = factory.toXClass( Dad.class );
-		assertSame( "Should be the same instance: same owner", sameView, fatherAsSeenFromSon );
-		assertNotSame( "Should be a different instance: different owner", differentView, fatherAsSeenFromSon );
-		assertEquals( ".equals() should show equality", sameView, differentView );
-	}
-
-	public void testHasAName() {
-		assertSame( "org.hibernate.annotations.common.test.reflection.java.generics.Dad", fatherAsSeenFromSon.getName() );
-	}
-
-	public void testHasASuperclass() {
-		assertEquals( grandpa, fatherAsSeenFromSon.getSuperclass() );
-	}
-
-	public void testSuperSuperClass() {
-		assertEquals( factory.toXClass( Object.class ), grandpa.getSuperclass() );
-		assertEquals( null, grandpa.getSuperclass().getSuperclass() );
-	}
-
-	public void testHasInterfaces() {
-		XClass[] interfaces = fatherAsSeenFromSon.getSuperclass().getInterfaces();
-		assertEquals( 2, interfaces.length );
-		assertTrue( factory.equals( interfaces[0], Serializable.class ) );
-		assertTrue( factory.equals( interfaces[1], Language.class ) );
-	}
-
-	public void testCanBeAssignableFromAnotherXClass() {
-		assertFalse( fatherAsSeenFromSon.isAssignableFrom( grandpa ) );
-		assertTrue( grandpa.isAssignableFrom( fatherAsSeenFromSon ) );
-	}
-
-	public void testExtractsPublicFieldsAsProperties() {
-		List<XProperty> fieldProperties = fatherAsSeenFromSon.getDeclaredProperties( "field" );
-		assertEquals( 1, fieldProperties.size() );
-	}
-
-	public void testExtractsPublicMethodsAsProperties() {
-		List<XProperty> methodProperties = fatherAsSeenFromSon.getDeclaredProperties( "property" );
-		assertEquals( 7, methodProperties.size() );
-	}
-
-	public void testCanBeAbstract() {
-		assertFalse( fatherAsSeenFromSon.isAbstract() );
-		assertTrue( factory.toXClass( Grandpa.class ).isAbstract() );
-	}
-
-	public void testCanBeAPrimitive() {
-		assertFalse( fatherAsSeenFromSon.isPrimitive() );
-		assertTrue( factory.toXClass( int.class ).isPrimitive() );
-	}
-
-	public void testCanBeAnEnum() {
-		assertFalse( fatherAsSeenFromSon.isEnum() );
-		assertTrue( factory.toXClass( Sex.class ).isEnum() );
-	}
-
-	@Override
-	protected XAnnotatedElement getConcreteInstance() {
-		return factory.toXClass( Dad.class );
-	}
-
-}

Copied: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/JavaXClassTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/JavaXClassTest.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/JavaXClassTest.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/JavaXClassTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,90 @@
+package org.hibernate.annotations.common.test.reflection.java;
+
+import java.io.Serializable;
+import java.util.List;
+
+import org.hibernate.annotations.common.reflection.ReflectionManager;
+import org.hibernate.annotations.common.reflection.XAnnotatedElement;
+import org.hibernate.annotations.common.reflection.XClass;
+import org.hibernate.annotations.common.reflection.XProperty;
+import org.hibernate.annotations.common.reflection.java.JavaReflectionManager;
+import org.hibernate.annotations.common.test.reflection.java.generics.Dad;
+import org.hibernate.annotations.common.test.reflection.java.generics.Grandpa;
+import org.hibernate.annotations.common.test.reflection.java.generics.Language;
+import org.hibernate.annotations.common.test.reflection.java.generics.Son;
+
+/**
+ * @author Paolo Perrotta
+ */
+public class JavaXClassTest extends XAnnotatedElementTestCase {
+	ReflectionManager factory = new JavaReflectionManager();
+
+	XClass fatherAsSeenFromSon = factory.toXClass( Son.class ).getSuperclass();
+	XClass grandpa = factory.toXClass( Grandpa.class );
+
+	public void testHasAPointOfViewClass() {
+		// Since Dad is an Entity, getting it through Son.getSuperclass() gives
+		// us a view of properties from Dad with Son as a point of view.
+		XClass sameView = factory.toXClass( Son.class ).getSuperclass();
+		XClass differentView = factory.toXClass( Dad.class );
+		assertSame( "Should be the same instance: same owner", sameView, fatherAsSeenFromSon );
+		assertNotSame( "Should be a different instance: different owner", differentView, fatherAsSeenFromSon );
+		assertEquals( ".equals() should show equality", sameView, differentView );
+	}
+
+	public void testHasAName() {
+		assertSame( "org.hibernate.annotations.common.test.reflection.java.generics.Dad", fatherAsSeenFromSon.getName() );
+	}
+
+	public void testHasASuperclass() {
+		assertEquals( grandpa, fatherAsSeenFromSon.getSuperclass() );
+	}
+
+	public void testSuperSuperClass() {
+		assertEquals( factory.toXClass( Object.class ), grandpa.getSuperclass() );
+		assertEquals( null, grandpa.getSuperclass().getSuperclass() );
+	}
+
+	public void testHasInterfaces() {
+		XClass[] interfaces = fatherAsSeenFromSon.getSuperclass().getInterfaces();
+		assertEquals( 2, interfaces.length );
+		assertTrue( factory.equals( interfaces[0], Serializable.class ) );
+		assertTrue( factory.equals( interfaces[1], Language.class ) );
+	}
+
+	public void testCanBeAssignableFromAnotherXClass() {
+		assertFalse( fatherAsSeenFromSon.isAssignableFrom( grandpa ) );
+		assertTrue( grandpa.isAssignableFrom( fatherAsSeenFromSon ) );
+	}
+
+	public void testExtractsPublicFieldsAsProperties() {
+		List<XProperty> fieldProperties = fatherAsSeenFromSon.getDeclaredProperties( "field" );
+		assertEquals( 1, fieldProperties.size() );
+	}
+
+	public void testExtractsPublicMethodsAsProperties() {
+		List<XProperty> methodProperties = fatherAsSeenFromSon.getDeclaredProperties( "property" );
+		assertEquals( 7, methodProperties.size() );
+	}
+
+	public void testCanBeAbstract() {
+		assertFalse( fatherAsSeenFromSon.isAbstract() );
+		assertTrue( factory.toXClass( Grandpa.class ).isAbstract() );
+	}
+
+	public void testCanBeAPrimitive() {
+		assertFalse( fatherAsSeenFromSon.isPrimitive() );
+		assertTrue( factory.toXClass( int.class ).isPrimitive() );
+	}
+
+	public void testCanBeAnEnum() {
+		assertFalse( fatherAsSeenFromSon.isEnum() );
+		assertTrue( factory.toXClass( Sex.class ).isEnum() );
+	}
+
+	@Override
+	protected XAnnotatedElement getConcreteInstance() {
+		return factory.toXClass( Dad.class );
+	}
+
+}

Deleted: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/JavaXPropertyTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/JavaXPropertyTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/JavaXPropertyTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,163 +0,0 @@
-package org.hibernate.annotations.common.test.reflection.java;
-
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-
-import junit.framework.AssertionFailedError;
-import org.hibernate.annotations.common.reflection.Filter;
-import org.hibernate.annotations.common.reflection.ReflectionManager;
-import org.hibernate.annotations.common.reflection.XClass;
-import org.hibernate.annotations.common.reflection.XProperty;
-import org.hibernate.annotations.common.reflection.java.JavaReflectionManager;
-import org.hibernate.annotations.common.test.reflection.java.generics.Dad;
-import org.hibernate.annotations.common.test.reflection.java.generics.Son;
-
-/**
- * @author Paolo Perrotta
- */
-public class JavaXPropertyTest extends XAnnotatedElementTestCase {
-
-	private ReflectionManager factory = new JavaReflectionManager();
-
-	private XClass dadAsSeenFromItself = factory.toXClass( Dad.class );
-
-	private XClass dadAsSeenFromSon = factory.toXClass( Son.class ).getSuperclass();
-
-	public void testFollowsJavaBeansConventionsForPropertyNames() throws Exception {
-		List<String> properties = new LinkedList<String>();
-		properties.add( "collectionProperty" );
-		properties.add( "methodProperty" );
-		properties.add( "primitiveProperty" );
-		properties.add( "primitiveArrayProperty" );
-		properties.add( "arrayProperty" );
-		properties.add( "propertyStartingWithIs" );
-		properties.add( "language" );
-		List<XProperty> methodProperties = dadAsSeenFromSon.getDeclaredProperties( "property" );
-		assertEquals( properties.size(), methodProperties.size() );
-		for ( XProperty member : methodProperties ) {
-			assertTrue( properties.contains( member.getName() ) );
-		}
-		List<XProperty> fieldProperties = dadAsSeenFromSon.getDeclaredProperties( "field" );
-		XProperty field = fieldProperties.get( 0 );
-		assertEquals( "fieldProperty", field.getName() );
-	}
-
-	public void testReturnsPropertiesWithUnresolvedParametricTypes() {
-		assertEquals( 7, dadAsSeenFromItself.getDeclaredProperties( "property" ).size() );
-	}
-
-	public void testKnowsWhetherItsTypeIsFullyResolved() {
-		XProperty notFullyResolvedProperty = getPropertyNamed_from(
-				"collectionProperty", dadAsSeenFromItself
-				.getDeclaredProperties( "property" )
-		);
-		assertFalse( notFullyResolvedProperty.isTypeResolved() );
-		XProperty fullyResolvedProperty = getPropertyNamed_from(
-				"collectionProperty", dadAsSeenFromSon
-				.getDeclaredProperties( "property" )
-		);
-		assertTrue( fullyResolvedProperty.isTypeResolved() );
-	}
-
-	public void testCanBeFiltered() {
-		assertEquals(
-				8, dadAsSeenFromSon.getDeclaredProperties(
-				"property", new Filter() {
-
-			public boolean returnStatic() {
-				return true;
-			}
-
-			public boolean returnTransient() {
-				return false;
-			}
-		}
-		).size()
-		);
-	}
-
-	public void testCanBeASimpleType() {
-		List<XProperty> declaredProperties = dadAsSeenFromSon.getDeclaredProperties( "field" );
-		XProperty p = getPropertyNamed_from( "fieldProperty", declaredProperties );
-		assertTrue( factory.equals( p.getType(), String.class ) );
-		assertTrue( factory.equals( p.getElementClass(), String.class ) );
-		assertTrue( factory.equals( p.getClassOrElementClass(), String.class ) );
-		assertNull( p.getCollectionClass() );
-		assertFalse( p.isArray() );
-		assertFalse( p.isCollection() );
-	}
-
-	public void testResolveInterfaceType() {
-		List<XProperty> declaredProperties = dadAsSeenFromSon.getDeclaredProperties( "property" );
-		XProperty p = getPropertyNamed_from( "language", declaredProperties );
-		assertTrue( factory.equals( p.getType(), String.class ) );
-		assertTrue( factory.equals( p.getElementClass(), String.class ) );
-		assertTrue( factory.equals( p.getClassOrElementClass(), String.class ) );
-		assertNull( p.getCollectionClass() );
-		assertNull( p.getMapKey() );
-		assertFalse( p.isArray() );
-		assertFalse( p.isCollection() );
-	}
-
-	public void testCanBeAnArray() {
-		List<XProperty> declaredProperties = dadAsSeenFromSon.getDeclaredProperties( "property" );
-		XProperty p = getPropertyNamed_from( "arrayProperty", declaredProperties );
-		assertTrue( factory.equals( p.getType(), String[].class ) );
-		assertTrue( factory.equals( p.getElementClass(), String.class ) );
-		assertTrue( factory.equals( p.getClassOrElementClass(), String.class ) );
-		assertNull( p.getCollectionClass() );
-		assertNull( p.getMapKey() );
-		assertTrue( p.isArray() );
-		assertFalse( p.isCollection() );
-	}
-
-	public void testCanBeAnArrayOfPrimitives() {
-		List<XProperty> declaredProperties = dadAsSeenFromSon.getDeclaredProperties( "property" );
-		XProperty p = getPropertyNamed_from( "primitiveArrayProperty", declaredProperties );
-		assertTrue( factory.equals( p.getType(), int[].class ) );
-		assertTrue( factory.equals( p.getElementClass(), int.class ) );
-		assertTrue( factory.equals( p.getClassOrElementClass(), int.class ) );
-		assertNull( p.getCollectionClass() );
-		assertNull( p.getMapKey() );
-		assertTrue( p.isArray() );
-		assertFalse( p.isCollection() );
-	}
-
-	public void testCanBeACollection() {
-		List<XProperty> declaredProperties = dadAsSeenFromSon.getDeclaredProperties( "property" );
-		XProperty p = getPropertyNamed_from( "collectionProperty", declaredProperties );
-		assertTrue( factory.equals( p.getType(), Map.class ) );
-		assertTrue( factory.equals( p.getElementClass(), String.class ) );
-		assertTrue( factory.equals( p.getClassOrElementClass(), Map.class ) );
-		assertTrue( factory.equals( p.getMapKey(), Double.class ) );
-		assertEquals( Map.class, p.getCollectionClass() );
-		assertFalse( p.isArray() );
-		assertTrue( p.isCollection() );
-	}
-
-	private XProperty getPropertyNamed_from(String name, List<XProperty> properties) {
-		for ( XProperty p : properties ) {
-			if ( p.getName().equals( name ) ) {
-				return p;
-			}
-		}
-		throw new AssertionFailedError( "No property '" + name + "' found" );
-	}
-
-	public void testSupportsMethodsStartingWithIs() throws Exception {
-		assertEquals( "methodProperty", getConcreteInstance().getName() );
-	}
-
-	@Override
-	protected XProperty getConcreteInstance() {
-		XClass xClass = factory.toXClass( Dad.class );
-		List<XProperty> properties = xClass.getDeclaredProperties( "property" );
-		for ( XProperty p : properties ) {
-			if ( p.getName().equals( "methodProperty" ) ) {
-				return p;
-			}
-		}
-		throw new AssertionFailedError( "Cannot find Foo.getMethodProperty()" );
-	}
-}

Copied: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/JavaXPropertyTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/JavaXPropertyTest.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/JavaXPropertyTest.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/JavaXPropertyTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,163 @@
+package org.hibernate.annotations.common.test.reflection.java;
+
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+import junit.framework.AssertionFailedError;
+import org.hibernate.annotations.common.reflection.Filter;
+import org.hibernate.annotations.common.reflection.ReflectionManager;
+import org.hibernate.annotations.common.reflection.XClass;
+import org.hibernate.annotations.common.reflection.XProperty;
+import org.hibernate.annotations.common.reflection.java.JavaReflectionManager;
+import org.hibernate.annotations.common.test.reflection.java.generics.Dad;
+import org.hibernate.annotations.common.test.reflection.java.generics.Son;
+
+/**
+ * @author Paolo Perrotta
+ */
+public class JavaXPropertyTest extends XAnnotatedElementTestCase {
+
+	private ReflectionManager factory = new JavaReflectionManager();
+
+	private XClass dadAsSeenFromItself = factory.toXClass( Dad.class );
+
+	private XClass dadAsSeenFromSon = factory.toXClass( Son.class ).getSuperclass();
+
+	public void testFollowsJavaBeansConventionsForPropertyNames() throws Exception {
+		List<String> properties = new LinkedList<String>();
+		properties.add( "collectionProperty" );
+		properties.add( "methodProperty" );
+		properties.add( "primitiveProperty" );
+		properties.add( "primitiveArrayProperty" );
+		properties.add( "arrayProperty" );
+		properties.add( "propertyStartingWithIs" );
+		properties.add( "language" );
+		List<XProperty> methodProperties = dadAsSeenFromSon.getDeclaredProperties( "property" );
+		assertEquals( properties.size(), methodProperties.size() );
+		for ( XProperty member : methodProperties ) {
+			assertTrue( properties.contains( member.getName() ) );
+		}
+		List<XProperty> fieldProperties = dadAsSeenFromSon.getDeclaredProperties( "field" );
+		XProperty field = fieldProperties.get( 0 );
+		assertEquals( "fieldProperty", field.getName() );
+	}
+
+	public void testReturnsPropertiesWithUnresolvedParametricTypes() {
+		assertEquals( 7, dadAsSeenFromItself.getDeclaredProperties( "property" ).size() );
+	}
+
+	public void testKnowsWhetherItsTypeIsFullyResolved() {
+		XProperty notFullyResolvedProperty = getPropertyNamed_from(
+				"collectionProperty", dadAsSeenFromItself
+				.getDeclaredProperties( "property" )
+		);
+		assertFalse( notFullyResolvedProperty.isTypeResolved() );
+		XProperty fullyResolvedProperty = getPropertyNamed_from(
+				"collectionProperty", dadAsSeenFromSon
+				.getDeclaredProperties( "property" )
+		);
+		assertTrue( fullyResolvedProperty.isTypeResolved() );
+	}
+
+	public void testCanBeFiltered() {
+		assertEquals(
+				8, dadAsSeenFromSon.getDeclaredProperties(
+				"property", new Filter() {
+
+			public boolean returnStatic() {
+				return true;
+			}
+
+			public boolean returnTransient() {
+				return false;
+			}
+		}
+		).size()
+		);
+	}
+
+	public void testCanBeASimpleType() {
+		List<XProperty> declaredProperties = dadAsSeenFromSon.getDeclaredProperties( "field" );
+		XProperty p = getPropertyNamed_from( "fieldProperty", declaredProperties );
+		assertTrue( factory.equals( p.getType(), String.class ) );
+		assertTrue( factory.equals( p.getElementClass(), String.class ) );
+		assertTrue( factory.equals( p.getClassOrElementClass(), String.class ) );
+		assertNull( p.getCollectionClass() );
+		assertFalse( p.isArray() );
+		assertFalse( p.isCollection() );
+	}
+
+	public void testResolveInterfaceType() {
+		List<XProperty> declaredProperties = dadAsSeenFromSon.getDeclaredProperties( "property" );
+		XProperty p = getPropertyNamed_from( "language", declaredProperties );
+		assertTrue( factory.equals( p.getType(), String.class ) );
+		assertTrue( factory.equals( p.getElementClass(), String.class ) );
+		assertTrue( factory.equals( p.getClassOrElementClass(), String.class ) );
+		assertNull( p.getCollectionClass() );
+		assertNull( p.getMapKey() );
+		assertFalse( p.isArray() );
+		assertFalse( p.isCollection() );
+	}
+
+	public void testCanBeAnArray() {
+		List<XProperty> declaredProperties = dadAsSeenFromSon.getDeclaredProperties( "property" );
+		XProperty p = getPropertyNamed_from( "arrayProperty", declaredProperties );
+		assertTrue( factory.equals( p.getType(), String[].class ) );
+		assertTrue( factory.equals( p.getElementClass(), String.class ) );
+		assertTrue( factory.equals( p.getClassOrElementClass(), String.class ) );
+		assertNull( p.getCollectionClass() );
+		assertNull( p.getMapKey() );
+		assertTrue( p.isArray() );
+		assertFalse( p.isCollection() );
+	}
+
+	public void testCanBeAnArrayOfPrimitives() {
+		List<XProperty> declaredProperties = dadAsSeenFromSon.getDeclaredProperties( "property" );
+		XProperty p = getPropertyNamed_from( "primitiveArrayProperty", declaredProperties );
+		assertTrue( factory.equals( p.getType(), int[].class ) );
+		assertTrue( factory.equals( p.getElementClass(), int.class ) );
+		assertTrue( factory.equals( p.getClassOrElementClass(), int.class ) );
+		assertNull( p.getCollectionClass() );
+		assertNull( p.getMapKey() );
+		assertTrue( p.isArray() );
+		assertFalse( p.isCollection() );
+	}
+
+	public void testCanBeACollection() {
+		List<XProperty> declaredProperties = dadAsSeenFromSon.getDeclaredProperties( "property" );
+		XProperty p = getPropertyNamed_from( "collectionProperty", declaredProperties );
+		assertTrue( factory.equals( p.getType(), Map.class ) );
+		assertTrue( factory.equals( p.getElementClass(), String.class ) );
+		assertTrue( factory.equals( p.getClassOrElementClass(), Map.class ) );
+		assertTrue( factory.equals( p.getMapKey(), Double.class ) );
+		assertEquals( Map.class, p.getCollectionClass() );
+		assertFalse( p.isArray() );
+		assertTrue( p.isCollection() );
+	}
+
+	private XProperty getPropertyNamed_from(String name, List<XProperty> properties) {
+		for ( XProperty p : properties ) {
+			if ( p.getName().equals( name ) ) {
+				return p;
+			}
+		}
+		throw new AssertionFailedError( "No property '" + name + "' found" );
+	}
+
+	public void testSupportsMethodsStartingWithIs() throws Exception {
+		assertEquals( "methodProperty", getConcreteInstance().getName() );
+	}
+
+	@Override
+	protected XProperty getConcreteInstance() {
+		XClass xClass = factory.toXClass( Dad.class );
+		List<XProperty> properties = xClass.getDeclaredProperties( "property" );
+		for ( XProperty p : properties ) {
+			if ( p.getName().equals( "methodProperty" ) ) {
+				return p;
+			}
+		}
+		throw new AssertionFailedError( "Cannot find Foo.getMethodProperty()" );
+	}
+}

Deleted: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/Sex.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/Sex.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/Sex.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,10 +0,0 @@
-//$Id: $
-package org.hibernate.annotations.common.test.reflection.java;
-
-/**
- * @author Emmanuel Bernard
- */
-public enum Sex {
-    MALE,
-    FEMALE
-}

Copied: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/Sex.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/Sex.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/Sex.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/Sex.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,10 @@
+//$Id: $
+package org.hibernate.annotations.common.test.reflection.java;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public enum Sex {
+    MALE,
+    FEMALE
+}

Deleted: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/TestAnnotation.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/TestAnnotation.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/TestAnnotation.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,12 +0,0 @@
-package org.hibernate.annotations.common.test.reflection.java;
-
-import static java.lang.annotation.ElementType.*;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
- at Target({TYPE, METHOD, FIELD})
- at Retention(RUNTIME)
-public @interface TestAnnotation {
-	String name() default "abc";
-}

Copied: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/TestAnnotation.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/TestAnnotation.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/TestAnnotation.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/TestAnnotation.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,12 @@
+package org.hibernate.annotations.common.test.reflection.java;
+
+import static java.lang.annotation.ElementType.*;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+ at Target({TYPE, METHOD, FIELD})
+ at Retention(RUNTIME)
+public @interface TestAnnotation {
+	String name() default "abc";
+}

Deleted: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/XAnnotatedElementTestCase.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/XAnnotatedElementTestCase.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/XAnnotatedElementTestCase.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,25 +0,0 @@
-package org.hibernate.annotations.common.test.reflection.java;
-
-import javax.persistence.Transient;
-
-import junit.framework.TestCase;
-import org.hibernate.annotations.common.reflection.XAnnotatedElement;
-import org.hibernate.annotations.common.test.reflection.java.generics.TestAnnotation;
-
-/**
- * @author Paolo Perrotta
- */
-public abstract class XAnnotatedElementTestCase extends TestCase {
-
-	public void testKnowsWhetherAnAnnotationIsPresent() {
-		assertTrue( getConcreteInstance().isAnnotationPresent( TestAnnotation.class ) );
-		assertFalse( getConcreteInstance().isAnnotationPresent( Transient.class ) );
-	}
-
-	public void testReturnsSpecificAnnotations() {
-		TestAnnotation ent = getConcreteInstance().getAnnotation( TestAnnotation.class );
-		assertEquals( "xyz", ent.name() );
-	}
-
-	protected abstract XAnnotatedElement getConcreteInstance();
-}

Copied: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/XAnnotatedElementTestCase.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/XAnnotatedElementTestCase.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/XAnnotatedElementTestCase.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/XAnnotatedElementTestCase.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,25 @@
+package org.hibernate.annotations.common.test.reflection.java;
+
+import javax.persistence.Transient;
+
+import junit.framework.TestCase;
+import org.hibernate.annotations.common.reflection.XAnnotatedElement;
+import org.hibernate.annotations.common.test.reflection.java.generics.TestAnnotation;
+
+/**
+ * @author Paolo Perrotta
+ */
+public abstract class XAnnotatedElementTestCase extends TestCase {
+
+	public void testKnowsWhetherAnAnnotationIsPresent() {
+		assertTrue( getConcreteInstance().isAnnotationPresent( TestAnnotation.class ) );
+		assertFalse( getConcreteInstance().isAnnotationPresent( Transient.class ) );
+	}
+
+	public void testReturnsSpecificAnnotations() {
+		TestAnnotation ent = getConcreteInstance().getAnnotation( TestAnnotation.class );
+		assertEquals( "xyz", ent.name() );
+	}
+
+	protected abstract XAnnotatedElement getConcreteInstance();
+}

Copied: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics)

Deleted: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/ApproximatingTypeEnvironmentTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/ApproximatingTypeEnvironmentTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/ApproximatingTypeEnvironmentTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,70 +0,0 @@
-package org.hibernate.annotations.common.test.reflection.java.generics;
-
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-import java.util.Collection;
-import java.util.Map;
-
-import junit.framework.TestCase;
-import org.hibernate.annotations.common.reflection.java.generics.TypeEnvironment;
-import org.hibernate.annotations.common.reflection.java.generics.TypeEnvironmentFactory;
-
-public class ApproximatingTypeEnvironmentTest extends TestCase {
-
-	TypeEnvironmentFactory teFactory = new TypeEnvironmentFactory();
-	TypeEnvironment unboundContext = teFactory.getEnvironment( BigBlob.class );
-	TypeEnvironment approximatingUnboundContext = teFactory.toApproximatingEnvironment( unboundContext );
-
-	TypeEnvironment boundContext = teFactory.getEnvironment( SonOfBlob.class );
-	TypeEnvironment approximatingBoundContext = teFactory.toApproximatingEnvironment( boundContext );
-
-	public void testDoesNothingOnClasses() throws SecurityException, NoSuchMethodException {
-		assertEquals( String[].class, approximatingUnboundContext.bind( String[].class ) );
-	}
-
-	public void testDoesNothingOnWildcards() throws Exception {
-		Type type = BigBlob.class.getMethod( "genericClass", new Class[0] ).getGenericReturnType();
-		Type approxType = approximatingBoundContext.bind( type );
-		assertEquals( "java.lang.Class<?>", approxType.toString() );
-	}
-
-	public void testDoesNothingOnParameterizedTypesThatAreAlreadyFullyBound() throws Exception {
-		Type type = BigBlob.class.getMethod( "simpleGenericType", new Class[0] ).getGenericReturnType();
-		assertEquals( boundContext.bind( type ), approximatingBoundContext.bind( type ) );
-	}
-
-	public void testDoesNothingOnComplexParameterizedTypesThatAreNotCollections() throws Exception {
-		Type type = BigBlob.class.getMethod( "genericType", new Class[0] ).getGenericReturnType();
-		assertEquals( boundContext.bind( type ), approximatingBoundContext.bind( type ) );
-	}
-
-	public void testDoesNothingOnGenericArraysThatAreAlreadyFullyBound() throws Exception {
-		Type type = BigBlob.class.getMethod( "array", new Class[0] ).getGenericReturnType();
-		assertEquals( boundContext.bind( type ), approximatingBoundContext.bind( type ) );
-	}
-
-	public void testApproximatesSimpleGenericTypesToTheirUpperBound() throws Exception {
-		Type type = BigBlob.class.getMethod( "simpleGenericType", new Class[0] ).getGenericReturnType();
-		assertEquals( "java.util.List<java.lang.String>", approximatingBoundContext.bind( type ).toString() );
-	}
-
-	public void testApproximatesGenericsInArraysToTheirUpperBounds() throws Exception {
-		Type type = BigBlob.class.getMethod( "array", new Class[0] ).getGenericReturnType();
-		assertEquals( Collection[].class, approximatingUnboundContext.bind( type ) );
-	}
-
-	public void testApproximatesArraysOfComplexTypesToArraysOfObjects() throws Exception {
-		Type type = BigBlob.class.getMethod( "complexGenericArray", new Class[0] ).getGenericReturnType();
-		assertEquals( Object[].class, approximatingUnboundContext.bind( type ) );
-	}
-
-	public void testApproximatesGenericsAndWildcardsInCollectionsToTheirUpperBounds() throws Exception {
-		Type type = BigBlob.class.getMethod( "genericCollection", new Class[0] ).getGenericReturnType();
-		ParameterizedType approxType = (ParameterizedType) approximatingUnboundContext.bind( type );
-		assertEquals( Map.class, approxType.getRawType() );
-		assertNull( approxType.getOwnerType() );
-		assertEquals( 2, approxType.getActualTypeArguments().length );
-		assertEquals( Object.class, approxType.getActualTypeArguments()[0] );
-		assertEquals( Collection.class, approxType.getActualTypeArguments()[1] );
-	}
-}

Copied: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/ApproximatingTypeEnvironmentTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/ApproximatingTypeEnvironmentTest.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/ApproximatingTypeEnvironmentTest.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/ApproximatingTypeEnvironmentTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,70 @@
+package org.hibernate.annotations.common.test.reflection.java.generics;
+
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+import java.util.Collection;
+import java.util.Map;
+
+import junit.framework.TestCase;
+import org.hibernate.annotations.common.reflection.java.generics.TypeEnvironment;
+import org.hibernate.annotations.common.reflection.java.generics.TypeEnvironmentFactory;
+
+public class ApproximatingTypeEnvironmentTest extends TestCase {
+
+	TypeEnvironmentFactory teFactory = new TypeEnvironmentFactory();
+	TypeEnvironment unboundContext = teFactory.getEnvironment( BigBlob.class );
+	TypeEnvironment approximatingUnboundContext = teFactory.toApproximatingEnvironment( unboundContext );
+
+	TypeEnvironment boundContext = teFactory.getEnvironment( SonOfBlob.class );
+	TypeEnvironment approximatingBoundContext = teFactory.toApproximatingEnvironment( boundContext );
+
+	public void testDoesNothingOnClasses() throws SecurityException, NoSuchMethodException {
+		assertEquals( String[].class, approximatingUnboundContext.bind( String[].class ) );
+	}
+
+	public void testDoesNothingOnWildcards() throws Exception {
+		Type type = BigBlob.class.getMethod( "genericClass", new Class[0] ).getGenericReturnType();
+		Type approxType = approximatingBoundContext.bind( type );
+		assertEquals( "java.lang.Class<?>", approxType.toString() );
+	}
+
+	public void testDoesNothingOnParameterizedTypesThatAreAlreadyFullyBound() throws Exception {
+		Type type = BigBlob.class.getMethod( "simpleGenericType", new Class[0] ).getGenericReturnType();
+		assertEquals( boundContext.bind( type ), approximatingBoundContext.bind( type ) );
+	}
+
+	public void testDoesNothingOnComplexParameterizedTypesThatAreNotCollections() throws Exception {
+		Type type = BigBlob.class.getMethod( "genericType", new Class[0] ).getGenericReturnType();
+		assertEquals( boundContext.bind( type ), approximatingBoundContext.bind( type ) );
+	}
+
+	public void testDoesNothingOnGenericArraysThatAreAlreadyFullyBound() throws Exception {
+		Type type = BigBlob.class.getMethod( "array", new Class[0] ).getGenericReturnType();
+		assertEquals( boundContext.bind( type ), approximatingBoundContext.bind( type ) );
+	}
+
+	public void testApproximatesSimpleGenericTypesToTheirUpperBound() throws Exception {
+		Type type = BigBlob.class.getMethod( "simpleGenericType", new Class[0] ).getGenericReturnType();
+		assertEquals( "java.util.List<java.lang.String>", approximatingBoundContext.bind( type ).toString() );
+	}
+
+	public void testApproximatesGenericsInArraysToTheirUpperBounds() throws Exception {
+		Type type = BigBlob.class.getMethod( "array", new Class[0] ).getGenericReturnType();
+		assertEquals( Collection[].class, approximatingUnboundContext.bind( type ) );
+	}
+
+	public void testApproximatesArraysOfComplexTypesToArraysOfObjects() throws Exception {
+		Type type = BigBlob.class.getMethod( "complexGenericArray", new Class[0] ).getGenericReturnType();
+		assertEquals( Object[].class, approximatingUnboundContext.bind( type ) );
+	}
+
+	public void testApproximatesGenericsAndWildcardsInCollectionsToTheirUpperBounds() throws Exception {
+		Type type = BigBlob.class.getMethod( "genericCollection", new Class[0] ).getGenericReturnType();
+		ParameterizedType approxType = (ParameterizedType) approximatingUnboundContext.bind( type );
+		assertEquals( Map.class, approxType.getRawType() );
+		assertNull( approxType.getOwnerType() );
+		assertEquals( 2, approxType.getActualTypeArguments().length );
+		assertEquals( Object.class, approxType.getActualTypeArguments()[0] );
+		assertEquals( Collection.class, approxType.getActualTypeArguments()[1] );
+	}
+}

Deleted: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/BigBlob.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/BigBlob.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/BigBlob.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,32 +0,0 @@
-package org.hibernate.annotations.common.test.reflection.java.generics;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-public class BigBlob<T, E extends Collection> {
-
-	public E simpleGenericType() {
-		return null;
-	}
-
-	public Class<?> genericClass() {
-		return null;
-	}
-
-	public Class<T> genericType() {
-		return null;
-	}
-
-	public Map<T, ? extends E> genericCollection() {
-		return null;
-	}
-
-	public E[] array() {
-		return null;
-	}
-
-	public List<? extends T>[] complexGenericArray() {
-		return null;
-	}
-}

Copied: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/BigBlob.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/BigBlob.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/BigBlob.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/BigBlob.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,32 @@
+package org.hibernate.annotations.common.test.reflection.java.generics;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+public class BigBlob<T, E extends Collection> {
+
+	public E simpleGenericType() {
+		return null;
+	}
+
+	public Class<?> genericClass() {
+		return null;
+	}
+
+	public Class<T> genericType() {
+		return null;
+	}
+
+	public Map<T, ? extends E> genericCollection() {
+		return null;
+	}
+
+	public E[] array() {
+		return null;
+	}
+
+	public List<? extends T>[] complexGenericArray() {
+		return null;
+	}
+}

Deleted: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/Dad.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/Dad.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/Dad.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,51 +0,0 @@
-package org.hibernate.annotations.common.test.reflection.java.generics;
-
-import java.util.List;
-import java.util.Map;
-import javax.persistence.Entity;
-
-/**
- * @author Davide Marchignoli
- * @author Paolo Perrotta
- */
- at TestAnnotation(name = "xyz")
- at Entity
-public class Dad<T> extends Grandpa<List<T>, Integer> {
-
-	static Integer staticField;
-
-	T fieldProperty;
-
-	public Map<Double, T> getCollectionProperty() {
-		return null;
-	}
-
-	@TestAnnotation(name = "xyz")
-	public Integer getMethodProperty() {
-		return null;
-	}
-
-	public int getPrimitiveProperty() {
-		return 0;
-	}
-
-	public boolean isPropertyStartingWithIs() {
-		return false;
-	}
-
-	public int[] getPrimitiveArrayProperty() {
-		return null;
-	}
-
-	public T[] getArrayProperty() {
-		return null;
-	}
-
-	public static Integer getStaticThing() {
-		return null;
-	}
-
-	public String getLanguage() {
-		return null;
-	}
-}

Copied: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/Dad.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/Dad.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/Dad.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/Dad.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,51 @@
+package org.hibernate.annotations.common.test.reflection.java.generics;
+
+import java.util.List;
+import java.util.Map;
+import javax.persistence.Entity;
+
+/**
+ * @author Davide Marchignoli
+ * @author Paolo Perrotta
+ */
+ at TestAnnotation(name = "xyz")
+ at Entity
+public class Dad<T> extends Grandpa<List<T>, Integer> {
+
+	static Integer staticField;
+
+	T fieldProperty;
+
+	public Map<Double, T> getCollectionProperty() {
+		return null;
+	}
+
+	@TestAnnotation(name = "xyz")
+	public Integer getMethodProperty() {
+		return null;
+	}
+
+	public int getPrimitiveProperty() {
+		return 0;
+	}
+
+	public boolean isPropertyStartingWithIs() {
+		return false;
+	}
+
+	public int[] getPrimitiveArrayProperty() {
+		return null;
+	}
+
+	public T[] getArrayProperty() {
+		return null;
+	}
+
+	public static Integer getStaticThing() {
+		return null;
+	}
+
+	public String getLanguage() {
+		return null;
+	}
+}

Deleted: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/Grandpa.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/Grandpa.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/Grandpa.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,21 +0,0 @@
-package org.hibernate.annotations.common.test.reflection.java.generics;
-
-import java.io.Serializable;
-
-/**
- * @author Davide Marchignoli
- * @author Paolo Perrotta
- */
-public abstract class Grandpa<T, U> implements Serializable, Language<String> {
-
-	Integer grandpaField;
-
-	public T returnsGeneric() {
-		return null;
-	}
-
-	// generic embedded value
-	public Neighbour<U> getFriend() {
-		return null;
-	}
-}

Copied: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/Grandpa.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/Grandpa.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/Grandpa.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/Grandpa.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,21 @@
+package org.hibernate.annotations.common.test.reflection.java.generics;
+
+import java.io.Serializable;
+
+/**
+ * @author Davide Marchignoli
+ * @author Paolo Perrotta
+ */
+public abstract class Grandpa<T, U> implements Serializable, Language<String> {
+
+	Integer grandpaField;
+
+	public T returnsGeneric() {
+		return null;
+	}
+
+	// generic embedded value
+	public Neighbour<U> getFriend() {
+		return null;
+	}
+}

Deleted: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/Language.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/Language.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/Language.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,9 +0,0 @@
-//$Id$
-package org.hibernate.annotations.common.test.reflection.java.generics;
-
-/**
- * @author Emmanuel Bernard
- */
-public interface Language<T> {
-	T getLanguage();
-}

Copied: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/Language.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/Language.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/Language.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/Language.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,9 @@
+//$Id$
+package org.hibernate.annotations.common.test.reflection.java.generics;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public interface Language<T> {
+	T getLanguage();
+}

Deleted: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/Neighbour.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/Neighbour.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/Neighbour.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,14 +0,0 @@
-package org.hibernate.annotations.common.test.reflection.java.generics;
-
-import java.util.Set;
-
-/**
- * @author Davide Marchignoli
- * @author Paolo Perrotta
- */
-public class Neighbour<T> {
-
-	public Set<T> embeddedProperty() {
-		return null;
-	}
-}

Copied: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/Neighbour.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/Neighbour.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/Neighbour.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/Neighbour.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,14 @@
+package org.hibernate.annotations.common.test.reflection.java.generics;
+
+import java.util.Set;
+
+/**
+ * @author Davide Marchignoli
+ * @author Paolo Perrotta
+ */
+public class Neighbour<T> {
+
+	public Set<T> embeddedProperty() {
+		return null;
+	}
+}

Deleted: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/Son.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/Son.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/Son.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,8 +0,0 @@
-package org.hibernate.annotations.common.test.reflection.java.generics;
-
-/**
- * @author Davide Marchignoli
- * @author Paolo Perrotta
- */
-public class Son extends Dad<String> {
-}

Copied: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/Son.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/Son.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/Son.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/Son.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,8 @@
+package org.hibernate.annotations.common.test.reflection.java.generics;
+
+/**
+ * @author Davide Marchignoli
+ * @author Paolo Perrotta
+ */
+public class Son extends Dad<String> {
+}

Deleted: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/SonOfBlob.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/SonOfBlob.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/SonOfBlob.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,8 +0,0 @@
-package org.hibernate.annotations.common.test.reflection.java.generics;
-
-import java.util.List;
-
-
-public class SonOfBlob extends BigBlob<String, List<String>> {
-
-}

Copied: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/SonOfBlob.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/SonOfBlob.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/SonOfBlob.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/SonOfBlob.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,8 @@
+package org.hibernate.annotations.common.test.reflection.java.generics;
+
+import java.util.List;
+
+
+public class SonOfBlob extends BigBlob<String, List<String>> {
+
+}

Deleted: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/TestAnnotation.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/TestAnnotation.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/TestAnnotation.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,16 +0,0 @@
-package org.hibernate.annotations.common.test.reflection.java.generics;
-
-import static java.lang.annotation.ElementType.*;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * @author Davide Marchignoli
- * @author Paolo Perrotta
- */
- at Target({TYPE, METHOD, FIELD})
- at Retention(RUNTIME)
-public @interface TestAnnotation {
-	String name() default "abc";
-}

Copied: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/TestAnnotation.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/TestAnnotation.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/TestAnnotation.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/TestAnnotation.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,16 @@
+package org.hibernate.annotations.common.test.reflection.java.generics;
+
+import static java.lang.annotation.ElementType.*;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * @author Davide Marchignoli
+ * @author Paolo Perrotta
+ */
+ at Target({TYPE, METHOD, FIELD})
+ at Retention(RUNTIME)
+public @interface TestAnnotation {
+	String name() default "abc";
+}

Deleted: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/TypeEnvironmentFactoryTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/TypeEnvironmentFactoryTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/TypeEnvironmentFactoryTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,59 +0,0 @@
-package org.hibernate.annotations.common.test.reflection.java.generics;
-
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-import java.lang.reflect.TypeVariable;
-import java.util.List;
-import java.util.Set;
-
-import junit.framework.TestCase;
-import org.hibernate.annotations.common.reflection.java.generics.TypeEnvironmentFactory;
-
-/**
- * @author Davide Marchignoli
- * @author Paolo Perrotta
- */
-public class TypeEnvironmentFactoryTest extends TestCase {
-
-	public void testBindsGenericsToSuperclassEnvironment() throws SecurityException, NoSuchMethodException {
-		TypeEnvironmentFactory env = new TypeEnvironmentFactory();
-		Type type = Grandpa.class.getMethod( "returnsGeneric", new Class[0] ).getGenericReturnType();
-
-		Type asSeenFromGrandpa = env.getEnvironment( Grandpa.class ).bind( type );
-		assertTrue( asSeenFromGrandpa instanceof TypeVariable );
-		assertEquals( "T", asSeenFromGrandpa.toString() );
-
-		Type asSeenFromDad = env.getEnvironment( Dad.class ).bind( type );
-		assertTrue( asSeenFromDad instanceof ParameterizedType );
-		assertEquals( "java.util.List<T>", asSeenFromDad.toString() );
-
-		ParameterizedType asSeenFromSon = (ParameterizedType) env.getEnvironment( Son.class ).bind( type );
-		assertType_isCollectionOfClass_withElementsOfClass( asSeenFromSon, List.class, String.class );
-	}
-
-	public void testBindsGenericsToOwnerEnvironment() throws SecurityException, NoSuchMethodException {
-		TypeEnvironmentFactory env = new TypeEnvironmentFactory();
-
-		Type friendType = Dad.class.getMethod( "getFriend", new Class[0] ).getGenericReturnType();
-		ParameterizedType friendTypeAsSeenFromDad = (ParameterizedType) env.getEnvironment( Dad.class ).bind(
-				friendType
-		);
-
-		Class friendClass = (Class) friendTypeAsSeenFromDad.getRawType();
-		Type returnType = friendClass.getMethod( "embeddedProperty", new Class[0] ).getGenericReturnType();
-
-		ParameterizedType boundType = (ParameterizedType) env.getEnvironment( friendTypeAsSeenFromDad ).bind(
-				returnType
-		);
-		assertType_isCollectionOfClass_withElementsOfClass( boundType, Set.class, Integer.class );
-	}
-
-	private void assertType_isCollectionOfClass_withElementsOfClass(
-			ParameterizedType t, Class collectionClass,
-			Class elementClass
-	) {
-		assertEquals( collectionClass, t.getRawType() );
-		assertEquals( 1, t.getActualTypeArguments().length );
-		assertEquals( elementClass, t.getActualTypeArguments()[0] );
-	}
-}

Copied: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/TypeEnvironmentFactoryTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/TypeEnvironmentFactoryTest.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/TypeEnvironmentFactoryTest.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/TypeEnvironmentFactoryTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,59 @@
+package org.hibernate.annotations.common.test.reflection.java.generics;
+
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+import java.lang.reflect.TypeVariable;
+import java.util.List;
+import java.util.Set;
+
+import junit.framework.TestCase;
+import org.hibernate.annotations.common.reflection.java.generics.TypeEnvironmentFactory;
+
+/**
+ * @author Davide Marchignoli
+ * @author Paolo Perrotta
+ */
+public class TypeEnvironmentFactoryTest extends TestCase {
+
+	public void testBindsGenericsToSuperclassEnvironment() throws SecurityException, NoSuchMethodException {
+		TypeEnvironmentFactory env = new TypeEnvironmentFactory();
+		Type type = Grandpa.class.getMethod( "returnsGeneric", new Class[0] ).getGenericReturnType();
+
+		Type asSeenFromGrandpa = env.getEnvironment( Grandpa.class ).bind( type );
+		assertTrue( asSeenFromGrandpa instanceof TypeVariable );
+		assertEquals( "T", asSeenFromGrandpa.toString() );
+
+		Type asSeenFromDad = env.getEnvironment( Dad.class ).bind( type );
+		assertTrue( asSeenFromDad instanceof ParameterizedType );
+		assertEquals( "java.util.List<T>", asSeenFromDad.toString() );
+
+		ParameterizedType asSeenFromSon = (ParameterizedType) env.getEnvironment( Son.class ).bind( type );
+		assertType_isCollectionOfClass_withElementsOfClass( asSeenFromSon, List.class, String.class );
+	}
+
+	public void testBindsGenericsToOwnerEnvironment() throws SecurityException, NoSuchMethodException {
+		TypeEnvironmentFactory env = new TypeEnvironmentFactory();
+
+		Type friendType = Dad.class.getMethod( "getFriend", new Class[0] ).getGenericReturnType();
+		ParameterizedType friendTypeAsSeenFromDad = (ParameterizedType) env.getEnvironment( Dad.class ).bind(
+				friendType
+		);
+
+		Class friendClass = (Class) friendTypeAsSeenFromDad.getRawType();
+		Type returnType = friendClass.getMethod( "embeddedProperty", new Class[0] ).getGenericReturnType();
+
+		ParameterizedType boundType = (ParameterizedType) env.getEnvironment( friendTypeAsSeenFromDad ).bind(
+				returnType
+		);
+		assertType_isCollectionOfClass_withElementsOfClass( boundType, Set.class, Integer.class );
+	}
+
+	private void assertType_isCollectionOfClass_withElementsOfClass(
+			ParameterizedType t, Class collectionClass,
+			Class elementClass
+	) {
+		assertEquals( collectionClass, t.getRawType() );
+		assertEquals( 1, t.getActualTypeArguments().length );
+		assertEquals( elementClass, t.getActualTypeArguments()[0] );
+	}
+}

Deleted: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/TypeUtilsTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/TypeUtilsTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/TypeUtilsTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,31 +0,0 @@
-package org.hibernate.annotations.common.test.reflection.java.generics;
-
-import java.lang.reflect.Type;
-
-import junit.framework.TestCase;
-import org.hibernate.annotations.common.reflection.java.generics.TypeEnvironment;
-import org.hibernate.annotations.common.reflection.java.generics.TypeEnvironmentFactory;
-import org.hibernate.annotations.common.reflection.java.generics.TypeUtils;
-
-public class TypeUtilsTest extends TestCase {
-
-	TypeEnvironmentFactory env = new TypeEnvironmentFactory();
-	TypeEnvironment dadContext = env.getEnvironment( Dad.class );
-	TypeEnvironment sonContext = env.getEnvironment( Son.class );
-
-	public void testAClassIsAlwaysFullyResolved() throws Exception {
-		assertTrue( TypeUtils.isResolved( Dad.class ) );
-	}
-
-	public void testKnowsIfAParametricTypeIsFullyResolved() throws Exception {
-		Type simpleType = Dad.class.getMethod( "returnsGeneric", new Class[0] ).getGenericReturnType();
-		assertFalse( TypeUtils.isResolved( dadContext.bind( simpleType ) ) );
-		assertTrue( TypeUtils.isResolved( sonContext.bind( simpleType ) ) );
-	}
-
-	public void testKnowsIfAnArrayTypeIsFullyResolved() throws Exception {
-		Type arrayType = Dad.class.getMethod( "getArrayProperty", new Class[0] ).getGenericReturnType();
-		assertFalse( TypeUtils.isResolved( dadContext.bind( arrayType ) ) );
-		assertTrue( TypeUtils.isResolved( sonContext.bind( arrayType ) ) );
-	}
-}

Copied: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/TypeUtilsTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/TypeUtilsTest.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/TypeUtilsTest.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/TypeUtilsTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,31 @@
+package org.hibernate.annotations.common.test.reflection.java.generics;
+
+import java.lang.reflect.Type;
+
+import junit.framework.TestCase;
+import org.hibernate.annotations.common.reflection.java.generics.TypeEnvironment;
+import org.hibernate.annotations.common.reflection.java.generics.TypeEnvironmentFactory;
+import org.hibernate.annotations.common.reflection.java.generics.TypeUtils;
+
+public class TypeUtilsTest extends TestCase {
+
+	TypeEnvironmentFactory env = new TypeEnvironmentFactory();
+	TypeEnvironment dadContext = env.getEnvironment( Dad.class );
+	TypeEnvironment sonContext = env.getEnvironment( Son.class );
+
+	public void testAClassIsAlwaysFullyResolved() throws Exception {
+		assertTrue( TypeUtils.isResolved( Dad.class ) );
+	}
+
+	public void testKnowsIfAParametricTypeIsFullyResolved() throws Exception {
+		Type simpleType = Dad.class.getMethod( "returnsGeneric", new Class[0] ).getGenericReturnType();
+		assertFalse( TypeUtils.isResolved( dadContext.bind( simpleType ) ) );
+		assertTrue( TypeUtils.isResolved( sonContext.bind( simpleType ) ) );
+	}
+
+	public void testKnowsIfAnArrayTypeIsFullyResolved() throws Exception {
+		Type arrayType = Dad.class.getMethod( "getArrayProperty", new Class[0] ).getGenericReturnType();
+		assertFalse( TypeUtils.isResolved( dadContext.bind( arrayType ) ) );
+		assertTrue( TypeUtils.isResolved( sonContext.bind( arrayType ) ) );
+	}
+}

Copied: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep)

Deleted: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/DeepGenericsContainment.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/DeepGenericsContainment.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/DeepGenericsContainment.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,48 +0,0 @@
-//$Id: $
-package org.hibernate.annotations.common.test.reflection.java.generics.deep;
-
-import java.util.List;
-
-import junit.framework.TestCase;
-
-import org.hibernate.annotations.common.reflection.XClass;
-import org.hibernate.annotations.common.reflection.XProperty;
-import org.hibernate.annotations.common.reflection.java.JavaReflectionManager;
-
-
-/**
- * @author Paolo Perrotta
- */
-public class DeepGenericsContainment extends TestCase {
-
-	public static class Contained<T> {
-	    T generic;
-	}
-	
-	public static class Container {
-		Contained<String> contained;
-	}
-	
-	public static class ContainerWithCollection {
-		List<Contained<String>> contained;
-	}
-
-	public void test2StepsGenerics() throws Exception {
-		JavaReflectionManager factory = new JavaReflectionManager();
-		XClass container = factory.toXClass( Container.class );
-		XProperty contained = container.getDeclaredProperties( XClass.ACCESS_FIELD ).get( 0 );
-		assertTrue( contained.isTypeResolved() );
-		XProperty generic = contained.getType().getDeclaredProperties( XClass.ACCESS_FIELD ).get( 0 );
-		assertTrue( generic.isTypeResolved() );
-	}
-
-	public void test2StepsGenericsCollection() throws Exception {
-		JavaReflectionManager factory = new JavaReflectionManager();
-		XClass container = factory.toXClass( ContainerWithCollection.class );
-		XProperty collection = container.getDeclaredProperties( XClass.ACCESS_FIELD ).get( 0 );
-		assertTrue( collection.isTypeResolved() );
-		XClass elementClass = collection.getElementClass();
-		XProperty generic = elementClass.getDeclaredProperties( XClass.ACCESS_FIELD ).get( 0 );
-		assertTrue( generic.isTypeResolved() );
-	}
-}

Copied: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/DeepGenericsContainment.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/DeepGenericsContainment.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/DeepGenericsContainment.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/DeepGenericsContainment.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,48 @@
+//$Id: $
+package org.hibernate.annotations.common.test.reflection.java.generics.deep;
+
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.hibernate.annotations.common.reflection.XClass;
+import org.hibernate.annotations.common.reflection.XProperty;
+import org.hibernate.annotations.common.reflection.java.JavaReflectionManager;
+
+
+/**
+ * @author Paolo Perrotta
+ */
+public class DeepGenericsContainment extends TestCase {
+
+	public static class Contained<T> {
+	    T generic;
+	}
+	
+	public static class Container {
+		Contained<String> contained;
+	}
+	
+	public static class ContainerWithCollection {
+		List<Contained<String>> contained;
+	}
+
+	public void test2StepsGenerics() throws Exception {
+		JavaReflectionManager factory = new JavaReflectionManager();
+		XClass container = factory.toXClass( Container.class );
+		XProperty contained = container.getDeclaredProperties( XClass.ACCESS_FIELD ).get( 0 );
+		assertTrue( contained.isTypeResolved() );
+		XProperty generic = contained.getType().getDeclaredProperties( XClass.ACCESS_FIELD ).get( 0 );
+		assertTrue( generic.isTypeResolved() );
+	}
+
+	public void test2StepsGenericsCollection() throws Exception {
+		JavaReflectionManager factory = new JavaReflectionManager();
+		XClass container = factory.toXClass( ContainerWithCollection.class );
+		XProperty collection = container.getDeclaredProperties( XClass.ACCESS_FIELD ).get( 0 );
+		assertTrue( collection.isTypeResolved() );
+		XClass elementClass = collection.getElementClass();
+		XProperty generic = elementClass.getDeclaredProperties( XClass.ACCESS_FIELD ).get( 0 );
+		assertTrue( generic.isTypeResolved() );
+	}
+}

Deleted: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/DeepGenericsInheritance.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/DeepGenericsInheritance.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/DeepGenericsInheritance.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,23 +0,0 @@
-//$Id: $
-package org.hibernate.annotations.common.test.reflection.java.generics.deep;
-
-import junit.framework.TestCase;
-import org.hibernate.annotations.common.reflection.java.JavaReflectionManager;
-import org.hibernate.annotations.common.reflection.XClass;
-
-
-/**
- * @author Emmanuel Bernard
- */
-public class DeepGenericsInheritance extends TestCase {
-	public void test2StepsGenerics() throws Exception {
-		JavaReflectionManager factory = new JavaReflectionManager();
-		XClass subclass2 = factory.toXClass( Subclass2.class );
-		XClass dummySubclass = factory.toXClass( DummySubclass.class );
-		XClass superclass = subclass2.getSuperclass();
-		XClass supersuperclass = superclass.getSuperclass();
-		assertTrue( supersuperclass.getDeclaredProperties( "field" ).get( 1 ).isTypeResolved() );
-		assertEquals( dummySubclass, supersuperclass.getDeclaredProperties( "field" ).get( 1 ).getType() );
-
-	}
-}

Copied: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/DeepGenericsInheritance.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/DeepGenericsInheritance.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/DeepGenericsInheritance.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/DeepGenericsInheritance.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,23 @@
+//$Id: $
+package org.hibernate.annotations.common.test.reflection.java.generics.deep;
+
+import junit.framework.TestCase;
+import org.hibernate.annotations.common.reflection.java.JavaReflectionManager;
+import org.hibernate.annotations.common.reflection.XClass;
+
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class DeepGenericsInheritance extends TestCase {
+	public void test2StepsGenerics() throws Exception {
+		JavaReflectionManager factory = new JavaReflectionManager();
+		XClass subclass2 = factory.toXClass( Subclass2.class );
+		XClass dummySubclass = factory.toXClass( DummySubclass.class );
+		XClass superclass = subclass2.getSuperclass();
+		XClass supersuperclass = superclass.getSuperclass();
+		assertTrue( supersuperclass.getDeclaredProperties( "field" ).get( 1 ).isTypeResolved() );
+		assertEquals( dummySubclass, supersuperclass.getDeclaredProperties( "field" ).get( 1 ).getType() );
+
+	}
+}

Deleted: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/Dummy.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/Dummy.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/Dummy.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,28 +0,0 @@
-package org.hibernate.annotations.common.test.reflection.java.generics.deep;
-
-import javax.persistence.MappedSuperclass;
-import javax.persistence.Id;
-
-/**
- *
- */
- at MappedSuperclass
-public class Dummy {
-    @Id
-    protected Long id;
-
-    private String name;
-
-
-    public Long getId() {
-        return id;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-}

Copied: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/Dummy.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/Dummy.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/Dummy.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/Dummy.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,28 @@
+package org.hibernate.annotations.common.test.reflection.java.generics.deep;
+
+import javax.persistence.MappedSuperclass;
+import javax.persistence.Id;
+
+/**
+ *
+ */
+ at MappedSuperclass
+public class Dummy {
+    @Id
+    protected Long id;
+
+    private String name;
+
+
+    public Long getId() {
+        return id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+}

Deleted: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/DummySubclass.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/DummySubclass.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/DummySubclass.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,12 +0,0 @@
-package org.hibernate.annotations.common.test.reflection.java.generics.deep;
-
-import javax.persistence.Entity;
-
-import org.hibernate.annotations.common.test.reflection.java.generics.deep.Dummy;
-
-/**
- *
- */
- at Entity
-public class DummySubclass extends Dummy {
-}

Copied: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/DummySubclass.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/DummySubclass.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/DummySubclass.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/DummySubclass.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,12 @@
+package org.hibernate.annotations.common.test.reflection.java.generics.deep;
+
+import javax.persistence.Entity;
+
+import org.hibernate.annotations.common.test.reflection.java.generics.deep.Dummy;
+
+/**
+ *
+ */
+ at Entity
+public class DummySubclass extends Dummy {
+}

Deleted: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/GenericSuperclass1.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/GenericSuperclass1.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/GenericSuperclass1.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,28 +0,0 @@
-package org.hibernate.annotations.common.test.reflection.java.generics.deep;
-
-import javax.persistence.MappedSuperclass;
-import javax.persistence.OneToOne;
-import javax.persistence.Id;
-
-import org.hibernate.annotations.common.test.reflection.java.generics.deep.Dummy;
-
-/**
- *
- */
- at MappedSuperclass
-public class GenericSuperclass1<T extends Dummy> {
-	@Id
-	protected Long id;
-
-	@OneToOne
-	protected T dummy;
-
-
-	public Long getId() {
-		return id;
-	}
-
-	public T getDummy() {
-		return dummy;
-	}
-}

Copied: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/GenericSuperclass1.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/GenericSuperclass1.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/GenericSuperclass1.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/GenericSuperclass1.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,28 @@
+package org.hibernate.annotations.common.test.reflection.java.generics.deep;
+
+import javax.persistence.MappedSuperclass;
+import javax.persistence.OneToOne;
+import javax.persistence.Id;
+
+import org.hibernate.annotations.common.test.reflection.java.generics.deep.Dummy;
+
+/**
+ *
+ */
+ at MappedSuperclass
+public class GenericSuperclass1<T extends Dummy> {
+	@Id
+	protected Long id;
+
+	@OneToOne
+	protected T dummy;
+
+
+	public Long getId() {
+		return id;
+	}
+
+	public T getDummy() {
+		return dummy;
+	}
+}

Deleted: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/GenericSuperclass2.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/GenericSuperclass2.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/GenericSuperclass2.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,13 +0,0 @@
-package org.hibernate.annotations.common.test.reflection.java.generics.deep;
-
-import javax.persistence.MappedSuperclass;
-
-import org.hibernate.annotations.common.test.reflection.java.generics.deep.Dummy;
-import org.hibernate.annotations.common.test.reflection.java.generics.deep.GenericSuperclass1;
-
-/**
- *
- */
- at MappedSuperclass
-public class GenericSuperclass2<T extends Dummy> extends GenericSuperclass1<T> {
-}

Copied: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/GenericSuperclass2.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/GenericSuperclass2.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/GenericSuperclass2.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/GenericSuperclass2.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,13 @@
+package org.hibernate.annotations.common.test.reflection.java.generics.deep;
+
+import javax.persistence.MappedSuperclass;
+
+import org.hibernate.annotations.common.test.reflection.java.generics.deep.Dummy;
+import org.hibernate.annotations.common.test.reflection.java.generics.deep.GenericSuperclass1;
+
+/**
+ *
+ */
+ at MappedSuperclass
+public class GenericSuperclass2<T extends Dummy> extends GenericSuperclass1<T> {
+}

Deleted: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/Subclass1.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/Subclass1.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/Subclass1.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,13 +0,0 @@
-package org.hibernate.annotations.common.test.reflection.java.generics.deep;
-
-import javax.persistence.Entity;
-
-import org.hibernate.annotations.common.test.reflection.java.generics.deep.DummySubclass;
-import org.hibernate.annotations.common.test.reflection.java.generics.deep.GenericSuperclass1;
-
-/**
- *
- */
- at Entity
-public class Subclass1 extends GenericSuperclass1<DummySubclass> {
-}

Copied: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/Subclass1.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/Subclass1.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/Subclass1.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/Subclass1.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,13 @@
+package org.hibernate.annotations.common.test.reflection.java.generics.deep;
+
+import javax.persistence.Entity;
+
+import org.hibernate.annotations.common.test.reflection.java.generics.deep.DummySubclass;
+import org.hibernate.annotations.common.test.reflection.java.generics.deep.GenericSuperclass1;
+
+/**
+ *
+ */
+ at Entity
+public class Subclass1 extends GenericSuperclass1<DummySubclass> {
+}

Deleted: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/Subclass2.java
===================================================================
--- branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/Subclass2.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/Subclass2.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,13 +0,0 @@
-package org.hibernate.annotations.common.test.reflection.java.generics.deep;
-
-import javax.persistence.Entity;
-
-import org.hibernate.annotations.common.test.reflection.java.generics.deep.DummySubclass;
-import org.hibernate.annotations.common.test.reflection.java.generics.deep.GenericSuperclass2;
-
-/**
- *
- */
- at Entity
-public class Subclass2 extends GenericSuperclass2<DummySubclass> {
-}

Copied: trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/Subclass2.java (from rev 11279, branches/Branch_3_2/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/Subclass2.java)
===================================================================
--- trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/Subclass2.java	                        (rev 0)
+++ trunk/HibernateExt/commons-annotations/src/test/org/hibernate/annotations/common/test/reflection/java/generics/deep/Subclass2.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,13 @@
+package org.hibernate.annotations.common.test.reflection.java.generics.deep;
+
+import javax.persistence.Entity;
+
+import org.hibernate.annotations.common.test.reflection.java.generics.deep.DummySubclass;
+import org.hibernate.annotations.common.test.reflection.java.generics.deep.GenericSuperclass2;
+
+/**
+ *
+ */
+ at Entity
+public class Subclass2 extends GenericSuperclass2<DummySubclass> {
+}

Copied: trunk/HibernateExt/entitymanager (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager)


Property changes on: trunk/HibernateExt/entitymanager
___________________________________________________________________
Name: svn:ignore
   + build.properties
build
target
test_output
classes


Deleted: trunk/HibernateExt/entitymanager/.cvsignore
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/.cvsignore	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/.cvsignore	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,4 +0,0 @@
-build.properties
-build
-target
-test_output

Copied: trunk/HibernateExt/entitymanager/.cvsignore (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/.cvsignore)
===================================================================
--- trunk/HibernateExt/entitymanager/.cvsignore	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/.cvsignore	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,4 @@
+build.properties
+build
+target
+test_output

Deleted: trunk/HibernateExt/entitymanager/build.properties.dist
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/build.properties.dist	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/build.properties.dist	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,13 +0,0 @@
-common.dir=.
-src.dir=src
-test.dir=test
-resources.dir=resources
-testresources.dir=test-resources
-hibernate-core.home=../hibernate-3.2
-
-
-#locally present jars
-jpa-api.jar=./lib/ejb3-persistence.jar
-validator.jar=./lib/hibernate-validator.jar
-commons-annotations.jar=./lib/hibernate-commons-annotations.jar
-annotations.jar=./lib/hibernate-annotations.jar
\ No newline at end of file

Copied: trunk/HibernateExt/entitymanager/build.properties.dist (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/build.properties.dist)
===================================================================
--- trunk/HibernateExt/entitymanager/build.properties.dist	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/build.properties.dist	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,13 @@
+common.dir=.
+src.dir=src
+test.dir=test
+resources.dir=resources
+testresources.dir=test-resources
+hibernate-core.home=../hibernate-3.2
+
+
+#locally present jars
+jpa-api.jar=./lib/ejb3-persistence.jar
+validator.jar=./lib/hibernate-validator.jar
+commons-annotations.jar=./lib/hibernate-commons-annotations.jar
+annotations.jar=./lib/hibernate-annotations.jar
\ No newline at end of file

Deleted: trunk/HibernateExt/entitymanager/build.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/build.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/build.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,378 +0,0 @@
-<!--
-
-  Hibernate Annotations ANT build script.
-
-  You need JDK 5.0 installed to build Hibernate EntityManager.
-
--->
-
-<project name="HibernateEntityManager" default="dist" basedir=".">
-
-    <!-- Give user a chance to override without editing this file
-       (and without typing -D each time it compiles it) -->
-    <property file="build.properties"/>
-    <property file="${user.home}/.ant.properties"/>
-
-    <!-- Name of project and version, used to create filenames -->
-    <property name="Name" value="Hibernate EntityManager"/>
-    <property name="name" value="hibernate-entitymanager"/>
-    <property name="version" value="3.2.2.GA"/>
-    <property name="javadoc.packagenames" value="org.hibernate.ejb.*"/>
-    <property name="jdbc.dir" value="jdbc"/>
-    <property name="copy.test" value="true"/>
-	<property name="javac.source" value="1.5"/>
-	<property name="javac.target" value="1.5"/>
-    <property name="common.dir" value="../common"/>
-
-    <available property="jpa-present" file="${basedir}/../jpa-api" type="dir"/>
-    <property name="jpa-api.jar" value="${basedir}/../jpa-api/build/ejb3-persistence.jar"/>
-    <property name="annotations.jar"
-                  value="${basedir}/../annotations/target/hibernate-annotations/hibernate-annotations.jar"/>
-    <property name="validator.jar"
-                      value="${basedir}/../validator/target/hibernate-validator/hibernate-validator.jar"/>
-    <property name="commons-annotations.jar"
-                  value="${basedir}/../commons-annotations/target/hibernate-commons-annotations/hibernate-commons-annotations.jar"/>
-
-    <import file="${common.dir}/common-build.xml"/>
-	<property name="jpa-javadoc.dir" value="${dist.doc.dir}/jpa-api"/>
-
-
-    <property name="resources.dir" value="src/resources"/>
-    <property name="testresources.dir" value="src/test-resources"/>
-    <property name="build.testresources.dir" value="${build.dir}/testresources"/>
-    <property name="build.temp.dir" value="${build.dir}/temp"/>
-
-    <path id="lib.moduleclass.path">
-		<pathelement location="${jpa-api.jar}"/>
-		<pathelement location="${commons-annotations.jar}"/>
-        <pathelement location="${annotations.jar}"/>
-        <pathelement location="${validator.jar}"/>
-    </path>
-	<path id="junit.moduleclasspath">
-		<pathelement location="${src.dir}"/>
-		<pathelement location="${test.dir}"/>
-        <fileset dir="${jdbc.dir}">
-			<include name="*.jar"/>
-			<include name="*.zip"/>
-		</fileset>
-        <fileset dir="${lib.dir}/test">
-			<include name="*.jar"/>
-			<include name="*.zip"/>
-		</fileset>
-    </path>
-
-    <target name="init">
-		<antcall target="common-build.init"/>
-		<!-- check for dependency artefacts -->
-		<available file="${jpa-api.jar}" type="file" property="jpa-api.jar.available"/>
-		<available file="${commons-annotations.jar}" type="file" property="commons-annotations.jar.available"/>
-		<available file="${annotations.jar}" type="file" property="annotations.jar.available"/>
-        <available file="${validator.jar}" type="file" property="validator.jar.available"/>
-        <mkdir dir="${lib.dir}/test"/>
-    </target>
-
-	<target name="get.jpa-api" depends="init" unless="jpa-api.jar.available">
-		<ant inheritall="false" dir="${basedir}/../jpa-api" target="clean"/>
-		<ant inheritall="false" dir="${basedir}/../jpa-api" target="jar"/>
-	</target>
-
-	<target name="get.commons-annotations" depends="init" unless="commons-annotations.jar.available">
-		<ant inheritall="false" dir="${basedir}/../commons-annotations" target="clean"/>
-		<ant inheritall="false" dir="${basedir}/../commons-annotations" target="jar"/>
-	</target>
-
-	<target name="get.annotations" depends="init" unless="annotations.jar.available">
-		<ant inheritall="false" dir="${basedir}/../annotations" target="clean"/>
-		<ant inheritall="false" dir="${basedir}/../annotations" target="jar"/>
-	</target>
-
-    <target name="get.validator" depends="init" unless="validator.jar.available">
-		<ant inheritall="false" dir="${basedir}/../validator" target="clean"/>
-		<ant inheritall="false" dir="${basedir}/../validator" target="jar"/>
-	</target>
-
-    <target name="compile" depends="init,get.jpa-api,get.commons-annotations,get.annotations,get.validator" description="Compile the Java source code">
-        <available
-                classname="org.eclipse.core.launcher.Main"
-                property="build.compiler"
-                value="org.eclipse.jdt.core.JDTCompilerAdapter"
-                classpath="${java.class.path}"/>
-        <javac
-                srcdir="${src.dir}"
-                destdir="${classes.dir}"
-                classpathref="lib.class.path"
-                debug="${javac.debug}"
-                optimize="${javac.optimize}"
-                nowarn="on"
-				source="${javac.source}"
-                target="${javac.target}"
-                >
-        </javac>
-    </target>
-
-    <target name="packjar">
-        <property name="extension" value="jar"/>
-		<property name="packagename" value="${jarname}"/>
-		<!-- property name="jarname"/ -->
-        <mkdir dir="${build.testresources.dir}"/>
-        <jar destfile="${build.testresources.dir}/${jarname}.${extension}">
-            <!-- fileset dir="${build.temp.dir}"/ -->
-            <fileset dir="${classes.dir}">
-                <include name="**/test/pack/${packagename}/**.*"/>
-            </fileset>
-            <fileset dir="${testresources.dir}/${jarname}">
-                <include name="**/*.*"/>
-            </fileset>
-        </jar>
-        <delete dir="${build.temp.dir}"/>
-    </target>
-
-    <target name="packexploded">
-        <property name="extension" value="jar"/>
-        <!-- property name="jarname"/ -->
-        <mkdir dir="${build.testresources.dir}/${jarname}.${extension}"/>
-        <copy todir="${build.testresources.dir}/${jarname}.${extension}">
-            <!-- fileset dir="${build.temp.dir}"/ -->
-            <fileset dir="${classes.dir}">
-                <include name="**/test/pack/${jarname}/**.*"/>
-            </fileset>
-            <fileset dir="${testresources.dir}/${jarname}">
-                <include name="**/*.*"/>
-            </fileset>
-        </copy>
-        <delete dir="${build.temp.dir}"/>
-    </target>
-
-    <target name="test-resources" description="Prepare all needed jars and pars">
-        <antcall target="packjar" inheritall="true">
-            <param name="extension" value="par"/>
-            <param name="jarname" value="defaultpar"/>
-        </antcall>
-		<antcall target="packjar" inheritall="true">
-            <param name="extension" value="par"/>
-            <param name="jarname" value="space par"/>
-			<param name="packagename" value="spacepar"/>
-		</antcall>
-		<antcall target="packjar" inheritall="true">
-            <param name="extension" value="par"/>
-            <param name="jarname" value="explicitpar"/>
-        </antcall>
-        <antcall target="packjar" inheritall="true">
-            <param name="extension" value="par"/>
-            <param name="jarname" value="excludehbmpar"/>
-        </antcall>
-        <antcall target="packjar" inheritall="true">
-            <param name="extension" value="jar"/>
-            <param name="jarname" value="externaljar"/>
-        </antcall>
-        <antcall target="packjar" inheritall="true">
-            <param name="extension" value="par"/>
-            <param name="jarname" value="cfgxmlpar"/>
-        </antcall>
-		<antcall target="packjar" inheritall="true">
-            <param name="extension" value="jar"/>
-            <param name="jarname" value="overridenpar"/>
-        </antcall>
-
-		<antcall target="packexploded" inheritall="true">
-            <param name="extension" value="par"/>
-            <param name="jarname" value="explodedpar"/>
-        </antcall>
-    </target>
-
-    <target name="compiletest" depends="compile" description="Compile the tests">
-        <available
-                classname="org.eclipse.core.launcher.Main"
-                property="build.compiler"
-                value="org.eclipse.jdt.core.JDTCompilerAdapter"
-                classpath="${java.class.path}"/>
-        <javac
-                srcdir="${test.dir}"
-                destdir="${classes.dir}"
-                debug="${javac.debug}"
-                optimize="${javac.optimize}"
-                nowarn="on"
-				source="${javac.source}"
-                target="${javac.target}">
-            <classpath>
-                <path refid="lib.class.path"/>
-            </classpath>
-        </javac>
-    </target>
-
-    <target name="junit" depends="compiletest,test-resources">
-        <mkdir dir="test_output"/>
-        <mkdir dir="${classes.dir}/META-INF/services"/>
-        <copy todir="${classes.dir}">
-            <fileset dir="${resources.dir}">
-                <include name="**/*.*"/>
-            </fileset>
-        </copy>
-        <junit fork="once" printsummary="yes" haltonfailure="yes">
-            <classpath>
-                <fileset dir="${jdbc.dir}">
-                    <include name="**/*.jar"/>
-                    <include name="**/*.zip"/>
-                </fileset>
-                <dirset dir="${build.testresources.dir}">
-                    <include name="**/*.jar"/>
-                    <include name="**/*.par"/>
-                </dirset>
-
-                <fileset dir="${build.testresources.dir}">
-                    <include name="**/*.jar"/>
-                    <include name="**/*.par"/>
-                </fileset>
-                <path refid="lib.class.path"/>
-                <!-- pathelement path="${classes.dir}"/ -->
-                <dirset dir="${classes.dir}">
-                    <exclude name="**/pack/**.*"/>
-                </dirset>
-
-                <!-- pathelement path="build/test.par"/ -->
-                <pathelement path="${src.dir}"/>
-                <!-- pick up properties from here -->
-                <pathelement path="${test.dir}"/>
-                <!-- pick up mappings from here -->
-            </classpath>
-            <formatter type="plain"/>
-            <formatter type="xml"/>
-            <batchtest fork="yes" todir="test_output" haltonfailure="no">
-                <fileset dir="${classes.dir}">
-                    <include name="**/*Test.class"/>
-                </fileset>
-            </batchtest>
-        </junit>
-    </target>
-
-    <!-- Run a single unit test. -->
-    <target name="junitsingle" depends="compiletest"
-            description="Run a single test suite (requires testname and jdbc.driver properties)">
-        <mkdir dir="test_output"/>
-        <junit printsummary="yes" fork="yes" haltonfailure="yes">
-            <classpath>
-                <fileset dir="${jdbc.dir}">
-                    <include name="**/*.jar"/>
-                    <include name="**/*.zip"/>
-                </fileset>
-                <path refid="lib.class.path"/>
-                <pathelement path="build/test.par"/>
-                <pathelement path="target/hibernate-entitymanager/hibernate-entitymanager.jar"/>
-                <pathelement path="${src.dir}"/>
-                <!-- pick up properties from here -->
-                <pathelement path="${test.dir}"/>
-                <!-- pick up mappings from here -->
-            </classpath>
-            <formatter type="plain"/>
-            <formatter type="xml"/>
-            <test fork="yes" todir="test_output" haltonfailure="no" name="${testname}"/>
-        </junit>
-    </target>
-
-    <target name="jar" depends="compile" description="Build the distribution .jar file">
-        <mkdir dir="${classes.dir}/META-INF/services"/>
-        <copy todir="${classes.dir}">
-            <fileset dir="${resources.dir}">
-                <include name="**/*.*"/>
-            </fileset>
-        </copy>
-        <manifest file="${classes.dir}/META-INF/MANIFEST.MF">
-            <attribute name="Product" value="${Name}"/>
-            <attribute name="Version" value="${version}"/>
-        </manifest>
-        <antcall target="common-build.jar"/>
-    </target>
-
-    <!-- target name="javadoc" description="Compile the Javadoc API documentation to dist dir">
-			<echo>Skipping java doc since ant's javadoc task cannot handle an alternative javadoc</echo>        	
-     </target -->
-	 
-	 <target name="jpa-javadoc" if="jpa-present">
-		 <mkdir dir="${jpa-javadoc.dir}"/>
-		 <ant dir="../jpa-api" target="javadoc" inheritAll="false"/>
-		 <copy todir="${jpa-javadoc.dir}">
-		     <fileset dir="${basedir}/../jpa-api/build/api">
-			     <include name="**/*.*"/>
-			 </fileset>
-		 </copy>
-	</target>
-
-    <!-- Some of this can probably be moved to common-build... -->
-    <target name="dist" depends="jar,javadoc,jpa-javadoc,copysource,copytest,copylib,extras" description="Build everything">
-
-        <ant inheritall="false" dir="${basedir}/doc/reference"/>
-        <copy todir="${dist.dir}/doc/reference" failonerror="false">
-            <fileset dir="${basedir}/doc/reference/build">
-                <include name="**/*.*"/>
-            </fileset>
-        </copy>
-
-        <copy todir="${dist.dir}/resources" failonerror="false">
-            <fileset dir="${resources.dir}">
-                <include name="**/*.*"/>
-            </fileset>
-        </copy>
-        <copy todir="${dist.dir}/test-resources" failonerror="false">
-            <fileset dir="${testresources.dir}">
-                <include name="**/*.*"/>
-            </fileset>
-        </copy>
-        <copy todir="${dist.dir}" failonerror="false">
-            <fileset dir="${common.dir}">
-                <include name="common-build.xml"/>
-            </fileset>
-        </copy>
-
-        <!-- copy dependencies -->
-        <copy todir="${dist.lib.dir}" failonerror="false">
-			<fileset file="${jpa-api.jar}"/>
-            <fileset file="${commons-annotations.jar}"/>
-            <fileset file="${annotations.jar}"/>
-            <fileset file="${validator.jar}"/>
-        </copy>
-        <mkdir dir="${dist.lib.dir}/test"/>
-
-        <copy file="${basedir}/build.properties.dist" tofile="${dist.dir}/build.properties" failonerror="false">
-        </copy>
-        <antcall target="common-build.dist"/>
-    </target>
-
-    <target name="zip-dist" description="zip the dist">
-        <zip zipfile="${dist.dir}-${version}.zip">
-            <zipfileset prefix="${name}-${version}" dir="${dist.dir}"/>
-        </zip>
-        <tar compression="gzip" tarfile="${dist.dir}-${version}.tar.gz">
-            <tarfileset prefix="${name}-${version}" dir="${dist.dir}"/>
-        </tar>
-    </target>
-
-    <target name="profile" depends="compiletest">
-        <java classname="org.hibernate.ejb.test.Profile" fork="true">
-            <jvmarg value="-XrunjbossInspector:c:\profiler\data,include=org.hibernate.ejb,ignore=*,wakeupOnStartup=true"/>
-            <classpath>
-                <fileset dir="${jdbc.dir}">
-                    <include name="**/*.jar"/>
-                    <include name="**/*.zip"/>
-                </fileset>
-                <dirset dir="${build.testresources.dir}">
-                    <include name="**/*.jar"/>
-                    <include name="**/*.par"/>
-                </dirset>
-
-                <fileset dir="${build.testresources.dir}">
-                    <include name="**/*.jar"/>
-                    <include name="**/*.par"/>
-                </fileset>
-                <path refid="lib.class.path"/>
-                <pathelement path="${classes.dir}"/>
-                <!-- pathelement path="build/test.par"/ -->
-                <pathelement path="${src.dir}"/>
-                <!-- pick up properties from here -->
-                <pathelement path="${test.dir}"/>
-                <!-- pick up mappings from here -->
-            </classpath>
-        </java>
-    </target>
-
-
-</project>

Copied: trunk/HibernateExt/entitymanager/build.xml (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/build.xml)
===================================================================
--- trunk/HibernateExt/entitymanager/build.xml	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/build.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,378 @@
+<!--
+
+  Hibernate Annotations ANT build script.
+
+  You need JDK 5.0 installed to build Hibernate EntityManager.
+
+-->
+
+<project name="HibernateEntityManager" default="dist" basedir=".">
+
+    <!-- Give user a chance to override without editing this file
+       (and without typing -D each time it compiles it) -->
+    <property file="build.properties"/>
+    <property file="${user.home}/.ant.properties"/>
+
+    <!-- Name of project and version, used to create filenames -->
+    <property name="Name" value="Hibernate EntityManager"/>
+    <property name="name" value="hibernate-entitymanager"/>
+    <property name="version" value="3.2.2.GA"/>
+    <property name="javadoc.packagenames" value="org.hibernate.ejb.*"/>
+    <property name="jdbc.dir" value="jdbc"/>
+    <property name="copy.test" value="true"/>
+	<property name="javac.source" value="1.5"/>
+	<property name="javac.target" value="1.5"/>
+    <property name="common.dir" value="../common"/>
+
+    <available property="jpa-present" file="${basedir}/../jpa-api" type="dir"/>
+    <property name="jpa-api.jar" value="${basedir}/../jpa-api/build/ejb3-persistence.jar"/>
+    <property name="annotations.jar"
+                  value="${basedir}/../annotations/target/hibernate-annotations/hibernate-annotations.jar"/>
+    <property name="validator.jar"
+                      value="${basedir}/../validator/target/hibernate-validator/hibernate-validator.jar"/>
+    <property name="commons-annotations.jar"
+                  value="${basedir}/../commons-annotations/target/hibernate-commons-annotations/hibernate-commons-annotations.jar"/>
+
+    <import file="${common.dir}/common-build.xml"/>
+	<property name="jpa-javadoc.dir" value="${dist.doc.dir}/jpa-api"/>
+
+
+    <property name="resources.dir" value="src/resources"/>
+    <property name="testresources.dir" value="src/test-resources"/>
+    <property name="build.testresources.dir" value="${build.dir}/testresources"/>
+    <property name="build.temp.dir" value="${build.dir}/temp"/>
+
+    <path id="lib.moduleclass.path">
+		<pathelement location="${jpa-api.jar}"/>
+		<pathelement location="${commons-annotations.jar}"/>
+        <pathelement location="${annotations.jar}"/>
+        <pathelement location="${validator.jar}"/>
+    </path>
+	<path id="junit.moduleclasspath">
+		<pathelement location="${src.dir}"/>
+		<pathelement location="${test.dir}"/>
+        <fileset dir="${jdbc.dir}">
+			<include name="*.jar"/>
+			<include name="*.zip"/>
+		</fileset>
+        <fileset dir="${lib.dir}/test">
+			<include name="*.jar"/>
+			<include name="*.zip"/>
+		</fileset>
+    </path>
+
+    <target name="init">
+		<antcall target="common-build.init"/>
+		<!-- check for dependency artefacts -->
+		<available file="${jpa-api.jar}" type="file" property="jpa-api.jar.available"/>
+		<available file="${commons-annotations.jar}" type="file" property="commons-annotations.jar.available"/>
+		<available file="${annotations.jar}" type="file" property="annotations.jar.available"/>
+        <available file="${validator.jar}" type="file" property="validator.jar.available"/>
+        <mkdir dir="${lib.dir}/test"/>
+    </target>
+
+	<target name="get.jpa-api" depends="init" unless="jpa-api.jar.available">
+		<ant inheritall="false" dir="${basedir}/../jpa-api" target="clean"/>
+		<ant inheritall="false" dir="${basedir}/../jpa-api" target="jar"/>
+	</target>
+
+	<target name="get.commons-annotations" depends="init" unless="commons-annotations.jar.available">
+		<ant inheritall="false" dir="${basedir}/../commons-annotations" target="clean"/>
+		<ant inheritall="false" dir="${basedir}/../commons-annotations" target="jar"/>
+	</target>
+
+	<target name="get.annotations" depends="init" unless="annotations.jar.available">
+		<ant inheritall="false" dir="${basedir}/../annotations" target="clean"/>
+		<ant inheritall="false" dir="${basedir}/../annotations" target="jar"/>
+	</target>
+
+    <target name="get.validator" depends="init" unless="validator.jar.available">
+		<ant inheritall="false" dir="${basedir}/../validator" target="clean"/>
+		<ant inheritall="false" dir="${basedir}/../validator" target="jar"/>
+	</target>
+
+    <target name="compile" depends="init,get.jpa-api,get.commons-annotations,get.annotations,get.validator" description="Compile the Java source code">
+        <available
+                classname="org.eclipse.core.launcher.Main"
+                property="build.compiler"
+                value="org.eclipse.jdt.core.JDTCompilerAdapter"
+                classpath="${java.class.path}"/>
+        <javac
+                srcdir="${src.dir}"
+                destdir="${classes.dir}"
+                classpathref="lib.class.path"
+                debug="${javac.debug}"
+                optimize="${javac.optimize}"
+                nowarn="on"
+				source="${javac.source}"
+                target="${javac.target}"
+                >
+        </javac>
+    </target>
+
+    <target name="packjar">
+        <property name="extension" value="jar"/>
+		<property name="packagename" value="${jarname}"/>
+		<!-- property name="jarname"/ -->
+        <mkdir dir="${build.testresources.dir}"/>
+        <jar destfile="${build.testresources.dir}/${jarname}.${extension}">
+            <!-- fileset dir="${build.temp.dir}"/ -->
+            <fileset dir="${classes.dir}">
+                <include name="**/test/pack/${packagename}/**.*"/>
+            </fileset>
+            <fileset dir="${testresources.dir}/${jarname}">
+                <include name="**/*.*"/>
+            </fileset>
+        </jar>
+        <delete dir="${build.temp.dir}"/>
+    </target>
+
+    <target name="packexploded">
+        <property name="extension" value="jar"/>
+        <!-- property name="jarname"/ -->
+        <mkdir dir="${build.testresources.dir}/${jarname}.${extension}"/>
+        <copy todir="${build.testresources.dir}/${jarname}.${extension}">
+            <!-- fileset dir="${build.temp.dir}"/ -->
+            <fileset dir="${classes.dir}">
+                <include name="**/test/pack/${jarname}/**.*"/>
+            </fileset>
+            <fileset dir="${testresources.dir}/${jarname}">
+                <include name="**/*.*"/>
+            </fileset>
+        </copy>
+        <delete dir="${build.temp.dir}"/>
+    </target>
+
+    <target name="test-resources" description="Prepare all needed jars and pars">
+        <antcall target="packjar" inheritall="true">
+            <param name="extension" value="par"/>
+            <param name="jarname" value="defaultpar"/>
+        </antcall>
+		<antcall target="packjar" inheritall="true">
+            <param name="extension" value="par"/>
+            <param name="jarname" value="space par"/>
+			<param name="packagename" value="spacepar"/>
+		</antcall>
+		<antcall target="packjar" inheritall="true">
+            <param name="extension" value="par"/>
+            <param name="jarname" value="explicitpar"/>
+        </antcall>
+        <antcall target="packjar" inheritall="true">
+            <param name="extension" value="par"/>
+            <param name="jarname" value="excludehbmpar"/>
+        </antcall>
+        <antcall target="packjar" inheritall="true">
+            <param name="extension" value="jar"/>
+            <param name="jarname" value="externaljar"/>
+        </antcall>
+        <antcall target="packjar" inheritall="true">
+            <param name="extension" value="par"/>
+            <param name="jarname" value="cfgxmlpar"/>
+        </antcall>
+		<antcall target="packjar" inheritall="true">
+            <param name="extension" value="jar"/>
+            <param name="jarname" value="overridenpar"/>
+        </antcall>
+
+		<antcall target="packexploded" inheritall="true">
+            <param name="extension" value="par"/>
+            <param name="jarname" value="explodedpar"/>
+        </antcall>
+    </target>
+
+    <target name="compiletest" depends="compile" description="Compile the tests">
+        <available
+                classname="org.eclipse.core.launcher.Main"
+                property="build.compiler"
+                value="org.eclipse.jdt.core.JDTCompilerAdapter"
+                classpath="${java.class.path}"/>
+        <javac
+                srcdir="${test.dir}"
+                destdir="${classes.dir}"
+                debug="${javac.debug}"
+                optimize="${javac.optimize}"
+                nowarn="on"
+				source="${javac.source}"
+                target="${javac.target}">
+            <classpath>
+                <path refid="lib.class.path"/>
+            </classpath>
+        </javac>
+    </target>
+
+    <target name="junit" depends="compiletest,test-resources">
+        <mkdir dir="test_output"/>
+        <mkdir dir="${classes.dir}/META-INF/services"/>
+        <copy todir="${classes.dir}">
+            <fileset dir="${resources.dir}">
+                <include name="**/*.*"/>
+            </fileset>
+        </copy>
+        <junit fork="once" printsummary="yes" haltonfailure="yes">
+            <classpath>
+                <fileset dir="${jdbc.dir}">
+                    <include name="**/*.jar"/>
+                    <include name="**/*.zip"/>
+                </fileset>
+                <dirset dir="${build.testresources.dir}">
+                    <include name="**/*.jar"/>
+                    <include name="**/*.par"/>
+                </dirset>
+
+                <fileset dir="${build.testresources.dir}">
+                    <include name="**/*.jar"/>
+                    <include name="**/*.par"/>
+                </fileset>
+                <path refid="lib.class.path"/>
+                <!-- pathelement path="${classes.dir}"/ -->
+                <dirset dir="${classes.dir}">
+                    <exclude name="**/pack/**.*"/>
+                </dirset>
+
+                <!-- pathelement path="build/test.par"/ -->
+                <pathelement path="${src.dir}"/>
+                <!-- pick up properties from here -->
+                <pathelement path="${test.dir}"/>
+                <!-- pick up mappings from here -->
+            </classpath>
+            <formatter type="plain"/>
+            <formatter type="xml"/>
+            <batchtest fork="yes" todir="test_output" haltonfailure="no">
+                <fileset dir="${classes.dir}">
+                    <include name="**/*Test.class"/>
+                </fileset>
+            </batchtest>
+        </junit>
+    </target>
+
+    <!-- Run a single unit test. -->
+    <target name="junitsingle" depends="compiletest"
+            description="Run a single test suite (requires testname and jdbc.driver properties)">
+        <mkdir dir="test_output"/>
+        <junit printsummary="yes" fork="yes" haltonfailure="yes">
+            <classpath>
+                <fileset dir="${jdbc.dir}">
+                    <include name="**/*.jar"/>
+                    <include name="**/*.zip"/>
+                </fileset>
+                <path refid="lib.class.path"/>
+                <pathelement path="build/test.par"/>
+                <pathelement path="target/hibernate-entitymanager/hibernate-entitymanager.jar"/>
+                <pathelement path="${src.dir}"/>
+                <!-- pick up properties from here -->
+                <pathelement path="${test.dir}"/>
+                <!-- pick up mappings from here -->
+            </classpath>
+            <formatter type="plain"/>
+            <formatter type="xml"/>
+            <test fork="yes" todir="test_output" haltonfailure="no" name="${testname}"/>
+        </junit>
+    </target>
+
+    <target name="jar" depends="compile" description="Build the distribution .jar file">
+        <mkdir dir="${classes.dir}/META-INF/services"/>
+        <copy todir="${classes.dir}">
+            <fileset dir="${resources.dir}">
+                <include name="**/*.*"/>
+            </fileset>
+        </copy>
+        <manifest file="${classes.dir}/META-INF/MANIFEST.MF">
+            <attribute name="Product" value="${Name}"/>
+            <attribute name="Version" value="${version}"/>
+        </manifest>
+        <antcall target="common-build.jar"/>
+    </target>
+
+    <!-- target name="javadoc" description="Compile the Javadoc API documentation to dist dir">
+			<echo>Skipping java doc since ant's javadoc task cannot handle an alternative javadoc</echo>        	
+     </target -->
+	 
+	 <target name="jpa-javadoc" if="jpa-present">
+		 <mkdir dir="${jpa-javadoc.dir}"/>
+		 <ant dir="../jpa-api" target="javadoc" inheritAll="false"/>
+		 <copy todir="${jpa-javadoc.dir}">
+		     <fileset dir="${basedir}/../jpa-api/build/api">
+			     <include name="**/*.*"/>
+			 </fileset>
+		 </copy>
+	</target>
+
+    <!-- Some of this can probably be moved to common-build... -->
+    <target name="dist" depends="jar,javadoc,jpa-javadoc,copysource,copytest,copylib,extras" description="Build everything">
+
+        <ant inheritall="false" dir="${basedir}/doc/reference"/>
+        <copy todir="${dist.dir}/doc/reference" failonerror="false">
+            <fileset dir="${basedir}/doc/reference/build">
+                <include name="**/*.*"/>
+            </fileset>
+        </copy>
+
+        <copy todir="${dist.dir}/resources" failonerror="false">
+            <fileset dir="${resources.dir}">
+                <include name="**/*.*"/>
+            </fileset>
+        </copy>
+        <copy todir="${dist.dir}/test-resources" failonerror="false">
+            <fileset dir="${testresources.dir}">
+                <include name="**/*.*"/>
+            </fileset>
+        </copy>
+        <copy todir="${dist.dir}" failonerror="false">
+            <fileset dir="${common.dir}">
+                <include name="common-build.xml"/>
+            </fileset>
+        </copy>
+
+        <!-- copy dependencies -->
+        <copy todir="${dist.lib.dir}" failonerror="false">
+			<fileset file="${jpa-api.jar}"/>
+            <fileset file="${commons-annotations.jar}"/>
+            <fileset file="${annotations.jar}"/>
+            <fileset file="${validator.jar}"/>
+        </copy>
+        <mkdir dir="${dist.lib.dir}/test"/>
+
+        <copy file="${basedir}/build.properties.dist" tofile="${dist.dir}/build.properties" failonerror="false">
+        </copy>
+        <antcall target="common-build.dist"/>
+    </target>
+
+    <target name="zip-dist" description="zip the dist">
+        <zip zipfile="${dist.dir}-${version}.zip">
+            <zipfileset prefix="${name}-${version}" dir="${dist.dir}"/>
+        </zip>
+        <tar compression="gzip" tarfile="${dist.dir}-${version}.tar.gz">
+            <tarfileset prefix="${name}-${version}" dir="${dist.dir}"/>
+        </tar>
+    </target>
+
+    <target name="profile" depends="compiletest">
+        <java classname="org.hibernate.ejb.test.Profile" fork="true">
+            <jvmarg value="-XrunjbossInspector:c:\profiler\data,include=org.hibernate.ejb,ignore=*,wakeupOnStartup=true"/>
+            <classpath>
+                <fileset dir="${jdbc.dir}">
+                    <include name="**/*.jar"/>
+                    <include name="**/*.zip"/>
+                </fileset>
+                <dirset dir="${build.testresources.dir}">
+                    <include name="**/*.jar"/>
+                    <include name="**/*.par"/>
+                </dirset>
+
+                <fileset dir="${build.testresources.dir}">
+                    <include name="**/*.jar"/>
+                    <include name="**/*.par"/>
+                </fileset>
+                <path refid="lib.class.path"/>
+                <pathelement path="${classes.dir}"/>
+                <!-- pathelement path="build/test.par"/ -->
+                <pathelement path="${src.dir}"/>
+                <!-- pick up properties from here -->
+                <pathelement path="${test.dir}"/>
+                <!-- pick up mappings from here -->
+            </classpath>
+        </java>
+    </target>
+
+
+</project>

Deleted: trunk/HibernateExt/entitymanager/changelog.txt
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/changelog.txt	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/changelog.txt	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,269 +0,0 @@
-Hibernate EntityManager Changelog
-==================================
-
-3.2.1.GA (8-12-2006)
---------------------
-
-** Bug
-    * [EJB-226] - JarVistor.getVisitor does not handle paths containing spaces correctly for an exploded par
-    * [EJB-229] - merge fails with detached obj in 1:1 relationship
-    * [EJB-237] - merge() causes version to increase
-    * [EJB-240] - attribute-override and embedded in orm.xml not working
-    * [EJB-244] - JarVisitor fails on exploded archives with spaces in path
-    * [EJB-247] - HibernatePersistence does not play well with other PersistenceProviders
-    * [EJB-252] - Clarify documentation on package use in persistence.xml <class> (and it's meaning)
-    * [EJB-253] - Support Weblogic JAR URL in JavaSE mode
-
-
-** Improvement
-    * [EJB-232] - Better documentation for <jar-file> and scanning outside of PU root
-    * [EJB-243] - Error in Documentation: persistence.xml for typical Java SE Environment
-    * [EJB-246] - Consider being in a JavaEE container when jta-datasource is used
-    * [EJB-248] - Wrap StaleStateException into an OptimisticLockException during em.getTransaction().commit()
-    * [EJB-254] - Allow DataSource overriding through createEntityManager(String, Map override)
-    * [EJB-256] - Avoid JAR locking on Windows and Tomcat due to URLConnection caching
-
-
-3.2.0.GA (16-10-2006)
----------------------
-Same code base as 3.2.0.CR3
-
-** Task
-    * [EJB-239] - Add EJB 3.0 JavaDoc to the distribution
-
-
-3.2.0.CR3 (04-10-2006)
-----------------------
-** Bug
-    * [EJB-150] - JarVisitor.addElement does not close passed input streams
-    * [EJB-221] - TransientObjectException with FetchType.LAZY on @ManyToOne and field access on target entity
-    * [EJB-231] - Optimistic locking exception could lead to java.lang.IllegalArgumentException: id to load is required for loading
-
-
-** Improvement
-    * [EJB-234] - Inefficiency during the flush operation
-
-
-3.2.0.CR2 (16-09-2006)
-----------------------
-** Bug
-    * [EJB-98] - EntityManager.find() throws an org.hibernate.ObjectDeletedException if you find something deleted in the same TXA
-    * [EJB-148] - Incorrect exception when @CollectionOfElement is used with @Where and FetchType is EAGER
-    * [EJB-174] - Ejb3Configuration can't open EJB Jar file with persistence.xml in Oracle OC4J server (Jifeng Liu)
-    * [EJB-181] - ExplodedJarVisitor and paths with white spaces
-    * [EJB-185] - Some EJB3 exceptions does not support nested exceptions
-    * [EJB-187] - RuntimeException raised in CallBack methods should be left as is
-    * [EJB-188] - @PostUpdate can be called even if @PreUpdate is not when object is in DELETED state
-    * [EJB-189] - em.getReference() should raise IllegalArgumentException if the id is of the wrong type
-    * [EJB-190] - Query.setParameter() should raise an IllegalArgumentException if the parameter does not exist
-    * [EJB-191] - Incoherent usage of getResultList(), executeUpdate() or getSingleResult() regarding the DML/Select style should raise an IllegalStateException
-    * [EJB-194] - Removing a detached instance is not allowed
-    * [EJB-195] - Wrong query should raise an IllegalArgumentException
-    * [EJB-196] - referencing a transient instance while flushing an association non cascaded should raise IllegalStateException
-    * [EJB-198] - On em.close(), tries to register the transaction even if the transaction is marked for rollback
-    * [EJB-202] - Inaccurate exception message for setFirstResult in QueryImpl
-    * [EJB-203] - exception when using top-level <access>PROPERTY</access> in orm.xml
-    * [EJB-204] - ClassCastException when using <mapped-superclass> in orm.xml
-    * [EJB-205] - refresh() should raise IllegalArgumentException if the entity is not managed
-    * [EJB-207] - em.lock(..., WRITE) raise NPE on some DBs
-    * [EJB-212] - excludeUnlistedClasses ignored in SE case
-    * [EJB-214] - Native Query can not be used with parameter
-    * [EJB-215] - EntityManager fails during transaction commit after it has been closed
-    * [EJB-216] - Query.getSingleResult() whose state-field is null raise an EntityNotFoundException rather than returning null
-    * [EJB-218] - markForRollback() should not swallow the original exception
-    * [EJB-220] - Entity listener documentation contradicts EJB3 specification
-    * [EJB-223] - EntityNotFoundDelegate not Serializable
-
-
-** Improvement
-    * [EJB-82] - Query interface should support parameter lists for positions
-    * [EJB-182] - Add Websphere proprietary jar protocol
-    * [EJB-186] - Set the default cache provider to NoCache to prevent PU misuse to raise exceptions
-    * [EJB-201] - Ejb3Configuration should output a warning if no persistence.xml is found
-    * [EJB-210] - OptimisticLockStrategy should expose the underlying stale entity
-    * [EJB-211] - JavaDoc the EJB 3 API
-
-** New Feature
-    * [EJB-154] - Allow to create/configure an EJB3Configuration without building a sessionfactory
-    * [EJB-160] - Push EJB3Configuration and SessionFactory into JNDI
-    * [EJB-184] - Add EM property for FlushMode
-
-
-3.2.0.CR1 (13-05-2006)
-----------------------
-** Bug
-    * [EJB-9] - Proxied instances should raise ENFE not LIE
-    * [EJB-59] - count(*) return Integer and not Long
-    * [EJB-101] - callback method overriding should avoid supermethod calls
-    * [EJB-116] - The EntityManager's configuration overwites configurations from the hibernate.cfg.xml file
-    * [EJB-167] - EntityManager must return null, if entity does not exist.
-    * [EJB-168] - Do not register Synchronization on Transaction marked as rollback
-    * [EJB-169] - MappingException thrown when META-INF/orm.xml is not found
-    * [EJB-173] - Resetting joined transaction state on a closed entity manager raise an exception
-    * [EJB-177] - in beforeCompletion phase, the transaction might not be returned causing an NPE
-
-
-** Improvement
-    * [EJB-84] - Integrate the ClassFileTransformer and pass the appropriate entities to enhance
-    * [EJB-159] - RESOURCE_LOCAL should be default in JavaSE
-    * [EJB-172] - Use Hibernate abstraction of the ByteCodeEnhancer for class file transformation
-    * [EJB-175] - Support for createNativeQuery.executeUpdate()
-
-** New Feature
-    * [EJB-165] - Support interceptor and callback XML overriding
-    * [EJB-170] - Try to find <mapping-file/> in the parsed JAR before delegating to the regular resource locator
-
-
-3.1.0.Beta8b (27-04-2006)
--------------------------
-
-** Bug
-    * [EJB-121] - FileZippedJarVisitor can not handle URL with white spaces in windows XP professional.
-    * [EJB-155] - assumes Map.Entry where string is returned
-    * [EJB-156] - Setting a transaction factory raise an assertion failure
-    * [EJB-166] - StaleObjectStaleException not wrapped into an optimisticLockException when merge is used
-
-
-
-** New Feature
-    * [EJB-157] - Display the version number at init time to avoid user confusion regarding the version used
-    * [EJB-164] - Support for EJB3 mapping files and META-INF/orm.xml
-
-
-3.1beta7 (27-03-2006)
----------------------
-
-** Bug
-    * [EJB-37] - Check all the spec exceptions to be sure we raise the right ones
-    * [EJB-80] - EMF bootstrapping doesn't work as documented
-    * [EJB-96] - Spelling error in 2.4 section of reference doc
-    * [EJB-114] - NPE when Persistence.createEntityManager(String) is used
-    * [EJB-115] - wrong loglevel in PersistenceXmlLoader.java (line 101)
-    * [EJB-118] - PersistenceXmlLoader logging a fail message
-    * [EJB-119] - @EntityResult definition is not correct
-    * [EJB-123] - Exception "EntityManager is closed" throwed when trying to check isOpen()
-    * [EJB-125] - Can't use Hibernate's FlushMode.NEVER with an EntityManager
-    * [EJB-134] - javax.persistence.OptimisticLockException not thrown
-    * [EJB-139] - em.getTransaction() should raise IllegalStateException if accessed on a JTA EM
-    * [EJB-145] - Support EntityManager.joinTransaction()
-
-
-** Improvement
-    * [EJB-77] - Getting access to the annotationconfiguration behind a Ejb3Configuration
-    * [EJB-135] - em.close() should close the API but let the EM in sync with the attached transaction
-    * [EJB-147] - Validate persistence.xml file from persistence_1_0.xsd
-
-** New Feature
-    * [EJB-90] - Mark transaction for Rollbacked on PersistenceException
-    * [EJB-106] - EntityManager.lock( , LockModeType.WRITE)
-    * [EJB-117] - extra persist() queue
-    * [EJB-137] - Implements EntityExistsException
-    * [EJB-138] - Implements EntityTransaction.setRollbackOnly()
-    * [EJB-141] - Update EntityManagerFactory interface by removing PersistenceContextType and adding the overriding map
-    * [EJB-142] - RollbackTransaction on JTA should clear the persistence context
-    * [EJB-143] - Set the transaction_factory automatically from Transaction_type unless explicitly set
-    * [EJB-144] - Failure of EntityTransaction.commit() should rollback();
-
-
-** Task
-    * [EJB-107] - Check use of persistenceUnitInfo.getClassLoader()
-
-
-3.1beta6 (20-01-2006)
----------------------
-** Bug
-    * [EJB-93] - @PrePersist callback not called on cascade
-    * [EJB-110] - misnamed method in PersistenceUnitInfo
-    * [EJB-111] - close() throws IllegalStateException( "transaction in progress")
-
-** New Feature
-    * [EJB-50] - Entity callbacks should handle subclassing
-    * [EJB-83] - PersistentUnitInfo and new persistence.xml schema as per the pfd
-    * [EJB-85] - Support CUD operations out of transactions
-    * [EJB-86] - EntityManager.getFlushMode()
-    * [EJB-87] - EntityManager.lock( , LockModeType.READ)
-    * [EJB-88] - EntityManager.clear()
-    * [EJB-89] - Replace EntityNotFoundException to NoResultException for query.getSingleResult()
-    * [EJB-91] - persistence.xml structure changes as per the PFD
-    * [EJB-92] - Implements transactional-type
-    * [EJB-104] - Flag for class file transformation
-    * [EJB-108] - Support EJB3 overriding properties (provider, jta / non-jta datasource, transactionType) over persistence.xml
-
-
-** Improvement
-    * [EJB-100] - Multiple lifecycle per event
-    * [EJB-102] - EJB3 no longer requires to rollback the ids
-
-
-** Deprecation
-    * [EJB-105] - Implicit positional parameters for EJBQL queries is no longer supported
-
-3.1beta5 (13-12-2005)
----------------------
-** Bug
-    * [EJB-52] - PERSIST cascade loads unilitialized elements at flush time
-    * [EJB-68] - hibernate.ejb.interceptor property in persistence.xml is ignored
-    * [EJB-73] - Id is not set in @PostPersist
-    * [EJB-76] - JarVisitor unqualify algorithm fails when the name ends with 'ar' and is less than 4 chars
-    * [EJB-78] - default value for hibernate.transaction.flush_before_completion
-
-** New Feature
-    * [EJB-58] - Support @MyAnnotation annotated with an @EntityListener
-    * [EJB-71] - Support custom event listeners
-
-
-** Improvement
-    * [EJB-35] - Support custom NamingStrategy as property.
-    * [EJB-72] - Make setDataSource() more out of container friendly
-    * [EJB-75] - Fall back to <property name="blah">blah</property> when the value attribute is empty
-    * [EJB-79] - Package.getPackage() returns null on some classloaders
-
-
-3.1beta4 (07-10-2005)
----------------------
- * EJB-67 Lazy access to the stream in JarVisitor leading to a non access when filters are empty (ie no filters)
- * EJB-65 handle eclipse bundleresource url protocol during metadata search
- * EJB-66 Support all url protocols that returns zip streams for jars like http
- * EJB-62 Error during stateful session bean passivation
- * EJB-61 implicit parameter ? no longer supported
- * EJB-63 Positional parameters should start from index 1 to say sort of consistent with the spec
-
-3.1beta3 (14-09-2005)
----------------------
- * EJB-6 Support ?1, ?2 style positional parameters
- * EJB-60 Support byte code instrumentation via a ClassFileTransformer
- * EJB-55 Problems using a .par file with Tomcat
- * EJB-56 Support exploded jar files *not* ending with .xar
- * EJB-51 Support persistence.xml declaration and hibernate.cfg.xml
- * EJB-53 DELETE_ORPHAN not executed at flush time
- * EJB-52 Persist cascade loads uninitialized elements at flush time
- * EJB-43 Autodetection magic leads to duplicate imports
- * EJB-24 ByteArrayBlobType incompatible with Oracle
- * EJB-28 create an EMF through PersistenceInfo
- * EJB-44 Support Hibernate Interceptors in EJB3 imlementation as an extension
- * EJB-40 Entity callbacks should cast away access modifiers
- * EJB-48 Plug Validator framework into HEM
- * EJB-47 Validator and Jacc event listeners clashes
-
-3.1beta2 (04-08-2005)
----------------------
- * Support package names in <class></class>
- * EJB-42 Autodetection magic ignores hibernate.cfg.xml
- * EJB-45 Allow to disable autodetection in .par through a property
- * EJB-41 Short-circuit dirty checking when no callback are actually called
- * EJB-38 Standalone EM should search for package-info files
- * EJB-31 Out-of-container should search for .hbm.xml files
- * EJB-29 Lifecycle callbacks and dirty checking clash
- * EJB-36 proxied instances raise an exception in em.contains()
- * EJB-28 support injected DataSource
- * EJB-34 EMF.isOpen() is wrong
- * EJB-27 Support transaction-less operations with getEntityManager()
- * EJB-23 No lifecycle interceptor used when getCurrentSession() is called
- * EJB-20 Sync Hibernate *state* and entity on lifecycle @Callbacks
- * EJB-21 NPE in TransactionImpl.isActive() when tx is not initialized (Shane Bryzak)
- * EJB-19 <jar-file/> analysed, but the resource path is mandatory and not only the jar name
- * EJB-18 get mapped classes from .par files both exploded and regular zip
-
-3.1beta1 Preview (24-06-2005)
------------------------------
-Initial release
\ No newline at end of file

Copied: trunk/HibernateExt/entitymanager/changelog.txt (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/changelog.txt)
===================================================================
--- trunk/HibernateExt/entitymanager/changelog.txt	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/changelog.txt	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,269 @@
+Hibernate EntityManager Changelog
+==================================
+
+3.2.1.GA (8-12-2006)
+--------------------
+
+** Bug
+    * [EJB-226] - JarVistor.getVisitor does not handle paths containing spaces correctly for an exploded par
+    * [EJB-229] - merge fails with detached obj in 1:1 relationship
+    * [EJB-237] - merge() causes version to increase
+    * [EJB-240] - attribute-override and embedded in orm.xml not working
+    * [EJB-244] - JarVisitor fails on exploded archives with spaces in path
+    * [EJB-247] - HibernatePersistence does not play well with other PersistenceProviders
+    * [EJB-252] - Clarify documentation on package use in persistence.xml <class> (and it's meaning)
+    * [EJB-253] - Support Weblogic JAR URL in JavaSE mode
+
+
+** Improvement
+    * [EJB-232] - Better documentation for <jar-file> and scanning outside of PU root
+    * [EJB-243] - Error in Documentation: persistence.xml for typical Java SE Environment
+    * [EJB-246] - Consider being in a JavaEE container when jta-datasource is used
+    * [EJB-248] - Wrap StaleStateException into an OptimisticLockException during em.getTransaction().commit()
+    * [EJB-254] - Allow DataSource overriding through createEntityManager(String, Map override)
+    * [EJB-256] - Avoid JAR locking on Windows and Tomcat due to URLConnection caching
+
+
+3.2.0.GA (16-10-2006)
+---------------------
+Same code base as 3.2.0.CR3
+
+** Task
+    * [EJB-239] - Add EJB 3.0 JavaDoc to the distribution
+
+
+3.2.0.CR3 (04-10-2006)
+----------------------
+** Bug
+    * [EJB-150] - JarVisitor.addElement does not close passed input streams
+    * [EJB-221] - TransientObjectException with FetchType.LAZY on @ManyToOne and field access on target entity
+    * [EJB-231] - Optimistic locking exception could lead to java.lang.IllegalArgumentException: id to load is required for loading
+
+
+** Improvement
+    * [EJB-234] - Inefficiency during the flush operation
+
+
+3.2.0.CR2 (16-09-2006)
+----------------------
+** Bug
+    * [EJB-98] - EntityManager.find() throws an org.hibernate.ObjectDeletedException if you find something deleted in the same TXA
+    * [EJB-148] - Incorrect exception when @CollectionOfElement is used with @Where and FetchType is EAGER
+    * [EJB-174] - Ejb3Configuration can't open EJB Jar file with persistence.xml in Oracle OC4J server (Jifeng Liu)
+    * [EJB-181] - ExplodedJarVisitor and paths with white spaces
+    * [EJB-185] - Some EJB3 exceptions does not support nested exceptions
+    * [EJB-187] - RuntimeException raised in CallBack methods should be left as is
+    * [EJB-188] - @PostUpdate can be called even if @PreUpdate is not when object is in DELETED state
+    * [EJB-189] - em.getReference() should raise IllegalArgumentException if the id is of the wrong type
+    * [EJB-190] - Query.setParameter() should raise an IllegalArgumentException if the parameter does not exist
+    * [EJB-191] - Incoherent usage of getResultList(), executeUpdate() or getSingleResult() regarding the DML/Select style should raise an IllegalStateException
+    * [EJB-194] - Removing a detached instance is not allowed
+    * [EJB-195] - Wrong query should raise an IllegalArgumentException
+    * [EJB-196] - referencing a transient instance while flushing an association non cascaded should raise IllegalStateException
+    * [EJB-198] - On em.close(), tries to register the transaction even if the transaction is marked for rollback
+    * [EJB-202] - Inaccurate exception message for setFirstResult in QueryImpl
+    * [EJB-203] - exception when using top-level <access>PROPERTY</access> in orm.xml
+    * [EJB-204] - ClassCastException when using <mapped-superclass> in orm.xml
+    * [EJB-205] - refresh() should raise IllegalArgumentException if the entity is not managed
+    * [EJB-207] - em.lock(..., WRITE) raise NPE on some DBs
+    * [EJB-212] - excludeUnlistedClasses ignored in SE case
+    * [EJB-214] - Native Query can not be used with parameter
+    * [EJB-215] - EntityManager fails during transaction commit after it has been closed
+    * [EJB-216] - Query.getSingleResult() whose state-field is null raise an EntityNotFoundException rather than returning null
+    * [EJB-218] - markForRollback() should not swallow the original exception
+    * [EJB-220] - Entity listener documentation contradicts EJB3 specification
+    * [EJB-223] - EntityNotFoundDelegate not Serializable
+
+
+** Improvement
+    * [EJB-82] - Query interface should support parameter lists for positions
+    * [EJB-182] - Add Websphere proprietary jar protocol
+    * [EJB-186] - Set the default cache provider to NoCache to prevent PU misuse to raise exceptions
+    * [EJB-201] - Ejb3Configuration should output a warning if no persistence.xml is found
+    * [EJB-210] - OptimisticLockStrategy should expose the underlying stale entity
+    * [EJB-211] - JavaDoc the EJB 3 API
+
+** New Feature
+    * [EJB-154] - Allow to create/configure an EJB3Configuration without building a sessionfactory
+    * [EJB-160] - Push EJB3Configuration and SessionFactory into JNDI
+    * [EJB-184] - Add EM property for FlushMode
+
+
+3.2.0.CR1 (13-05-2006)
+----------------------
+** Bug
+    * [EJB-9] - Proxied instances should raise ENFE not LIE
+    * [EJB-59] - count(*) return Integer and not Long
+    * [EJB-101] - callback method overriding should avoid supermethod calls
+    * [EJB-116] - The EntityManager's configuration overwites configurations from the hibernate.cfg.xml file
+    * [EJB-167] - EntityManager must return null, if entity does not exist.
+    * [EJB-168] - Do not register Synchronization on Transaction marked as rollback
+    * [EJB-169] - MappingException thrown when META-INF/orm.xml is not found
+    * [EJB-173] - Resetting joined transaction state on a closed entity manager raise an exception
+    * [EJB-177] - in beforeCompletion phase, the transaction might not be returned causing an NPE
+
+
+** Improvement
+    * [EJB-84] - Integrate the ClassFileTransformer and pass the appropriate entities to enhance
+    * [EJB-159] - RESOURCE_LOCAL should be default in JavaSE
+    * [EJB-172] - Use Hibernate abstraction of the ByteCodeEnhancer for class file transformation
+    * [EJB-175] - Support for createNativeQuery.executeUpdate()
+
+** New Feature
+    * [EJB-165] - Support interceptor and callback XML overriding
+    * [EJB-170] - Try to find <mapping-file/> in the parsed JAR before delegating to the regular resource locator
+
+
+3.1.0.Beta8b (27-04-2006)
+-------------------------
+
+** Bug
+    * [EJB-121] - FileZippedJarVisitor can not handle URL with white spaces in windows XP professional.
+    * [EJB-155] - assumes Map.Entry where string is returned
+    * [EJB-156] - Setting a transaction factory raise an assertion failure
+    * [EJB-166] - StaleObjectStaleException not wrapped into an optimisticLockException when merge is used
+
+
+
+** New Feature
+    * [EJB-157] - Display the version number at init time to avoid user confusion regarding the version used
+    * [EJB-164] - Support for EJB3 mapping files and META-INF/orm.xml
+
+
+3.1beta7 (27-03-2006)
+---------------------
+
+** Bug
+    * [EJB-37] - Check all the spec exceptions to be sure we raise the right ones
+    * [EJB-80] - EMF bootstrapping doesn't work as documented
+    * [EJB-96] - Spelling error in 2.4 section of reference doc
+    * [EJB-114] - NPE when Persistence.createEntityManager(String) is used
+    * [EJB-115] - wrong loglevel in PersistenceXmlLoader.java (line 101)
+    * [EJB-118] - PersistenceXmlLoader logging a fail message
+    * [EJB-119] - @EntityResult definition is not correct
+    * [EJB-123] - Exception "EntityManager is closed" throwed when trying to check isOpen()
+    * [EJB-125] - Can't use Hibernate's FlushMode.NEVER with an EntityManager
+    * [EJB-134] - javax.persistence.OptimisticLockException not thrown
+    * [EJB-139] - em.getTransaction() should raise IllegalStateException if accessed on a JTA EM
+    * [EJB-145] - Support EntityManager.joinTransaction()
+
+
+** Improvement
+    * [EJB-77] - Getting access to the annotationconfiguration behind a Ejb3Configuration
+    * [EJB-135] - em.close() should close the API but let the EM in sync with the attached transaction
+    * [EJB-147] - Validate persistence.xml file from persistence_1_0.xsd
+
+** New Feature
+    * [EJB-90] - Mark transaction for Rollbacked on PersistenceException
+    * [EJB-106] - EntityManager.lock( , LockModeType.WRITE)
+    * [EJB-117] - extra persist() queue
+    * [EJB-137] - Implements EntityExistsException
+    * [EJB-138] - Implements EntityTransaction.setRollbackOnly()
+    * [EJB-141] - Update EntityManagerFactory interface by removing PersistenceContextType and adding the overriding map
+    * [EJB-142] - RollbackTransaction on JTA should clear the persistence context
+    * [EJB-143] - Set the transaction_factory automatically from Transaction_type unless explicitly set
+    * [EJB-144] - Failure of EntityTransaction.commit() should rollback();
+
+
+** Task
+    * [EJB-107] - Check use of persistenceUnitInfo.getClassLoader()
+
+
+3.1beta6 (20-01-2006)
+---------------------
+** Bug
+    * [EJB-93] - @PrePersist callback not called on cascade
+    * [EJB-110] - misnamed method in PersistenceUnitInfo
+    * [EJB-111] - close() throws IllegalStateException( "transaction in progress")
+
+** New Feature
+    * [EJB-50] - Entity callbacks should handle subclassing
+    * [EJB-83] - PersistentUnitInfo and new persistence.xml schema as per the pfd
+    * [EJB-85] - Support CUD operations out of transactions
+    * [EJB-86] - EntityManager.getFlushMode()
+    * [EJB-87] - EntityManager.lock( , LockModeType.READ)
+    * [EJB-88] - EntityManager.clear()
+    * [EJB-89] - Replace EntityNotFoundException to NoResultException for query.getSingleResult()
+    * [EJB-91] - persistence.xml structure changes as per the PFD
+    * [EJB-92] - Implements transactional-type
+    * [EJB-104] - Flag for class file transformation
+    * [EJB-108] - Support EJB3 overriding properties (provider, jta / non-jta datasource, transactionType) over persistence.xml
+
+
+** Improvement
+    * [EJB-100] - Multiple lifecycle per event
+    * [EJB-102] - EJB3 no longer requires to rollback the ids
+
+
+** Deprecation
+    * [EJB-105] - Implicit positional parameters for EJBQL queries is no longer supported
+
+3.1beta5 (13-12-2005)
+---------------------
+** Bug
+    * [EJB-52] - PERSIST cascade loads unilitialized elements at flush time
+    * [EJB-68] - hibernate.ejb.interceptor property in persistence.xml is ignored
+    * [EJB-73] - Id is not set in @PostPersist
+    * [EJB-76] - JarVisitor unqualify algorithm fails when the name ends with 'ar' and is less than 4 chars
+    * [EJB-78] - default value for hibernate.transaction.flush_before_completion
+
+** New Feature
+    * [EJB-58] - Support @MyAnnotation annotated with an @EntityListener
+    * [EJB-71] - Support custom event listeners
+
+
+** Improvement
+    * [EJB-35] - Support custom NamingStrategy as property.
+    * [EJB-72] - Make setDataSource() more out of container friendly
+    * [EJB-75] - Fall back to <property name="blah">blah</property> when the value attribute is empty
+    * [EJB-79] - Package.getPackage() returns null on some classloaders
+
+
+3.1beta4 (07-10-2005)
+---------------------
+ * EJB-67 Lazy access to the stream in JarVisitor leading to a non access when filters are empty (ie no filters)
+ * EJB-65 handle eclipse bundleresource url protocol during metadata search
+ * EJB-66 Support all url protocols that returns zip streams for jars like http
+ * EJB-62 Error during stateful session bean passivation
+ * EJB-61 implicit parameter ? no longer supported
+ * EJB-63 Positional parameters should start from index 1 to say sort of consistent with the spec
+
+3.1beta3 (14-09-2005)
+---------------------
+ * EJB-6 Support ?1, ?2 style positional parameters
+ * EJB-60 Support byte code instrumentation via a ClassFileTransformer
+ * EJB-55 Problems using a .par file with Tomcat
+ * EJB-56 Support exploded jar files *not* ending with .xar
+ * EJB-51 Support persistence.xml declaration and hibernate.cfg.xml
+ * EJB-53 DELETE_ORPHAN not executed at flush time
+ * EJB-52 Persist cascade loads uninitialized elements at flush time
+ * EJB-43 Autodetection magic leads to duplicate imports
+ * EJB-24 ByteArrayBlobType incompatible with Oracle
+ * EJB-28 create an EMF through PersistenceInfo
+ * EJB-44 Support Hibernate Interceptors in EJB3 imlementation as an extension
+ * EJB-40 Entity callbacks should cast away access modifiers
+ * EJB-48 Plug Validator framework into HEM
+ * EJB-47 Validator and Jacc event listeners clashes
+
+3.1beta2 (04-08-2005)
+---------------------
+ * Support package names in <class></class>
+ * EJB-42 Autodetection magic ignores hibernate.cfg.xml
+ * EJB-45 Allow to disable autodetection in .par through a property
+ * EJB-41 Short-circuit dirty checking when no callback are actually called
+ * EJB-38 Standalone EM should search for package-info files
+ * EJB-31 Out-of-container should search for .hbm.xml files
+ * EJB-29 Lifecycle callbacks and dirty checking clash
+ * EJB-36 proxied instances raise an exception in em.contains()
+ * EJB-28 support injected DataSource
+ * EJB-34 EMF.isOpen() is wrong
+ * EJB-27 Support transaction-less operations with getEntityManager()
+ * EJB-23 No lifecycle interceptor used when getCurrentSession() is called
+ * EJB-20 Sync Hibernate *state* and entity on lifecycle @Callbacks
+ * EJB-21 NPE in TransactionImpl.isActive() when tx is not initialized (Shane Bryzak)
+ * EJB-19 <jar-file/> analysed, but the resource path is mandatory and not only the jar name
+ * EJB-18 get mapped classes from .par files both exploded and regular zip
+
+3.1beta1 Preview (24-06-2005)
+-----------------------------
+Initial release
\ No newline at end of file

Copied: trunk/HibernateExt/entitymanager/doc (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/doc)

Copied: trunk/HibernateExt/entitymanager/doc/reference (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/doc/reference)


Property changes on: trunk/HibernateExt/entitymanager/doc/reference
___________________________________________________________________
Name: svn:ignore
   + build

Deleted: trunk/HibernateExt/entitymanager/doc/reference/.cvsignore
===================================================================
(Binary files differ)

Copied: trunk/HibernateExt/entitymanager/doc/reference/.cvsignore (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/doc/reference/.cvsignore)
===================================================================
(Binary files differ)

Deleted: trunk/HibernateExt/entitymanager/doc/reference/build.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/doc/reference/build.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/doc/reference/build.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,18 +0,0 @@
-<project name="Documentation" default="all.doc" basedir=".">
-
-    <!-- Use the core Hibernate3 doc build system -->
-    <import file="../../../common/common-build.xml"/>
-    <import file="${hibernate-cvs.doc.reference}/build.xml"/>
-
-
-    <target name="all.doc" depends="clean">
-
-        <!-- TRANSLATOR: Duplicate this call for your language -->
-        <antcall target="lang.all">
-            <param name="docname" value="hibernate_entitymanager"/>
-            <param name="lang" value="en"/>
-        </antcall>
-
-    </target>
-
-</project>

Copied: trunk/HibernateExt/entitymanager/doc/reference/build.xml (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/doc/reference/build.xml)
===================================================================
--- trunk/HibernateExt/entitymanager/doc/reference/build.xml	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/doc/reference/build.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,18 @@
+<project name="Documentation" default="all.doc" basedir=".">
+
+    <!-- Use the core Hibernate3 doc build system -->
+    <import file="../../../common/common-build.xml"/>
+    <import file="${hibernate-cvs.doc.reference}/build.xml"/>
+
+
+    <target name="all.doc" depends="clean">
+
+        <!-- TRANSLATOR: Duplicate this call for your language -->
+        <antcall target="lang.all">
+            <param name="docname" value="hibernate_entitymanager"/>
+            <param name="lang" value="en"/>
+        </antcall>
+
+    </target>
+
+</project>

Copied: trunk/HibernateExt/entitymanager/doc/reference/en (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/doc/reference/en)

Copied: trunk/HibernateExt/entitymanager/doc/reference/en/images (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/doc/reference/en/images)

Deleted: trunk/HibernateExt/entitymanager/doc/reference/en/images/hibernate_logo_a.png
===================================================================
(Binary files differ)

Copied: trunk/HibernateExt/entitymanager/doc/reference/en/images/hibernate_logo_a.png (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/doc/reference/en/images/hibernate_logo_a.png)
===================================================================
(Binary files differ)

Deleted: trunk/HibernateExt/entitymanager/doc/reference/en/master.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/doc/reference/en/master.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/doc/reference/en/master.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3CR3//EN"
-"../../../../../Hibernate3/doc/reference/support/docbook-dtd/docbookx.dtd" [
-<!ENTITY architecture SYSTEM "modules/architecture.xml">
-<!ENTITY configuration SYSTEM "modules/configuration.xml">
-<!ENTITY entitymanagerapi SYSTEM "modules/entitymanagerapi.xml">
-<!ENTITY transactions SYSTEM "modules/transactions.xml">
-<!ENTITY listeners SYSTEM "modules/listeners.xml">
-<!ENTITY batch SYSTEM "modules/batch.xml">
-<!ENTITY query-ejbql SYSTEM "modules/query_ejbql.xml">
-<!ENTITY native SYSTEM "modules/query_native.xml">
-]>
-<book lang="en">
-  <bookinfo>
-    <title>Hibernate EntityManager</title>
-
-    <subtitle>User guide</subtitle>
-
-    <releaseinfo>3.2.1.GA</releaseinfo>
-
-    <mediaobject>
-      <imageobject>
-        <imagedata fileref="images/hibernate_logo_a.png" format="png" />
-      </imageobject>
-    </mediaobject>
-  </bookinfo>
-
-  <toc></toc>
-
-  <preface>
-    <title>Introducing EJB3 Persistence</title>
-
-    <para>The EJB3 specification recognizes the interest and the success of
-    the transparent object/relational mapping paradigm. The EJB3 specification
-    standardizes the basic APIs and the metadata needed for any
-    object/relational persistence mechanism. <emphasis>Hibernate
-    EntityManager</emphasis> implements the programming interfaces and
-    lifecycle rules as defined by the EJB3 persistence specification. Together
-    with <emphasis>Hibernate Annotations</emphasis>, this wrapper implements a
-    complete (and standalone) EJB3 persistence solution on top of the mature
-    Hibernate core. You may use a combination of all three together,
-    annotations without EJB3 programming interfaces and lifecycle, or even
-    pure native Hibernate, depending on the business and technical needs of
-    your project. You can at all times fall back to Hibernate native APIs, or
-    if required, even to native JDBC and SQL.</para>
-  </preface>
-
-  &architecture;
-
-  &configuration;
-
-  &entitymanagerapi;
-
-  &transactions;
-
-  &listeners;
-
-  &batch;
-
-  &query-ejbql;
-
-  &native;
-</book>
\ No newline at end of file

Copied: trunk/HibernateExt/entitymanager/doc/reference/en/master.xml (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/doc/reference/en/master.xml)
===================================================================
--- trunk/HibernateExt/entitymanager/doc/reference/en/master.xml	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/doc/reference/en/master.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3CR3//EN"
+"../../../../../Hibernate3/doc/reference/support/docbook-dtd/docbookx.dtd" [
+<!ENTITY architecture SYSTEM "modules/architecture.xml">
+<!ENTITY configuration SYSTEM "modules/configuration.xml">
+<!ENTITY entitymanagerapi SYSTEM "modules/entitymanagerapi.xml">
+<!ENTITY transactions SYSTEM "modules/transactions.xml">
+<!ENTITY listeners SYSTEM "modules/listeners.xml">
+<!ENTITY batch SYSTEM "modules/batch.xml">
+<!ENTITY query-ejbql SYSTEM "modules/query_ejbql.xml">
+<!ENTITY native SYSTEM "modules/query_native.xml">
+]>
+<book lang="en">
+  <bookinfo>
+    <title>Hibernate EntityManager</title>
+
+    <subtitle>User guide</subtitle>
+
+    <releaseinfo>3.2.1.GA</releaseinfo>
+
+    <mediaobject>
+      <imageobject>
+        <imagedata fileref="images/hibernate_logo_a.png" format="png" />
+      </imageobject>
+    </mediaobject>
+  </bookinfo>
+
+  <toc></toc>
+
+  <preface>
+    <title>Introducing EJB3 Persistence</title>
+
+    <para>The EJB3 specification recognizes the interest and the success of
+    the transparent object/relational mapping paradigm. The EJB3 specification
+    standardizes the basic APIs and the metadata needed for any
+    object/relational persistence mechanism. <emphasis>Hibernate
+    EntityManager</emphasis> implements the programming interfaces and
+    lifecycle rules as defined by the EJB3 persistence specification. Together
+    with <emphasis>Hibernate Annotations</emphasis>, this wrapper implements a
+    complete (and standalone) EJB3 persistence solution on top of the mature
+    Hibernate core. You may use a combination of all three together,
+    annotations without EJB3 programming interfaces and lifecycle, or even
+    pure native Hibernate, depending on the business and technical needs of
+    your project. You can at all times fall back to Hibernate native APIs, or
+    if required, even to native JDBC and SQL.</para>
+  </preface>
+
+  &architecture;
+
+  &configuration;
+
+  &entitymanagerapi;
+
+  &transactions;
+
+  &listeners;
+
+  &batch;
+
+  &query-ejbql;
+
+  &native;
+</book>
\ No newline at end of file

Copied: trunk/HibernateExt/entitymanager/doc/reference/en/modules (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/doc/reference/en/modules)

Deleted: trunk/HibernateExt/entitymanager/doc/reference/en/modules/architecture.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/doc/reference/en/modules/architecture.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/doc/reference/en/modules/architecture.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,266 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<chapter id="architecture">
-  <title>Architecture</title>
-
-  <section>
-    <title>Definitions</title>
-
-    <para>EJB3 is part of the Java EE 5.0 platform. Persistence in EJB3 is
-    available in EJB3 containers, as well as for standalone J2SE applications
-    that execute outside of a particular container. The following programming
-    interfaces and artifacts are available in both environments.</para>
-
-    <variablelist spacing="compact">
-      <varlistentry>
-        <term>
-          <literal>EntityManagerFactory</literal>
-        </term>
-
-        <listitem>
-          <para>An entity manager factory provides entity manager instances,
-          all instances are configured to connect to the same database, to use
-          the same default settings as defined by the particular
-          implementation, etc. You can prepare several entity manager
-          factories to access several data stores. This interface is similar
-          to the <literal>SessionFactory</literal> in native Hibernate.</para>
-        </listitem>
-      </varlistentry>
-
-      <varlistentry>
-        <term>
-          <literal>EntityManager</literal>
-        </term>
-
-        <listitem>
-          <para>The <literal>EntityManager</literal> API is used to access a
-          database in a particular unit of work. It is used to create and
-          remove persistent entity instances, to find entities by their
-          primary key identity, and to query over all entities. This interface
-          is similar to the <literal>Session</literal> in Hibernate.</para>
-        </listitem>
-      </varlistentry>
-
-      <varlistentry>
-        <term>Persistence context</term>
-
-        <listitem>
-          <para>A persistence context is a set of entity instances in which
-          for any persistent entity identity there is a unique entity
-          instance. Within the persistence context, the entity instances and
-          their lifecycle is managed by a particular entity manager. The scope
-          of this context can either be the transaction, or an extended unit
-          of work.</para>
-        </listitem>
-      </varlistentry>
-
-      <varlistentry>
-        <term>Persistence unit</term>
-
-        <listitem>
-          <para>The set of entity types that can be managed by a given entity
-          manager is defined by a persistence unit. A persistence unit defines
-          the set of all classes that are related or grouped by the
-          application, and which must be collocated in their mapping to a
-          single data store.</para>
-        </listitem>
-      </varlistentry>
-
-      <varlistentry>
-        <term>Container-managed entity manager</term>
-
-        <listitem>
-          <para>An Entity Manager whose lifecycle is managed by the
-          container</para>
-        </listitem>
-      </varlistentry>
-
-      <varlistentry>
-        <term>Application-managed entity manager</term>
-
-        <listitem>
-          <para>An Entity Manager whose lifecycle is managed by the
-          application.</para>
-        </listitem>
-      </varlistentry>
-
-      <varlistentry>
-        <term>JTA entity manager</term>
-
-        <listitem>
-          <para>Entity manager involved in a JTA transaction</para>
-        </listitem>
-      </varlistentry>
-
-      <varlistentry>
-        <term>Resource-local entity manager</term>
-
-        <listitem>
-          <para>Entity manager using a resource transaction (not a JTA
-          transaction).</para>
-        </listitem>
-      </varlistentry>
-    </variablelist>
-  </section>
-
-  <section>
-    <title>EJB container environment</title>
-
-    <section>
-      <title>Container-managed entity manager</title>
-
-      <para>The most common and widely used entity manager in a Java EE
-      environment is the container-managed entity manager. In this mode, the
-      container is responsible for the opening and closing of the entity
-      manager (this is transparent to the application). It is also responsible
-      for transaction boundaries. A container-managed entity manager is
-      obtained in an application through dependency injection or through JNDI
-      lookup, A container-managed entity manger requires the use of a JTA
-      transaction.</para>
-    </section>
-
-    <section>
-      <title>Application-managed entity manager</title>
-
-      <para>An application-managed entity manager allows you to control the
-      entity manager in application code. This entity manager is retrieved
-      through the <literal>EntityManagerFactory</literal> API. An application
-      managed entity manager can be either involved in the current JTA
-      transaction (a JTA entity manager), or the transaction may be controlled
-      through the <literal>EntityTransaction</literal> API (a resource-local
-      entity manager). The resource-local entity manager transaction maps to a
-      direct resource transaction (i. e. in Hibernate's case a JDBC
-      transaction). The entity manager type (JTA or resource-local) is defined
-      at configuration time, when setting up the entity manager
-      factory.</para>
-    </section>
-
-    <section id="architecture-ejb-persistctxscope">
-      <title>Persistence context scope</title>
-
-      <para>An entity manager is the API to interact with the persistence
-      context. Two common strategies can be used: binding the persistence
-      context to the transaction boundaries, or keeping the persistence
-      context available across several transactions.</para>
-
-      <para>The most common case is to bind the persistence context scope to
-      the current transaction scope. This is only doable when JTA transactions
-      are used: the persistence context is associated with the JTA transaction
-      life cycle. When a entity manager is invoked, the persistence context is
-      also opened, if there is no persistence context associated with the
-      current JTA transaction. Otherwise, the associated persistence context
-      is used. The persistence context ends when the JTA transaction
-      completes. This means that during the JTA transaction, an application
-      will be able to work on managed entities of the same persistence
-      context. In other words, you don't have to pass the entity manager's
-      persistence context across your EJB method calls, but simply use
-      dependency injection or lookup whenever you need an entity
-      manager.</para>
-
-      <para>You can also use an extended persistence context. This can be
-      combined with stateful session beans, if you use a container-managed
-      entity manager: the persistence context is created when an entity
-      manager is retrieved from dependency injection or JNDI lookup , and is
-      kept until the container closes it after the completion of the
-      <literal>Remove</literal> stateful session bean method. This is a
-      perfect mechanism for implementing a "long" unit of work pattern. For
-      example, if you have to deal with multiple user interaction cycles as a
-      single unit of work (e.g. a wizard dialog that has to be fully
-      completed), you usually model this as a unit of work from the point of
-      view of the application user, and implement it using an extended
-      persistence context. Please refer to the Hibernate reference manual or
-      the book Hibernate In Action for more information about this pattern.
-      JBoss Seam is a framework tht link together JSF and EJB3 around the
-      notion of conversation and unit of work. For an application-managed
-      entity manager the persistence context is created when the entity
-      manager is created and kept until the entity manager is closed. In an
-      extended persistence context, all modification operations (persist,
-      merge, remove) executed outside a transaction are queued until the
-      persistence context is attached to a transaction. The transaction
-      typically occurs at the user process end, allowing the whole process to
-      be commited or rollbacked. For application-managed entity manager only
-      support the exctended persistence context.</para>
-
-      <para>A resource-local entity manager or an entity manager created with
-      <literal>EntityManagerFactory.createEntityManager()</literal>
-      (application-managed) has a one-to-one relationship with a persistence
-      context. In other situations <emphasis>persistence context
-      propagation</emphasis> occurs.</para>
-    </section>
-
-    <section id="architecture-ejb-persistctxpropagation">
-      <title>Persistence context propagation</title>
-
-      <para>Persistence context propagation occurs for container-managed
-      entity managers.</para>
-
-      <para>In a transaction-scoped container managed entity manager (common
-      case in a Java EE environment), the JTA transaction propagation is the
-      same as the persistence context resource propagation. In other words,
-      container-managed transaction-scoped entity managers retrieved within a
-      given JTA transaction all share the same persistence context. In
-      Hibernate terms, this means all managers share the same session.</para>
-
-      <para>Important: persistence context are never shared between different
-      JTA transactions or between entity manager that do not came from the
-      same entity manager factory. There are some noteworthy exceptions for
-      context propagation when using extended persistence contexts:</para>
-
-      <itemizedlist>
-        <listitem>
-          <para>If a stateless session bean, message-driven bean, or stateful
-          session bean with a transaction-scoped persistence context calls a
-          stateful session bean with an extended persistence context in the
-          same JTA transaction, an IllegalStateException is thrown.</para>
-        </listitem>
-
-        <listitem>
-          <para>If a stateful session bean with an extended persistence
-          context calls as stateless session bean or a stateful session bean
-          with a transaction-scoped persistence context in the same JTA
-          transaction, the persistence context is propagated.</para>
-        </listitem>
-
-        <listitem>
-          <para>If a stateful session bean with an extended persistence
-          context calls a stateless or stateful session bean in a different
-          JTA transaction context, the persistence context is not
-          propagated.</para>
-        </listitem>
-
-        <listitem>
-          <para>If a stateful session bean with an extended persistence
-          context instantiates another stateful session bean with an extended
-          persistence context, the extended persistence context is inherited
-          by the second stateful session bean. If the second stateful session
-          bean is called with a different transaction context than the first,
-          an IllegalStateException is thrown.</para>
-        </listitem>
-
-        <listitem>
-          <para>If a stateful session bean with an extended persistence
-          context calls a stateful session bean with a different extended
-          persistence context in the same transaction, an
-          IllegalStateException is thrown.</para>
-        </listitem>
-      </itemizedlist>
-    </section>
-  </section>
-
-  <section id="architecture-javase" revision="1">
-    <title>Java SE environments</title>
-
-    <para>In a Java SE environment only extented context application-managed
-    entity managers are available. You can retrieve an entity manger using the
-    <literal>EntityManagerFactory</literal> API. Only resource-local entity
-    managers are available. In other words, JTA transactions and persistence
-    context propagation are not supported in Java SE (you will have to
-    propagate the persistence context yourself, e.g. using the thread local
-    session pattern popular in the Hibernate community).</para>
-
-    <para>Extended context means that a persistence context is created when
-    the entity manager is retrieved (using
-    <literal>EntityManagerFactory.createEntityManager(...)</literal> ) and
-    closed when the entity manager is closed. Many resource-local transaction
-    share the same persistence context, in this case.</para>
-  </section>
-</chapter>
\ No newline at end of file

Copied: trunk/HibernateExt/entitymanager/doc/reference/en/modules/architecture.xml (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/doc/reference/en/modules/architecture.xml)
===================================================================
--- trunk/HibernateExt/entitymanager/doc/reference/en/modules/architecture.xml	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/doc/reference/en/modules/architecture.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,266 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<chapter id="architecture">
+  <title>Architecture</title>
+
+  <section>
+    <title>Definitions</title>
+
+    <para>EJB3 is part of the Java EE 5.0 platform. Persistence in EJB3 is
+    available in EJB3 containers, as well as for standalone J2SE applications
+    that execute outside of a particular container. The following programming
+    interfaces and artifacts are available in both environments.</para>
+
+    <variablelist spacing="compact">
+      <varlistentry>
+        <term>
+          <literal>EntityManagerFactory</literal>
+        </term>
+
+        <listitem>
+          <para>An entity manager factory provides entity manager instances,
+          all instances are configured to connect to the same database, to use
+          the same default settings as defined by the particular
+          implementation, etc. You can prepare several entity manager
+          factories to access several data stores. This interface is similar
+          to the <literal>SessionFactory</literal> in native Hibernate.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term>
+          <literal>EntityManager</literal>
+        </term>
+
+        <listitem>
+          <para>The <literal>EntityManager</literal> API is used to access a
+          database in a particular unit of work. It is used to create and
+          remove persistent entity instances, to find entities by their
+          primary key identity, and to query over all entities. This interface
+          is similar to the <literal>Session</literal> in Hibernate.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term>Persistence context</term>
+
+        <listitem>
+          <para>A persistence context is a set of entity instances in which
+          for any persistent entity identity there is a unique entity
+          instance. Within the persistence context, the entity instances and
+          their lifecycle is managed by a particular entity manager. The scope
+          of this context can either be the transaction, or an extended unit
+          of work.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term>Persistence unit</term>
+
+        <listitem>
+          <para>The set of entity types that can be managed by a given entity
+          manager is defined by a persistence unit. A persistence unit defines
+          the set of all classes that are related or grouped by the
+          application, and which must be collocated in their mapping to a
+          single data store.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term>Container-managed entity manager</term>
+
+        <listitem>
+          <para>An Entity Manager whose lifecycle is managed by the
+          container</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term>Application-managed entity manager</term>
+
+        <listitem>
+          <para>An Entity Manager whose lifecycle is managed by the
+          application.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term>JTA entity manager</term>
+
+        <listitem>
+          <para>Entity manager involved in a JTA transaction</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term>Resource-local entity manager</term>
+
+        <listitem>
+          <para>Entity manager using a resource transaction (not a JTA
+          transaction).</para>
+        </listitem>
+      </varlistentry>
+    </variablelist>
+  </section>
+
+  <section>
+    <title>EJB container environment</title>
+
+    <section>
+      <title>Container-managed entity manager</title>
+
+      <para>The most common and widely used entity manager in a Java EE
+      environment is the container-managed entity manager. In this mode, the
+      container is responsible for the opening and closing of the entity
+      manager (this is transparent to the application). It is also responsible
+      for transaction boundaries. A container-managed entity manager is
+      obtained in an application through dependency injection or through JNDI
+      lookup, A container-managed entity manger requires the use of a JTA
+      transaction.</para>
+    </section>
+
+    <section>
+      <title>Application-managed entity manager</title>
+
+      <para>An application-managed entity manager allows you to control the
+      entity manager in application code. This entity manager is retrieved
+      through the <literal>EntityManagerFactory</literal> API. An application
+      managed entity manager can be either involved in the current JTA
+      transaction (a JTA entity manager), or the transaction may be controlled
+      through the <literal>EntityTransaction</literal> API (a resource-local
+      entity manager). The resource-local entity manager transaction maps to a
+      direct resource transaction (i. e. in Hibernate's case a JDBC
+      transaction). The entity manager type (JTA or resource-local) is defined
+      at configuration time, when setting up the entity manager
+      factory.</para>
+    </section>
+
+    <section id="architecture-ejb-persistctxscope">
+      <title>Persistence context scope</title>
+
+      <para>An entity manager is the API to interact with the persistence
+      context. Two common strategies can be used: binding the persistence
+      context to the transaction boundaries, or keeping the persistence
+      context available across several transactions.</para>
+
+      <para>The most common case is to bind the persistence context scope to
+      the current transaction scope. This is only doable when JTA transactions
+      are used: the persistence context is associated with the JTA transaction
+      life cycle. When a entity manager is invoked, the persistence context is
+      also opened, if there is no persistence context associated with the
+      current JTA transaction. Otherwise, the associated persistence context
+      is used. The persistence context ends when the JTA transaction
+      completes. This means that during the JTA transaction, an application
+      will be able to work on managed entities of the same persistence
+      context. In other words, you don't have to pass the entity manager's
+      persistence context across your EJB method calls, but simply use
+      dependency injection or lookup whenever you need an entity
+      manager.</para>
+
+      <para>You can also use an extended persistence context. This can be
+      combined with stateful session beans, if you use a container-managed
+      entity manager: the persistence context is created when an entity
+      manager is retrieved from dependency injection or JNDI lookup , and is
+      kept until the container closes it after the completion of the
+      <literal>Remove</literal> stateful session bean method. This is a
+      perfect mechanism for implementing a "long" unit of work pattern. For
+      example, if you have to deal with multiple user interaction cycles as a
+      single unit of work (e.g. a wizard dialog that has to be fully
+      completed), you usually model this as a unit of work from the point of
+      view of the application user, and implement it using an extended
+      persistence context. Please refer to the Hibernate reference manual or
+      the book Hibernate In Action for more information about this pattern.
+      JBoss Seam is a framework tht link together JSF and EJB3 around the
+      notion of conversation and unit of work. For an application-managed
+      entity manager the persistence context is created when the entity
+      manager is created and kept until the entity manager is closed. In an
+      extended persistence context, all modification operations (persist,
+      merge, remove) executed outside a transaction are queued until the
+      persistence context is attached to a transaction. The transaction
+      typically occurs at the user process end, allowing the whole process to
+      be commited or rollbacked. For application-managed entity manager only
+      support the exctended persistence context.</para>
+
+      <para>A resource-local entity manager or an entity manager created with
+      <literal>EntityManagerFactory.createEntityManager()</literal>
+      (application-managed) has a one-to-one relationship with a persistence
+      context. In other situations <emphasis>persistence context
+      propagation</emphasis> occurs.</para>
+    </section>
+
+    <section id="architecture-ejb-persistctxpropagation">
+      <title>Persistence context propagation</title>
+
+      <para>Persistence context propagation occurs for container-managed
+      entity managers.</para>
+
+      <para>In a transaction-scoped container managed entity manager (common
+      case in a Java EE environment), the JTA transaction propagation is the
+      same as the persistence context resource propagation. In other words,
+      container-managed transaction-scoped entity managers retrieved within a
+      given JTA transaction all share the same persistence context. In
+      Hibernate terms, this means all managers share the same session.</para>
+
+      <para>Important: persistence context are never shared between different
+      JTA transactions or between entity manager that do not came from the
+      same entity manager factory. There are some noteworthy exceptions for
+      context propagation when using extended persistence contexts:</para>
+
+      <itemizedlist>
+        <listitem>
+          <para>If a stateless session bean, message-driven bean, or stateful
+          session bean with a transaction-scoped persistence context calls a
+          stateful session bean with an extended persistence context in the
+          same JTA transaction, an IllegalStateException is thrown.</para>
+        </listitem>
+
+        <listitem>
+          <para>If a stateful session bean with an extended persistence
+          context calls as stateless session bean or a stateful session bean
+          with a transaction-scoped persistence context in the same JTA
+          transaction, the persistence context is propagated.</para>
+        </listitem>
+
+        <listitem>
+          <para>If a stateful session bean with an extended persistence
+          context calls a stateless or stateful session bean in a different
+          JTA transaction context, the persistence context is not
+          propagated.</para>
+        </listitem>
+
+        <listitem>
+          <para>If a stateful session bean with an extended persistence
+          context instantiates another stateful session bean with an extended
+          persistence context, the extended persistence context is inherited
+          by the second stateful session bean. If the second stateful session
+          bean is called with a different transaction context than the first,
+          an IllegalStateException is thrown.</para>
+        </listitem>
+
+        <listitem>
+          <para>If a stateful session bean with an extended persistence
+          context calls a stateful session bean with a different extended
+          persistence context in the same transaction, an
+          IllegalStateException is thrown.</para>
+        </listitem>
+      </itemizedlist>
+    </section>
+  </section>
+
+  <section id="architecture-javase" revision="1">
+    <title>Java SE environments</title>
+
+    <para>In a Java SE environment only extented context application-managed
+    entity managers are available. You can retrieve an entity manger using the
+    <literal>EntityManagerFactory</literal> API. Only resource-local entity
+    managers are available. In other words, JTA transactions and persistence
+    context propagation are not supported in Java SE (you will have to
+    propagate the persistence context yourself, e.g. using the thread local
+    session pattern popular in the Hibernate community).</para>
+
+    <para>Extended context means that a persistence context is created when
+    the entity manager is retrieved (using
+    <literal>EntityManagerFactory.createEntityManager(...)</literal> ) and
+    closed when the entity manager is closed. Many resource-local transaction
+    share the same persistence context, in this case.</para>
+  </section>
+</chapter>
\ No newline at end of file

Deleted: trunk/HibernateExt/entitymanager/doc/reference/en/modules/batch.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/doc/reference/en/modules/batch.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/doc/reference/en/modules/batch.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,90 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<chapter id="batch">
-  <title>Batch processing</title>
-
-  <para>Batch processing has traditionally been difficult in full
-  object/relational mapping. ORM is all about object state management, which
-  implies that object state is available in memory. However, Hibernate has
-  some features to optimize batch processing which are discussed in the
-  Hibernate reference guide, however, EJB3 persistence differs
-  slightly.</para>
-
-  <sect1 id="batch-direct">
-    <title>Bulk update/delete</title>
-
-    <para>As already discussed, automatic and transparent object/relational
-    mapping is concerned with the management of object state. This implies
-    that the object state is available in memory, hence updating or deleting
-    (using SQL <literal>UPDATE</literal> and <literal>DELETE</literal>) data
-    directly in the database will not affect in-memory state. However,
-    Hibernate provides methods for bulk SQL-style <literal>UPDATE</literal>
-    and <literal>DELETE</literal> statement execution which are performed
-    through EJB-QL (<xref linkend="queryhql" />).</para>
-
-    <para>The pseudo-syntax for <literal>UPDATE</literal> and
-    <literal>DELETE</literal> statements is: <literal>( UPDATE | DELETE )
-    FROM? ClassName (WHERE WHERE_CONDITIONS)?</literal>. Note that:</para>
-
-    <itemizedlist spacing="compact">
-      <listitem>
-        <para>In the from-clause, the FROM keyword is optional.</para>
-      </listitem>
-
-      <listitem>
-        <para>There can only be a single class named in the from-clause, and
-        it <emphasis>cannot</emphasis> have an alias (this is a current
-        Hibernate limitation and will be removed soon).</para>
-      </listitem>
-
-      <listitem>
-        <para>No joins (either implicit or explicit) can be specified in a
-        bulk EJB-QL query. Sub-queries may be used in the where-clause.</para>
-      </listitem>
-
-      <listitem>
-        <para>The where-clause is also optional.</para>
-      </listitem>
-    </itemizedlist>
-
-    <para>As an example, to execute an EJB-QL <literal>UPDATE</literal>, use
-    the <literal>Query.executeUpdate()</literal> method:</para>
-
-    <programlisting>EntityManager entityManager = entityManagerFactory.createEntityManager();
-entityManager.getTransaction().begin();
-
-String ejbqlUpdate = "update Customer set name = :newName where name = :oldName"
-int updatedEntities = entityManager.createQuery( hqlUpdate )
-                            .setParameter( "newName", newName )
-                            .setParameter( "oldName", oldName )
-                            .executeUpdate();
-entityManager.getTransaction().commit();
-entityManager.close();</programlisting>
-
-    <para>To execute an EJB-QL <literal>DELETE</literal>, use the same
-    <literal>Query.executeUpdate()</literal> method (the method is named for
-    those familiar with JDBC's
-    <literal>PreparedStatement.executeUpdate()</literal>):</para>
-
-    <programlisting>EntityManager entityManager = entityManagerFactory.createEntityManager();
-entityManager.getTransaction().begin();
-
-String hqlDelete = "delete Customer where name = :oldName";
-int deletedEntities = entityManager.createQuery( hqlDelete )
-                            .setParameter( "oldName", oldName )
-                            .executeUpdate();
-entityManager.getTransaction().commit();
-entityManager.close();</programlisting>
-
-    <para>The <literal>int</literal> value returned by the
-    <literal>Query.executeUpdate()</literal> method indicate the number of
-    entities effected by the operation. This may or may not correlate with the
-    number of rows effected in the database. An EJB-QL bulk operation might
-    result in multiple actual SQL statements being executed, for
-    joined-subclass, for example. The returned number indicates the number of
-    actual entities affected by the statement. Going back to the example of
-    joined-subclass, a delete against one of the subclasses may actually
-    result in deletes against not just the table to which that subclass is
-    mapped, but also the "root" table and potentially joined-subclass tables
-    further down the inheritence hierarchy.</para>
-  </sect1>
-</chapter>
\ No newline at end of file

Copied: trunk/HibernateExt/entitymanager/doc/reference/en/modules/batch.xml (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/doc/reference/en/modules/batch.xml)
===================================================================
--- trunk/HibernateExt/entitymanager/doc/reference/en/modules/batch.xml	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/doc/reference/en/modules/batch.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<chapter id="batch">
+  <title>Batch processing</title>
+
+  <para>Batch processing has traditionally been difficult in full
+  object/relational mapping. ORM is all about object state management, which
+  implies that object state is available in memory. However, Hibernate has
+  some features to optimize batch processing which are discussed in the
+  Hibernate reference guide, however, EJB3 persistence differs
+  slightly.</para>
+
+  <sect1 id="batch-direct">
+    <title>Bulk update/delete</title>
+
+    <para>As already discussed, automatic and transparent object/relational
+    mapping is concerned with the management of object state. This implies
+    that the object state is available in memory, hence updating or deleting
+    (using SQL <literal>UPDATE</literal> and <literal>DELETE</literal>) data
+    directly in the database will not affect in-memory state. However,
+    Hibernate provides methods for bulk SQL-style <literal>UPDATE</literal>
+    and <literal>DELETE</literal> statement execution which are performed
+    through EJB-QL (<xref linkend="queryhql" />).</para>
+
+    <para>The pseudo-syntax for <literal>UPDATE</literal> and
+    <literal>DELETE</literal> statements is: <literal>( UPDATE | DELETE )
+    FROM? ClassName (WHERE WHERE_CONDITIONS)?</literal>. Note that:</para>
+
+    <itemizedlist spacing="compact">
+      <listitem>
+        <para>In the from-clause, the FROM keyword is optional.</para>
+      </listitem>
+
+      <listitem>
+        <para>There can only be a single class named in the from-clause, and
+        it <emphasis>cannot</emphasis> have an alias (this is a current
+        Hibernate limitation and will be removed soon).</para>
+      </listitem>
+
+      <listitem>
+        <para>No joins (either implicit or explicit) can be specified in a
+        bulk EJB-QL query. Sub-queries may be used in the where-clause.</para>
+      </listitem>
+
+      <listitem>
+        <para>The where-clause is also optional.</para>
+      </listitem>
+    </itemizedlist>
+
+    <para>As an example, to execute an EJB-QL <literal>UPDATE</literal>, use
+    the <literal>Query.executeUpdate()</literal> method:</para>
+
+    <programlisting>EntityManager entityManager = entityManagerFactory.createEntityManager();
+entityManager.getTransaction().begin();
+
+String ejbqlUpdate = "update Customer set name = :newName where name = :oldName"
+int updatedEntities = entityManager.createQuery( hqlUpdate )
+                            .setParameter( "newName", newName )
+                            .setParameter( "oldName", oldName )
+                            .executeUpdate();
+entityManager.getTransaction().commit();
+entityManager.close();</programlisting>
+
+    <para>To execute an EJB-QL <literal>DELETE</literal>, use the same
+    <literal>Query.executeUpdate()</literal> method (the method is named for
+    those familiar with JDBC's
+    <literal>PreparedStatement.executeUpdate()</literal>):</para>
+
+    <programlisting>EntityManager entityManager = entityManagerFactory.createEntityManager();
+entityManager.getTransaction().begin();
+
+String hqlDelete = "delete Customer where name = :oldName";
+int deletedEntities = entityManager.createQuery( hqlDelete )
+                            .setParameter( "oldName", oldName )
+                            .executeUpdate();
+entityManager.getTransaction().commit();
+entityManager.close();</programlisting>
+
+    <para>The <literal>int</literal> value returned by the
+    <literal>Query.executeUpdate()</literal> method indicate the number of
+    entities effected by the operation. This may or may not correlate with the
+    number of rows effected in the database. An EJB-QL bulk operation might
+    result in multiple actual SQL statements being executed, for
+    joined-subclass, for example. The returned number indicates the number of
+    actual entities affected by the statement. Going back to the example of
+    joined-subclass, a delete against one of the subclasses may actually
+    result in deletes against not just the table to which that subclass is
+    mapped, but also the "root" table and potentially joined-subclass tables
+    further down the inheritence hierarchy.</para>
+  </sect1>
+</chapter>
\ No newline at end of file

Deleted: trunk/HibernateExt/entitymanager/doc/reference/en/modules/configuration.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/doc/reference/en/modules/configuration.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/doc/reference/en/modules/configuration.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,633 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<chapter id="configuration">
-  <title id="setup">Setup and configuration</title>
-
-  <section>
-    <title>Setup</title>
-
-    <para>The EJB 3.0 / JPA compatible Hibernate EntityManager is built on top
-    of Hibernate core and Hibernate Annotations. You have to use compatible
-    versions of each module. This version is known to work on Hibernate Core
-    3.2.0.CR5, 3.2.0.GA, 3.2.1.GA and Hibernate Annotations 3.2.0.CR3, 3.2.0.GA, 3.2.1.GA.
-    The following libraries have to be in your classpath: hibernate3.jar,
-    hibernate-annotations.jar, hibernate-entitymanager.jar and all needed
-    third party libraries for each package.(incl. ejb-persistence.jar).</para>
-  </section>
-
-  <section id="setup-configuration"
-           xreflabel="Configuration and bootstrapping">
-    <title>Configuration and bootstrapping</title>
-
-    <section id="setup-configuration-packaging" revision="1">
-      <title>Packaging</title>
-
-      <para>The configuration for entity managers both inside an application
-      server and in a standalone application reside in a persistence archive.
-      A persistence archive is a JAR file which must define a
-      <literal>persistence.xml</literal> file that resides in the
-      <filename>META-INF</filename> folder. All properly annotated classes
-      included in the archive (ie having an <literal>@Entity</literal>
-      annotation), all annotated packages and all Hibernate hbm.xml files
-      included in the archive will be added to the persistence unit
-      configuration, so by default, your persistence.xml will be quite
-      minimalist:</para>
-
-      <programlisting>&lt;persistence xmlns="http://java.sun.com/xml/ns/persistence"
-   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-   xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
-   version="1.0"&gt;
-   &lt;persistence-unit name="sample"&gt;
-      &lt;jta-data-source&gt;java:/DefaultDS&lt;/jta-data-source&gt;
-      &lt;properties&gt;
-         &lt;property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/&gt;
-         &lt;property name="hibernate.hbm2ddl.auto" value="create-drop"/&gt;
-      &lt;/properties&gt;
-   &lt;/persistence-unit&gt;
-&lt;/persistence&gt;</programlisting>
-
-      <para>Here's a more complete example of a
-      <filename><literal>persistence.xml</literal></filename> file</para>
-
-      <programlisting>&lt;persistence xmlns="http://java.sun.com/xml/ns/persistence"
-   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-   xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
-   version="1.0"&gt;
-   &lt;persistence-unit name="manager1" transaction-type="JTA"&gt;
-      &lt;provider&gt;org.hibernate.ejb.HibernatePersistence&lt;/provider&gt;
-      &lt;jta-data-source&gt;java:/DefaultDS&lt;/jta-data-source&gt;
-      &lt;mapping-file&gt;ormap.xml&lt;/mapping-file&gt;
-      &lt;jar-file&gt;MyApp.jar&lt;/jar-file&gt;
-      &lt;class&gt;org.acme.Employee&lt;/class&gt;
-      &lt;class&gt;org.acme.Person&lt;/class&gt;
-      &lt;class&gt;org.acme.Address&lt;/class&gt;
-      &lt;properties&gt;
-         &lt;property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/&gt;
-         &lt;property name="hibernate.hbm2ddl.auto" value="create-drop"/&gt;
-      &lt;/properties&gt;
-   &lt;/persistence-unit&gt;
-&lt;/persistence&gt;</programlisting>
-
-      <variablelist spacing="compact">
-        <varlistentry>
-          <term>
-            <code>name</code>
-          </term>
-
-          <listitem>
-            <para>(attribute) Every entity manager must have a name.</para>
-          </listitem>
-        </varlistentry>
-
-        <varlistentry>
-          <term>
-            <code>transaction-type</code>
-          </term>
-
-          <listitem>
-            <para>(attribute) Transaction type used. Either JTA or
-            RESOURCE_LOCAL (default to JTA in a JavaEE environment and to
-            RESOURCE_LOCAL in a JavaSE environment). When a jta-datasource is
-            used, the default is JTA, if non-jta-datasource is used,
-            RESOURCE_LOCAL is used.</para>
-          </listitem>
-        </varlistentry>
-
-        <varlistentry>
-          <term>
-            <code>provider</code>
-          </term>
-
-          <listitem>
-            <para>The provider is a fully-qualified class name of the EJB
-            Persistence provider. You do not have to define it if you don't
-            work with several EJB3 implementations. This is needed when you
-            are using multiple vendor implementations of EJB
-            Persistence.</para>
-          </listitem>
-        </varlistentry>
-
-        <varlistentry>
-          <term><code>jta-data-source</code>,
-          <code>non-jta-data-source</code></term>
-
-          <listitem>
-            <para>This is the JNDI name of where the javax.sql.DataSource is
-            located. When running without a JNDI available Datasource, you
-            must specify JDBC connections with Hibernate specific properties
-            (see below).</para>
-          </listitem>
-        </varlistentry>
-
-        <varlistentry>
-          <term>
-            <code>mapping-file</code>
-          </term>
-
-          <listitem>
-            <para>The class element specifies a EJB3 compliant XML mapping
-            file that you will map. The file has to be in the classpath. As
-            per the EJB3 specification, Hibernate EntityManager will try to
-            load the mapping file located in the jar file at
-            <literal>META_INF/orm.xml</literal>. Of course any explicit
-            mapping file will be loaded too. As a matter of fact, you can
-            provides any XML file in the mapping file element ie. either hbm
-            files or EJB3 deployment descriptor.</para>
-          </listitem>
-        </varlistentry>
-
-        <varlistentry>
-          <term>
-            <code>jar-file</code>
-          </term>
-
-          <listitem>
-            <para>The jar-file elements specifies a jar to analyse. All
-            properly annotated classes, annotated packages and all hbm.xml
-            files part of this jar file will be added to the persistence unit
-            configuration. This element is mainly used in Java EE environment.
-            Use of this one in Java SE should be considered as non portable,
-            in this case a absolute url is needed. You can alternatively point
-            to a directory (This is especially useful when in your test
-            environment, the persistence.xml file is not under the same root
-            directory or jar than your domain model).</para>
-
-            <programlisting>        &lt;jar-file&gt;file:/home/turin/work/local/lab8/build/classes&lt;/jar-file&gt;</programlisting>
-          </listitem>
-        </varlistentry>
-
-        <varlistentry>
-          <term>
-            <code>exclude-unlisted-classes</code>
-          </term>
-
-          <listitem>
-            <para>Do not check the main jar file for annotated classes. Only
-            explicit classes will be part of the persistence unit.</para>
-          </listitem>
-        </varlistentry>
-
-        <varlistentry>
-          <term>
-            <code>class</code>
-          </term>
-
-          <listitem>
-            <para>The class element specifies a fully qualified class name
-            that you will map. By default all properly annotated classes and
-            all hbm.xml files found inside the archive are added to the
-            persistence unit configuration. You can add some external entity
-            through the class element though. As an extension to the
-            specification, you can add a package name in the
-            <literal>&lt;class&gt;</literal> element (eg
-            <code>&lt;class&gt;org.hibernate.eg&lt;/class&gt;</code>).
-            Caution, the package will include the metadata defined at the
-            package level (ie in <filename>package-info.java</filename>), it
-            will not include all the classes of a given package.</para>
-          </listitem>
-        </varlistentry>
-
-        <varlistentry>
-          <term>
-            <code>properties</code>
-          </term>
-
-          <listitem>
-            <para>The properties element is used to specify vendor specific
-            properties. This is where you will define your Hibernate specific
-            configurations. This is also where you will have to specify JDBC
-            connection information as well.</para>
-          </listitem>
-        </varlistentry>
-      </variablelist>
-
-      <para>Be sure to define the grammar definition in the
-      <literal>persistence</literal> element since the EJB3 specification
-      requires the schema validation. If the systemId ends with
-      <literal>persistence_1_0.xsd</literal>, Hibernate entityManager will use
-      the version embedded in the hibernate-entitymanager.jar. No internet
-      access will be processed.</para>
-
-      <programlisting>&lt;persistence xmlns="http://java.sun.com/xml/ns/persistence"
-   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-   xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
-   version="1.0"&gt;</programlisting>
-    </section>
-
-    <section id="setup-configuration-bootstrapping" revision="1">
-      <title>Bootstrapping</title>
-
-      <para>The EJB3 specification defines a bootstrap procedure to access the
-      <classname>EntityManagerFactory</classname> and the
-      <classname>EntityManager</classname>. The bootstrap class is
-      <classname>javax.persistence.Persistence</classname>, e.g.</para>
-
-      <programlisting>EntityManagerFactory emf = Persistence.createEntityManagerFactory("manager1");
-//or
-Map configOverrides = new HashMap();
-configOverrides.put("hibernate.hbm2ddl.auto", "create-drop");
-EntityManagerFactory programmaticEmf =
-    Persistence.createEntityManagerFactory("manager1", configOverrides);</programlisting>
-
-      <para>The first version is equivalent to the second with an empty map.
-      The map version is a set of overrides that will take precedence over any
-      properties defined in your persistence.xml files. There are a couple of
-      EJB3 properties usable in the map:</para>
-
-      <itemizedlist>
-        <listitem>
-          <para>javax.persistence.provider to define the provider class
-          used</para>
-        </listitem>
-
-        <listitem>
-          <para>javax.persistence.transactionType to define the transaction
-          type used (either JTA or RESOURCE_LOCAL)</para>
-        </listitem>
-
-        <listitem>
-          <para>javax.persistence.jtaDataSource to define the JTA datasource
-          name in JNDI</para>
-        </listitem>
-
-        <listitem>
-          <para>javax.persistence.nonJtaDataSource to define the non JTA
-          datasource name in JNDI</para>
-        </listitem>
-      </itemizedlist>
-
-      <para>When <code>Persistence.createEntityManagerFactory()</code> is
-      called, the persistence implementation will search your classpath for
-      any <code>META-INF/persistence.xml</code> files using the
-      <code>ClassLoader.getResource("META-INF/persistence.xml")</code> method.
-      Actually the <classname>Persistence</classname> class will look at all
-      the Persistence Providers available in the classpath and ask each of
-      them if they are responsible for the creation of the entity manager
-      factory <literal>manager1</literal>. Each provider, from this list of
-      resources, it will try to find an entity manager that matches the name
-      you specify in the command line with what is specified in the
-      persistence.xml file (of course the provider <literal>element</literal>
-      must match the current persistent provider). If no persistence.xml with
-      the correct name are found or if the expected persistence provider is
-      not found, a <classname>PersistenceException</classname> is
-      raised.</para>
-
-      <para>Apart from Hibernate system-level settings, all the properties
-      available in Hibernate can be set in <code>properties</code> element of
-      the persistence.xml file or as an override in the map you pass to
-      <code>createEntityManagerFactory()</code>. Please refer to the Hibernate
-      reference documentation for a complete listing. There are however a
-      couple of properties available in the EJB3 provider only.</para>
-
-      <para></para>
-
-      <table>
-        <title>Hibernate Entity Manager specific properties</title>
-
-        <tgroup cols="2">
-          <colspec align="left" colname="c1" />
-
-          <colspec colname="c2" colwidth="2*" />
-
-          <thead>
-            <row>
-              <entry>Property name</entry>
-
-              <entry>Description</entry>
-            </row>
-          </thead>
-
-          <tbody>
-            <row>
-              <entry>hibernate.ejb.classcache.&lt;classname&gt;</entry>
-
-              <entry>class cache strategy [comma cache region] of the class
-              Default to no cache, and default region cache to
-              fully.qualified.classname (eg.
-              hibernate.ejb.classcache.com.acme.Cat read-write or
-              hibernate.ejb.classcache.com.acme.Cat read-write,
-              MyRegion).</entry>
-            </row>
-
-            <row>
-              <entry>hibernate.ejb.collectioncache.&lt;collectionrole&gt;</entry>
-
-              <entry>collection cache strategy [comma cache region] of the
-              class Default to no cache, and default region cache to
-              fully.qualified.classname.role (eg.
-              hibernate.ejb.classcache.com.acme.Cat read-write or
-              hibernate.ejb.classcache.com.acme.Cat read-write,
-              MyRegion).</entry>
-            </row>
-
-            <row>
-              <entry>hibernate.ejb.cfgfile</entry>
-
-              <entry>XML configuration file to use to configure Hibernate (eg.
-              <filename>/hibernate.cfg.xml</filename>).</entry>
-            </row>
-
-            <row>
-              <entry>hibernate.archive.autodetection</entry>
-
-              <entry>Determine which element is auto discovered by Hibernate
-              Entity Manager while parsing the .par archive. (default to
-              <literal>class,hbm</literal>).</entry>
-            </row>
-
-            <row>
-              <entry>hibernate.ejb.interceptor</entry>
-
-              <entry>An optional Hibernate interceptor. This interceptor has
-              to implement <classname>org.hibernate.Interceptor</classname>
-              and have a no-arg constructor.</entry>
-            </row>
-
-            <row>
-              <entry>hibernate.ejb.naming_strategy</entry>
-
-              <entry>An optional naming strategy. The default naming strategy
-              used is <classname>EJB3NamingStrategy</classname>. You also
-              might want to consider the
-              <classname>DefaultComponentSafeNamingStrategy</classname>.</entry>
-            </row>
-
-            <row>
-              <entry>hibernate.ejb.event.&lt;eventtype&gt;</entry>
-
-              <entry>Event listener list for a given eventtype. The list of
-              event listeners is a comma separated fully qualified class name
-              list (eg. hibernate.ejb.event.pre-load
-              com.acme.SecurityListener, com.acme.AuditListener)</entry>
-            </row>
-
-            <row>
-              <entry>hibernate.ejb.use_class_enhancer</entry>
-
-              <entry>Whether or not use Application server class enhancement
-              at deployment time (default to false)</entry>
-            </row>
-
-            <row>
-              <entry>hibernate.ejb.discard_pc_on_close</entry>
-
-              <entry>If true, the persistence context will be discarded (think
-              clear() when the method is called. Otherwise the persistence
-              context will stay alive till the transaction completion: all
-              objects will remain managed, and any change will be sy,chronized
-              with the database (default to false, ie wait the transaction
-              completion)</entry>
-            </row>
-          </tbody>
-        </tgroup>
-      </table>
-
-      <para>Note that you can mix XML <literal>&lt;class&gt;</literal>
-      declaration and <literal>hibernate.ejb.cfgfile</literal> usage in the
-      same configuration. Be aware of the potential clashed. The properties
-      set in <filename>persistence.xml</filename> will override the one in the
-      defined <filename>hibernate.cfg.xml</filename>.</para>
-
-      <note>
-        <para>It is important that you do not override
-        <literal>hibernate.transaction.factory_class</literal>, Hibernate
-        EntityManager automatically set the appropriate transaction factory
-        depending on the EntityManager type (ie <literal>JTA</literal> versus
-        <literal>RESOURSE_LOCAL</literal>). If you are working in a Java EE
-        environment, you might want to set the
-        <literal>hibernate.transaction.manager_lookup_class</literal>
-        though.</para>
-      </note>
-
-      <para>Here is a typical configuration in a J2SE environment</para>
-
-      <programlisting>&lt;persistence&gt;
-   &lt;persistence-unit name="manager1" transaction-type="RESOURCE_LOCAL"&gt;
-      &lt;class&gt;org.hibernate.ejb.test.Cat&lt;/class&gt;
-      &lt;class&gt;org.hibernate.ejb.test.Distributor&lt;/class&gt;
-      &lt;class&gt;org.hibernate.ejb.test.Item&lt;/class&gt;
-      &lt;properties&gt;
-         &lt;property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/&gt;
-         &lt;property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/&gt;
-         &lt;property name="hibernate.connection.username" value="sa"/&gt;
-         &lt;property name="hibernate.connection.password" value=""/&gt;
-         &lt;property name="hibernate.connection.url" value="jdbc:hsqldb:."/&gt;
-         &lt;property name="hibernate.max_fetch_depth" value="3"/&gt;
-       
-         &lt;!-- cache configuration --&gt;
-         &lt;property name="hibernate.ejb.classcache.org.hibernate.ejb.test.Item" value="read-write"/&gt;
-         &lt;property name="hibernate.ejb.collectioncache.org.hibernate.ejb.test.Item.distributors" value="read-write, RegionName"/&gt;
-
-         &lt;!-- alternatively to &lt;class&gt; and &lt;property&gt; declarations, you can use a regular hibernate.cfg.xml file --&gt;
-         &lt;!-- property name="hibernate.ejb.cfgfile" value="/org/hibernate/ejb/test/hibernate.cfg.xml"/ --&gt;
-      &lt;/properties&gt;
-   &lt;/persistence-unit&gt;
-&lt;/persistence&gt;</programlisting>
-
-      <para>To ease the programmatic configuration, Hibernate Entity Manager
-      provide a proprietary API. This API is very similar to the
-      <classname>Configuration</classname> API and share the same concepts:
-      <classname>Ejb3Configuration</classname>. Refer to the JavaDoc and the
-      Hibernate reference guide for more detailed informations on how to use
-      it.</para>
-
-      <para>TODO: me more descriptive on some APIs like setDatasource()</para>
-
-      <programlisting>Ejb3Configuration cfg = new Ejb3Configuration();
-EntityManagerFactory emf = 
-  cfg.configure("/mypath/hibernate.cfg.xml") //add a regular hibernate.cfg.xml
-     .addProperties( properties ) //add some properties
-     .setInterceptor( myInterceptorImpl ) // set an interceptor
-     .addAnnotatedClass( MyAnnotatedClass.class ) //add a class to be mapped
-     .addClass( NonAnnotatedClass.class ) //add an hbm.xml file using the Hibernate convention
-     .addRerousce( "mypath/MyOtherCLass.hbm.xml ) //add an hbm.xml file
-     .addRerousce( "mypath/orm.xml ) //add an EJB3 deployment descriptor
-     .buildEntityManagerFactory(); //Create the entity manager factory</programlisting>
-    </section>
-  </section>
-
-  <section>
-    <title>Event listeners</title>
-
-    <para>Hibernate Entity Manager needs to enhance Hibernate core to
-    implements all the EJB3 semantics. It does that through the event listener
-    system of Hibernate. Be careful when you use the event system yourself,
-    you might override some of the EJB3 semantics. A safe way is to add your
-    event listeners to the list given below.</para>
-
-    <table>
-      <title>Hibernate Entity Manager default event listeners</title>
-
-      <tgroup cols="2">
-        <colspec align="left" colname="c1" />
-
-        <colspec colname="c2" colwidth="2*" />
-
-        <thead>
-          <row>
-            <entry>Event</entry>
-
-            <entry>Listeners</entry>
-          </row>
-        </thead>
-
-        <tbody>
-          <row>
-            <entry>flush</entry>
-
-            <entry>org.hibernate.ejb.event.EJB3FlushEventListener</entry>
-          </row>
-
-          <row>
-            <entry>auto-flush</entry>
-
-            <entry>org.hibernate.ejb.event.EJB3AutoFlushEventListener</entry>
-          </row>
-
-          <row>
-            <entry>delete</entry>
-
-            <entry>org.hibernate.ejb.event.EJB3DeleteEventListener</entry>
-          </row>
-
-          <row>
-            <entry>flush-entity</entry>
-
-            <entry>org.hibernate.ejb.event.EJB3FlushEntityEventListener</entry>
-          </row>
-
-          <row>
-            <entry>merge</entry>
-
-            <entry>org.hibernate.ejb.event.EJB3MergeEventListener</entry>
-          </row>
-
-          <row>
-            <entry>create</entry>
-
-            <entry>org.hibernate.ejb.event.EJB3PersistEventListener</entry>
-          </row>
-
-          <row>
-            <entry>create-onflush</entry>
-
-            <entry>org.hibernate.ejb.event.EJB3PersistOnFlushEventListener</entry>
-          </row>
-
-          <row>
-            <entry>save</entry>
-
-            <entry>org.hibernate.ejb.event.EJB3SaveEventListener</entry>
-          </row>
-
-          <row>
-            <entry>save-update</entry>
-
-            <entry>org.hibernate.ejb.event.EJB3SaveOrUpdateEventListener</entry>
-          </row>
-
-          <row>
-            <entry>pre-insert</entry>
-
-            <entry>org.hibernate.secure.JACCPreInsertEventListener,
-            org.hibernate.valitator.event.ValidateEventListener</entry>
-          </row>
-
-          <row>
-            <entry>pre-insert</entry>
-
-            <entry>org.hibernate.secure.JACCPreUpdateEventListener,
-            org.hibernate.valitator.event.ValidateEventListener</entry>
-          </row>
-
-          <row>
-            <entry>pre-delete</entry>
-
-            <entry>org.hibernate.secure.JACCPreDeleteEventListener</entry>
-          </row>
-
-          <row>
-            <entry>pre-load</entry>
-
-            <entry>org.hibernate.secure.JACCPreLoadEventListener</entry>
-          </row>
-
-          <row>
-            <entry>post-delete</entry>
-
-            <entry>org.hibernate.ejb.event.EJB3PostDeleteEventListener</entry>
-          </row>
-
-          <row>
-            <entry>post-insert</entry>
-
-            <entry>org.hibernate.ejb.event.EJB3PostInsertEventListener</entry>
-          </row>
-
-          <row>
-            <entry>post-load</entry>
-
-            <entry>org.hibernate.ejb.event.EJB3PostLoadEventListener</entry>
-          </row>
-
-          <row>
-            <entry>post-update</entry>
-
-            <entry>org.hibernate.ejb.event.EJB3PostUpdateEventListener</entry>
-          </row>
-        </tbody>
-      </tgroup>
-    </table>
-
-    <para>Note that the JACC*EventListeners are removed if the security is not
-    enabled.</para>
-
-    <para>You can configure the event listeners either through the properties
-    (see <xref linkend="setup-configuration" />) or through the
-    <methodname>ejb3configuration.getEventListeners()</methodname> API.</para>
-  </section>
-
-  <section>
-    <title>Obtaining an EntityManager in a Java SE environment</title>
-
-    <para>An entity manager factory should be considered as an immutable
-    configuration holder, it is defined to point to a single datasource and to
-    map a defined set of entities. This is the entry point to create and
-    manage <classname>EntityManager</classname>s. The
-    <classname>Persistence</classname> class is bootstrap class to create an
-    entity manager factory.</para>
-
-    <programlisting>// Use persistence.xml configuration
-EntityManagerFactory emf = Persistence.createEntityManagerFactory("manager1")
-EntityManager em = emf.createEntityManager(); // Retrieve an application managed entity manager
-// Work with the EM
-em.close();
-...
-emf.close(); //close at application end</programlisting>
-
-    <para>An entity manager factory is typically create at application
-    initialization time and closed at application end. It's creation is an
-    expensive process. For those who are familiar with Hibernate, an entity
-    manager factory is very much like a session factory. Actually, an entity
-    manager factory is a wrapper on top of a session factory. Calls to the
-    entityManagerFactory are thread safe.</para>
-
-    <para>Thanks to the EntityManagerFactory, you can retrieve an extended
-    entity manager. The extended entity manager keep the same persistence
-    context for the lifetime of the entity manager: in other words, the
-    entities are still managed between two transactions (unless you call
-    entityManager.clear() in between). You can see an entity manager as a
-    small wrapper on top of an Hibernate session.</para>
-
-    <para>TODO explains emf.createEntityManager(Map)</para>
-  </section>
-
-  <section>
-    <title>Various</title>
-
-    <para>Hibernate Entity Manager comes with Hibernate Validator configured
-    out of the box. You don't have to override any event yourself. If you do
-    not use Hibernate Validator annotations in your domain model, there will
-    be no performance cost. For more information on Hibernate Validator,
-    please refer to the Hibernate Annotations reference guide.</para>
-  </section>
-</chapter>
\ No newline at end of file

Copied: trunk/HibernateExt/entitymanager/doc/reference/en/modules/configuration.xml (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/doc/reference/en/modules/configuration.xml)
===================================================================
--- trunk/HibernateExt/entitymanager/doc/reference/en/modules/configuration.xml	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/doc/reference/en/modules/configuration.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,633 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<chapter id="configuration">
+  <title id="setup">Setup and configuration</title>
+
+  <section>
+    <title>Setup</title>
+
+    <para>The EJB 3.0 / JPA compatible Hibernate EntityManager is built on top
+    of Hibernate core and Hibernate Annotations. You have to use compatible
+    versions of each module. This version is known to work on Hibernate Core
+    3.2.0.CR5, 3.2.0.GA, 3.2.1.GA and Hibernate Annotations 3.2.0.CR3, 3.2.0.GA, 3.2.1.GA.
+    The following libraries have to be in your classpath: hibernate3.jar,
+    hibernate-annotations.jar, hibernate-entitymanager.jar and all needed
+    third party libraries for each package.(incl. ejb-persistence.jar).</para>
+  </section>
+
+  <section id="setup-configuration"
+           xreflabel="Configuration and bootstrapping">
+    <title>Configuration and bootstrapping</title>
+
+    <section id="setup-configuration-packaging" revision="1">
+      <title>Packaging</title>
+
+      <para>The configuration for entity managers both inside an application
+      server and in a standalone application reside in a persistence archive.
+      A persistence archive is a JAR file which must define a
+      <literal>persistence.xml</literal> file that resides in the
+      <filename>META-INF</filename> folder. All properly annotated classes
+      included in the archive (ie having an <literal>@Entity</literal>
+      annotation), all annotated packages and all Hibernate hbm.xml files
+      included in the archive will be added to the persistence unit
+      configuration, so by default, your persistence.xml will be quite
+      minimalist:</para>
+
+      <programlisting>&lt;persistence xmlns="http://java.sun.com/xml/ns/persistence"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
+   version="1.0"&gt;
+   &lt;persistence-unit name="sample"&gt;
+      &lt;jta-data-source&gt;java:/DefaultDS&lt;/jta-data-source&gt;
+      &lt;properties&gt;
+         &lt;property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/&gt;
+         &lt;property name="hibernate.hbm2ddl.auto" value="create-drop"/&gt;
+      &lt;/properties&gt;
+   &lt;/persistence-unit&gt;
+&lt;/persistence&gt;</programlisting>
+
+      <para>Here's a more complete example of a
+      <filename><literal>persistence.xml</literal></filename> file</para>
+
+      <programlisting>&lt;persistence xmlns="http://java.sun.com/xml/ns/persistence"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
+   version="1.0"&gt;
+   &lt;persistence-unit name="manager1" transaction-type="JTA"&gt;
+      &lt;provider&gt;org.hibernate.ejb.HibernatePersistence&lt;/provider&gt;
+      &lt;jta-data-source&gt;java:/DefaultDS&lt;/jta-data-source&gt;
+      &lt;mapping-file&gt;ormap.xml&lt;/mapping-file&gt;
+      &lt;jar-file&gt;MyApp.jar&lt;/jar-file&gt;
+      &lt;class&gt;org.acme.Employee&lt;/class&gt;
+      &lt;class&gt;org.acme.Person&lt;/class&gt;
+      &lt;class&gt;org.acme.Address&lt;/class&gt;
+      &lt;properties&gt;
+         &lt;property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/&gt;
+         &lt;property name="hibernate.hbm2ddl.auto" value="create-drop"/&gt;
+      &lt;/properties&gt;
+   &lt;/persistence-unit&gt;
+&lt;/persistence&gt;</programlisting>
+
+      <variablelist spacing="compact">
+        <varlistentry>
+          <term>
+            <code>name</code>
+          </term>
+
+          <listitem>
+            <para>(attribute) Every entity manager must have a name.</para>
+          </listitem>
+        </varlistentry>
+
+        <varlistentry>
+          <term>
+            <code>transaction-type</code>
+          </term>
+
+          <listitem>
+            <para>(attribute) Transaction type used. Either JTA or
+            RESOURCE_LOCAL (default to JTA in a JavaEE environment and to
+            RESOURCE_LOCAL in a JavaSE environment). When a jta-datasource is
+            used, the default is JTA, if non-jta-datasource is used,
+            RESOURCE_LOCAL is used.</para>
+          </listitem>
+        </varlistentry>
+
+        <varlistentry>
+          <term>
+            <code>provider</code>
+          </term>
+
+          <listitem>
+            <para>The provider is a fully-qualified class name of the EJB
+            Persistence provider. You do not have to define it if you don't
+            work with several EJB3 implementations. This is needed when you
+            are using multiple vendor implementations of EJB
+            Persistence.</para>
+          </listitem>
+        </varlistentry>
+
+        <varlistentry>
+          <term><code>jta-data-source</code>,
+          <code>non-jta-data-source</code></term>
+
+          <listitem>
+            <para>This is the JNDI name of where the javax.sql.DataSource is
+            located. When running without a JNDI available Datasource, you
+            must specify JDBC connections with Hibernate specific properties
+            (see below).</para>
+          </listitem>
+        </varlistentry>
+
+        <varlistentry>
+          <term>
+            <code>mapping-file</code>
+          </term>
+
+          <listitem>
+            <para>The class element specifies a EJB3 compliant XML mapping
+            file that you will map. The file has to be in the classpath. As
+            per the EJB3 specification, Hibernate EntityManager will try to
+            load the mapping file located in the jar file at
+            <literal>META_INF/orm.xml</literal>. Of course any explicit
+            mapping file will be loaded too. As a matter of fact, you can
+            provides any XML file in the mapping file element ie. either hbm
+            files or EJB3 deployment descriptor.</para>
+          </listitem>
+        </varlistentry>
+
+        <varlistentry>
+          <term>
+            <code>jar-file</code>
+          </term>
+
+          <listitem>
+            <para>The jar-file elements specifies a jar to analyse. All
+            properly annotated classes, annotated packages and all hbm.xml
+            files part of this jar file will be added to the persistence unit
+            configuration. This element is mainly used in Java EE environment.
+            Use of this one in Java SE should be considered as non portable,
+            in this case a absolute url is needed. You can alternatively point
+            to a directory (This is especially useful when in your test
+            environment, the persistence.xml file is not under the same root
+            directory or jar than your domain model).</para>
+
+            <programlisting>        &lt;jar-file&gt;file:/home/turin/work/local/lab8/build/classes&lt;/jar-file&gt;</programlisting>
+          </listitem>
+        </varlistentry>
+
+        <varlistentry>
+          <term>
+            <code>exclude-unlisted-classes</code>
+          </term>
+
+          <listitem>
+            <para>Do not check the main jar file for annotated classes. Only
+            explicit classes will be part of the persistence unit.</para>
+          </listitem>
+        </varlistentry>
+
+        <varlistentry>
+          <term>
+            <code>class</code>
+          </term>
+
+          <listitem>
+            <para>The class element specifies a fully qualified class name
+            that you will map. By default all properly annotated classes and
+            all hbm.xml files found inside the archive are added to the
+            persistence unit configuration. You can add some external entity
+            through the class element though. As an extension to the
+            specification, you can add a package name in the
+            <literal>&lt;class&gt;</literal> element (eg
+            <code>&lt;class&gt;org.hibernate.eg&lt;/class&gt;</code>).
+            Caution, the package will include the metadata defined at the
+            package level (ie in <filename>package-info.java</filename>), it
+            will not include all the classes of a given package.</para>
+          </listitem>
+        </varlistentry>
+
+        <varlistentry>
+          <term>
+            <code>properties</code>
+          </term>
+
+          <listitem>
+            <para>The properties element is used to specify vendor specific
+            properties. This is where you will define your Hibernate specific
+            configurations. This is also where you will have to specify JDBC
+            connection information as well.</para>
+          </listitem>
+        </varlistentry>
+      </variablelist>
+
+      <para>Be sure to define the grammar definition in the
+      <literal>persistence</literal> element since the EJB3 specification
+      requires the schema validation. If the systemId ends with
+      <literal>persistence_1_0.xsd</literal>, Hibernate entityManager will use
+      the version embedded in the hibernate-entitymanager.jar. No internet
+      access will be processed.</para>
+
+      <programlisting>&lt;persistence xmlns="http://java.sun.com/xml/ns/persistence"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
+   version="1.0"&gt;</programlisting>
+    </section>
+
+    <section id="setup-configuration-bootstrapping" revision="1">
+      <title>Bootstrapping</title>
+
+      <para>The EJB3 specification defines a bootstrap procedure to access the
+      <classname>EntityManagerFactory</classname> and the
+      <classname>EntityManager</classname>. The bootstrap class is
+      <classname>javax.persistence.Persistence</classname>, e.g.</para>
+
+      <programlisting>EntityManagerFactory emf = Persistence.createEntityManagerFactory("manager1");
+//or
+Map configOverrides = new HashMap();
+configOverrides.put("hibernate.hbm2ddl.auto", "create-drop");
+EntityManagerFactory programmaticEmf =
+    Persistence.createEntityManagerFactory("manager1", configOverrides);</programlisting>
+
+      <para>The first version is equivalent to the second with an empty map.
+      The map version is a set of overrides that will take precedence over any
+      properties defined in your persistence.xml files. There are a couple of
+      EJB3 properties usable in the map:</para>
+
+      <itemizedlist>
+        <listitem>
+          <para>javax.persistence.provider to define the provider class
+          used</para>
+        </listitem>
+
+        <listitem>
+          <para>javax.persistence.transactionType to define the transaction
+          type used (either JTA or RESOURCE_LOCAL)</para>
+        </listitem>
+
+        <listitem>
+          <para>javax.persistence.jtaDataSource to define the JTA datasource
+          name in JNDI</para>
+        </listitem>
+
+        <listitem>
+          <para>javax.persistence.nonJtaDataSource to define the non JTA
+          datasource name in JNDI</para>
+        </listitem>
+      </itemizedlist>
+
+      <para>When <code>Persistence.createEntityManagerFactory()</code> is
+      called, the persistence implementation will search your classpath for
+      any <code>META-INF/persistence.xml</code> files using the
+      <code>ClassLoader.getResource("META-INF/persistence.xml")</code> method.
+      Actually the <classname>Persistence</classname> class will look at all
+      the Persistence Providers available in the classpath and ask each of
+      them if they are responsible for the creation of the entity manager
+      factory <literal>manager1</literal>. Each provider, from this list of
+      resources, it will try to find an entity manager that matches the name
+      you specify in the command line with what is specified in the
+      persistence.xml file (of course the provider <literal>element</literal>
+      must match the current persistent provider). If no persistence.xml with
+      the correct name are found or if the expected persistence provider is
+      not found, a <classname>PersistenceException</classname> is
+      raised.</para>
+
+      <para>Apart from Hibernate system-level settings, all the properties
+      available in Hibernate can be set in <code>properties</code> element of
+      the persistence.xml file or as an override in the map you pass to
+      <code>createEntityManagerFactory()</code>. Please refer to the Hibernate
+      reference documentation for a complete listing. There are however a
+      couple of properties available in the EJB3 provider only.</para>
+
+      <para></para>
+
+      <table>
+        <title>Hibernate Entity Manager specific properties</title>
+
+        <tgroup cols="2">
+          <colspec align="left" colname="c1" />
+
+          <colspec colname="c2" colwidth="2*" />
+
+          <thead>
+            <row>
+              <entry>Property name</entry>
+
+              <entry>Description</entry>
+            </row>
+          </thead>
+
+          <tbody>
+            <row>
+              <entry>hibernate.ejb.classcache.&lt;classname&gt;</entry>
+
+              <entry>class cache strategy [comma cache region] of the class
+              Default to no cache, and default region cache to
+              fully.qualified.classname (eg.
+              hibernate.ejb.classcache.com.acme.Cat read-write or
+              hibernate.ejb.classcache.com.acme.Cat read-write,
+              MyRegion).</entry>
+            </row>
+
+            <row>
+              <entry>hibernate.ejb.collectioncache.&lt;collectionrole&gt;</entry>
+
+              <entry>collection cache strategy [comma cache region] of the
+              class Default to no cache, and default region cache to
+              fully.qualified.classname.role (eg.
+              hibernate.ejb.classcache.com.acme.Cat read-write or
+              hibernate.ejb.classcache.com.acme.Cat read-write,
+              MyRegion).</entry>
+            </row>
+
+            <row>
+              <entry>hibernate.ejb.cfgfile</entry>
+
+              <entry>XML configuration file to use to configure Hibernate (eg.
+              <filename>/hibernate.cfg.xml</filename>).</entry>
+            </row>
+
+            <row>
+              <entry>hibernate.archive.autodetection</entry>
+
+              <entry>Determine which element is auto discovered by Hibernate
+              Entity Manager while parsing the .par archive. (default to
+              <literal>class,hbm</literal>).</entry>
+            </row>
+
+            <row>
+              <entry>hibernate.ejb.interceptor</entry>
+
+              <entry>An optional Hibernate interceptor. This interceptor has
+              to implement <classname>org.hibernate.Interceptor</classname>
+              and have a no-arg constructor.</entry>
+            </row>
+
+            <row>
+              <entry>hibernate.ejb.naming_strategy</entry>
+
+              <entry>An optional naming strategy. The default naming strategy
+              used is <classname>EJB3NamingStrategy</classname>. You also
+              might want to consider the
+              <classname>DefaultComponentSafeNamingStrategy</classname>.</entry>
+            </row>
+
+            <row>
+              <entry>hibernate.ejb.event.&lt;eventtype&gt;</entry>
+
+              <entry>Event listener list for a given eventtype. The list of
+              event listeners is a comma separated fully qualified class name
+              list (eg. hibernate.ejb.event.pre-load
+              com.acme.SecurityListener, com.acme.AuditListener)</entry>
+            </row>
+
+            <row>
+              <entry>hibernate.ejb.use_class_enhancer</entry>
+
+              <entry>Whether or not use Application server class enhancement
+              at deployment time (default to false)</entry>
+            </row>
+
+            <row>
+              <entry>hibernate.ejb.discard_pc_on_close</entry>
+
+              <entry>If true, the persistence context will be discarded (think
+              clear() when the method is called. Otherwise the persistence
+              context will stay alive till the transaction completion: all
+              objects will remain managed, and any change will be sy,chronized
+              with the database (default to false, ie wait the transaction
+              completion)</entry>
+            </row>
+          </tbody>
+        </tgroup>
+      </table>
+
+      <para>Note that you can mix XML <literal>&lt;class&gt;</literal>
+      declaration and <literal>hibernate.ejb.cfgfile</literal> usage in the
+      same configuration. Be aware of the potential clashed. The properties
+      set in <filename>persistence.xml</filename> will override the one in the
+      defined <filename>hibernate.cfg.xml</filename>.</para>
+
+      <note>
+        <para>It is important that you do not override
+        <literal>hibernate.transaction.factory_class</literal>, Hibernate
+        EntityManager automatically set the appropriate transaction factory
+        depending on the EntityManager type (ie <literal>JTA</literal> versus
+        <literal>RESOURSE_LOCAL</literal>). If you are working in a Java EE
+        environment, you might want to set the
+        <literal>hibernate.transaction.manager_lookup_class</literal>
+        though.</para>
+      </note>
+
+      <para>Here is a typical configuration in a J2SE environment</para>
+
+      <programlisting>&lt;persistence&gt;
+   &lt;persistence-unit name="manager1" transaction-type="RESOURCE_LOCAL"&gt;
+      &lt;class&gt;org.hibernate.ejb.test.Cat&lt;/class&gt;
+      &lt;class&gt;org.hibernate.ejb.test.Distributor&lt;/class&gt;
+      &lt;class&gt;org.hibernate.ejb.test.Item&lt;/class&gt;
+      &lt;properties&gt;
+         &lt;property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/&gt;
+         &lt;property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/&gt;
+         &lt;property name="hibernate.connection.username" value="sa"/&gt;
+         &lt;property name="hibernate.connection.password" value=""/&gt;
+         &lt;property name="hibernate.connection.url" value="jdbc:hsqldb:."/&gt;
+         &lt;property name="hibernate.max_fetch_depth" value="3"/&gt;
+       
+         &lt;!-- cache configuration --&gt;
+         &lt;property name="hibernate.ejb.classcache.org.hibernate.ejb.test.Item" value="read-write"/&gt;
+         &lt;property name="hibernate.ejb.collectioncache.org.hibernate.ejb.test.Item.distributors" value="read-write, RegionName"/&gt;
+
+         &lt;!-- alternatively to &lt;class&gt; and &lt;property&gt; declarations, you can use a regular hibernate.cfg.xml file --&gt;
+         &lt;!-- property name="hibernate.ejb.cfgfile" value="/org/hibernate/ejb/test/hibernate.cfg.xml"/ --&gt;
+      &lt;/properties&gt;
+   &lt;/persistence-unit&gt;
+&lt;/persistence&gt;</programlisting>
+
+      <para>To ease the programmatic configuration, Hibernate Entity Manager
+      provide a proprietary API. This API is very similar to the
+      <classname>Configuration</classname> API and share the same concepts:
+      <classname>Ejb3Configuration</classname>. Refer to the JavaDoc and the
+      Hibernate reference guide for more detailed informations on how to use
+      it.</para>
+
+      <para>TODO: me more descriptive on some APIs like setDatasource()</para>
+
+      <programlisting>Ejb3Configuration cfg = new Ejb3Configuration();
+EntityManagerFactory emf = 
+  cfg.configure("/mypath/hibernate.cfg.xml") //add a regular hibernate.cfg.xml
+     .addProperties( properties ) //add some properties
+     .setInterceptor( myInterceptorImpl ) // set an interceptor
+     .addAnnotatedClass( MyAnnotatedClass.class ) //add a class to be mapped
+     .addClass( NonAnnotatedClass.class ) //add an hbm.xml file using the Hibernate convention
+     .addRerousce( "mypath/MyOtherCLass.hbm.xml ) //add an hbm.xml file
+     .addRerousce( "mypath/orm.xml ) //add an EJB3 deployment descriptor
+     .buildEntityManagerFactory(); //Create the entity manager factory</programlisting>
+    </section>
+  </section>
+
+  <section>
+    <title>Event listeners</title>
+
+    <para>Hibernate Entity Manager needs to enhance Hibernate core to
+    implements all the EJB3 semantics. It does that through the event listener
+    system of Hibernate. Be careful when you use the event system yourself,
+    you might override some of the EJB3 semantics. A safe way is to add your
+    event listeners to the list given below.</para>
+
+    <table>
+      <title>Hibernate Entity Manager default event listeners</title>
+
+      <tgroup cols="2">
+        <colspec align="left" colname="c1" />
+
+        <colspec colname="c2" colwidth="2*" />
+
+        <thead>
+          <row>
+            <entry>Event</entry>
+
+            <entry>Listeners</entry>
+          </row>
+        </thead>
+
+        <tbody>
+          <row>
+            <entry>flush</entry>
+
+            <entry>org.hibernate.ejb.event.EJB3FlushEventListener</entry>
+          </row>
+
+          <row>
+            <entry>auto-flush</entry>
+
+            <entry>org.hibernate.ejb.event.EJB3AutoFlushEventListener</entry>
+          </row>
+
+          <row>
+            <entry>delete</entry>
+
+            <entry>org.hibernate.ejb.event.EJB3DeleteEventListener</entry>
+          </row>
+
+          <row>
+            <entry>flush-entity</entry>
+
+            <entry>org.hibernate.ejb.event.EJB3FlushEntityEventListener</entry>
+          </row>
+
+          <row>
+            <entry>merge</entry>
+
+            <entry>org.hibernate.ejb.event.EJB3MergeEventListener</entry>
+          </row>
+
+          <row>
+            <entry>create</entry>
+
+            <entry>org.hibernate.ejb.event.EJB3PersistEventListener</entry>
+          </row>
+
+          <row>
+            <entry>create-onflush</entry>
+
+            <entry>org.hibernate.ejb.event.EJB3PersistOnFlushEventListener</entry>
+          </row>
+
+          <row>
+            <entry>save</entry>
+
+            <entry>org.hibernate.ejb.event.EJB3SaveEventListener</entry>
+          </row>
+
+          <row>
+            <entry>save-update</entry>
+
+            <entry>org.hibernate.ejb.event.EJB3SaveOrUpdateEventListener</entry>
+          </row>
+
+          <row>
+            <entry>pre-insert</entry>
+
+            <entry>org.hibernate.secure.JACCPreInsertEventListener,
+            org.hibernate.valitator.event.ValidateEventListener</entry>
+          </row>
+
+          <row>
+            <entry>pre-insert</entry>
+
+            <entry>org.hibernate.secure.JACCPreUpdateEventListener,
+            org.hibernate.valitator.event.ValidateEventListener</entry>
+          </row>
+
+          <row>
+            <entry>pre-delete</entry>
+
+            <entry>org.hibernate.secure.JACCPreDeleteEventListener</entry>
+          </row>
+
+          <row>
+            <entry>pre-load</entry>
+
+            <entry>org.hibernate.secure.JACCPreLoadEventListener</entry>
+          </row>
+
+          <row>
+            <entry>post-delete</entry>
+
+            <entry>org.hibernate.ejb.event.EJB3PostDeleteEventListener</entry>
+          </row>
+
+          <row>
+            <entry>post-insert</entry>
+
+            <entry>org.hibernate.ejb.event.EJB3PostInsertEventListener</entry>
+          </row>
+
+          <row>
+            <entry>post-load</entry>
+
+            <entry>org.hibernate.ejb.event.EJB3PostLoadEventListener</entry>
+          </row>
+
+          <row>
+            <entry>post-update</entry>
+
+            <entry>org.hibernate.ejb.event.EJB3PostUpdateEventListener</entry>
+          </row>
+        </tbody>
+      </tgroup>
+    </table>
+
+    <para>Note that the JACC*EventListeners are removed if the security is not
+    enabled.</para>
+
+    <para>You can configure the event listeners either through the properties
+    (see <xref linkend="setup-configuration" />) or through the
+    <methodname>ejb3configuration.getEventListeners()</methodname> API.</para>
+  </section>
+
+  <section>
+    <title>Obtaining an EntityManager in a Java SE environment</title>
+
+    <para>An entity manager factory should be considered as an immutable
+    configuration holder, it is defined to point to a single datasource and to
+    map a defined set of entities. This is the entry point to create and
+    manage <classname>EntityManager</classname>s. The
+    <classname>Persistence</classname> class is bootstrap class to create an
+    entity manager factory.</para>
+
+    <programlisting>// Use persistence.xml configuration
+EntityManagerFactory emf = Persistence.createEntityManagerFactory("manager1")
+EntityManager em = emf.createEntityManager(); // Retrieve an application managed entity manager
+// Work with the EM
+em.close();
+...
+emf.close(); //close at application end</programlisting>
+
+    <para>An entity manager factory is typically create at application
+    initialization time and closed at application end. It's creation is an
+    expensive process. For those who are familiar with Hibernate, an entity
+    manager factory is very much like a session factory. Actually, an entity
+    manager factory is a wrapper on top of a session factory. Calls to the
+    entityManagerFactory are thread safe.</para>
+
+    <para>Thanks to the EntityManagerFactory, you can retrieve an extended
+    entity manager. The extended entity manager keep the same persistence
+    context for the lifetime of the entity manager: in other words, the
+    entities are still managed between two transactions (unless you call
+    entityManager.clear() in between). You can see an entity manager as a
+    small wrapper on top of an Hibernate session.</para>
+
+    <para>TODO explains emf.createEntityManager(Map)</para>
+  </section>
+
+  <section>
+    <title>Various</title>
+
+    <para>Hibernate Entity Manager comes with Hibernate Validator configured
+    out of the box. You don't have to override any event yourself. If you do
+    not use Hibernate Validator annotations in your domain model, there will
+    be no performance cost. For more information on Hibernate Validator,
+    please refer to the Hibernate Annotations reference guide.</para>
+  </section>
+</chapter>
\ No newline at end of file

Deleted: trunk/HibernateExt/entitymanager/doc/reference/en/modules/entitymanagerapi.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/doc/reference/en/modules/entitymanagerapi.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/doc/reference/en/modules/entitymanagerapi.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,777 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<chapter id="objectstate">
-  <title>Working with objects</title>
-
-  <section>
-    <title>Entity states</title>
-
-    <para>Like in Hibernate (comparable terms in parantheses), an entity
-    instance is in one of the following states:</para>
-
-    <itemizedlist>
-      <listitem>
-        <para>New (transient): an entity is new if it has just been
-        instantiated using the new operator, and it is not associated with a
-        persistence context. It has no persistent representation in the
-        database and no identifier value has been assigned.</para>
-      </listitem>
-
-      <listitem>
-        <para>Managed (persistent): a managed entity instance is an instance
-        with a persistent identity that is currently associated with a
-        persistence context.</para>
-      </listitem>
-
-      <listitem>
-        <para>Detached: the entity instance is an instance with a persistent
-        identity that is no longer associated with a persistence context,
-        usually because the persistence context was closed or the instance was
-        evicted from the context.</para>
-      </listitem>
-
-      <listitem>
-        <para>Removed: a removed entity instance is an instance with a
-        persistent identity, associated with a persistence context, but
-        scheduled for removal from the database.</para>
-      </listitem>
-    </itemizedlist>
-
-    <para>The <classname>EntityManager</classname> API allows you to change
-    the state of an entity, or in other words, to load and store objects. You
-    will find persistence with EJB3 easier to understand if you think about
-    object state management, not managing of SQL statements.</para>
-  </section>
-
-  <section>
-    <title>Making objects persistent</title>
-
-    <para>Once you've created a new entity instance (using the common
-    <literal>new</literal> operator) it is in <literal>new</literal> state.
-    You can make it persistent by associating it to an entity manager:</para>
-
-    <programlisting>DomesticCat fritz = new DomesticCat();
-fritz.setColor(Color.GINGER);
-fritz.setSex('M');
-fritz.setName("Fritz");
-em.persist(fritz);</programlisting>
-
-    <para>If the <literal>DomesticCat</literal> entity type has a generated
-    identifier, the value is associated to the instance when
-    <code>persist()</code> is called. If the identifier is not automatically
-    generated, the application-assigned (usually natural) key value has to be
-    set on the instance before <code>persist()</code> is called.</para>
-  </section>
-
-  <section>
-    <title>Loading an object</title>
-
-    <para>Load an entity instance by its identifier value with the entity
-    manager's <code>find()</code> method:</para>
-
-    <programlisting>cat = em.find(Cat.class, catId);
-
-// You may need to wrap the primitive identifiers
-long catId = 1234;
-em.find( Cat.class, new Long(catId) );</programlisting>
-
-    <para>In some cases, you don't really want to load the object state, but
-    just having a reference to it (ie a proxy). You can get this reference
-    using the <literal>getReference()</literal> method. This is especially
-    useful to link a child to its parent wo having to load the parent.</para>
-
-    <programlisting>child = new Child();
-child.SetName("Henry");
-Parent parent = em.getReference(Parent.class, parentId); //no query to the DB
-child.setParent(parent);
-em.persist(child);</programlisting>
-
-    <para>You can reload an entity instance and it's collections at any time
-    using the <code>em.refresh()</code> operation. This is useful when
-    database triggers are used to initialize some of the properties of the
-    entity. Note that only the entity instance and its collections are
-    refreshed unless you specify <literal>REFRESH</literal> as a cascade style
-    of any associations:</para>
-
-    <programlisting>em.persist(cat);
-em.flush(); // force the SQL insert and triggers to run
-em.refresh(cat); //re-read the state (after the trigger executes)</programlisting>
-  </section>
-
-  <section>
-    <title>Querying objects</title>
-
-    <para>If you don't know the identifier values of the objects you are
-    looking for, you need a query. The Hibernate EntityManager implementation
-    supports an easy-to-use but powerful object-oriented query language
-    (EJB3-QL) which has been inspired by HQL (and vice-versa). Both query
-    languages are portable across databases, the use entity and property names
-    as identifiers (instead of table and column names). You may also express
-    your query in the native SQL of your database, with optional support from
-    EJB3 for result set conversion into Java business objects.</para>
-
-    <section>
-      <title>Executing queries</title>
-
-      <para>EJB3QL and SQL queries are represented by an instance of
-      <classname>javax.persistence.Query</classname>. This interface offers
-      methods for parameter binding, result set handling, and for execution of
-      the query. Queries are always created using the current entity
-      manager:</para>
-
-      <programlisting>List cats = em.createQuery(
-    "select cat from Cat as cat where cat.birthdate &lt; ?1")
-    .setParameter(1, date, TemporalType.DATE)
-    .getResultList();
-
-List mothers = em.createQuery(
-    "select mother from Cat as cat join cat.mother as mother where cat.name = ?1")
-    .setParameter(1, name)
-    .getResultList();
-
-List kittens = em.createQuery(
-    "from Cat as cat where cat.mother = ?1")
-    .setEntity(1, pk)
-    .getResultList();
-
-Cat mother = (Cat) em.createQuery(
-    "select cat.mother from Cat as cat where cat = ?1")
-    .setParameter(1, izi)
-    .getSingleResult();</programlisting>
-
-      <para>A query is usually executed by invoking
-      <methodname>getResultList()</methodname>. This method loads the
-      resulting instances of the query completly into memory. Entity instances
-      retrieved by a query are in persistent state. The
-      <methodname>getSingleResult() </methodname>method offers a shortcut if
-      you know your query will only return a single object.</para>
-
-      <section>
-        <title>Projection</title>
-
-        <para>An EJB3QL query queries can return tuples of objects if
-        projection is used. Each result tuple is returned as an object
-        array:</para>
-
-        <programlisting>Iterator kittensAndMothers = sess.createQuery(
-            "select kitten, mother from Cat kitten join kitten.mother mother")
-            .getResultList()
-            .iterator();
-
-while ( kittensAndMothers.hasNext() ) {
-    Object[] tuple = (Object[]) kittensAndMothers.next();
-    Cat kitten  = tuple[0];
-    Cat mother  = tuple[1];
-    ....
-}</programlisting>
-      </section>
-
-      <section>
-        <title>Scalar results</title>
-
-        <para>Queries may specify a particular property of an entity in the
-        select clause, instead of an entity alias. You may call SQL aggregate
-        functions as well. Returned non-transactional objects or aggregation
-        results are considered "scalar" results and are not entities in
-        persistent state (in other words, they are considered "read
-        only"):</para>
-
-        <programlisting>Iterator results = em.createQuery(
-        "select cat.color, min(cat.birthdate), count(cat) from Cat cat " +
-        "group by cat.color")
-        .getResultList()
-        .iterator();
-
-while ( results.hasNext() ) {
-    Object[] row = results.next();
-    Color type = (Color) row[0];
-    Date oldest = (Date) row[1];
-    Integer count = (Integer) row[2];
-    .....
-}</programlisting>
-      </section>
-
-      <section>
-        <title>Bind parameters</title>
-
-        <para>Both named and positional query parameters are supported, the
-        <literal>Query</literal> API offers several methods to bind arguments.
-        The EJB3 specification numbers positional parameters from one. Named
-        parameters are identifiers of the form <literal>:paramname</literal>
-        in the query string. Named parameters should be prefered, they are
-        more robust and easier to read and understand:</para>
-
-        <programlisting>// Named parameter (preferred)
-Query q = em.createQuery("select cat from DomesticCat cat where cat.name = :name");
-q.setParameter("name", "Fritz");
-List cats = q.getResultList();
-
-// Positional parameter
-Query q = em.createQuery("select cat from DomesticCat cat where cat.name = ?1");
-q.setParameter(1, "Izi");
-List cats = q.getResultList();
-
-// Named parameter list
-List names = new ArrayList();
-names.add("Izi");
-names.add("Fritz");
-Query q = em.createQuery("select cat from DomesticCat cat where cat.name in (:namesList)");
-q.setParameter("namesList", names);
-List cats = q.list();</programlisting>
-      </section>
-
-      <section>
-        <title>Pagination</title>
-
-        <para>If you need to specify bounds upon your result set (the maximum
-        number of rows you want to retrieve and/or the first row you want to
-        retrieve), use the following methods:</para>
-
-        <programlisting>Query q = em.createQuery("select cat from DomesticCat cat");
-q.setFirstResult(20);
-q.setMaxResults(10);
-List cats = q.getResultList(); //return cats from the 20th position to 29th</programlisting>
-
-        <para>Hibernate knows how to translate this limit query into the
-        native SQL of your DBMS.</para>
-      </section>
-
-      <section>
-        <title>Externalizing named queries</title>
-
-        <para>You may also define named queries through annotations:</para>
-
-        <programlisting>@javax.persistence.NamedQuery(name="eg.DomesticCat.by.name.and.minimum.weight", 
-  query="select cat from eg.DomesticCat as cat  where cat.name = ?1 and cat.weight &gt; ?2")</programlisting>
-
-        <para>Parameters are bound programatically to the named query, before
-        it is executed:</para>
-
-        <programlisting>Query q = em.createNamedQuery("eg.DomesticCat.by.name.and.minimum.weight");
-q.setString(1, name);
-q.setInt(2, minWeight);
-List cats = q.getResultList();</programlisting>
-
-        <para>Note that the actual program code is independent of the query
-        language that is used, you may also define native SQL queries in
-        metadata, or use Hibernate's native facilities by placing them in XML
-        mapping files.</para>
-      </section>
-
-      <section>
-        <title>Native queries</title>
-
-        <para>You may express a query in SQL, using
-        <methodname>createNativeQuery()</methodname> and let Hibernate take
-        care mapping from JDBC result sets to business objects. Use the
-        <literal>@SqlResultSetMapping</literal> (please see the Hibernate
-        Annotations reference documentation on how to map a SQL resultset
-        mapping) or the entity mapping (if the column names of the query
-        result are the same as the names declared in the entity mapping;
-        remember that all entity columns have to be returned for this
-        mechanism to work):</para>
-
-        <programlisting>@SqlResultSetMapping(name="getItem", entities = 
-        @EntityResult(entityClass=org.hibernate.ejb.test.Item.class, fields= {
-            @FieldResult(name="name", column="itemname"),
-            @FieldResult(name="descr", column="itemdescription")
-        })
-)
-
-Query q = em.createNativeQuery("select name as itemname, descr as itemdescription from Item", "getItem");
-item = (Item) q.getSingleResult(); //from a resultset
-
-Query q = em.createNativeQuery("select * from Item", Item.class);
-item = (Item) q.getSingleResult(); //from a class columns names match the mapping</programlisting>
-
-        <note>
-          <para>For more information about scalar support in named queries,
-          please refers to the Hibenate Annotations documentation</para>
-        </note>
-      </section>
-
-      <section>
-        <title>Query hints</title>
-
-        <para>Query hints (for performance optimization, usually) are
-        implementation specific. Hints are declared using the
-        <methodname>query.setHint(String name, Object value)</methodname>
-        method, or through the <literal>@Named(Native)Query(hints)</literal>
-        annotation Note that these are not SQL query hints! The Hibernate EJB3
-        implementation offers the following query hints:</para>
-
-        <table>
-          <title>Hibernate query hints</title>
-
-          <tgroup cols="2">
-            <thead>
-              <colspec colname="C1" colwidth="1*" />
-
-              <colspec colname="c2" colwidth="3*" />
-
-              <row>
-                <entry align="center">Hint</entry>
-
-                <entry align="center">Description</entry>
-              </row>
-            </thead>
-
-            <tbody>
-              <row>
-                <entry>org.hibernate.timeout</entry>
-
-                <entry>Query timeout in seconds ( eg. new Integer(10)
-                )</entry>
-              </row>
-
-              <row>
-                <entry>org.hibernate.fetchSize</entry>
-
-                <entry>Number of rows fetched by the JDBC driver per roundtrip
-                ( eg. new Integer(50) )</entry>
-              </row>
-
-              <row>
-                <entry>org.hibernate.comment</entry>
-
-                <entry>Add a comment to the SQL query, useful for the DBA (
-                e.g. new String("fetch all orders in 1 statement") )</entry>
-              </row>
-
-              <row>
-                <entry>org.hibernate.cacheable</entry>
-
-                <entry>Whether or not a query is cacheable ( eg. new
-                Boolean(true) ), defaults to false</entry>
-              </row>
-
-              <row>
-                <entry>org.hibernate.cacheMode</entry>
-
-                <entry>Override the cache mode for this query ( eg.
-                CacheMode.REFRESH )</entry>
-              </row>
-
-              <row>
-                <entry>org.hibernate.cacheRegion</entry>
-
-                <entry>Cache region of this query ( eg. new
-                String("regionName") )</entry>
-              </row>
-
-              <row>
-                <entry>org.hibernate.readOnly</entry>
-
-                <entry>Entities retrieved by this query will be loaded in a
-                read-only mode where Hibernate will never dirty-check them or
-                make changes persistent ( eg. new Boolean(true) ), default to
-                false</entry>
-              </row>
-
-              <row>
-                <entry>org.hibernate.flushMode</entry>
-
-                <entry>Flush mode used for this query</entry>
-              </row>
-
-              <row>
-                <entry>org.hibernate.cacheMode</entry>
-
-                <entry>Cache mode used for this query</entry>
-              </row>
-            </tbody>
-          </tgroup>
-        </table>
-
-        <para>Please refer to the Hibernate reference documentation for more
-        information.</para>
-      </section>
-    </section>
-  </section>
-
-  <section>
-    <title>Modifying persistent objects</title>
-
-    <para>Transactional managed instances (ie. objects loaded, saved, created
-    or queried by the entity manager) may be manipulated by the application
-    and any changes to persistent state will be persisted when the Entity
-    manager is flushed (discussed later in this chapter). There is no need to
-    call a particular method to make your modifications persistent. A
-    straightforward wayt to update the state of an entity instance is to
-    <methodname>find()</methodname> it, and then manipulate it directly, while
-    the persistence context is open:</para>
-
-    <programlisting>Cat cat = em.find( Cat.class, new Long(69) );
-cat.setName("PK");
-em.flush();  // changes to cat are automatically detected and persisted</programlisting>
-
-    <para>Sometimes this programming model is inefficient since it would
-    require both an SQL SELECT (to load an object) and an SQL UPDATE (to
-    persist its updated state) in the same session. Therefore Hibernate offers
-    an alternate approach, using detached instances.</para>
-  </section>
-
-  <section>
-    <title>Modifying detached objects</title>
-
-    <para>Many applications need to retrieve an object in one transaction,
-    send it to the presentation layer for manipulation, and later save the
-    changes in a new transaction. There can be significant user think and
-    waiting time between both transactions. Applications that use this kind of
-    approach in a high-concurrency environment usually use versioned data to
-    ensure isolation for the "long" unit of work.</para>
-
-    <para>The EJB3 specifications supports this development model by providing
-    for persistence of modifications made to detached instances using the
-    <methodname>EntityManager.merge()</methodname> method:</para>
-
-    <programlisting>// in the first entity manager
-Cat cat = firstEntityManager.find(Cat.class, catId);
-Cat potentialMate = new Cat();
-firstEntityManager.persist(potentialMate);
-
-// in a higher layer of the application
-cat.setMate(potentialMate);
-
-// later, in a new entity manager
-secondEntityManager.merge(cat);  // update cat
-secondEntityManager.merge(mate); // update mate</programlisting>
-
-    <para>The <literal>merge()</literal> method merges modifications made to
-    the detached instance into the corresponding managed instance, if any,
-    without consideration of the state of the persistence context. In other
-    words, the merged objects state overrides the persistent entity state in
-    the persistence context, if one is already present. The application should
-    individually <methodname>merge()</methodname> detached instances reachable
-    from the given detached instance if and only if it wants their state also
-    to be persistent. This can be cascaded to associated entities and
-    collections, using transitive persistence, see <xref
-    linkend="objectstate-transitive" />.</para>
-  </section>
-
-  <section>
-    <title>Automatic state detection</title>
-
-    <para>The merge operation is clever enough to automatically detect whether
-    the merging of the detached instance has to result in an insert or update.
-    In other words, you don't have to worry about passing a new instance (and
-    not a detached instance) to <literal>merge()</literal>, the entity manager
-    will figure this out for you:</para>
-
-    <programlisting>// In the first entity manager
-Cat cat = firstEntityManager.find(Cat.class, catID);
-
-// In a higher layer of the application, detached
-Cat mate = new Cat();
-cat.setMate(mate);
-
-// Later, in a new entity manager
-secondEntityManager.merge(cat);   // update existing state
-secondEntityManager.merge(mate);  // save the new instance</programlisting>
-
-    <para>The usage and semantics of <literal>merge()</literal> seems to be
-    confusing for new users. Firstly, as long as you are not trying to use
-    object state loaded in one entity manager in another new entity manager,
-    you should not need to use <methodname>merge()</methodname> at all. Some
-    whole applications will never use this method.</para>
-
-    <para>Usually <methodname>merge()</methodname> is used in the following
-    scenario:</para>
-
-    <itemizedlist>
-      <listitem>
-        <para>the application loads an object in the first entity
-        manager</para>
-      </listitem>
-
-      <listitem>
-        <para>the object is passed up to the presentation layer</para>
-      </listitem>
-
-      <listitem>
-        <para>some modifications are made to the object</para>
-      </listitem>
-
-      <listitem>
-        <para>the object is passed back down to the business logic
-        layer</para>
-      </listitem>
-
-      <listitem>
-        <para>the application persists these modifications by calling
-        <methodname>merge()</methodname> in a second entity manager</para>
-      </listitem>
-    </itemizedlist>
-
-    <para>Here is the exact semantic of
-    <methodname>merge()</methodname>:</para>
-
-    <itemizedlist>
-      <listitem>
-        <para>if there is a managed instance with the same identifier
-        currently associated with the persistence context, copy the state of
-        the given object onto the managed instance</para>
-      </listitem>
-
-      <listitem>
-        <para>if there is no managed instance currently associated with the
-        persistence context, try to load it from the database, or create a new
-        managed instance</para>
-      </listitem>
-
-      <listitem>
-        <para>the managed instance is returned</para>
-      </listitem>
-
-      <listitem>
-        <para>the given instance does not become associated with the
-        persistence context, it remains detached and is usually
-        discarded</para>
-      </listitem>
-    </itemizedlist>
-
-    <note>
-      <title>Merging vs. saveOrUpdate/saveOrUpdateCopy</title>
-
-      <para>Merging in EJB3 is similar to the
-      <literal>saveOrUpdateCopy()</literal> method in native Hibernate.
-      However, it is not the same as the <literal>saveOrUpdate()</literal>
-      method, the given instance is not reattached with the persistence
-      context, but a managed instance is returned by the
-      <methodname>merge()</methodname> method.</para>
-    </note>
-  </section>
-
-  <section>
-    <title>Deleting managed objects</title>
-
-    <para><methodname>EntityManager.remove()</methodname> will remove an
-    objects state from the database. Of course, your application might still
-    hold a reference to a deleted object. You can think of
-    <methodname>remove()</methodname> as making a persistent instance new (aka
-    transient) again. It is not detached, and a merge would result in an
-    insertion.</para>
-  </section>
-
-  <section>
-    <title>Flush the persistence context</title>
-
-    <section>
-      <title>In a transaction</title>
-
-      <para>From time to time the entity manager will execute the SQL DML
-      statements needed to synchronize the data store with the state of
-      objects held in memory. This process, flush, occurs by default (this is
-      Hibernate specific and not defined by the specification) at the
-      following points:</para>
-
-      <itemizedlist>
-        <listitem>
-          <para>before query execution*</para>
-        </listitem>
-
-        <listitem>
-          <para>from
-          <methodname>javax.persistence.EntityTransaction.commit()*</methodname></para>
-        </listitem>
-
-        <listitem>
-          <para>when <methodname>EntityManager.flush()</methodname> is
-          called*</para>
-        </listitem>
-      </itemizedlist>
-
-      <para>(*) if a transaction is active</para>
-
-      <para>The SQL statements are issued in the following order</para>
-
-      <itemizedlist>
-        <listitem>
-          <para>all entity insertions, in the same order the corresponding
-          objects were saved using
-          <methodname>EntityManager.persist()</methodname></para>
-        </listitem>
-
-        <listitem>
-          <para>all entity updates</para>
-        </listitem>
-
-        <listitem>
-          <para>all collection deletions</para>
-        </listitem>
-
-        <listitem>
-          <para>all collection element deletions, updates and
-          insertions</para>
-        </listitem>
-
-        <listitem>
-          <para>all collection insertions</para>
-        </listitem>
-
-        <listitem>
-          <para>all entity deletions, in the same order the corresponding
-          objects were deleted using
-          <methodname>EntityManager.remove()</methodname></para>
-        </listitem>
-      </itemizedlist>
-
-      <para>(Exception: entity instances using application-assigned
-      identifiers are inserted when they are saved.)</para>
-
-      <para>Except when you explicity <methodname>flush()</methodname>, there
-      are absolutely no guarantees about when the entity manager executes the
-      JDBC calls, only the order in which they are executed. However,
-      Hibernate does guarantee that the
-      <methodname>Query.getResultList()</methodname>/<methodname>Query.getSingleResult()</methodname>
-      will never return stale data; nor will they return wrong data if
-      executed in an active transaction.</para>
-
-      <para>It is possible to change the default behavior so that flush occurs
-      less frequently. The <classname>FlushModeType</classname> for an entity
-      manager defines two different modes: only flush at commit time or flush
-      automatically using the explained routine unless
-      <methodname>flush()</methodname> is called explicitly.</para>
-
-      <programlisting>em = emf.createEntityManager();
-Transaction tx = em.getTransaction().begin();
-em.setFlushMode(FlushModeType.COMMIT); // allow queries to return stale state
-
-Cat izi = em.find(Cat.class, id);
-izi.setName(iznizi);
-
-// might return stale data
-em.createQuery("from Cat as cat left outer join cat.kittens kitten").getResultList();
-
-// change to izi is not flushed!
-...
-em.getTransaction().commit(); // flush occurs</programlisting>
-
-      <para>During flush, an exception might happen (e.g. if a DML operation
-      violates a constraint). TODO: Add link to exception handling.</para>
-
-      <para>Hibernate provides more flush modes than the one described in the
-      EJB3 specification. Please refer to the Hibernate core reference
-      documentation for more informations.</para>
-    </section>
-
-    <section>
-      <title>Outside a transaction</title>
-
-      <para>In an <literal>EXTENDED</literal> persistence context, all read
-      only operations of the entity manager can be executed outside a
-      transaction (<literal>find()</literal>,
-      <literal>getReference()</literal>, <literal>refresh()</literal>, and
-      read queries). Some modifications operations can be executed outside a
-      transaction, but they are queued until the persistence context join a
-      transaction. This is the case of <literal>persist()</literal>,
-      <literal><literal>merge()</literal></literal>,
-      <literal>remove()</literal>. Some operations cannot be called outside a
-      transaction: <literal>flush()</literal>, <literal>lock()</literal>, and
-      update/delete queries.</para>
-    </section>
-  </section>
-
-  <section id="objectstate-transitive" revision="1"
-           xreflabel="Transitive persistence">
-    <title>Transitive persistence</title>
-
-    <para>It is quite cumbersome to save, delete, or reattach individual
-    objects, especially if you deal with a graph of associated objects. A
-    common case is a parent/child relationship. Consider the following
-    example:</para>
-
-    <para>If the children in a parent/child relationship would be value typed
-    (e.g. a collection of addresses or strings), their lifecycle would depend
-    on the parent and no further action would be required for convenient
-    "cascading" of state changes. When the parent is persisted, the
-    value-typed child objects are persisted as well, when the parent is
-    removed, the children will be removed, etc. This even works for operations
-    such as the removal of a child from the collection; Hibernate will detect
-    this and, since value-typed objects can't have shared references, remove
-    the child from the database.</para>
-
-    <para>Now consider the same scenario with parent and child objects being
-    entities, not value-types (e.g. categories and items, or parent and child
-    cats). Entities have their own lifecycle, support shared references (so
-    removing an entity from the collection does not mean it can be deleted),
-    and there is by default no cascading of state from one entity to any other
-    associated entities. The EJB3 specification does not require persistence
-    by reachability. It supports a more flexible model of transitive
-    persistence, as first seen in Hibernate.</para>
-
-    <para>For each basic operation of the entity manager - including
-    <methodname>persist()</methodname>, <methodname>merge()</methodname>,
-    <methodname>remove()</methodname>, <methodname>refresh()</methodname> -
-    there is a corresponding cascade style. Respectively, the cascade styles
-    are named PERSIST, MERGE, REMOVE, REFRESH. If you want an operation to be
-    cascaded to associated entity (or collection of entities), you must
-    indicate that in the association annotation:</para>
-
-    <programlisting>@OneToOne(cascade=CascadeType.PERSIST)</programlisting>
-
-    <para>Cascading options can be combined:</para>
-
-    <programlisting>@OneToOne(cascade= { CascadeType.PERSIST, CascadeType.REMOVE, CascadeType.REFRESH } )</programlisting>
-
-    <para>You may even use CascadeType.ALL to specify that all operations
-    should be cascaded for a particular association. Remember that by default,
-    no operation is cascaded.</para>
-
-    <para>Hibernate offers more native cascading options, please refer to the
-    Hibernate Annotations manual and the Hibernate reference guide for more
-    informations.</para>
-
-    <para>Recommendations:</para>
-
-    <itemizedlist>
-      <listitem>
-        <para>It doesn't usually make sense to enable cascade on a
-        <literal>@ManyToOne</literal> or <literal>@ManyToMany</literal>
-        association. Cascade is often useful for <literal>@OneToOne</literal>
-        and <literal>@OneToMany</literal> associations.</para>
-      </listitem>
-
-      <listitem>
-        <para>If the child object's lifespan is bounded by the lifespan of the
-        parent object, make the parent a full lifecycle object by specifying
-        <literal>CascadeType.ALL</literal> and
-        <literal>org.hibernate.annotations.CascadeType.DELETE_ORPHAN</literal>
-        (please refer to the Hibernate reference guide for the semantics of
-        orphan delete)</para>
-      </listitem>
-
-      <listitem>
-        <para>Otherwise, you might not need cascade at all. But if you think
-        that you will often be working with the parent and children together
-        in the same transaction, and you want to save yourself some typing,
-        consider using <code>cascade={PERSIST, MERGE}</code>. These options
-        can even make sense for a many-to-many association.</para>
-      </listitem>
-    </itemizedlist>
-  </section>
-
-  <section>
-    <title>Locking</title>
-
-    <para>The default locking system in EJB3 is mostly based on optimistic
-    locking (ie using a version column to check any concurrency issues). EJB3
-    has defined an additional mechanism to increase the concurrency
-    guaranties. You can apply a lock on a given entity (and it's associated
-    entities if <literal>LOCK</literal> is cascaded) through the
-    <methodname>lock(Object entity)</methodname> method. Depending on the
-    concurrency guaranties you requires, you choose a lock mode:</para>
-
-    <itemizedlist>
-      <listitem>
-        <para><literal>LockMode.READ</literal> prevents dirty-reads and non
-        repeatable read on a given entity.</para>
-      </listitem>
-
-      <listitem>
-        <para><literal>LockMode.WRITE</literal> prevents dirty-reads and non
-        repeatable read on a given entity and force an increase of the version
-        number if any.</para>
-      </listitem>
-    </itemizedlist>
-  </section>
-</chapter>
\ No newline at end of file

Copied: trunk/HibernateExt/entitymanager/doc/reference/en/modules/entitymanagerapi.xml (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/doc/reference/en/modules/entitymanagerapi.xml)
===================================================================
--- trunk/HibernateExt/entitymanager/doc/reference/en/modules/entitymanagerapi.xml	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/doc/reference/en/modules/entitymanagerapi.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,777 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<chapter id="objectstate">
+  <title>Working with objects</title>
+
+  <section>
+    <title>Entity states</title>
+
+    <para>Like in Hibernate (comparable terms in parantheses), an entity
+    instance is in one of the following states:</para>
+
+    <itemizedlist>
+      <listitem>
+        <para>New (transient): an entity is new if it has just been
+        instantiated using the new operator, and it is not associated with a
+        persistence context. It has no persistent representation in the
+        database and no identifier value has been assigned.</para>
+      </listitem>
+
+      <listitem>
+        <para>Managed (persistent): a managed entity instance is an instance
+        with a persistent identity that is currently associated with a
+        persistence context.</para>
+      </listitem>
+
+      <listitem>
+        <para>Detached: the entity instance is an instance with a persistent
+        identity that is no longer associated with a persistence context,
+        usually because the persistence context was closed or the instance was
+        evicted from the context.</para>
+      </listitem>
+
+      <listitem>
+        <para>Removed: a removed entity instance is an instance with a
+        persistent identity, associated with a persistence context, but
+        scheduled for removal from the database.</para>
+      </listitem>
+    </itemizedlist>
+
+    <para>The <classname>EntityManager</classname> API allows you to change
+    the state of an entity, or in other words, to load and store objects. You
+    will find persistence with EJB3 easier to understand if you think about
+    object state management, not managing of SQL statements.</para>
+  </section>
+
+  <section>
+    <title>Making objects persistent</title>
+
+    <para>Once you've created a new entity instance (using the common
+    <literal>new</literal> operator) it is in <literal>new</literal> state.
+    You can make it persistent by associating it to an entity manager:</para>
+
+    <programlisting>DomesticCat fritz = new DomesticCat();
+fritz.setColor(Color.GINGER);
+fritz.setSex('M');
+fritz.setName("Fritz");
+em.persist(fritz);</programlisting>
+
+    <para>If the <literal>DomesticCat</literal> entity type has a generated
+    identifier, the value is associated to the instance when
+    <code>persist()</code> is called. If the identifier is not automatically
+    generated, the application-assigned (usually natural) key value has to be
+    set on the instance before <code>persist()</code> is called.</para>
+  </section>
+
+  <section>
+    <title>Loading an object</title>
+
+    <para>Load an entity instance by its identifier value with the entity
+    manager's <code>find()</code> method:</para>
+
+    <programlisting>cat = em.find(Cat.class, catId);
+
+// You may need to wrap the primitive identifiers
+long catId = 1234;
+em.find( Cat.class, new Long(catId) );</programlisting>
+
+    <para>In some cases, you don't really want to load the object state, but
+    just having a reference to it (ie a proxy). You can get this reference
+    using the <literal>getReference()</literal> method. This is especially
+    useful to link a child to its parent wo having to load the parent.</para>
+
+    <programlisting>child = new Child();
+child.SetName("Henry");
+Parent parent = em.getReference(Parent.class, parentId); //no query to the DB
+child.setParent(parent);
+em.persist(child);</programlisting>
+
+    <para>You can reload an entity instance and it's collections at any time
+    using the <code>em.refresh()</code> operation. This is useful when
+    database triggers are used to initialize some of the properties of the
+    entity. Note that only the entity instance and its collections are
+    refreshed unless you specify <literal>REFRESH</literal> as a cascade style
+    of any associations:</para>
+
+    <programlisting>em.persist(cat);
+em.flush(); // force the SQL insert and triggers to run
+em.refresh(cat); //re-read the state (after the trigger executes)</programlisting>
+  </section>
+
+  <section>
+    <title>Querying objects</title>
+
+    <para>If you don't know the identifier values of the objects you are
+    looking for, you need a query. The Hibernate EntityManager implementation
+    supports an easy-to-use but powerful object-oriented query language
+    (EJB3-QL) which has been inspired by HQL (and vice-versa). Both query
+    languages are portable across databases, the use entity and property names
+    as identifiers (instead of table and column names). You may also express
+    your query in the native SQL of your database, with optional support from
+    EJB3 for result set conversion into Java business objects.</para>
+
+    <section>
+      <title>Executing queries</title>
+
+      <para>EJB3QL and SQL queries are represented by an instance of
+      <classname>javax.persistence.Query</classname>. This interface offers
+      methods for parameter binding, result set handling, and for execution of
+      the query. Queries are always created using the current entity
+      manager:</para>
+
+      <programlisting>List cats = em.createQuery(
+    "select cat from Cat as cat where cat.birthdate &lt; ?1")
+    .setParameter(1, date, TemporalType.DATE)
+    .getResultList();
+
+List mothers = em.createQuery(
+    "select mother from Cat as cat join cat.mother as mother where cat.name = ?1")
+    .setParameter(1, name)
+    .getResultList();
+
+List kittens = em.createQuery(
+    "from Cat as cat where cat.mother = ?1")
+    .setEntity(1, pk)
+    .getResultList();
+
+Cat mother = (Cat) em.createQuery(
+    "select cat.mother from Cat as cat where cat = ?1")
+    .setParameter(1, izi)
+    .getSingleResult();</programlisting>
+
+      <para>A query is usually executed by invoking
+      <methodname>getResultList()</methodname>. This method loads the
+      resulting instances of the query completly into memory. Entity instances
+      retrieved by a query are in persistent state. The
+      <methodname>getSingleResult() </methodname>method offers a shortcut if
+      you know your query will only return a single object.</para>
+
+      <section>
+        <title>Projection</title>
+
+        <para>An EJB3QL query queries can return tuples of objects if
+        projection is used. Each result tuple is returned as an object
+        array:</para>
+
+        <programlisting>Iterator kittensAndMothers = sess.createQuery(
+            "select kitten, mother from Cat kitten join kitten.mother mother")
+            .getResultList()
+            .iterator();
+
+while ( kittensAndMothers.hasNext() ) {
+    Object[] tuple = (Object[]) kittensAndMothers.next();
+    Cat kitten  = tuple[0];
+    Cat mother  = tuple[1];
+    ....
+}</programlisting>
+      </section>
+
+      <section>
+        <title>Scalar results</title>
+
+        <para>Queries may specify a particular property of an entity in the
+        select clause, instead of an entity alias. You may call SQL aggregate
+        functions as well. Returned non-transactional objects or aggregation
+        results are considered "scalar" results and are not entities in
+        persistent state (in other words, they are considered "read
+        only"):</para>
+
+        <programlisting>Iterator results = em.createQuery(
+        "select cat.color, min(cat.birthdate), count(cat) from Cat cat " +
+        "group by cat.color")
+        .getResultList()
+        .iterator();
+
+while ( results.hasNext() ) {
+    Object[] row = results.next();
+    Color type = (Color) row[0];
+    Date oldest = (Date) row[1];
+    Integer count = (Integer) row[2];
+    .....
+}</programlisting>
+      </section>
+
+      <section>
+        <title>Bind parameters</title>
+
+        <para>Both named and positional query parameters are supported, the
+        <literal>Query</literal> API offers several methods to bind arguments.
+        The EJB3 specification numbers positional parameters from one. Named
+        parameters are identifiers of the form <literal>:paramname</literal>
+        in the query string. Named parameters should be prefered, they are
+        more robust and easier to read and understand:</para>
+
+        <programlisting>// Named parameter (preferred)
+Query q = em.createQuery("select cat from DomesticCat cat where cat.name = :name");
+q.setParameter("name", "Fritz");
+List cats = q.getResultList();
+
+// Positional parameter
+Query q = em.createQuery("select cat from DomesticCat cat where cat.name = ?1");
+q.setParameter(1, "Izi");
+List cats = q.getResultList();
+
+// Named parameter list
+List names = new ArrayList();
+names.add("Izi");
+names.add("Fritz");
+Query q = em.createQuery("select cat from DomesticCat cat where cat.name in (:namesList)");
+q.setParameter("namesList", names);
+List cats = q.list();</programlisting>
+      </section>
+
+      <section>
+        <title>Pagination</title>
+
+        <para>If you need to specify bounds upon your result set (the maximum
+        number of rows you want to retrieve and/or the first row you want to
+        retrieve), use the following methods:</para>
+
+        <programlisting>Query q = em.createQuery("select cat from DomesticCat cat");
+q.setFirstResult(20);
+q.setMaxResults(10);
+List cats = q.getResultList(); //return cats from the 20th position to 29th</programlisting>
+
+        <para>Hibernate knows how to translate this limit query into the
+        native SQL of your DBMS.</para>
+      </section>
+
+      <section>
+        <title>Externalizing named queries</title>
+
+        <para>You may also define named queries through annotations:</para>
+
+        <programlisting>@javax.persistence.NamedQuery(name="eg.DomesticCat.by.name.and.minimum.weight", 
+  query="select cat from eg.DomesticCat as cat  where cat.name = ?1 and cat.weight &gt; ?2")</programlisting>
+
+        <para>Parameters are bound programatically to the named query, before
+        it is executed:</para>
+
+        <programlisting>Query q = em.createNamedQuery("eg.DomesticCat.by.name.and.minimum.weight");
+q.setString(1, name);
+q.setInt(2, minWeight);
+List cats = q.getResultList();</programlisting>
+
+        <para>Note that the actual program code is independent of the query
+        language that is used, you may also define native SQL queries in
+        metadata, or use Hibernate's native facilities by placing them in XML
+        mapping files.</para>
+      </section>
+
+      <section>
+        <title>Native queries</title>
+
+        <para>You may express a query in SQL, using
+        <methodname>createNativeQuery()</methodname> and let Hibernate take
+        care mapping from JDBC result sets to business objects. Use the
+        <literal>@SqlResultSetMapping</literal> (please see the Hibernate
+        Annotations reference documentation on how to map a SQL resultset
+        mapping) or the entity mapping (if the column names of the query
+        result are the same as the names declared in the entity mapping;
+        remember that all entity columns have to be returned for this
+        mechanism to work):</para>
+
+        <programlisting>@SqlResultSetMapping(name="getItem", entities = 
+        @EntityResult(entityClass=org.hibernate.ejb.test.Item.class, fields= {
+            @FieldResult(name="name", column="itemname"),
+            @FieldResult(name="descr", column="itemdescription")
+        })
+)
+
+Query q = em.createNativeQuery("select name as itemname, descr as itemdescription from Item", "getItem");
+item = (Item) q.getSingleResult(); //from a resultset
+
+Query q = em.createNativeQuery("select * from Item", Item.class);
+item = (Item) q.getSingleResult(); //from a class columns names match the mapping</programlisting>
+
+        <note>
+          <para>For more information about scalar support in named queries,
+          please refers to the Hibenate Annotations documentation</para>
+        </note>
+      </section>
+
+      <section>
+        <title>Query hints</title>
+
+        <para>Query hints (for performance optimization, usually) are
+        implementation specific. Hints are declared using the
+        <methodname>query.setHint(String name, Object value)</methodname>
+        method, or through the <literal>@Named(Native)Query(hints)</literal>
+        annotation Note that these are not SQL query hints! The Hibernate EJB3
+        implementation offers the following query hints:</para>
+
+        <table>
+          <title>Hibernate query hints</title>
+
+          <tgroup cols="2">
+            <thead>
+              <colspec colname="C1" colwidth="1*" />
+
+              <colspec colname="c2" colwidth="3*" />
+
+              <row>
+                <entry align="center">Hint</entry>
+
+                <entry align="center">Description</entry>
+              </row>
+            </thead>
+
+            <tbody>
+              <row>
+                <entry>org.hibernate.timeout</entry>
+
+                <entry>Query timeout in seconds ( eg. new Integer(10)
+                )</entry>
+              </row>
+
+              <row>
+                <entry>org.hibernate.fetchSize</entry>
+
+                <entry>Number of rows fetched by the JDBC driver per roundtrip
+                ( eg. new Integer(50) )</entry>
+              </row>
+
+              <row>
+                <entry>org.hibernate.comment</entry>
+
+                <entry>Add a comment to the SQL query, useful for the DBA (
+                e.g. new String("fetch all orders in 1 statement") )</entry>
+              </row>
+
+              <row>
+                <entry>org.hibernate.cacheable</entry>
+
+                <entry>Whether or not a query is cacheable ( eg. new
+                Boolean(true) ), defaults to false</entry>
+              </row>
+
+              <row>
+                <entry>org.hibernate.cacheMode</entry>
+
+                <entry>Override the cache mode for this query ( eg.
+                CacheMode.REFRESH )</entry>
+              </row>
+
+              <row>
+                <entry>org.hibernate.cacheRegion</entry>
+
+                <entry>Cache region of this query ( eg. new
+                String("regionName") )</entry>
+              </row>
+
+              <row>
+                <entry>org.hibernate.readOnly</entry>
+
+                <entry>Entities retrieved by this query will be loaded in a
+                read-only mode where Hibernate will never dirty-check them or
+                make changes persistent ( eg. new Boolean(true) ), default to
+                false</entry>
+              </row>
+
+              <row>
+                <entry>org.hibernate.flushMode</entry>
+
+                <entry>Flush mode used for this query</entry>
+              </row>
+
+              <row>
+                <entry>org.hibernate.cacheMode</entry>
+
+                <entry>Cache mode used for this query</entry>
+              </row>
+            </tbody>
+          </tgroup>
+        </table>
+
+        <para>Please refer to the Hibernate reference documentation for more
+        information.</para>
+      </section>
+    </section>
+  </section>
+
+  <section>
+    <title>Modifying persistent objects</title>
+
+    <para>Transactional managed instances (ie. objects loaded, saved, created
+    or queried by the entity manager) may be manipulated by the application
+    and any changes to persistent state will be persisted when the Entity
+    manager is flushed (discussed later in this chapter). There is no need to
+    call a particular method to make your modifications persistent. A
+    straightforward wayt to update the state of an entity instance is to
+    <methodname>find()</methodname> it, and then manipulate it directly, while
+    the persistence context is open:</para>
+
+    <programlisting>Cat cat = em.find( Cat.class, new Long(69) );
+cat.setName("PK");
+em.flush();  // changes to cat are automatically detected and persisted</programlisting>
+
+    <para>Sometimes this programming model is inefficient since it would
+    require both an SQL SELECT (to load an object) and an SQL UPDATE (to
+    persist its updated state) in the same session. Therefore Hibernate offers
+    an alternate approach, using detached instances.</para>
+  </section>
+
+  <section>
+    <title>Modifying detached objects</title>
+
+    <para>Many applications need to retrieve an object in one transaction,
+    send it to the presentation layer for manipulation, and later save the
+    changes in a new transaction. There can be significant user think and
+    waiting time between both transactions. Applications that use this kind of
+    approach in a high-concurrency environment usually use versioned data to
+    ensure isolation for the "long" unit of work.</para>
+
+    <para>The EJB3 specifications supports this development model by providing
+    for persistence of modifications made to detached instances using the
+    <methodname>EntityManager.merge()</methodname> method:</para>
+
+    <programlisting>// in the first entity manager
+Cat cat = firstEntityManager.find(Cat.class, catId);
+Cat potentialMate = new Cat();
+firstEntityManager.persist(potentialMate);
+
+// in a higher layer of the application
+cat.setMate(potentialMate);
+
+// later, in a new entity manager
+secondEntityManager.merge(cat);  // update cat
+secondEntityManager.merge(mate); // update mate</programlisting>
+
+    <para>The <literal>merge()</literal> method merges modifications made to
+    the detached instance into the corresponding managed instance, if any,
+    without consideration of the state of the persistence context. In other
+    words, the merged objects state overrides the persistent entity state in
+    the persistence context, if one is already present. The application should
+    individually <methodname>merge()</methodname> detached instances reachable
+    from the given detached instance if and only if it wants their state also
+    to be persistent. This can be cascaded to associated entities and
+    collections, using transitive persistence, see <xref
+    linkend="objectstate-transitive" />.</para>
+  </section>
+
+  <section>
+    <title>Automatic state detection</title>
+
+    <para>The merge operation is clever enough to automatically detect whether
+    the merging of the detached instance has to result in an insert or update.
+    In other words, you don't have to worry about passing a new instance (and
+    not a detached instance) to <literal>merge()</literal>, the entity manager
+    will figure this out for you:</para>
+
+    <programlisting>// In the first entity manager
+Cat cat = firstEntityManager.find(Cat.class, catID);
+
+// In a higher layer of the application, detached
+Cat mate = new Cat();
+cat.setMate(mate);
+
+// Later, in a new entity manager
+secondEntityManager.merge(cat);   // update existing state
+secondEntityManager.merge(mate);  // save the new instance</programlisting>
+
+    <para>The usage and semantics of <literal>merge()</literal> seems to be
+    confusing for new users. Firstly, as long as you are not trying to use
+    object state loaded in one entity manager in another new entity manager,
+    you should not need to use <methodname>merge()</methodname> at all. Some
+    whole applications will never use this method.</para>
+
+    <para>Usually <methodname>merge()</methodname> is used in the following
+    scenario:</para>
+
+    <itemizedlist>
+      <listitem>
+        <para>the application loads an object in the first entity
+        manager</para>
+      </listitem>
+
+      <listitem>
+        <para>the object is passed up to the presentation layer</para>
+      </listitem>
+
+      <listitem>
+        <para>some modifications are made to the object</para>
+      </listitem>
+
+      <listitem>
+        <para>the object is passed back down to the business logic
+        layer</para>
+      </listitem>
+
+      <listitem>
+        <para>the application persists these modifications by calling
+        <methodname>merge()</methodname> in a second entity manager</para>
+      </listitem>
+    </itemizedlist>
+
+    <para>Here is the exact semantic of
+    <methodname>merge()</methodname>:</para>
+
+    <itemizedlist>
+      <listitem>
+        <para>if there is a managed instance with the same identifier
+        currently associated with the persistence context, copy the state of
+        the given object onto the managed instance</para>
+      </listitem>
+
+      <listitem>
+        <para>if there is no managed instance currently associated with the
+        persistence context, try to load it from the database, or create a new
+        managed instance</para>
+      </listitem>
+
+      <listitem>
+        <para>the managed instance is returned</para>
+      </listitem>
+
+      <listitem>
+        <para>the given instance does not become associated with the
+        persistence context, it remains detached and is usually
+        discarded</para>
+      </listitem>
+    </itemizedlist>
+
+    <note>
+      <title>Merging vs. saveOrUpdate/saveOrUpdateCopy</title>
+
+      <para>Merging in EJB3 is similar to the
+      <literal>saveOrUpdateCopy()</literal> method in native Hibernate.
+      However, it is not the same as the <literal>saveOrUpdate()</literal>
+      method, the given instance is not reattached with the persistence
+      context, but a managed instance is returned by the
+      <methodname>merge()</methodname> method.</para>
+    </note>
+  </section>
+
+  <section>
+    <title>Deleting managed objects</title>
+
+    <para><methodname>EntityManager.remove()</methodname> will remove an
+    objects state from the database. Of course, your application might still
+    hold a reference to a deleted object. You can think of
+    <methodname>remove()</methodname> as making a persistent instance new (aka
+    transient) again. It is not detached, and a merge would result in an
+    insertion.</para>
+  </section>
+
+  <section>
+    <title>Flush the persistence context</title>
+
+    <section>
+      <title>In a transaction</title>
+
+      <para>From time to time the entity manager will execute the SQL DML
+      statements needed to synchronize the data store with the state of
+      objects held in memory. This process, flush, occurs by default (this is
+      Hibernate specific and not defined by the specification) at the
+      following points:</para>
+
+      <itemizedlist>
+        <listitem>
+          <para>before query execution*</para>
+        </listitem>
+
+        <listitem>
+          <para>from
+          <methodname>javax.persistence.EntityTransaction.commit()*</methodname></para>
+        </listitem>
+
+        <listitem>
+          <para>when <methodname>EntityManager.flush()</methodname> is
+          called*</para>
+        </listitem>
+      </itemizedlist>
+
+      <para>(*) if a transaction is active</para>
+
+      <para>The SQL statements are issued in the following order</para>
+
+      <itemizedlist>
+        <listitem>
+          <para>all entity insertions, in the same order the corresponding
+          objects were saved using
+          <methodname>EntityManager.persist()</methodname></para>
+        </listitem>
+
+        <listitem>
+          <para>all entity updates</para>
+        </listitem>
+
+        <listitem>
+          <para>all collection deletions</para>
+        </listitem>
+
+        <listitem>
+          <para>all collection element deletions, updates and
+          insertions</para>
+        </listitem>
+
+        <listitem>
+          <para>all collection insertions</para>
+        </listitem>
+
+        <listitem>
+          <para>all entity deletions, in the same order the corresponding
+          objects were deleted using
+          <methodname>EntityManager.remove()</methodname></para>
+        </listitem>
+      </itemizedlist>
+
+      <para>(Exception: entity instances using application-assigned
+      identifiers are inserted when they are saved.)</para>
+
+      <para>Except when you explicity <methodname>flush()</methodname>, there
+      are absolutely no guarantees about when the entity manager executes the
+      JDBC calls, only the order in which they are executed. However,
+      Hibernate does guarantee that the
+      <methodname>Query.getResultList()</methodname>/<methodname>Query.getSingleResult()</methodname>
+      will never return stale data; nor will they return wrong data if
+      executed in an active transaction.</para>
+
+      <para>It is possible to change the default behavior so that flush occurs
+      less frequently. The <classname>FlushModeType</classname> for an entity
+      manager defines two different modes: only flush at commit time or flush
+      automatically using the explained routine unless
+      <methodname>flush()</methodname> is called explicitly.</para>
+
+      <programlisting>em = emf.createEntityManager();
+Transaction tx = em.getTransaction().begin();
+em.setFlushMode(FlushModeType.COMMIT); // allow queries to return stale state
+
+Cat izi = em.find(Cat.class, id);
+izi.setName(iznizi);
+
+// might return stale data
+em.createQuery("from Cat as cat left outer join cat.kittens kitten").getResultList();
+
+// change to izi is not flushed!
+...
+em.getTransaction().commit(); // flush occurs</programlisting>
+
+      <para>During flush, an exception might happen (e.g. if a DML operation
+      violates a constraint). TODO: Add link to exception handling.</para>
+
+      <para>Hibernate provides more flush modes than the one described in the
+      EJB3 specification. Please refer to the Hibernate core reference
+      documentation for more informations.</para>
+    </section>
+
+    <section>
+      <title>Outside a transaction</title>
+
+      <para>In an <literal>EXTENDED</literal> persistence context, all read
+      only operations of the entity manager can be executed outside a
+      transaction (<literal>find()</literal>,
+      <literal>getReference()</literal>, <literal>refresh()</literal>, and
+      read queries). Some modifications operations can be executed outside a
+      transaction, but they are queued until the persistence context join a
+      transaction. This is the case of <literal>persist()</literal>,
+      <literal><literal>merge()</literal></literal>,
+      <literal>remove()</literal>. Some operations cannot be called outside a
+      transaction: <literal>flush()</literal>, <literal>lock()</literal>, and
+      update/delete queries.</para>
+    </section>
+  </section>
+
+  <section id="objectstate-transitive" revision="1"
+           xreflabel="Transitive persistence">
+    <title>Transitive persistence</title>
+
+    <para>It is quite cumbersome to save, delete, or reattach individual
+    objects, especially if you deal with a graph of associated objects. A
+    common case is a parent/child relationship. Consider the following
+    example:</para>
+
+    <para>If the children in a parent/child relationship would be value typed
+    (e.g. a collection of addresses or strings), their lifecycle would depend
+    on the parent and no further action would be required for convenient
+    "cascading" of state changes. When the parent is persisted, the
+    value-typed child objects are persisted as well, when the parent is
+    removed, the children will be removed, etc. This even works for operations
+    such as the removal of a child from the collection; Hibernate will detect
+    this and, since value-typed objects can't have shared references, remove
+    the child from the database.</para>
+
+    <para>Now consider the same scenario with parent and child objects being
+    entities, not value-types (e.g. categories and items, or parent and child
+    cats). Entities have their own lifecycle, support shared references (so
+    removing an entity from the collection does not mean it can be deleted),
+    and there is by default no cascading of state from one entity to any other
+    associated entities. The EJB3 specification does not require persistence
+    by reachability. It supports a more flexible model of transitive
+    persistence, as first seen in Hibernate.</para>
+
+    <para>For each basic operation of the entity manager - including
+    <methodname>persist()</methodname>, <methodname>merge()</methodname>,
+    <methodname>remove()</methodname>, <methodname>refresh()</methodname> -
+    there is a corresponding cascade style. Respectively, the cascade styles
+    are named PERSIST, MERGE, REMOVE, REFRESH. If you want an operation to be
+    cascaded to associated entity (or collection of entities), you must
+    indicate that in the association annotation:</para>
+
+    <programlisting>@OneToOne(cascade=CascadeType.PERSIST)</programlisting>
+
+    <para>Cascading options can be combined:</para>
+
+    <programlisting>@OneToOne(cascade= { CascadeType.PERSIST, CascadeType.REMOVE, CascadeType.REFRESH } )</programlisting>
+
+    <para>You may even use CascadeType.ALL to specify that all operations
+    should be cascaded for a particular association. Remember that by default,
+    no operation is cascaded.</para>
+
+    <para>Hibernate offers more native cascading options, please refer to the
+    Hibernate Annotations manual and the Hibernate reference guide for more
+    informations.</para>
+
+    <para>Recommendations:</para>
+
+    <itemizedlist>
+      <listitem>
+        <para>It doesn't usually make sense to enable cascade on a
+        <literal>@ManyToOne</literal> or <literal>@ManyToMany</literal>
+        association. Cascade is often useful for <literal>@OneToOne</literal>
+        and <literal>@OneToMany</literal> associations.</para>
+      </listitem>
+
+      <listitem>
+        <para>If the child object's lifespan is bounded by the lifespan of the
+        parent object, make the parent a full lifecycle object by specifying
+        <literal>CascadeType.ALL</literal> and
+        <literal>org.hibernate.annotations.CascadeType.DELETE_ORPHAN</literal>
+        (please refer to the Hibernate reference guide for the semantics of
+        orphan delete)</para>
+      </listitem>
+
+      <listitem>
+        <para>Otherwise, you might not need cascade at all. But if you think
+        that you will often be working with the parent and children together
+        in the same transaction, and you want to save yourself some typing,
+        consider using <code>cascade={PERSIST, MERGE}</code>. These options
+        can even make sense for a many-to-many association.</para>
+      </listitem>
+    </itemizedlist>
+  </section>
+
+  <section>
+    <title>Locking</title>
+
+    <para>The default locking system in EJB3 is mostly based on optimistic
+    locking (ie using a version column to check any concurrency issues). EJB3
+    has defined an additional mechanism to increase the concurrency
+    guaranties. You can apply a lock on a given entity (and it's associated
+    entities if <literal>LOCK</literal> is cascaded) through the
+    <methodname>lock(Object entity)</methodname> method. Depending on the
+    concurrency guaranties you requires, you choose a lock mode:</para>
+
+    <itemizedlist>
+      <listitem>
+        <para><literal>LockMode.READ</literal> prevents dirty-reads and non
+        repeatable read on a given entity.</para>
+      </listitem>
+
+      <listitem>
+        <para><literal>LockMode.WRITE</literal> prevents dirty-reads and non
+        repeatable read on a given entity and force an increase of the version
+        number if any.</para>
+      </listitem>
+    </itemizedlist>
+  </section>
+</chapter>
\ No newline at end of file

Deleted: trunk/HibernateExt/entitymanager/doc/reference/en/modules/listeners.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/doc/reference/en/modules/listeners.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/doc/reference/en/modules/listeners.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,239 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<chapter id="listeners">
-  <title>Entity listeners and Callback methods</title>
-
-  <section>
-    <title>Definition</title>
-
-    <para>It is often useful for the application to react to certain events
-    that occur inside the persistence mechanism. This allows the
-    implementation of certain kinds of generic functionality, and extension of
-    built-in functionality. The EJB3 specification provides two related
-    mechanisms for this purpose.</para>
-
-    <para>A method of the entity may be designated as a callback method to
-    receive notification of a particular entity life cycle event. Callbacks
-    methods are annotated by a callback annotation. You can also define an
-    entity listener class to be used instead of the callback methods defined
-    directly inside the entity class. An entity listener is a stateless class
-    with a no-arg constructor. An entity listener is defined by annotating the
-    entity class with the <literal>@EntityListeners</literal>
-    annotation:</para>
-
-    <programlisting>@Entity 
- at EntityListeners(class=Audit.class)
-public class Cat {
-    @Id private Integer id;
-    private String name;
-    private Calendar dateOfBirth;
-    @Transient private int age;
-    private Date lastUpdate;
-    //getters and setters
-
-    /**
-     * Set my transient property at load time based on a calculation,
-     * note that a native Hibernate formula mapping is better for this purpose.
-     */
-    @PostLoad
-    public void calculateAge() {
-        Calendar birth = new GregorianCalendar();
-        birth.setTime(dateOfBirth);
-        Calendar now = new GregorianCalendar();
-        now.setTime( new Date() );
-        int adjust = 0;
-        if ( now.get(Calendar.DAY_OF_YEAR) - birth.get(Calendar.DAY_OF_YEAR) &lt; 0) {
-            adjust = -1;
-        }
-        age = now.get(Calendar.YEAR) - birth.get(Calendar.YEAR) + adjust;
-    }
-}
-
-public class LastUpdateListener {
-    /**
-     * automatic property set before any database persistence
-     */
-    @PreUpdate
-    @PrePersist
-    public void setLastUpdate(Cat o) {
-        o.setLastUpdate( new Date() );
-    }
-}</programlisting>
-
-    <para>The same callback method or entity listener method can be annotated
-    with more than one callback annotation. For a given entity, you cannot
-    have two methods being annotated by the same callback annotation whether
-    it is a callback method or an entity listener method. A callback method is
-    a no-arg method with no return type and any arbitrary name. An entity
-    listener has the signature <code>void &lt;METHOD&gt;(Object)</code>
-    where Object is of the actual entity type (note that Hibernate Entity
-    Manager relaxed this constraint and allows <literal>Object</literal> of
-    <literal>java.lang.Object</literal> type (allowing sharing of listeners
-    accross several entities.)</para>
-
-    <para>A callback method can raise a
-    <classname>RuntimeException</classname>. The current transaction, if any,
-    must be rolled back. The following callbacks are defined:</para>
-
-    <table>
-      <title>Callbacks</title>
-
-      <tgroup cols="2">
-        <thead>
-          <colspec colname="c1" colwidth="1*" />
-
-          <colspec colname="c2" colwidth="3*" />
-
-          <row>
-            <entry align="center">Type</entry>
-
-            <entry align="center">Description</entry>
-          </row>
-        </thead>
-
-        <tbody>
-          <row>
-            <entry>@PrePersist</entry>
-
-            <entry>Executed before the entity manager persist operation is
-            actually executed or cascaded. This call is synchronous with the
-            persist operation.</entry>
-          </row>
-
-          <row>
-            <entry>@PreRemove</entry>
-
-            <entry>Executed before the entity manager remove operation is
-            actually executed or cascaded. This call is synchronous with the
-            remove operation.</entry>
-          </row>
-
-          <row>
-            <entry>@PostPersist</entry>
-
-            <entry>Executed after the entity manager persist operation is
-            actually executed or cascaded. This call is invoked after the
-            database INSERT is executed.</entry>
-          </row>
-
-          <row>
-            <entry>@PostRemove</entry>
-
-            <entry>Executed after the entity manager remove operation is
-            actually executed or cascaded. This call is synchronous with the
-            remove operation.</entry>
-          </row>
-
-          <row>
-            <entry>@PreUpdate</entry>
-
-            <entry>Executed before the database UPDATE operation.</entry>
-          </row>
-
-          <row>
-            <entry>@PostUpdate</entry>
-
-            <entry>Executed after the database UPDATE operation.</entry>
-          </row>
-
-          <row>
-            <entry>@PostLoad</entry>
-
-            <entry>Eexecuted after an entity has been loaded into the current
-            persistence context or an entity has been refreshed.</entry>
-          </row>
-        </tbody>
-      </tgroup>
-    </table>
-
-    <para>A callback method must not invoke
-    <classname>EntityManager</classname> or <classname>Query</classname>
-    methods!</para>
-  </section>
-
-  <section>
-    <title>Callbacks and listeners inheritance</title>
-
-    <para>You can define several entity listeners per entity at different
-    level of the hierarchy.You can also define several callbacks at different
-    level of the hierarchy. But you cannot define two listeners for the same
-    event in the same entity or the same entity listener.</para>
-
-    <para>When an event is raised, the listeners are executed in this
-    order:</para>
-
-    <itemizedlist>
-      <listitem>
-        <para><literal>@EntityListeners</literal> for a given entity or
-        superclass in the array order</para>
-      </listitem>
-
-      <listitem>
-        <para>Entity listeners for the superclasses (highest first)</para>
-      </listitem>
-
-      <listitem>
-        <para>Entity Listeners for the entity</para>
-      </listitem>
-
-      <listitem>
-        <para>Callbacks of the superclasses (highest first)</para>
-      </listitem>
-
-      <listitem>
-        <para>Callbacks of the entity</para>
-      </listitem>
-    </itemizedlist>
-
-    <para>You can stop the entity listeners inheritance by using the
-    <literal>@ExcludeSuperclassListeners</literal>, all superclasses
-    <literal>@EntityListeners</literal> will then be ignored.</para>
-  </section>
-
-  <section>
-    <title>XML definition</title>
-
-    <para>The EJB3 specification allows annotation overriding through EJB3
-    deployment descriptor. There is also an additional feature that can be
-    useful: default event listeners.</para>
-
-    <programlisting>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
-
-&lt;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 orm_1_0.xsd"
-                 version="1.0"
-        &gt;
-    &lt;persistence-unit-metadata&gt;
-        &lt;persistence-unit-defaults&gt;
-            &lt;entity-listeners&gt;
-                &lt;entity-listener class="org.hibernate.ejb.test.pack.defaultpar.IncrementListener"&gt;
-                    &lt;pre-persist method-name="increment"/&gt;
-                &lt;/entity-listener&gt;
-            &lt;/entity-listeners&gt;
-        &lt;/persistence-unit-defaults&gt;
-    &lt;/persistence-unit-metadata&gt;
-    &lt;package&gt;org.hibernate.ejb.test.pack.defaultpar&lt;/package&gt;
-    &lt;entity class="ApplicationServer"&gt;
-        &lt;entity-listeners&gt;
-            &lt;entity-listener class="OtherIncrementListener"&gt;
-                &lt;pre-persist method-name="increment"/&gt;
-            &lt;/entity-listener&gt;
-        &lt;/entity-listeners&gt;
-
-
-        &lt;pre-persist method-name="calculate"/&gt;
-    &lt;/entity&gt;
-&lt;/entity-mappings&gt;</programlisting>
-
-    <para>You can override entity listeners on a given entity. An entity
-    listener correspond to a given class and one or several event fire a given
-    method call. You can also define event on the entity itself to describe
-    the callbacks.</para>
-
-    <para>Last but not least, you can define some default entity listeners
-    that will apply first on the entity listener stack of all the mapped
-    entities of a given persistence unit. If you don't want an entity to
-    inherit the default listeners, you can use @ExcludeDefaultListeners (or
-    &lt;exclude-default-listeners/&gt;).</para>
-  </section>
-</chapter>
\ No newline at end of file

Copied: trunk/HibernateExt/entitymanager/doc/reference/en/modules/listeners.xml (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/doc/reference/en/modules/listeners.xml)
===================================================================
--- trunk/HibernateExt/entitymanager/doc/reference/en/modules/listeners.xml	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/doc/reference/en/modules/listeners.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,239 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<chapter id="listeners">
+  <title>Entity listeners and Callback methods</title>
+
+  <section>
+    <title>Definition</title>
+
+    <para>It is often useful for the application to react to certain events
+    that occur inside the persistence mechanism. This allows the
+    implementation of certain kinds of generic functionality, and extension of
+    built-in functionality. The EJB3 specification provides two related
+    mechanisms for this purpose.</para>
+
+    <para>A method of the entity may be designated as a callback method to
+    receive notification of a particular entity life cycle event. Callbacks
+    methods are annotated by a callback annotation. You can also define an
+    entity listener class to be used instead of the callback methods defined
+    directly inside the entity class. An entity listener is a stateless class
+    with a no-arg constructor. An entity listener is defined by annotating the
+    entity class with the <literal>@EntityListeners</literal>
+    annotation:</para>
+
+    <programlisting>@Entity 
+ at EntityListeners(class=Audit.class)
+public class Cat {
+    @Id private Integer id;
+    private String name;
+    private Calendar dateOfBirth;
+    @Transient private int age;
+    private Date lastUpdate;
+    //getters and setters
+
+    /**
+     * Set my transient property at load time based on a calculation,
+     * note that a native Hibernate formula mapping is better for this purpose.
+     */
+    @PostLoad
+    public void calculateAge() {
+        Calendar birth = new GregorianCalendar();
+        birth.setTime(dateOfBirth);
+        Calendar now = new GregorianCalendar();
+        now.setTime( new Date() );
+        int adjust = 0;
+        if ( now.get(Calendar.DAY_OF_YEAR) - birth.get(Calendar.DAY_OF_YEAR) &lt; 0) {
+            adjust = -1;
+        }
+        age = now.get(Calendar.YEAR) - birth.get(Calendar.YEAR) + adjust;
+    }
+}
+
+public class LastUpdateListener {
+    /**
+     * automatic property set before any database persistence
+     */
+    @PreUpdate
+    @PrePersist
+    public void setLastUpdate(Cat o) {
+        o.setLastUpdate( new Date() );
+    }
+}</programlisting>
+
+    <para>The same callback method or entity listener method can be annotated
+    with more than one callback annotation. For a given entity, you cannot
+    have two methods being annotated by the same callback annotation whether
+    it is a callback method or an entity listener method. A callback method is
+    a no-arg method with no return type and any arbitrary name. An entity
+    listener has the signature <code>void &lt;METHOD&gt;(Object)</code>
+    where Object is of the actual entity type (note that Hibernate Entity
+    Manager relaxed this constraint and allows <literal>Object</literal> of
+    <literal>java.lang.Object</literal> type (allowing sharing of listeners
+    accross several entities.)</para>
+
+    <para>A callback method can raise a
+    <classname>RuntimeException</classname>. The current transaction, if any,
+    must be rolled back. The following callbacks are defined:</para>
+
+    <table>
+      <title>Callbacks</title>
+
+      <tgroup cols="2">
+        <thead>
+          <colspec colname="c1" colwidth="1*" />
+
+          <colspec colname="c2" colwidth="3*" />
+
+          <row>
+            <entry align="center">Type</entry>
+
+            <entry align="center">Description</entry>
+          </row>
+        </thead>
+
+        <tbody>
+          <row>
+            <entry>@PrePersist</entry>
+
+            <entry>Executed before the entity manager persist operation is
+            actually executed or cascaded. This call is synchronous with the
+            persist operation.</entry>
+          </row>
+
+          <row>
+            <entry>@PreRemove</entry>
+
+            <entry>Executed before the entity manager remove operation is
+            actually executed or cascaded. This call is synchronous with the
+            remove operation.</entry>
+          </row>
+
+          <row>
+            <entry>@PostPersist</entry>
+
+            <entry>Executed after the entity manager persist operation is
+            actually executed or cascaded. This call is invoked after the
+            database INSERT is executed.</entry>
+          </row>
+
+          <row>
+            <entry>@PostRemove</entry>
+
+            <entry>Executed after the entity manager remove operation is
+            actually executed or cascaded. This call is synchronous with the
+            remove operation.</entry>
+          </row>
+
+          <row>
+            <entry>@PreUpdate</entry>
+
+            <entry>Executed before the database UPDATE operation.</entry>
+          </row>
+
+          <row>
+            <entry>@PostUpdate</entry>
+
+            <entry>Executed after the database UPDATE operation.</entry>
+          </row>
+
+          <row>
+            <entry>@PostLoad</entry>
+
+            <entry>Eexecuted after an entity has been loaded into the current
+            persistence context or an entity has been refreshed.</entry>
+          </row>
+        </tbody>
+      </tgroup>
+    </table>
+
+    <para>A callback method must not invoke
+    <classname>EntityManager</classname> or <classname>Query</classname>
+    methods!</para>
+  </section>
+
+  <section>
+    <title>Callbacks and listeners inheritance</title>
+
+    <para>You can define several entity listeners per entity at different
+    level of the hierarchy.You can also define several callbacks at different
+    level of the hierarchy. But you cannot define two listeners for the same
+    event in the same entity or the same entity listener.</para>
+
+    <para>When an event is raised, the listeners are executed in this
+    order:</para>
+
+    <itemizedlist>
+      <listitem>
+        <para><literal>@EntityListeners</literal> for a given entity or
+        superclass in the array order</para>
+      </listitem>
+
+      <listitem>
+        <para>Entity listeners for the superclasses (highest first)</para>
+      </listitem>
+
+      <listitem>
+        <para>Entity Listeners for the entity</para>
+      </listitem>
+
+      <listitem>
+        <para>Callbacks of the superclasses (highest first)</para>
+      </listitem>
+
+      <listitem>
+        <para>Callbacks of the entity</para>
+      </listitem>
+    </itemizedlist>
+
+    <para>You can stop the entity listeners inheritance by using the
+    <literal>@ExcludeSuperclassListeners</literal>, all superclasses
+    <literal>@EntityListeners</literal> will then be ignored.</para>
+  </section>
+
+  <section>
+    <title>XML definition</title>
+
+    <para>The EJB3 specification allows annotation overriding through EJB3
+    deployment descriptor. There is also an additional feature that can be
+    useful: default event listeners.</para>
+
+    <programlisting>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+
+&lt;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 orm_1_0.xsd"
+                 version="1.0"
+        &gt;
+    &lt;persistence-unit-metadata&gt;
+        &lt;persistence-unit-defaults&gt;
+            &lt;entity-listeners&gt;
+                &lt;entity-listener class="org.hibernate.ejb.test.pack.defaultpar.IncrementListener"&gt;
+                    &lt;pre-persist method-name="increment"/&gt;
+                &lt;/entity-listener&gt;
+            &lt;/entity-listeners&gt;
+        &lt;/persistence-unit-defaults&gt;
+    &lt;/persistence-unit-metadata&gt;
+    &lt;package&gt;org.hibernate.ejb.test.pack.defaultpar&lt;/package&gt;
+    &lt;entity class="ApplicationServer"&gt;
+        &lt;entity-listeners&gt;
+            &lt;entity-listener class="OtherIncrementListener"&gt;
+                &lt;pre-persist method-name="increment"/&gt;
+            &lt;/entity-listener&gt;
+        &lt;/entity-listeners&gt;
+
+
+        &lt;pre-persist method-name="calculate"/&gt;
+    &lt;/entity&gt;
+&lt;/entity-mappings&gt;</programlisting>
+
+    <para>You can override entity listeners on a given entity. An entity
+    listener correspond to a given class and one or several event fire a given
+    method call. You can also define event on the entity itself to describe
+    the callbacks.</para>
+
+    <para>Last but not least, you can define some default entity listeners
+    that will apply first on the entity listener stack of all the mapped
+    entities of a given persistence unit. If you don't want an entity to
+    inherit the default listeners, you can use @ExcludeDefaultListeners (or
+    &lt;exclude-default-listeners/&gt;).</para>
+  </section>
+</chapter>
\ No newline at end of file

Deleted: trunk/HibernateExt/entitymanager/doc/reference/en/modules/query_ejbql.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/doc/reference/en/modules/query_ejbql.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/doc/reference/en/modules/query_ejbql.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,866 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<chapter id="queryhql">
-  <title>EJB-QL: The Object Query Language</title>
-
-  <para>
-    EJB3-QL has been heavily inspired by HQL, the native Hibernate Query Language. Both
-    are therefore very close to SQL, but portable and independent of the database schema.
-    People familiar with HQL shouldn't have any problem using EJB-QL. Actually, you
-    use the same query API for EJB-QL and HQL queries. Portable EJB3 applications however
-    should stick to EJB-QL or similar vendor extensions are needed.
-    </para>
-
-  <sect1 id="queryhql-casesensitivity">
-    <title>Case Sensitivity</title>
-
-    <para>Queries are case-insensitive, except for names of Java classes and
-    properties. So <literal>SeLeCT</literal> is the same as
-    <literal>sELEct</literal> is the same as <literal>SELECT</literal> but
-    <literal>org.hibernate.eg.FOO</literal> is not
-    <literal>org.hibernate.eg.Foo</literal> and <literal>foo.barSet</literal>
-    is not <literal>foo.BARSET</literal>.</para>
-
-    <para>This manual uses lowercase EJBQL keywords. Some users find queries
-    with uppercase keywords more readable, but we find this convention ugly
-    when embedded in Java code.</para>
-  </sect1>
-
-  <sect1 id="queryhql-from">
-    <title>The from clause</title>
-
-    <para>The simplest possible EJB-QL query is of the form:</para>
-
-    <programlisting>select c from eg.Cat c</programlisting>
-
-    <para>which simply returns all instances of the class
-    <literal>eg.Cat</literal>. Unlike HQL, the select clause is not optional
-    in EJB-QL. We don't usually need to qualify the class name, since the
-    entity name defaults to the unqualified class name
-    (<literal>@Entity</literal>). So we almost always just write:</para>
-
-    <programlisting>select c from Cat c</programlisting>
-
-    <para>As you may have noticed you can assign aliases to classes, the
-    <literal>as</literal> keywork is optional. An alias allows you to refer
-    to <literal>Cat</literal> in other parts of the query.</para>
-
-    <programlisting>select cat from Cat as cat</programlisting>
-
-    <para>Multiple classes may appear, resulting in a cartesian product or
-    "cross" join.</para>
-
-    <programlisting>select form, param from Formula as form, Parameter as param</programlisting>
-
-    <para>It is considered good practice to name query aliases using an
-    initial lowercase, consistent with Java naming standards for local
-    variables (eg. <literal>domesticCat</literal>).</para>
-  </sect1>
-
-  <sect1 id="queryhql-joins" revision="1">
-    <title>Associations and joins</title>
-
-    <para>You may also assign aliases to associated entities, or even to
-    elements of a collection of values, using a
-    <literal>join</literal>.</para>
-
-    <programlisting>select cat, mate, kitten from Cat as cat 
-    inner join cat.mate as mate
-    left outer join cat.kittens as kitten</programlisting>
-
-    <programlisting>select cat from Cat as cat left join cat.mate.kittens as kittens</programlisting>
-
-    <para>The supported join types are borrowed from ANSI SQL</para>
-
-    <itemizedlist spacing="compact">
-      <listitem>
-        <para><literal>inner join</literal></para>
-      </listitem>
-
-      <listitem>
-        <para><literal>left outer join</literal></para>
-      </listitem>
-    </itemizedlist>
-
-    <para>The <literal>inner join</literal>, <literal>left outer
-    join</literal> constructs may be abbreviated.</para>
-
-    <programlisting>select cat, mate, kitten from Cat as cat 
-    join cat.mate as mate
-    left join cat.kittens as kitten</programlisting>
-
-    <para>In addition, a "fetch" join allows associations or collections of
-    values to be initialized along with their parent objects, using a single
-    select. This is particularly useful in the case of a collection. It
-    effectively overrides the fetching options in the associations and collection
-    mapping metadata. See the Performance chapter of the Hibernate reference guide
-    for more information.</para>
-
-    <programlisting>select cat from Cat as cat 
-    inner join fetch cat.mate
-    left join fetch cat.kittens</programlisting>
-
-    <para>A fetch join does not usually need to assign an alias, because the
-    associated objects should not be used in the <literal>where</literal>
-    clause (or any other clause). Also, the associated objects are not
-    returned directly in the query results. Instead, they may be accessed via
-    the parent object. The only reason we might need an alias is if we are
-    recursively join fetching a further collection:</para>
-
-    <programlisting>select cat from Cat as cat 
-    inner join fetch cat.mate
-    left join fetch cat.kittens child
-    left join fetch child.kittens</programlisting>
-
-    <para>Note that the <literal>fetch</literal> construct may not be used in
-    queries called using <literal>scroll()</literal> or
-    <literal>iterate()</literal>. Nor should <literal>fetch</literal> be used
-    together with <literal>setMaxResults()</literal> or
-    <literal>setFirstResult()</literal>. It is possible to create a cartesian
-    product by join fetching more than one collection in a query (as in the example
-    above), be careful the result of this product isn't bigger than you expect.
-    Join fetching multiple collection roles also sometimes gives unexpected results for
-    bag mappings, so be careful about how you formulate your queries in this case.</para>
-
-    <para>
-      TODO: The last statement is useless and typical developer thinking, please elaborate.
-        The word "sometimes" should never appear in any technical documentation.
-    </para>
-
-    <para>If you are using property-level lazy fetching (with bytecode
-    instrumentation), it is possible to force Hibernate to fetch the lazy
-    properties immediately (in the first query) using <literal>fetch all
-    properties</literal>. This is Hibernate specific option:</para>
-
-    <programlisting>select doc from Document doc fetch all properties order by doc.name</programlisting>
-
-    <programlisting>select doc from Document doc fetch all properties where lower(doc.name) like '%cats%'</programlisting>
-  </sect1>
-
-  <sect1 id="queryhql-select">
-    <title>The select clause</title>
-
-    <para>The <literal>select</literal> clause picks which objects and
-    properties to return in the query result set. Consider:</para>
-
-    <programlisting>select mate 
-from Cat as cat 
-    inner join cat.mate as mate</programlisting>
-
-    <para>The query will select <literal>mate</literal>s of other
-    <literal>Cat</literal>s. Actually, you may express this query more
-    compactly as:</para>
-
-    <programlisting>select cat.mate from Cat cat</programlisting>
-
-    <para>Queries may return properties of any value type including properties
-    of component type:</para>
-
-    <programlisting>select cat.name from DomesticCat cat
-where cat.name like 'fri%'</programlisting>
-
-    <programlisting>select cust.name.firstName from Customer as cust</programlisting>
-
-    <para>Queries may return multiple objects and/or properties as an array of
-    type <literal>Object[]</literal>,</para>
-
-    <programlisting>select mother, offspr, mate.name 
-from DomesticCat as mother
-    inner join mother.mate as mate
-    left outer join mother.kittens as offspr</programlisting>
-
-    <para>or as a <literal>List</literal> (HQL specific feature)</para>
-
-    <programlisting>select new list(mother, offspr, mate.name)
-from DomesticCat as mother
-    inner join mother.mate as mate
-    left outer join mother.kittens as offspr</programlisting>
-
-    <para>or as an actual typesafe Java object,</para>
-
-    <programlisting>select new Family(mother, mate, offspr)
-from DomesticCat as mother
-    join mother.mate as mate
-    left join mother.kittens as offspr</programlisting>
-
-    <para>assuming that the class <literal>Family</literal> has an appropriate
-    constructor.</para>
-
-    <para>You may assign aliases to selected expressions using
-    <literal>as</literal>:</para>
-
-    <programlisting>select max(bodyWeight) as max, min(bodyWeight) as min, count(*) as n
-from Cat cat</programlisting>
-
-    <para>This is most useful when used together with <literal>select new
-    map</literal> (HQL specific feature):</para>
-
-    <programlisting>select new map( max(bodyWeight) as max, min(bodyWeight) as min, count(*) as n )
-from Cat cat</programlisting>
-
-    <para>This query returns a <literal>Map</literal> from aliases to selected
-    values.</para>
-  </sect1>
-
-  <sect1 id="queryhql-aggregation">
-    <title>Aggregate functions</title>
-
-    <para>HQL queries may even return the results of aggregate functions on
-    properties:</para>
-
-    <programlisting>select avg(cat.weight), sum(cat.weight), max(cat.weight), count(cat)
-from Cat cat</programlisting>
-
-    <para>The supported aggregate functions are</para>
-
-    <itemizedlist spacing="compact">
-      <listitem>
-        <para><literal>avg(...), avg(distinct ...), sum(...), sum(distinct
-        ...), min(...), max(...)</literal></para>
-      </listitem>
-
-      <listitem>
-        <para><literal>count(*)</literal></para>
-      </listitem>
-
-      <listitem>
-        <para><literal>count(...), count(distinct ...),
-        count(all...)</literal></para>
-      </listitem>
-    </itemizedlist>
-
-    <para>You may use arithmetic operators, concatenation, and recognized SQL
-    functions in the select clause (dpending on configured dialect, HQL specific feature):</para>
-
-    <programlisting>select cat.weight + sum(kitten.weight) 
-from Cat cat 
-    join cat.kittens kitten
-group by cat.id, cat.weight</programlisting>
-
-    <programlisting>select firstName||' '||initial||' '||upper(lastName) from Person</programlisting>
-
-    <para>The <literal>distinct</literal> and <literal>all</literal> keywords
-    may be used and have the same semantics as in SQL.</para>
-
-    <programlisting>select distinct cat.name from Cat cat
-
-select count(distinct cat.name), count(cat) from Cat cat</programlisting>
-  </sect1>
-
-  <sect1 id="queryhql-polymorphism">
-    <title>Polymorphic queries</title>
-
-    <para>A query like:</para>
-
-    <programlisting>select cat from Cat as cat</programlisting>
-
-    <para>returns instances not only of <literal>Cat</literal>, but also of
-    subclasses like <literal>DomesticCat</literal>. Hibernate queries may name
-    <emphasis>any</emphasis> Java class or interface in the
-    <literal>from</literal> clause (portable EJB-QL queries should only name
-    mapped entities). The query will return instances of all persistent
-    classes that extend that class or implement the interface. The following
-    query would return all persistent objects:</para>
-
-    <programlisting>from java.lang.Object o // HQL only</programlisting>
-
-    <para>The interface <literal>Named</literal> might be implemented by
-    various persistent classes:</para>
-
-    <programlisting>from Named n, Named m where n.name = m.name // HQL only</programlisting>
-
-    <para>Note that these last two queries will require more than one SQL
-    <literal>SELECT</literal>. This means that the <literal>order by</literal>
-    clause does not correctly order the whole result set. (It also means you
-    can't call these queries using <literal>Query.scroll()</literal>.)</para>
-  </sect1>
-
-  <sect1 id="queryhql-where">
-    <title>The where clause</title>
-
-    <para>The <literal>where</literal> clause allows you to narrow the list of
-    instances returned. If no alias exists, you may refer to properties by
-    name:</para>
-
-    <programlisting>select cat from Cat cat where cat.name='Fritz'</programlisting>
-
-    <para>returns instances of <literal>Cat</literal> named 'Fritz'.</para>
-
-    <programlisting>select foo 
-from Foo foo, Bar bar
-where foo.startDate = bar.date</programlisting>
-
-    <para>will return all instances of <literal>Foo</literal> for which there
-    exists an instance of <literal>bar</literal> with a
-    <literal>date</literal> property equal to the <literal>startDate</literal>
-    property of the <literal>Foo</literal>. Compound path expressions make the
-    <literal>where</literal> clause extremely powerful. Consider:</para>
-
-    <programlisting>select cat from Cat cat where cat.mate.name is not null</programlisting>
-
-    <para>This query translates to an SQL query with a table (inner) join. If
-    you were to write something like</para>
-
-    <programlisting>select foo from Foo foo  
-where foo.bar.baz.customer.address.city is not null</programlisting>
-
-    <para>you would end up with a query that would require four table joins in
-    SQL.</para>
-
-    <para>The <literal>=</literal> operator may be used to compare not only
-    properties, but also instances:</para>
-
-    <programlisting>select cat, rival from Cat cat, Cat rival where cat.mate = rival.mate</programlisting>
-
-    <programlisting>select cat, mate 
-from Cat cat, Cat mate
-where cat.mate = mate</programlisting>
-
-    <para>The special property (lowercase) <literal>id</literal> may be used
-    to reference the unique identifier of an object. (You may also use its
-    mapped identifer property name.). Note that this keyword is specific to HQL.</para>
-
-    <programlisting>select cat from Cat as cat where cat.id = 123
-
-select cat from Cat as cat where cat.mate.id = 69</programlisting>
-
-    <para>The second query is efficient. No table join is required!</para>
-
-    <para>Properties of composite identifiers may also be used. Suppose
-    <literal>Person</literal> has a composite identifier consisting of
-    <literal>country</literal> and <literal>medicareNumber</literal>.</para>
-
-    <programlisting>select person from bank.Person person
-where person.id.country = 'AU' 
-    and person.id.medicareNumber = 123456</programlisting>
-
-    <programlisting>select account from bank.Account account
-where account.owner.id.country = 'AU' 
-    and account.owner.id.medicareNumber = 123456</programlisting>
-
-    <para>Once again, the second query requires no table join.</para>
-
-    <para>Likewise, the special property <literal>class</literal> accesses the
-    discriminator value of an instance in the case of polymorphic persistence.
-    A Java class name embedded in the where clause will be translated to its
-    discriminator value. Once again, this is specific to HQL.</para>
-
-    <programlisting>select cat from Cat cat where cat.class = DomesticCat</programlisting>
-
-    <para>You may also specify properties of components or composite user
-    types (and of components of components, etc). Never try to use a
-    path-expression that ends in a property of component type (as opposed to a
-    property of a component). For example, if <literal>store.owner</literal>
-    is an entity with a component <literal>address</literal></para>
-
-    <programlisting>store.owner.address.city    // okay
-store.owner.address         // error!</programlisting>
-
-    <para>An "any" type has the special properties <literal>id</literal> and
-    <literal>class</literal>, allowing us to express a join in the following
-    way (where <literal>AuditLog.item</literal> is a property mapped with
-    <literal>&lt;any&gt;</literal>). <literal>Any</literal> is specific to
-    Hibernate</para>
-
-    <programlisting>from AuditLog log, Payment payment 
-where log.item.class = 'Payment' and log.item.id = payment.id</programlisting>
-
-    <para>Notice that <literal>log.item.class</literal> and
-    <literal>payment.class</literal> would refer to the values of completely
-    different database columns in the above query.</para>
-  </sect1>
-
-  <sect1 id="queryhql-expressions">
-    <title>Expressions</title>
-
-    <para>Expressions allowed in the <literal>where</literal> clause include
-    most of the kind of things you could write in SQL:</para>
-
-    <itemizedlist spacing="compact">
-      <listitem>
-        <para>mathematical operators <literal>+, -, *, /</literal></para>
-      </listitem>
-
-      <listitem>
-        <para>binary comparison operators <literal>=, &gt;=, &lt;=, &lt;&gt;,
-        !=, like</literal></para>
-      </listitem>
-
-      <listitem>
-        <para>logical operations <literal>and, or, not</literal></para>
-      </listitem>
-
-      <listitem>
-        <para>Parentheses <literal>( )</literal>, indicating grouping</para>
-      </listitem>
-
-      <listitem>
-        <para><literal>in</literal>, <literal>not in</literal>,
-        <literal>between</literal>, <literal>is null</literal>, <literal>is
-        not null</literal>, <literal>is empty</literal>, <literal>is not
-        empty</literal>, <literal>member of</literal> and <literal>not member
-        of</literal></para>
-      </listitem>
-
-      <listitem>
-        <para>"Simple" case, <literal>case ... when ... then ... else ...
-        end</literal>, and "searched" case, <literal>case when ... then ...
-        else ... end (specific to HQL)</literal></para>
-      </listitem>
-
-      <listitem>
-        <para>string concatenation <literal>...||...</literal> or
-        <literal>concat(...,...) (use concat() for portable EJB-QL
-        queries)</literal></para>
-      </listitem>
-
-      <listitem>
-        <para><literal>current_date()</literal>,
-        <literal>current_time()</literal>,
-        <literal>current_timestamp()</literal></para>
-      </listitem>
-
-      <listitem>
-        <para><literal>second(...)</literal>, <literal>minute(...)</literal>,
-        <literal>hour(...)</literal>, <literal>day(...)</literal>,
-        <literal>month(...)</literal>, <literal>year(...)</literal>, (specific
-        to HQL)</para>
-      </listitem>
-
-      <listitem>
-        <para>Any function or operator defined by EJB-QL 3.0:
-        <literal>substring(), trim(), lower(), upper(), length(), locate(),
-        abs(), sqrt(), bit_length()</literal></para>
-      </listitem>
-
-      <listitem>
-        <para><literal>coalesce()</literal> and
-        <literal>nullif()</literal></para>
-      </listitem>
-
-      <listitem>
-        <para><literal>cast(... as ...)</literal>, where the second argument
-        is the name of a Hibernate type, and <literal>extract(... from
-        ...)</literal> if ANSI <literal>cast()</literal> and
-        <literal>extract()</literal> is supported by the underlying
-        database</para>
-      </listitem>
-
-      <listitem>
-        <para>Any database-supported SQL scalar function like
-        <literal>sign()</literal>, <literal>trunc()</literal>,
-        <literal>rtrim()</literal>, <literal>sin()</literal></para>
-      </listitem>
-
-      <listitem>
-        <para>JDBC IN parameters <literal>?</literal></para>
-      </listitem>
-
-      <listitem>
-        <para>named parameters <literal>:name</literal>,
-        <literal>:start_date</literal>, <literal>:x1</literal></para>
-      </listitem>
-
-      <listitem>
-        <para>SQL literals <literal>'foo'</literal>, <literal>69</literal>,
-        <literal>'1970-01-01 10:00:01.0'</literal></para>
-      </listitem>
-
-      <listitem>
-        <para>Java <literal>public static final</literal> constants
-        <literal>eg.Color.TABBY</literal></para>
-      </listitem>
-    </itemizedlist>
-
-    <para><literal>in</literal> and <literal>between</literal> may be used as
-    follows:</para>
-
-    <programlisting>select cat from DomesticCat cat where cat.name between 'A' and 'B'</programlisting>
-
-    <programlisting>select cat from DomesticCat cat where cat.name in ( 'Foo', 'Bar', 'Baz' )</programlisting>
-
-    <para>and the negated forms may be written</para>
-
-    <programlisting>select cat from DomesticCat cat where cat.name not between 'A' and 'B'</programlisting>
-
-    <programlisting>select cat from DomesticCat cat where cat.name not in ( 'Foo', 'Bar', 'Baz' )</programlisting>
-
-    <para>Likewise, <literal>is null</literal> and <literal>is not
-    null</literal> may be used to test for null values.</para>
-
-    <para>Booleans may be easily used in expressions by declaring HQL query
-    substitutions in Hibernate configuration:</para>
-
-    <programlisting>hibernate.query.substitutions true 1, false 0</programlisting>
-
-    <para>This will replace the keywords <literal>true</literal> and
-    <literal>false</literal> with the literals <literal>1</literal> and
-    <literal>0</literal> in the translated SQL from this HQL:</para>
-
-    <programlisting>select cat from Cat cat where cat.alive = true</programlisting>
-
-    <para>You may test the size of a collection with the special property
-    <literal>size</literal>, or the special <literal>size()</literal> function
-    (HQL specific feature).</para>
-
-    <programlisting>select cat from Cat cat where cat.kittens.size &gt; 0</programlisting>
-
-    <programlisting>select cat from Cat cat where size(cat.kittens) &gt; 0</programlisting>
-
-    <para>For indexed collections, you may refer to the minimum and maximum
-    indices using <literal>minindex</literal> and <literal>maxindex</literal>
-    functions. Similarly, you may refer to the minimum and maximum elements of
-    a collection of basic type using the <literal>minelement</literal> and
-    <literal>maxelement</literal> functions. These are HQL specific
-    features.</para>
-
-    <programlisting>select cal from Calendar cal where maxelement(cal.holidays) &gt; current date</programlisting>
-
-    <programlisting>select order from Order order where maxindex(order.items) &gt; 100</programlisting>
-
-    <programlisting>select order from Order order where minelement(order.items) &gt; 10000</programlisting>
-
-    <para>The SQL functions <literal>any, some, all, exists, in</literal> are
-    supported when passed the element or index set of a collection
-    (<literal>elements</literal> and <literal>indices</literal> functions) or
-    the result of a subquery (see below). While subqueries are supported by
-    EJB-QL, <literal>elements</literal> and <literal>indices</literal> are
-    specific HQL features.</para>
-
-    <programlisting>select mother from Cat as mother, Cat as kit
-where kit in elements(foo.kittens)</programlisting>
-
-    <programlisting>select p from NameList list, Person p
-where p.name = some elements(list.names)</programlisting>
-
-    <programlisting>select cat from Cat cat where exists elements(cat.kittens)</programlisting>
-
-    <programlisting>select cat from Player p where 3 &gt; all elements(p.scores)</programlisting>
-
-    <programlisting>select cat from Show show where 'fizard' in indices(show.acts)</programlisting>
-
-    <para>Note that these constructs - <literal>size</literal>,
-    <literal>elements</literal>, <literal>indices</literal>,
-    <literal>minindex</literal>, <literal>maxindex</literal>,
-    <literal>minelement</literal>, <literal>maxelement</literal> - may only be
-    used in the where clause in Hibernate3.</para>
-
-    <para>In HQL, elements of indexed collections (arrays, lists, maps) may be
-    referred to by index (in a where clause only):</para>
-
-    <programlisting>select order from Order order where order.items[0].id = 1234</programlisting>
-
-    <programlisting>select person from Person person, Calendar calendar
-where calendar.holidays['national day'] = person.birthDay
-    and person.nationality.calendar = calendar</programlisting>
-
-    <programlisting>select item from Item item, Order order
-where order.items[ order.deliveredItemIndices[0] ] = item and order.id = 11</programlisting>
-
-    <programlisting>select item from Item item, Order order
-where order.items[ maxindex(order.items) ] = item and order.id = 11</programlisting>
-
-    <para>The expression inside <literal>[]</literal> may even be an
-    arithmetic expression.</para>
-
-    <programlisting>select item from Item item, Order order
-where order.items[ size(order.items) - 1 ] = item</programlisting>
-
-    <para>HQL also provides the built-in <literal>index()</literal> function,
-    for elements of a one-to-many association or collection of values.</para>
-
-    <programlisting>select item, index(item) from Order order 
-    join order.items item
-where index(item) &lt; 5</programlisting>
-
-    <para>Scalar SQL functions supported by the underlying database may be
-    used</para>
-
-    <programlisting>select cat from DomesticCat cat where upper(cat.name) like 'FRI%'</programlisting>
-
-    <para>If you are not yet convinced by all this, think how much longer and
-    less readable the following query would be in SQL:</para>
-
-    <programlisting>select cust
-from Product prod,
-    Store store
-    inner join store.customers cust
-where prod.name = 'widget'
-    and store.location.name in ( 'Melbourne', 'Sydney' )
-    and prod = all elements(cust.currentOrder.lineItems)</programlisting>
-
-    <para><emphasis>Hint:</emphasis> something like</para>
-
-    <programlisting>SELECT cust.name, cust.address, cust.phone, cust.id, cust.current_order
-FROM customers cust,
-    stores store,
-    locations loc,
-    store_customers sc,
-    product prod
-WHERE prod.name = 'widget'
-    AND store.loc_id = loc.id
-    AND loc.name IN ( 'Melbourne', 'Sydney' )
-    AND sc.store_id = store.id
-    AND sc.cust_id = cust.id
-    AND prod.id = ALL(
-        SELECT item.prod_id
-        FROM line_items item, orders o
-        WHERE item.order_id = o.id
-            AND cust.current_order = o.id
-    )</programlisting>
-  </sect1>
-
-  <sect1 id="queryhql-ordering">
-    <title>The order by clause</title>
-
-    <para>The list returned by a query may be ordered by any property of a
-    returned class or components:</para>
-
-    <programlisting>select cat from DomesticCat cat
-order by cat.name asc, cat.weight desc, cat.birthdate</programlisting>
-
-    <para>The optional <literal>asc</literal> or <literal>desc</literal>
-    indicate ascending or descending order respectively.</para>
-  </sect1>
-
-  <sect1 id="queryhql-grouping">
-    <title>The group by clause</title>
-
-    <para>A query that returns aggregate values may be grouped by any property
-    of a returned class or components:</para>
-
-    <programlisting>select cat.color, sum(cat.weight), count(cat) 
-from Cat cat
-group by cat.color</programlisting>
-
-    <programlisting>select foo.id, avg(name), max(name) 
-from Foo foo join foo.names name
-group by foo.id</programlisting>
-
-    <para>A <literal>having</literal> clause is also allowed.</para>
-
-    <programlisting>select cat.color, sum(cat.weight), count(cat) 
-from Cat cat
-group by cat.color 
-having cat.color in (eg.Color.TABBY, eg.Color.BLACK)</programlisting>
-
-    <para>SQL functions and aggregate functions are allowed in the
-    <literal>having</literal> and <literal>order by</literal> clauses, if
-    supported by the underlying database (eg. not in MySQL).</para>
-
-    <programlisting>select cat
-from Cat cat
-    join cat.kittens kitten
-group by cat
-having avg(kitten.weight) &gt; 100
-order by count(kitten) asc, sum(kitten.weight) desc</programlisting>
-
-    <para>Note that neither the <literal>group by</literal> clause nor the
-    <literal>order by</literal> clause may contain arithmetic
-    expressions.</para>
-  </sect1>
-
-  <sect1 id="queryhql-subqueries">
-    <title>Subqueries</title>
-
-    <para>For databases that support subselects, EJB-QL supports subqueries
-    within queries. A subquery must be surrounded by parentheses (often by an
-    SQL aggregate function call). Even correlated subqueries (subqueries that
-    refer to an alias in the outer query) are allowed.</para>
-
-    <programlisting>select fatcat from Cat as fatcat 
-where fatcat.weight &gt; ( 
-    select avg(cat.weight) from DomesticCat cat 
-)</programlisting>
-
-    <programlisting>select cat from DomesticCat as cat 
-where cat.name = some ( 
-    select name.nickName from Name as name 
-)</programlisting>
-
-    <programlisting>select cat from Cat as cat 
-where not exists ( 
-    from Cat as mate where mate.mate = cat 
-)</programlisting>
-
-    <programlisting>select cat from DomesticCat as cat 
-where cat.name not in ( 
-    select name.nickName from Name as name 
-)</programlisting>
-
-    <para>For subqueries with more than one expression in the select list, you
-    can use a tuple constructor:</para>
-
-    <programlisting>select cat from Cat as cat 
-where not ( cat.name, cat.color ) in ( 
-    select cat.name, cat.color from DomesticCat cat 
-)</programlisting>
-
-    <para>Note that on some databases (but not Oracle or HSQLDB), you can use
-    tuple constructors in other contexts, for example when querying components
-    or composite user types:</para>
-
-    <programlisting>select cat from Person where name = ('Gavin', 'A', 'King')</programlisting>
-
-    <para>Which is equivalent to the more verbose:</para>
-
-    <programlisting>select cat from Person where name.first = 'Gavin' and name.initial = 'A' and name.last = 'King')</programlisting>
-
-    <para>There are two good reasons you might not want to do this kind of
-    thing: first, it is not completely portable between database platforms;
-    second, the query is now dependent upon the ordering of properties in the
-    mapping document.</para>
-  </sect1>
-
-  <sect1 id="queryhql-examples">
-    <title>EJB-QL examples</title>
-
-    <para>Hibernate queries can be quite powerful and complex. In fact, the
-    power of the query language is one of Hibernate's main selling points (and
-    now EJB-QL). Here are some example queries very similar to queries that I
-    used on a recent project. Note that most queries you will write are much
-    simpler than these!</para>
-
-    <para>The following query returns the order id, number of items and total
-    value of the order for all unpaid orders for a particular customer and
-    given minimum total value, ordering the results by total value. In
-    determining the prices, it uses the current catalog. The resulting SQL
-    query, against the <literal>ORDER</literal>,
-    <literal>ORDER_LINE</literal>, <literal>PRODUCT</literal>,
-    <literal>CATALOG</literal> and <literal>PRICE</literal> tables has four
-    inner joins and an (uncorrelated) subselect.</para>
-
-    <programlisting>select order.id, sum(price.amount), count(item)
-from Order as order
-    join order.lineItems as item
-    join item.product as product,
-    Catalog as catalog
-    join catalog.prices as price
-where order.paid = false
-    and order.customer = :customer
-    and price.product = product
-    and catalog.effectiveDate &lt; sysdate
-    and catalog.effectiveDate &gt;= all (
-        select cat.effectiveDate 
-        from Catalog as cat
-        where cat.effectiveDate &lt; sysdate
-    )
-group by order
-having sum(price.amount) &gt; :minAmount
-order by sum(price.amount) desc</programlisting>
-
-    <para>What a monster! Actually, in real life, I'm not very keen on
-    subqueries, so my query was really more like this:</para>
-
-    <programlisting>select order.id, sum(price.amount), count(item)
-from Order as order
-    join order.lineItems as item
-    join item.product as product,
-    Catalog as catalog
-    join catalog.prices as price
-where order.paid = false
-    and order.customer = :customer
-    and price.product = product
-    and catalog = :currentCatalog
-group by order
-having sum(price.amount) &gt; :minAmount
-order by sum(price.amount) desc</programlisting>
-
-    <para>The next query counts the number of payments in each status,
-    excluding all payments in the <literal>AWAITING_APPROVAL</literal> status
-    where the most recent status change was made by the current user. It
-    translates to an SQL query with two inner joins and a correlated subselect
-    against the <literal>PAYMENT</literal>, <literal>PAYMENT_STATUS</literal>
-    and <literal>PAYMENT_STATUS_CHANGE</literal> tables.</para>
-
-    <programlisting>select count(payment), status.name 
-from Payment as payment 
-    join payment.currentStatus as status
-    join payment.statusChanges as statusChange
-where payment.status.name &lt;&gt; PaymentStatus.AWAITING_APPROVAL
-    or (
-        statusChange.timeStamp = ( 
-            select max(change.timeStamp) 
-            from PaymentStatusChange change 
-            where change.payment = payment
-        )
-        and statusChange.user &lt;&gt; :currentUser
-    )
-group by status.name, status.sortOrder
-order by status.sortOrder</programlisting>
-
-    <para>If I would have mapped the <literal>statusChanges</literal>
-    collection as a list, instead of a set, the query would have been much
-    simpler to write.</para>
-
-    <programlisting>select count(payment), status.name 
-from Payment as payment
-    join payment.currentStatus as status
-where payment.status.name &lt;&gt; PaymentStatus.AWAITING_APPROVAL
-    or payment.statusChanges[ maxIndex(payment.statusChanges) ].user &lt;&gt; :currentUser
-group by status.name, status.sortOrder
-order by status.sortOrder</programlisting>
-
-    <para>However the query would have been HQL specific.</para>
-
-    <para>The next query uses the MS SQL Server <literal>isNull()</literal>
-    function to return all the accounts and unpaid payments for the
-    organization to which the current user belongs. It translates to an SQL
-    query with three inner joins, an outer join and a subselect against the
-    <literal>ACCOUNT</literal>, <literal>PAYMENT</literal>,
-    <literal>PAYMENT_STATUS</literal>, <literal>ACCOUNT_TYPE</literal>,
-    <literal>ORGANIZATION</literal> and <literal>ORG_USER</literal>
-    tables.</para>
-
-    <programlisting>select account, payment
-from Account as account
-    join account.holder.users as user
-    left outer join account.payments as payment
-where :currentUser = user
-    and PaymentStatus.UNPAID = isNull(payment.currentStatus.name, PaymentStatus.UNPAID)
-order by account.type.sortOrder, account.accountNumber, payment.dueDate</programlisting>
-  </sect1>
-
-  <sect1 id="queryhql-bulk">
-    <title>Bulk UPDATE &amp; DELETE Statements</title>
-
-    <para>Hibernate now supports UPDATE and DELETE statements in HQL/EJB-QL. See <xref
-    linkend="batch-direct" /> for details.</para>
-  </sect1>
-
-  <sect1 id="queryhql-tipstricks">
-    <title>Tips &amp; Tricks</title>
-
-    <para>To order a result by the size of a collection, use the following
-    query:</para>
-
-    <programlisting>select usr.id, usr.name
-from User as usr 
-    left join usr.messages as msg
-group by usr.id, usr.name
-order by count(msg)</programlisting>
-
-    <para>If your database supports subselects, you can place a condition upon
-    selection size in the where clause of your query:</para>
-
-    <programlisting>from User usr where size(usr.messages) &gt;= 1</programlisting>
-
-    <para>If your database doesn't support subselects, use the following
-    query:</para>
-
-    <programlisting>select usr.id, usr.name
-from User usr.name
-    join usr.messages msg
-group by usr.id, usr.name
-having count(msg) &gt;= 1</programlisting>
-
-    <para>As this solution can't return a <literal>User</literal> with zero
-    messages because of the inner join, the following form is also
-    useful:</para>
-
-    <programlisting>select usr.id, usr.name
-from User as usr
-    left join usr.messages as msg
-group by usr.id, usr.name
-having count(msg) = 0</programlisting>
-  </sect1>
-</chapter>
\ No newline at end of file

Copied: trunk/HibernateExt/entitymanager/doc/reference/en/modules/query_ejbql.xml (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/doc/reference/en/modules/query_ejbql.xml)
===================================================================
--- trunk/HibernateExt/entitymanager/doc/reference/en/modules/query_ejbql.xml	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/doc/reference/en/modules/query_ejbql.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,866 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<chapter id="queryhql">
+  <title>EJB-QL: The Object Query Language</title>
+
+  <para>
+    EJB3-QL has been heavily inspired by HQL, the native Hibernate Query Language. Both
+    are therefore very close to SQL, but portable and independent of the database schema.
+    People familiar with HQL shouldn't have any problem using EJB-QL. Actually, you
+    use the same query API for EJB-QL and HQL queries. Portable EJB3 applications however
+    should stick to EJB-QL or similar vendor extensions are needed.
+    </para>
+
+  <sect1 id="queryhql-casesensitivity">
+    <title>Case Sensitivity</title>
+
+    <para>Queries are case-insensitive, except for names of Java classes and
+    properties. So <literal>SeLeCT</literal> is the same as
+    <literal>sELEct</literal> is the same as <literal>SELECT</literal> but
+    <literal>org.hibernate.eg.FOO</literal> is not
+    <literal>org.hibernate.eg.Foo</literal> and <literal>foo.barSet</literal>
+    is not <literal>foo.BARSET</literal>.</para>
+
+    <para>This manual uses lowercase EJBQL keywords. Some users find queries
+    with uppercase keywords more readable, but we find this convention ugly
+    when embedded in Java code.</para>
+  </sect1>
+
+  <sect1 id="queryhql-from">
+    <title>The from clause</title>
+
+    <para>The simplest possible EJB-QL query is of the form:</para>
+
+    <programlisting>select c from eg.Cat c</programlisting>
+
+    <para>which simply returns all instances of the class
+    <literal>eg.Cat</literal>. Unlike HQL, the select clause is not optional
+    in EJB-QL. We don't usually need to qualify the class name, since the
+    entity name defaults to the unqualified class name
+    (<literal>@Entity</literal>). So we almost always just write:</para>
+
+    <programlisting>select c from Cat c</programlisting>
+
+    <para>As you may have noticed you can assign aliases to classes, the
+    <literal>as</literal> keywork is optional. An alias allows you to refer
+    to <literal>Cat</literal> in other parts of the query.</para>
+
+    <programlisting>select cat from Cat as cat</programlisting>
+
+    <para>Multiple classes may appear, resulting in a cartesian product or
+    "cross" join.</para>
+
+    <programlisting>select form, param from Formula as form, Parameter as param</programlisting>
+
+    <para>It is considered good practice to name query aliases using an
+    initial lowercase, consistent with Java naming standards for local
+    variables (eg. <literal>domesticCat</literal>).</para>
+  </sect1>
+
+  <sect1 id="queryhql-joins" revision="1">
+    <title>Associations and joins</title>
+
+    <para>You may also assign aliases to associated entities, or even to
+    elements of a collection of values, using a
+    <literal>join</literal>.</para>
+
+    <programlisting>select cat, mate, kitten from Cat as cat 
+    inner join cat.mate as mate
+    left outer join cat.kittens as kitten</programlisting>
+
+    <programlisting>select cat from Cat as cat left join cat.mate.kittens as kittens</programlisting>
+
+    <para>The supported join types are borrowed from ANSI SQL</para>
+
+    <itemizedlist spacing="compact">
+      <listitem>
+        <para><literal>inner join</literal></para>
+      </listitem>
+
+      <listitem>
+        <para><literal>left outer join</literal></para>
+      </listitem>
+    </itemizedlist>
+
+    <para>The <literal>inner join</literal>, <literal>left outer
+    join</literal> constructs may be abbreviated.</para>
+
+    <programlisting>select cat, mate, kitten from Cat as cat 
+    join cat.mate as mate
+    left join cat.kittens as kitten</programlisting>
+
+    <para>In addition, a "fetch" join allows associations or collections of
+    values to be initialized along with their parent objects, using a single
+    select. This is particularly useful in the case of a collection. It
+    effectively overrides the fetching options in the associations and collection
+    mapping metadata. See the Performance chapter of the Hibernate reference guide
+    for more information.</para>
+
+    <programlisting>select cat from Cat as cat 
+    inner join fetch cat.mate
+    left join fetch cat.kittens</programlisting>
+
+    <para>A fetch join does not usually need to assign an alias, because the
+    associated objects should not be used in the <literal>where</literal>
+    clause (or any other clause). Also, the associated objects are not
+    returned directly in the query results. Instead, they may be accessed via
+    the parent object. The only reason we might need an alias is if we are
+    recursively join fetching a further collection:</para>
+
+    <programlisting>select cat from Cat as cat 
+    inner join fetch cat.mate
+    left join fetch cat.kittens child
+    left join fetch child.kittens</programlisting>
+
+    <para>Note that the <literal>fetch</literal> construct may not be used in
+    queries called using <literal>scroll()</literal> or
+    <literal>iterate()</literal>. Nor should <literal>fetch</literal> be used
+    together with <literal>setMaxResults()</literal> or
+    <literal>setFirstResult()</literal>. It is possible to create a cartesian
+    product by join fetching more than one collection in a query (as in the example
+    above), be careful the result of this product isn't bigger than you expect.
+    Join fetching multiple collection roles also sometimes gives unexpected results for
+    bag mappings, so be careful about how you formulate your queries in this case.</para>
+
+    <para>
+      TODO: The last statement is useless and typical developer thinking, please elaborate.
+        The word "sometimes" should never appear in any technical documentation.
+    </para>
+
+    <para>If you are using property-level lazy fetching (with bytecode
+    instrumentation), it is possible to force Hibernate to fetch the lazy
+    properties immediately (in the first query) using <literal>fetch all
+    properties</literal>. This is Hibernate specific option:</para>
+
+    <programlisting>select doc from Document doc fetch all properties order by doc.name</programlisting>
+
+    <programlisting>select doc from Document doc fetch all properties where lower(doc.name) like '%cats%'</programlisting>
+  </sect1>
+
+  <sect1 id="queryhql-select">
+    <title>The select clause</title>
+
+    <para>The <literal>select</literal> clause picks which objects and
+    properties to return in the query result set. Consider:</para>
+
+    <programlisting>select mate 
+from Cat as cat 
+    inner join cat.mate as mate</programlisting>
+
+    <para>The query will select <literal>mate</literal>s of other
+    <literal>Cat</literal>s. Actually, you may express this query more
+    compactly as:</para>
+
+    <programlisting>select cat.mate from Cat cat</programlisting>
+
+    <para>Queries may return properties of any value type including properties
+    of component type:</para>
+
+    <programlisting>select cat.name from DomesticCat cat
+where cat.name like 'fri%'</programlisting>
+
+    <programlisting>select cust.name.firstName from Customer as cust</programlisting>
+
+    <para>Queries may return multiple objects and/or properties as an array of
+    type <literal>Object[]</literal>,</para>
+
+    <programlisting>select mother, offspr, mate.name 
+from DomesticCat as mother
+    inner join mother.mate as mate
+    left outer join mother.kittens as offspr</programlisting>
+
+    <para>or as a <literal>List</literal> (HQL specific feature)</para>
+
+    <programlisting>select new list(mother, offspr, mate.name)
+from DomesticCat as mother
+    inner join mother.mate as mate
+    left outer join mother.kittens as offspr</programlisting>
+
+    <para>or as an actual typesafe Java object,</para>
+
+    <programlisting>select new Family(mother, mate, offspr)
+from DomesticCat as mother
+    join mother.mate as mate
+    left join mother.kittens as offspr</programlisting>
+
+    <para>assuming that the class <literal>Family</literal> has an appropriate
+    constructor.</para>
+
+    <para>You may assign aliases to selected expressions using
+    <literal>as</literal>:</para>
+
+    <programlisting>select max(bodyWeight) as max, min(bodyWeight) as min, count(*) as n
+from Cat cat</programlisting>
+
+    <para>This is most useful when used together with <literal>select new
+    map</literal> (HQL specific feature):</para>
+
+    <programlisting>select new map( max(bodyWeight) as max, min(bodyWeight) as min, count(*) as n )
+from Cat cat</programlisting>
+
+    <para>This query returns a <literal>Map</literal> from aliases to selected
+    values.</para>
+  </sect1>
+
+  <sect1 id="queryhql-aggregation">
+    <title>Aggregate functions</title>
+
+    <para>HQL queries may even return the results of aggregate functions on
+    properties:</para>
+
+    <programlisting>select avg(cat.weight), sum(cat.weight), max(cat.weight), count(cat)
+from Cat cat</programlisting>
+
+    <para>The supported aggregate functions are</para>
+
+    <itemizedlist spacing="compact">
+      <listitem>
+        <para><literal>avg(...), avg(distinct ...), sum(...), sum(distinct
+        ...), min(...), max(...)</literal></para>
+      </listitem>
+
+      <listitem>
+        <para><literal>count(*)</literal></para>
+      </listitem>
+
+      <listitem>
+        <para><literal>count(...), count(distinct ...),
+        count(all...)</literal></para>
+      </listitem>
+    </itemizedlist>
+
+    <para>You may use arithmetic operators, concatenation, and recognized SQL
+    functions in the select clause (dpending on configured dialect, HQL specific feature):</para>
+
+    <programlisting>select cat.weight + sum(kitten.weight) 
+from Cat cat 
+    join cat.kittens kitten
+group by cat.id, cat.weight</programlisting>
+
+    <programlisting>select firstName||' '||initial||' '||upper(lastName) from Person</programlisting>
+
+    <para>The <literal>distinct</literal> and <literal>all</literal> keywords
+    may be used and have the same semantics as in SQL.</para>
+
+    <programlisting>select distinct cat.name from Cat cat
+
+select count(distinct cat.name), count(cat) from Cat cat</programlisting>
+  </sect1>
+
+  <sect1 id="queryhql-polymorphism">
+    <title>Polymorphic queries</title>
+
+    <para>A query like:</para>
+
+    <programlisting>select cat from Cat as cat</programlisting>
+
+    <para>returns instances not only of <literal>Cat</literal>, but also of
+    subclasses like <literal>DomesticCat</literal>. Hibernate queries may name
+    <emphasis>any</emphasis> Java class or interface in the
+    <literal>from</literal> clause (portable EJB-QL queries should only name
+    mapped entities). The query will return instances of all persistent
+    classes that extend that class or implement the interface. The following
+    query would return all persistent objects:</para>
+
+    <programlisting>from java.lang.Object o // HQL only</programlisting>
+
+    <para>The interface <literal>Named</literal> might be implemented by
+    various persistent classes:</para>
+
+    <programlisting>from Named n, Named m where n.name = m.name // HQL only</programlisting>
+
+    <para>Note that these last two queries will require more than one SQL
+    <literal>SELECT</literal>. This means that the <literal>order by</literal>
+    clause does not correctly order the whole result set. (It also means you
+    can't call these queries using <literal>Query.scroll()</literal>.)</para>
+  </sect1>
+
+  <sect1 id="queryhql-where">
+    <title>The where clause</title>
+
+    <para>The <literal>where</literal> clause allows you to narrow the list of
+    instances returned. If no alias exists, you may refer to properties by
+    name:</para>
+
+    <programlisting>select cat from Cat cat where cat.name='Fritz'</programlisting>
+
+    <para>returns instances of <literal>Cat</literal> named 'Fritz'.</para>
+
+    <programlisting>select foo 
+from Foo foo, Bar bar
+where foo.startDate = bar.date</programlisting>
+
+    <para>will return all instances of <literal>Foo</literal> for which there
+    exists an instance of <literal>bar</literal> with a
+    <literal>date</literal> property equal to the <literal>startDate</literal>
+    property of the <literal>Foo</literal>. Compound path expressions make the
+    <literal>where</literal> clause extremely powerful. Consider:</para>
+
+    <programlisting>select cat from Cat cat where cat.mate.name is not null</programlisting>
+
+    <para>This query translates to an SQL query with a table (inner) join. If
+    you were to write something like</para>
+
+    <programlisting>select foo from Foo foo  
+where foo.bar.baz.customer.address.city is not null</programlisting>
+
+    <para>you would end up with a query that would require four table joins in
+    SQL.</para>
+
+    <para>The <literal>=</literal> operator may be used to compare not only
+    properties, but also instances:</para>
+
+    <programlisting>select cat, rival from Cat cat, Cat rival where cat.mate = rival.mate</programlisting>
+
+    <programlisting>select cat, mate 
+from Cat cat, Cat mate
+where cat.mate = mate</programlisting>
+
+    <para>The special property (lowercase) <literal>id</literal> may be used
+    to reference the unique identifier of an object. (You may also use its
+    mapped identifer property name.). Note that this keyword is specific to HQL.</para>
+
+    <programlisting>select cat from Cat as cat where cat.id = 123
+
+select cat from Cat as cat where cat.mate.id = 69</programlisting>
+
+    <para>The second query is efficient. No table join is required!</para>
+
+    <para>Properties of composite identifiers may also be used. Suppose
+    <literal>Person</literal> has a composite identifier consisting of
+    <literal>country</literal> and <literal>medicareNumber</literal>.</para>
+
+    <programlisting>select person from bank.Person person
+where person.id.country = 'AU' 
+    and person.id.medicareNumber = 123456</programlisting>
+
+    <programlisting>select account from bank.Account account
+where account.owner.id.country = 'AU' 
+    and account.owner.id.medicareNumber = 123456</programlisting>
+
+    <para>Once again, the second query requires no table join.</para>
+
+    <para>Likewise, the special property <literal>class</literal> accesses the
+    discriminator value of an instance in the case of polymorphic persistence.
+    A Java class name embedded in the where clause will be translated to its
+    discriminator value. Once again, this is specific to HQL.</para>
+
+    <programlisting>select cat from Cat cat where cat.class = DomesticCat</programlisting>
+
+    <para>You may also specify properties of components or composite user
+    types (and of components of components, etc). Never try to use a
+    path-expression that ends in a property of component type (as opposed to a
+    property of a component). For example, if <literal>store.owner</literal>
+    is an entity with a component <literal>address</literal></para>
+
+    <programlisting>store.owner.address.city    // okay
+store.owner.address         // error!</programlisting>
+
+    <para>An "any" type has the special properties <literal>id</literal> and
+    <literal>class</literal>, allowing us to express a join in the following
+    way (where <literal>AuditLog.item</literal> is a property mapped with
+    <literal>&lt;any&gt;</literal>). <literal>Any</literal> is specific to
+    Hibernate</para>
+
+    <programlisting>from AuditLog log, Payment payment 
+where log.item.class = 'Payment' and log.item.id = payment.id</programlisting>
+
+    <para>Notice that <literal>log.item.class</literal> and
+    <literal>payment.class</literal> would refer to the values of completely
+    different database columns in the above query.</para>
+  </sect1>
+
+  <sect1 id="queryhql-expressions">
+    <title>Expressions</title>
+
+    <para>Expressions allowed in the <literal>where</literal> clause include
+    most of the kind of things you could write in SQL:</para>
+
+    <itemizedlist spacing="compact">
+      <listitem>
+        <para>mathematical operators <literal>+, -, *, /</literal></para>
+      </listitem>
+
+      <listitem>
+        <para>binary comparison operators <literal>=, &gt;=, &lt;=, &lt;&gt;,
+        !=, like</literal></para>
+      </listitem>
+
+      <listitem>
+        <para>logical operations <literal>and, or, not</literal></para>
+      </listitem>
+
+      <listitem>
+        <para>Parentheses <literal>( )</literal>, indicating grouping</para>
+      </listitem>
+
+      <listitem>
+        <para><literal>in</literal>, <literal>not in</literal>,
+        <literal>between</literal>, <literal>is null</literal>, <literal>is
+        not null</literal>, <literal>is empty</literal>, <literal>is not
+        empty</literal>, <literal>member of</literal> and <literal>not member
+        of</literal></para>
+      </listitem>
+
+      <listitem>
+        <para>"Simple" case, <literal>case ... when ... then ... else ...
+        end</literal>, and "searched" case, <literal>case when ... then ...
+        else ... end (specific to HQL)</literal></para>
+      </listitem>
+
+      <listitem>
+        <para>string concatenation <literal>...||...</literal> or
+        <literal>concat(...,...) (use concat() for portable EJB-QL
+        queries)</literal></para>
+      </listitem>
+
+      <listitem>
+        <para><literal>current_date()</literal>,
+        <literal>current_time()</literal>,
+        <literal>current_timestamp()</literal></para>
+      </listitem>
+
+      <listitem>
+        <para><literal>second(...)</literal>, <literal>minute(...)</literal>,
+        <literal>hour(...)</literal>, <literal>day(...)</literal>,
+        <literal>month(...)</literal>, <literal>year(...)</literal>, (specific
+        to HQL)</para>
+      </listitem>
+
+      <listitem>
+        <para>Any function or operator defined by EJB-QL 3.0:
+        <literal>substring(), trim(), lower(), upper(), length(), locate(),
+        abs(), sqrt(), bit_length()</literal></para>
+      </listitem>
+
+      <listitem>
+        <para><literal>coalesce()</literal> and
+        <literal>nullif()</literal></para>
+      </listitem>
+
+      <listitem>
+        <para><literal>cast(... as ...)</literal>, where the second argument
+        is the name of a Hibernate type, and <literal>extract(... from
+        ...)</literal> if ANSI <literal>cast()</literal> and
+        <literal>extract()</literal> is supported by the underlying
+        database</para>
+      </listitem>
+
+      <listitem>
+        <para>Any database-supported SQL scalar function like
+        <literal>sign()</literal>, <literal>trunc()</literal>,
+        <literal>rtrim()</literal>, <literal>sin()</literal></para>
+      </listitem>
+
+      <listitem>
+        <para>JDBC IN parameters <literal>?</literal></para>
+      </listitem>
+
+      <listitem>
+        <para>named parameters <literal>:name</literal>,
+        <literal>:start_date</literal>, <literal>:x1</literal></para>
+      </listitem>
+
+      <listitem>
+        <para>SQL literals <literal>'foo'</literal>, <literal>69</literal>,
+        <literal>'1970-01-01 10:00:01.0'</literal></para>
+      </listitem>
+
+      <listitem>
+        <para>Java <literal>public static final</literal> constants
+        <literal>eg.Color.TABBY</literal></para>
+      </listitem>
+    </itemizedlist>
+
+    <para><literal>in</literal> and <literal>between</literal> may be used as
+    follows:</para>
+
+    <programlisting>select cat from DomesticCat cat where cat.name between 'A' and 'B'</programlisting>
+
+    <programlisting>select cat from DomesticCat cat where cat.name in ( 'Foo', 'Bar', 'Baz' )</programlisting>
+
+    <para>and the negated forms may be written</para>
+
+    <programlisting>select cat from DomesticCat cat where cat.name not between 'A' and 'B'</programlisting>
+
+    <programlisting>select cat from DomesticCat cat where cat.name not in ( 'Foo', 'Bar', 'Baz' )</programlisting>
+
+    <para>Likewise, <literal>is null</literal> and <literal>is not
+    null</literal> may be used to test for null values.</para>
+
+    <para>Booleans may be easily used in expressions by declaring HQL query
+    substitutions in Hibernate configuration:</para>
+
+    <programlisting>hibernate.query.substitutions true 1, false 0</programlisting>
+
+    <para>This will replace the keywords <literal>true</literal> and
+    <literal>false</literal> with the literals <literal>1</literal> and
+    <literal>0</literal> in the translated SQL from this HQL:</para>
+
+    <programlisting>select cat from Cat cat where cat.alive = true</programlisting>
+
+    <para>You may test the size of a collection with the special property
+    <literal>size</literal>, or the special <literal>size()</literal> function
+    (HQL specific feature).</para>
+
+    <programlisting>select cat from Cat cat where cat.kittens.size &gt; 0</programlisting>
+
+    <programlisting>select cat from Cat cat where size(cat.kittens) &gt; 0</programlisting>
+
+    <para>For indexed collections, you may refer to the minimum and maximum
+    indices using <literal>minindex</literal> and <literal>maxindex</literal>
+    functions. Similarly, you may refer to the minimum and maximum elements of
+    a collection of basic type using the <literal>minelement</literal> and
+    <literal>maxelement</literal> functions. These are HQL specific
+    features.</para>
+
+    <programlisting>select cal from Calendar cal where maxelement(cal.holidays) &gt; current date</programlisting>
+
+    <programlisting>select order from Order order where maxindex(order.items) &gt; 100</programlisting>
+
+    <programlisting>select order from Order order where minelement(order.items) &gt; 10000</programlisting>
+
+    <para>The SQL functions <literal>any, some, all, exists, in</literal> are
+    supported when passed the element or index set of a collection
+    (<literal>elements</literal> and <literal>indices</literal> functions) or
+    the result of a subquery (see below). While subqueries are supported by
+    EJB-QL, <literal>elements</literal> and <literal>indices</literal> are
+    specific HQL features.</para>
+
+    <programlisting>select mother from Cat as mother, Cat as kit
+where kit in elements(foo.kittens)</programlisting>
+
+    <programlisting>select p from NameList list, Person p
+where p.name = some elements(list.names)</programlisting>
+
+    <programlisting>select cat from Cat cat where exists elements(cat.kittens)</programlisting>
+
+    <programlisting>select cat from Player p where 3 &gt; all elements(p.scores)</programlisting>
+
+    <programlisting>select cat from Show show where 'fizard' in indices(show.acts)</programlisting>
+
+    <para>Note that these constructs - <literal>size</literal>,
+    <literal>elements</literal>, <literal>indices</literal>,
+    <literal>minindex</literal>, <literal>maxindex</literal>,
+    <literal>minelement</literal>, <literal>maxelement</literal> - may only be
+    used in the where clause in Hibernate3.</para>
+
+    <para>In HQL, elements of indexed collections (arrays, lists, maps) may be
+    referred to by index (in a where clause only):</para>
+
+    <programlisting>select order from Order order where order.items[0].id = 1234</programlisting>
+
+    <programlisting>select person from Person person, Calendar calendar
+where calendar.holidays['national day'] = person.birthDay
+    and person.nationality.calendar = calendar</programlisting>
+
+    <programlisting>select item from Item item, Order order
+where order.items[ order.deliveredItemIndices[0] ] = item and order.id = 11</programlisting>
+
+    <programlisting>select item from Item item, Order order
+where order.items[ maxindex(order.items) ] = item and order.id = 11</programlisting>
+
+    <para>The expression inside <literal>[]</literal> may even be an
+    arithmetic expression.</para>
+
+    <programlisting>select item from Item item, Order order
+where order.items[ size(order.items) - 1 ] = item</programlisting>
+
+    <para>HQL also provides the built-in <literal>index()</literal> function,
+    for elements of a one-to-many association or collection of values.</para>
+
+    <programlisting>select item, index(item) from Order order 
+    join order.items item
+where index(item) &lt; 5</programlisting>
+
+    <para>Scalar SQL functions supported by the underlying database may be
+    used</para>
+
+    <programlisting>select cat from DomesticCat cat where upper(cat.name) like 'FRI%'</programlisting>
+
+    <para>If you are not yet convinced by all this, think how much longer and
+    less readable the following query would be in SQL:</para>
+
+    <programlisting>select cust
+from Product prod,
+    Store store
+    inner join store.customers cust
+where prod.name = 'widget'
+    and store.location.name in ( 'Melbourne', 'Sydney' )
+    and prod = all elements(cust.currentOrder.lineItems)</programlisting>
+
+    <para><emphasis>Hint:</emphasis> something like</para>
+
+    <programlisting>SELECT cust.name, cust.address, cust.phone, cust.id, cust.current_order
+FROM customers cust,
+    stores store,
+    locations loc,
+    store_customers sc,
+    product prod
+WHERE prod.name = 'widget'
+    AND store.loc_id = loc.id
+    AND loc.name IN ( 'Melbourne', 'Sydney' )
+    AND sc.store_id = store.id
+    AND sc.cust_id = cust.id
+    AND prod.id = ALL(
+        SELECT item.prod_id
+        FROM line_items item, orders o
+        WHERE item.order_id = o.id
+            AND cust.current_order = o.id
+    )</programlisting>
+  </sect1>
+
+  <sect1 id="queryhql-ordering">
+    <title>The order by clause</title>
+
+    <para>The list returned by a query may be ordered by any property of a
+    returned class or components:</para>
+
+    <programlisting>select cat from DomesticCat cat
+order by cat.name asc, cat.weight desc, cat.birthdate</programlisting>
+
+    <para>The optional <literal>asc</literal> or <literal>desc</literal>
+    indicate ascending or descending order respectively.</para>
+  </sect1>
+
+  <sect1 id="queryhql-grouping">
+    <title>The group by clause</title>
+
+    <para>A query that returns aggregate values may be grouped by any property
+    of a returned class or components:</para>
+
+    <programlisting>select cat.color, sum(cat.weight), count(cat) 
+from Cat cat
+group by cat.color</programlisting>
+
+    <programlisting>select foo.id, avg(name), max(name) 
+from Foo foo join foo.names name
+group by foo.id</programlisting>
+
+    <para>A <literal>having</literal> clause is also allowed.</para>
+
+    <programlisting>select cat.color, sum(cat.weight), count(cat) 
+from Cat cat
+group by cat.color 
+having cat.color in (eg.Color.TABBY, eg.Color.BLACK)</programlisting>
+
+    <para>SQL functions and aggregate functions are allowed in the
+    <literal>having</literal> and <literal>order by</literal> clauses, if
+    supported by the underlying database (eg. not in MySQL).</para>
+
+    <programlisting>select cat
+from Cat cat
+    join cat.kittens kitten
+group by cat
+having avg(kitten.weight) &gt; 100
+order by count(kitten) asc, sum(kitten.weight) desc</programlisting>
+
+    <para>Note that neither the <literal>group by</literal> clause nor the
+    <literal>order by</literal> clause may contain arithmetic
+    expressions.</para>
+  </sect1>
+
+  <sect1 id="queryhql-subqueries">
+    <title>Subqueries</title>
+
+    <para>For databases that support subselects, EJB-QL supports subqueries
+    within queries. A subquery must be surrounded by parentheses (often by an
+    SQL aggregate function call). Even correlated subqueries (subqueries that
+    refer to an alias in the outer query) are allowed.</para>
+
+    <programlisting>select fatcat from Cat as fatcat 
+where fatcat.weight &gt; ( 
+    select avg(cat.weight) from DomesticCat cat 
+)</programlisting>
+
+    <programlisting>select cat from DomesticCat as cat 
+where cat.name = some ( 
+    select name.nickName from Name as name 
+)</programlisting>
+
+    <programlisting>select cat from Cat as cat 
+where not exists ( 
+    from Cat as mate where mate.mate = cat 
+)</programlisting>
+
+    <programlisting>select cat from DomesticCat as cat 
+where cat.name not in ( 
+    select name.nickName from Name as name 
+)</programlisting>
+
+    <para>For subqueries with more than one expression in the select list, you
+    can use a tuple constructor:</para>
+
+    <programlisting>select cat from Cat as cat 
+where not ( cat.name, cat.color ) in ( 
+    select cat.name, cat.color from DomesticCat cat 
+)</programlisting>
+
+    <para>Note that on some databases (but not Oracle or HSQLDB), you can use
+    tuple constructors in other contexts, for example when querying components
+    or composite user types:</para>
+
+    <programlisting>select cat from Person where name = ('Gavin', 'A', 'King')</programlisting>
+
+    <para>Which is equivalent to the more verbose:</para>
+
+    <programlisting>select cat from Person where name.first = 'Gavin' and name.initial = 'A' and name.last = 'King')</programlisting>
+
+    <para>There are two good reasons you might not want to do this kind of
+    thing: first, it is not completely portable between database platforms;
+    second, the query is now dependent upon the ordering of properties in the
+    mapping document.</para>
+  </sect1>
+
+  <sect1 id="queryhql-examples">
+    <title>EJB-QL examples</title>
+
+    <para>Hibernate queries can be quite powerful and complex. In fact, the
+    power of the query language is one of Hibernate's main selling points (and
+    now EJB-QL). Here are some example queries very similar to queries that I
+    used on a recent project. Note that most queries you will write are much
+    simpler than these!</para>
+
+    <para>The following query returns the order id, number of items and total
+    value of the order for all unpaid orders for a particular customer and
+    given minimum total value, ordering the results by total value. In
+    determining the prices, it uses the current catalog. The resulting SQL
+    query, against the <literal>ORDER</literal>,
+    <literal>ORDER_LINE</literal>, <literal>PRODUCT</literal>,
+    <literal>CATALOG</literal> and <literal>PRICE</literal> tables has four
+    inner joins and an (uncorrelated) subselect.</para>
+
+    <programlisting>select order.id, sum(price.amount), count(item)
+from Order as order
+    join order.lineItems as item
+    join item.product as product,
+    Catalog as catalog
+    join catalog.prices as price
+where order.paid = false
+    and order.customer = :customer
+    and price.product = product
+    and catalog.effectiveDate &lt; sysdate
+    and catalog.effectiveDate &gt;= all (
+        select cat.effectiveDate 
+        from Catalog as cat
+        where cat.effectiveDate &lt; sysdate
+    )
+group by order
+having sum(price.amount) &gt; :minAmount
+order by sum(price.amount) desc</programlisting>
+
+    <para>What a monster! Actually, in real life, I'm not very keen on
+    subqueries, so my query was really more like this:</para>
+
+    <programlisting>select order.id, sum(price.amount), count(item)
+from Order as order
+    join order.lineItems as item
+    join item.product as product,
+    Catalog as catalog
+    join catalog.prices as price
+where order.paid = false
+    and order.customer = :customer
+    and price.product = product
+    and catalog = :currentCatalog
+group by order
+having sum(price.amount) &gt; :minAmount
+order by sum(price.amount) desc</programlisting>
+
+    <para>The next query counts the number of payments in each status,
+    excluding all payments in the <literal>AWAITING_APPROVAL</literal> status
+    where the most recent status change was made by the current user. It
+    translates to an SQL query with two inner joins and a correlated subselect
+    against the <literal>PAYMENT</literal>, <literal>PAYMENT_STATUS</literal>
+    and <literal>PAYMENT_STATUS_CHANGE</literal> tables.</para>
+
+    <programlisting>select count(payment), status.name 
+from Payment as payment 
+    join payment.currentStatus as status
+    join payment.statusChanges as statusChange
+where payment.status.name &lt;&gt; PaymentStatus.AWAITING_APPROVAL
+    or (
+        statusChange.timeStamp = ( 
+            select max(change.timeStamp) 
+            from PaymentStatusChange change 
+            where change.payment = payment
+        )
+        and statusChange.user &lt;&gt; :currentUser
+    )
+group by status.name, status.sortOrder
+order by status.sortOrder</programlisting>
+
+    <para>If I would have mapped the <literal>statusChanges</literal>
+    collection as a list, instead of a set, the query would have been much
+    simpler to write.</para>
+
+    <programlisting>select count(payment), status.name 
+from Payment as payment
+    join payment.currentStatus as status
+where payment.status.name &lt;&gt; PaymentStatus.AWAITING_APPROVAL
+    or payment.statusChanges[ maxIndex(payment.statusChanges) ].user &lt;&gt; :currentUser
+group by status.name, status.sortOrder
+order by status.sortOrder</programlisting>
+
+    <para>However the query would have been HQL specific.</para>
+
+    <para>The next query uses the MS SQL Server <literal>isNull()</literal>
+    function to return all the accounts and unpaid payments for the
+    organization to which the current user belongs. It translates to an SQL
+    query with three inner joins, an outer join and a subselect against the
+    <literal>ACCOUNT</literal>, <literal>PAYMENT</literal>,
+    <literal>PAYMENT_STATUS</literal>, <literal>ACCOUNT_TYPE</literal>,
+    <literal>ORGANIZATION</literal> and <literal>ORG_USER</literal>
+    tables.</para>
+
+    <programlisting>select account, payment
+from Account as account
+    join account.holder.users as user
+    left outer join account.payments as payment
+where :currentUser = user
+    and PaymentStatus.UNPAID = isNull(payment.currentStatus.name, PaymentStatus.UNPAID)
+order by account.type.sortOrder, account.accountNumber, payment.dueDate</programlisting>
+  </sect1>
+
+  <sect1 id="queryhql-bulk">
+    <title>Bulk UPDATE &amp; DELETE Statements</title>
+
+    <para>Hibernate now supports UPDATE and DELETE statements in HQL/EJB-QL. See <xref
+    linkend="batch-direct" /> for details.</para>
+  </sect1>
+
+  <sect1 id="queryhql-tipstricks">
+    <title>Tips &amp; Tricks</title>
+
+    <para>To order a result by the size of a collection, use the following
+    query:</para>
+
+    <programlisting>select usr.id, usr.name
+from User as usr 
+    left join usr.messages as msg
+group by usr.id, usr.name
+order by count(msg)</programlisting>
+
+    <para>If your database supports subselects, you can place a condition upon
+    selection size in the where clause of your query:</para>
+
+    <programlisting>from User usr where size(usr.messages) &gt;= 1</programlisting>
+
+    <para>If your database doesn't support subselects, use the following
+    query:</para>
+
+    <programlisting>select usr.id, usr.name
+from User usr.name
+    join usr.messages msg
+group by usr.id, usr.name
+having count(msg) &gt;= 1</programlisting>
+
+    <para>As this solution can't return a <literal>User</literal> with zero
+    messages because of the inner join, the following form is also
+    useful:</para>
+
+    <programlisting>select usr.id, usr.name
+from User as usr
+    left join usr.messages as msg
+group by usr.id, usr.name
+having count(msg) = 0</programlisting>
+  </sect1>
+</chapter>
\ No newline at end of file

Deleted: trunk/HibernateExt/entitymanager/doc/reference/en/modules/query_native.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/doc/reference/en/modules/query_native.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/doc/reference/en/modules/query_native.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,111 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<chapter id="query_native">
-  <title>Native query</title>
-
-  <para>You may also express queries in the native SQL dialect of your
-  database. This is useful if you want to utilize database specific features
-  such as query hints or the CONNECT BY option in Oracle. It also provides a
-  clean migration path from a direct SQL/JDBC based application to Hibernate.
-  Note that Hibernate3 allows you to specify handwritten SQL (including stored
-  procedures) for all create, update, delete, and load operations (please
-  refer to the reference guide for more information.)</para>
-
-  <sect1>
-    <title>Expressing the resultset</title>
-
-    <para>To use a SQL query, you need to describe the SQL resultset, this
-    description will help the <literal>EntityManager</literal> to map your
-    columns onto entity properties. This is done using the
-    <literal>@SqlResultSetMapping</literal> annotation. Each
-    <literal>@SqlResultSetMapping </literal>has a name wich is used when
-    creating a SQL query on <literal>EntityManager</literal>.</para>
-
-    <programlisting>@SqlResultSetMapping(name="GetNightAndArea", entities={
-    @EntityResult(name="org.hibernate.test.annotations.query.Night", fields = {
-        @FieldResult(name="id", column="nid"),
-        @FieldResult(name="duration", column="night_duration"),
-        @FieldResult(name="date", column="night_date"),
-        @FieldResult(name="area", column="area_id")
-    }),
-    @EntityResult(name="org.hibernate.test.annotations.query.Area", fields = {
-        @FieldResult(name="id", column="aid"),
-        @FieldResult(name="name", column="name")
-    })
-    }
-)
-
-//or
- at SqlResultSetMapping(name="defaultSpaceShip", entities=@EntityResult(name="org.hibernate.test.annotations.query.SpaceShip"))</programlisting>
-
-    <para>You can also define scalar results and even mix entity results and
-    scalar results</para>
-
-    <programlisting>@SqlResultSetMapping(name="ScalarAndEntities", 
-    entities={
-        @EntityResult(name="org.hibernate.test.annotations.query.Night", fields = {
-            @FieldResult(name="id", column="nid"),
-            @FieldResult(name="duration", column="night_duration"),
-            @FieldResult(name="date", column="night_date"),
-            @FieldResult(name="area", column="area_id")
-        }),
-        @EntityResult(name="org.hibernate.test.annotations.query.Area", fields = {
-            @FieldResult(name="id", column="aid"),
-            @FieldResult(name="name", column="name")
-        })
-    },
-    columns={
-        @ColumnResult(name="durationInSec")
-    }
-)</programlisting>
-
-    <para>The SQL query will then have to return a column alias
-    <literal>durationInSec</literal>.</para>
-
-    <para>Please refer to the Hibernate Annotations reference guide for more
-    information about <literal>@SqlResultSetMapping.</literal></para>
-  </sect1>
-
-  <sect1>
-    <title>Using native SQL Queries</title>
-
-    <para>TODO: This sounds like a dupe...</para>
-
-    <para>Now that the result set is described, we are capable of executing
-    the native SQL query. <literal>EntityManager</literal> provides all the
-    needed APIs. The first method is to use a SQL resultset name to do the
-    binding, the second one uses the entity default mapping (the column
-    returned has to have the same names as the one used in the mapping). A
-    third one (not yet supported by Hibernate entity manager), returns pure
-    scalar results.</para>
-
-    <programlisting>String sqlQuery = "select night.id nid, night.night_duration, night.night_date, area.id aid, "
-    + "night.area_id, area.name from Night night, Area area where night.area_id = area.id "
-    + "and night.night_duration &gt;= ?";
-Query q = entityManager.createNativeQuery(sqlQuery, "GetNightAndArea");
-q.setParameter( 1, expectedDuration );
-q.getResultList();</programlisting>
-
-    <para>This native query returns nights and area based on the
-    <literal>GetNightAndArea</literal> result set.</para>
-
-    <programlisting>String sqlQuery = "select * from tbl_spaceship where owner = ?";
-Query q = entityManager.createNativeQuery(sqlQuery, SpaceShip.class);
-q.setParameter( 1, "Han" );
-q.getResultList();</programlisting>
-
-    <para>The second version is useful when your SQL query returns one entity
-    reusing the same columns as the ones mapped in metadata.</para>
-  </sect1>
-
-  <sect1>
-    <title>Named queries</title>
-
-    <para>Native named queries share the same calling API than EJB-QL named
-    queries. Your code doesn't need to know the difference between the two.
-    This is very useful for migration from SQL to EJB-QL:</para>
-
-    <programlisting>Query q = entityManager.createNamedQuery("getSeasonByNativeQuery");
-q.setParameter( 1, name );
-Season season = (Season) q.getSingleResult();</programlisting>
-  </sect1>
-</chapter>
\ No newline at end of file

Copied: trunk/HibernateExt/entitymanager/doc/reference/en/modules/query_native.xml (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/doc/reference/en/modules/query_native.xml)
===================================================================
--- trunk/HibernateExt/entitymanager/doc/reference/en/modules/query_native.xml	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/doc/reference/en/modules/query_native.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<chapter id="query_native">
+  <title>Native query</title>
+
+  <para>You may also express queries in the native SQL dialect of your
+  database. This is useful if you want to utilize database specific features
+  such as query hints or the CONNECT BY option in Oracle. It also provides a
+  clean migration path from a direct SQL/JDBC based application to Hibernate.
+  Note that Hibernate3 allows you to specify handwritten SQL (including stored
+  procedures) for all create, update, delete, and load operations (please
+  refer to the reference guide for more information.)</para>
+
+  <sect1>
+    <title>Expressing the resultset</title>
+
+    <para>To use a SQL query, you need to describe the SQL resultset, this
+    description will help the <literal>EntityManager</literal> to map your
+    columns onto entity properties. This is done using the
+    <literal>@SqlResultSetMapping</literal> annotation. Each
+    <literal>@SqlResultSetMapping </literal>has a name wich is used when
+    creating a SQL query on <literal>EntityManager</literal>.</para>
+
+    <programlisting>@SqlResultSetMapping(name="GetNightAndArea", entities={
+    @EntityResult(name="org.hibernate.test.annotations.query.Night", fields = {
+        @FieldResult(name="id", column="nid"),
+        @FieldResult(name="duration", column="night_duration"),
+        @FieldResult(name="date", column="night_date"),
+        @FieldResult(name="area", column="area_id")
+    }),
+    @EntityResult(name="org.hibernate.test.annotations.query.Area", fields = {
+        @FieldResult(name="id", column="aid"),
+        @FieldResult(name="name", column="name")
+    })
+    }
+)
+
+//or
+ at SqlResultSetMapping(name="defaultSpaceShip", entities=@EntityResult(name="org.hibernate.test.annotations.query.SpaceShip"))</programlisting>
+
+    <para>You can also define scalar results and even mix entity results and
+    scalar results</para>
+
+    <programlisting>@SqlResultSetMapping(name="ScalarAndEntities", 
+    entities={
+        @EntityResult(name="org.hibernate.test.annotations.query.Night", fields = {
+            @FieldResult(name="id", column="nid"),
+            @FieldResult(name="duration", column="night_duration"),
+            @FieldResult(name="date", column="night_date"),
+            @FieldResult(name="area", column="area_id")
+        }),
+        @EntityResult(name="org.hibernate.test.annotations.query.Area", fields = {
+            @FieldResult(name="id", column="aid"),
+            @FieldResult(name="name", column="name")
+        })
+    },
+    columns={
+        @ColumnResult(name="durationInSec")
+    }
+)</programlisting>
+
+    <para>The SQL query will then have to return a column alias
+    <literal>durationInSec</literal>.</para>
+
+    <para>Please refer to the Hibernate Annotations reference guide for more
+    information about <literal>@SqlResultSetMapping.</literal></para>
+  </sect1>
+
+  <sect1>
+    <title>Using native SQL Queries</title>
+
+    <para>TODO: This sounds like a dupe...</para>
+
+    <para>Now that the result set is described, we are capable of executing
+    the native SQL query. <literal>EntityManager</literal> provides all the
+    needed APIs. The first method is to use a SQL resultset name to do the
+    binding, the second one uses the entity default mapping (the column
+    returned has to have the same names as the one used in the mapping). A
+    third one (not yet supported by Hibernate entity manager), returns pure
+    scalar results.</para>
+
+    <programlisting>String sqlQuery = "select night.id nid, night.night_duration, night.night_date, area.id aid, "
+    + "night.area_id, area.name from Night night, Area area where night.area_id = area.id "
+    + "and night.night_duration &gt;= ?";
+Query q = entityManager.createNativeQuery(sqlQuery, "GetNightAndArea");
+q.setParameter( 1, expectedDuration );
+q.getResultList();</programlisting>
+
+    <para>This native query returns nights and area based on the
+    <literal>GetNightAndArea</literal> result set.</para>
+
+    <programlisting>String sqlQuery = "select * from tbl_spaceship where owner = ?";
+Query q = entityManager.createNativeQuery(sqlQuery, SpaceShip.class);
+q.setParameter( 1, "Han" );
+q.getResultList();</programlisting>
+
+    <para>The second version is useful when your SQL query returns one entity
+    reusing the same columns as the ones mapped in metadata.</para>
+  </sect1>
+
+  <sect1>
+    <title>Named queries</title>
+
+    <para>Native named queries share the same calling API than EJB-QL named
+    queries. Your code doesn't need to know the difference between the two.
+    This is very useful for migration from SQL to EJB-QL:</para>
+
+    <programlisting>Query q = entityManager.createNamedQuery("getSeasonByNativeQuery");
+q.setParameter( 1, name );
+Season season = (Season) q.getSingleResult();</programlisting>
+  </sect1>
+</chapter>
\ No newline at end of file

Deleted: trunk/HibernateExt/entitymanager/doc/reference/en/modules/transactions.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/doc/reference/en/modules/transactions.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/doc/reference/en/modules/transactions.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,878 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<chapter id="transactions" revision="1">
-  <title>Transactions and Concurrency</title>
-
-  <para>The most important point about Hibernate Entity Manager and
-  concurrency control is that it is very easy to understand. Hibernate Entity
-  Manager directly uses JDBC connections and JTA resources without adding any
-  additional locking behavior. We highly recommend you spend some time with
-  the JDBC, ANSI, and transaction isolation specification of your database
-  management system. Hibernate Entity Manager only adds automatic versioning
-  but does not lock objects in memory or change the isolation level of your
-  database transactions. Basically, use Hibernate Entity Manager like you
-  would use direct JDBC (or JTA/CMT) with your database resources.</para>
-
-  <para>We start the discussion of concurrency control in Hibernate with the
-  granularity of <literal>EntityManagerFactory</literal>, and
-  <literal>EntityManager</literal>, as well as database transactions and long
-  units of work..</para>
-
-  <para>In this chapter, and unless explicitly expressed, we will mix and
-  match the concept of entity manager and persistence context. One is an API
-  and programming object, the other a definition of scope. However, keep in
-  mind the essential difference. A persistence context is usually bound to a
-  JTA transaction in Java EE, and a persistence context starts and ends at
-  transaction boundaries (transaction-scoped) unless you use an extended
-  entity manager. Please refer to <xref
-  linkend="architecture-ejb-persistctxscope" /> for more information.</para>
-
-  <sect1 id="transactions-basics">
-    <title>Entity manager and transaction scopes</title>
-
-    <para>A <literal>EntityManagerFactory</literal> is an expensive-to-create,
-    threadsafe object intended to be shared by all application threads. It is
-    created once, usually on application startup.</para>
-
-    <para>An <literal>EntityManager</literal> is an inexpensive,
-    non-threadsafe object that should be used once, for a single business
-    process, a single unit of work, and then discarded. An
-    <literal>EntityManager</literal> will not obtain a JDBC
-    <literal>Connection</literal> (or a <literal>Datasource</literal>) unless
-    it is needed, so you may safely open and close an
-    <literal>EntityManager</literal> even if you are not sure that data access
-    will be needed to serve a particular request. (This becomes important as
-    soon as you are implementing some of the following patterns using request
-    interception.)</para>
-
-    <para>To complete this picture you also have to think about database
-    transactions. A database transaction has to be as short as possible, to
-    reduce lock contention in the database. Long database transactions will
-    prevent your application from scaling to highly concurrent load.</para>
-
-    <para>What is the scope of a unit of work? Can a single Hibernate
-    <literal>EntityManager</literal> span several database transactions or is
-    this a one-to-one relationship of scopes? When should you open and close a
-    <literal>Session</literal> and how do you demarcate the database
-    transaction boundaries?</para>
-
-    <sect2 id="transactions-basics-uow">
-      <title>Unit of work</title>
-
-      <para>First, don't use the
-      <emphasis>entitymanager-per-operation</emphasis> antipattern, that is,
-      don't open and close an <literal>EntityManager</literal> for every
-      simple database call in a single thread! Of course, the same is true for
-      database transactions. Database calls in an application are made using a
-      planned sequence, they are grouped into atomic units of work. (Note that
-      this also means that auto-commit after every single SQL statement is
-      useless in an application, this mode is intended for ad-hoc SQL console
-      work.)</para>
-
-      <para>The most common pattern in a multi-user client/server application
-      is <emphasis>entitymanager-per-request</emphasis>. In this model, a
-      request from the client is send to the server (where the EJB3
-      persistence layer runs), a new <literal>EntityManager</literal> is
-      opened, and all database operations are executed in this unit of work.
-      Once the work has been completed (and the response for the client has
-      been prepared), the persistence context is flushed and closed, as well
-      as the entity manager object. You would also use a single database
-      transaction to serve the clients request. The relationship between the
-      two is one-to-one and this model is a perfect fit for many
-      applications.</para>
-
-      <para>This is the default EJB3 persistence model in a Java EE
-      environment (JTA bounded, transaction-scoped persistence context);
-      injected (or looked up) entity managers share the same persistence
-      context for a particular JTA transaction. The beauty of EJB3 is that you
-      don't have to care about that anymore and just see data access through
-      entity manager and demaraction of transaction scope on session beans as
-      completely orthogonal.</para>
-
-      <para>The challenge is the implementation of this (and other) behavior
-      outside an EJB3 container: not only has the
-      <literal>EntityManager</literal> and resource-local transaction to be
-      started and ended correctly, but they also have to be accessible for
-      data access operations. The demarcation of a unit of work is ideally
-      implemented using an interceptor that runs when a request hits the
-      non-EJB3 container server and before the response will be send (i.e. a
-      <literal>ServletFilter</literal> if you are using a standalone servlet
-      container). We recommend to bind the <literal>EntityManager</literal> to
-      the thread that serves the request, using a
-      <literal>ThreadLocal</literal> variable. This allows easy access (like
-      accessing a static variable) in all code that runs in this thread.
-      Depending on the database transaction demarcation mechanism you chose,
-      you might also keep the transaction context in a
-      <literal>ThreadLocal</literal> variable. The implementation patterns for
-      this are known as <emphasis>ThreadLocal Session</emphasis> and
-      <emphasis>Open Session in View</emphasis> in the Hibernate community.
-      You can easily extend the <literal>HibernateUtil</literal> shown in the
-      Hibernate reference documentation to implement this pattern, you don't
-      need any external software (it's in fact very trivial). Of course, you'd
-      have to find a way to implement an interceptor and set it up in your
-      environment. See the Hibernate website for tips and examples. Once
-      again, remember that your first choice is naturally an EJB3 container -
-      preferably a light and modular one such as JBoss application
-      server.</para>
-    </sect2>
-
-    <sect2 id="transactions-basics-apptx">
-      <title>Long units of work</title>
-
-      <para>The entitymanager-per-request pattern is not the only useful
-      concept you can use to design units of work. Many business processes
-      require a whole series of interactions with the user interleaved with
-      database accesses. In web and enterprise applications it is not
-      acceptable for a database transaction to span a user interaction with
-      possibly long waiting time between requests. Consider the following
-      example:</para>
-
-      <itemizedlist>
-        <listitem>
-          <para>The first screen of a dialog opens, the data seen by the user
-          has been loaded in a particular <literal>EntityManager</literal> and
-          resource-local transaction. The user is free to modify the detached
-          objects.</para>
-        </listitem>
-
-        <listitem>
-          <para>The user clicks "Save" after 5 minutes and expects his
-          modifications to be made persistent; he also expects that he was the
-          only person editing this information and that no conflicting
-          modification can occur.</para>
-        </listitem>
-      </itemizedlist>
-
-      <para>We call this unit of work, from the point of view of the user, a
-      long running <emphasis>application transaction</emphasis>. There are
-      many ways how you can implement this in your application.</para>
-
-      <para>A first naive implementation might keep the
-      <literal>EntityManager</literal> and database transaction open during
-      user think time, with locks held in the database to prevent concurrent
-      modification, and to guarantee isolation and atomicity. This is of
-      course an anti-pattern, a pessimistic approach, since lock contention
-      would not allow the application to scale with the number of concurrent
-      users.</para>
-
-      <para>Clearly, we have to use several database transactions to implement
-      the application transaction. In this case, maintaining isolation of
-      business processes becomes the partial responsibility of the application
-      tier. A single application transaction usually spans several database
-      transactions. It will be atomic if only one of these database
-      transactions (the last one) stores the updated data, all others simply
-      read data (e.g. in a wizard-style dialog spanning several
-      request/response cycles). This is easier to implement than it might
-      sound, especially if you use EJB3 entity manager and persistence context
-      features:</para>
-
-      <itemizedlist>
-        <listitem>
-          <para><emphasis>Automatic Versioning</emphasis> - An entity manager
-          can do automatic optimistic concurrency control for you, it can
-          automatically detect if a concurrent modification occured during
-          user think time (usually by comparing version numbers or timestamps
-          when updating the data in the final resource-local
-          transaction).</para>
-        </listitem>
-
-        <listitem>
-          <para><emphasis>Detached Entities</emphasis> - If you decide to use
-          the already discussed <emphasis>entity-per-request</emphasis>
-          pattern, all loaded instances will be in detached state during user
-          think time. The entity manager allows you to merge the detached
-          (modified) state and persist the modifications, the pattern is
-          called
-          <emphasis>entitymanager-per-request-with-detached-entities</emphasis>.
-          Automatic versioning is used to isolate concurrent
-          modifications.</para>
-        </listitem>
-
-        <listitem>
-          <para><emphasis>Extended Entity Manager</emphasis> - The Hibernate
-          Entity Manager may be disconnected from the underlying JDBC
-          connection between two client calls and reconnected when a new
-          client request occurs. This pattern is known as
-          <emphasis>entitymanager-per-application-transaction</emphasis> and
-          makes even merging unnecessary. An extend persistence context is
-          responsible to collect and retain any modification (persist, merge,
-          remove) made outside a transaction. The next client call made inside
-          an active transaction (typically the last operation of a user
-          conversation) will execute all queued modifications. Automatic
-          versioning is used to isolate concurrent modifications.</para>
-        </listitem>
-      </itemizedlist>
-
-      <para>Both
-      <emphasis>entitymanager-per-request-with-detached-objects</emphasis> and
-      <emphasis>entitymanager-per-application-transaction</emphasis> have
-      advantages and disadvantages, we discuss them later in this chapter in
-      the context of optimistic concurrency control.</para>
-
-      <para>TODO: This note should probably come later.</para>
-    </sect2>
-
-    <sect2 id="transactions-basics-identity">
-      <title>Considering object identity</title>
-
-      <para>An application may concurrently access the same persistent state
-      in two different persistence contexts. However, an instance of a managed
-      class is never shared between two persistence contexts. Hence there are
-      two different notions of identity:</para>
-
-      <variablelist spacing="compact">
-        <varlistentry>
-          <term>Database Identity</term>
-
-          <listitem>
-            <para>
-              <literal>foo.getId().equals( bar.getId() )</literal>
-            </para>
-          </listitem>
-        </varlistentry>
-
-        <varlistentry>
-          <term>JVM Identity</term>
-
-          <listitem>
-            <para>
-              <literal>foo==bar</literal>
-            </para>
-          </listitem>
-        </varlistentry>
-      </variablelist>
-
-      <para>Then for objects attached to a <emphasis>particular</emphasis>
-      persistence context (i.e. in the scope of an
-      <literal>EntityManager</literal>) the two notions are equivalent, and
-      JVM identity for database identity is guaranteed by the Hibernate Entity
-      Manager. However, while the application might concurrently access the
-      "same" (persistent identity) business object in two different
-      persistence contexts, the two instances will actually be "different"
-      (JVM identity). Conflicts are resolved using (automatic versioning) at
-      flush/commit time, using an optimistic approach.</para>
-
-      <para>This approach leaves Hibernate and the database to worry about
-      concurrency; it also provides the best scalability, since guaranteeing
-      identity in single-threaded units of work only doesn't need expensive
-      locking or other means of synchronization. The application never needs
-      to synchronize on any business object, as long as it sticks to a single
-      thread per <literal>EntityManager</literal>. Within a persistence
-      context, the application may safely use <literal>==</literal> to compare
-      entities.</para>
-
-      <para>However, an application that uses <literal>==</literal> outside of
-      a persistence context might see unexpected results. This might occur
-      even in some unexpected places, for example, if you put two detached
-      instances into the same <literal>Set</literal>. Both might have the same
-      database identity (i.e. they represent the same row), but JVM identity
-      is by definition not guaranteed for instances in detached state. The
-      developer has to override the <literal>equals()</literal> and
-      <literal>hashCode()</literal> methods in persistent classes and
-      implement his own notion of object equality. There is one caveat: Never
-      use the database identifier to implement equality, use a business key, a
-      combination of unique, usually immutable, attributes. The database
-      identifier will change if a transient entity is made persistent (see the
-      contract of the <literal>persist()</literal> operation). If the
-      transient instance (usually together with detached instances) is held in
-      a <literal>Set</literal>, changing the hashcode breaks the contract of
-      the <literal>Set</literal>. Attributes for good business keys don't have
-      to be as stable as database primary keys, you only have to guarantee
-      stability as long as the objects are in the same <literal>Set</literal>.
-      See the Hibernate website for a more thorough discussion of this issue.
-      Also note that this is not a Hibernate issue, but simply how Java object
-      identity and equality has to be implemented.</para>
-    </sect2>
-
-    <sect2 id="transactions-basics-issues">
-      <title>Common concurrency control issues</title>
-
-      <para>Never use the anti-patterns
-      <emphasis>entitymanager-per-user-session</emphasis> or
-      <emphasis>entitymanager-per-application</emphasis> (of course, there are
-      rare exceptions to this rule, e.g. entitymanager-per-application might
-      be acceptable in a desktop application, with manual flushing of the
-      persistence context). Note that some of the following issues might also
-      appear with the recommended patterns, make sure you understand the
-      implications before making a design decision:</para>
-
-      <itemizedlist>
-        <listitem>
-          <para>An entity manager is not thread-safe. Things which are
-          supposed to work concurrently, like HTTP requests, session beans, or
-          Swing workers, will cause race conditions if an
-          <literal>EntityManager</literal> instance would be shared. If you
-          keep your Hibernate <literal>EntityManager</literal> in your
-          <literal>HttpSession</literal> (discussed later), you should
-          consider synchronizing access to your Http session. Otherwise, a
-          user that clicks reload fast enough may use the same
-          <literal>EntityManager</literal> in two concurrently running
-          threads. You will very likely have provisions for this case already
-          in place, for other non-threadsafe but session-scoped
-          objects.</para>
-        </listitem>
-
-        <listitem>
-          <para>An exception thrown by the Entity Manager means you have to
-          rollback your database transaction and close the
-          <literal>EntityManager</literal> immediately (discussed later in
-          more detail). If your <literal>EntityManager</literal> is bound to
-          the application, you have to stop the application. Rolling back the
-          database transaction doesn't put your business objects back into the
-          state they were at the start of the transaction. This means the
-          database state and the business objects do get out of sync. Usually
-          this is not a problem, because exceptions are not recoverable and
-          you have to start over your unit of work after rollback
-          anyway.</para>
-        </listitem>
-
-        <listitem>
-          <para>The persistence context caches every object that is in managed
-          state (watched and checked for dirty state by Hibernate). This means
-          it grows endlessly until you get an
-          <classname>OutOfMemoryException</classname>, if you keep it open for
-          a long time or simply load too much data. One solution for this is
-          some kind batch processing with regular flushing of the persistence
-          context, but you should consider using a database stored procedure
-          if you need mass data operations. Some solutions for this problem
-          are shown in <xref linkend="batch" />. Keeping a persistence context
-          open for the duration of a user session also means a high
-          probability of stale data, which you have to know about and control
-          appropriately.</para>
-        </listitem>
-      </itemizedlist>
-    </sect2>
-  </sect1>
-
-  <sect1 id="transactions-demarcation">
-    <title>Database transaction demarcation</title>
-
-    <para>Datatabase (or system) transaction boundaries are always necessary.
-    No communication with the database can occur outside of a database
-    transaction (this seems to confuse many developers who are used to the
-    auto-commit mode). Always use clear transaction boundaries, even for
-    read-only operations. Depending on your isolation level and database
-    capabilities this might not be required but there is no downside if you
-    always demarcate transactions explicitly. You'll have to do operations
-    outside a transaction, though, when you'll need to retain modifications in
-    an <literal>EXTENDED</literal> persistence context.</para>
-
-    <para>An EJB3 application can run in non-managed (i.e. standalone, simple
-    Web- or Swing applications) and managed J2EE environments. In a
-    non-managed environment, an <literal>EntityManagerFactory</literal> is
-    usually responsible for its own database connection pool. The application
-    developer has to manually set transaction boundaries, in other words,
-    begin, commit, or rollback database transactions itself. A managed
-    environment usually provides container-managed transactions, with the
-    transaction assembly defined declaratively through annotations of EJB
-    session beans, for example. Programmatic transaction demarcation is then
-    no longer necessary, even flushing the <literal>EntityManager</literal> is
-    done automatically.</para>
-
-    <para>Usually, ending a unit of work involves four distinct phases:</para>
-
-    <itemizedlist spacing="compact">
-      <listitem>
-        <para>commit the (resource-local or JTA) transaction (this
-        automatically flushes the entity manager and persistence
-        context)</para>
-      </listitem>
-
-      <listitem>
-        <para>close the entity manager (if using an application-managed entity
-        manager)</para>
-      </listitem>
-
-      <listitem>
-        <para>handle exceptions</para>
-      </listitem>
-    </itemizedlist>
-
-    <para>We'll now have a closer look at transaction demarcation and
-    exception handling in both managed- and non-managed environments.</para>
-
-    <sect2 id="transactions-demarcation-nonmanaged">
-      <title>Non-managed environment</title>
-
-      <para>If an EJB3 persistence layer runs in a non-managed environment,
-      database connections are usually handled by Hibernate's pooling
-      mechanism behind the scenes. The common entity manager and transaction
-      handling idiom looks like this:</para>
-
-      <programlisting>// Non-managed environment idiom
-EntityManager em = emf.createEntityManager();
-EntityTransaction tx = null;
-try {
-    tx = em.getTransaction();
-    tx.begin();
-
-    // do some work
-    ...
-
-    tx.commit();
-}
-catch (RuntimeException e) {
-    if ( tx != null &amp;&amp; tx.isActive() ) tx.rollback();
-    throw e; // or display error message
-}
-finally {
-    em.close();
-}</programlisting>
-
-      <para>You don't have to <literal>flush()</literal> the
-      <literal>EntityManager</literal> explicitly - the call to
-      <literal>commit()</literal> automatically triggers the
-      synchronization.</para>
-
-      <para>A call to <literal>close()</literal> marks the end of an
-      <literal>EntityManager</literal>. The main implication of
-      <literal>close()</literal> is the release of resources - make sure you
-      always close and never outside of guaranteed finally block.</para>
-
-      <para>You will very likely never see this idiom in business code in a
-      normal application; fatal (system) exceptions should always be caught at
-      the "top". In other words, the code that executes entity manager calls
-      (in the persistence layer) and the code that handles
-      <literal>RuntimeException</literal> (and usually can only clean up and
-      exit) are in different layers. This can be a challenge to design
-      yourself and you should use J2EE/EJB container services whenever they
-      are available. Exception handling is discussed later in this
-      chapter.</para>
-
-      <sect3>
-        <title>EntityTransaction</title>
-
-        <para>In a JTA environment, you don't need any extra API to interact
-        with the transaction in your environment. Simply use transaction
-        declaration or the JTA APIs.</para>
-
-        <para>If you are using a <literal>RESOURCE_LOCAL</literal> entity
-        manager, you need to demarcate your transaction boundaries through the
-        <literal>EntityTransaction</literal> API. You can get an
-        <literal>EntityTransaction</literal> through
-        <literal>entityManager.getTransaction()</literal>. This
-        <literal>EntityTransaction</literal> API provides the regular
-        <methodname>begin()</methodname>, <methodname>commit()</methodname>,
-        <methodname>rollback()</methodname> and
-        <methodname>isActive()</methodname> methods. It also provide a way to
-        mark a transaction as rollback only, ie force the transaction to
-        rollback. This is very similar to the JTA operation
-        <methodname>setRollbackOnly()</methodname>. When a
-        <literal>commit()</literal> operation fail and/or if the transaction
-        is marked as <literal>setRollbackOnly()</literal>, the
-        <literal>commit()</literal> method will try to rollback the
-        transaction and raise a
-        <literal>javax.transaction.RollbackException</literal>.</para>
-
-        <para>In a <literal>JTA</literal> entity manager,
-        <literal>entityManager.getTransaction()</literal> calls are not
-        permitted.</para>
-      </sect3>
-    </sect2>
-
-    <sect2 id="transactions-demarcation-jta">
-      <title>Using JTA</title>
-
-      <para>If your persistence layer runs in an application server (e.g.
-      behind EJB3 session beans), every datasource connection obtained
-      internally by the entity manager will automatically be part of the
-      global JTA transaction. Hibernate offers two strategies for this
-      integration.</para>
-
-      <para>If you use bean-managed transactions (BMT), the code will look
-      like this:</para>
-
-      <programlisting>// BMT idiom
- at Resource public UserTransaction utx;
- at Resource public EntityManagerFactory factory;
-
-public void doBusiness() {
-    EntityManager em = factory.createEntityManager();
-    try {
-
-    // do some work
-    ...
-
-    utx.commit();
-}
-catch (RuntimeException e) {
-    if (utx != null) utx.rollback();
-    throw e; // or display error message
-}
-finally {
-    em.close();
-}</programlisting>
-
-      <para>With Container Managed Transactions (CMT) in an EJB3 container,
-      transaction demarcation is done in session bean annotations or
-      deployment descriptors, not programatically. The
-      <literal>EntityManager</literal> will automatically be flushed on
-      transaction completion (and if you have injected or lookup the
-      <literal>EntityManager</literal>, it will be also closed automatically).
-      If an exception occurs during the <literal>EntityManager</literal> use,
-      transaction rollback occurs automatically if you don't catch the
-      exception. Since <literal>EntityManager</literal> exceptions are
-      <literal>RuntimeException</literal>s they will rollback the transaction
-      as per the EJB specification (system exception vs. application
-      exception).</para>
-
-      <para>It is important to let Hibernate EntityManager define the
-      <literal>hibernate.transaction.factory_class</literal> (ie not
-      overriding this value). Remember to also set
-      <literal>org.hibernate.transaction.manager_lookup_class</literal>.</para>
-
-      <para>If you work in a CMT environment, you might also want to use the
-      same entity manager in different parts of your code. Typically, in a
-      non-managed environment you would use a <literal>ThreadLocal</literal>
-      variable to hold the entity manager, but a single EJB request might
-      execute in different threads (e.g. session bean calling another session
-      bean). The EJB3 container takes care of the persistence context
-      propagation for you. Either using injection or lookup, the EJB3
-      container will return an entity manager with the same persistence
-      context bound to the JTA context if any, or create a new one and bind it
-      (see <xref linkend="architecture-ejb-persistctxpropagation" /> .)</para>
-
-      <para>Our entity manager/transaction management idiom for CMT and EJB3
-      container-use is reduced to this:</para>
-
-      <programlisting>//CMT idiom through injection
- at PersistenceContext(name="sample") EntityManager em;</programlisting>
-
-      <para>In other words, all you have to do in a managed environment is to
-      inject the <literal>EntityManager</literal>, do your data access work,
-      and leave the rest to the container. Transaction boundaries are set
-      declaratively in the annotations or deployment descriptors of your
-      session beans. The lifecycle of the entity manager and persistence
-      context is completely managed by the container.</para>
-
-      <para>TODO: The following paragraph is very confusing, especially the
-      beginning...</para>
-
-      <para>When using particular Hibernate native APIs, one caveat has to be
-      remembered: <literal>after_statement</literal> connection release mode.
-      Due to a silly limitation of the JTA spec, it is not possible for
-      Hibernate to automatically clean up any unclosed
-      <literal>ScrollableResults</literal> or <literal>Iterator</literal>
-      instances returned by <literal>scroll()</literal> or
-      <literal>iterate()</literal>. You <emphasis>must</emphasis> release the
-      underlying database cursor by calling
-      <literal>ScrollableResults.close()</literal> or
-      <literal>Hibernate.close(Iterator)</literal> explicity from a
-      <literal>finally</literal> block. (Of course, most applications can
-      easily avoid using <literal>scroll()</literal> or
-      <literal>iterate()</literal> at all from the CMT code.)</para>
-    </sect2>
-
-    <sect2 id="transactions-demarcation-exceptions">
-      <title>Exception handling</title>
-
-      <para>If the <literal>EntityManager</literal> throws an exception
-      (including any <literal>SQLException</literal>), you should immediately
-      rollback the database transaction, call
-      <literal>EntityManager.close()</literal> (if
-      <methodname>createEntityManager()</methodname> has been called) and
-      discard the <literal>EntityManager</literal> instance. Certain methods
-      of <literal>EntityManager</literal> will <emphasis>not</emphasis> leave
-      the persistence context in a consistent state. No exception thrown by an
-      entity manager can be treated as recoverable. Ensure that the
-      <literal>EntityManager</literal> will be closed by calling
-      <literal>close()</literal> in a <literal>finally</literal> block. Note
-      that a container managed entity manager will do that for you. You just
-      have to let the RuntimeException propagate up to the container.</para>
-
-      <para>The Hibernate entity manager generally raises exceptions which
-      encapsulate the Hibernate core exception. Common exceptions raised by
-      the <literal>EntityManager</literal> API are</para>
-
-      <itemizedlist>
-        <listitem>
-          <para>IllegalArgumentException: something wrong happen</para>
-        </listitem>
-
-        <listitem>
-          <para>EntityNotFoundException: an entity was expected but none match
-          the requirement</para>
-        </listitem>
-
-        <listitem>
-          <para>TransactionRequiredException: this operation has to be in a
-          transaction</para>
-        </listitem>
-
-        <listitem>
-          <para>IllegalStateException: the entity manager is used in a wrong
-          way</para>
-        </listitem>
-      </itemizedlist>
-
-      <para>The <literal>HibernateException</literal>, which wraps most of the
-      errors that can occur in a Hibernate persistence layer, is an unchecked
-      exception. Note that Hibernate might also throw other unchecked
-      exceptions which are not a <literal>HibernateException</literal>. These
-      are, again, not recoverable and appropriate action should be
-      taken.</para>
-
-      <para>Hibernate wraps <literal>SQLException</literal>s thrown while
-      interacting with the database in a <literal>JDBCException</literal>. In
-      fact, Hibernate will attempt to convert the eexception into a more
-      meningful subclass of <literal>JDBCException</literal>. The underlying
-      <literal>SQLException</literal> is always available via
-      <literal>JDBCException.getCause()</literal>. Hibernate converts the
-      <literal>SQLException</literal> into an appropriate
-      <literal>JDBCException</literal> subclass using the
-      <literal>SQLExceptionConverter</literal> attached to the
-      <literal>SessionFactory</literal>. By default, the
-      <literal>SQLExceptionConverter</literal> is defined by the configured
-      dialect; however, it is also possible to plug in a custom implementation
-      (see the javadocs for the
-      <literal>SQLExceptionConverterFactory</literal> class for details). The
-      standard <literal>JDBCException</literal> subtypes are:</para>
-
-      <itemizedlist spacing="compact">
-        <listitem>
-          <para><literal>JDBCConnectionException</literal> - indicates an
-          error with the underlying JDBC communication.</para>
-        </listitem>
-
-        <listitem>
-          <para><literal>SQLGrammarException</literal> - indicates a grammar
-          or syntax problem with the issued SQL.</para>
-        </listitem>
-
-        <listitem>
-          <para><literal>ConstraintViolationException</literal> - indicates
-          some form of integrity constraint violation.</para>
-        </listitem>
-
-        <listitem>
-          <para><literal>LockAcquisitionException</literal> - indicates an
-          error acquiring a lock level necessary to perform the requested
-          operation.</para>
-        </listitem>
-
-        <listitem>
-          <para><literal>GenericJDBCException</literal> - a generic exception
-          which did not fall into any of the other categories.</para>
-        </listitem>
-      </itemizedlist>
-    </sect2>
-  </sect1>
-
-  <sect1>
-    <title>EXTENDED Persistence Context</title>
-
-    <para>All application managed entity manager and container managed
-    persistence contexts defined as such are <literal>EXTENDED</literal>. This
-    means that the persistence context type goes beyond the transaction life
-    cycle. We should then understand what happens to operations made outside
-    the scope of a transaction.</para>
-
-    <para>In an <literal>EXTENDED</literal> persistence context, all read only
-    operations of the entity manager can be executed outside a transaction
-    (<literal>find()</literal>, <literal>getReference()</literal>,
-    <literal>refresh()</literal>, and read queries). Some modifications
-    operations can be executed outside a transaction, but they are queued
-    until the persistence context join a transaction: this is the case of
-    <literal>persist()</literal>,
-    <literal><literal>merge()</literal></literal>,
-    <literal>remove()</literal>. Some operations cannot be called outside a
-    transaction: <literal>flush()</literal>, <literal>lock()</literal>, and
-    update/delete queries.</para>
-
-    <sect2>
-      <title>Container Managed Entity Manager</title>
-
-      <para>When using an EXTENDED persistence context with a container
-      managed entity manager, the lifecycle of the persistence context is
-      binded to the lifecycle of the Stateful Session Bean. Plus if the entity
-      manager is created outside a transaction, modifications operations
-      (persist, merge, remove) are queued in the persistence context and not
-      executed to the database.</para>
-
-      <para>When a method of the stateful session bean involved or starting a
-      transaction is later called, the entity manager join the transaction.
-      All queued operation will then be executed to synchronize the
-      persistence context.</para>
-
-      <para>This is perfect to implement the
-      <literal>entitymanager-per-conversation</literal> pattern. A stateful
-      session bean represents the conversation implementation. All
-      intermediate conversation work will be processed in methods not
-      involving transaction. The end of the conversation will be processed
-      inside a <literal>JTA</literal> transaction. Hence all queued operations
-      will be executed to the database and commited. If you are interested in
-      the notion of conversation inside your application, have a look at JBoss
-      Seam. Jboss Seam emphasizes the concept of conversation and entity
-      manager lifecycle and bind EJB3 and JSF together.</para>
-    </sect2>
-
-    <sect2>
-      <title>Application Managed Entity Manager</title>
-
-      <para>Application-managed entity manager are always
-      <literal>EXTENDED</literal>. When you create an entity manager inside a
-      transaction, the entity manager automatically join the current
-      transaction. If the entity manager is created outside a transaction, the
-      entity manager will queue the modification operations. When</para>
-
-      <itemizedlist>
-        <listitem>
-          <para><methodname>entityManager.joinTransaction()</methodname> is
-          called when a JTA transaction is active for a <literal>JTA</literal>
-          entity manager</para>
-        </listitem>
-
-        <listitem>
-          <para><literal>entityManager.getTransaction().begin()</literal> is
-          called for a <literal>RESOURCE_LOCAL</literal> entity manager</para>
-        </listitem>
-      </itemizedlist>
-
-      <para>the entity manager join the transaction and all the queued
-      operations will then be executed to synchronize the persistence
-      context.</para>
-
-      <para>It is not legal to call
-      <methodname>entityManager.joinTransaction()</methodname> if no JTA
-      transaction is involved.</para>
-    </sect2>
-  </sect1>
-
-  <sect1 id="transactions-optimistic">
-    <title>Optimistic concurrency control</title>
-
-    <para>The only approach that is consistent with high concurrency and high
-    scalability is optimistic concurrency control with versioning. Version
-    checking uses version numbers, or timestamps, to detect conflicting
-    updates (and to prevent lost updates). Hibernate provides for three
-    possible approaches to writing application code that uses optimistic
-    concurrency. The use cases we show are in the context of long application
-    transactions but version checking also has the benefit of preventing lost
-    updates in single database transactions.</para>
-
-    <sect2 id="transactions-optimistic-manual">
-      <title>Application version checking</title>
-
-      <para>In an implementation without much help from the persistence
-      mechanism, each interaction with the database occurs in a new
-      <literal>EntityManager</literal> and the developer is responsible for
-      reloading all persistent instances from the database before manipulating
-      them. This approach forces the application to carry out its own version
-      checking to ensure application transaction isolation. This approach is
-      the least efficient in terms of database access. It is the approach most
-      similar to EJB2 entities:</para>
-
-      <programlisting>// foo is an instance loaded by a previous entity manager
-em = factory.createEntityManager();
-EntityTransaction t = em.getTransaction();
-t.begin();
-int oldVersion = foo.getVersion();
-Foo dbFoo = em.find( foo.getClass(), foo.getKey() ); // load the current state
-if ( dbFoo.getVersion()!=foo.getVersion ) throw new StaleObjectStateException();
-dbFoo.setProperty("bar");
-t.commit();
-em.close();</programlisting>
-
-      <para>The <literal>version</literal> property is mapped using
-      <literal>@Version</literal>, and the entity manager will automatically
-      increment it during flush if the entity is dirty.</para>
-
-      <para>Of course, if you are operating in a low-data-concurrency
-      environment and don't require version checking, you may use this
-      approach and just skip the version check. In that case, <emphasis>last
-      commit wins</emphasis> will be the default strategy for your long
-      application transactions. Keep in mind that this might confuse the users
-      of the application, as they might experience lost updates without error
-      messages or a chance to merge conflicting changes.</para>
-
-      <para>Clearly, manual version checking is only feasible in very trivial
-      circumstances and not practical for most applications. Often not only
-      single instances, but complete graphs of modified ojects have to be
-      checked. Hibernate offers automatic version checking with either
-      detached instances or an extended entity manager and persistence context
-      as the design paradigm.</para>
-    </sect2>
-
-    <sect2 id="transactions-optimistic-longsession">
-      <title>Extended entity manager and automatic versioning</title>
-
-      <para>A single persistence context is used for the whole application
-      transaction. The entity manager checks instance versions at flush time,
-      throwing an exception if concurrent modification is detected. It's up to
-      the developer to catch and handle this exception (common options are the
-      opportunity for the user to merge his changes or to restart the business
-      process with non-stale data).</para>
-
-      <para>In an <literal>EXTENDED</literal> persistence context, all
-      operations made outside an active transaction are queued. The
-      <literal>EXTENDED</literal> persistence context is flushed when executed
-      in an active transaction (at worse at commit time).</para>
-
-      <para>The <literal>Entity Manager</literal> is disconnected from any
-      underlying JDBC connection when waiting for user interaction. In an
-      application-managed extended entity manager, this occurs automatically
-      at transaction completion. In a stateful session bean holding a
-      container-managed extended entity manager (i.e. a SFSB annotated with
-      <literal>@PersistenceContext(EXTENDED)</literal>), this occurs
-      transparently as well. This approach is the most efficient in terms of
-      database access. The application need not concern itself with version
-      checking or with merging detached instances, nor does it have to reload
-      instances in every database transaction. For those who might be
-      concerned by the number of connections opened and closed, remember that
-      the connection provider should be a connection pool, so there is no
-      performance impact. The following examples show the idiom in a
-      non-managed environment:</para>
-
-      <programlisting>// foo is an instance loaded earlier by the extended entity manager
-em.getTransaction.begin(); // new connection to data store is obtained and tx started
-foo.setProperty("bar");
-em.getTransaction().commit();  // End tx, flush and check version, disconnect</programlisting>
-
-      <para>The <literal>foo</literal> object still knows which
-      <literal>persistence context</literal> it was loaded in. With
-      <literal>getTransaction.begin();</literal> the entity manager obtains a
-      new connection and resumes the persistence context. The method
-      <literal>getTransaction().commit()</literal> will not only flush and
-      check versions, but also disconnects the entity manager from the JDBC
-      connection and return the connection to the pool.</para>
-
-      <para>This pattern is problematic if the persistence context is too big
-      to be stored during user think time, and if you don't know where to
-      store it. E.g. the <literal>HttpSession</literal> should be kept as
-      small as possible. As the persistence context is also the (mandatory)
-      first-level cache and contains all loaded objects, we can probably use
-      this strategy only for a few request/response cycles. This is indeed
-      recommended, as the persistence context will soon also have stale
-      data.</para>
-
-      <para>It is up to you where you store the extended entity manager during
-      requests, inside an EJB3 container you simply use a stateful session
-      bean as described above. Don't transfer it to the web layer (or even
-      serialize it to a separate tier) to store it in the
-      <literal>HttpSession</literal>. In a non-managed, two-tiered environment
-      the <literal>HttpSession</literal> might indeed be the right place to
-      store it.</para>
-    </sect2>
-
-    <sect2 id="transactions-optimistic-detached">
-      <title>Detached objects and automatic versioning</title>
-
-      <para>With this paradigm, each interaction with the data store occurs in
-      a new persistence context. However, the same persistent instances are
-      reused for each interaction with the database. The application
-      manipulates the state of detached instances originally loaded in another
-      persistence context and then merges the changes using
-      <literal>EntityManager.merge()</literal>:</para>
-
-      <programlisting>// foo is an instance loaded by a non-extended entity manager
-foo.setProperty("bar");
-entityManager = factory.createEntityManager();
-entityManager.getTransaction().begin();
-managedFoo = session.merge(foo); // discard foo and from now on use managedFoo
-entityManager.getTransaction().commit();
-entityManager.close();</programlisting>
-
-      <para>Again, the entity manager will check instance versions during
-      flush, throwing an exception if conflicting updates occured.</para>
-    </sect2>
-  </sect1>
-</chapter>
\ No newline at end of file

Copied: trunk/HibernateExt/entitymanager/doc/reference/en/modules/transactions.xml (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/doc/reference/en/modules/transactions.xml)
===================================================================
--- trunk/HibernateExt/entitymanager/doc/reference/en/modules/transactions.xml	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/doc/reference/en/modules/transactions.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,878 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<chapter id="transactions" revision="1">
+  <title>Transactions and Concurrency</title>
+
+  <para>The most important point about Hibernate Entity Manager and
+  concurrency control is that it is very easy to understand. Hibernate Entity
+  Manager directly uses JDBC connections and JTA resources without adding any
+  additional locking behavior. We highly recommend you spend some time with
+  the JDBC, ANSI, and transaction isolation specification of your database
+  management system. Hibernate Entity Manager only adds automatic versioning
+  but does not lock objects in memory or change the isolation level of your
+  database transactions. Basically, use Hibernate Entity Manager like you
+  would use direct JDBC (or JTA/CMT) with your database resources.</para>
+
+  <para>We start the discussion of concurrency control in Hibernate with the
+  granularity of <literal>EntityManagerFactory</literal>, and
+  <literal>EntityManager</literal>, as well as database transactions and long
+  units of work..</para>
+
+  <para>In this chapter, and unless explicitly expressed, we will mix and
+  match the concept of entity manager and persistence context. One is an API
+  and programming object, the other a definition of scope. However, keep in
+  mind the essential difference. A persistence context is usually bound to a
+  JTA transaction in Java EE, and a persistence context starts and ends at
+  transaction boundaries (transaction-scoped) unless you use an extended
+  entity manager. Please refer to <xref
+  linkend="architecture-ejb-persistctxscope" /> for more information.</para>
+
+  <sect1 id="transactions-basics">
+    <title>Entity manager and transaction scopes</title>
+
+    <para>A <literal>EntityManagerFactory</literal> is an expensive-to-create,
+    threadsafe object intended to be shared by all application threads. It is
+    created once, usually on application startup.</para>
+
+    <para>An <literal>EntityManager</literal> is an inexpensive,
+    non-threadsafe object that should be used once, for a single business
+    process, a single unit of work, and then discarded. An
+    <literal>EntityManager</literal> will not obtain a JDBC
+    <literal>Connection</literal> (or a <literal>Datasource</literal>) unless
+    it is needed, so you may safely open and close an
+    <literal>EntityManager</literal> even if you are not sure that data access
+    will be needed to serve a particular request. (This becomes important as
+    soon as you are implementing some of the following patterns using request
+    interception.)</para>
+
+    <para>To complete this picture you also have to think about database
+    transactions. A database transaction has to be as short as possible, to
+    reduce lock contention in the database. Long database transactions will
+    prevent your application from scaling to highly concurrent load.</para>
+
+    <para>What is the scope of a unit of work? Can a single Hibernate
+    <literal>EntityManager</literal> span several database transactions or is
+    this a one-to-one relationship of scopes? When should you open and close a
+    <literal>Session</literal> and how do you demarcate the database
+    transaction boundaries?</para>
+
+    <sect2 id="transactions-basics-uow">
+      <title>Unit of work</title>
+
+      <para>First, don't use the
+      <emphasis>entitymanager-per-operation</emphasis> antipattern, that is,
+      don't open and close an <literal>EntityManager</literal> for every
+      simple database call in a single thread! Of course, the same is true for
+      database transactions. Database calls in an application are made using a
+      planned sequence, they are grouped into atomic units of work. (Note that
+      this also means that auto-commit after every single SQL statement is
+      useless in an application, this mode is intended for ad-hoc SQL console
+      work.)</para>
+
+      <para>The most common pattern in a multi-user client/server application
+      is <emphasis>entitymanager-per-request</emphasis>. In this model, a
+      request from the client is send to the server (where the EJB3
+      persistence layer runs), a new <literal>EntityManager</literal> is
+      opened, and all database operations are executed in this unit of work.
+      Once the work has been completed (and the response for the client has
+      been prepared), the persistence context is flushed and closed, as well
+      as the entity manager object. You would also use a single database
+      transaction to serve the clients request. The relationship between the
+      two is one-to-one and this model is a perfect fit for many
+      applications.</para>
+
+      <para>This is the default EJB3 persistence model in a Java EE
+      environment (JTA bounded, transaction-scoped persistence context);
+      injected (or looked up) entity managers share the same persistence
+      context for a particular JTA transaction. The beauty of EJB3 is that you
+      don't have to care about that anymore and just see data access through
+      entity manager and demaraction of transaction scope on session beans as
+      completely orthogonal.</para>
+
+      <para>The challenge is the implementation of this (and other) behavior
+      outside an EJB3 container: not only has the
+      <literal>EntityManager</literal> and resource-local transaction to be
+      started and ended correctly, but they also have to be accessible for
+      data access operations. The demarcation of a unit of work is ideally
+      implemented using an interceptor that runs when a request hits the
+      non-EJB3 container server and before the response will be send (i.e. a
+      <literal>ServletFilter</literal> if you are using a standalone servlet
+      container). We recommend to bind the <literal>EntityManager</literal> to
+      the thread that serves the request, using a
+      <literal>ThreadLocal</literal> variable. This allows easy access (like
+      accessing a static variable) in all code that runs in this thread.
+      Depending on the database transaction demarcation mechanism you chose,
+      you might also keep the transaction context in a
+      <literal>ThreadLocal</literal> variable. The implementation patterns for
+      this are known as <emphasis>ThreadLocal Session</emphasis> and
+      <emphasis>Open Session in View</emphasis> in the Hibernate community.
+      You can easily extend the <literal>HibernateUtil</literal> shown in the
+      Hibernate reference documentation to implement this pattern, you don't
+      need any external software (it's in fact very trivial). Of course, you'd
+      have to find a way to implement an interceptor and set it up in your
+      environment. See the Hibernate website for tips and examples. Once
+      again, remember that your first choice is naturally an EJB3 container -
+      preferably a light and modular one such as JBoss application
+      server.</para>
+    </sect2>
+
+    <sect2 id="transactions-basics-apptx">
+      <title>Long units of work</title>
+
+      <para>The entitymanager-per-request pattern is not the only useful
+      concept you can use to design units of work. Many business processes
+      require a whole series of interactions with the user interleaved with
+      database accesses. In web and enterprise applications it is not
+      acceptable for a database transaction to span a user interaction with
+      possibly long waiting time between requests. Consider the following
+      example:</para>
+
+      <itemizedlist>
+        <listitem>
+          <para>The first screen of a dialog opens, the data seen by the user
+          has been loaded in a particular <literal>EntityManager</literal> and
+          resource-local transaction. The user is free to modify the detached
+          objects.</para>
+        </listitem>
+
+        <listitem>
+          <para>The user clicks "Save" after 5 minutes and expects his
+          modifications to be made persistent; he also expects that he was the
+          only person editing this information and that no conflicting
+          modification can occur.</para>
+        </listitem>
+      </itemizedlist>
+
+      <para>We call this unit of work, from the point of view of the user, a
+      long running <emphasis>application transaction</emphasis>. There are
+      many ways how you can implement this in your application.</para>
+
+      <para>A first naive implementation might keep the
+      <literal>EntityManager</literal> and database transaction open during
+      user think time, with locks held in the database to prevent concurrent
+      modification, and to guarantee isolation and atomicity. This is of
+      course an anti-pattern, a pessimistic approach, since lock contention
+      would not allow the application to scale with the number of concurrent
+      users.</para>
+
+      <para>Clearly, we have to use several database transactions to implement
+      the application transaction. In this case, maintaining isolation of
+      business processes becomes the partial responsibility of the application
+      tier. A single application transaction usually spans several database
+      transactions. It will be atomic if only one of these database
+      transactions (the last one) stores the updated data, all others simply
+      read data (e.g. in a wizard-style dialog spanning several
+      request/response cycles). This is easier to implement than it might
+      sound, especially if you use EJB3 entity manager and persistence context
+      features:</para>
+
+      <itemizedlist>
+        <listitem>
+          <para><emphasis>Automatic Versioning</emphasis> - An entity manager
+          can do automatic optimistic concurrency control for you, it can
+          automatically detect if a concurrent modification occured during
+          user think time (usually by comparing version numbers or timestamps
+          when updating the data in the final resource-local
+          transaction).</para>
+        </listitem>
+
+        <listitem>
+          <para><emphasis>Detached Entities</emphasis> - If you decide to use
+          the already discussed <emphasis>entity-per-request</emphasis>
+          pattern, all loaded instances will be in detached state during user
+          think time. The entity manager allows you to merge the detached
+          (modified) state and persist the modifications, the pattern is
+          called
+          <emphasis>entitymanager-per-request-with-detached-entities</emphasis>.
+          Automatic versioning is used to isolate concurrent
+          modifications.</para>
+        </listitem>
+
+        <listitem>
+          <para><emphasis>Extended Entity Manager</emphasis> - The Hibernate
+          Entity Manager may be disconnected from the underlying JDBC
+          connection between two client calls and reconnected when a new
+          client request occurs. This pattern is known as
+          <emphasis>entitymanager-per-application-transaction</emphasis> and
+          makes even merging unnecessary. An extend persistence context is
+          responsible to collect and retain any modification (persist, merge,
+          remove) made outside a transaction. The next client call made inside
+          an active transaction (typically the last operation of a user
+          conversation) will execute all queued modifications. Automatic
+          versioning is used to isolate concurrent modifications.</para>
+        </listitem>
+      </itemizedlist>
+
+      <para>Both
+      <emphasis>entitymanager-per-request-with-detached-objects</emphasis> and
+      <emphasis>entitymanager-per-application-transaction</emphasis> have
+      advantages and disadvantages, we discuss them later in this chapter in
+      the context of optimistic concurrency control.</para>
+
+      <para>TODO: This note should probably come later.</para>
+    </sect2>
+
+    <sect2 id="transactions-basics-identity">
+      <title>Considering object identity</title>
+
+      <para>An application may concurrently access the same persistent state
+      in two different persistence contexts. However, an instance of a managed
+      class is never shared between two persistence contexts. Hence there are
+      two different notions of identity:</para>
+
+      <variablelist spacing="compact">
+        <varlistentry>
+          <term>Database Identity</term>
+
+          <listitem>
+            <para>
+              <literal>foo.getId().equals( bar.getId() )</literal>
+            </para>
+          </listitem>
+        </varlistentry>
+
+        <varlistentry>
+          <term>JVM Identity</term>
+
+          <listitem>
+            <para>
+              <literal>foo==bar</literal>
+            </para>
+          </listitem>
+        </varlistentry>
+      </variablelist>
+
+      <para>Then for objects attached to a <emphasis>particular</emphasis>
+      persistence context (i.e. in the scope of an
+      <literal>EntityManager</literal>) the two notions are equivalent, and
+      JVM identity for database identity is guaranteed by the Hibernate Entity
+      Manager. However, while the application might concurrently access the
+      "same" (persistent identity) business object in two different
+      persistence contexts, the two instances will actually be "different"
+      (JVM identity). Conflicts are resolved using (automatic versioning) at
+      flush/commit time, using an optimistic approach.</para>
+
+      <para>This approach leaves Hibernate and the database to worry about
+      concurrency; it also provides the best scalability, since guaranteeing
+      identity in single-threaded units of work only doesn't need expensive
+      locking or other means of synchronization. The application never needs
+      to synchronize on any business object, as long as it sticks to a single
+      thread per <literal>EntityManager</literal>. Within a persistence
+      context, the application may safely use <literal>==</literal> to compare
+      entities.</para>
+
+      <para>However, an application that uses <literal>==</literal> outside of
+      a persistence context might see unexpected results. This might occur
+      even in some unexpected places, for example, if you put two detached
+      instances into the same <literal>Set</literal>. Both might have the same
+      database identity (i.e. they represent the same row), but JVM identity
+      is by definition not guaranteed for instances in detached state. The
+      developer has to override the <literal>equals()</literal> and
+      <literal>hashCode()</literal> methods in persistent classes and
+      implement his own notion of object equality. There is one caveat: Never
+      use the database identifier to implement equality, use a business key, a
+      combination of unique, usually immutable, attributes. The database
+      identifier will change if a transient entity is made persistent (see the
+      contract of the <literal>persist()</literal> operation). If the
+      transient instance (usually together with detached instances) is held in
+      a <literal>Set</literal>, changing the hashcode breaks the contract of
+      the <literal>Set</literal>. Attributes for good business keys don't have
+      to be as stable as database primary keys, you only have to guarantee
+      stability as long as the objects are in the same <literal>Set</literal>.
+      See the Hibernate website for a more thorough discussion of this issue.
+      Also note that this is not a Hibernate issue, but simply how Java object
+      identity and equality has to be implemented.</para>
+    </sect2>
+
+    <sect2 id="transactions-basics-issues">
+      <title>Common concurrency control issues</title>
+
+      <para>Never use the anti-patterns
+      <emphasis>entitymanager-per-user-session</emphasis> or
+      <emphasis>entitymanager-per-application</emphasis> (of course, there are
+      rare exceptions to this rule, e.g. entitymanager-per-application might
+      be acceptable in a desktop application, with manual flushing of the
+      persistence context). Note that some of the following issues might also
+      appear with the recommended patterns, make sure you understand the
+      implications before making a design decision:</para>
+
+      <itemizedlist>
+        <listitem>
+          <para>An entity manager is not thread-safe. Things which are
+          supposed to work concurrently, like HTTP requests, session beans, or
+          Swing workers, will cause race conditions if an
+          <literal>EntityManager</literal> instance would be shared. If you
+          keep your Hibernate <literal>EntityManager</literal> in your
+          <literal>HttpSession</literal> (discussed later), you should
+          consider synchronizing access to your Http session. Otherwise, a
+          user that clicks reload fast enough may use the same
+          <literal>EntityManager</literal> in two concurrently running
+          threads. You will very likely have provisions for this case already
+          in place, for other non-threadsafe but session-scoped
+          objects.</para>
+        </listitem>
+
+        <listitem>
+          <para>An exception thrown by the Entity Manager means you have to
+          rollback your database transaction and close the
+          <literal>EntityManager</literal> immediately (discussed later in
+          more detail). If your <literal>EntityManager</literal> is bound to
+          the application, you have to stop the application. Rolling back the
+          database transaction doesn't put your business objects back into the
+          state they were at the start of the transaction. This means the
+          database state and the business objects do get out of sync. Usually
+          this is not a problem, because exceptions are not recoverable and
+          you have to start over your unit of work after rollback
+          anyway.</para>
+        </listitem>
+
+        <listitem>
+          <para>The persistence context caches every object that is in managed
+          state (watched and checked for dirty state by Hibernate). This means
+          it grows endlessly until you get an
+          <classname>OutOfMemoryException</classname>, if you keep it open for
+          a long time or simply load too much data. One solution for this is
+          some kind batch processing with regular flushing of the persistence
+          context, but you should consider using a database stored procedure
+          if you need mass data operations. Some solutions for this problem
+          are shown in <xref linkend="batch" />. Keeping a persistence context
+          open for the duration of a user session also means a high
+          probability of stale data, which you have to know about and control
+          appropriately.</para>
+        </listitem>
+      </itemizedlist>
+    </sect2>
+  </sect1>
+
+  <sect1 id="transactions-demarcation">
+    <title>Database transaction demarcation</title>
+
+    <para>Datatabase (or system) transaction boundaries are always necessary.
+    No communication with the database can occur outside of a database
+    transaction (this seems to confuse many developers who are used to the
+    auto-commit mode). Always use clear transaction boundaries, even for
+    read-only operations. Depending on your isolation level and database
+    capabilities this might not be required but there is no downside if you
+    always demarcate transactions explicitly. You'll have to do operations
+    outside a transaction, though, when you'll need to retain modifications in
+    an <literal>EXTENDED</literal> persistence context.</para>
+
+    <para>An EJB3 application can run in non-managed (i.e. standalone, simple
+    Web- or Swing applications) and managed J2EE environments. In a
+    non-managed environment, an <literal>EntityManagerFactory</literal> is
+    usually responsible for its own database connection pool. The application
+    developer has to manually set transaction boundaries, in other words,
+    begin, commit, or rollback database transactions itself. A managed
+    environment usually provides container-managed transactions, with the
+    transaction assembly defined declaratively through annotations of EJB
+    session beans, for example. Programmatic transaction demarcation is then
+    no longer necessary, even flushing the <literal>EntityManager</literal> is
+    done automatically.</para>
+
+    <para>Usually, ending a unit of work involves four distinct phases:</para>
+
+    <itemizedlist spacing="compact">
+      <listitem>
+        <para>commit the (resource-local or JTA) transaction (this
+        automatically flushes the entity manager and persistence
+        context)</para>
+      </listitem>
+
+      <listitem>
+        <para>close the entity manager (if using an application-managed entity
+        manager)</para>
+      </listitem>
+
+      <listitem>
+        <para>handle exceptions</para>
+      </listitem>
+    </itemizedlist>
+
+    <para>We'll now have a closer look at transaction demarcation and
+    exception handling in both managed- and non-managed environments.</para>
+
+    <sect2 id="transactions-demarcation-nonmanaged">
+      <title>Non-managed environment</title>
+
+      <para>If an EJB3 persistence layer runs in a non-managed environment,
+      database connections are usually handled by Hibernate's pooling
+      mechanism behind the scenes. The common entity manager and transaction
+      handling idiom looks like this:</para>
+
+      <programlisting>// Non-managed environment idiom
+EntityManager em = emf.createEntityManager();
+EntityTransaction tx = null;
+try {
+    tx = em.getTransaction();
+    tx.begin();
+
+    // do some work
+    ...
+
+    tx.commit();
+}
+catch (RuntimeException e) {
+    if ( tx != null &amp;&amp; tx.isActive() ) tx.rollback();
+    throw e; // or display error message
+}
+finally {
+    em.close();
+}</programlisting>
+
+      <para>You don't have to <literal>flush()</literal> the
+      <literal>EntityManager</literal> explicitly - the call to
+      <literal>commit()</literal> automatically triggers the
+      synchronization.</para>
+
+      <para>A call to <literal>close()</literal> marks the end of an
+      <literal>EntityManager</literal>. The main implication of
+      <literal>close()</literal> is the release of resources - make sure you
+      always close and never outside of guaranteed finally block.</para>
+
+      <para>You will very likely never see this idiom in business code in a
+      normal application; fatal (system) exceptions should always be caught at
+      the "top". In other words, the code that executes entity manager calls
+      (in the persistence layer) and the code that handles
+      <literal>RuntimeException</literal> (and usually can only clean up and
+      exit) are in different layers. This can be a challenge to design
+      yourself and you should use J2EE/EJB container services whenever they
+      are available. Exception handling is discussed later in this
+      chapter.</para>
+
+      <sect3>
+        <title>EntityTransaction</title>
+
+        <para>In a JTA environment, you don't need any extra API to interact
+        with the transaction in your environment. Simply use transaction
+        declaration or the JTA APIs.</para>
+
+        <para>If you are using a <literal>RESOURCE_LOCAL</literal> entity
+        manager, you need to demarcate your transaction boundaries through the
+        <literal>EntityTransaction</literal> API. You can get an
+        <literal>EntityTransaction</literal> through
+        <literal>entityManager.getTransaction()</literal>. This
+        <literal>EntityTransaction</literal> API provides the regular
+        <methodname>begin()</methodname>, <methodname>commit()</methodname>,
+        <methodname>rollback()</methodname> and
+        <methodname>isActive()</methodname> methods. It also provide a way to
+        mark a transaction as rollback only, ie force the transaction to
+        rollback. This is very similar to the JTA operation
+        <methodname>setRollbackOnly()</methodname>. When a
+        <literal>commit()</literal> operation fail and/or if the transaction
+        is marked as <literal>setRollbackOnly()</literal>, the
+        <literal>commit()</literal> method will try to rollback the
+        transaction and raise a
+        <literal>javax.transaction.RollbackException</literal>.</para>
+
+        <para>In a <literal>JTA</literal> entity manager,
+        <literal>entityManager.getTransaction()</literal> calls are not
+        permitted.</para>
+      </sect3>
+    </sect2>
+
+    <sect2 id="transactions-demarcation-jta">
+      <title>Using JTA</title>
+
+      <para>If your persistence layer runs in an application server (e.g.
+      behind EJB3 session beans), every datasource connection obtained
+      internally by the entity manager will automatically be part of the
+      global JTA transaction. Hibernate offers two strategies for this
+      integration.</para>
+
+      <para>If you use bean-managed transactions (BMT), the code will look
+      like this:</para>
+
+      <programlisting>// BMT idiom
+ at Resource public UserTransaction utx;
+ at Resource public EntityManagerFactory factory;
+
+public void doBusiness() {
+    EntityManager em = factory.createEntityManager();
+    try {
+
+    // do some work
+    ...
+
+    utx.commit();
+}
+catch (RuntimeException e) {
+    if (utx != null) utx.rollback();
+    throw e; // or display error message
+}
+finally {
+    em.close();
+}</programlisting>
+
+      <para>With Container Managed Transactions (CMT) in an EJB3 container,
+      transaction demarcation is done in session bean annotations or
+      deployment descriptors, not programatically. The
+      <literal>EntityManager</literal> will automatically be flushed on
+      transaction completion (and if you have injected or lookup the
+      <literal>EntityManager</literal>, it will be also closed automatically).
+      If an exception occurs during the <literal>EntityManager</literal> use,
+      transaction rollback occurs automatically if you don't catch the
+      exception. Since <literal>EntityManager</literal> exceptions are
+      <literal>RuntimeException</literal>s they will rollback the transaction
+      as per the EJB specification (system exception vs. application
+      exception).</para>
+
+      <para>It is important to let Hibernate EntityManager define the
+      <literal>hibernate.transaction.factory_class</literal> (ie not
+      overriding this value). Remember to also set
+      <literal>org.hibernate.transaction.manager_lookup_class</literal>.</para>
+
+      <para>If you work in a CMT environment, you might also want to use the
+      same entity manager in different parts of your code. Typically, in a
+      non-managed environment you would use a <literal>ThreadLocal</literal>
+      variable to hold the entity manager, but a single EJB request might
+      execute in different threads (e.g. session bean calling another session
+      bean). The EJB3 container takes care of the persistence context
+      propagation for you. Either using injection or lookup, the EJB3
+      container will return an entity manager with the same persistence
+      context bound to the JTA context if any, or create a new one and bind it
+      (see <xref linkend="architecture-ejb-persistctxpropagation" /> .)</para>
+
+      <para>Our entity manager/transaction management idiom for CMT and EJB3
+      container-use is reduced to this:</para>
+
+      <programlisting>//CMT idiom through injection
+ at PersistenceContext(name="sample") EntityManager em;</programlisting>
+
+      <para>In other words, all you have to do in a managed environment is to
+      inject the <literal>EntityManager</literal>, do your data access work,
+      and leave the rest to the container. Transaction boundaries are set
+      declaratively in the annotations or deployment descriptors of your
+      session beans. The lifecycle of the entity manager and persistence
+      context is completely managed by the container.</para>
+
+      <para>TODO: The following paragraph is very confusing, especially the
+      beginning...</para>
+
+      <para>When using particular Hibernate native APIs, one caveat has to be
+      remembered: <literal>after_statement</literal> connection release mode.
+      Due to a silly limitation of the JTA spec, it is not possible for
+      Hibernate to automatically clean up any unclosed
+      <literal>ScrollableResults</literal> or <literal>Iterator</literal>
+      instances returned by <literal>scroll()</literal> or
+      <literal>iterate()</literal>. You <emphasis>must</emphasis> release the
+      underlying database cursor by calling
+      <literal>ScrollableResults.close()</literal> or
+      <literal>Hibernate.close(Iterator)</literal> explicity from a
+      <literal>finally</literal> block. (Of course, most applications can
+      easily avoid using <literal>scroll()</literal> or
+      <literal>iterate()</literal> at all from the CMT code.)</para>
+    </sect2>
+
+    <sect2 id="transactions-demarcation-exceptions">
+      <title>Exception handling</title>
+
+      <para>If the <literal>EntityManager</literal> throws an exception
+      (including any <literal>SQLException</literal>), you should immediately
+      rollback the database transaction, call
+      <literal>EntityManager.close()</literal> (if
+      <methodname>createEntityManager()</methodname> has been called) and
+      discard the <literal>EntityManager</literal> instance. Certain methods
+      of <literal>EntityManager</literal> will <emphasis>not</emphasis> leave
+      the persistence context in a consistent state. No exception thrown by an
+      entity manager can be treated as recoverable. Ensure that the
+      <literal>EntityManager</literal> will be closed by calling
+      <literal>close()</literal> in a <literal>finally</literal> block. Note
+      that a container managed entity manager will do that for you. You just
+      have to let the RuntimeException propagate up to the container.</para>
+
+      <para>The Hibernate entity manager generally raises exceptions which
+      encapsulate the Hibernate core exception. Common exceptions raised by
+      the <literal>EntityManager</literal> API are</para>
+
+      <itemizedlist>
+        <listitem>
+          <para>IllegalArgumentException: something wrong happen</para>
+        </listitem>
+
+        <listitem>
+          <para>EntityNotFoundException: an entity was expected but none match
+          the requirement</para>
+        </listitem>
+
+        <listitem>
+          <para>TransactionRequiredException: this operation has to be in a
+          transaction</para>
+        </listitem>
+
+        <listitem>
+          <para>IllegalStateException: the entity manager is used in a wrong
+          way</para>
+        </listitem>
+      </itemizedlist>
+
+      <para>The <literal>HibernateException</literal>, which wraps most of the
+      errors that can occur in a Hibernate persistence layer, is an unchecked
+      exception. Note that Hibernate might also throw other unchecked
+      exceptions which are not a <literal>HibernateException</literal>. These
+      are, again, not recoverable and appropriate action should be
+      taken.</para>
+
+      <para>Hibernate wraps <literal>SQLException</literal>s thrown while
+      interacting with the database in a <literal>JDBCException</literal>. In
+      fact, Hibernate will attempt to convert the eexception into a more
+      meningful subclass of <literal>JDBCException</literal>. The underlying
+      <literal>SQLException</literal> is always available via
+      <literal>JDBCException.getCause()</literal>. Hibernate converts the
+      <literal>SQLException</literal> into an appropriate
+      <literal>JDBCException</literal> subclass using the
+      <literal>SQLExceptionConverter</literal> attached to the
+      <literal>SessionFactory</literal>. By default, the
+      <literal>SQLExceptionConverter</literal> is defined by the configured
+      dialect; however, it is also possible to plug in a custom implementation
+      (see the javadocs for the
+      <literal>SQLExceptionConverterFactory</literal> class for details). The
+      standard <literal>JDBCException</literal> subtypes are:</para>
+
+      <itemizedlist spacing="compact">
+        <listitem>
+          <para><literal>JDBCConnectionException</literal> - indicates an
+          error with the underlying JDBC communication.</para>
+        </listitem>
+
+        <listitem>
+          <para><literal>SQLGrammarException</literal> - indicates a grammar
+          or syntax problem with the issued SQL.</para>
+        </listitem>
+
+        <listitem>
+          <para><literal>ConstraintViolationException</literal> - indicates
+          some form of integrity constraint violation.</para>
+        </listitem>
+
+        <listitem>
+          <para><literal>LockAcquisitionException</literal> - indicates an
+          error acquiring a lock level necessary to perform the requested
+          operation.</para>
+        </listitem>
+
+        <listitem>
+          <para><literal>GenericJDBCException</literal> - a generic exception
+          which did not fall into any of the other categories.</para>
+        </listitem>
+      </itemizedlist>
+    </sect2>
+  </sect1>
+
+  <sect1>
+    <title>EXTENDED Persistence Context</title>
+
+    <para>All application managed entity manager and container managed
+    persistence contexts defined as such are <literal>EXTENDED</literal>. This
+    means that the persistence context type goes beyond the transaction life
+    cycle. We should then understand what happens to operations made outside
+    the scope of a transaction.</para>
+
+    <para>In an <literal>EXTENDED</literal> persistence context, all read only
+    operations of the entity manager can be executed outside a transaction
+    (<literal>find()</literal>, <literal>getReference()</literal>,
+    <literal>refresh()</literal>, and read queries). Some modifications
+    operations can be executed outside a transaction, but they are queued
+    until the persistence context join a transaction: this is the case of
+    <literal>persist()</literal>,
+    <literal><literal>merge()</literal></literal>,
+    <literal>remove()</literal>. Some operations cannot be called outside a
+    transaction: <literal>flush()</literal>, <literal>lock()</literal>, and
+    update/delete queries.</para>
+
+    <sect2>
+      <title>Container Managed Entity Manager</title>
+
+      <para>When using an EXTENDED persistence context with a container
+      managed entity manager, the lifecycle of the persistence context is
+      binded to the lifecycle of the Stateful Session Bean. Plus if the entity
+      manager is created outside a transaction, modifications operations
+      (persist, merge, remove) are queued in the persistence context and not
+      executed to the database.</para>
+
+      <para>When a method of the stateful session bean involved or starting a
+      transaction is later called, the entity manager join the transaction.
+      All queued operation will then be executed to synchronize the
+      persistence context.</para>
+
+      <para>This is perfect to implement the
+      <literal>entitymanager-per-conversation</literal> pattern. A stateful
+      session bean represents the conversation implementation. All
+      intermediate conversation work will be processed in methods not
+      involving transaction. The end of the conversation will be processed
+      inside a <literal>JTA</literal> transaction. Hence all queued operations
+      will be executed to the database and commited. If you are interested in
+      the notion of conversation inside your application, have a look at JBoss
+      Seam. Jboss Seam emphasizes the concept of conversation and entity
+      manager lifecycle and bind EJB3 and JSF together.</para>
+    </sect2>
+
+    <sect2>
+      <title>Application Managed Entity Manager</title>
+
+      <para>Application-managed entity manager are always
+      <literal>EXTENDED</literal>. When you create an entity manager inside a
+      transaction, the entity manager automatically join the current
+      transaction. If the entity manager is created outside a transaction, the
+      entity manager will queue the modification operations. When</para>
+
+      <itemizedlist>
+        <listitem>
+          <para><methodname>entityManager.joinTransaction()</methodname> is
+          called when a JTA transaction is active for a <literal>JTA</literal>
+          entity manager</para>
+        </listitem>
+
+        <listitem>
+          <para><literal>entityManager.getTransaction().begin()</literal> is
+          called for a <literal>RESOURCE_LOCAL</literal> entity manager</para>
+        </listitem>
+      </itemizedlist>
+
+      <para>the entity manager join the transaction and all the queued
+      operations will then be executed to synchronize the persistence
+      context.</para>
+
+      <para>It is not legal to call
+      <methodname>entityManager.joinTransaction()</methodname> if no JTA
+      transaction is involved.</para>
+    </sect2>
+  </sect1>
+
+  <sect1 id="transactions-optimistic">
+    <title>Optimistic concurrency control</title>
+
+    <para>The only approach that is consistent with high concurrency and high
+    scalability is optimistic concurrency control with versioning. Version
+    checking uses version numbers, or timestamps, to detect conflicting
+    updates (and to prevent lost updates). Hibernate provides for three
+    possible approaches to writing application code that uses optimistic
+    concurrency. The use cases we show are in the context of long application
+    transactions but version checking also has the benefit of preventing lost
+    updates in single database transactions.</para>
+
+    <sect2 id="transactions-optimistic-manual">
+      <title>Application version checking</title>
+
+      <para>In an implementation without much help from the persistence
+      mechanism, each interaction with the database occurs in a new
+      <literal>EntityManager</literal> and the developer is responsible for
+      reloading all persistent instances from the database before manipulating
+      them. This approach forces the application to carry out its own version
+      checking to ensure application transaction isolation. This approach is
+      the least efficient in terms of database access. It is the approach most
+      similar to EJB2 entities:</para>
+
+      <programlisting>// foo is an instance loaded by a previous entity manager
+em = factory.createEntityManager();
+EntityTransaction t = em.getTransaction();
+t.begin();
+int oldVersion = foo.getVersion();
+Foo dbFoo = em.find( foo.getClass(), foo.getKey() ); // load the current state
+if ( dbFoo.getVersion()!=foo.getVersion ) throw new StaleObjectStateException();
+dbFoo.setProperty("bar");
+t.commit();
+em.close();</programlisting>
+
+      <para>The <literal>version</literal> property is mapped using
+      <literal>@Version</literal>, and the entity manager will automatically
+      increment it during flush if the entity is dirty.</para>
+
+      <para>Of course, if you are operating in a low-data-concurrency
+      environment and don't require version checking, you may use this
+      approach and just skip the version check. In that case, <emphasis>last
+      commit wins</emphasis> will be the default strategy for your long
+      application transactions. Keep in mind that this might confuse the users
+      of the application, as they might experience lost updates without error
+      messages or a chance to merge conflicting changes.</para>
+
+      <para>Clearly, manual version checking is only feasible in very trivial
+      circumstances and not practical for most applications. Often not only
+      single instances, but complete graphs of modified ojects have to be
+      checked. Hibernate offers automatic version checking with either
+      detached instances or an extended entity manager and persistence context
+      as the design paradigm.</para>
+    </sect2>
+
+    <sect2 id="transactions-optimistic-longsession">
+      <title>Extended entity manager and automatic versioning</title>
+
+      <para>A single persistence context is used for the whole application
+      transaction. The entity manager checks instance versions at flush time,
+      throwing an exception if concurrent modification is detected. It's up to
+      the developer to catch and handle this exception (common options are the
+      opportunity for the user to merge his changes or to restart the business
+      process with non-stale data).</para>
+
+      <para>In an <literal>EXTENDED</literal> persistence context, all
+      operations made outside an active transaction are queued. The
+      <literal>EXTENDED</literal> persistence context is flushed when executed
+      in an active transaction (at worse at commit time).</para>
+
+      <para>The <literal>Entity Manager</literal> is disconnected from any
+      underlying JDBC connection when waiting for user interaction. In an
+      application-managed extended entity manager, this occurs automatically
+      at transaction completion. In a stateful session bean holding a
+      container-managed extended entity manager (i.e. a SFSB annotated with
+      <literal>@PersistenceContext(EXTENDED)</literal>), this occurs
+      transparently as well. This approach is the most efficient in terms of
+      database access. The application need not concern itself with version
+      checking or with merging detached instances, nor does it have to reload
+      instances in every database transaction. For those who might be
+      concerned by the number of connections opened and closed, remember that
+      the connection provider should be a connection pool, so there is no
+      performance impact. The following examples show the idiom in a
+      non-managed environment:</para>
+
+      <programlisting>// foo is an instance loaded earlier by the extended entity manager
+em.getTransaction.begin(); // new connection to data store is obtained and tx started
+foo.setProperty("bar");
+em.getTransaction().commit();  // End tx, flush and check version, disconnect</programlisting>
+
+      <para>The <literal>foo</literal> object still knows which
+      <literal>persistence context</literal> it was loaded in. With
+      <literal>getTransaction.begin();</literal> the entity manager obtains a
+      new connection and resumes the persistence context. The method
+      <literal>getTransaction().commit()</literal> will not only flush and
+      check versions, but also disconnects the entity manager from the JDBC
+      connection and return the connection to the pool.</para>
+
+      <para>This pattern is problematic if the persistence context is too big
+      to be stored during user think time, and if you don't know where to
+      store it. E.g. the <literal>HttpSession</literal> should be kept as
+      small as possible. As the persistence context is also the (mandatory)
+      first-level cache and contains all loaded objects, we can probably use
+      this strategy only for a few request/response cycles. This is indeed
+      recommended, as the persistence context will soon also have stale
+      data.</para>
+
+      <para>It is up to you where you store the extended entity manager during
+      requests, inside an EJB3 container you simply use a stateful session
+      bean as described above. Don't transfer it to the web layer (or even
+      serialize it to a separate tier) to store it in the
+      <literal>HttpSession</literal>. In a non-managed, two-tiered environment
+      the <literal>HttpSession</literal> might indeed be the right place to
+      store it.</para>
+    </sect2>
+
+    <sect2 id="transactions-optimistic-detached">
+      <title>Detached objects and automatic versioning</title>
+
+      <para>With this paradigm, each interaction with the data store occurs in
+      a new persistence context. However, the same persistent instances are
+      reused for each interaction with the database. The application
+      manipulates the state of detached instances originally loaded in another
+      persistence context and then merges the changes using
+      <literal>EntityManager.merge()</literal>:</para>
+
+      <programlisting>// foo is an instance loaded by a non-extended entity manager
+foo.setProperty("bar");
+entityManager = factory.createEntityManager();
+entityManager.getTransaction().begin();
+managedFoo = session.merge(foo); // discard foo and from now on use managedFoo
+entityManager.getTransaction().commit();
+entityManager.close();</programlisting>
+
+      <para>Again, the entity manager will check instance versions during
+      flush, throwing an exception if conflicting updates occured.</para>
+    </sect2>
+  </sect1>
+</chapter>
\ No newline at end of file

Copied: trunk/HibernateExt/entitymanager/doc/reference/en/styles (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/doc/reference/en/styles)

Deleted: trunk/HibernateExt/entitymanager/doc/reference/en/styles/fopdf.xsl
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/doc/reference/en/styles/fopdf.xsl	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/doc/reference/en/styles/fopdf.xsl	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,519 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
-
-    This is the XSL FO configuration file for the Hibernate
-    Reference Documentation. It defines a custom titlepage and
-    the parameters for the A4 sized PDF printable output.
-
-    It took me days to figure out this stuff and fix most of
-    the obvious bugs in the DocBook XSL distribution. Some of
-    the workarounds might not be appropriate with a newer version
-    of DocBook XSL. This file is released as part of Hibernate,
-    hence LGPL licensed.
-
-    christian at hibernate.org
-
--->
-
-<!DOCTYPE xsl:stylesheet [
-    <!ENTITY db_xsl_path        "../../../../../../Hibernate3/doc/reference/support/docbook-xsl/">
-]>
-
-<xsl:stylesheet
-    version="1.0"
-    xmlns="http://www.w3.org/TR/xhtml1/transitional"
-    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-    xmlns:fo="http://www.w3.org/1999/XSL/Format"
-    exclude-result-prefixes="#default">
-
-    <xsl:import href="&db_xsl_path;/fo/docbook.xsl"/>
-
-    <!--###################################################
-                       Custom Title Page
-        ################################################### -->
-
-    <xsl:template name="book.titlepage.recto">
-        <fo:block>
-            <fo:table table-layout="fixed" width="175mm">
-                <fo:table-column column-width="175mm"/>
-                <fo:table-body>
-                    <fo:table-row>
-                        <fo:table-cell text-align="center">
-                            <fo:block>
-                                <fo:external-graphic src="file:images/hibernate_logo_a.png"/>
-                            </fo:block>
-                            <fo:block font-family="Helvetica" font-size="22pt" padding-before="10mm">
-                                <xsl:value-of select="bookinfo/title"/>
-                            </fo:block>
-                            <fo:block font-family="Helvetica" font-size="18pt" padding-before="10mm">
-                                <xsl:value-of select="bookinfo/subtitle"/>
-                            </fo:block>
-                            <fo:block font-family="Helvetica" font-size="12pt" padding="10mm">
-                                Version:
-                                <xsl:value-of select="bookinfo/releaseinfo"/>
-                            </fo:block>
-                        </fo:table-cell>
-                    </fo:table-row>
-                </fo:table-body>
-            </fo:table>
-        </fo:block>
-    </xsl:template>
-
-    <!-- Prevent blank pages in output -->
-    <xsl:template name="book.titlepage.before.verso">
-    </xsl:template>
-    <xsl:template name="book.titlepage.verso">
-    </xsl:template>
-    <xsl:template name="book.titlepage.separator">
-    </xsl:template>
-
-    <!--###################################################
-                          Header
-        ################################################### -->
-
-    <!-- More space in the center header for long text -->
-    <xsl:attribute-set name="header.content.properties">
-        <xsl:attribute name="font-family">
-            <xsl:value-of select="$body.font.family"/>
-        </xsl:attribute>
-        <xsl:attribute name="margin-left">-5em</xsl:attribute>
-        <xsl:attribute name="margin-right">-5em</xsl:attribute>
-    </xsl:attribute-set>
-
-    <!--###################################################
-                          Custom Footer
-        ################################################### -->
-
-    <!-- This footer prints the Hibernate version number on the left side -->
-    <xsl:template name="footer.content">
-        <xsl:param name="pageclass" select="''"/>
-        <xsl:param name="sequence" select="''"/>
-        <xsl:param name="position" select="''"/>
-        <xsl:param name="gentext-key" select="''"/>
-
-        <xsl:variable name="Version">
-            <xsl:choose>
-                <xsl:when test="//releaseinfo">
-                    <xsl:text>Hibernate </xsl:text>
-                    <xsl:value-of select="//releaseinfo"/>
-                </xsl:when>
-                <xsl:otherwise>
-                    <!-- nop -->
-                </xsl:otherwise>
-            </xsl:choose>
-        </xsl:variable>
-
-        <xsl:choose>
-            <xsl:when test="$sequence='blank'">
-                <xsl:choose>
-                    <xsl:when test="$double.sided != 0 and $position = 'left'">
-                        <xsl:value-of select="$Version"/>
-                    </xsl:when>
-
-                    <xsl:when test="$double.sided = 0 and $position = 'center'">
-                        <!-- nop -->
-                    </xsl:when>
-
-                    <xsl:otherwise>
-                        <fo:page-number/>
-                    </xsl:otherwise>
-                </xsl:choose>
-            </xsl:when>
-
-            <xsl:when test="$pageclass='titlepage'">
-                <!-- nop: other titlepage sequences have no footer -->
-            </xsl:when>
-
-            <xsl:when test="$double.sided != 0 and $sequence = 'even' and $position='left'">
-                <fo:page-number/>
-            </xsl:when>
-
-            <xsl:when test="$double.sided != 0 and $sequence = 'odd' and $position='right'">
-                <fo:page-number/>
-            </xsl:when>
-
-            <xsl:when test="$double.sided = 0 and $position='right'">
-                <fo:page-number/>
-            </xsl:when>
-
-            <xsl:when test="$double.sided != 0 and $sequence = 'odd' and $position='left'">
-                <xsl:value-of select="$Version"/>
-            </xsl:when>
-
-            <xsl:when test="$double.sided != 0 and $sequence = 'even' and $position='right'">
-                <xsl:value-of select="$Version"/>
-            </xsl:when>
-
-            <xsl:when test="$double.sided = 0 and $position='left'">
-                <xsl:value-of select="$Version"/>
-            </xsl:when>
-
-            <xsl:otherwise>
-                <!-- nop -->
-            </xsl:otherwise>
-        </xsl:choose>
-    </xsl:template>
-
-    <!--###################################################
-                       Custom Toc Line
-        ################################################### -->
-    
-    <!-- Improve the TOC. -->
-    <xsl:template name="toc.line">
-        <xsl:variable name="id">
-            <xsl:call-template name="object.id"/>
-        </xsl:variable>
-
-        <xsl:variable name="label">
-            <xsl:apply-templates select="." mode="label.markup"/>
-        </xsl:variable>
-
-        <fo:block text-align-last="justify"
-            end-indent="{$toc.indent.width}pt"
-            last-line-end-indent="-{$toc.indent.width}pt">
-            <fo:inline keep-with-next.within-line="always">
-                <fo:basic-link internal-destination="{$id}">
-
-                    <!-- Chapter titles should be bold. -->
-                    <xsl:choose>
-                        <xsl:when test="local-name(.) = 'chapter'">
-                            <xsl:attribute name="font-weight">bold</xsl:attribute>
-                        </xsl:when>
-                    </xsl:choose>
-
-                    <xsl:if test="$label != ''">
-                        <xsl:copy-of select="$label"/>
-                        <xsl:value-of select="$autotoc.label.separator"/>
-                    </xsl:if>
-                    <xsl:apply-templates select="." mode="titleabbrev.markup"/>
-                </fo:basic-link>
-            </fo:inline>
-            <fo:inline keep-together.within-line="always">
-                <xsl:text> </xsl:text>
-                <fo:leader leader-pattern="dots"
-                    leader-pattern-width="3pt"
-                    leader-alignment="reference-area"
-                    keep-with-next.within-line="always"/>
-                <xsl:text> </xsl:text>
-                <fo:basic-link internal-destination="{$id}">
-                    <fo:page-number-citation ref-id="{$id}"/>
-                </fo:basic-link>
-            </fo:inline>
-        </fo:block>
-    </xsl:template>
-
-    <!--###################################################
-                          Extensions
-        ################################################### -->
-
-    <!-- These extensions are required for table printing and other stuff -->
-    <xsl:param name="use.extensions">1</xsl:param>
-    <xsl:param name="tablecolumns.extension">0</xsl:param>
-    <!-- FOP provide only PDF Bookmarks at the moment -->
-    <xsl:param name="fop.extensions">1</xsl:param>
-
-    <!--###################################################
-                          Table Of Contents
-        ################################################### -->
-
-    <!-- Generate the TOCs for named components only -->
-    <xsl:param name="generate.toc">
-        book   toc
-    </xsl:param>
-    
-    <!-- Show only Sections up to level 3 in the TOCs -->
-    <xsl:param name="toc.section.depth">3</xsl:param>
-    
-    <!-- Dot and Whitespace as separator in TOC between Label and Title-->
-    <xsl:param name="autotoc.label.separator" select="'.  '"/>
-
-
-    <!--###################################################
-                       Paper & Page Size
-        ################################################### -->
-    
-    <!-- Paper type, no headers on blank pages, no double sided printing -->
-    <xsl:param name="paper.type" select="'A4'"/>
-    <xsl:param name="double.sided">0</xsl:param>
-    <xsl:param name="headers.on.blank.pages">0</xsl:param>
-    <xsl:param name="footers.on.blank.pages">0</xsl:param>
-
-    <!-- Space between paper border and content (chaotic stuff, don't touch) -->
-    <xsl:param name="page.margin.top">5mm</xsl:param>
-    <xsl:param name="region.before.extent">10mm</xsl:param>
-    <xsl:param name="body.margin.top">10mm</xsl:param>
-
-    <xsl:param name="body.margin.bottom">15mm</xsl:param>
-    <xsl:param name="region.after.extent">10mm</xsl:param>
-    <xsl:param name="page.margin.bottom">0mm</xsl:param>
-
-    <xsl:param name="page.margin.outer">18mm</xsl:param>
-    <xsl:param name="page.margin.inner">18mm</xsl:param>
-
-    <!-- No intendation of Titles -->
-    <xsl:param name="title.margin.left">0pc</xsl:param>
-
-    <!--###################################################
-                       Fonts & Styles
-        ################################################### -->
-
-    <!-- Default Font size -->
-    <xsl:param name="body.font.master">11</xsl:param>
-
-    <!-- Line height in body text -->
-    <xsl:param name="line-height">1.4</xsl:param>
-
-    <!-- Monospaced fonts are smaller than regular text -->
-    <xsl:attribute-set name="monospace.properties">
-        <xsl:attribute name="font-family">
-            <xsl:value-of select="$monospace.font.family"/>
-        </xsl:attribute>
-        <xsl:attribute name="font-size">0.8em</xsl:attribute>
-    </xsl:attribute-set>
-
-    <!--###################################################
-                       Tables
-        ################################################### -->
-
-    <!-- The table width should be adapted to the paper size -->
-    <xsl:param name="default.table.width">17.4cm</xsl:param>
-
-    <!-- Some padding inside tables -->
-    <xsl:attribute-set name="table.cell.padding">
-        <xsl:attribute name="padding-left">4pt</xsl:attribute>
-        <xsl:attribute name="padding-right">4pt</xsl:attribute>
-        <xsl:attribute name="padding-top">4pt</xsl:attribute>
-        <xsl:attribute name="padding-bottom">4pt</xsl:attribute>
-    </xsl:attribute-set>
-    
-    <!-- Only hairlines as frame and cell borders in tables -->
-    <xsl:param name="table.frame.border.thickness">0.1pt</xsl:param>
-    <xsl:param name="table.cell.border.thickness">0.1pt</xsl:param>
-
-    <!--###################################################
-                             Labels
-        ################################################### -->
-
-    <!-- Label Chapters and Sections (numbering) -->
-    <xsl:param name="chapter.autolabel">1</xsl:param>
-    <xsl:param name="section.autolabel" select="1"/>
-    <xsl:param name="section.label.includes.component.label" select="1"/>
-
-    <!-- Label only Sections up to level 2 -->
-    <xsl:param name="local.l10n.xml" select="document('')"/>
-    <l:i18n xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0">
-        <l:l10n language="en">
-            <l:context name="title-numbered">
-                <l:template name="sect3" text="%t"/>
-                <l:template name="sect4" text="%t"/>
-                <l:template name="sect5" text="%t"/>
-            </l:context>
-            <l:context name="section-xref-numbered">
-                <l:template name="sect3" text="the section called %t"/>
-                <l:template name="sect4" text="the section called %t"/>
-                <l:template name="sect5" text="the section called %t"/>
-            </l:context>
-        </l:l10n>
-    </l:i18n>
-    
-    <!--###################################################
-                             Titles
-        ################################################### -->
-    
-    <!-- Chapter title size -->
-    <xsl:attribute-set name="chapter.titlepage.recto.style">
-        <xsl:attribute name="text-align">left</xsl:attribute>
-        <xsl:attribute name="font-weight">bold</xsl:attribute>
-        <xsl:attribute name="font-size">
-            <xsl:value-of select="$body.font.master * 1.8"/>
-            <xsl:text>pt</xsl:text>
-        </xsl:attribute>
-    </xsl:attribute-set>
-
-    <!-- Why is the font-size for chapters hardcoded in the XSL FO templates? 
-        Let's remove it, so this sucker can use our attribute-set only... -->
-    <xsl:template match="title" mode="chapter.titlepage.recto.auto.mode">
-        <fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format"
-            xsl:use-attribute-sets="chapter.titlepage.recto.style">
-            <xsl:call-template name="component.title">
-                <xsl:with-param name="node" select="ancestor-or-self::chapter[1]"/>
-            </xsl:call-template>
-        </fo:block>
-    </xsl:template>
-    
-    <!-- Sections 1, 2 and 3 titles have a small bump factor and padding -->
-    <xsl:attribute-set name="section.title.level1.properties">
-        <xsl:attribute name="space-before.optimum">0.8em</xsl:attribute>
-        <xsl:attribute name="space-before.minimum">0.8em</xsl:attribute>
-        <xsl:attribute name="space-before.maximum">0.8em</xsl:attribute>
-        <xsl:attribute name="font-size">
-            <xsl:value-of select="$body.font.master * 1.5"/>
-            <xsl:text>pt</xsl:text>
-        </xsl:attribute>
-        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
-    </xsl:attribute-set>
-    <xsl:attribute-set name="section.title.level2.properties">
-        <xsl:attribute name="space-before.optimum">0.6em</xsl:attribute>
-        <xsl:attribute name="space-before.minimum">0.6em</xsl:attribute>
-        <xsl:attribute name="space-before.maximum">0.6em</xsl:attribute>
-        <xsl:attribute name="font-size">
-            <xsl:value-of select="$body.font.master * 1.25"/>
-            <xsl:text>pt</xsl:text>
-        </xsl:attribute>
-        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
-    </xsl:attribute-set>
-    <xsl:attribute-set name="section.title.level3.properties">
-        <xsl:attribute name="space-before.optimum">0.4em</xsl:attribute>
-        <xsl:attribute name="space-before.minimum">0.4em</xsl:attribute>
-        <xsl:attribute name="space-before.maximum">0.4em</xsl:attribute>
-        <xsl:attribute name="font-size">
-            <xsl:value-of select="$body.font.master * 1.0"/>
-            <xsl:text>pt</xsl:text>
-        </xsl:attribute>
-        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
-    </xsl:attribute-set>
-
-    <!-- Titles of formal objects (tables, examples, ...) -->
-    <xsl:attribute-set name="formal.title.properties" use-attribute-sets="normal.para.spacing">
-        <xsl:attribute name="font-weight">bold</xsl:attribute>
-        <xsl:attribute name="font-size">
-            <xsl:value-of select="$body.font.master"/>
-            <xsl:text>pt</xsl:text>
-        </xsl:attribute>
-        <xsl:attribute name="hyphenate">false</xsl:attribute>
-        <xsl:attribute name="space-after.minimum">0.4em</xsl:attribute>
-        <xsl:attribute name="space-after.optimum">0.6em</xsl:attribute>
-        <xsl:attribute name="space-after.maximum">0.8em</xsl:attribute>
-    </xsl:attribute-set>
-
-    <!--###################################################
-                          Programlistings
-        ################################################### -->
-    
-    <!-- Verbatim text formatting (programlistings) -->
-    <xsl:attribute-set name="verbatim.properties">
-        <xsl:attribute name="space-before.minimum">1em</xsl:attribute>
-        <xsl:attribute name="space-before.optimum">1em</xsl:attribute>
-        <xsl:attribute name="space-before.maximum">1em</xsl:attribute>
-        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
-        <xsl:attribute name="border-color">#444444</xsl:attribute>
-        <xsl:attribute name="border-style">solid</xsl:attribute>
-        <xsl:attribute name="border-width">0.1pt</xsl:attribute>
-        <xsl:attribute name="padding-top">0.5em</xsl:attribute>
-        <xsl:attribute name="padding-left">0.5em</xsl:attribute>
-        <xsl:attribute name="padding-right">0.5em</xsl:attribute>
-        <xsl:attribute name="padding-bottom">0.5em</xsl:attribute>
-        <xsl:attribute name="margin-left">0.5em</xsl:attribute>
-        <xsl:attribute name="margin-right">0.5em</xsl:attribute>
-    </xsl:attribute-set>
-
-    <!-- Shade (background) programlistings -->
-    <xsl:param name="shade.verbatim">1</xsl:param>
-    <xsl:attribute-set name="shade.verbatim.style">
-        <xsl:attribute name="background-color">#F0F0F0</xsl:attribute>
-    </xsl:attribute-set>
-
-    <!--###################################################
-                             Callouts
-        ################################################### -->
-
-    <!-- We want to use callouts... -->
-    <xsl:param name="callout.extensions">1</xsl:param>
-
-    <!-- Place callout bullets at this column in programmlisting.-->
-    <xsl:param name="callout.defaultcolumn">90</xsl:param>
-
-    <!--
-        No, don't use crappy graphics for the callout bullets. This setting
-        enables some weird Unicode rendering for some fancy bullet points
-        in callouts. By default, this can only count to 10 and produces
-        strange results if you ever have more than 10 callouts for one
-        programlisting. We will fix that next.
-    -->
-    <xsl:param name="callout.graphics">0</xsl:param>
-
-    <!--
-        Again, fun with DocBook XSL: The callout bullets are rendered in
-        two places: In the programlisting itself and in the list below
-        the listing, with the actual callout text. The rendering in the
-        programlisting is some XSL transformer extension (e.g. a Saxon
-        extension), so we can't change that without messing with the
-        extensions. We only can turn it off by setting this limit to
-        zero, then, a simple bracket style like "(3)" and "(4)" will
-        be used in the programlisting.
-    -->
-    <xsl:param name="callout.unicode.number.limit" select="'0'"></xsl:param>
-
-    <!--
-        The callout bullets in the actual callout list will be rendered
-        with an XSL FO template. The default template is broken: limited to 10
-        nice looking Unicode bullet points and then it doesn't print anything,
-        the fallback doesn't work. We implement our own template, which is not
-        as complicated, more ugly, but works. As always, function is more
-        important than form.
-    -->
-    <xsl:template name="callout-bug">
-        <xsl:param name="conum" select='1'/>
-        <fo:inline
-            color="black"
-            padding-top="0.1em"
-            padding-bottom="0.1em"
-            padding-start="0.2em"
-            padding-end="0.2em"
-            baseline-shift="0.1em"
-            font-family="{$monospace.font.family}"
-            font-weight="bold"
-            font-size="75%">
-            <xsl:text>(</xsl:text>
-            <xsl:value-of select="$conum"/>
-            <xsl:text>)</xsl:text>
-        </fo:inline>
-
-    </xsl:template>
-
-    <!--###################################################
-                              Misc
-        ################################################### -->
-
-    <!-- Correct placement of titles for figures and examples. -->
-    <xsl:param name="formal.title.placement">
-        figure after
-        example before
-        equation before
-        table before
-        procedure before
-    </xsl:param>
-    
-    <!-- Format Variable Lists as Blocks (prevents horizontal overflow). -->
-    <xsl:param name="variablelist.as.blocks">1</xsl:param>
-
-    <!-- The horrible list spacing problems, this is much better. -->
-    <xsl:attribute-set name="list.block.spacing">
-        <xsl:attribute name="space-before.optimum">0.8em</xsl:attribute>
-        <xsl:attribute name="space-before.minimum">0.8em</xsl:attribute>
-        <xsl:attribute name="space-before.maximum">0.8em</xsl:attribute>
-        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
-    </xsl:attribute-set>
-
-    <!-- Newer DocBook XSL apparently thinks that some sections are by
-         default "draft" status, and this idiotic thing is by default
-         also set to "maybe", so it spits out a lot of errors with the
-         latest FOP as the XSL/FO styles have references to some draft
-         watermarks, which you actually don't want in the first place.
-         Turn this crap off. If you have to work with the "status"
-         attribute, don't.
-    -->
-    <xsl:param name="draft.mode" select="'no'"/>
-
-</xsl:stylesheet>

Copied: trunk/HibernateExt/entitymanager/doc/reference/en/styles/fopdf.xsl (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/doc/reference/en/styles/fopdf.xsl)
===================================================================
--- trunk/HibernateExt/entitymanager/doc/reference/en/styles/fopdf.xsl	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/doc/reference/en/styles/fopdf.xsl	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,519 @@
+<?xml version="1.0"?>
+
+<!--
+
+    This is the XSL FO configuration file for the Hibernate
+    Reference Documentation. It defines a custom titlepage and
+    the parameters for the A4 sized PDF printable output.
+
+    It took me days to figure out this stuff and fix most of
+    the obvious bugs in the DocBook XSL distribution. Some of
+    the workarounds might not be appropriate with a newer version
+    of DocBook XSL. This file is released as part of Hibernate,
+    hence LGPL licensed.
+
+    christian at hibernate.org
+
+-->
+
+<!DOCTYPE xsl:stylesheet [
+    <!ENTITY db_xsl_path        "../../../../../../Hibernate3/doc/reference/support/docbook-xsl/">
+]>
+
+<xsl:stylesheet
+    version="1.0"
+    xmlns="http://www.w3.org/TR/xhtml1/transitional"
+    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+    xmlns:fo="http://www.w3.org/1999/XSL/Format"
+    exclude-result-prefixes="#default">
+
+    <xsl:import href="&db_xsl_path;/fo/docbook.xsl"/>
+
+    <!--###################################################
+                       Custom Title Page
+        ################################################### -->
+
+    <xsl:template name="book.titlepage.recto">
+        <fo:block>
+            <fo:table table-layout="fixed" width="175mm">
+                <fo:table-column column-width="175mm"/>
+                <fo:table-body>
+                    <fo:table-row>
+                        <fo:table-cell text-align="center">
+                            <fo:block>
+                                <fo:external-graphic src="file:images/hibernate_logo_a.png"/>
+                            </fo:block>
+                            <fo:block font-family="Helvetica" font-size="22pt" padding-before="10mm">
+                                <xsl:value-of select="bookinfo/title"/>
+                            </fo:block>
+                            <fo:block font-family="Helvetica" font-size="18pt" padding-before="10mm">
+                                <xsl:value-of select="bookinfo/subtitle"/>
+                            </fo:block>
+                            <fo:block font-family="Helvetica" font-size="12pt" padding="10mm">
+                                Version:
+                                <xsl:value-of select="bookinfo/releaseinfo"/>
+                            </fo:block>
+                        </fo:table-cell>
+                    </fo:table-row>
+                </fo:table-body>
+            </fo:table>
+        </fo:block>
+    </xsl:template>
+
+    <!-- Prevent blank pages in output -->
+    <xsl:template name="book.titlepage.before.verso">
+    </xsl:template>
+    <xsl:template name="book.titlepage.verso">
+    </xsl:template>
+    <xsl:template name="book.titlepage.separator">
+    </xsl:template>
+
+    <!--###################################################
+                          Header
+        ################################################### -->
+
+    <!-- More space in the center header for long text -->
+    <xsl:attribute-set name="header.content.properties">
+        <xsl:attribute name="font-family">
+            <xsl:value-of select="$body.font.family"/>
+        </xsl:attribute>
+        <xsl:attribute name="margin-left">-5em</xsl:attribute>
+        <xsl:attribute name="margin-right">-5em</xsl:attribute>
+    </xsl:attribute-set>
+
+    <!--###################################################
+                          Custom Footer
+        ################################################### -->
+
+    <!-- This footer prints the Hibernate version number on the left side -->
+    <xsl:template name="footer.content">
+        <xsl:param name="pageclass" select="''"/>
+        <xsl:param name="sequence" select="''"/>
+        <xsl:param name="position" select="''"/>
+        <xsl:param name="gentext-key" select="''"/>
+
+        <xsl:variable name="Version">
+            <xsl:choose>
+                <xsl:when test="//releaseinfo">
+                    <xsl:text>Hibernate </xsl:text>
+                    <xsl:value-of select="//releaseinfo"/>
+                </xsl:when>
+                <xsl:otherwise>
+                    <!-- nop -->
+                </xsl:otherwise>
+            </xsl:choose>
+        </xsl:variable>
+
+        <xsl:choose>
+            <xsl:when test="$sequence='blank'">
+                <xsl:choose>
+                    <xsl:when test="$double.sided != 0 and $position = 'left'">
+                        <xsl:value-of select="$Version"/>
+                    </xsl:when>
+
+                    <xsl:when test="$double.sided = 0 and $position = 'center'">
+                        <!-- nop -->
+                    </xsl:when>
+
+                    <xsl:otherwise>
+                        <fo:page-number/>
+                    </xsl:otherwise>
+                </xsl:choose>
+            </xsl:when>
+
+            <xsl:when test="$pageclass='titlepage'">
+                <!-- nop: other titlepage sequences have no footer -->
+            </xsl:when>
+
+            <xsl:when test="$double.sided != 0 and $sequence = 'even' and $position='left'">
+                <fo:page-number/>
+            </xsl:when>
+
+            <xsl:when test="$double.sided != 0 and $sequence = 'odd' and $position='right'">
+                <fo:page-number/>
+            </xsl:when>
+
+            <xsl:when test="$double.sided = 0 and $position='right'">
+                <fo:page-number/>
+            </xsl:when>
+
+            <xsl:when test="$double.sided != 0 and $sequence = 'odd' and $position='left'">
+                <xsl:value-of select="$Version"/>
+            </xsl:when>
+
+            <xsl:when test="$double.sided != 0 and $sequence = 'even' and $position='right'">
+                <xsl:value-of select="$Version"/>
+            </xsl:when>
+
+            <xsl:when test="$double.sided = 0 and $position='left'">
+                <xsl:value-of select="$Version"/>
+            </xsl:when>
+
+            <xsl:otherwise>
+                <!-- nop -->
+            </xsl:otherwise>
+        </xsl:choose>
+    </xsl:template>
+
+    <!--###################################################
+                       Custom Toc Line
+        ################################################### -->
+    
+    <!-- Improve the TOC. -->
+    <xsl:template name="toc.line">
+        <xsl:variable name="id">
+            <xsl:call-template name="object.id"/>
+        </xsl:variable>
+
+        <xsl:variable name="label">
+            <xsl:apply-templates select="." mode="label.markup"/>
+        </xsl:variable>
+
+        <fo:block text-align-last="justify"
+            end-indent="{$toc.indent.width}pt"
+            last-line-end-indent="-{$toc.indent.width}pt">
+            <fo:inline keep-with-next.within-line="always">
+                <fo:basic-link internal-destination="{$id}">
+
+                    <!-- Chapter titles should be bold. -->
+                    <xsl:choose>
+                        <xsl:when test="local-name(.) = 'chapter'">
+                            <xsl:attribute name="font-weight">bold</xsl:attribute>
+                        </xsl:when>
+                    </xsl:choose>
+
+                    <xsl:if test="$label != ''">
+                        <xsl:copy-of select="$label"/>
+                        <xsl:value-of select="$autotoc.label.separator"/>
+                    </xsl:if>
+                    <xsl:apply-templates select="." mode="titleabbrev.markup"/>
+                </fo:basic-link>
+            </fo:inline>
+            <fo:inline keep-together.within-line="always">
+                <xsl:text> </xsl:text>
+                <fo:leader leader-pattern="dots"
+                    leader-pattern-width="3pt"
+                    leader-alignment="reference-area"
+                    keep-with-next.within-line="always"/>
+                <xsl:text> </xsl:text>
+                <fo:basic-link internal-destination="{$id}">
+                    <fo:page-number-citation ref-id="{$id}"/>
+                </fo:basic-link>
+            </fo:inline>
+        </fo:block>
+    </xsl:template>
+
+    <!--###################################################
+                          Extensions
+        ################################################### -->
+
+    <!-- These extensions are required for table printing and other stuff -->
+    <xsl:param name="use.extensions">1</xsl:param>
+    <xsl:param name="tablecolumns.extension">0</xsl:param>
+    <!-- FOP provide only PDF Bookmarks at the moment -->
+    <xsl:param name="fop.extensions">1</xsl:param>
+
+    <!--###################################################
+                          Table Of Contents
+        ################################################### -->
+
+    <!-- Generate the TOCs for named components only -->
+    <xsl:param name="generate.toc">
+        book   toc
+    </xsl:param>
+    
+    <!-- Show only Sections up to level 3 in the TOCs -->
+    <xsl:param name="toc.section.depth">3</xsl:param>
+    
+    <!-- Dot and Whitespace as separator in TOC between Label and Title-->
+    <xsl:param name="autotoc.label.separator" select="'.  '"/>
+
+
+    <!--###################################################
+                       Paper & Page Size
+        ################################################### -->
+    
+    <!-- Paper type, no headers on blank pages, no double sided printing -->
+    <xsl:param name="paper.type" select="'A4'"/>
+    <xsl:param name="double.sided">0</xsl:param>
+    <xsl:param name="headers.on.blank.pages">0</xsl:param>
+    <xsl:param name="footers.on.blank.pages">0</xsl:param>
+
+    <!-- Space between paper border and content (chaotic stuff, don't touch) -->
+    <xsl:param name="page.margin.top">5mm</xsl:param>
+    <xsl:param name="region.before.extent">10mm</xsl:param>
+    <xsl:param name="body.margin.top">10mm</xsl:param>
+
+    <xsl:param name="body.margin.bottom">15mm</xsl:param>
+    <xsl:param name="region.after.extent">10mm</xsl:param>
+    <xsl:param name="page.margin.bottom">0mm</xsl:param>
+
+    <xsl:param name="page.margin.outer">18mm</xsl:param>
+    <xsl:param name="page.margin.inner">18mm</xsl:param>
+
+    <!-- No intendation of Titles -->
+    <xsl:param name="title.margin.left">0pc</xsl:param>
+
+    <!--###################################################
+                       Fonts & Styles
+        ################################################### -->
+
+    <!-- Default Font size -->
+    <xsl:param name="body.font.master">11</xsl:param>
+
+    <!-- Line height in body text -->
+    <xsl:param name="line-height">1.4</xsl:param>
+
+    <!-- Monospaced fonts are smaller than regular text -->
+    <xsl:attribute-set name="monospace.properties">
+        <xsl:attribute name="font-family">
+            <xsl:value-of select="$monospace.font.family"/>
+        </xsl:attribute>
+        <xsl:attribute name="font-size">0.8em</xsl:attribute>
+    </xsl:attribute-set>
+
+    <!--###################################################
+                       Tables
+        ################################################### -->
+
+    <!-- The table width should be adapted to the paper size -->
+    <xsl:param name="default.table.width">17.4cm</xsl:param>
+
+    <!-- Some padding inside tables -->
+    <xsl:attribute-set name="table.cell.padding">
+        <xsl:attribute name="padding-left">4pt</xsl:attribute>
+        <xsl:attribute name="padding-right">4pt</xsl:attribute>
+        <xsl:attribute name="padding-top">4pt</xsl:attribute>
+        <xsl:attribute name="padding-bottom">4pt</xsl:attribute>
+    </xsl:attribute-set>
+    
+    <!-- Only hairlines as frame and cell borders in tables -->
+    <xsl:param name="table.frame.border.thickness">0.1pt</xsl:param>
+    <xsl:param name="table.cell.border.thickness">0.1pt</xsl:param>
+
+    <!--###################################################
+                             Labels
+        ################################################### -->
+
+    <!-- Label Chapters and Sections (numbering) -->
+    <xsl:param name="chapter.autolabel">1</xsl:param>
+    <xsl:param name="section.autolabel" select="1"/>
+    <xsl:param name="section.label.includes.component.label" select="1"/>
+
+    <!-- Label only Sections up to level 2 -->
+    <xsl:param name="local.l10n.xml" select="document('')"/>
+    <l:i18n xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0">
+        <l:l10n language="en">
+            <l:context name="title-numbered">
+                <l:template name="sect3" text="%t"/>
+                <l:template name="sect4" text="%t"/>
+                <l:template name="sect5" text="%t"/>
+            </l:context>
+            <l:context name="section-xref-numbered">
+                <l:template name="sect3" text="the section called %t"/>
+                <l:template name="sect4" text="the section called %t"/>
+                <l:template name="sect5" text="the section called %t"/>
+            </l:context>
+        </l:l10n>
+    </l:i18n>
+    
+    <!--###################################################
+                             Titles
+        ################################################### -->
+    
+    <!-- Chapter title size -->
+    <xsl:attribute-set name="chapter.titlepage.recto.style">
+        <xsl:attribute name="text-align">left</xsl:attribute>
+        <xsl:attribute name="font-weight">bold</xsl:attribute>
+        <xsl:attribute name="font-size">
+            <xsl:value-of select="$body.font.master * 1.8"/>
+            <xsl:text>pt</xsl:text>
+        </xsl:attribute>
+    </xsl:attribute-set>
+
+    <!-- Why is the font-size for chapters hardcoded in the XSL FO templates? 
+        Let's remove it, so this sucker can use our attribute-set only... -->
+    <xsl:template match="title" mode="chapter.titlepage.recto.auto.mode">
+        <fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format"
+            xsl:use-attribute-sets="chapter.titlepage.recto.style">
+            <xsl:call-template name="component.title">
+                <xsl:with-param name="node" select="ancestor-or-self::chapter[1]"/>
+            </xsl:call-template>
+        </fo:block>
+    </xsl:template>
+    
+    <!-- Sections 1, 2 and 3 titles have a small bump factor and padding -->
+    <xsl:attribute-set name="section.title.level1.properties">
+        <xsl:attribute name="space-before.optimum">0.8em</xsl:attribute>
+        <xsl:attribute name="space-before.minimum">0.8em</xsl:attribute>
+        <xsl:attribute name="space-before.maximum">0.8em</xsl:attribute>
+        <xsl:attribute name="font-size">
+            <xsl:value-of select="$body.font.master * 1.5"/>
+            <xsl:text>pt</xsl:text>
+        </xsl:attribute>
+        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
+    </xsl:attribute-set>
+    <xsl:attribute-set name="section.title.level2.properties">
+        <xsl:attribute name="space-before.optimum">0.6em</xsl:attribute>
+        <xsl:attribute name="space-before.minimum">0.6em</xsl:attribute>
+        <xsl:attribute name="space-before.maximum">0.6em</xsl:attribute>
+        <xsl:attribute name="font-size">
+            <xsl:value-of select="$body.font.master * 1.25"/>
+            <xsl:text>pt</xsl:text>
+        </xsl:attribute>
+        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
+    </xsl:attribute-set>
+    <xsl:attribute-set name="section.title.level3.properties">
+        <xsl:attribute name="space-before.optimum">0.4em</xsl:attribute>
+        <xsl:attribute name="space-before.minimum">0.4em</xsl:attribute>
+        <xsl:attribute name="space-before.maximum">0.4em</xsl:attribute>
+        <xsl:attribute name="font-size">
+            <xsl:value-of select="$body.font.master * 1.0"/>
+            <xsl:text>pt</xsl:text>
+        </xsl:attribute>
+        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
+    </xsl:attribute-set>
+
+    <!-- Titles of formal objects (tables, examples, ...) -->
+    <xsl:attribute-set name="formal.title.properties" use-attribute-sets="normal.para.spacing">
+        <xsl:attribute name="font-weight">bold</xsl:attribute>
+        <xsl:attribute name="font-size">
+            <xsl:value-of select="$body.font.master"/>
+            <xsl:text>pt</xsl:text>
+        </xsl:attribute>
+        <xsl:attribute name="hyphenate">false</xsl:attribute>
+        <xsl:attribute name="space-after.minimum">0.4em</xsl:attribute>
+        <xsl:attribute name="space-after.optimum">0.6em</xsl:attribute>
+        <xsl:attribute name="space-after.maximum">0.8em</xsl:attribute>
+    </xsl:attribute-set>
+
+    <!--###################################################
+                          Programlistings
+        ################################################### -->
+    
+    <!-- Verbatim text formatting (programlistings) -->
+    <xsl:attribute-set name="verbatim.properties">
+        <xsl:attribute name="space-before.minimum">1em</xsl:attribute>
+        <xsl:attribute name="space-before.optimum">1em</xsl:attribute>
+        <xsl:attribute name="space-before.maximum">1em</xsl:attribute>
+        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
+        <xsl:attribute name="border-color">#444444</xsl:attribute>
+        <xsl:attribute name="border-style">solid</xsl:attribute>
+        <xsl:attribute name="border-width">0.1pt</xsl:attribute>
+        <xsl:attribute name="padding-top">0.5em</xsl:attribute>
+        <xsl:attribute name="padding-left">0.5em</xsl:attribute>
+        <xsl:attribute name="padding-right">0.5em</xsl:attribute>
+        <xsl:attribute name="padding-bottom">0.5em</xsl:attribute>
+        <xsl:attribute name="margin-left">0.5em</xsl:attribute>
+        <xsl:attribute name="margin-right">0.5em</xsl:attribute>
+    </xsl:attribute-set>
+
+    <!-- Shade (background) programlistings -->
+    <xsl:param name="shade.verbatim">1</xsl:param>
+    <xsl:attribute-set name="shade.verbatim.style">
+        <xsl:attribute name="background-color">#F0F0F0</xsl:attribute>
+    </xsl:attribute-set>
+
+    <!--###################################################
+                             Callouts
+        ################################################### -->
+
+    <!-- We want to use callouts... -->
+    <xsl:param name="callout.extensions">1</xsl:param>
+
+    <!-- Place callout bullets at this column in programmlisting.-->
+    <xsl:param name="callout.defaultcolumn">90</xsl:param>
+
+    <!--
+        No, don't use crappy graphics for the callout bullets. This setting
+        enables some weird Unicode rendering for some fancy bullet points
+        in callouts. By default, this can only count to 10 and produces
+        strange results if you ever have more than 10 callouts for one
+        programlisting. We will fix that next.
+    -->
+    <xsl:param name="callout.graphics">0</xsl:param>
+
+    <!--
+        Again, fun with DocBook XSL: The callout bullets are rendered in
+        two places: In the programlisting itself and in the list below
+        the listing, with the actual callout text. The rendering in the
+        programlisting is some XSL transformer extension (e.g. a Saxon
+        extension), so we can't change that without messing with the
+        extensions. We only can turn it off by setting this limit to
+        zero, then, a simple bracket style like "(3)" and "(4)" will
+        be used in the programlisting.
+    -->
+    <xsl:param name="callout.unicode.number.limit" select="'0'"></xsl:param>
+
+    <!--
+        The callout bullets in the actual callout list will be rendered
+        with an XSL FO template. The default template is broken: limited to 10
+        nice looking Unicode bullet points and then it doesn't print anything,
+        the fallback doesn't work. We implement our own template, which is not
+        as complicated, more ugly, but works. As always, function is more
+        important than form.
+    -->
+    <xsl:template name="callout-bug">
+        <xsl:param name="conum" select='1'/>
+        <fo:inline
+            color="black"
+            padding-top="0.1em"
+            padding-bottom="0.1em"
+            padding-start="0.2em"
+            padding-end="0.2em"
+            baseline-shift="0.1em"
+            font-family="{$monospace.font.family}"
+            font-weight="bold"
+            font-size="75%">
+            <xsl:text>(</xsl:text>
+            <xsl:value-of select="$conum"/>
+            <xsl:text>)</xsl:text>
+        </fo:inline>
+
+    </xsl:template>
+
+    <!--###################################################
+                              Misc
+        ################################################### -->
+
+    <!-- Correct placement of titles for figures and examples. -->
+    <xsl:param name="formal.title.placement">
+        figure after
+        example before
+        equation before
+        table before
+        procedure before
+    </xsl:param>
+    
+    <!-- Format Variable Lists as Blocks (prevents horizontal overflow). -->
+    <xsl:param name="variablelist.as.blocks">1</xsl:param>
+
+    <!-- The horrible list spacing problems, this is much better. -->
+    <xsl:attribute-set name="list.block.spacing">
+        <xsl:attribute name="space-before.optimum">0.8em</xsl:attribute>
+        <xsl:attribute name="space-before.minimum">0.8em</xsl:attribute>
+        <xsl:attribute name="space-before.maximum">0.8em</xsl:attribute>
+        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
+    </xsl:attribute-set>
+
+    <!-- Newer DocBook XSL apparently thinks that some sections are by
+         default "draft" status, and this idiotic thing is by default
+         also set to "maybe", so it spits out a lot of errors with the
+         latest FOP as the XSL/FO styles have references to some draft
+         watermarks, which you actually don't want in the first place.
+         Turn this crap off. If you have to work with the "status"
+         attribute, don't.
+    -->
+    <xsl:param name="draft.mode" select="'no'"/>
+
+</xsl:stylesheet>

Deleted: trunk/HibernateExt/entitymanager/doc/reference/en/styles/html.css
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/doc/reference/en/styles/html.css	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/doc/reference/en/styles/html.css	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,97 +0,0 @@
-A {
-    color: #003399;
-}
-
-A:active {
-    color: #003399;
-}
-
-A:visited {
-    color: #888888;
-}
-
-P, OL, UL, LI, DL, DT, DD, BLOCKQUOTE {
-    color: #000000;
-}
-
-TD, TH, SPAN {
-    color: #000000;
-}
-
-BLOCKQUOTE {
-    margin-right: 0px;
-}
-
-
-H1, H2, H3, H4, H5, H6    {
-    color: #000000;
-    font-weight:500;
-    margin-top:10px;
-    padding-top:15px;
-}
-
-TABLE  {
-    border-collapse: collapse;
-    border-spacing:0;
-    border: 1px thin black;
-    empty-cells: hide;
-}
-
-TD  {
-    padding: 4pt;
-}
-
-H1 { font-size: 150%; }
-H2 { font-size: 140%; }
-H3 { font-size: 110%; font-weight: bold; }
-H4 { font-size: 110%; font-weight: bold;}
-H5 { font-size: 100%; font-style: italic; }
-H6 { font-size: 100%; font-style: italic; }
-
-TT {
-font-size: 90%;
-    font-family: "Courier New", Courier, monospace;
-    color: #000000;
-}
-
-PRE {
-font-size: 100%;
-    padding: 5px;
-    border-style: solid;
-    border-width: 1px;
-    border-color: #CCCCCC;
-    background-color: #F4F4F4;
-}
-
-UL, OL, LI {
-    list-style: disc;
-}
-
-HR  {
-    width: 100%;
-    height: 1px;
-    background-color: #CCCCCC;
-    border-width: 0px;
-    padding: 0px;
-    color: #CCCCCC;
-}
-
-.variablelist { 
-    padding-top: 10; 
-    padding-bottom:10; 
-    margin:0;
-}
-
-.itemizedlist, UL { 
-    padding-top: 0; 
-    padding-bottom:0; 
-    margin:0; 
-}
-
-.term { 
-    font-weight:bold;
-}
-
-
-
-    

Copied: trunk/HibernateExt/entitymanager/doc/reference/en/styles/html.css (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/doc/reference/en/styles/html.css)
===================================================================
--- trunk/HibernateExt/entitymanager/doc/reference/en/styles/html.css	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/doc/reference/en/styles/html.css	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,97 @@
+A {
+    color: #003399;
+}
+
+A:active {
+    color: #003399;
+}
+
+A:visited {
+    color: #888888;
+}
+
+P, OL, UL, LI, DL, DT, DD, BLOCKQUOTE {
+    color: #000000;
+}
+
+TD, TH, SPAN {
+    color: #000000;
+}
+
+BLOCKQUOTE {
+    margin-right: 0px;
+}
+
+
+H1, H2, H3, H4, H5, H6    {
+    color: #000000;
+    font-weight:500;
+    margin-top:10px;
+    padding-top:15px;
+}
+
+TABLE  {
+    border-collapse: collapse;
+    border-spacing:0;
+    border: 1px thin black;
+    empty-cells: hide;
+}
+
+TD  {
+    padding: 4pt;
+}
+
+H1 { font-size: 150%; }
+H2 { font-size: 140%; }
+H3 { font-size: 110%; font-weight: bold; }
+H4 { font-size: 110%; font-weight: bold;}
+H5 { font-size: 100%; font-style: italic; }
+H6 { font-size: 100%; font-style: italic; }
+
+TT {
+font-size: 90%;
+    font-family: "Courier New", Courier, monospace;
+    color: #000000;
+}
+
+PRE {
+font-size: 100%;
+    padding: 5px;
+    border-style: solid;
+    border-width: 1px;
+    border-color: #CCCCCC;
+    background-color: #F4F4F4;
+}
+
+UL, OL, LI {
+    list-style: disc;
+}
+
+HR  {
+    width: 100%;
+    height: 1px;
+    background-color: #CCCCCC;
+    border-width: 0px;
+    padding: 0px;
+    color: #CCCCCC;
+}
+
+.variablelist { 
+    padding-top: 10; 
+    padding-bottom:10; 
+    margin:0;
+}
+
+.itemizedlist, UL { 
+    padding-top: 0; 
+    padding-bottom:0; 
+    margin:0; 
+}
+
+.term { 
+    font-weight:bold;
+}
+
+
+
+    

Deleted: trunk/HibernateExt/entitymanager/doc/reference/en/styles/html.xsl
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/doc/reference/en/styles/html.xsl	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/doc/reference/en/styles/html.xsl	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,84 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
-
-    This is the XSL HTML configuration file for the Hibernate
-    Reference Documentation.
-
-    It took me days to figure out this stuff and fix most of
-    the obvious bugs in the DocBook XSL distribution. Some of
-    the workarounds might not be appropriate with a newer version
-    of DocBook XSL. This file is released as part of Hibernate,
-    hence LGPL licensed.
-
-    christian at hibernate.org
--->
-
-<!DOCTYPE xsl:stylesheet [
-    <!ENTITY db_xsl_path        "../../../../../../Hibernate3/doc/reference/support/docbook-xsl/">
-]>
-
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                version="1.0"
-                xmlns="http://www.w3.org/TR/xhtml1/transitional"
-                exclude-result-prefixes="#default">
-                
-<xsl:import href="&db_xsl_path;/html/docbook.xsl"/>
-
-<!--###################################################
-                     HTML Settings
-    ################################################### -->   
-
-    <xsl:param name="html.stylesheet">../shared/css/html.css</xsl:param>
-
-    <!-- These extensions are required for table printing and other stuff -->
-    <xsl:param name="use.extensions">1</xsl:param>
-    <xsl:param name="tablecolumns.extension">0</xsl:param>
-    <xsl:param name="callout.extensions">1</xsl:param>
-    <xsl:param name="graphicsize.extension">0</xsl:param>
-
-<!--###################################################
-                      Table Of Contents
-    ################################################### -->   
-
-    <!-- Generate the TOCs for named components only -->
-    <xsl:param name="generate.toc">
-        book   toc
-    </xsl:param>
-    
-    <!-- Show only Sections up to level 3 in the TOCs -->
-    <xsl:param name="toc.section.depth">3</xsl:param>
-    
-<!--###################################################
-                         Labels
-    ################################################### -->   
-
-    <!-- Label Chapters and Sections (numbering) -->
-    <xsl:param name="chapter.autolabel">1</xsl:param>
-    <xsl:param name="section.autolabel" select="1"/>
-    <xsl:param name="section.label.includes.component.label" select="1"/>
-
-<!--###################################################
-                         Callouts
-    ################################################### -->
-
-    <!-- Don't use graphics, use a simple number style -->
-    <xsl:param name="callout.graphics">0</xsl:param>
-
-    <!-- Place callout marks at this column in annotated areas -->
-    <xsl:param name="callout.defaultcolumn">90</xsl:param>
-
-<!--###################################################
-                          Misc
-    ################################################### -->   
-
-    <!-- Placement of titles -->
-    <xsl:param name="formal.title.placement">
-        figure after
-        example before
-        equation before
-        table before
-        procedure before
-    </xsl:param>    
-    
-</xsl:stylesheet>

Copied: trunk/HibernateExt/entitymanager/doc/reference/en/styles/html.xsl (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/doc/reference/en/styles/html.xsl)
===================================================================
--- trunk/HibernateExt/entitymanager/doc/reference/en/styles/html.xsl	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/doc/reference/en/styles/html.xsl	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,84 @@
+<?xml version="1.0"?>
+
+<!--
+
+    This is the XSL HTML configuration file for the Hibernate
+    Reference Documentation.
+
+    It took me days to figure out this stuff and fix most of
+    the obvious bugs in the DocBook XSL distribution. Some of
+    the workarounds might not be appropriate with a newer version
+    of DocBook XSL. This file is released as part of Hibernate,
+    hence LGPL licensed.
+
+    christian at hibernate.org
+-->
+
+<!DOCTYPE xsl:stylesheet [
+    <!ENTITY db_xsl_path        "../../../../../../Hibernate3/doc/reference/support/docbook-xsl/">
+]>
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+                version="1.0"
+                xmlns="http://www.w3.org/TR/xhtml1/transitional"
+                exclude-result-prefixes="#default">
+                
+<xsl:import href="&db_xsl_path;/html/docbook.xsl"/>
+
+<!--###################################################
+                     HTML Settings
+    ################################################### -->   
+
+    <xsl:param name="html.stylesheet">../shared/css/html.css</xsl:param>
+
+    <!-- These extensions are required for table printing and other stuff -->
+    <xsl:param name="use.extensions">1</xsl:param>
+    <xsl:param name="tablecolumns.extension">0</xsl:param>
+    <xsl:param name="callout.extensions">1</xsl:param>
+    <xsl:param name="graphicsize.extension">0</xsl:param>
+
+<!--###################################################
+                      Table Of Contents
+    ################################################### -->   
+
+    <!-- Generate the TOCs for named components only -->
+    <xsl:param name="generate.toc">
+        book   toc
+    </xsl:param>
+    
+    <!-- Show only Sections up to level 3 in the TOCs -->
+    <xsl:param name="toc.section.depth">3</xsl:param>
+    
+<!--###################################################
+                         Labels
+    ################################################### -->   
+
+    <!-- Label Chapters and Sections (numbering) -->
+    <xsl:param name="chapter.autolabel">1</xsl:param>
+    <xsl:param name="section.autolabel" select="1"/>
+    <xsl:param name="section.label.includes.component.label" select="1"/>
+
+<!--###################################################
+                         Callouts
+    ################################################### -->
+
+    <!-- Don't use graphics, use a simple number style -->
+    <xsl:param name="callout.graphics">0</xsl:param>
+
+    <!-- Place callout marks at this column in annotated areas -->
+    <xsl:param name="callout.defaultcolumn">90</xsl:param>
+
+<!--###################################################
+                          Misc
+    ################################################### -->   
+
+    <!-- Placement of titles -->
+    <xsl:param name="formal.title.placement">
+        figure after
+        example before
+        equation before
+        table before
+        procedure before
+    </xsl:param>    
+    
+</xsl:stylesheet>

Deleted: trunk/HibernateExt/entitymanager/doc/reference/en/styles/html_chunk.xsl
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/doc/reference/en/styles/html_chunk.xsl	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/doc/reference/en/styles/html_chunk.xsl	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,86 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
-
-    This is the XSL HTML configuration file for the Hibernate
-    Reference Documentation.
-
-    It took me days to figure out this stuff and fix most of
-    the obvious bugs in the DocBook XSL distribution. Some of
-    the workarounds might not be appropriate with a newer version
-    of DocBook XSL. This file is released as part of Hibernate,
-    hence LGPL licensed.
-
-    christian at hibernate.org
--->
-
-<!DOCTYPE xsl:stylesheet [
-    <!ENTITY db_xsl_path        "../../../../../../Hibernate3/doc/reference/support/docbook-xsl/">
-]>
-
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                version="1.0"
-                xmlns="http://www.w3.org/TR/xhtml1/transitional"
-                exclude-result-prefixes="#default">
-                
-<xsl:import href="&db_xsl_path;/html/chunk.xsl"/>
-
-<!--###################################################
-                     HTML Settings
-    ################################################### -->   
-
-    <xsl:param name="chunk.section.depth">'5'</xsl:param>
-    <xsl:param name="use.id.as.filename">'1'</xsl:param>
-    <xsl:param name="html.stylesheet">../shared/css/html.css</xsl:param>
-
-    <!-- These extensions are required for table printing and other stuff -->
-    <xsl:param name="use.extensions">1</xsl:param>
-    <xsl:param name="tablecolumns.extension">0</xsl:param>
-    <xsl:param name="callout.extensions">1</xsl:param>
-    <xsl:param name="graphicsize.extension">0</xsl:param>
-    
-<!--###################################################
-                      Table Of Contents
-    ################################################### -->   
-
-    <!-- Generate the TOCs for named components only -->
-    <xsl:param name="generate.toc">
-        book   toc
-    </xsl:param>
-    
-    <!-- Show only Sections up to level 3 in the TOCs -->
-    <xsl:param name="toc.section.depth">3</xsl:param>
-
-<!--###################################################
-                         Labels
-    ################################################### -->   
-
-    <!-- Label Chapters and Sections (numbering) -->
-    <xsl:param name="chapter.autolabel">1</xsl:param>
-    <xsl:param name="section.autolabel" select="1"/>
-    <xsl:param name="section.label.includes.component.label" select="1"/>
-                
-<!--###################################################
-                         Callouts
-    ################################################### -->   
-
-    <!-- Don't use graphics, use a simple number style -->
-    <xsl:param name="callout.graphics">0</xsl:param>
-
-    <!-- Place callout marks at this column in annotated areas -->
-    <xsl:param name="callout.defaultcolumn">90</xsl:param>
-
-<!--###################################################
-                          Misc
-    ################################################### -->   
-
-    <!-- Placement of titles -->
-    <xsl:param name="formal.title.placement">
-        figure after
-        example before
-        equation before
-        table before
-        procedure before
-    </xsl:param>    
-    
-</xsl:stylesheet>

Copied: trunk/HibernateExt/entitymanager/doc/reference/en/styles/html_chunk.xsl (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/doc/reference/en/styles/html_chunk.xsl)
===================================================================
--- trunk/HibernateExt/entitymanager/doc/reference/en/styles/html_chunk.xsl	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/doc/reference/en/styles/html_chunk.xsl	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,86 @@
+<?xml version="1.0"?>
+
+<!--
+
+    This is the XSL HTML configuration file for the Hibernate
+    Reference Documentation.
+
+    It took me days to figure out this stuff and fix most of
+    the obvious bugs in the DocBook XSL distribution. Some of
+    the workarounds might not be appropriate with a newer version
+    of DocBook XSL. This file is released as part of Hibernate,
+    hence LGPL licensed.
+
+    christian at hibernate.org
+-->
+
+<!DOCTYPE xsl:stylesheet [
+    <!ENTITY db_xsl_path        "../../../../../../Hibernate3/doc/reference/support/docbook-xsl/">
+]>
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+                version="1.0"
+                xmlns="http://www.w3.org/TR/xhtml1/transitional"
+                exclude-result-prefixes="#default">
+                
+<xsl:import href="&db_xsl_path;/html/chunk.xsl"/>
+
+<!--###################################################
+                     HTML Settings
+    ################################################### -->   
+
+    <xsl:param name="chunk.section.depth">'5'</xsl:param>
+    <xsl:param name="use.id.as.filename">'1'</xsl:param>
+    <xsl:param name="html.stylesheet">../shared/css/html.css</xsl:param>
+
+    <!-- These extensions are required for table printing and other stuff -->
+    <xsl:param name="use.extensions">1</xsl:param>
+    <xsl:param name="tablecolumns.extension">0</xsl:param>
+    <xsl:param name="callout.extensions">1</xsl:param>
+    <xsl:param name="graphicsize.extension">0</xsl:param>
+    
+<!--###################################################
+                      Table Of Contents
+    ################################################### -->   
+
+    <!-- Generate the TOCs for named components only -->
+    <xsl:param name="generate.toc">
+        book   toc
+    </xsl:param>
+    
+    <!-- Show only Sections up to level 3 in the TOCs -->
+    <xsl:param name="toc.section.depth">3</xsl:param>
+
+<!--###################################################
+                         Labels
+    ################################################### -->   
+
+    <!-- Label Chapters and Sections (numbering) -->
+    <xsl:param name="chapter.autolabel">1</xsl:param>
+    <xsl:param name="section.autolabel" select="1"/>
+    <xsl:param name="section.label.includes.component.label" select="1"/>
+                
+<!--###################################################
+                         Callouts
+    ################################################### -->   
+
+    <!-- Don't use graphics, use a simple number style -->
+    <xsl:param name="callout.graphics">0</xsl:param>
+
+    <!-- Place callout marks at this column in annotated areas -->
+    <xsl:param name="callout.defaultcolumn">90</xsl:param>
+
+<!--###################################################
+                          Misc
+    ################################################### -->   
+
+    <!-- Placement of titles -->
+    <xsl:param name="formal.title.placement">
+        figure after
+        example before
+        equation before
+        table before
+        procedure before
+    </xsl:param>    
+    
+</xsl:stylesheet>

Copied: trunk/HibernateExt/entitymanager/jdbc (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/jdbc)

Deleted: trunk/HibernateExt/entitymanager/jdbc/hsqldb.jar
===================================================================
(Binary files differ)

Copied: trunk/HibernateExt/entitymanager/jdbc/hsqldb.jar (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/jdbc/hsqldb.jar)
===================================================================
(Binary files differ)

Deleted: trunk/HibernateExt/entitymanager/lgpl.txt
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/lgpl.txt	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/lgpl.txt	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,504 +0,0 @@
-		  GNU LESSER GENERAL PUBLIC LICENSE
-		       Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
-     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL.  It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
-			    Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
-  This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it.  You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
-  When we speak of free software, we are referring to freedom of use,
-not price.  Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
-  To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights.  These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
-  For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you.  You must make sure that they, too, receive or can get the source
-code.  If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it.  And you must show them these terms so they know their rights.
-
-  We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
-  To protect each distributor, we want to make it very clear that
-there is no warranty for the free library.  Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-
-  Finally, software patents pose a constant threat to the existence of
-any free program.  We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder.  Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
-  Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License.  This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License.  We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
-  When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library.  The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom.  The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
-  We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License.  It also provides other free software developers Less
-of an advantage over competing non-free programs.  These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries.  However, the Lesser license provides advantages in certain
-special circumstances.
-
-  For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard.  To achieve this, non-free programs must be
-allowed to use the library.  A more frequent case is that a free
-library does the same job as widely used non-free libraries.  In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
-  In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software.  For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
-  Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.  Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library".  The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-
-		  GNU LESSER GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
-  A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
-  The "Library", below, refers to any such software library or work
-which has been distributed under these terms.  A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language.  (Hereinafter, translation is
-included without limitation in the term "modification".)
-
-  "Source code" for a work means the preferred form of the work for
-making modifications to it.  For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
-  Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it).  Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-  
-  1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
-  You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
-  2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) The modified work must itself be a software library.
-
-    b) You must cause the files modified to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    c) You must cause the whole of the work to be licensed at no
-    charge to all third parties under the terms of this License.
-
-    d) If a facility in the modified Library refers to a function or a
-    table of data to be supplied by an application program that uses
-    the facility, other than as an argument passed when the facility
-    is invoked, then you must make a good faith effort to ensure that,
-    in the event an application does not supply such function or
-    table, the facility still operates, and performs whatever part of
-    its purpose remains meaningful.
-
-    (For example, a function in a library to compute square roots has
-    a purpose that is entirely well-defined independent of the
-    application.  Therefore, Subsection 2d requires that any
-    application-supplied function or table used by this function must
-    be optional: if the application does not supply it, the square
-    root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library.  To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License.  (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.)  Do not make any other change in
-these notices.
-
-  Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
-  This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
-  4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
-  If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library".  Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
-  However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library".  The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
-  When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library.  The
-threshold for this to be true is not precisely defined by law.
-
-  If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work.  (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
-  Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
-  6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
-  You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License.  You must supply a copy of this License.  If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License.  Also, you must do one
-of these things:
-
-    a) Accompany the work with the complete corresponding
-    machine-readable source code for the Library including whatever
-    changes were used in the work (which must be distributed under
-    Sections 1 and 2 above); and, if the work is an executable linked
-    with the Library, with the complete machine-readable "work that
-    uses the Library", as object code and/or source code, so that the
-    user can modify the Library and then relink to produce a modified
-    executable containing the modified Library.  (It is understood
-    that the user who changes the contents of definitions files in the
-    Library will not necessarily be able to recompile the application
-    to use the modified definitions.)
-
-    b) Use a suitable shared library mechanism for linking with the
-    Library.  A suitable mechanism is one that (1) uses at run time a
-    copy of the library already present on the user's computer system,
-    rather than copying library functions into the executable, and (2)
-    will operate properly with a modified version of the library, if
-    the user installs one, as long as the modified version is
-    interface-compatible with the version that the work was made with.
-
-    c) Accompany the work with a written offer, valid for at
-    least three years, to give the same user the materials
-    specified in Subsection 6a, above, for a charge no more
-    than the cost of performing this distribution.
-
-    d) If distribution of the work is made by offering access to copy
-    from a designated place, offer equivalent access to copy the above
-    specified materials from the same place.
-
-    e) Verify that the user has already received a copy of these
-    materials or that you have already sent this user a copy.
-
-  For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it.  However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
-  It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system.  Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
-  7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
-    a) Accompany the combined library with a copy of the same work
-    based on the Library, uncombined with any other library
-    facilities.  This must be distributed under the terms of the
-    Sections above.
-
-    b) Give prominent notice with the combined library of the fact
-    that part of it is a work based on the Library, and explaining
-    where to find the accompanying uncombined form of the same work.
-
-  8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License.  Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License.  However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
-  9. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Library or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
-  10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-
-  11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded.  In such case, this License incorporates the limitation as if
-written in the body of this License.
-
-  13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation.  If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
-  14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission.  For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this.  Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
-			    NO WARRANTY
-
-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
-		     END OF TERMS AND CONDITIONS
-		     
-           How to Apply These Terms to Your New Libraries
-
-  If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change.  You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
-  To apply these terms, attach the following notices to the library.  It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the library's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the
-  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
-  <signature of Ty Coon>, 1 April 1990
-  Ty Coon, President of Vice
-
-That's all there is to it!
-
-

Copied: trunk/HibernateExt/entitymanager/lgpl.txt (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/lgpl.txt)
===================================================================
--- trunk/HibernateExt/entitymanager/lgpl.txt	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/lgpl.txt	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,504 @@
+		  GNU LESSER GENERAL PUBLIC LICENSE
+		       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+		  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+  
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+			    NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+		     
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+

Copied: trunk/HibernateExt/entitymanager/lib (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/lib)

Deleted: trunk/HibernateExt/entitymanager/lib/README.txt
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/lib/README.txt	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/lib/README.txt	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,19 +0,0 @@
-Hibernate Entity Manager dependencies
-=====================================
-
-
-Core
-====
-hibernate-commons-annotations.jar: required
-ejb3-persistence.jar: required
-hibernate-annotations: required
-hibernate-validator: required
-hibernate3.jar: required
-hibernate core dependencies: required (see Hibernate Core for more information)
-javassist.jar: required (part of Hibernate Core dependencies)
-jboss-archive-browsing (jboss-common-core 2.0.2.Alpha): required
-
-
-Test
-====
-(no extra dependency)
\ No newline at end of file

Copied: trunk/HibernateExt/entitymanager/lib/README.txt (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/lib/README.txt)
===================================================================
--- trunk/HibernateExt/entitymanager/lib/README.txt	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/lib/README.txt	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,19 @@
+Hibernate Entity Manager dependencies
+=====================================
+
+
+Core
+====
+hibernate-commons-annotations.jar: required
+ejb3-persistence.jar: required
+hibernate-annotations: required
+hibernate-validator: required
+hibernate3.jar: required
+hibernate core dependencies: required (see Hibernate Core for more information)
+javassist.jar: required (part of Hibernate Core dependencies)
+jboss-archive-browsing (jboss-common-core 2.0.2.Alpha): required
+
+
+Test
+====
+(no extra dependency)
\ No newline at end of file

Deleted: trunk/HibernateExt/entitymanager/lib/jboss-archive-browsing.jar
===================================================================
(Binary files differ)

Copied: trunk/HibernateExt/entitymanager/lib/jboss-archive-browsing.jar (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/lib/jboss-archive-browsing.jar)
===================================================================
(Binary files differ)

Deleted: trunk/HibernateExt/entitymanager/readme.txt
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/readme.txt	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/readme.txt	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,57 +0,0 @@
-Hibernate EntityManager
-==================================================
-Version: 3.2.1.GA, 8.12.2006
-
-THIS RELEASE OF HIBERNATE ENTITYMANAGER REQUIRES HIBERNATE CORE 3.2.0.GA (and above) AND 
-DOES NOT WORK WITH HIBERNATE 3.1.x OR ANY OLDER VERSION OF HIBERNATE.
-
-
-Description
------------
-
-The EJB3 specification recognizes the interest and the success of
-the transparent object/relational mapping paradigm. The EJB3 specification
-standardizes the basic APIs and the metadata needed for any object/relational
-persistence mechanism.
-
-Hibernate EntityManager implements the programming interfaces and lifecycle rules
-as defined by the EJB3 persistence specification. Together with Hibernate Annotations
-this wrapper implements a complete (and standalone) EJB3 persistence solution on
-top of the mature Hibernate core. You may use a combination of all three together,
-annotations without EJB3 programming interfaces and lifecycle, or even pure native
-Hibernate, depending on the business and technical needs of your project. You can
-at all times fall back to Hibernate native APIs, or if required, even to native
-JDBC and SQL.
-
-
-Instructions
-------------
-
-Unzip to installation directory, read doc/reference
-
-
-Contact
-------------
-
-Latest Documentation:
-
-   http://hibernate.org
-   http://annotations.hibernate.org
-
-Bug Reports:
-
-   Hibernate JIRA (preferred)
-   hibernate-devel at lists.sourceforge.net
-
-Free Technical Support:
-
-   http://forum.hibernate.org
-
-
-Notes
------------
-
-If you want to contribute, go to http://www.hibernate.org/
-
-This software and its documentation are distributed under the terms of the
-FSF Lesser Gnu Public License (see lgpl.txt).
\ No newline at end of file

Copied: trunk/HibernateExt/entitymanager/readme.txt (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/readme.txt)
===================================================================
--- trunk/HibernateExt/entitymanager/readme.txt	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/readme.txt	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,57 @@
+Hibernate EntityManager
+==================================================
+Version: 3.2.1.GA, 8.12.2006
+
+THIS RELEASE OF HIBERNATE ENTITYMANAGER REQUIRES HIBERNATE CORE 3.2.0.GA (and above) AND 
+DOES NOT WORK WITH HIBERNATE 3.1.x OR ANY OLDER VERSION OF HIBERNATE.
+
+
+Description
+-----------
+
+The EJB3 specification recognizes the interest and the success of
+the transparent object/relational mapping paradigm. The EJB3 specification
+standardizes the basic APIs and the metadata needed for any object/relational
+persistence mechanism.
+
+Hibernate EntityManager implements the programming interfaces and lifecycle rules
+as defined by the EJB3 persistence specification. Together with Hibernate Annotations
+this wrapper implements a complete (and standalone) EJB3 persistence solution on
+top of the mature Hibernate core. You may use a combination of all three together,
+annotations without EJB3 programming interfaces and lifecycle, or even pure native
+Hibernate, depending on the business and technical needs of your project. You can
+at all times fall back to Hibernate native APIs, or if required, even to native
+JDBC and SQL.
+
+
+Instructions
+------------
+
+Unzip to installation directory, read doc/reference
+
+
+Contact
+------------
+
+Latest Documentation:
+
+   http://hibernate.org
+   http://annotations.hibernate.org
+
+Bug Reports:
+
+   Hibernate JIRA (preferred)
+   hibernate-devel at lists.sourceforge.net
+
+Free Technical Support:
+
+   http://forum.hibernate.org
+
+
+Notes
+-----------
+
+If you want to contribute, go to http://www.hibernate.org/
+
+This software and its documentation are distributed under the terms of the
+FSF Lesser Gnu Public License (see lgpl.txt).
\ No newline at end of file

Copied: trunk/HibernateExt/entitymanager/src (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src)

Copied: trunk/HibernateExt/entitymanager/src/java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java)

Copied: trunk/HibernateExt/entitymanager/src/java/org (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org)

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate)

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb)

Deleted: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/AbstractEntityManagerImpl.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/AbstractEntityManagerImpl.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/AbstractEntityManagerImpl.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,658 +0,0 @@
-/*
- * JBoss, the OpenSource EJB server Distributable under LGPL license. See terms of license at
- * gnu.org.
- */
-package org.hibernate.ejb;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.io.Serializable;
-import java.util.Map;
-import javax.persistence.EntityExistsException;
-import javax.persistence.EntityNotFoundException;
-import javax.persistence.EntityTransaction;
-import javax.persistence.FlushModeType;
-import javax.persistence.LockModeType;
-import javax.persistence.NoResultException;
-import javax.persistence.NonUniqueResultException;
-import javax.persistence.OptimisticLockException;
-import javax.persistence.PersistenceContextType;
-import javax.persistence.PersistenceException;
-import javax.persistence.Query;
-import javax.persistence.TransactionRequiredException;
-import javax.persistence.spi.PersistenceUnitTransactionType;
-import javax.transaction.Status;
-import javax.transaction.Synchronization;
-import javax.transaction.SystemException;
-import javax.transaction.TransactionManager;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.hibernate.AssertionFailure;
-import org.hibernate.FlushMode;
-import org.hibernate.HibernateException;
-import org.hibernate.LockMode;
-import org.hibernate.MappingException;
-import org.hibernate.ObjectDeletedException;
-import org.hibernate.ObjectNotFoundException;
-import org.hibernate.SQLQuery;
-import org.hibernate.Session;
-import org.hibernate.StaleStateException;
-import org.hibernate.Transaction;
-import org.hibernate.UnresolvableObjectException;
-import org.hibernate.TypeMismatchException;
-import org.hibernate.QueryException;
-import org.hibernate.TransientObjectException;
-import org.hibernate.StaleObjectStateException;
-import org.hibernate.cfg.Environment;
-import org.hibernate.ejb.transaction.JoinableCMTTransaction;
-import org.hibernate.ejb.util.ConfigurationHelper;
-import org.hibernate.engine.SessionFactoryImplementor;
-import org.hibernate.engine.SessionImplementor;
-import org.hibernate.exception.ConstraintViolationException;
-import org.hibernate.proxy.HibernateProxy;
-import org.hibernate.transaction.TransactionFactory;
-import org.hibernate.util.JTAHelper;
-import org.hibernate.util.CollectionHelper;
-
-/**
- * @author <a href="mailto:gavin at hibernate.org">Gavin King</a>
- * @author Emmanuel Bernard
- */
-public abstract class AbstractEntityManagerImpl implements HibernateEntityManagerImplementor, Serializable {
-	private static Log log = LogFactory.getLog( AbstractEntityManagerImpl.class );
-
-	protected transient TransactionImpl tx = new TransactionImpl( this );
-	protected PersistenceContextType persistenceContextType;
-	private FlushModeType flushModeType = FlushModeType.AUTO;
-	private PersistenceUnitTransactionType transactionType;
-	private Map properties;
-
-	protected AbstractEntityManagerImpl(
-			PersistenceContextType type, PersistenceUnitTransactionType transactionType, Map properties
-	) {
-		this.persistenceContextType = type;
-		this.transactionType = transactionType;
-		this.properties = properties != null ? properties : CollectionHelper.EMPTY_MAP;
-	}
-
-	protected void postInit() {
-		//register in Sync if needed
-		if ( PersistenceUnitTransactionType.JTA.equals( transactionType ) ) joinTransaction( true );
-		Object flushMode = properties.get( "org.hibernate.flushMode" );
-		if (flushMode != null) {
-			getSession().setFlushMode( ConfigurationHelper.getFlushMode( flushMode ) );
-		}
-		this.properties = null;
-	}
-
-	public Query createQuery(String ejbqlString) {
-		//adjustFlushMode();
-		try {
-			return new QueryImpl( getSession().createQuery( ejbqlString ), this );
-		}
-		catch (HibernateException he) {
-			throwPersistenceException( he );
-			return null;
-		}
-	}
-
-	public Query createNamedQuery(String name) {
-		//adjustFlushMode();
-		try {
-			return new QueryImpl( getSession().getNamedQuery( name ), this );
-		}
-		catch (HibernateException he) {
-			throwPersistenceException( he );
-			return null;
-		}
-	}
-
-	public Query createNativeQuery(String sqlString) {
-		//adjustFlushMode();
-		try {
-			SQLQuery q = getSession().createSQLQuery( sqlString );
-			return new QueryImpl( q, this );
-		}
-		catch (HibernateException he) {
-			throwPersistenceException( he );
-			return null;
-		}
-	}
-
-	public Query createNativeQuery(String sqlString, Class resultClass) {
-		//adjustFlushMode();
-		try {
-			SQLQuery q = getSession().createSQLQuery( sqlString );
-			q.addEntity( "alias1", resultClass.getName(), LockMode.READ );
-			return new QueryImpl( q, this );
-		}
-		catch (HibernateException he) {
-			throwPersistenceException( he );
-			return null;
-		}
-	}
-
-	public Query createNativeQuery(String sqlString, String resultSetMapping) {
-		//adjustFlushMode();
-		try {
-			SQLQuery q = getSession().createSQLQuery( sqlString );
-			q.setResultSetMapping( resultSetMapping );
-			return new QueryImpl( q, this );
-		}
-		catch (HibernateException he) {
-			throwPersistenceException( he );
-			return null;
-		}
-	}
-
-	@SuppressWarnings("unchecked")
-	public <T> T getReference(Class<T> entityClass, Object primaryKey) {
-		//adjustFlushMode();
-		try {
-			return (T) getSession().load( entityClass, (Serializable) primaryKey );
-		}
-		catch (MappingException e) {
-			throw new IllegalArgumentException( e.getMessage(), e );
-		}
-		catch (TypeMismatchException e ) {
-			throw new IllegalArgumentException( e.getMessage(), e );
-		}
-		catch (ClassCastException e) {
-			throw new IllegalArgumentException( e.getMessage(), e );
-		}
-		catch (HibernateException he) {
-			throwPersistenceException( he );
-			return null;
-		}
-	}
-
-	@SuppressWarnings("unchecked")
-	public <A> A find(Class<A> entityClass, Object primaryKey) {
-		//adjustFlushMode();
-		try {
-			return (A) getSession().get( entityClass, (Serializable) primaryKey );
-		}
-		catch (ObjectDeletedException e) {
-			//the spec is silent about people doing remove() find() on the same PC
-			return null;
-		}
-		catch (ObjectNotFoundException e) {
-			//should not happen on the entity itself with get
-			throw new IllegalArgumentException( e.getMessage(), e );
-		}
-		catch (MappingException e) {
-			throw new IllegalArgumentException( e.getMessage(), e );
-		}
-		catch (TypeMismatchException e ) {
-			throw new IllegalArgumentException( e.getMessage(), e );
-		}
-		catch (ClassCastException e) {
-			throw new IllegalArgumentException( e.getMessage(), e );
-		}
-		catch (HibernateException he) {
-			throwPersistenceException( he );
-			return null;
-		}
-	}
-
-	private void checkTransactionNeeded() {
-		if ( persistenceContextType == PersistenceContextType.TRANSACTION && ! isTransactionInProgress() ) {
-			//no need to mark as rollback, no tx in progress
-			throw new TransactionRequiredException(
-					"no transaction is in progress for a TRANSACTION type persistence context"
-			);
-		}
-	}
-
-	public void persist(Object entity) {
-		checkTransactionNeeded();
-		//adjustFlushMode();
-		try {
-			getSession().persist( entity );
-		}
-		catch (MappingException e) {
-			throw new IllegalArgumentException( e.getMessage() );
-		}
-		catch (HibernateException he) {
-			throwPersistenceException( he );
-		}
-	}
-
-	@SuppressWarnings("unchecked")
-	public <A> A merge(A entity) {
-		checkTransactionNeeded();
-		//adjustFlushMode();
-		try {
-			return (A) getSession().merge( entity );
-		}
-		catch (ObjectDeletedException sse) {
-			throw new IllegalArgumentException( sse );
-		}
-		catch (MappingException e) {
-			throw new IllegalArgumentException( e.getMessage(), e );
-		}
-		catch (HibernateException he) {
-			throwPersistenceException( he );
-			return null;
-		}
-	}
-
-	public void remove(Object entity) {
-		checkTransactionNeeded();
-		//adjustFlushMode();
-		try {
-			getSession().delete( entity );
-		}
-		catch (MappingException e) {
-			throw new IllegalArgumentException( e.getMessage(), e );
-		}
-		catch (HibernateException he) {
-			throwPersistenceException( he );
-		}
-	}
-
-	public void refresh(Object entity) {
-		checkTransactionNeeded();
-		//adjustFlushMode();
-		try {
-			if ( ! getSession().contains( entity ) ) {
-				throw new IllegalArgumentException( "Entity not managed" );
-			}
-			getSession().refresh( entity );
-		}
-		catch (MappingException e) {
-			throw new IllegalArgumentException( e.getMessage(), e );
-		}
-		catch (HibernateException he) {
-			throwPersistenceException( he );
-		}
-	}
-
-	public boolean contains(Object entity) {
-		try {
-			if ( entity != null
-					&& ! ( entity instanceof HibernateProxy )
-					&& getSession().getSessionFactory().getClassMetadata( entity.getClass() ) == null ) {
-				throw new IllegalArgumentException( "Not an entity:" + entity.getClass() );
-			}
-			return getSession().contains( entity );
-		}
-		catch (MappingException e) {
-			throw new IllegalArgumentException( e.getMessage(), e );
-		}
-		catch (HibernateException he) {
-			throwPersistenceException( he );
-			return false;
-		}
-	}
-
-	public void flush() {
-		try {
-			if ( ! isTransactionInProgress() ) {
-				throw new TransactionRequiredException( "no transaction is in progress" );
-			}
-			//adjustFlushMode();
-			getSession().flush();
-		}
-		catch (HibernateException he) {
-			throwPersistenceException( he );
-		}
-	}
-
-	/**
-	 * return a Session
-	 * @throws IllegalStateException if the entity manager is closed
-	 */
-	public abstract Session getSession();
-
-	/**
-	 * Return a Session (even if the entity manager is closed
-	 */
-	protected abstract Session getRawSession();
-
-	public EntityTransaction getTransaction() {
-		if ( transactionType == PersistenceUnitTransactionType.JTA ) {
-			throw new IllegalStateException( "A JTA EntityManager cannot use getTransaction()" );
-		}
-		return tx;
-	}
-
-	public void setFlushMode(FlushModeType flushModeType) {
-		this.flushModeType = flushModeType;
-		if ( flushModeType == FlushModeType.AUTO ) {
-			getSession().setFlushMode( FlushMode.AUTO );
-		}
-		else if ( flushModeType == FlushModeType.COMMIT ) {
-			getSession().setFlushMode( FlushMode.COMMIT );
-		}
-		else {
-			throw new AssertionFailure( "Unknown FlushModeType: " + flushModeType );
-		}
-	}
-
-	public void clear() {
-		//adjustFlushMode();
-		try {
-			getSession().clear();
-		}
-		catch (HibernateException he) {
-			throwPersistenceException( he );
-		}
-	}
-
-	public FlushModeType getFlushMode() {
-		FlushMode mode = getSession().getFlushMode();
-		if ( mode == FlushMode.AUTO ) {
-			this.flushModeType = FlushModeType.AUTO;
-		}
-		else if ( mode == FlushMode.COMMIT ) {
-			this.flushModeType = FlushModeType.COMMIT;
-		}
-//		else if ( mode == FlushMode.NEVER ) {
-//			if ( PersistenceContextType.EXTENDED == persistenceContextType && !isTransactionInProgress() ) {
-//				//we are in flushMode none for EXTENDED
-//				return flushMode;
-//			}
-//			else {
-//				return null; //TODO exception?
-//			}
-//		}
-		else {
-			return null; //TODO exception?
-		}
-		//otherwise this is an unknown mode for EJB3
-		return flushModeType;
-	}
-
-	public void lock(Object entity, LockModeType lockMode) {
-		try {
-			if ( ! isTransactionInProgress() ) {
-				throw new TransactionRequiredException( "no transaction is in progress" );
-			}
-			//adjustFlushMode();
-			if ( !contains( entity ) ) throw new IllegalArgumentException( "entity not in the persistence context" );
-			getSession().lock( entity, getLockMode( lockMode ) );
-		}
-		catch (HibernateException he) {
-			throwPersistenceException( he );
-		}
-	}
-
-	private LockMode getLockMode(LockModeType lockMode) {
-		switch ( lockMode ) {
-			case READ:
-				return LockMode.UPGRADE; //assuming we are on read-commited and we need to prevent non repeteable read
-			case WRITE:
-				return LockMode.FORCE;
-			default:
-				throw new AssertionFailure( "Unknown LockModeType: " + lockMode );
-		}
-	}
-
-	/**
-	 * adjust the flush mode to match the no tx / no flush behavior
-	 */
-	//remove
-	private void adjustFlushMode() {
-		Session session = getSession();
-
-		boolean isTransactionActive = isTransactionInProgress();
-
-		if ( isTransactionActive && session.getFlushMode() == FlushMode.MANUAL ) {
-			log.debug( "Transaction activated, move to FlushMode " + flushModeType );
-			setFlushMode( flushModeType );
-		}
-		else if ( ! isTransactionActive && session.getFlushMode() != FlushMode.MANUAL ) {
-			log.debug( "Transaction not active, move to FlushMode NEVER" );
-			session.setFlushMode( FlushMode.MANUAL );
-		}
-	}
-
-	public boolean isTransactionInProgress() {
-		return ( (SessionImplementor) getRawSession() ).isTransactionInProgress();
-	}
-
-	protected void markAsRollback() {
-		log.debug( "mark transaction for rollback");
-		if ( tx.isActive() ) {
-			tx.setRollbackOnly();
-		}
-		else {
-			//no explicit use of the tx. boudaries methods
-			if ( PersistenceUnitTransactionType.JTA == transactionType ) {
-				TransactionManager transactionManager =
-						( (SessionFactoryImplementor) getRawSession().getSessionFactory() ).getTransactionManager();
-				if ( transactionManager == null ) {
-					throw new PersistenceException(
-							"Using a JTA persistence context wo setting hibernate.transaction.manager_lookup_class"
-					);
-				}
-				try {
-					transactionManager.setRollbackOnly();
-				}
-				catch (SystemException e) {
-					throw new PersistenceException( "Unable to set the JTA transaction as RollbackOnly", e );
-				}
-			}
-		}
-	}
-
-	public void joinTransaction() {
-		joinTransaction( false );
-	}
-
-	private void joinTransaction(boolean ignoreNotJoining) {
-		//set the joined status
-		getSession().isOpen(); //for sync
-		if ( transactionType == PersistenceUnitTransactionType.JTA ) {
-			try {
-				log.debug( "Looking for a JTA transaction to join" );
-				final Session session = getSession();
-				final Transaction transaction = session.getTransaction();
-				if ( transaction != null && transaction instanceof JoinableCMTTransaction ) {
-					//can't handle it if not a joinnable transaction
-					final JoinableCMTTransaction joinableCMTTransaction = (JoinableCMTTransaction) transaction;
-
-					if ( joinableCMTTransaction.getStatus() == JoinableCMTTransaction.JoinStatus.JOINED ) {
-						log.debug( "Transaction already joined" );
-						return; //no-op
-					}
-					joinableCMTTransaction.markForJoined();
-					session.isOpen(); //register to the Tx
-					if ( joinableCMTTransaction.getStatus() == JoinableCMTTransaction.JoinStatus.NOT_JOINED ) {
-						if ( ignoreNotJoining ) {
-							log.debug( "No JTA transaction found" );
-							return;
-						}
-						else {
-							throw new TransactionRequiredException(
-									"No active JTA transaction on joinTransaction call"
-							);
-						}
-					}
-					else
-					if ( joinableCMTTransaction.getStatus() == JoinableCMTTransaction.JoinStatus.MARKED_FOR_JOINED ) {
-						throw new AssertionFailure( "Transaction MARKED_FOR_JOINED after isOpen() call" );
-					}
-					//flush before completion and
-					//register clear on rollback
-					log.trace( "Adding flush() and close() synchronization" );
-					joinableCMTTransaction.registerSynchronization(
-							new Synchronization() {
-								public void beforeCompletion() {
-									boolean flush = false;
-									TransactionFactory.Context ctx = null;
-									try {
-										ctx = (TransactionFactory.Context) session;
-										JoinableCMTTransaction joinable = (JoinableCMTTransaction) session.getTransaction();
-										javax.transaction.Transaction transaction = joinable.getTransaction();
-										if ( transaction == null )
-											log.warn( "Transaction not available on beforeCompletionPhase: assuming valid" );
-										flush = !ctx.isFlushModeNever() &&
-												//ctx.isFlushBeforeCompletionEnabled() &&
-												//TODO probably make it ! isFlushBeforecompletion()
-												( transaction == null || !JTAHelper.isRollback( transaction.getStatus() ) );
-												//transaction == null workaround a JBoss TMBug
-									}
-									catch (SystemException se) {
-										log.error( "could not determine transaction status", se );
-										//throwPersistenceException will mark the transaction as rollbacked
-										throwPersistenceException(
-												new PersistenceException(
-														"could not determine transaction status in beforeCompletion()",
-														se
-												)
-										);
-									}
-									catch (HibernateException he) {
-										throwPersistenceException( he );
-									}
-
-									try {
-										if ( flush ) {
-											log.trace( "automatically flushing session" );
-											ctx.managedFlush();
-										}
-										else {
-											log.trace( "skipping managed flushing" );
-										}
-									}
-									catch (RuntimeException re) {
-										//throwPersistenceException will mark the transaction as rollbacked
-										if ( re instanceof HibernateException ) {
-											throwPersistenceException( (HibernateException) re );
-										}
-										else {
-											throwPersistenceException( new PersistenceException( re ) );
-										}
-									}
-								}
-
-								public void afterCompletion(int status) {
-									try {
-										if ( Status.STATUS_ROLLEDBACK == status
-												&& transactionType == PersistenceUnitTransactionType.JTA ) {
-											if ( session.isOpen() ) {
-												session.clear();
-											}
-										}
-										if ( session.isOpen() ) {
-											//only reset if the session is opened since you can't get the Transaction otherwise
-											JoinableCMTTransaction joinable = (JoinableCMTTransaction) session.getTransaction();
-											joinable.resetStatus();
-										}
-									}
-									catch (HibernateException e) {
-										throwPersistenceException( e );
-									}
-								}
-							}
-					);
-				}
-				else {
-					log.warn( "Cannot join transaction: do not override " + Environment.TRANSACTION_STRATEGY );
-				}
-			}
-			catch (HibernateException he) {
-				throwPersistenceException( he );
-			}
-		}
-		else {
-			if ( !ignoreNotJoining ) log.warn( "Calling joinTransaction() on a non JTA EntityManager" );
-		}
-	}
-
-	/**
-	 * returns the underlying session
-	 */
-	public Object getDelegate() {
-		return getSession();
-	}
-
-	;
-
-	private void writeObject(ObjectOutputStream oos) throws IOException {
-		oos.defaultWriteObject();
-	}
-
-	private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
-		ois.defaultReadObject();
-		tx = new TransactionImpl( this );
-	}
-
-	public void throwPersistenceException(PersistenceException e) {
-		if ( ! ( e instanceof NoResultException || e instanceof NonUniqueResultException ) ) {
-			try {
-				markAsRollback();
-			}
-			catch (Exception ne) {
-				//we do not want the subsequent exception to swallow the original one
-				log.error( "Unable to mark for rollback on PersistenceException: ", ne);
-			}
-		}
-		throw e;
-	}
-
-	public void throwPersistenceException(HibernateException e) {
-		if ( e instanceof StaleStateException ) {
-			PersistenceException pe = wrapStaleStateException( (StaleStateException) e );
-			throwPersistenceException( pe );
-		}
-		else if ( e instanceof ConstraintViolationException ) {
-			//FIXME this is bad cause ConstraintViolationException happens in other circumstances
-			throwPersistenceException( new EntityExistsException( e ) );
-		}
-		else if ( e instanceof ObjectNotFoundException ) {
-			throwPersistenceException( new EntityNotFoundException( e.getMessage() ) );
-		}
-		else if ( e instanceof org.hibernate.NonUniqueResultException ) {
-			throwPersistenceException( new NonUniqueResultException( e.getMessage() ) );
-		}
-		else if ( e instanceof UnresolvableObjectException ) {
-			throwPersistenceException( new EntityNotFoundException( e.getMessage() ) );
-		}
-		else if ( e instanceof QueryException ) {
-			throw new IllegalArgumentException( e );
-		}
-		else if ( e instanceof TransientObjectException ) {
-			try {
-				markAsRollback();
-			}
-			catch (Exception ne) {
-				//we do not want the subsequent exception to swallow the original one
-				log.error( "Unable to mark for rollback on TransientObjectException: ", ne);
-			}
-			throw new IllegalStateException( e ); //Spec 3.2.3 Synchronization rules
-		}
-		else {
-			throwPersistenceException( new PersistenceException( e ) );
-		}
-	}
-
-	public PersistenceException wrapStaleStateException(StaleStateException e) {
-		PersistenceException pe;
-		if ( e instanceof StaleObjectStateException ) {
-			StaleObjectStateException sose = (StaleObjectStateException) e;
-			Serializable identifier = sose.getIdentifier();
-			if (identifier != null) {
-				Object entity = getRawSession().load( sose.getEntityName(), identifier );
-				if ( entity instanceof Serializable ) {
-					//avoid some user errors regarding boundary crossing
-					pe = new OptimisticLockException( null, e, entity );
-				}
-				else {
-					pe = new OptimisticLockException( e );
-				}
-			}
-			else {
-				pe = new OptimisticLockException( e );
-			}
-		}
-		else {
-			pe = new OptimisticLockException( e );
-		}
-		return pe;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/AbstractEntityManagerImpl.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/AbstractEntityManagerImpl.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/AbstractEntityManagerImpl.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/AbstractEntityManagerImpl.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,658 @@
+/*
+ * JBoss, the OpenSource EJB server Distributable under LGPL license. See terms of license at
+ * gnu.org.
+ */
+package org.hibernate.ejb;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+import java.util.Map;
+import javax.persistence.EntityExistsException;
+import javax.persistence.EntityNotFoundException;
+import javax.persistence.EntityTransaction;
+import javax.persistence.FlushModeType;
+import javax.persistence.LockModeType;
+import javax.persistence.NoResultException;
+import javax.persistence.NonUniqueResultException;
+import javax.persistence.OptimisticLockException;
+import javax.persistence.PersistenceContextType;
+import javax.persistence.PersistenceException;
+import javax.persistence.Query;
+import javax.persistence.TransactionRequiredException;
+import javax.persistence.spi.PersistenceUnitTransactionType;
+import javax.transaction.Status;
+import javax.transaction.Synchronization;
+import javax.transaction.SystemException;
+import javax.transaction.TransactionManager;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.hibernate.AssertionFailure;
+import org.hibernate.FlushMode;
+import org.hibernate.HibernateException;
+import org.hibernate.LockMode;
+import org.hibernate.MappingException;
+import org.hibernate.ObjectDeletedException;
+import org.hibernate.ObjectNotFoundException;
+import org.hibernate.SQLQuery;
+import org.hibernate.Session;
+import org.hibernate.StaleStateException;
+import org.hibernate.Transaction;
+import org.hibernate.UnresolvableObjectException;
+import org.hibernate.TypeMismatchException;
+import org.hibernate.QueryException;
+import org.hibernate.TransientObjectException;
+import org.hibernate.StaleObjectStateException;
+import org.hibernate.cfg.Environment;
+import org.hibernate.ejb.transaction.JoinableCMTTransaction;
+import org.hibernate.ejb.util.ConfigurationHelper;
+import org.hibernate.engine.SessionFactoryImplementor;
+import org.hibernate.engine.SessionImplementor;
+import org.hibernate.exception.ConstraintViolationException;
+import org.hibernate.proxy.HibernateProxy;
+import org.hibernate.transaction.TransactionFactory;
+import org.hibernate.util.JTAHelper;
+import org.hibernate.util.CollectionHelper;
+
+/**
+ * @author <a href="mailto:gavin at hibernate.org">Gavin King</a>
+ * @author Emmanuel Bernard
+ */
+public abstract class AbstractEntityManagerImpl implements HibernateEntityManagerImplementor, Serializable {
+	private static Log log = LogFactory.getLog( AbstractEntityManagerImpl.class );
+
+	protected transient TransactionImpl tx = new TransactionImpl( this );
+	protected PersistenceContextType persistenceContextType;
+	private FlushModeType flushModeType = FlushModeType.AUTO;
+	private PersistenceUnitTransactionType transactionType;
+	private Map properties;
+
+	protected AbstractEntityManagerImpl(
+			PersistenceContextType type, PersistenceUnitTransactionType transactionType, Map properties
+	) {
+		this.persistenceContextType = type;
+		this.transactionType = transactionType;
+		this.properties = properties != null ? properties : CollectionHelper.EMPTY_MAP;
+	}
+
+	protected void postInit() {
+		//register in Sync if needed
+		if ( PersistenceUnitTransactionType.JTA.equals( transactionType ) ) joinTransaction( true );
+		Object flushMode = properties.get( "org.hibernate.flushMode" );
+		if (flushMode != null) {
+			getSession().setFlushMode( ConfigurationHelper.getFlushMode( flushMode ) );
+		}
+		this.properties = null;
+	}
+
+	public Query createQuery(String ejbqlString) {
+		//adjustFlushMode();
+		try {
+			return new QueryImpl( getSession().createQuery( ejbqlString ), this );
+		}
+		catch (HibernateException he) {
+			throwPersistenceException( he );
+			return null;
+		}
+	}
+
+	public Query createNamedQuery(String name) {
+		//adjustFlushMode();
+		try {
+			return new QueryImpl( getSession().getNamedQuery( name ), this );
+		}
+		catch (HibernateException he) {
+			throwPersistenceException( he );
+			return null;
+		}
+	}
+
+	public Query createNativeQuery(String sqlString) {
+		//adjustFlushMode();
+		try {
+			SQLQuery q = getSession().createSQLQuery( sqlString );
+			return new QueryImpl( q, this );
+		}
+		catch (HibernateException he) {
+			throwPersistenceException( he );
+			return null;
+		}
+	}
+
+	public Query createNativeQuery(String sqlString, Class resultClass) {
+		//adjustFlushMode();
+		try {
+			SQLQuery q = getSession().createSQLQuery( sqlString );
+			q.addEntity( "alias1", resultClass.getName(), LockMode.READ );
+			return new QueryImpl( q, this );
+		}
+		catch (HibernateException he) {
+			throwPersistenceException( he );
+			return null;
+		}
+	}
+
+	public Query createNativeQuery(String sqlString, String resultSetMapping) {
+		//adjustFlushMode();
+		try {
+			SQLQuery q = getSession().createSQLQuery( sqlString );
+			q.setResultSetMapping( resultSetMapping );
+			return new QueryImpl( q, this );
+		}
+		catch (HibernateException he) {
+			throwPersistenceException( he );
+			return null;
+		}
+	}
+
+	@SuppressWarnings("unchecked")
+	public <T> T getReference(Class<T> entityClass, Object primaryKey) {
+		//adjustFlushMode();
+		try {
+			return (T) getSession().load( entityClass, (Serializable) primaryKey );
+		}
+		catch (MappingException e) {
+			throw new IllegalArgumentException( e.getMessage(), e );
+		}
+		catch (TypeMismatchException e ) {
+			throw new IllegalArgumentException( e.getMessage(), e );
+		}
+		catch (ClassCastException e) {
+			throw new IllegalArgumentException( e.getMessage(), e );
+		}
+		catch (HibernateException he) {
+			throwPersistenceException( he );
+			return null;
+		}
+	}
+
+	@SuppressWarnings("unchecked")
+	public <A> A find(Class<A> entityClass, Object primaryKey) {
+		//adjustFlushMode();
+		try {
+			return (A) getSession().get( entityClass, (Serializable) primaryKey );
+		}
+		catch (ObjectDeletedException e) {
+			//the spec is silent about people doing remove() find() on the same PC
+			return null;
+		}
+		catch (ObjectNotFoundException e) {
+			//should not happen on the entity itself with get
+			throw new IllegalArgumentException( e.getMessage(), e );
+		}
+		catch (MappingException e) {
+			throw new IllegalArgumentException( e.getMessage(), e );
+		}
+		catch (TypeMismatchException e ) {
+			throw new IllegalArgumentException( e.getMessage(), e );
+		}
+		catch (ClassCastException e) {
+			throw new IllegalArgumentException( e.getMessage(), e );
+		}
+		catch (HibernateException he) {
+			throwPersistenceException( he );
+			return null;
+		}
+	}
+
+	private void checkTransactionNeeded() {
+		if ( persistenceContextType == PersistenceContextType.TRANSACTION && ! isTransactionInProgress() ) {
+			//no need to mark as rollback, no tx in progress
+			throw new TransactionRequiredException(
+					"no transaction is in progress for a TRANSACTION type persistence context"
+			);
+		}
+	}
+
+	public void persist(Object entity) {
+		checkTransactionNeeded();
+		//adjustFlushMode();
+		try {
+			getSession().persist( entity );
+		}
+		catch (MappingException e) {
+			throw new IllegalArgumentException( e.getMessage() );
+		}
+		catch (HibernateException he) {
+			throwPersistenceException( he );
+		}
+	}
+
+	@SuppressWarnings("unchecked")
+	public <A> A merge(A entity) {
+		checkTransactionNeeded();
+		//adjustFlushMode();
+		try {
+			return (A) getSession().merge( entity );
+		}
+		catch (ObjectDeletedException sse) {
+			throw new IllegalArgumentException( sse );
+		}
+		catch (MappingException e) {
+			throw new IllegalArgumentException( e.getMessage(), e );
+		}
+		catch (HibernateException he) {
+			throwPersistenceException( he );
+			return null;
+		}
+	}
+
+	public void remove(Object entity) {
+		checkTransactionNeeded();
+		//adjustFlushMode();
+		try {
+			getSession().delete( entity );
+		}
+		catch (MappingException e) {
+			throw new IllegalArgumentException( e.getMessage(), e );
+		}
+		catch (HibernateException he) {
+			throwPersistenceException( he );
+		}
+	}
+
+	public void refresh(Object entity) {
+		checkTransactionNeeded();
+		//adjustFlushMode();
+		try {
+			if ( ! getSession().contains( entity ) ) {
+				throw new IllegalArgumentException( "Entity not managed" );
+			}
+			getSession().refresh( entity );
+		}
+		catch (MappingException e) {
+			throw new IllegalArgumentException( e.getMessage(), e );
+		}
+		catch (HibernateException he) {
+			throwPersistenceException( he );
+		}
+	}
+
+	public boolean contains(Object entity) {
+		try {
+			if ( entity != null
+					&& ! ( entity instanceof HibernateProxy )
+					&& getSession().getSessionFactory().getClassMetadata( entity.getClass() ) == null ) {
+				throw new IllegalArgumentException( "Not an entity:" + entity.getClass() );
+			}
+			return getSession().contains( entity );
+		}
+		catch (MappingException e) {
+			throw new IllegalArgumentException( e.getMessage(), e );
+		}
+		catch (HibernateException he) {
+			throwPersistenceException( he );
+			return false;
+		}
+	}
+
+	public void flush() {
+		try {
+			if ( ! isTransactionInProgress() ) {
+				throw new TransactionRequiredException( "no transaction is in progress" );
+			}
+			//adjustFlushMode();
+			getSession().flush();
+		}
+		catch (HibernateException he) {
+			throwPersistenceException( he );
+		}
+	}
+
+	/**
+	 * return a Session
+	 * @throws IllegalStateException if the entity manager is closed
+	 */
+	public abstract Session getSession();
+
+	/**
+	 * Return a Session (even if the entity manager is closed
+	 */
+	protected abstract Session getRawSession();
+
+	public EntityTransaction getTransaction() {
+		if ( transactionType == PersistenceUnitTransactionType.JTA ) {
+			throw new IllegalStateException( "A JTA EntityManager cannot use getTransaction()" );
+		}
+		return tx;
+	}
+
+	public void setFlushMode(FlushModeType flushModeType) {
+		this.flushModeType = flushModeType;
+		if ( flushModeType == FlushModeType.AUTO ) {
+			getSession().setFlushMode( FlushMode.AUTO );
+		}
+		else if ( flushModeType == FlushModeType.COMMIT ) {
+			getSession().setFlushMode( FlushMode.COMMIT );
+		}
+		else {
+			throw new AssertionFailure( "Unknown FlushModeType: " + flushModeType );
+		}
+	}
+
+	public void clear() {
+		//adjustFlushMode();
+		try {
+			getSession().clear();
+		}
+		catch (HibernateException he) {
+			throwPersistenceException( he );
+		}
+	}
+
+	public FlushModeType getFlushMode() {
+		FlushMode mode = getSession().getFlushMode();
+		if ( mode == FlushMode.AUTO ) {
+			this.flushModeType = FlushModeType.AUTO;
+		}
+		else if ( mode == FlushMode.COMMIT ) {
+			this.flushModeType = FlushModeType.COMMIT;
+		}
+//		else if ( mode == FlushMode.NEVER ) {
+//			if ( PersistenceContextType.EXTENDED == persistenceContextType && !isTransactionInProgress() ) {
+//				//we are in flushMode none for EXTENDED
+//				return flushMode;
+//			}
+//			else {
+//				return null; //TODO exception?
+//			}
+//		}
+		else {
+			return null; //TODO exception?
+		}
+		//otherwise this is an unknown mode for EJB3
+		return flushModeType;
+	}
+
+	public void lock(Object entity, LockModeType lockMode) {
+		try {
+			if ( ! isTransactionInProgress() ) {
+				throw new TransactionRequiredException( "no transaction is in progress" );
+			}
+			//adjustFlushMode();
+			if ( !contains( entity ) ) throw new IllegalArgumentException( "entity not in the persistence context" );
+			getSession().lock( entity, getLockMode( lockMode ) );
+		}
+		catch (HibernateException he) {
+			throwPersistenceException( he );
+		}
+	}
+
+	private LockMode getLockMode(LockModeType lockMode) {
+		switch ( lockMode ) {
+			case READ:
+				return LockMode.UPGRADE; //assuming we are on read-commited and we need to prevent non repeteable read
+			case WRITE:
+				return LockMode.FORCE;
+			default:
+				throw new AssertionFailure( "Unknown LockModeType: " + lockMode );
+		}
+	}
+
+	/**
+	 * adjust the flush mode to match the no tx / no flush behavior
+	 */
+	//remove
+	private void adjustFlushMode() {
+		Session session = getSession();
+
+		boolean isTransactionActive = isTransactionInProgress();
+
+		if ( isTransactionActive && session.getFlushMode() == FlushMode.MANUAL ) {
+			log.debug( "Transaction activated, move to FlushMode " + flushModeType );
+			setFlushMode( flushModeType );
+		}
+		else if ( ! isTransactionActive && session.getFlushMode() != FlushMode.MANUAL ) {
+			log.debug( "Transaction not active, move to FlushMode NEVER" );
+			session.setFlushMode( FlushMode.MANUAL );
+		}
+	}
+
+	public boolean isTransactionInProgress() {
+		return ( (SessionImplementor) getRawSession() ).isTransactionInProgress();
+	}
+
+	protected void markAsRollback() {
+		log.debug( "mark transaction for rollback");
+		if ( tx.isActive() ) {
+			tx.setRollbackOnly();
+		}
+		else {
+			//no explicit use of the tx. boudaries methods
+			if ( PersistenceUnitTransactionType.JTA == transactionType ) {
+				TransactionManager transactionManager =
+						( (SessionFactoryImplementor) getRawSession().getSessionFactory() ).getTransactionManager();
+				if ( transactionManager == null ) {
+					throw new PersistenceException(
+							"Using a JTA persistence context wo setting hibernate.transaction.manager_lookup_class"
+					);
+				}
+				try {
+					transactionManager.setRollbackOnly();
+				}
+				catch (SystemException e) {
+					throw new PersistenceException( "Unable to set the JTA transaction as RollbackOnly", e );
+				}
+			}
+		}
+	}
+
+	public void joinTransaction() {
+		joinTransaction( false );
+	}
+
+	private void joinTransaction(boolean ignoreNotJoining) {
+		//set the joined status
+		getSession().isOpen(); //for sync
+		if ( transactionType == PersistenceUnitTransactionType.JTA ) {
+			try {
+				log.debug( "Looking for a JTA transaction to join" );
+				final Session session = getSession();
+				final Transaction transaction = session.getTransaction();
+				if ( transaction != null && transaction instanceof JoinableCMTTransaction ) {
+					//can't handle it if not a joinnable transaction
+					final JoinableCMTTransaction joinableCMTTransaction = (JoinableCMTTransaction) transaction;
+
+					if ( joinableCMTTransaction.getStatus() == JoinableCMTTransaction.JoinStatus.JOINED ) {
+						log.debug( "Transaction already joined" );
+						return; //no-op
+					}
+					joinableCMTTransaction.markForJoined();
+					session.isOpen(); //register to the Tx
+					if ( joinableCMTTransaction.getStatus() == JoinableCMTTransaction.JoinStatus.NOT_JOINED ) {
+						if ( ignoreNotJoining ) {
+							log.debug( "No JTA transaction found" );
+							return;
+						}
+						else {
+							throw new TransactionRequiredException(
+									"No active JTA transaction on joinTransaction call"
+							);
+						}
+					}
+					else
+					if ( joinableCMTTransaction.getStatus() == JoinableCMTTransaction.JoinStatus.MARKED_FOR_JOINED ) {
+						throw new AssertionFailure( "Transaction MARKED_FOR_JOINED after isOpen() call" );
+					}
+					//flush before completion and
+					//register clear on rollback
+					log.trace( "Adding flush() and close() synchronization" );
+					joinableCMTTransaction.registerSynchronization(
+							new Synchronization() {
+								public void beforeCompletion() {
+									boolean flush = false;
+									TransactionFactory.Context ctx = null;
+									try {
+										ctx = (TransactionFactory.Context) session;
+										JoinableCMTTransaction joinable = (JoinableCMTTransaction) session.getTransaction();
+										javax.transaction.Transaction transaction = joinable.getTransaction();
+										if ( transaction == null )
+											log.warn( "Transaction not available on beforeCompletionPhase: assuming valid" );
+										flush = !ctx.isFlushModeNever() &&
+												//ctx.isFlushBeforeCompletionEnabled() &&
+												//TODO probably make it ! isFlushBeforecompletion()
+												( transaction == null || !JTAHelper.isRollback( transaction.getStatus() ) );
+												//transaction == null workaround a JBoss TMBug
+									}
+									catch (SystemException se) {
+										log.error( "could not determine transaction status", se );
+										//throwPersistenceException will mark the transaction as rollbacked
+										throwPersistenceException(
+												new PersistenceException(
+														"could not determine transaction status in beforeCompletion()",
+														se
+												)
+										);
+									}
+									catch (HibernateException he) {
+										throwPersistenceException( he );
+									}
+
+									try {
+										if ( flush ) {
+											log.trace( "automatically flushing session" );
+											ctx.managedFlush();
+										}
+										else {
+											log.trace( "skipping managed flushing" );
+										}
+									}
+									catch (RuntimeException re) {
+										//throwPersistenceException will mark the transaction as rollbacked
+										if ( re instanceof HibernateException ) {
+											throwPersistenceException( (HibernateException) re );
+										}
+										else {
+											throwPersistenceException( new PersistenceException( re ) );
+										}
+									}
+								}
+
+								public void afterCompletion(int status) {
+									try {
+										if ( Status.STATUS_ROLLEDBACK == status
+												&& transactionType == PersistenceUnitTransactionType.JTA ) {
+											if ( session.isOpen() ) {
+												session.clear();
+											}
+										}
+										if ( session.isOpen() ) {
+											//only reset if the session is opened since you can't get the Transaction otherwise
+											JoinableCMTTransaction joinable = (JoinableCMTTransaction) session.getTransaction();
+											joinable.resetStatus();
+										}
+									}
+									catch (HibernateException e) {
+										throwPersistenceException( e );
+									}
+								}
+							}
+					);
+				}
+				else {
+					log.warn( "Cannot join transaction: do not override " + Environment.TRANSACTION_STRATEGY );
+				}
+			}
+			catch (HibernateException he) {
+				throwPersistenceException( he );
+			}
+		}
+		else {
+			if ( !ignoreNotJoining ) log.warn( "Calling joinTransaction() on a non JTA EntityManager" );
+		}
+	}
+
+	/**
+	 * returns the underlying session
+	 */
+	public Object getDelegate() {
+		return getSession();
+	}
+
+	;
+
+	private void writeObject(ObjectOutputStream oos) throws IOException {
+		oos.defaultWriteObject();
+	}
+
+	private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
+		ois.defaultReadObject();
+		tx = new TransactionImpl( this );
+	}
+
+	public void throwPersistenceException(PersistenceException e) {
+		if ( ! ( e instanceof NoResultException || e instanceof NonUniqueResultException ) ) {
+			try {
+				markAsRollback();
+			}
+			catch (Exception ne) {
+				//we do not want the subsequent exception to swallow the original one
+				log.error( "Unable to mark for rollback on PersistenceException: ", ne);
+			}
+		}
+		throw e;
+	}
+
+	public void throwPersistenceException(HibernateException e) {
+		if ( e instanceof StaleStateException ) {
+			PersistenceException pe = wrapStaleStateException( (StaleStateException) e );
+			throwPersistenceException( pe );
+		}
+		else if ( e instanceof ConstraintViolationException ) {
+			//FIXME this is bad cause ConstraintViolationException happens in other circumstances
+			throwPersistenceException( new EntityExistsException( e ) );
+		}
+		else if ( e instanceof ObjectNotFoundException ) {
+			throwPersistenceException( new EntityNotFoundException( e.getMessage() ) );
+		}
+		else if ( e instanceof org.hibernate.NonUniqueResultException ) {
+			throwPersistenceException( new NonUniqueResultException( e.getMessage() ) );
+		}
+		else if ( e instanceof UnresolvableObjectException ) {
+			throwPersistenceException( new EntityNotFoundException( e.getMessage() ) );
+		}
+		else if ( e instanceof QueryException ) {
+			throw new IllegalArgumentException( e );
+		}
+		else if ( e instanceof TransientObjectException ) {
+			try {
+				markAsRollback();
+			}
+			catch (Exception ne) {
+				//we do not want the subsequent exception to swallow the original one
+				log.error( "Unable to mark for rollback on TransientObjectException: ", ne);
+			}
+			throw new IllegalStateException( e ); //Spec 3.2.3 Synchronization rules
+		}
+		else {
+			throwPersistenceException( new PersistenceException( e ) );
+		}
+	}
+
+	public PersistenceException wrapStaleStateException(StaleStateException e) {
+		PersistenceException pe;
+		if ( e instanceof StaleObjectStateException ) {
+			StaleObjectStateException sose = (StaleObjectStateException) e;
+			Serializable identifier = sose.getIdentifier();
+			if (identifier != null) {
+				Object entity = getRawSession().load( sose.getEntityName(), identifier );
+				if ( entity instanceof Serializable ) {
+					//avoid some user errors regarding boundary crossing
+					pe = new OptimisticLockException( null, e, entity );
+				}
+				else {
+					pe = new OptimisticLockException( e );
+				}
+			}
+			else {
+				pe = new OptimisticLockException( e );
+			}
+		}
+		else {
+			pe = new OptimisticLockException( e );
+		}
+		return pe;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/CurrentEntityManagerImpl.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/CurrentEntityManagerImpl.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/CurrentEntityManagerImpl.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,64 +0,0 @@
-//$Id$
-package org.hibernate.ejb;
-
-import java.util.Map;
-import javax.persistence.PersistenceContextType;
-import javax.persistence.spi.PersistenceUnitTransactionType;
-
-import org.hibernate.Session;
-import org.hibernate.SessionFactory;
-import org.hibernate.engine.SessionFactoryImplementor;
-import org.hibernate.engine.SessionImplementor;
-import org.hibernate.util.JTAHelper;
-
-/**
- * @author Gavin King
- * @author Emmanuel Bernard
- * @deprecated no longer used since getEntityManager is no longer here
- */
-public class CurrentEntityManagerImpl extends AbstractEntityManagerImpl {
-
-	private SessionFactory sessionFactory;
-
-	public CurrentEntityManagerImpl(SessionFactory sessionFactory, PersistenceUnitTransactionType transactionType, Map properties) {
-		super( PersistenceContextType.TRANSACTION, transactionType, properties );
-		this.sessionFactory = sessionFactory;
-		postInit();
-	}
-
-	public Session getSession() {
-		/**
-		 * Handle non transactional mode by requesting a temporary session to the session factory
-		 * This session, will aggressively use the AFTER_STATEMENT connection release mode to be
-		 * sure the conenctions are released. Be aware that the session will not be closed explicitly.
-		 */
-
-		Session s;
-		SessionFactoryImplementor sfi = (SessionFactoryImplementor) sessionFactory;
-		if ( !JTAHelper.isTransactionInProgress( sfi ) ) {
-			s = sfi.openTemporarySession();
-			( (SessionImplementor) s ).setAutoClear( true );
-		}
-		else {
-			s = sessionFactory.getCurrentSession();
-		}
-		return s;
-	}
-
-	protected Session getRawSession() {
-		return getSession();
-	}
-
-	public void close() {
-		throw new UnsupportedOperationException( "cannot close the JTA-bound EntityManager" );
-	}
-
-	public boolean isOpen() {
-		//TODO Hum contradictory comments, I'm getting mad
-		//no need to force enlistment in the tx, a current session is always enlisted
-		//adjustFlushMode(); //don't adjust, can't be done on closed EM
-		getRawSession().isOpen(); //to force enlistment in tx
-		return true;
-	}
-
-}

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/CurrentEntityManagerImpl.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/CurrentEntityManagerImpl.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/CurrentEntityManagerImpl.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/CurrentEntityManagerImpl.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,64 @@
+//$Id$
+package org.hibernate.ejb;
+
+import java.util.Map;
+import javax.persistence.PersistenceContextType;
+import javax.persistence.spi.PersistenceUnitTransactionType;
+
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.hibernate.engine.SessionFactoryImplementor;
+import org.hibernate.engine.SessionImplementor;
+import org.hibernate.util.JTAHelper;
+
+/**
+ * @author Gavin King
+ * @author Emmanuel Bernard
+ * @deprecated no longer used since getEntityManager is no longer here
+ */
+public class CurrentEntityManagerImpl extends AbstractEntityManagerImpl {
+
+	private SessionFactory sessionFactory;
+
+	public CurrentEntityManagerImpl(SessionFactory sessionFactory, PersistenceUnitTransactionType transactionType, Map properties) {
+		super( PersistenceContextType.TRANSACTION, transactionType, properties );
+		this.sessionFactory = sessionFactory;
+		postInit();
+	}
+
+	public Session getSession() {
+		/**
+		 * Handle non transactional mode by requesting a temporary session to the session factory
+		 * This session, will aggressively use the AFTER_STATEMENT connection release mode to be
+		 * sure the conenctions are released. Be aware that the session will not be closed explicitly.
+		 */
+
+		Session s;
+		SessionFactoryImplementor sfi = (SessionFactoryImplementor) sessionFactory;
+		if ( !JTAHelper.isTransactionInProgress( sfi ) ) {
+			s = sfi.openTemporarySession();
+			( (SessionImplementor) s ).setAutoClear( true );
+		}
+		else {
+			s = sessionFactory.getCurrentSession();
+		}
+		return s;
+	}
+
+	protected Session getRawSession() {
+		return getSession();
+	}
+
+	public void close() {
+		throw new UnsupportedOperationException( "cannot close the JTA-bound EntityManager" );
+	}
+
+	public boolean isOpen() {
+		//TODO Hum contradictory comments, I'm getting mad
+		//no need to force enlistment in the tx, a current session is always enlisted
+		//adjustFlushMode(); //don't adjust, can't be done on closed EM
+		getRawSession().isOpen(); //to force enlistment in tx
+		return true;
+	}
+
+}

Deleted: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/Ejb3Configuration.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/Ejb3Configuration.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/Ejb3Configuration.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,1412 +0,0 @@
-//$Id$
-package org.hibernate.ejb;
-
-import java.io.BufferedInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.DataInputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.ObjectOutput;
-import java.io.ObjectOutputStream;
-import java.io.Serializable;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-import java.util.StringTokenizer;
-import javax.naming.BinaryRefAddr;
-import javax.naming.NamingException;
-import javax.naming.Reference;
-import javax.naming.Referenceable;
-import javax.persistence.Embeddable;
-import javax.persistence.Entity;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.EntityNotFoundException;
-import javax.persistence.MappedSuperclass;
-import javax.persistence.PersistenceException;
-import javax.persistence.spi.PersistenceUnitInfo;
-import javax.persistence.spi.PersistenceUnitTransactionType;
-import javax.sql.DataSource;
-
-import javassist.bytecode.AnnotationsAttribute;
-import javassist.bytecode.ClassFile;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.dom4j.DocumentException;
-import org.dom4j.Element;
-import org.dom4j.io.SAXReader;
-import org.hibernate.HibernateException;
-import org.hibernate.Interceptor;
-import org.hibernate.MappingException;
-import org.hibernate.MappingNotFoundException;
-import org.hibernate.SessionFactory;
-import org.hibernate.cfg.AnnotationConfiguration;
-import org.hibernate.cfg.Configuration;
-import org.hibernate.cfg.Environment;
-import org.hibernate.cfg.NamingStrategy;
-import org.hibernate.cfg.Settings;
-import org.hibernate.cfg.SettingsFactory;
-import org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider;
-import org.hibernate.ejb.instrument.InterceptFieldClassFileTransformer;
-import org.hibernate.ejb.packaging.JarVisitor;
-import org.hibernate.ejb.packaging.PersistenceMetadata;
-import org.hibernate.ejb.packaging.PersistenceXmlLoader;
-import org.hibernate.ejb.packaging.NamedInputStream;
-import org.hibernate.ejb.transaction.JoinableCMTTransactionFactory;
-import org.hibernate.ejb.util.ConfigurationHelper;
-import org.hibernate.ejb.util.LogHelper;
-import org.hibernate.ejb.util.NamingHelper;
-import org.hibernate.engine.FilterDefinition;
-import org.hibernate.event.EventListeners;
-import org.hibernate.mapping.AuxiliaryDatabaseObject;
-import org.hibernate.mapping.PersistentClass;
-import org.hibernate.proxy.EntityNotFoundDelegate;
-import org.hibernate.cfg.annotations.reflection.XMLContext;
-import org.hibernate.secure.JACCConfiguration;
-import org.hibernate.transaction.JDBCTransactionFactory;
-import org.hibernate.util.CollectionHelper;
-import org.hibernate.util.ReflectHelper;
-import org.hibernate.util.StringHelper;
-import org.hibernate.util.XMLHelper;
-import org.jboss.util.file.ArchiveBrowser;
-import org.xml.sax.EntityResolver;
-import org.xml.sax.SAXException;
-
-/**
- * Allow a fine tuned configuration of an EJB 3.0 EntityManagerFactory
- *
- * A Ejb3Configuration object is only guaranteed to create one EntityManagerFactory.
- * Multiple usage of #buildEntityManagerFactory() is not guaranteed.
- *
- * After #buildEntityManagerFactory() has been called, you no longer can change the configuration
- * state (no class adding, no property change etc)
- *
- * When serialized / deserialized or retrieved from the JNDI, you no longer can change the
- * configuration state (no class adding, no property change etc)
- *
- * Putting the configuration in the JNDI is an expensive operation that requires a partial
- * serialization
- *
- * @author Emmanuel Bernard
- */
-public class Ejb3Configuration implements Serializable, Referenceable {
-	private static final String IMPLEMENTATION_NAME = HibernatePersistence.class.getName();
-	private static final String META_INF_ORM_XML = "META-INF/orm.xml";
-	private static Log log = LogFactory.getLog( Ejb3Configuration.class );
-	private static EntityNotFoundDelegate ejb3EntityNotFoundDelegate = new Ejb3EntityNotFoundDelegate();
-	private static Configuration DEFAULT_CONFIGURATION = new AnnotationConfiguration();
-
-	private static class Ejb3EntityNotFoundDelegate implements EntityNotFoundDelegate, Serializable {
-		public void handleEntityNotFound(String entityName, Serializable id) {
-			throw new EntityNotFoundException("Unable to find " + entityName  + " with id " + id);
-		}
-	}
-
-	static {
-		Version.touch();
-	}
-
-	private AnnotationConfiguration cfg;
-	private SettingsFactory settingsFactory;
-	//made transient and not restored in deserialization on purpose, should no longer be called after restoration
-	private transient EventListenerConfigurator listenerConfigurator;
-	private PersistenceUnitTransactionType transactionType;
-	private boolean discardOnClose;
-	//made transient and not restored in deserialization on purpose, should no longer be called after restoration
-	private transient ClassLoader overridenClassLoader;
-	private boolean isConfigurationProcessed = false;
-
-
-	public Ejb3Configuration() {
-		settingsFactory = new InjectionSettingsFactory();
-		cfg = new AnnotationConfiguration( settingsFactory );
-		cfg.setEntityNotFoundDelegate( ejb3EntityNotFoundDelegate );
-		listenerConfigurator = new EventListenerConfigurator( this );
-	}
-
-	/**
-	 * Used to inject a datasource object as the connection provider.
-	 * If used, be sure to <b>not override</b> the hibernate.connection.provider_class
-	 * property
-	 */
-	public void setDataSource(DataSource ds) {
-		if ( ds != null ) {
-			Map cpInjection = new HashMap();
-			cpInjection.put( "dataSource", ds );
-			( (InjectionSettingsFactory) settingsFactory ).setConnectionProviderInjectionData( cpInjection );
-			this.setProperty( Environment.CONNECTION_PROVIDER, InjectedDataSourceConnectionProvider.class.getName() );
-		}
-	}
-
-	/**
-	 * create a factory from a parsed persistence.xml
-	 * Especially the scanning of classes and additional jars is done already at this point.
-	 */
-	private Ejb3Configuration configure(PersistenceMetadata metadata, Map overrides) {
-		log.debug( "Creating Factory: " + metadata.getName() );
-
-		Map workingVars = new HashMap();
-		workingVars.put( HibernatePersistence.PERSISTENCE_UNIT_NAME, metadata.getName() );
-
-		if ( StringHelper.isNotEmpty( metadata.getJtaDatasource() ) ) {
-			this.setProperty( Environment.DATASOURCE, metadata.getJtaDatasource() );
-		}
-		else if ( StringHelper.isNotEmpty( metadata.getNonJtaDatasource() ) ) {
-			this.setProperty( Environment.DATASOURCE, metadata.getNonJtaDatasource() );
-		}
-		defineTransactionType( metadata.getTransactionType(), workingVars );
-		if ( metadata.getClasses().size() > 0 ) {
-			workingVars.put( HibernatePersistence.CLASS_NAMES, metadata.getClasses() );
-		}
-		if ( metadata.getPackages().size() > 0 ) {
-			workingVars.put( HibernatePersistence.PACKAGE_NAMES, metadata.getPackages() );
-		}
-		if ( metadata.getMappingFiles().size() > 0 ) {
-			workingVars.put( HibernatePersistence.XML_FILE_NAMES, metadata.getMappingFiles() );
-		}
-		if ( metadata.getHbmfiles().size() > 0 ) {
-			workingVars.put( HibernatePersistence.HBXML_FILES, metadata.getHbmfiles() );
-		}
-		Properties props = new Properties();
-		props.putAll( metadata.getProps() );
-		if ( overrides != null ) {
-			for ( Map.Entry entry : (Set<Map.Entry>) overrides.entrySet() ) {
-				Object value = entry.getValue();
-				props.put( entry.getKey(), value == null ? "" :  value ); //alter null, not allowed in properties
-			}
-		}
-		configure( props, workingVars );
-		return this;
-	}
-
-	/**
-	 * Build the configuration from an entity manager name and given the
-	 * appropriate extra properties. Those properties override the one get through
-	 * the peristence.xml file.
-	 * If the persistence unit name is not found or does not match the Persistence Provider, null is returned
-	 *
-	 * @param persistenceUnitName persistence unit name
-	 * @param integration properties passed to the persistence provider
-	 * @return configured Ejb3Configuration or null if no persistence unit match
-	 */
-	public Ejb3Configuration configure(String persistenceUnitName, Map integration) {
-		try {
-			log.debug( "Look up for persistence unit: " + persistenceUnitName );
-			integration = integration == null ?
-					CollectionHelper.EMPTY_MAP :
-					Collections.unmodifiableMap( integration );
-			Enumeration<URL> xmls = Thread.currentThread()
-					.getContextClassLoader()
-					.getResources( "META-INF/persistence.xml" );
-			if ( ! xmls.hasMoreElements() ) {
-				log.info( "Could not find any META-INF/persistence.xml file in the classpath");
-			}
-			while ( xmls.hasMoreElements() ) {
-				URL url = xmls.nextElement();
-				log.trace( "Analyse of persistence.xml: " + url );
-				List<PersistenceMetadata> metadataFiles = PersistenceXmlLoader.deploy(
-						url,
-						integration,
-						cfg.getEntityResolver(),
-						PersistenceUnitTransactionType.RESOURCE_LOCAL );
-				for ( PersistenceMetadata metadata : metadataFiles ) {
-					log.trace( metadata.toString() );
-
-					if ( metadata.getProvider() == null || IMPLEMENTATION_NAME.equalsIgnoreCase(
-							metadata.getProvider()
-					) ) {
-						//correct provider
-
-						//lazy compute the visitor if possible to avoid useless exceptions if an unexpected state happens
-						JarVisitor visitor = null;
-
-						if ( metadata.getName() == null ) {
-							visitor = getMainJarVisitor( url, metadata, integration );
-							metadata.setName( visitor.getUnqualifiedJarName() );
-						}
-						if ( persistenceUnitName == null && xmls.hasMoreElements() ) {
-							throw new PersistenceException( "No name provided and several persistence units found" );
-						}
-						else if ( persistenceUnitName == null || metadata.getName().equals( persistenceUnitName ) ) {
-							if (visitor == null) visitor = getMainJarVisitor( url, metadata, integration );
-							addMetadataFromVisitor( visitor, metadata );
-							JarVisitor.Filter[] otherXmlFilter = getFilters( metadata, integration, false );
-							for ( String jarFile : metadata.getJarFiles() ) {
-								visitor = JarVisitor.getVisitor( jarFile, otherXmlFilter );
-								addMetadataFromVisitor( visitor, metadata );
-							}
-							return configure( metadata, integration );
-						}
-					}
-				}
-			}
-			return null;
-		}
-		catch (Exception e) {
-			if ( e instanceof PersistenceException) {
-				throw (PersistenceException) e;
-			}
-			else {
-				throw new PersistenceException( e );
-			}
-		}
-	}
-
-	private JarVisitor getMainJarVisitor(URL url, PersistenceMetadata metadata, Map integration) {
-		URL jarURL = JarVisitor.getJarURLFromURLEntry( url, "/META-INF/persistence.xml" );
-		JarVisitor.Filter[] persistenceXmlFilter = getFilters( metadata, integration, metadata.getExcludeUnlistedClasses() );
-		JarVisitor visitor = JarVisitor.getVisitor( jarURL, persistenceXmlFilter );
-		return visitor;
-	}
-
-	private static void addMetadataFromVisitor(JarVisitor visitor, PersistenceMetadata metadata) throws IOException {
-		Set[] entries = visitor.getMatchingEntries();
-		JarVisitor.Filter[] filters = visitor.getFilters();
-		int size = filters.length;
-		List<String> classes = metadata.getClasses();
-		List<String> packages = metadata.getPackages();
-		List<NamedInputStream> hbmFiles = metadata.getHbmfiles();
-		for ( int index = 0; index < size ; index++ ) {
-			Iterator homogeneousEntry = entries[index].iterator();
-			while ( homogeneousEntry.hasNext() ) {
-				JarVisitor.Entry entry = (JarVisitor.Entry) homogeneousEntry.next();
-				if ( filters[index] instanceof JarVisitor.ClassFilter ) {
-					//TODO only add entry if there is annotations (Javassist)
-					classes.add( entry.getName() );
-				}
-				else if ( filters[index] instanceof JarVisitor.PackageFilter ) {
-					packages.add( entry.getName() );
-				}
-				else if ( filters[index] instanceof JarVisitor.FileFilter ) {
-					hbmFiles.add( new NamedInputStream( entry.getName(), entry.getInputStream() ) );
-					metadata.getMappingFiles().remove( entry.getName() );
-				}
-			}
-		}
-	}
-
-	/**
-	 * Process configuration from a PersistenceUnitInfo object
-	 * Typically called by the container
-	 */
-	public Ejb3Configuration configure(PersistenceUnitInfo info, Map integration) {
-		if ( log.isDebugEnabled() ) {
-			log.debug( "Processing " + LogHelper.logPersistenceUnitInfo( info ) );
-		}
-		else {
-			log.info( "Processing PersistenceUnitInfo [\n\tname: " + info.getPersistenceUnitName() + "\n\t...]" );
-		}
-
-		integration = integration != null ? Collections.unmodifiableMap( integration ) : CollectionHelper.EMPTY_MAP;
-		String provider = (String) integration.get( HibernatePersistence.PROVIDER );
-		if ( provider == null ) provider = info.getPersistenceProviderClassName();
-		if ( provider != null && ! provider.trim().startsWith( IMPLEMENTATION_NAME ) ) {
-			log.info( "Required a different provider: " + provider );
-			return null;
-		}
-		if ( info.getClassLoader() == null ) {
-			throw new IllegalStateException(
-					"[PersistenceUnit: " + info.getPersistenceUnitName() == null ? "" : info.getPersistenceUnitName()
-							+ "] " + "PersistenceUnitInfo.getClassLoader() id null" );
-		}
-		//set the classloader
-		Thread thread = Thread.currentThread();
-		ClassLoader contextClassLoader = thread.getContextClassLoader();
-		boolean sameClassLoader = info.getClassLoader().equals( contextClassLoader );
-		if ( ! sameClassLoader ) {
-			overridenClassLoader = info.getClassLoader();
-			thread.setContextClassLoader( overridenClassLoader );
-		}
-		else {
-			overridenClassLoader = null;
-		}
-
-		try {
-			Map workingVars = new HashMap();
-			workingVars.put( HibernatePersistence.PERSISTENCE_UNIT_NAME, info.getPersistenceUnitName() );
-			List<String> entities = new ArrayList<String>( 50 );
-			if ( info.getManagedClassNames() != null ) entities.addAll( info.getManagedClassNames() );
-			List<NamedInputStream> hbmFiles = new ArrayList<NamedInputStream>();
-			List<String> packages = new ArrayList<String>();
-			List<String> xmlFiles = new ArrayList<String>( 50 );
-			if ( info.getMappingFileNames() != null ) xmlFiles.addAll( info.getMappingFileNames() );
-			//Should always be true if the container is not dump
-			boolean searchForORMFiles = ! xmlFiles.contains( META_INF_ORM_XML );
-
-			boolean[] detectArtifactForOtherJars = getDetectedArtifacts( info.getProperties(), null, false );
-			boolean[] detectArtifactForMainJar = getDetectedArtifacts( info.getProperties(), null, info.excludeUnlistedClasses() );
-			for ( URL jar : info.getJarFileUrls() ) {
-				if ( detectArtifactForOtherJars[0] ) scanForClasses( jar, packages, entities );
-				if ( detectArtifactForOtherJars[1] ) scanForXmlFiles( jar, hbmFiles, searchForORMFiles );
-			}
-			if ( detectArtifactForMainJar[0] ) scanForClasses( info.getPersistenceUnitRootUrl(), packages, entities );
-			if ( detectArtifactForMainJar[1] )
-				scanForXmlFiles( info.getPersistenceUnitRootUrl(), hbmFiles, searchForORMFiles );
-
-			Properties properties = info.getProperties() != null ?
-					info.getProperties() :
-					new Properties();
-			ConfigurationHelper.overrideProperties( properties, integration );
-
-			//FIXME entities is used to enhance classes and to collect annotated entities this should not be mixed
-			//fill up entities with the on found in xml files
-			addXMLEntities( xmlFiles, info, entities );
-
-			//FIXME send the appropriate entites.
-			if ( "true".equalsIgnoreCase( properties.getProperty( HibernatePersistence.USE_CLASS_ENHANCER ) ) ) {
-				info.addTransformer( new InterceptFieldClassFileTransformer( entities ) );
-			}
-
-			workingVars.put( HibernatePersistence.CLASS_NAMES, entities );
-			workingVars.put( HibernatePersistence.PACKAGE_NAMES, packages );
-			workingVars.put( HibernatePersistence.XML_FILE_NAMES, xmlFiles );
-			if ( hbmFiles.size() > 0 ) workingVars.put( HibernatePersistence.HBXML_FILES, hbmFiles );
-
-			//datasources
-			Boolean isJTA = null;
-			boolean overridenDatasource = false;
-			if ( integration.containsKey( HibernatePersistence.JTA_DATASOURCE ) ) {
-				String dataSource = (String) integration.get( HibernatePersistence.JTA_DATASOURCE );
-				overridenDatasource = true;
-				properties.setProperty( Environment.DATASOURCE, dataSource );
-				isJTA = Boolean.TRUE;
-			}
-			if ( integration.containsKey( HibernatePersistence.NON_JTA_DATASOURCE ) ) {
-				String dataSource = (String) integration.get( HibernatePersistence.NON_JTA_DATASOURCE );
-				overridenDatasource = true;
-				properties.setProperty( Environment.DATASOURCE, dataSource );
-				if (isJTA == null) isJTA = Boolean.FALSE;
-			}
-
-			if ( ! overridenDatasource && ( info.getJtaDataSource() != null || info.getNonJtaDataSource() != null ) ) {
-				isJTA = info.getJtaDataSource() != null ? Boolean.TRUE : Boolean.FALSE;
-				this.setDataSource(
-						isJTA ? info.getJtaDataSource() : info.getNonJtaDataSource()
-				);
-				this.setProperty(
-						Environment.CONNECTION_PROVIDER, InjectedDataSourceConnectionProvider.class.getName()
-				);
-			}
-			/*
-			 * If explicit type => use it
-			 * If a JTA DS is used => JTA transaction,
-			 * if a non JTA DS is used => RESOURCe_LOCAL
-			 * if none, set to JavaEE default => JTA transaction
-			 */
-			PersistenceUnitTransactionType transactionType = info.getTransactionType();
-			if (transactionType == null) {
-				if (isJTA == Boolean.TRUE) {
-					transactionType = PersistenceUnitTransactionType.JTA;
-				}
-				else if ( isJTA == Boolean.FALSE ) {
-					transactionType = PersistenceUnitTransactionType.RESOURCE_LOCAL;
-				}
-				else {
-					transactionType = PersistenceUnitTransactionType.JTA;
-				}
-			}
-			defineTransactionType( transactionType, workingVars );
-			configure( properties, workingVars );
-		}
-		finally {
-			//After EMF, set the CCL back
-			if ( ! sameClassLoader ) {
-				thread.setContextClassLoader( contextClassLoader );
-			}
-		}
-		return this;
-	}
-
-	private void addXMLEntities(List<String> xmlFiles, PersistenceUnitInfo info, List<String> entities) {
-		//TODO handle inputstream related hbm files
-		ClassLoader newTempClassLoader = info.getNewTempClassLoader();
-		if (newTempClassLoader == null) {
-			log.warn( "Persistence provider caller does not implements the EJB3 spec correctly. PersistenceUnitInfo.getNewTempClassLoader() is null." );
-			return;
-		}
-		XMLHelper xmlHelper = new XMLHelper();
-		List errors = new ArrayList();
-		SAXReader saxReader = xmlHelper.createSAXReader( "XML InputStream", errors, cfg.getEntityResolver() );
-		try {
-			saxReader.setFeature( "http://apache.org/xml/features/validation/schema", true );
-			//saxReader.setFeature( "http://apache.org/xml/features/validation/dynamic", true );
-			//set the default schema locators
-			saxReader.setProperty( "http://apache.org/xml/properties/schema/external-schemaLocation",
-					"http://java.sun.com/xml/ns/persistence/orm orm_1_0.xsd");
-		}
-		catch (SAXException e) {
-			saxReader.setValidation( false );
-		}
-
-		for ( String xmlFile : xmlFiles ) {
-
-			InputStream resourceAsStream = newTempClassLoader.getResourceAsStream( xmlFile );
-			if (resourceAsStream == null) continue;
-			BufferedInputStream is = new BufferedInputStream( resourceAsStream );
-			try {
-				errors.clear();
-				org.dom4j.Document doc = saxReader.read( is );
-				if ( errors.size() != 0 ) {
-					throw new MappingException( "invalid mapping: " + xmlFile, (Throwable) errors.get( 0 ) );
-				}
-				Element rootElement = doc.getRootElement();
-				if ( rootElement != null && "entity-mappings".equals( rootElement.getName() ) ) {
-					Element element = rootElement.element( "package" );
-					String defaultPackage = element != null ? element.getTextTrim() : null;
-					List<Element> elements = rootElement.elements( "entity" );
-					for (Element subelement : elements ) {
-						String classname = XMLContext.buildSafeClassName( subelement.attributeValue( "class" ), defaultPackage );
-						if ( ! entities.contains( classname ) ) {
-							entities.add( classname );
-						}
-					}
-					elements = rootElement.elements( "mapped-superclass" );
-					for (Element subelement : elements ) {
-						String classname = XMLContext.buildSafeClassName( subelement.attributeValue( "class" ), defaultPackage );
-						if ( ! entities.contains( classname ) ) {
-							entities.add( classname );
-						}
-					}
-					elements = rootElement.elements( "embeddable" );
-					for (Element subelement : elements ) {
-						String classname = XMLContext.buildSafeClassName( subelement.attributeValue( "class" ), defaultPackage );
-						if ( ! entities.contains( classname ) ) {
-							entities.add( classname );
-						}
-					}
-				}
-				else if ( rootElement != null && "hibernate-mappings".equals( rootElement.getName() ) ) {
-					//FIXME include hbm xml entities to enhance them but entities is also used to collect annotated entities
-				}
-			}
-			catch (DocumentException e) {
-				throw new MappingException( "Could not parse mapping document in input stream", e );
-			}
-			finally {
-				try {
-					is.close();
-				}
-				catch (IOException ioe) {
-					log.warn( "Could not close input stream", ioe );
-				}
-			}
-		}
-	}
-
-	private void defineTransactionType(Object overridenTxType, Map workingVars) {
-		if ( overridenTxType == null ) {
-//			if ( transactionType == null ) {
-//				transactionType = PersistenceUnitTransactionType.JTA; //this is the default value
-//			}
-			//nothing to override
-		}
-		else if ( overridenTxType instanceof String ) {
-			transactionType = PersistenceXmlLoader.getTransactionType( (String) overridenTxType );
-		}
-		else if ( overridenTxType instanceof PersistenceUnitTransactionType ) {
-			transactionType = (PersistenceUnitTransactionType) overridenTxType;
-		}
-		else {
-			throw new PersistenceException( getExceptionHeader( workingVars ) +
-					HibernatePersistence.TRANSACTION_TYPE + " of the wrong class type"
-							+ ": " + overridenTxType.getClass()
-			);
-		}
-
-	}
-
-	public Ejb3Configuration setProperty(String key, String value) {
-		cfg.setProperty( key, value );
-		return this;
-	}
-
-	private boolean[] getDetectedArtifacts(Properties properties, Map overridenProperties, boolean excludeIfNotOverriden) {
-		boolean[] result = new boolean[2];
-		result[0] = false; //detect classes
-		result[1] = false; //detect hbm
-		String detect = overridenProperties != null ?
-				(String) overridenProperties.get( HibernatePersistence.AUTODETECTION ) :
-				null;
-		detect = detect == null ?
-				properties.getProperty( HibernatePersistence.AUTODETECTION) :
-				detect;
-		if (detect == null && excludeIfNotOverriden) {
-			//not overriden through HibernatePersistence.AUTODETECTION so we comply with the spec excludeUnlistedClasses
-			return result;
-		}
-		else if (detect == null){
-			detect = "class,hbm";
-		}
-		StringTokenizer st = new StringTokenizer( detect, ", ", false );
-		while ( st.hasMoreElements() ) {
-			String element = (String) st.nextElement();
-			if ( "class".equalsIgnoreCase( element ) ) result[0] = true;
-			if ( "hbm".equalsIgnoreCase( element ) ) result[1] = true;
-		}
-		log.debug( "Detect class: " + result[0] + "; detect hbm: " + result[1] );
-		return result;
-	}
-
-	private JarVisitor.Filter[] getFilters(PersistenceMetadata metadata, Map overridenProperties, boolean excludeIfNotOverriden) {
-		Properties properties = metadata.getProps();
-		final List<String> mappingFiles = metadata.getMappingFiles();
-		boolean[] result = getDetectedArtifacts( properties, overridenProperties, excludeIfNotOverriden );
-
-		int size = ( result[0] ? 2 : 0 ) + 1; //class involves classes and packages, xml files are always involved because of orm.xml
-		JarVisitor.Filter[] filters = new JarVisitor.Filter[size];
-		if ( result[0] ) {
-			filters[0] = new JarVisitor.PackageFilter( false, null ) {
-				public boolean accept(String javaElementName) {
-					return true;
-				}
-			};
-			filters[1] = new JarVisitor.ClassFilter(
-					false, new Class[]{
-					Entity.class,
-					MappedSuperclass.class,
-					Embeddable.class}
-			) {
-				public boolean accept(String javaElementName) {
-					return true;
-				}
-			};
-		}
-		if ( result[1] ) {
-			filters[size - 1] = new JarVisitor.FileFilter( true ) {
-				public boolean accept(String javaElementName) {
-					return javaElementName.endsWith( "hbm.xml" )
-							|| javaElementName.endsWith( META_INF_ORM_XML )
-							|| mappingFiles.contains( javaElementName );
-				}
-			};
-		}
-		else {
-			filters[size - 1] = new JarVisitor.FileFilter( true ) {
-				public boolean accept(String javaElementName) {
-					return javaElementName.endsWith( META_INF_ORM_XML )
-							|| mappingFiles.contains( javaElementName );
-				}
-			};
-		}
-		return filters;
-	}
-
-	private void scanForXmlFiles(URL jar, List<NamedInputStream> hbmxmls, final boolean searchforORMFiles) {
-		Iterator it = ArchiveBrowser.getBrowser(
-				jar, new ArchiveBrowser.Filter() {
-			public boolean accept(String filename) {
-				return filename.endsWith( ".hbm.xml" )
-						|| (searchforORMFiles && filename.endsWith( META_INF_ORM_XML ) )
-						;
-			}
-		}
-		);
-
-		while ( it.hasNext() ) {
-			InputStream stream = (InputStream) it.next();
-			hbmxmls.add( new NamedInputStream("", stream) );
-		}
-	}
-
-	private void scanForClasses(URL jar, List<String> packages, List<String> entities) {
-		Iterator it = null;
-		try {
-			it = ArchiveBrowser.getBrowser(
-					jar, new ArchiveBrowser.Filter() {
-				public boolean accept(String filename) {
-					return filename.endsWith( ".class" );
-				}
-			}
-			);
-		}
-		catch (RuntimeException e) {
-			throw new RuntimeException( "error trying to scan <jar-file>: " + jar.toString(), e );
-		}
-
-		// need to look into every entry in the archive to see if anybody has tags
-		// defined.
-		while ( it.hasNext() ) {
-			InputStream stream = (InputStream) it.next();
-			DataInputStream dstream = new DataInputStream( new BufferedInputStream( stream ) );
-			ClassFile cf = null;
-			try {
-				try {
-					cf = new ClassFile( dstream );
-				}
-				finally {
-					dstream.close();
-					stream.close();
-				}
-			}
-			catch (IOException e) {
-				throw new RuntimeException( e );
-			}
-			if ( cf.getName().endsWith( ".package-info" ) ) {
-				int idx = cf.getName().indexOf( ".package-info" );
-				String pkgName = cf.getName().substring( 0, idx );
-				log.info( "found package: " + pkgName );
-				packages.add( pkgName );
-				continue;
-			}
-
-			AnnotationsAttribute visible = (AnnotationsAttribute) cf.getAttribute( AnnotationsAttribute.visibleTag );
-			if ( visible != null ) {
-				boolean isEntity = visible.getAnnotation( Entity.class.getName() ) != null;
-				if ( isEntity ) {
-					log.info( "found EJB3 Entity bean: " + cf.getName() );
-					entities.add( cf.getName() );
-				}
-				boolean isEmbeddable = visible.getAnnotation( Embeddable.class.getName() ) != null;
-				if ( isEmbeddable ) {
-					log.info( "found EJB3 @Embeddable: " + cf.getName() );
-					entities.add( cf.getName() );
-				}
-				boolean isEmbeddableSuperclass = visible.getAnnotation( MappedSuperclass.class.getName() ) != null;
-				if ( isEmbeddableSuperclass ) {
-					log.info( "found EJB3 @MappedSuperclass: " + cf.getName() );
-					entities.add( cf.getName() );
-				}
-			}
-		}
-	}
-
-	/**
-	 * create a factory from a list of properties and
-	 * HibernatePersistence.CLASS_NAMES -> Collection<String> (use to list the classes from config files
-	 * HibernatePersistence.PACKAGE_NAMES -> Collection<String> (use to list the mappings from config files
-	 * HibernatePersistence.HBXML_FILES -> Collection<InputStream> (input streams of hbm files)
-	 * HibernatePersistence.LOADED_CLASSES -> Collection<Class> (list of loaded classes)
-	 * <p/>
-	 * <b>Used by JBoss AS only</b>
-	 * @deprecated use the Java Persistence API
-	 */
-	// This is used directly by JBoss so don't remove until further notice.  bill at jboss.org
-	public EntityManagerFactory createEntityManagerFactory(Map workingVars) {
-		Properties props = new Properties();
-		if ( workingVars != null ) {
-			props.putAll( workingVars );
-			//remove huge non String elements for a clean props
-			props.remove( HibernatePersistence.CLASS_NAMES );
-			props.remove( HibernatePersistence.PACKAGE_NAMES );
-			props.remove( HibernatePersistence.HBXML_FILES );
-			props.remove( HibernatePersistence.LOADED_CLASSES );
-		}
-		configure( props, workingVars );
-		return buildEntityManagerFactory();
-	}
-
-	/**
-	 * Process configuration and build an EntityManagerFactory <b>when</b> the configuration is ready
-	 * @deprecated
-	 */
-	public EntityManagerFactory createEntityManagerFactory() {
-		configure( cfg.getProperties(), new HashMap() );
-		return buildEntityManagerFactory();
-	}
-
-	public EntityManagerFactory buildEntityManagerFactory() {
-		Thread thread = null;
-		ClassLoader contextClassLoader = null;
-		if (overridenClassLoader != null) {
-			thread = Thread.currentThread();
-			contextClassLoader = thread.getContextClassLoader();
-			thread.setContextClassLoader( overridenClassLoader );
-		}
-		try {
-			configure( (Properties)null, null );
-			NamingHelper.bind(this);
-			return new EntityManagerFactoryImpl(
-					cfg.buildSessionFactory(),
-					transactionType,
-					discardOnClose
-			);
-		}
-		catch (HibernateException e) {
-			throw new PersistenceException( e );
-		}
-		finally {
-			if (thread != null) {
-				thread.setContextClassLoader( contextClassLoader );
-			}
-		}
-	}
-
-	public Reference getReference() throws NamingException {
-		log.debug("Returning a Reference to the Ejb3Configuration");
-		ByteArrayOutputStream stream = new ByteArrayOutputStream();
-		ObjectOutput out = null;
-		byte[] serialized;
-		try {
-			out = new ObjectOutputStream( stream );
-			out.writeObject( this );
-			out.close();
-			serialized = stream.toByteArray();
-			stream.close();
-		}
-		catch (IOException e) {
-			NamingException namingException = new NamingException( "Unable to serialize Ejb3Configuration" );
-			namingException.setRootCause( e );
-			throw namingException;
-		}
-
-		return new Reference(
-				Ejb3Configuration.class.getName(),
-				new BinaryRefAddr("object", serialized ),
-				Ejb3ConfigurationObjectFactory.class.getName(),
-				null
-		);
-	}
-
-	/**
-	 * create a factory from a canonical workingVars map and the overriden properties
-	 *
-	 */
-	private Ejb3Configuration configure(
-			Properties properties, Map workingVars
-	) {
-		//TODO check for people calling more than once this method (except buildEMF)
-		if (isConfigurationProcessed) return this;
-		isConfigurationProcessed = true;
-		Properties preparedProperties = prepareProperties( properties, workingVars );
-		if ( workingVars == null ) workingVars = CollectionHelper.EMPTY_MAP;
-
-		if ( preparedProperties.containsKey( HibernatePersistence.CFG_FILE ) ) {
-			String cfgFileName = preparedProperties.getProperty( HibernatePersistence.CFG_FILE );
-			cfg.configure( cfgFileName );
-		}
-
-		cfg.addProperties( preparedProperties ); //persistence.xml has priority over hibernate.Cfg.xml
-
-		addClassesToSessionFactory( workingVars );
-
-		//processes specific properties
-		List<String> jaccKeys = new ArrayList<String>();
-
-
-		Interceptor defaultInterceptor = DEFAULT_CONFIGURATION.getInterceptor();
-		NamingStrategy defaultNamingStrategy = DEFAULT_CONFIGURATION.getNamingStrategy();
-
-		Iterator propertyIt = preparedProperties.keySet().iterator();
-		while ( propertyIt.hasNext() ) {
-			Object uncastObject = propertyIt.next();
-			//had to be safe
-			if ( uncastObject != null && uncastObject instanceof String ) {
-				String propertyKey = (String) uncastObject;
-				if ( propertyKey.startsWith( HibernatePersistence.CLASS_CACHE_PREFIX ) ) {
-					setCacheStrategy( propertyKey, preparedProperties, true, workingVars );
-				}
-				else if ( propertyKey.startsWith( HibernatePersistence.COLLECTION_CACHE_PREFIX ) ) {
-					setCacheStrategy( propertyKey, preparedProperties, false, workingVars );
-				}
-				else if ( propertyKey.startsWith( HibernatePersistence.JACC_PREFIX )
-						&& ! ( propertyKey.equals( HibernatePersistence.JACC_CONTEXT_ID )
-						|| propertyKey.equals( HibernatePersistence.JACC_ENABLED ) ) ) {
-					jaccKeys.add( propertyKey );
-				}
-			}
-		}
-		if ( preparedProperties.containsKey( HibernatePersistence.INTERCEPTOR )
-				&& ( cfg.getInterceptor() == null
-				|| cfg.getInterceptor().equals( defaultInterceptor ) ) ) {
-			//cfg.setInterceptor has precedence over configuration file
-			String interceptorName = preparedProperties.getProperty( HibernatePersistence.INTERCEPTOR );
-			try {
-				Class interceptor = classForName( interceptorName );
-				cfg.setInterceptor( (Interceptor) interceptor.newInstance() );
-			}
-			catch (ClassNotFoundException e) {
-				throw new PersistenceException(
-						getExceptionHeader(workingVars) + "Unable to find interceptor class: " + interceptorName, e
-				);
-			}
-			catch (IllegalAccessException e) {
-				throw new PersistenceException(
-						getExceptionHeader(workingVars) + "Unable to access interceptor class: " + interceptorName, e
-				);
-			}
-			catch (InstantiationException e) {
-				throw new PersistenceException(
-						getExceptionHeader(workingVars) + "Unable to instanciate interceptor class: " + interceptorName, e
-				);
-			}
-			catch (ClassCastException e) {
-				throw new PersistenceException(
-						getExceptionHeader(workingVars) + "Interceptor class does not implement Interceptor interface: " + interceptorName, e
-				);
-			}
-		}
-		if ( preparedProperties.containsKey( HibernatePersistence.NAMING_STRATEGY )
-				&& ( cfg.getNamingStrategy() == null
-				|| cfg.getNamingStrategy().equals( defaultNamingStrategy ) ) ) {
-			//cfg.setNamingStrategy has precedence over configuration file
-			String namingStrategyName = preparedProperties.getProperty( HibernatePersistence.NAMING_STRATEGY );
-			try {
-				Class namingStragegy = classForName( namingStrategyName );
-				cfg.setNamingStrategy( (NamingStrategy) namingStragegy.newInstance() );
-			}
-			catch (ClassNotFoundException e) {
-				throw new PersistenceException(
-						getExceptionHeader(workingVars) + "Unable to find naming strategy class: " + namingStrategyName, e
-				);
-			}
-			catch (IllegalAccessException e) {
-				throw new PersistenceException(
-						getExceptionHeader(workingVars) + "Unable to access naming strategy class: " + namingStrategyName, e
-				);
-			}
-			catch (InstantiationException e) {
-				throw new PersistenceException(
-						getExceptionHeader(workingVars) + "Unable to instanciate naming strategy class: " + namingStrategyName, e
-				);
-			}
-			catch (ClassCastException e) {
-				throw new PersistenceException(
-						getExceptionHeader(workingVars) + "Naming strategyy class does not implement NmaingStrategy interface: " + namingStrategyName,
-						e
-				);
-			}
-		}
-
-		if ( jaccKeys.size() > 0 ) {
-			addSecurity( jaccKeys, preparedProperties, workingVars );
-		}
-
-		//initialize listeners
-		listenerConfigurator.setProperties( preparedProperties );
-		listenerConfigurator.configure();
-
-		//some spec compliance checking
-		//TODO centralize that?
-		if ( ! "true".equalsIgnoreCase( cfg.getProperty( Environment.AUTOCOMMIT ) ) ) {
-			log.warn( Environment.AUTOCOMMIT + " = false break the EJB3 specification" );
-		}
-		discardOnClose = preparedProperties.getProperty( HibernatePersistence.DISCARD_PC_ON_CLOSE )
-				.equals( "true" );
-		return this;
-	}
-
-	private void addClassesToSessionFactory(Map workingVars) {
-		if ( workingVars.containsKey( HibernatePersistence.CLASS_NAMES ) ) {
-			Collection<String> classNames = (Collection<String>) workingVars.get(
-					HibernatePersistence.CLASS_NAMES
-			);
-			addNamedAnnotatedClasses( this, classNames, workingVars );
-		}
-		//TODO apparently only used for Tests, get rid of it?
-		if ( workingVars.containsKey( HibernatePersistence.LOADED_CLASSES ) ) {
-			Collection<Class> classes = (Collection<Class>) workingVars.get( HibernatePersistence.LOADED_CLASSES );
-			for ( Class clazz : classes ) {
-				cfg.addAnnotatedClass( clazz );
-			}
-		}
-		if ( workingVars.containsKey( HibernatePersistence.PACKAGE_NAMES ) ) {
-			Collection<String> packages = (Collection<String>) workingVars.get(
-					HibernatePersistence.PACKAGE_NAMES
-			);
-			for ( String pkg : packages ) {
-				cfg.addPackage( pkg );
-			}
-		}
-		if ( workingVars.containsKey( HibernatePersistence.XML_FILE_NAMES ) ) {
-			Collection<String> xmlFiles = (Collection<String>) workingVars.get(
-					HibernatePersistence.XML_FILE_NAMES
-			);
-			for ( String xmlFile : xmlFiles ) {
-				Boolean useMetaInf = null;
-				try {
-					if ( xmlFile.endsWith( META_INF_ORM_XML ) ) useMetaInf = true;
-					cfg.addResource( xmlFile );
-				}
-				catch( MappingNotFoundException e ) {
-					if ( ! xmlFile.endsWith( META_INF_ORM_XML ) ) {
-						throw new PersistenceException( getExceptionHeader(workingVars)
-								+ "Unable to find XML mapping file in classpath: " + xmlFile);
-					}
-					else {
-						useMetaInf = false;
-						//swallow it, the META-INF/orm.xml is optional
-					}
-				}
-				catch( MappingException me ) {
-					throw new PersistenceException( getExceptionHeader(workingVars)
-								+ "Error while reading JPA XML file: " + xmlFile, me);
-				}
-				if ( log.isInfoEnabled() ) {
-					if ( Boolean.TRUE.equals( useMetaInf ) ) {
-						log.info( getExceptionHeader( workingVars ) + META_INF_ORM_XML + " found");
-					}
-					else if (Boolean.FALSE.equals( useMetaInf ) ) {
-						log.info( getExceptionHeader( workingVars ) + "no " + META_INF_ORM_XML + " found");
-					}
-				}
-			}
-		}
-		if ( workingVars.containsKey( HibernatePersistence.HBXML_FILES ) ) {
-			Collection<NamedInputStream> hbmXmlFiles = (Collection<NamedInputStream>) workingVars.get(
-					HibernatePersistence.HBXML_FILES
-			);
-			for ( NamedInputStream is : hbmXmlFiles ) {
-				try {
-					//addInputStream has the responsibility to close the stream
-					cfg.addInputStream( new BufferedInputStream( is.getStream() ) );
-				}
-				catch (MappingException me) {
-					//try our best to give the file name
-					if ( StringHelper.isEmpty( is.getName() ) ) {
-						throw me;
-					}
-					else {
-						throw new MappingException("Error while parsing file: " + is.getName(), me );
-					}
-				}
-			}
-		}
-	}
-
-	private String getExceptionHeader(Map workingVars) {
-		if ( workingVars != null ) {
-			String puName = (String) workingVars.get( HibernatePersistence.PERSISTENCE_UNIT_NAME);
-			puName = puName == null ? "" : puName;
-			String header = "[PersistenceUnit: " + puName + "] ";
-			return header;
-		}
-		else {
-			return "";
-		}
-	}
-
-	private Properties prepareProperties(Properties properties, Map workingVars) {
-		Properties preparedProperties = new Properties();
-
-		//defaults different to Hibernate
-		preparedProperties.setProperty( Environment.RELEASE_CONNECTIONS, "auto" );
-		preparedProperties.setProperty( Environment.JPAQL_STRICT_COMPLIANCE, "true" );
-		//settings that always apply to a compliant EJB3
-		preparedProperties.setProperty( Environment.AUTOCOMMIT, "true" );
-		preparedProperties.setProperty( Environment.USE_IDENTIFIER_ROLLBACK, "false" );
-		preparedProperties.setProperty( Environment.FLUSH_BEFORE_COMPLETION, "false" );
-		preparedProperties.setProperty( HibernatePersistence.DISCARD_PC_ON_CLOSE, "false" );
-
-		//override the new defaults with the user defined ones
-		//copy programmatically defined properties
-		if ( cfg.getProperties() != null ) preparedProperties.putAll( cfg.getProperties() );
-		//copy them co;ing from configuration
-		if ( properties != null ) preparedProperties.putAll( properties );
-		//note we don't copy cfg.xml properties, since they have to be overriden
-
-		if (transactionType == null) {
-			//if it has not been set, the user use a programmatic way
-			transactionType = PersistenceUnitTransactionType.RESOURCE_LOCAL;
-		}
-		defineTransactionType(
-				preparedProperties.getProperty( HibernatePersistence.TRANSACTION_TYPE ),
-				workingVars
-		);
-		boolean hasTxStrategy = StringHelper.isNotEmpty(
-				preparedProperties.getProperty( Environment.TRANSACTION_STRATEGY )
-		);
-		if ( ! hasTxStrategy && transactionType == PersistenceUnitTransactionType.JTA ) {
-			preparedProperties.setProperty(
-					Environment.TRANSACTION_STRATEGY, JoinableCMTTransactionFactory.class.getName()
-			);
-		}
-		else if ( ! hasTxStrategy && transactionType == PersistenceUnitTransactionType.RESOURCE_LOCAL ) {
-			preparedProperties.setProperty( Environment.TRANSACTION_STRATEGY, JDBCTransactionFactory.class.getName() );
-		}
-		if ( hasTxStrategy ) {
-			log.warn(
-					"Overriding " + Environment.TRANSACTION_STRATEGY + " is dangerous, this might break the EJB3 specification implementation"
-			);
-		}
-		if ( preparedProperties.getProperty( Environment.FLUSH_BEFORE_COMPLETION ).equals( "true" ) ) {
-			preparedProperties.setProperty( Environment.FLUSH_BEFORE_COMPLETION, "false" );
-			log.warn( "Defining " + Environment.FLUSH_BEFORE_COMPLETION + "=true ignored in HEM" );
-		}
-		return preparedProperties;
-	}
-
-	private Class classForName(String className) throws ClassNotFoundException {
-		return ReflectHelper.classForName( className, this.getClass() );
-	}
-
-	private void setCacheStrategy(String propertyKey, Map properties, boolean isClass, Map workingVars) {
-		String role = propertyKey.substring(
-				( isClass ? HibernatePersistence.CLASS_CACHE_PREFIX
-						.length() : HibernatePersistence.COLLECTION_CACHE_PREFIX.length() )
-						+ 1
-		);
-		//dot size added
-		String value = (String) properties.get( propertyKey );
-		StringTokenizer params = new StringTokenizer( value, ";, " );
-		if ( !params.hasMoreTokens() ) {
-			StringBuilder error = new StringBuilder( "Illegal usage of " );
-			error.append(
-					isClass ? HibernatePersistence.CLASS_CACHE_PREFIX : HibernatePersistence.COLLECTION_CACHE_PREFIX
-			);
-			error.append( ": " ).append( propertyKey ).append( " " ).append( value );
-			throw new PersistenceException( getExceptionHeader(workingVars) + error.toString() );
-		}
-		String usage = params.nextToken();
-		String region = null;
-		if ( params.hasMoreTokens() ) {
-			region = params.nextToken();
-		}
-		if ( isClass ) {
-			boolean lazyProperty = true;
-			if ( params.hasMoreTokens() ) {
-				lazyProperty = "all".equalsIgnoreCase( params.nextToken() );
-			}
-			cfg.setCacheConcurrencyStrategy( role, usage, region, lazyProperty );
-		}
-		else {
-			cfg.setCollectionCacheConcurrencyStrategy( role, usage, region );
-		}
-	}
-
-	private void addSecurity(List<String> keys, Map properties, Map workingVars) {
-		log.debug( "Adding security" );
-		if ( !properties.containsKey( HibernatePersistence.JACC_CONTEXT_ID ) ) {
-			throw new PersistenceException( getExceptionHeader(workingVars) +
-					"Entities have been configured for JACC, but "
-							+ HibernatePersistence.JACC_CONTEXT_ID
-							+ " has not been set"
-			);
-		}
-		String contextId = (String) properties.get( HibernatePersistence.JACC_CONTEXT_ID );
-		setProperty( Environment.JACC_CONTEXTID, contextId );
-
-		int roleStart = HibernatePersistence.JACC_PREFIX.length() + 1;
-
-		for ( String key : keys ) {
-			JACCConfiguration jaccCfg = new JACCConfiguration( contextId );
-			try {
-				String role = key.substring( roleStart, key.indexOf( '.', roleStart ) );
-				int classStart = roleStart + role.length() + 1;
-				String clazz = key.substring( classStart, key.length() );
-				String actions = (String) properties.get( key );
-				jaccCfg.addPermission( role, clazz, actions );
-			}
-			catch (IndexOutOfBoundsException e) {
-				throw new PersistenceException( getExceptionHeader(workingVars) +
-						"Illegal usage of " + HibernatePersistence.JACC_PREFIX + ": " + key );
-			}
-		}
-	}
-
-	private void addNamedAnnotatedClasses(
-			Ejb3Configuration cfg, Collection<String> classNames, Map workingVars
-	) {
-		for ( String name : classNames ) {
-			try {
-				Class clazz = classForName( name );
-				cfg.addAnnotatedClass( clazz );
-			}
-			catch (ClassNotFoundException cnfe) {
-				Package pkg;
-				try {
-					pkg = classForName( name + ".package-info" ).getPackage();
-				}
-				catch (ClassNotFoundException e) {
-					pkg = null;
-				}
-				if ( pkg == null ) {
-					throw new PersistenceException( getExceptionHeader(workingVars) +  "class or package not found", cnfe );
-				}
-				else {
-					cfg.addPackage( name );
-				}
-			}
-		}
-	}
-
-
-	public Settings buildSettings() throws HibernateException {
-		Thread thread = null;
-		ClassLoader contextClassLoader = null;
-		if (overridenClassLoader != null) {
-			thread = Thread.currentThread();
-			contextClassLoader = thread.getContextClassLoader();
-			thread.setContextClassLoader( overridenClassLoader );
-		}
-		try {
-			return settingsFactory.buildSettings( cfg.getProperties() );
-		}
-		finally {
-			if (thread != null) thread.setContextClassLoader( contextClassLoader );
-		}
-	}
-
-	public Ejb3Configuration addProperties(Properties props) {
-		cfg.addProperties( props );
-		return this;
-	}
-
-	public Ejb3Configuration addAnnotatedClass(Class persistentClass) throws MappingException {
-		Thread thread = null;
-		ClassLoader contextClassLoader = null;
-		if (overridenClassLoader != null) {
-			thread = Thread.currentThread();
-			contextClassLoader = thread.getContextClassLoader();
-			thread.setContextClassLoader( overridenClassLoader );
-		}
-		try {
-			cfg.addAnnotatedClass( persistentClass );
-			return this;
-		}
-		finally {
-			if (thread != null) thread.setContextClassLoader( contextClassLoader );
-		}
-	}
-
-	public Ejb3Configuration configure(String resource) throws HibernateException {
-		Thread thread = null;
-		ClassLoader contextClassLoader = null;
-		if (overridenClassLoader != null) {
-			thread = Thread.currentThread();
-			contextClassLoader = thread.getContextClassLoader();
-			thread.setContextClassLoader( overridenClassLoader );
-		}
-		try {
-			Properties properties = new Properties();
-			properties.setProperty( HibernatePersistence.CFG_FILE, resource);
-			configure( properties, new HashMap() );
-			return this;
-		}
-		finally {
-			if (thread != null) thread.setContextClassLoader( contextClassLoader );
-		}
-	}
-
-	public Ejb3Configuration addPackage(String packageName) throws MappingException {
-		Thread thread = null;
-		ClassLoader contextClassLoader = null;
-		if (overridenClassLoader != null) {
-			thread = Thread.currentThread();
-			contextClassLoader = thread.getContextClassLoader();
-			thread.setContextClassLoader( overridenClassLoader );
-		}
-		try {
-			cfg.addPackage( packageName );
-			return this;
-		}
-		finally {
-			if (thread != null) thread.setContextClassLoader( contextClassLoader );
-		}
-	}
-
-	public Ejb3Configuration addFile(String xmlFile) throws MappingException {
-		Thread thread = null;
-		ClassLoader contextClassLoader = null;
-		if (overridenClassLoader != null) {
-			thread = Thread.currentThread();
-			contextClassLoader = thread.getContextClassLoader();
-			thread.setContextClassLoader( overridenClassLoader );
-		}
-		try {
-			cfg.addFile( xmlFile );
-			return this;
-		}
-		finally {
-			if (thread != null) thread.setContextClassLoader( contextClassLoader );
-		}
-	}
-
-	public Ejb3Configuration addClass(Class persistentClass) throws MappingException {
-		Thread thread = null;
-		ClassLoader contextClassLoader = null;
-		if (overridenClassLoader != null) {
-			thread = Thread.currentThread();
-			contextClassLoader = thread.getContextClassLoader();
-			thread.setContextClassLoader( overridenClassLoader );
-		}
-		try {
-			cfg.addClass( persistentClass );
-			return this;
-		}
-		finally {
-			if (thread != null) thread.setContextClassLoader( contextClassLoader );
-		}
-	}
-
-	public Ejb3Configuration addFile(File xmlFile) throws MappingException {
-		Thread thread = null;
-		ClassLoader contextClassLoader = null;
-		if (overridenClassLoader != null) {
-			thread = Thread.currentThread();
-			contextClassLoader = thread.getContextClassLoader();
-			thread.setContextClassLoader( overridenClassLoader );
-		}
-		try {
-			cfg.addFile( xmlFile );
-			return this;
-		}
-		finally {
-			if (thread != null) thread.setContextClassLoader( contextClassLoader );
-		}
-	}
-
-	public void buildMappings() {
-		Thread thread = null;
-		ClassLoader contextClassLoader = null;
-		if (overridenClassLoader != null) {
-			thread = Thread.currentThread();
-			contextClassLoader = thread.getContextClassLoader();
-			thread.setContextClassLoader( overridenClassLoader );
-		}
-		try {
-			cfg.buildMappings();
-		}
-		finally {
-			if (thread != null) thread.setContextClassLoader( contextClassLoader );
-		}
-	}
-
-	public Iterator getClassMappings() {
-		Thread thread = null;
-		ClassLoader contextClassLoader = null;
-		if (overridenClassLoader != null) {
-			thread = Thread.currentThread();
-			contextClassLoader = thread.getContextClassLoader();
-			thread.setContextClassLoader( overridenClassLoader );
-		}
-		try {
-			return cfg.getClassMappings();
-		}
-		finally {
-			if (thread != null) thread.setContextClassLoader( contextClassLoader );
-		}
-	}
-
-	public EventListeners getEventListeners() {
-		return cfg.getEventListeners();
-	}
-
-	SessionFactory buildSessionFactory() throws HibernateException {
-		return cfg.buildSessionFactory();
-	}
-
-	public Iterator getTableMappings() {
-		return cfg.getTableMappings();
-	}
-
-	public PersistentClass getClassMapping(String persistentClass) {
-		return cfg.getClassMapping( persistentClass );
-	}
-
-	public org.hibernate.mapping.Collection getCollectionMapping(String role) {
-		return cfg.getCollectionMapping( role );
-	}
-
-	public void setEntityResolver(EntityResolver entityResolver) {
-		cfg.setEntityResolver( entityResolver );
-	}
-
-	public Map getNamedQueries() {
-		return cfg.getNamedQueries();
-	}
-
-	public Interceptor getInterceptor() {
-		return cfg.getInterceptor();
-	}
-
-	public Properties getProperties() {
-		return cfg.getProperties();
-	}
-
-	public Ejb3Configuration setInterceptor(Interceptor interceptor) {
-		cfg.setInterceptor( interceptor );
-		return this;
-	}
-
-	public Ejb3Configuration setProperties(Properties properties) {
-		cfg.setProperties( properties );
-		return this;
-	}
-
-	public Map getFilterDefinitions() {
-		return cfg.getFilterDefinitions();
-	}
-
-	public void addFilterDefinition(FilterDefinition definition) {
-		cfg.addFilterDefinition( definition );
-	}
-
-	public void addAuxiliaryDatabaseObject(AuxiliaryDatabaseObject object) {
-		cfg.addAuxiliaryDatabaseObject( object );
-	}
-
-	public NamingStrategy getNamingStrategy() {
-		return cfg.getNamingStrategy();
-	}
-
-	public Ejb3Configuration setNamingStrategy(NamingStrategy namingStrategy) {
-		cfg.setNamingStrategy( namingStrategy );
-		return this;
-	}
-
-	public void setListeners(String type, String[] listenerClasses) {
-		cfg.setListeners( type, listenerClasses );
-	}
-
-	public void setListeners(String type, Object[] listeners) {
-		cfg.setListeners( type, listeners );
-	}
-
-	/**
-	 * This API is intended to give a read-only configuration.
-	 * It is sueful when working with SchemaExport or any Configuration based
-	 * tool.
-	 * DO NOT update configuration through it.
-	 */
-	public AnnotationConfiguration getHibernateConfiguration() {
-		//TODO make it really read only (maybe through proxying)
-		return cfg;
-	}
-
-	public Ejb3Configuration addInputStream(InputStream xmlInputStream) throws MappingException {
-		Thread thread = null;
-		ClassLoader contextClassLoader = null;
-		if (overridenClassLoader != null) {
-			thread = Thread.currentThread();
-			contextClassLoader = thread.getContextClassLoader();
-			thread.setContextClassLoader( overridenClassLoader );
-		}
-		try {
-			cfg.addInputStream( xmlInputStream );
-			return this;
-		}
-		finally {
-			if (thread != null) thread.setContextClassLoader( contextClassLoader );
-		}
-	}
-
-	public Ejb3Configuration addResource(String path) throws MappingException {
-		Thread thread = null;
-		ClassLoader contextClassLoader = null;
-		if (overridenClassLoader != null) {
-			thread = Thread.currentThread();
-			contextClassLoader = thread.getContextClassLoader();
-			thread.setContextClassLoader( overridenClassLoader );
-		}
-		try {
-			cfg.addResource( path );
-			return this;
-		}
-		finally {
-			if (thread != null) thread.setContextClassLoader( contextClassLoader );
-		}
-	}
-
-	public Ejb3Configuration addResource(String path, ClassLoader classLoader) throws MappingException {
-		cfg.addResource( path, classLoader );
-		return this;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/Ejb3Configuration.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/Ejb3Configuration.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/Ejb3Configuration.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/Ejb3Configuration.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,1412 @@
+//$Id$
+package org.hibernate.ejb;
+
+import java.io.BufferedInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.DataInputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.ObjectOutput;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+import java.util.StringTokenizer;
+import javax.naming.BinaryRefAddr;
+import javax.naming.NamingException;
+import javax.naming.Reference;
+import javax.naming.Referenceable;
+import javax.persistence.Embeddable;
+import javax.persistence.Entity;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.EntityNotFoundException;
+import javax.persistence.MappedSuperclass;
+import javax.persistence.PersistenceException;
+import javax.persistence.spi.PersistenceUnitInfo;
+import javax.persistence.spi.PersistenceUnitTransactionType;
+import javax.sql.DataSource;
+
+import javassist.bytecode.AnnotationsAttribute;
+import javassist.bytecode.ClassFile;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.dom4j.DocumentException;
+import org.dom4j.Element;
+import org.dom4j.io.SAXReader;
+import org.hibernate.HibernateException;
+import org.hibernate.Interceptor;
+import org.hibernate.MappingException;
+import org.hibernate.MappingNotFoundException;
+import org.hibernate.SessionFactory;
+import org.hibernate.cfg.AnnotationConfiguration;
+import org.hibernate.cfg.Configuration;
+import org.hibernate.cfg.Environment;
+import org.hibernate.cfg.NamingStrategy;
+import org.hibernate.cfg.Settings;
+import org.hibernate.cfg.SettingsFactory;
+import org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider;
+import org.hibernate.ejb.instrument.InterceptFieldClassFileTransformer;
+import org.hibernate.ejb.packaging.JarVisitor;
+import org.hibernate.ejb.packaging.PersistenceMetadata;
+import org.hibernate.ejb.packaging.PersistenceXmlLoader;
+import org.hibernate.ejb.packaging.NamedInputStream;
+import org.hibernate.ejb.transaction.JoinableCMTTransactionFactory;
+import org.hibernate.ejb.util.ConfigurationHelper;
+import org.hibernate.ejb.util.LogHelper;
+import org.hibernate.ejb.util.NamingHelper;
+import org.hibernate.engine.FilterDefinition;
+import org.hibernate.event.EventListeners;
+import org.hibernate.mapping.AuxiliaryDatabaseObject;
+import org.hibernate.mapping.PersistentClass;
+import org.hibernate.proxy.EntityNotFoundDelegate;
+import org.hibernate.cfg.annotations.reflection.XMLContext;
+import org.hibernate.secure.JACCConfiguration;
+import org.hibernate.transaction.JDBCTransactionFactory;
+import org.hibernate.util.CollectionHelper;
+import org.hibernate.util.ReflectHelper;
+import org.hibernate.util.StringHelper;
+import org.hibernate.util.XMLHelper;
+import org.jboss.util.file.ArchiveBrowser;
+import org.xml.sax.EntityResolver;
+import org.xml.sax.SAXException;
+
+/**
+ * Allow a fine tuned configuration of an EJB 3.0 EntityManagerFactory
+ *
+ * A Ejb3Configuration object is only guaranteed to create one EntityManagerFactory.
+ * Multiple usage of #buildEntityManagerFactory() is not guaranteed.
+ *
+ * After #buildEntityManagerFactory() has been called, you no longer can change the configuration
+ * state (no class adding, no property change etc)
+ *
+ * When serialized / deserialized or retrieved from the JNDI, you no longer can change the
+ * configuration state (no class adding, no property change etc)
+ *
+ * Putting the configuration in the JNDI is an expensive operation that requires a partial
+ * serialization
+ *
+ * @author Emmanuel Bernard
+ */
+public class Ejb3Configuration implements Serializable, Referenceable {
+	private static final String IMPLEMENTATION_NAME = HibernatePersistence.class.getName();
+	private static final String META_INF_ORM_XML = "META-INF/orm.xml";
+	private static Log log = LogFactory.getLog( Ejb3Configuration.class );
+	private static EntityNotFoundDelegate ejb3EntityNotFoundDelegate = new Ejb3EntityNotFoundDelegate();
+	private static Configuration DEFAULT_CONFIGURATION = new AnnotationConfiguration();
+
+	private static class Ejb3EntityNotFoundDelegate implements EntityNotFoundDelegate, Serializable {
+		public void handleEntityNotFound(String entityName, Serializable id) {
+			throw new EntityNotFoundException("Unable to find " + entityName  + " with id " + id);
+		}
+	}
+
+	static {
+		Version.touch();
+	}
+
+	private AnnotationConfiguration cfg;
+	private SettingsFactory settingsFactory;
+	//made transient and not restored in deserialization on purpose, should no longer be called after restoration
+	private transient EventListenerConfigurator listenerConfigurator;
+	private PersistenceUnitTransactionType transactionType;
+	private boolean discardOnClose;
+	//made transient and not restored in deserialization on purpose, should no longer be called after restoration
+	private transient ClassLoader overridenClassLoader;
+	private boolean isConfigurationProcessed = false;
+
+
+	public Ejb3Configuration() {
+		settingsFactory = new InjectionSettingsFactory();
+		cfg = new AnnotationConfiguration( settingsFactory );
+		cfg.setEntityNotFoundDelegate( ejb3EntityNotFoundDelegate );
+		listenerConfigurator = new EventListenerConfigurator( this );
+	}
+
+	/**
+	 * Used to inject a datasource object as the connection provider.
+	 * If used, be sure to <b>not override</b> the hibernate.connection.provider_class
+	 * property
+	 */
+	public void setDataSource(DataSource ds) {
+		if ( ds != null ) {
+			Map cpInjection = new HashMap();
+			cpInjection.put( "dataSource", ds );
+			( (InjectionSettingsFactory) settingsFactory ).setConnectionProviderInjectionData( cpInjection );
+			this.setProperty( Environment.CONNECTION_PROVIDER, InjectedDataSourceConnectionProvider.class.getName() );
+		}
+	}
+
+	/**
+	 * create a factory from a parsed persistence.xml
+	 * Especially the scanning of classes and additional jars is done already at this point.
+	 */
+	private Ejb3Configuration configure(PersistenceMetadata metadata, Map overrides) {
+		log.debug( "Creating Factory: " + metadata.getName() );
+
+		Map workingVars = new HashMap();
+		workingVars.put( HibernatePersistence.PERSISTENCE_UNIT_NAME, metadata.getName() );
+
+		if ( StringHelper.isNotEmpty( metadata.getJtaDatasource() ) ) {
+			this.setProperty( Environment.DATASOURCE, metadata.getJtaDatasource() );
+		}
+		else if ( StringHelper.isNotEmpty( metadata.getNonJtaDatasource() ) ) {
+			this.setProperty( Environment.DATASOURCE, metadata.getNonJtaDatasource() );
+		}
+		defineTransactionType( metadata.getTransactionType(), workingVars );
+		if ( metadata.getClasses().size() > 0 ) {
+			workingVars.put( HibernatePersistence.CLASS_NAMES, metadata.getClasses() );
+		}
+		if ( metadata.getPackages().size() > 0 ) {
+			workingVars.put( HibernatePersistence.PACKAGE_NAMES, metadata.getPackages() );
+		}
+		if ( metadata.getMappingFiles().size() > 0 ) {
+			workingVars.put( HibernatePersistence.XML_FILE_NAMES, metadata.getMappingFiles() );
+		}
+		if ( metadata.getHbmfiles().size() > 0 ) {
+			workingVars.put( HibernatePersistence.HBXML_FILES, metadata.getHbmfiles() );
+		}
+		Properties props = new Properties();
+		props.putAll( metadata.getProps() );
+		if ( overrides != null ) {
+			for ( Map.Entry entry : (Set<Map.Entry>) overrides.entrySet() ) {
+				Object value = entry.getValue();
+				props.put( entry.getKey(), value == null ? "" :  value ); //alter null, not allowed in properties
+			}
+		}
+		configure( props, workingVars );
+		return this;
+	}
+
+	/**
+	 * Build the configuration from an entity manager name and given the
+	 * appropriate extra properties. Those properties override the one get through
+	 * the peristence.xml file.
+	 * If the persistence unit name is not found or does not match the Persistence Provider, null is returned
+	 *
+	 * @param persistenceUnitName persistence unit name
+	 * @param integration properties passed to the persistence provider
+	 * @return configured Ejb3Configuration or null if no persistence unit match
+	 */
+	public Ejb3Configuration configure(String persistenceUnitName, Map integration) {
+		try {
+			log.debug( "Look up for persistence unit: " + persistenceUnitName );
+			integration = integration == null ?
+					CollectionHelper.EMPTY_MAP :
+					Collections.unmodifiableMap( integration );
+			Enumeration<URL> xmls = Thread.currentThread()
+					.getContextClassLoader()
+					.getResources( "META-INF/persistence.xml" );
+			if ( ! xmls.hasMoreElements() ) {
+				log.info( "Could not find any META-INF/persistence.xml file in the classpath");
+			}
+			while ( xmls.hasMoreElements() ) {
+				URL url = xmls.nextElement();
+				log.trace( "Analyse of persistence.xml: " + url );
+				List<PersistenceMetadata> metadataFiles = PersistenceXmlLoader.deploy(
+						url,
+						integration,
+						cfg.getEntityResolver(),
+						PersistenceUnitTransactionType.RESOURCE_LOCAL );
+				for ( PersistenceMetadata metadata : metadataFiles ) {
+					log.trace( metadata.toString() );
+
+					if ( metadata.getProvider() == null || IMPLEMENTATION_NAME.equalsIgnoreCase(
+							metadata.getProvider()
+					) ) {
+						//correct provider
+
+						//lazy compute the visitor if possible to avoid useless exceptions if an unexpected state happens
+						JarVisitor visitor = null;
+
+						if ( metadata.getName() == null ) {
+							visitor = getMainJarVisitor( url, metadata, integration );
+							metadata.setName( visitor.getUnqualifiedJarName() );
+						}
+						if ( persistenceUnitName == null && xmls.hasMoreElements() ) {
+							throw new PersistenceException( "No name provided and several persistence units found" );
+						}
+						else if ( persistenceUnitName == null || metadata.getName().equals( persistenceUnitName ) ) {
+							if (visitor == null) visitor = getMainJarVisitor( url, metadata, integration );
+							addMetadataFromVisitor( visitor, metadata );
+							JarVisitor.Filter[] otherXmlFilter = getFilters( metadata, integration, false );
+							for ( String jarFile : metadata.getJarFiles() ) {
+								visitor = JarVisitor.getVisitor( jarFile, otherXmlFilter );
+								addMetadataFromVisitor( visitor, metadata );
+							}
+							return configure( metadata, integration );
+						}
+					}
+				}
+			}
+			return null;
+		}
+		catch (Exception e) {
+			if ( e instanceof PersistenceException) {
+				throw (PersistenceException) e;
+			}
+			else {
+				throw new PersistenceException( e );
+			}
+		}
+	}
+
+	private JarVisitor getMainJarVisitor(URL url, PersistenceMetadata metadata, Map integration) {
+		URL jarURL = JarVisitor.getJarURLFromURLEntry( url, "/META-INF/persistence.xml" );
+		JarVisitor.Filter[] persistenceXmlFilter = getFilters( metadata, integration, metadata.getExcludeUnlistedClasses() );
+		JarVisitor visitor = JarVisitor.getVisitor( jarURL, persistenceXmlFilter );
+		return visitor;
+	}
+
+	private static void addMetadataFromVisitor(JarVisitor visitor, PersistenceMetadata metadata) throws IOException {
+		Set[] entries = visitor.getMatchingEntries();
+		JarVisitor.Filter[] filters = visitor.getFilters();
+		int size = filters.length;
+		List<String> classes = metadata.getClasses();
+		List<String> packages = metadata.getPackages();
+		List<NamedInputStream> hbmFiles = metadata.getHbmfiles();
+		for ( int index = 0; index < size ; index++ ) {
+			Iterator homogeneousEntry = entries[index].iterator();
+			while ( homogeneousEntry.hasNext() ) {
+				JarVisitor.Entry entry = (JarVisitor.Entry) homogeneousEntry.next();
+				if ( filters[index] instanceof JarVisitor.ClassFilter ) {
+					//TODO only add entry if there is annotations (Javassist)
+					classes.add( entry.getName() );
+				}
+				else if ( filters[index] instanceof JarVisitor.PackageFilter ) {
+					packages.add( entry.getName() );
+				}
+				else if ( filters[index] instanceof JarVisitor.FileFilter ) {
+					hbmFiles.add( new NamedInputStream( entry.getName(), entry.getInputStream() ) );
+					metadata.getMappingFiles().remove( entry.getName() );
+				}
+			}
+		}
+	}
+
+	/**
+	 * Process configuration from a PersistenceUnitInfo object
+	 * Typically called by the container
+	 */
+	public Ejb3Configuration configure(PersistenceUnitInfo info, Map integration) {
+		if ( log.isDebugEnabled() ) {
+			log.debug( "Processing " + LogHelper.logPersistenceUnitInfo( info ) );
+		}
+		else {
+			log.info( "Processing PersistenceUnitInfo [\n\tname: " + info.getPersistenceUnitName() + "\n\t...]" );
+		}
+
+		integration = integration != null ? Collections.unmodifiableMap( integration ) : CollectionHelper.EMPTY_MAP;
+		String provider = (String) integration.get( HibernatePersistence.PROVIDER );
+		if ( provider == null ) provider = info.getPersistenceProviderClassName();
+		if ( provider != null && ! provider.trim().startsWith( IMPLEMENTATION_NAME ) ) {
+			log.info( "Required a different provider: " + provider );
+			return null;
+		}
+		if ( info.getClassLoader() == null ) {
+			throw new IllegalStateException(
+					"[PersistenceUnit: " + info.getPersistenceUnitName() == null ? "" : info.getPersistenceUnitName()
+							+ "] " + "PersistenceUnitInfo.getClassLoader() id null" );
+		}
+		//set the classloader
+		Thread thread = Thread.currentThread();
+		ClassLoader contextClassLoader = thread.getContextClassLoader();
+		boolean sameClassLoader = info.getClassLoader().equals( contextClassLoader );
+		if ( ! sameClassLoader ) {
+			overridenClassLoader = info.getClassLoader();
+			thread.setContextClassLoader( overridenClassLoader );
+		}
+		else {
+			overridenClassLoader = null;
+		}
+
+		try {
+			Map workingVars = new HashMap();
+			workingVars.put( HibernatePersistence.PERSISTENCE_UNIT_NAME, info.getPersistenceUnitName() );
+			List<String> entities = new ArrayList<String>( 50 );
+			if ( info.getManagedClassNames() != null ) entities.addAll( info.getManagedClassNames() );
+			List<NamedInputStream> hbmFiles = new ArrayList<NamedInputStream>();
+			List<String> packages = new ArrayList<String>();
+			List<String> xmlFiles = new ArrayList<String>( 50 );
+			if ( info.getMappingFileNames() != null ) xmlFiles.addAll( info.getMappingFileNames() );
+			//Should always be true if the container is not dump
+			boolean searchForORMFiles = ! xmlFiles.contains( META_INF_ORM_XML );
+
+			boolean[] detectArtifactForOtherJars = getDetectedArtifacts( info.getProperties(), null, false );
+			boolean[] detectArtifactForMainJar = getDetectedArtifacts( info.getProperties(), null, info.excludeUnlistedClasses() );
+			for ( URL jar : info.getJarFileUrls() ) {
+				if ( detectArtifactForOtherJars[0] ) scanForClasses( jar, packages, entities );
+				if ( detectArtifactForOtherJars[1] ) scanForXmlFiles( jar, hbmFiles, searchForORMFiles );
+			}
+			if ( detectArtifactForMainJar[0] ) scanForClasses( info.getPersistenceUnitRootUrl(), packages, entities );
+			if ( detectArtifactForMainJar[1] )
+				scanForXmlFiles( info.getPersistenceUnitRootUrl(), hbmFiles, searchForORMFiles );
+
+			Properties properties = info.getProperties() != null ?
+					info.getProperties() :
+					new Properties();
+			ConfigurationHelper.overrideProperties( properties, integration );
+
+			//FIXME entities is used to enhance classes and to collect annotated entities this should not be mixed
+			//fill up entities with the on found in xml files
+			addXMLEntities( xmlFiles, info, entities );
+
+			//FIXME send the appropriate entites.
+			if ( "true".equalsIgnoreCase( properties.getProperty( HibernatePersistence.USE_CLASS_ENHANCER ) ) ) {
+				info.addTransformer( new InterceptFieldClassFileTransformer( entities ) );
+			}
+
+			workingVars.put( HibernatePersistence.CLASS_NAMES, entities );
+			workingVars.put( HibernatePersistence.PACKAGE_NAMES, packages );
+			workingVars.put( HibernatePersistence.XML_FILE_NAMES, xmlFiles );
+			if ( hbmFiles.size() > 0 ) workingVars.put( HibernatePersistence.HBXML_FILES, hbmFiles );
+
+			//datasources
+			Boolean isJTA = null;
+			boolean overridenDatasource = false;
+			if ( integration.containsKey( HibernatePersistence.JTA_DATASOURCE ) ) {
+				String dataSource = (String) integration.get( HibernatePersistence.JTA_DATASOURCE );
+				overridenDatasource = true;
+				properties.setProperty( Environment.DATASOURCE, dataSource );
+				isJTA = Boolean.TRUE;
+			}
+			if ( integration.containsKey( HibernatePersistence.NON_JTA_DATASOURCE ) ) {
+				String dataSource = (String) integration.get( HibernatePersistence.NON_JTA_DATASOURCE );
+				overridenDatasource = true;
+				properties.setProperty( Environment.DATASOURCE, dataSource );
+				if (isJTA == null) isJTA = Boolean.FALSE;
+			}
+
+			if ( ! overridenDatasource && ( info.getJtaDataSource() != null || info.getNonJtaDataSource() != null ) ) {
+				isJTA = info.getJtaDataSource() != null ? Boolean.TRUE : Boolean.FALSE;
+				this.setDataSource(
+						isJTA ? info.getJtaDataSource() : info.getNonJtaDataSource()
+				);
+				this.setProperty(
+						Environment.CONNECTION_PROVIDER, InjectedDataSourceConnectionProvider.class.getName()
+				);
+			}
+			/*
+			 * If explicit type => use it
+			 * If a JTA DS is used => JTA transaction,
+			 * if a non JTA DS is used => RESOURCe_LOCAL
+			 * if none, set to JavaEE default => JTA transaction
+			 */
+			PersistenceUnitTransactionType transactionType = info.getTransactionType();
+			if (transactionType == null) {
+				if (isJTA == Boolean.TRUE) {
+					transactionType = PersistenceUnitTransactionType.JTA;
+				}
+				else if ( isJTA == Boolean.FALSE ) {
+					transactionType = PersistenceUnitTransactionType.RESOURCE_LOCAL;
+				}
+				else {
+					transactionType = PersistenceUnitTransactionType.JTA;
+				}
+			}
+			defineTransactionType( transactionType, workingVars );
+			configure( properties, workingVars );
+		}
+		finally {
+			//After EMF, set the CCL back
+			if ( ! sameClassLoader ) {
+				thread.setContextClassLoader( contextClassLoader );
+			}
+		}
+		return this;
+	}
+
+	private void addXMLEntities(List<String> xmlFiles, PersistenceUnitInfo info, List<String> entities) {
+		//TODO handle inputstream related hbm files
+		ClassLoader newTempClassLoader = info.getNewTempClassLoader();
+		if (newTempClassLoader == null) {
+			log.warn( "Persistence provider caller does not implements the EJB3 spec correctly. PersistenceUnitInfo.getNewTempClassLoader() is null." );
+			return;
+		}
+		XMLHelper xmlHelper = new XMLHelper();
+		List errors = new ArrayList();
+		SAXReader saxReader = xmlHelper.createSAXReader( "XML InputStream", errors, cfg.getEntityResolver() );
+		try {
+			saxReader.setFeature( "http://apache.org/xml/features/validation/schema", true );
+			//saxReader.setFeature( "http://apache.org/xml/features/validation/dynamic", true );
+			//set the default schema locators
+			saxReader.setProperty( "http://apache.org/xml/properties/schema/external-schemaLocation",
+					"http://java.sun.com/xml/ns/persistence/orm orm_1_0.xsd");
+		}
+		catch (SAXException e) {
+			saxReader.setValidation( false );
+		}
+
+		for ( String xmlFile : xmlFiles ) {
+
+			InputStream resourceAsStream = newTempClassLoader.getResourceAsStream( xmlFile );
+			if (resourceAsStream == null) continue;
+			BufferedInputStream is = new BufferedInputStream( resourceAsStream );
+			try {
+				errors.clear();
+				org.dom4j.Document doc = saxReader.read( is );
+				if ( errors.size() != 0 ) {
+					throw new MappingException( "invalid mapping: " + xmlFile, (Throwable) errors.get( 0 ) );
+				}
+				Element rootElement = doc.getRootElement();
+				if ( rootElement != null && "entity-mappings".equals( rootElement.getName() ) ) {
+					Element element = rootElement.element( "package" );
+					String defaultPackage = element != null ? element.getTextTrim() : null;
+					List<Element> elements = rootElement.elements( "entity" );
+					for (Element subelement : elements ) {
+						String classname = XMLContext.buildSafeClassName( subelement.attributeValue( "class" ), defaultPackage );
+						if ( ! entities.contains( classname ) ) {
+							entities.add( classname );
+						}
+					}
+					elements = rootElement.elements( "mapped-superclass" );
+					for (Element subelement : elements ) {
+						String classname = XMLContext.buildSafeClassName( subelement.attributeValue( "class" ), defaultPackage );
+						if ( ! entities.contains( classname ) ) {
+							entities.add( classname );
+						}
+					}
+					elements = rootElement.elements( "embeddable" );
+					for (Element subelement : elements ) {
+						String classname = XMLContext.buildSafeClassName( subelement.attributeValue( "class" ), defaultPackage );
+						if ( ! entities.contains( classname ) ) {
+							entities.add( classname );
+						}
+					}
+				}
+				else if ( rootElement != null && "hibernate-mappings".equals( rootElement.getName() ) ) {
+					//FIXME include hbm xml entities to enhance them but entities is also used to collect annotated entities
+				}
+			}
+			catch (DocumentException e) {
+				throw new MappingException( "Could not parse mapping document in input stream", e );
+			}
+			finally {
+				try {
+					is.close();
+				}
+				catch (IOException ioe) {
+					log.warn( "Could not close input stream", ioe );
+				}
+			}
+		}
+	}
+
+	private void defineTransactionType(Object overridenTxType, Map workingVars) {
+		if ( overridenTxType == null ) {
+//			if ( transactionType == null ) {
+//				transactionType = PersistenceUnitTransactionType.JTA; //this is the default value
+//			}
+			//nothing to override
+		}
+		else if ( overridenTxType instanceof String ) {
+			transactionType = PersistenceXmlLoader.getTransactionType( (String) overridenTxType );
+		}
+		else if ( overridenTxType instanceof PersistenceUnitTransactionType ) {
+			transactionType = (PersistenceUnitTransactionType) overridenTxType;
+		}
+		else {
+			throw new PersistenceException( getExceptionHeader( workingVars ) +
+					HibernatePersistence.TRANSACTION_TYPE + " of the wrong class type"
+							+ ": " + overridenTxType.getClass()
+			);
+		}
+
+	}
+
+	public Ejb3Configuration setProperty(String key, String value) {
+		cfg.setProperty( key, value );
+		return this;
+	}
+
+	private boolean[] getDetectedArtifacts(Properties properties, Map overridenProperties, boolean excludeIfNotOverriden) {
+		boolean[] result = new boolean[2];
+		result[0] = false; //detect classes
+		result[1] = false; //detect hbm
+		String detect = overridenProperties != null ?
+				(String) overridenProperties.get( HibernatePersistence.AUTODETECTION ) :
+				null;
+		detect = detect == null ?
+				properties.getProperty( HibernatePersistence.AUTODETECTION) :
+				detect;
+		if (detect == null && excludeIfNotOverriden) {
+			//not overriden through HibernatePersistence.AUTODETECTION so we comply with the spec excludeUnlistedClasses
+			return result;
+		}
+		else if (detect == null){
+			detect = "class,hbm";
+		}
+		StringTokenizer st = new StringTokenizer( detect, ", ", false );
+		while ( st.hasMoreElements() ) {
+			String element = (String) st.nextElement();
+			if ( "class".equalsIgnoreCase( element ) ) result[0] = true;
+			if ( "hbm".equalsIgnoreCase( element ) ) result[1] = true;
+		}
+		log.debug( "Detect class: " + result[0] + "; detect hbm: " + result[1] );
+		return result;
+	}
+
+	private JarVisitor.Filter[] getFilters(PersistenceMetadata metadata, Map overridenProperties, boolean excludeIfNotOverriden) {
+		Properties properties = metadata.getProps();
+		final List<String> mappingFiles = metadata.getMappingFiles();
+		boolean[] result = getDetectedArtifacts( properties, overridenProperties, excludeIfNotOverriden );
+
+		int size = ( result[0] ? 2 : 0 ) + 1; //class involves classes and packages, xml files are always involved because of orm.xml
+		JarVisitor.Filter[] filters = new JarVisitor.Filter[size];
+		if ( result[0] ) {
+			filters[0] = new JarVisitor.PackageFilter( false, null ) {
+				public boolean accept(String javaElementName) {
+					return true;
+				}
+			};
+			filters[1] = new JarVisitor.ClassFilter(
+					false, new Class[]{
+					Entity.class,
+					MappedSuperclass.class,
+					Embeddable.class}
+			) {
+				public boolean accept(String javaElementName) {
+					return true;
+				}
+			};
+		}
+		if ( result[1] ) {
+			filters[size - 1] = new JarVisitor.FileFilter( true ) {
+				public boolean accept(String javaElementName) {
+					return javaElementName.endsWith( "hbm.xml" )
+							|| javaElementName.endsWith( META_INF_ORM_XML )
+							|| mappingFiles.contains( javaElementName );
+				}
+			};
+		}
+		else {
+			filters[size - 1] = new JarVisitor.FileFilter( true ) {
+				public boolean accept(String javaElementName) {
+					return javaElementName.endsWith( META_INF_ORM_XML )
+							|| mappingFiles.contains( javaElementName );
+				}
+			};
+		}
+		return filters;
+	}
+
+	private void scanForXmlFiles(URL jar, List<NamedInputStream> hbmxmls, final boolean searchforORMFiles) {
+		Iterator it = ArchiveBrowser.getBrowser(
+				jar, new ArchiveBrowser.Filter() {
+			public boolean accept(String filename) {
+				return filename.endsWith( ".hbm.xml" )
+						|| (searchforORMFiles && filename.endsWith( META_INF_ORM_XML ) )
+						;
+			}
+		}
+		);
+
+		while ( it.hasNext() ) {
+			InputStream stream = (InputStream) it.next();
+			hbmxmls.add( new NamedInputStream("", stream) );
+		}
+	}
+
+	private void scanForClasses(URL jar, List<String> packages, List<String> entities) {
+		Iterator it = null;
+		try {
+			it = ArchiveBrowser.getBrowser(
+					jar, new ArchiveBrowser.Filter() {
+				public boolean accept(String filename) {
+					return filename.endsWith( ".class" );
+				}
+			}
+			);
+		}
+		catch (RuntimeException e) {
+			throw new RuntimeException( "error trying to scan <jar-file>: " + jar.toString(), e );
+		}
+
+		// need to look into every entry in the archive to see if anybody has tags
+		// defined.
+		while ( it.hasNext() ) {
+			InputStream stream = (InputStream) it.next();
+			DataInputStream dstream = new DataInputStream( new BufferedInputStream( stream ) );
+			ClassFile cf = null;
+			try {
+				try {
+					cf = new ClassFile( dstream );
+				}
+				finally {
+					dstream.close();
+					stream.close();
+				}
+			}
+			catch (IOException e) {
+				throw new RuntimeException( e );
+			}
+			if ( cf.getName().endsWith( ".package-info" ) ) {
+				int idx = cf.getName().indexOf( ".package-info" );
+				String pkgName = cf.getName().substring( 0, idx );
+				log.info( "found package: " + pkgName );
+				packages.add( pkgName );
+				continue;
+			}
+
+			AnnotationsAttribute visible = (AnnotationsAttribute) cf.getAttribute( AnnotationsAttribute.visibleTag );
+			if ( visible != null ) {
+				boolean isEntity = visible.getAnnotation( Entity.class.getName() ) != null;
+				if ( isEntity ) {
+					log.info( "found EJB3 Entity bean: " + cf.getName() );
+					entities.add( cf.getName() );
+				}
+				boolean isEmbeddable = visible.getAnnotation( Embeddable.class.getName() ) != null;
+				if ( isEmbeddable ) {
+					log.info( "found EJB3 @Embeddable: " + cf.getName() );
+					entities.add( cf.getName() );
+				}
+				boolean isEmbeddableSuperclass = visible.getAnnotation( MappedSuperclass.class.getName() ) != null;
+				if ( isEmbeddableSuperclass ) {
+					log.info( "found EJB3 @MappedSuperclass: " + cf.getName() );
+					entities.add( cf.getName() );
+				}
+			}
+		}
+	}
+
+	/**
+	 * create a factory from a list of properties and
+	 * HibernatePersistence.CLASS_NAMES -> Collection<String> (use to list the classes from config files
+	 * HibernatePersistence.PACKAGE_NAMES -> Collection<String> (use to list the mappings from config files
+	 * HibernatePersistence.HBXML_FILES -> Collection<InputStream> (input streams of hbm files)
+	 * HibernatePersistence.LOADED_CLASSES -> Collection<Class> (list of loaded classes)
+	 * <p/>
+	 * <b>Used by JBoss AS only</b>
+	 * @deprecated use the Java Persistence API
+	 */
+	// This is used directly by JBoss so don't remove until further notice.  bill at jboss.org
+	public EntityManagerFactory createEntityManagerFactory(Map workingVars) {
+		Properties props = new Properties();
+		if ( workingVars != null ) {
+			props.putAll( workingVars );
+			//remove huge non String elements for a clean props
+			props.remove( HibernatePersistence.CLASS_NAMES );
+			props.remove( HibernatePersistence.PACKAGE_NAMES );
+			props.remove( HibernatePersistence.HBXML_FILES );
+			props.remove( HibernatePersistence.LOADED_CLASSES );
+		}
+		configure( props, workingVars );
+		return buildEntityManagerFactory();
+	}
+
+	/**
+	 * Process configuration and build an EntityManagerFactory <b>when</b> the configuration is ready
+	 * @deprecated
+	 */
+	public EntityManagerFactory createEntityManagerFactory() {
+		configure( cfg.getProperties(), new HashMap() );
+		return buildEntityManagerFactory();
+	}
+
+	public EntityManagerFactory buildEntityManagerFactory() {
+		Thread thread = null;
+		ClassLoader contextClassLoader = null;
+		if (overridenClassLoader != null) {
+			thread = Thread.currentThread();
+			contextClassLoader = thread.getContextClassLoader();
+			thread.setContextClassLoader( overridenClassLoader );
+		}
+		try {
+			configure( (Properties)null, null );
+			NamingHelper.bind(this);
+			return new EntityManagerFactoryImpl(
+					cfg.buildSessionFactory(),
+					transactionType,
+					discardOnClose
+			);
+		}
+		catch (HibernateException e) {
+			throw new PersistenceException( e );
+		}
+		finally {
+			if (thread != null) {
+				thread.setContextClassLoader( contextClassLoader );
+			}
+		}
+	}
+
+	public Reference getReference() throws NamingException {
+		log.debug("Returning a Reference to the Ejb3Configuration");
+		ByteArrayOutputStream stream = new ByteArrayOutputStream();
+		ObjectOutput out = null;
+		byte[] serialized;
+		try {
+			out = new ObjectOutputStream( stream );
+			out.writeObject( this );
+			out.close();
+			serialized = stream.toByteArray();
+			stream.close();
+		}
+		catch (IOException e) {
+			NamingException namingException = new NamingException( "Unable to serialize Ejb3Configuration" );
+			namingException.setRootCause( e );
+			throw namingException;
+		}
+
+		return new Reference(
+				Ejb3Configuration.class.getName(),
+				new BinaryRefAddr("object", serialized ),
+				Ejb3ConfigurationObjectFactory.class.getName(),
+				null
+		);
+	}
+
+	/**
+	 * create a factory from a canonical workingVars map and the overriden properties
+	 *
+	 */
+	private Ejb3Configuration configure(
+			Properties properties, Map workingVars
+	) {
+		//TODO check for people calling more than once this method (except buildEMF)
+		if (isConfigurationProcessed) return this;
+		isConfigurationProcessed = true;
+		Properties preparedProperties = prepareProperties( properties, workingVars );
+		if ( workingVars == null ) workingVars = CollectionHelper.EMPTY_MAP;
+
+		if ( preparedProperties.containsKey( HibernatePersistence.CFG_FILE ) ) {
+			String cfgFileName = preparedProperties.getProperty( HibernatePersistence.CFG_FILE );
+			cfg.configure( cfgFileName );
+		}
+
+		cfg.addProperties( preparedProperties ); //persistence.xml has priority over hibernate.Cfg.xml
+
+		addClassesToSessionFactory( workingVars );
+
+		//processes specific properties
+		List<String> jaccKeys = new ArrayList<String>();
+
+
+		Interceptor defaultInterceptor = DEFAULT_CONFIGURATION.getInterceptor();
+		NamingStrategy defaultNamingStrategy = DEFAULT_CONFIGURATION.getNamingStrategy();
+
+		Iterator propertyIt = preparedProperties.keySet().iterator();
+		while ( propertyIt.hasNext() ) {
+			Object uncastObject = propertyIt.next();
+			//had to be safe
+			if ( uncastObject != null && uncastObject instanceof String ) {
+				String propertyKey = (String) uncastObject;
+				if ( propertyKey.startsWith( HibernatePersistence.CLASS_CACHE_PREFIX ) ) {
+					setCacheStrategy( propertyKey, preparedProperties, true, workingVars );
+				}
+				else if ( propertyKey.startsWith( HibernatePersistence.COLLECTION_CACHE_PREFIX ) ) {
+					setCacheStrategy( propertyKey, preparedProperties, false, workingVars );
+				}
+				else if ( propertyKey.startsWith( HibernatePersistence.JACC_PREFIX )
+						&& ! ( propertyKey.equals( HibernatePersistence.JACC_CONTEXT_ID )
+						|| propertyKey.equals( HibernatePersistence.JACC_ENABLED ) ) ) {
+					jaccKeys.add( propertyKey );
+				}
+			}
+		}
+		if ( preparedProperties.containsKey( HibernatePersistence.INTERCEPTOR )
+				&& ( cfg.getInterceptor() == null
+				|| cfg.getInterceptor().equals( defaultInterceptor ) ) ) {
+			//cfg.setInterceptor has precedence over configuration file
+			String interceptorName = preparedProperties.getProperty( HibernatePersistence.INTERCEPTOR );
+			try {
+				Class interceptor = classForName( interceptorName );
+				cfg.setInterceptor( (Interceptor) interceptor.newInstance() );
+			}
+			catch (ClassNotFoundException e) {
+				throw new PersistenceException(
+						getExceptionHeader(workingVars) + "Unable to find interceptor class: " + interceptorName, e
+				);
+			}
+			catch (IllegalAccessException e) {
+				throw new PersistenceException(
+						getExceptionHeader(workingVars) + "Unable to access interceptor class: " + interceptorName, e
+				);
+			}
+			catch (InstantiationException e) {
+				throw new PersistenceException(
+						getExceptionHeader(workingVars) + "Unable to instanciate interceptor class: " + interceptorName, e
+				);
+			}
+			catch (ClassCastException e) {
+				throw new PersistenceException(
+						getExceptionHeader(workingVars) + "Interceptor class does not implement Interceptor interface: " + interceptorName, e
+				);
+			}
+		}
+		if ( preparedProperties.containsKey( HibernatePersistence.NAMING_STRATEGY )
+				&& ( cfg.getNamingStrategy() == null
+				|| cfg.getNamingStrategy().equals( defaultNamingStrategy ) ) ) {
+			//cfg.setNamingStrategy has precedence over configuration file
+			String namingStrategyName = preparedProperties.getProperty( HibernatePersistence.NAMING_STRATEGY );
+			try {
+				Class namingStragegy = classForName( namingStrategyName );
+				cfg.setNamingStrategy( (NamingStrategy) namingStragegy.newInstance() );
+			}
+			catch (ClassNotFoundException e) {
+				throw new PersistenceException(
+						getExceptionHeader(workingVars) + "Unable to find naming strategy class: " + namingStrategyName, e
+				);
+			}
+			catch (IllegalAccessException e) {
+				throw new PersistenceException(
+						getExceptionHeader(workingVars) + "Unable to access naming strategy class: " + namingStrategyName, e
+				);
+			}
+			catch (InstantiationException e) {
+				throw new PersistenceException(
+						getExceptionHeader(workingVars) + "Unable to instanciate naming strategy class: " + namingStrategyName, e
+				);
+			}
+			catch (ClassCastException e) {
+				throw new PersistenceException(
+						getExceptionHeader(workingVars) + "Naming strategyy class does not implement NmaingStrategy interface: " + namingStrategyName,
+						e
+				);
+			}
+		}
+
+		if ( jaccKeys.size() > 0 ) {
+			addSecurity( jaccKeys, preparedProperties, workingVars );
+		}
+
+		//initialize listeners
+		listenerConfigurator.setProperties( preparedProperties );
+		listenerConfigurator.configure();
+
+		//some spec compliance checking
+		//TODO centralize that?
+		if ( ! "true".equalsIgnoreCase( cfg.getProperty( Environment.AUTOCOMMIT ) ) ) {
+			log.warn( Environment.AUTOCOMMIT + " = false break the EJB3 specification" );
+		}
+		discardOnClose = preparedProperties.getProperty( HibernatePersistence.DISCARD_PC_ON_CLOSE )
+				.equals( "true" );
+		return this;
+	}
+
+	private void addClassesToSessionFactory(Map workingVars) {
+		if ( workingVars.containsKey( HibernatePersistence.CLASS_NAMES ) ) {
+			Collection<String> classNames = (Collection<String>) workingVars.get(
+					HibernatePersistence.CLASS_NAMES
+			);
+			addNamedAnnotatedClasses( this, classNames, workingVars );
+		}
+		//TODO apparently only used for Tests, get rid of it?
+		if ( workingVars.containsKey( HibernatePersistence.LOADED_CLASSES ) ) {
+			Collection<Class> classes = (Collection<Class>) workingVars.get( HibernatePersistence.LOADED_CLASSES );
+			for ( Class clazz : classes ) {
+				cfg.addAnnotatedClass( clazz );
+			}
+		}
+		if ( workingVars.containsKey( HibernatePersistence.PACKAGE_NAMES ) ) {
+			Collection<String> packages = (Collection<String>) workingVars.get(
+					HibernatePersistence.PACKAGE_NAMES
+			);
+			for ( String pkg : packages ) {
+				cfg.addPackage( pkg );
+			}
+		}
+		if ( workingVars.containsKey( HibernatePersistence.XML_FILE_NAMES ) ) {
+			Collection<String> xmlFiles = (Collection<String>) workingVars.get(
+					HibernatePersistence.XML_FILE_NAMES
+			);
+			for ( String xmlFile : xmlFiles ) {
+				Boolean useMetaInf = null;
+				try {
+					if ( xmlFile.endsWith( META_INF_ORM_XML ) ) useMetaInf = true;
+					cfg.addResource( xmlFile );
+				}
+				catch( MappingNotFoundException e ) {
+					if ( ! xmlFile.endsWith( META_INF_ORM_XML ) ) {
+						throw new PersistenceException( getExceptionHeader(workingVars)
+								+ "Unable to find XML mapping file in classpath: " + xmlFile);
+					}
+					else {
+						useMetaInf = false;
+						//swallow it, the META-INF/orm.xml is optional
+					}
+				}
+				catch( MappingException me ) {
+					throw new PersistenceException( getExceptionHeader(workingVars)
+								+ "Error while reading JPA XML file: " + xmlFile, me);
+				}
+				if ( log.isInfoEnabled() ) {
+					if ( Boolean.TRUE.equals( useMetaInf ) ) {
+						log.info( getExceptionHeader( workingVars ) + META_INF_ORM_XML + " found");
+					}
+					else if (Boolean.FALSE.equals( useMetaInf ) ) {
+						log.info( getExceptionHeader( workingVars ) + "no " + META_INF_ORM_XML + " found");
+					}
+				}
+			}
+		}
+		if ( workingVars.containsKey( HibernatePersistence.HBXML_FILES ) ) {
+			Collection<NamedInputStream> hbmXmlFiles = (Collection<NamedInputStream>) workingVars.get(
+					HibernatePersistence.HBXML_FILES
+			);
+			for ( NamedInputStream is : hbmXmlFiles ) {
+				try {
+					//addInputStream has the responsibility to close the stream
+					cfg.addInputStream( new BufferedInputStream( is.getStream() ) );
+				}
+				catch (MappingException me) {
+					//try our best to give the file name
+					if ( StringHelper.isEmpty( is.getName() ) ) {
+						throw me;
+					}
+					else {
+						throw new MappingException("Error while parsing file: " + is.getName(), me );
+					}
+				}
+			}
+		}
+	}
+
+	private String getExceptionHeader(Map workingVars) {
+		if ( workingVars != null ) {
+			String puName = (String) workingVars.get( HibernatePersistence.PERSISTENCE_UNIT_NAME);
+			puName = puName == null ? "" : puName;
+			String header = "[PersistenceUnit: " + puName + "] ";
+			return header;
+		}
+		else {
+			return "";
+		}
+	}
+
+	private Properties prepareProperties(Properties properties, Map workingVars) {
+		Properties preparedProperties = new Properties();
+
+		//defaults different to Hibernate
+		preparedProperties.setProperty( Environment.RELEASE_CONNECTIONS, "auto" );
+		preparedProperties.setProperty( Environment.JPAQL_STRICT_COMPLIANCE, "true" );
+		//settings that always apply to a compliant EJB3
+		preparedProperties.setProperty( Environment.AUTOCOMMIT, "true" );
+		preparedProperties.setProperty( Environment.USE_IDENTIFIER_ROLLBACK, "false" );
+		preparedProperties.setProperty( Environment.FLUSH_BEFORE_COMPLETION, "false" );
+		preparedProperties.setProperty( HibernatePersistence.DISCARD_PC_ON_CLOSE, "false" );
+
+		//override the new defaults with the user defined ones
+		//copy programmatically defined properties
+		if ( cfg.getProperties() != null ) preparedProperties.putAll( cfg.getProperties() );
+		//copy them co;ing from configuration
+		if ( properties != null ) preparedProperties.putAll( properties );
+		//note we don't copy cfg.xml properties, since they have to be overriden
+
+		if (transactionType == null) {
+			//if it has not been set, the user use a programmatic way
+			transactionType = PersistenceUnitTransactionType.RESOURCE_LOCAL;
+		}
+		defineTransactionType(
+				preparedProperties.getProperty( HibernatePersistence.TRANSACTION_TYPE ),
+				workingVars
+		);
+		boolean hasTxStrategy = StringHelper.isNotEmpty(
+				preparedProperties.getProperty( Environment.TRANSACTION_STRATEGY )
+		);
+		if ( ! hasTxStrategy && transactionType == PersistenceUnitTransactionType.JTA ) {
+			preparedProperties.setProperty(
+					Environment.TRANSACTION_STRATEGY, JoinableCMTTransactionFactory.class.getName()
+			);
+		}
+		else if ( ! hasTxStrategy && transactionType == PersistenceUnitTransactionType.RESOURCE_LOCAL ) {
+			preparedProperties.setProperty( Environment.TRANSACTION_STRATEGY, JDBCTransactionFactory.class.getName() );
+		}
+		if ( hasTxStrategy ) {
+			log.warn(
+					"Overriding " + Environment.TRANSACTION_STRATEGY + " is dangerous, this might break the EJB3 specification implementation"
+			);
+		}
+		if ( preparedProperties.getProperty( Environment.FLUSH_BEFORE_COMPLETION ).equals( "true" ) ) {
+			preparedProperties.setProperty( Environment.FLUSH_BEFORE_COMPLETION, "false" );
+			log.warn( "Defining " + Environment.FLUSH_BEFORE_COMPLETION + "=true ignored in HEM" );
+		}
+		return preparedProperties;
+	}
+
+	private Class classForName(String className) throws ClassNotFoundException {
+		return ReflectHelper.classForName( className, this.getClass() );
+	}
+
+	private void setCacheStrategy(String propertyKey, Map properties, boolean isClass, Map workingVars) {
+		String role = propertyKey.substring(
+				( isClass ? HibernatePersistence.CLASS_CACHE_PREFIX
+						.length() : HibernatePersistence.COLLECTION_CACHE_PREFIX.length() )
+						+ 1
+		);
+		//dot size added
+		String value = (String) properties.get( propertyKey );
+		StringTokenizer params = new StringTokenizer( value, ";, " );
+		if ( !params.hasMoreTokens() ) {
+			StringBuilder error = new StringBuilder( "Illegal usage of " );
+			error.append(
+					isClass ? HibernatePersistence.CLASS_CACHE_PREFIX : HibernatePersistence.COLLECTION_CACHE_PREFIX
+			);
+			error.append( ": " ).append( propertyKey ).append( " " ).append( value );
+			throw new PersistenceException( getExceptionHeader(workingVars) + error.toString() );
+		}
+		String usage = params.nextToken();
+		String region = null;
+		if ( params.hasMoreTokens() ) {
+			region = params.nextToken();
+		}
+		if ( isClass ) {
+			boolean lazyProperty = true;
+			if ( params.hasMoreTokens() ) {
+				lazyProperty = "all".equalsIgnoreCase( params.nextToken() );
+			}
+			cfg.setCacheConcurrencyStrategy( role, usage, region, lazyProperty );
+		}
+		else {
+			cfg.setCollectionCacheConcurrencyStrategy( role, usage, region );
+		}
+	}
+
+	private void addSecurity(List<String> keys, Map properties, Map workingVars) {
+		log.debug( "Adding security" );
+		if ( !properties.containsKey( HibernatePersistence.JACC_CONTEXT_ID ) ) {
+			throw new PersistenceException( getExceptionHeader(workingVars) +
+					"Entities have been configured for JACC, but "
+							+ HibernatePersistence.JACC_CONTEXT_ID
+							+ " has not been set"
+			);
+		}
+		String contextId = (String) properties.get( HibernatePersistence.JACC_CONTEXT_ID );
+		setProperty( Environment.JACC_CONTEXTID, contextId );
+
+		int roleStart = HibernatePersistence.JACC_PREFIX.length() + 1;
+
+		for ( String key : keys ) {
+			JACCConfiguration jaccCfg = new JACCConfiguration( contextId );
+			try {
+				String role = key.substring( roleStart, key.indexOf( '.', roleStart ) );
+				int classStart = roleStart + role.length() + 1;
+				String clazz = key.substring( classStart, key.length() );
+				String actions = (String) properties.get( key );
+				jaccCfg.addPermission( role, clazz, actions );
+			}
+			catch (IndexOutOfBoundsException e) {
+				throw new PersistenceException( getExceptionHeader(workingVars) +
+						"Illegal usage of " + HibernatePersistence.JACC_PREFIX + ": " + key );
+			}
+		}
+	}
+
+	private void addNamedAnnotatedClasses(
+			Ejb3Configuration cfg, Collection<String> classNames, Map workingVars
+	) {
+		for ( String name : classNames ) {
+			try {
+				Class clazz = classForName( name );
+				cfg.addAnnotatedClass( clazz );
+			}
+			catch (ClassNotFoundException cnfe) {
+				Package pkg;
+				try {
+					pkg = classForName( name + ".package-info" ).getPackage();
+				}
+				catch (ClassNotFoundException e) {
+					pkg = null;
+				}
+				if ( pkg == null ) {
+					throw new PersistenceException( getExceptionHeader(workingVars) +  "class or package not found", cnfe );
+				}
+				else {
+					cfg.addPackage( name );
+				}
+			}
+		}
+	}
+
+
+	public Settings buildSettings() throws HibernateException {
+		Thread thread = null;
+		ClassLoader contextClassLoader = null;
+		if (overridenClassLoader != null) {
+			thread = Thread.currentThread();
+			contextClassLoader = thread.getContextClassLoader();
+			thread.setContextClassLoader( overridenClassLoader );
+		}
+		try {
+			return settingsFactory.buildSettings( cfg.getProperties() );
+		}
+		finally {
+			if (thread != null) thread.setContextClassLoader( contextClassLoader );
+		}
+	}
+
+	public Ejb3Configuration addProperties(Properties props) {
+		cfg.addProperties( props );
+		return this;
+	}
+
+	public Ejb3Configuration addAnnotatedClass(Class persistentClass) throws MappingException {
+		Thread thread = null;
+		ClassLoader contextClassLoader = null;
+		if (overridenClassLoader != null) {
+			thread = Thread.currentThread();
+			contextClassLoader = thread.getContextClassLoader();
+			thread.setContextClassLoader( overridenClassLoader );
+		}
+		try {
+			cfg.addAnnotatedClass( persistentClass );
+			return this;
+		}
+		finally {
+			if (thread != null) thread.setContextClassLoader( contextClassLoader );
+		}
+	}
+
+	public Ejb3Configuration configure(String resource) throws HibernateException {
+		Thread thread = null;
+		ClassLoader contextClassLoader = null;
+		if (overridenClassLoader != null) {
+			thread = Thread.currentThread();
+			contextClassLoader = thread.getContextClassLoader();
+			thread.setContextClassLoader( overridenClassLoader );
+		}
+		try {
+			Properties properties = new Properties();
+			properties.setProperty( HibernatePersistence.CFG_FILE, resource);
+			configure( properties, new HashMap() );
+			return this;
+		}
+		finally {
+			if (thread != null) thread.setContextClassLoader( contextClassLoader );
+		}
+	}
+
+	public Ejb3Configuration addPackage(String packageName) throws MappingException {
+		Thread thread = null;
+		ClassLoader contextClassLoader = null;
+		if (overridenClassLoader != null) {
+			thread = Thread.currentThread();
+			contextClassLoader = thread.getContextClassLoader();
+			thread.setContextClassLoader( overridenClassLoader );
+		}
+		try {
+			cfg.addPackage( packageName );
+			return this;
+		}
+		finally {
+			if (thread != null) thread.setContextClassLoader( contextClassLoader );
+		}
+	}
+
+	public Ejb3Configuration addFile(String xmlFile) throws MappingException {
+		Thread thread = null;
+		ClassLoader contextClassLoader = null;
+		if (overridenClassLoader != null) {
+			thread = Thread.currentThread();
+			contextClassLoader = thread.getContextClassLoader();
+			thread.setContextClassLoader( overridenClassLoader );
+		}
+		try {
+			cfg.addFile( xmlFile );
+			return this;
+		}
+		finally {
+			if (thread != null) thread.setContextClassLoader( contextClassLoader );
+		}
+	}
+
+	public Ejb3Configuration addClass(Class persistentClass) throws MappingException {
+		Thread thread = null;
+		ClassLoader contextClassLoader = null;
+		if (overridenClassLoader != null) {
+			thread = Thread.currentThread();
+			contextClassLoader = thread.getContextClassLoader();
+			thread.setContextClassLoader( overridenClassLoader );
+		}
+		try {
+			cfg.addClass( persistentClass );
+			return this;
+		}
+		finally {
+			if (thread != null) thread.setContextClassLoader( contextClassLoader );
+		}
+	}
+
+	public Ejb3Configuration addFile(File xmlFile) throws MappingException {
+		Thread thread = null;
+		ClassLoader contextClassLoader = null;
+		if (overridenClassLoader != null) {
+			thread = Thread.currentThread();
+			contextClassLoader = thread.getContextClassLoader();
+			thread.setContextClassLoader( overridenClassLoader );
+		}
+		try {
+			cfg.addFile( xmlFile );
+			return this;
+		}
+		finally {
+			if (thread != null) thread.setContextClassLoader( contextClassLoader );
+		}
+	}
+
+	public void buildMappings() {
+		Thread thread = null;
+		ClassLoader contextClassLoader = null;
+		if (overridenClassLoader != null) {
+			thread = Thread.currentThread();
+			contextClassLoader = thread.getContextClassLoader();
+			thread.setContextClassLoader( overridenClassLoader );
+		}
+		try {
+			cfg.buildMappings();
+		}
+		finally {
+			if (thread != null) thread.setContextClassLoader( contextClassLoader );
+		}
+	}
+
+	public Iterator getClassMappings() {
+		Thread thread = null;
+		ClassLoader contextClassLoader = null;
+		if (overridenClassLoader != null) {
+			thread = Thread.currentThread();
+			contextClassLoader = thread.getContextClassLoader();
+			thread.setContextClassLoader( overridenClassLoader );
+		}
+		try {
+			return cfg.getClassMappings();
+		}
+		finally {
+			if (thread != null) thread.setContextClassLoader( contextClassLoader );
+		}
+	}
+
+	public EventListeners getEventListeners() {
+		return cfg.getEventListeners();
+	}
+
+	SessionFactory buildSessionFactory() throws HibernateException {
+		return cfg.buildSessionFactory();
+	}
+
+	public Iterator getTableMappings() {
+		return cfg.getTableMappings();
+	}
+
+	public PersistentClass getClassMapping(String persistentClass) {
+		return cfg.getClassMapping( persistentClass );
+	}
+
+	public org.hibernate.mapping.Collection getCollectionMapping(String role) {
+		return cfg.getCollectionMapping( role );
+	}
+
+	public void setEntityResolver(EntityResolver entityResolver) {
+		cfg.setEntityResolver( entityResolver );
+	}
+
+	public Map getNamedQueries() {
+		return cfg.getNamedQueries();
+	}
+
+	public Interceptor getInterceptor() {
+		return cfg.getInterceptor();
+	}
+
+	public Properties getProperties() {
+		return cfg.getProperties();
+	}
+
+	public Ejb3Configuration setInterceptor(Interceptor interceptor) {
+		cfg.setInterceptor( interceptor );
+		return this;
+	}
+
+	public Ejb3Configuration setProperties(Properties properties) {
+		cfg.setProperties( properties );
+		return this;
+	}
+
+	public Map getFilterDefinitions() {
+		return cfg.getFilterDefinitions();
+	}
+
+	public void addFilterDefinition(FilterDefinition definition) {
+		cfg.addFilterDefinition( definition );
+	}
+
+	public void addAuxiliaryDatabaseObject(AuxiliaryDatabaseObject object) {
+		cfg.addAuxiliaryDatabaseObject( object );
+	}
+
+	public NamingStrategy getNamingStrategy() {
+		return cfg.getNamingStrategy();
+	}
+
+	public Ejb3Configuration setNamingStrategy(NamingStrategy namingStrategy) {
+		cfg.setNamingStrategy( namingStrategy );
+		return this;
+	}
+
+	public void setListeners(String type, String[] listenerClasses) {
+		cfg.setListeners( type, listenerClasses );
+	}
+
+	public void setListeners(String type, Object[] listeners) {
+		cfg.setListeners( type, listeners );
+	}
+
+	/**
+	 * This API is intended to give a read-only configuration.
+	 * It is sueful when working with SchemaExport or any Configuration based
+	 * tool.
+	 * DO NOT update configuration through it.
+	 */
+	public AnnotationConfiguration getHibernateConfiguration() {
+		//TODO make it really read only (maybe through proxying)
+		return cfg;
+	}
+
+	public Ejb3Configuration addInputStream(InputStream xmlInputStream) throws MappingException {
+		Thread thread = null;
+		ClassLoader contextClassLoader = null;
+		if (overridenClassLoader != null) {
+			thread = Thread.currentThread();
+			contextClassLoader = thread.getContextClassLoader();
+			thread.setContextClassLoader( overridenClassLoader );
+		}
+		try {
+			cfg.addInputStream( xmlInputStream );
+			return this;
+		}
+		finally {
+			if (thread != null) thread.setContextClassLoader( contextClassLoader );
+		}
+	}
+
+	public Ejb3Configuration addResource(String path) throws MappingException {
+		Thread thread = null;
+		ClassLoader contextClassLoader = null;
+		if (overridenClassLoader != null) {
+			thread = Thread.currentThread();
+			contextClassLoader = thread.getContextClassLoader();
+			thread.setContextClassLoader( overridenClassLoader );
+		}
+		try {
+			cfg.addResource( path );
+			return this;
+		}
+		finally {
+			if (thread != null) thread.setContextClassLoader( contextClassLoader );
+		}
+	}
+
+	public Ejb3Configuration addResource(String path, ClassLoader classLoader) throws MappingException {
+		cfg.addResource( path, classLoader );
+		return this;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/Ejb3ConfigurationObjectFactory.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/Ejb3ConfigurationObjectFactory.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/Ejb3ConfigurationObjectFactory.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,27 +0,0 @@
-//$Id: $
-package org.hibernate.ejb;
-
-import java.io.ByteArrayInputStream;
-import java.io.ObjectInputStream;
-import java.util.Hashtable;
-import javax.naming.Context;
-import javax.naming.Name;
-import javax.naming.Reference;
-import javax.naming.spi.ObjectFactory;
-
-/**
- * @author Emmanuel Bernard
- */
-public class Ejb3ConfigurationObjectFactory implements ObjectFactory {
-	public Object getObjectInstance(
-			Object reference, Name name, Context nameCtx, Hashtable<?, ?> environment
-	) throws Exception {
-		byte[] serialized = (byte[]) ( (Reference) reference ).get(0).getContent();
-		ByteArrayInputStream byteIn = new ByteArrayInputStream( serialized );
-		ObjectInputStream in = new ObjectInputStream( byteIn );
-		Ejb3Configuration cfg = (Ejb3Configuration) in.readObject();
-		in.close();
-		byteIn.close();
-		return cfg;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/Ejb3ConfigurationObjectFactory.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/Ejb3ConfigurationObjectFactory.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/Ejb3ConfigurationObjectFactory.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/Ejb3ConfigurationObjectFactory.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,27 @@
+//$Id: $
+package org.hibernate.ejb;
+
+import java.io.ByteArrayInputStream;
+import java.io.ObjectInputStream;
+import java.util.Hashtable;
+import javax.naming.Context;
+import javax.naming.Name;
+import javax.naming.Reference;
+import javax.naming.spi.ObjectFactory;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Ejb3ConfigurationObjectFactory implements ObjectFactory {
+	public Object getObjectInstance(
+			Object reference, Name name, Context nameCtx, Hashtable<?, ?> environment
+	) throws Exception {
+		byte[] serialized = (byte[]) ( (Reference) reference ).get(0).getContent();
+		ByteArrayInputStream byteIn = new ByteArrayInputStream( serialized );
+		ObjectInputStream in = new ObjectInputStream( byteIn );
+		Ejb3Configuration cfg = (Ejb3Configuration) in.readObject();
+		in.close();
+		byteIn.close();
+		return cfg;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/EntityManagerFactoryImpl.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/EntityManagerFactoryImpl.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/EntityManagerFactoryImpl.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,54 +0,0 @@
-//$Id$
-package org.hibernate.ejb;
-
-import java.util.Map;
-import javax.persistence.EntityManager;
-import javax.persistence.PersistenceContextType;
-import javax.persistence.spi.PersistenceUnitTransactionType;
-
-import org.hibernate.SessionFactory;
-
-/**
- * @author Gavin King
- * @author Emmanuel Bernard
- */
-public class EntityManagerFactoryImpl implements HibernateEntityManagerFactory {
-
-	private SessionFactory sessionFactory;
-	private PersistenceUnitTransactionType transactionType;
-	private boolean discardOnClose;
-
-	public EntityManagerFactoryImpl(
-			SessionFactory sessionFactory,
-			PersistenceUnitTransactionType transactionType,
-			boolean discardOnClose
-	) {
-		this.sessionFactory = sessionFactory;
-		this.transactionType = transactionType;
-		this.discardOnClose = discardOnClose;
-	}
-
-	public EntityManager createEntityManager() {
-		return createEntityManager( null );
-	}
-
-	public EntityManager createEntityManager(Map map) {
-		//TODO support discardOnClose, persistencecontexttype?, interceptor,
-		return new EntityManagerImpl(
-				sessionFactory, PersistenceContextType.EXTENDED, transactionType, discardOnClose, map
-		);
-	}
-
-	public void close() {
-		sessionFactory.close();
-	}
-
-	public boolean isOpen() {
-		return ! sessionFactory.isClosed();
-	}
-
-	public SessionFactory getSessionFactory() {
-		return sessionFactory;
-	}
-
-}

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/EntityManagerFactoryImpl.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/EntityManagerFactoryImpl.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/EntityManagerFactoryImpl.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/EntityManagerFactoryImpl.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,54 @@
+//$Id$
+package org.hibernate.ejb;
+
+import java.util.Map;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContextType;
+import javax.persistence.spi.PersistenceUnitTransactionType;
+
+import org.hibernate.SessionFactory;
+
+/**
+ * @author Gavin King
+ * @author Emmanuel Bernard
+ */
+public class EntityManagerFactoryImpl implements HibernateEntityManagerFactory {
+
+	private SessionFactory sessionFactory;
+	private PersistenceUnitTransactionType transactionType;
+	private boolean discardOnClose;
+
+	public EntityManagerFactoryImpl(
+			SessionFactory sessionFactory,
+			PersistenceUnitTransactionType transactionType,
+			boolean discardOnClose
+	) {
+		this.sessionFactory = sessionFactory;
+		this.transactionType = transactionType;
+		this.discardOnClose = discardOnClose;
+	}
+
+	public EntityManager createEntityManager() {
+		return createEntityManager( null );
+	}
+
+	public EntityManager createEntityManager(Map map) {
+		//TODO support discardOnClose, persistencecontexttype?, interceptor,
+		return new EntityManagerImpl(
+				sessionFactory, PersistenceContextType.EXTENDED, transactionType, discardOnClose, map
+		);
+	}
+
+	public void close() {
+		sessionFactory.close();
+	}
+
+	public boolean isOpen() {
+		return ! sessionFactory.isClosed();
+	}
+
+	public SessionFactory getSessionFactory() {
+		return sessionFactory;
+	}
+
+}

Deleted: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/EntityManagerImpl.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/EntityManagerImpl.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/EntityManagerImpl.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,103 +0,0 @@
-//$Id$
-package org.hibernate.ejb;
-
-import java.util.Map;
-import javax.persistence.PersistenceContextType;
-import javax.persistence.spi.PersistenceUnitTransactionType;
-import javax.transaction.Synchronization;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.hibernate.HibernateException;
-import org.hibernate.Session;
-import org.hibernate.SessionFactory;
-import org.hibernate.cfg.Environment;
-import org.hibernate.engine.SessionImplementor;
-
-/**
- * @author Gavin King
- */
-public class EntityManagerImpl extends AbstractEntityManagerImpl {
-
-	private static Log log = LogFactory.getLog( EntityManagerImpl.class );
-	protected Session session;
-	protected SessionFactory sessionFactory;
-	protected boolean open;
-	protected boolean discardOnClose;
-
-	public EntityManagerImpl(
-			SessionFactory sessionFactory, PersistenceContextType pcType,
-			PersistenceUnitTransactionType transactionType,
-			boolean discardOnClose, Map properties
-	) {
-		super( pcType, transactionType, properties );
-		this.sessionFactory = sessionFactory;
-		this.open = true;
-		this.discardOnClose = discardOnClose;
-		postInit();
-	}
-
-	public Session getSession() {
-
-		if ( !open ) throw new IllegalStateException( "EntityManager is closed" );
-		return getRawSession();
-	}
-
-	protected Session getRawSession() {
-		if ( session == null ) {
-			session = sessionFactory.openSession();
-			if ( persistenceContextType == PersistenceContextType.TRANSACTION ) {
-				( (SessionImplementor) session ).setAutoClear( true );
-			}
-		}
-		return session;
-	}
-
-	public void close() {
-
-		if ( !open ) throw new IllegalStateException( "EntityManager is closed" );
-		if ( !discardOnClose && isTransactionInProgress() ) {
-			//delay the closing till the end of the enlisted transaction
-			getSession().getTransaction().registerSynchronization(
-					new Synchronization() {
-						public void beforeCompletion() {
-							//nothing to do
-						}
-
-						public void afterCompletion(int i) {
-							if ( session != null ) {
-								if ( session.isOpen() ) {
-									log.debug( "Closing entity manager after transaction completion" );
-									session.close();
-								}
-								else {
-									log.warn( "Entity Manager closed by someone else ("
-											+ Environment.AUTO_CLOSE_SESSION
-											+ " must not be used)");
-								}
-							}
-							//TODO session == null should not happen
-						}
-					}
-			);
-		}
-		else {
-			//close right now
-			if ( session != null ) session.close();
-		}
-		open = false;
-	}
-
-	public boolean isOpen() {
-		//adjustFlushMode(); //don't adjust, can't be done on closed EM
-		try {
-			if ( open ) getSession().isOpen(); //to force enlistment in tx
-			return open;
-		}
-		catch (HibernateException he) {
-			throwPersistenceException( he );
-			return false;
-		}
-	}
-
-}

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/EntityManagerImpl.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/EntityManagerImpl.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/EntityManagerImpl.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/EntityManagerImpl.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,103 @@
+//$Id$
+package org.hibernate.ejb;
+
+import java.util.Map;
+import javax.persistence.PersistenceContextType;
+import javax.persistence.spi.PersistenceUnitTransactionType;
+import javax.transaction.Synchronization;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.hibernate.HibernateException;
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.hibernate.cfg.Environment;
+import org.hibernate.engine.SessionImplementor;
+
+/**
+ * @author Gavin King
+ */
+public class EntityManagerImpl extends AbstractEntityManagerImpl {
+
+	private static Log log = LogFactory.getLog( EntityManagerImpl.class );
+	protected Session session;
+	protected SessionFactory sessionFactory;
+	protected boolean open;
+	protected boolean discardOnClose;
+
+	public EntityManagerImpl(
+			SessionFactory sessionFactory, PersistenceContextType pcType,
+			PersistenceUnitTransactionType transactionType,
+			boolean discardOnClose, Map properties
+	) {
+		super( pcType, transactionType, properties );
+		this.sessionFactory = sessionFactory;
+		this.open = true;
+		this.discardOnClose = discardOnClose;
+		postInit();
+	}
+
+	public Session getSession() {
+
+		if ( !open ) throw new IllegalStateException( "EntityManager is closed" );
+		return getRawSession();
+	}
+
+	protected Session getRawSession() {
+		if ( session == null ) {
+			session = sessionFactory.openSession();
+			if ( persistenceContextType == PersistenceContextType.TRANSACTION ) {
+				( (SessionImplementor) session ).setAutoClear( true );
+			}
+		}
+		return session;
+	}
+
+	public void close() {
+
+		if ( !open ) throw new IllegalStateException( "EntityManager is closed" );
+		if ( !discardOnClose && isTransactionInProgress() ) {
+			//delay the closing till the end of the enlisted transaction
+			getSession().getTransaction().registerSynchronization(
+					new Synchronization() {
+						public void beforeCompletion() {
+							//nothing to do
+						}
+
+						public void afterCompletion(int i) {
+							if ( session != null ) {
+								if ( session.isOpen() ) {
+									log.debug( "Closing entity manager after transaction completion" );
+									session.close();
+								}
+								else {
+									log.warn( "Entity Manager closed by someone else ("
+											+ Environment.AUTO_CLOSE_SESSION
+											+ " must not be used)");
+								}
+							}
+							//TODO session == null should not happen
+						}
+					}
+			);
+		}
+		else {
+			//close right now
+			if ( session != null ) session.close();
+		}
+		open = false;
+	}
+
+	public boolean isOpen() {
+		//adjustFlushMode(); //don't adjust, can't be done on closed EM
+		try {
+			if ( open ) getSession().isOpen(); //to force enlistment in tx
+			return open;
+		}
+		catch (HibernateException he) {
+			throwPersistenceException( he );
+			return false;
+		}
+	}
+
+}

Deleted: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/EventListenerConfigurator.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/EventListenerConfigurator.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/EventListenerConfigurator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,223 +0,0 @@
-//$Id$
-package org.hibernate.ejb;
-
-import java.beans.BeanInfo;
-import java.beans.Introspector;
-import java.beans.PropertyDescriptor;
-import java.lang.reflect.Array;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Properties;
-import java.util.StringTokenizer;
-
-import org.hibernate.HibernateException;
-import org.hibernate.MappingException;
-import org.hibernate.ejb.event.CallbackHandlerConsumer;
-import org.hibernate.ejb.event.EJB3AutoFlushEventListener;
-import org.hibernate.ejb.event.EJB3DeleteEventListener;
-import org.hibernate.ejb.event.EJB3FlushEntityEventListener;
-import org.hibernate.ejb.event.EJB3FlushEventListener;
-import org.hibernate.ejb.event.EJB3MergeEventListener;
-import org.hibernate.ejb.event.EJB3PersistEventListener;
-import org.hibernate.ejb.event.EJB3PersistOnFlushEventListener;
-import org.hibernate.ejb.event.EJB3PostDeleteEventListener;
-import org.hibernate.ejb.event.EJB3PostInsertEventListener;
-import org.hibernate.ejb.event.EJB3PostLoadEventListener;
-import org.hibernate.ejb.event.EJB3PostUpdateEventListener;
-import org.hibernate.ejb.event.EJB3SaveEventListener;
-import org.hibernate.ejb.event.EJB3SaveOrUpdateEventListener;
-import org.hibernate.ejb.event.EntityCallbackHandler;
-import org.hibernate.event.AutoFlushEventListener;
-import org.hibernate.event.DeleteEventListener;
-import org.hibernate.event.EventListeners;
-import org.hibernate.event.FlushEntityEventListener;
-import org.hibernate.event.FlushEventListener;
-import org.hibernate.event.MergeEventListener;
-import org.hibernate.event.PersistEventListener;
-import org.hibernate.event.PostDeleteEventListener;
-import org.hibernate.event.PostInsertEventListener;
-import org.hibernate.event.PostLoadEventListener;
-import org.hibernate.event.PostUpdateEventListener;
-import org.hibernate.event.PreDeleteEventListener;
-import org.hibernate.event.PreInsertEventListener;
-import org.hibernate.event.PreLoadEventListener;
-import org.hibernate.event.PreUpdateEventListener;
-import org.hibernate.event.SaveOrUpdateEventListener;
-import org.hibernate.mapping.PersistentClass;
-import org.hibernate.annotations.common.reflection.ReflectionManager;
-import org.hibernate.secure.JACCPreDeleteEventListener;
-import org.hibernate.secure.JACCPreInsertEventListener;
-import org.hibernate.secure.JACCPreLoadEventListener;
-import org.hibernate.secure.JACCPreUpdateEventListener;
-import org.hibernate.secure.JACCSecurityListener;
-import org.hibernate.validator.event.ValidateEventListener;
-
-/**
- * @author Emmanuel Bernard
- */
-public class EventListenerConfigurator {
-	private static final Object[] READER_METHOD_ARGS = new Object[0];
-
-	private Ejb3Configuration configuration;
-	private boolean isSecurity;
-
-	public EventListenerConfigurator(Ejb3Configuration configuration) {
-		this.configuration = configuration;
-		EventListeners listenerConfig = configuration.getEventListeners();
-
-		//Action event
-		//EJB3-specific ops listeners
-		listenerConfig.setFlushEventListeners( new FlushEventListener[]{EJB3FlushEventListener.INSTANCE} );
-		//EJB3-specific ops listeners
-		listenerConfig.setAutoFlushEventListeners( new AutoFlushEventListener[]{EJB3AutoFlushEventListener.INSTANCE} );
-		listenerConfig.setDeleteEventListeners( new DeleteEventListener[]{new EJB3DeleteEventListener()} );
-		listenerConfig.setFlushEntityEventListeners(
-				new FlushEntityEventListener[]{new EJB3FlushEntityEventListener()}
-		);
-		listenerConfig.setMergeEventListeners( new MergeEventListener[]{new EJB3MergeEventListener()} );
-		listenerConfig.setPersistEventListeners( new PersistEventListener[]{new EJB3PersistEventListener()} );
-		listenerConfig.setPersistOnFlushEventListeners(
-				new PersistEventListener[]{new EJB3PersistOnFlushEventListener()}
-		);
-		listenerConfig.setSaveEventListeners( new SaveOrUpdateEventListener[]{new EJB3SaveEventListener()} );
-		listenerConfig.setSaveOrUpdateEventListeners(
-				new SaveOrUpdateEventListener[]{new EJB3SaveOrUpdateEventListener()}
-		);
-
-		//Pre events
-		listenerConfig.setPreInsertEventListeners(
-				new PreInsertEventListener[]{
-						new JACCPreInsertEventListener(),
-				}
-		);
-		listenerConfig.setPreUpdateEventListeners(
-				new PreUpdateEventListener[]{
-						new JACCPreUpdateEventListener(),
-				}
-		);
-		listenerConfig.setPreDeleteEventListeners(
-				new PreDeleteEventListener[]{
-						new JACCPreDeleteEventListener()
-				}
-		);
-		listenerConfig.setPreLoadEventListeners(
-				new PreLoadEventListener[]{
-						new JACCPreLoadEventListener()
-				}
-		);
-
-		//post events
-		listenerConfig.setPostDeleteEventListeners(
-				new PostDeleteEventListener[]{new EJB3PostDeleteEventListener()}
-		);
-		listenerConfig.setPostInsertEventListeners(
-				new PostInsertEventListener[]{new EJB3PostInsertEventListener()}
-		);
-		listenerConfig.setPostLoadEventListeners(
-				new PostLoadEventListener[]{new EJB3PostLoadEventListener()}
-		);
-		listenerConfig.setPostUpdateEventListeners(
-				new PostUpdateEventListener[]{new EJB3PostUpdateEventListener()}
-		);
-	}
-
-	public void setProperties(Properties properties) {
-		if ( properties.containsKey( HibernatePersistence.JACC_ENABLED ) ) {
-			isSecurity = true;
-		}
-		//override events if needed
-		Enumeration<?> enumeration = properties.propertyNames();
-		while ( enumeration.hasMoreElements() ) {
-			String name = (String) enumeration.nextElement();
-			if ( name.startsWith( HibernatePersistence.EVENT_LISTENER_PREFIX ) ) {
-				String type = name.substring( HibernatePersistence.EVENT_LISTENER_PREFIX.length() + 1 );
-				StringTokenizer st = new StringTokenizer( properties.getProperty( name ), " ,", false );
-				List<String> listeners = new ArrayList<String>();
-				while ( st.hasMoreElements() ) {
-					listeners.add( (String) st.nextElement() );
-				}
-				configuration.setListeners( type, listeners.toArray( new String[ listeners.size() ] ) );
-			}
-		}
-	}
-
-	public void configure() {
-		//TODO exclude pure hbm file classes?
-		//TODO move it to each event listener initialize()?
-		EntityCallbackHandler callbackHandler = new EntityCallbackHandler();
-		configuration.buildMappings(); //needed to get all the classes
-		Iterator classes = configuration.getClassMappings();
-		ReflectionManager reflectionManager = configuration.getHibernateConfiguration().getReflectionManager();
-		while ( classes.hasNext() ) {
-			PersistentClass clazz = (PersistentClass) classes.next();
-			if ( clazz.getClassName() != null ) {
-				//we can have non java class persisted by hibernate
-				try {
-					callbackHandler.add( reflectionManager.classForName( clazz.getClassName(), this.getClass() ), reflectionManager );
-				}
-				catch (ClassNotFoundException e) {
-					throw new MappingException("entity class not found: " + clazz.getNodeName(), e);
-				}
-			}
-		}
-
-		EventListeners listenerConfig = configuration.getEventListeners();
-
-		BeanInfo beanInfo = null;
-		try {
-			beanInfo = Introspector.getBeanInfo( listenerConfig.getClass(), Object.class );
-			PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
-			try {
-				for ( int i = 0, max = pds.length; i < max ; i++ ) {
-					final Object listeners = pds[i].getReadMethod().invoke( listenerConfig, READER_METHOD_ARGS );
-					if ( listeners == null ) {
-						throw new HibernateException( "Listener [" + pds[i].getName() + "] was null" );
-					}
-					if ( listeners instanceof Object[] ) {
-						int securityListenersNbr = 0;
-						Object[] listenersArray = (Object[]) listeners;
-						for ( Object listener : listenersArray ) {
-							if ( listener != null && listener instanceof CallbackHandlerConsumer ) {
-								( (CallbackHandlerConsumer) listener ).setCallbackHandler( callbackHandler );
-							}
-							if ( listener != null && listener instanceof JACCSecurityListener ) {
-								if ( !isSecurity ) {
-									securityListenersNbr++;
-								}
-							}
-						}
-						if ( !isSecurity ) {
-							Class clazz = pds[i].getReadMethod().getReturnType().getComponentType();
-							Object newArray = Array.newInstance( clazz, listenersArray.length - securityListenersNbr );
-							int index = 0;
-							for ( Object listener : listenersArray ) {
-								if ( ! ( listener != null && listener instanceof JACCSecurityListener ) ) {
-									Array.set( newArray, index++, listener );
-								}
-							}
-							pds[i].getWriteMethod().invoke( listenerConfig, newArray );
-						}
-					}
-				}
-			}
-			catch (HibernateException e) {
-				throw e;
-			}
-			catch (Throwable t) {
-				throw new HibernateException( "Unable to validate listener config", t );
-			}
-		}
-		catch (Exception t) {
-			throw new HibernateException( "Unable to copy listeners", t );
-		}
-		finally {
-			if ( beanInfo != null ) {
-				// release the jdk internal caches everytime to ensure this
-				// plays nicely with destroyable class-loaders
-				Introspector.flushFromCaches( getClass() );
-			}
-		}
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/EventListenerConfigurator.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/EventListenerConfigurator.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/EventListenerConfigurator.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/EventListenerConfigurator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,223 @@
+//$Id$
+package org.hibernate.ejb;
+
+import java.beans.BeanInfo;
+import java.beans.Introspector;
+import java.beans.PropertyDescriptor;
+import java.lang.reflect.Array;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Properties;
+import java.util.StringTokenizer;
+
+import org.hibernate.HibernateException;
+import org.hibernate.MappingException;
+import org.hibernate.ejb.event.CallbackHandlerConsumer;
+import org.hibernate.ejb.event.EJB3AutoFlushEventListener;
+import org.hibernate.ejb.event.EJB3DeleteEventListener;
+import org.hibernate.ejb.event.EJB3FlushEntityEventListener;
+import org.hibernate.ejb.event.EJB3FlushEventListener;
+import org.hibernate.ejb.event.EJB3MergeEventListener;
+import org.hibernate.ejb.event.EJB3PersistEventListener;
+import org.hibernate.ejb.event.EJB3PersistOnFlushEventListener;
+import org.hibernate.ejb.event.EJB3PostDeleteEventListener;
+import org.hibernate.ejb.event.EJB3PostInsertEventListener;
+import org.hibernate.ejb.event.EJB3PostLoadEventListener;
+import org.hibernate.ejb.event.EJB3PostUpdateEventListener;
+import org.hibernate.ejb.event.EJB3SaveEventListener;
+import org.hibernate.ejb.event.EJB3SaveOrUpdateEventListener;
+import org.hibernate.ejb.event.EntityCallbackHandler;
+import org.hibernate.event.AutoFlushEventListener;
+import org.hibernate.event.DeleteEventListener;
+import org.hibernate.event.EventListeners;
+import org.hibernate.event.FlushEntityEventListener;
+import org.hibernate.event.FlushEventListener;
+import org.hibernate.event.MergeEventListener;
+import org.hibernate.event.PersistEventListener;
+import org.hibernate.event.PostDeleteEventListener;
+import org.hibernate.event.PostInsertEventListener;
+import org.hibernate.event.PostLoadEventListener;
+import org.hibernate.event.PostUpdateEventListener;
+import org.hibernate.event.PreDeleteEventListener;
+import org.hibernate.event.PreInsertEventListener;
+import org.hibernate.event.PreLoadEventListener;
+import org.hibernate.event.PreUpdateEventListener;
+import org.hibernate.event.SaveOrUpdateEventListener;
+import org.hibernate.mapping.PersistentClass;
+import org.hibernate.annotations.common.reflection.ReflectionManager;
+import org.hibernate.secure.JACCPreDeleteEventListener;
+import org.hibernate.secure.JACCPreInsertEventListener;
+import org.hibernate.secure.JACCPreLoadEventListener;
+import org.hibernate.secure.JACCPreUpdateEventListener;
+import org.hibernate.secure.JACCSecurityListener;
+import org.hibernate.validator.event.ValidateEventListener;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class EventListenerConfigurator {
+	private static final Object[] READER_METHOD_ARGS = new Object[0];
+
+	private Ejb3Configuration configuration;
+	private boolean isSecurity;
+
+	public EventListenerConfigurator(Ejb3Configuration configuration) {
+		this.configuration = configuration;
+		EventListeners listenerConfig = configuration.getEventListeners();
+
+		//Action event
+		//EJB3-specific ops listeners
+		listenerConfig.setFlushEventListeners( new FlushEventListener[]{EJB3FlushEventListener.INSTANCE} );
+		//EJB3-specific ops listeners
+		listenerConfig.setAutoFlushEventListeners( new AutoFlushEventListener[]{EJB3AutoFlushEventListener.INSTANCE} );
+		listenerConfig.setDeleteEventListeners( new DeleteEventListener[]{new EJB3DeleteEventListener()} );
+		listenerConfig.setFlushEntityEventListeners(
+				new FlushEntityEventListener[]{new EJB3FlushEntityEventListener()}
+		);
+		listenerConfig.setMergeEventListeners( new MergeEventListener[]{new EJB3MergeEventListener()} );
+		listenerConfig.setPersistEventListeners( new PersistEventListener[]{new EJB3PersistEventListener()} );
+		listenerConfig.setPersistOnFlushEventListeners(
+				new PersistEventListener[]{new EJB3PersistOnFlushEventListener()}
+		);
+		listenerConfig.setSaveEventListeners( new SaveOrUpdateEventListener[]{new EJB3SaveEventListener()} );
+		listenerConfig.setSaveOrUpdateEventListeners(
+				new SaveOrUpdateEventListener[]{new EJB3SaveOrUpdateEventListener()}
+		);
+
+		//Pre events
+		listenerConfig.setPreInsertEventListeners(
+				new PreInsertEventListener[]{
+						new JACCPreInsertEventListener(),
+				}
+		);
+		listenerConfig.setPreUpdateEventListeners(
+				new PreUpdateEventListener[]{
+						new JACCPreUpdateEventListener(),
+				}
+		);
+		listenerConfig.setPreDeleteEventListeners(
+				new PreDeleteEventListener[]{
+						new JACCPreDeleteEventListener()
+				}
+		);
+		listenerConfig.setPreLoadEventListeners(
+				new PreLoadEventListener[]{
+						new JACCPreLoadEventListener()
+				}
+		);
+
+		//post events
+		listenerConfig.setPostDeleteEventListeners(
+				new PostDeleteEventListener[]{new EJB3PostDeleteEventListener()}
+		);
+		listenerConfig.setPostInsertEventListeners(
+				new PostInsertEventListener[]{new EJB3PostInsertEventListener()}
+		);
+		listenerConfig.setPostLoadEventListeners(
+				new PostLoadEventListener[]{new EJB3PostLoadEventListener()}
+		);
+		listenerConfig.setPostUpdateEventListeners(
+				new PostUpdateEventListener[]{new EJB3PostUpdateEventListener()}
+		);
+	}
+
+	public void setProperties(Properties properties) {
+		if ( properties.containsKey( HibernatePersistence.JACC_ENABLED ) ) {
+			isSecurity = true;
+		}
+		//override events if needed
+		Enumeration<?> enumeration = properties.propertyNames();
+		while ( enumeration.hasMoreElements() ) {
+			String name = (String) enumeration.nextElement();
+			if ( name.startsWith( HibernatePersistence.EVENT_LISTENER_PREFIX ) ) {
+				String type = name.substring( HibernatePersistence.EVENT_LISTENER_PREFIX.length() + 1 );
+				StringTokenizer st = new StringTokenizer( properties.getProperty( name ), " ,", false );
+				List<String> listeners = new ArrayList<String>();
+				while ( st.hasMoreElements() ) {
+					listeners.add( (String) st.nextElement() );
+				}
+				configuration.setListeners( type, listeners.toArray( new String[ listeners.size() ] ) );
+			}
+		}
+	}
+
+	public void configure() {
+		//TODO exclude pure hbm file classes?
+		//TODO move it to each event listener initialize()?
+		EntityCallbackHandler callbackHandler = new EntityCallbackHandler();
+		configuration.buildMappings(); //needed to get all the classes
+		Iterator classes = configuration.getClassMappings();
+		ReflectionManager reflectionManager = configuration.getHibernateConfiguration().getReflectionManager();
+		while ( classes.hasNext() ) {
+			PersistentClass clazz = (PersistentClass) classes.next();
+			if ( clazz.getClassName() != null ) {
+				//we can have non java class persisted by hibernate
+				try {
+					callbackHandler.add( reflectionManager.classForName( clazz.getClassName(), this.getClass() ), reflectionManager );
+				}
+				catch (ClassNotFoundException e) {
+					throw new MappingException("entity class not found: " + clazz.getNodeName(), e);
+				}
+			}
+		}
+
+		EventListeners listenerConfig = configuration.getEventListeners();
+
+		BeanInfo beanInfo = null;
+		try {
+			beanInfo = Introspector.getBeanInfo( listenerConfig.getClass(), Object.class );
+			PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
+			try {
+				for ( int i = 0, max = pds.length; i < max ; i++ ) {
+					final Object listeners = pds[i].getReadMethod().invoke( listenerConfig, READER_METHOD_ARGS );
+					if ( listeners == null ) {
+						throw new HibernateException( "Listener [" + pds[i].getName() + "] was null" );
+					}
+					if ( listeners instanceof Object[] ) {
+						int securityListenersNbr = 0;
+						Object[] listenersArray = (Object[]) listeners;
+						for ( Object listener : listenersArray ) {
+							if ( listener != null && listener instanceof CallbackHandlerConsumer ) {
+								( (CallbackHandlerConsumer) listener ).setCallbackHandler( callbackHandler );
+							}
+							if ( listener != null && listener instanceof JACCSecurityListener ) {
+								if ( !isSecurity ) {
+									securityListenersNbr++;
+								}
+							}
+						}
+						if ( !isSecurity ) {
+							Class clazz = pds[i].getReadMethod().getReturnType().getComponentType();
+							Object newArray = Array.newInstance( clazz, listenersArray.length - securityListenersNbr );
+							int index = 0;
+							for ( Object listener : listenersArray ) {
+								if ( ! ( listener != null && listener instanceof JACCSecurityListener ) ) {
+									Array.set( newArray, index++, listener );
+								}
+							}
+							pds[i].getWriteMethod().invoke( listenerConfig, newArray );
+						}
+					}
+				}
+			}
+			catch (HibernateException e) {
+				throw e;
+			}
+			catch (Throwable t) {
+				throw new HibernateException( "Unable to validate listener config", t );
+			}
+		}
+		catch (Exception t) {
+			throw new HibernateException( "Unable to copy listeners", t );
+		}
+		finally {
+			if ( beanInfo != null ) {
+				// release the jdk internal caches everytime to ensure this
+				// plays nicely with destroyable class-loaders
+				Introspector.flushFromCaches( getClass() );
+			}
+		}
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/HibernateEntityManager.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/HibernateEntityManager.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/HibernateEntityManager.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,13 +0,0 @@
-//$Id$
-package org.hibernate.ejb;
-
-import javax.persistence.EntityManager;
-
-import org.hibernate.Session;
-
-/**
- * @author Gavin King
- */
-public interface HibernateEntityManager extends EntityManager {
-	public Session getSession();
-}

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/HibernateEntityManager.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/HibernateEntityManager.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/HibernateEntityManager.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/HibernateEntityManager.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,13 @@
+//$Id$
+package org.hibernate.ejb;
+
+import javax.persistence.EntityManager;
+
+import org.hibernate.Session;
+
+/**
+ * @author Gavin King
+ */
+public interface HibernateEntityManager extends EntityManager {
+	public Session getSession();
+}

Deleted: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/HibernateEntityManagerFactory.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/HibernateEntityManagerFactory.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/HibernateEntityManagerFactory.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,14 +0,0 @@
-//$Id$
-package org.hibernate.ejb;
-
-import java.io.Serializable;
-import javax.persistence.EntityManagerFactory;
-
-import org.hibernate.SessionFactory;
-
-/**
- * @author Gavin King
- */
-public interface HibernateEntityManagerFactory extends EntityManagerFactory, Serializable {
-	public SessionFactory getSessionFactory();
-}

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/HibernateEntityManagerFactory.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/HibernateEntityManagerFactory.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/HibernateEntityManagerFactory.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/HibernateEntityManagerFactory.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,14 @@
+//$Id$
+package org.hibernate.ejb;
+
+import java.io.Serializable;
+import javax.persistence.EntityManagerFactory;
+
+import org.hibernate.SessionFactory;
+
+/**
+ * @author Gavin King
+ */
+public interface HibernateEntityManagerFactory extends EntityManagerFactory, Serializable {
+	public SessionFactory getSessionFactory();
+}

Deleted: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/HibernateEntityManagerImplementor.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/HibernateEntityManagerImplementor.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/HibernateEntityManagerImplementor.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,20 +0,0 @@
-//$Id$
-package org.hibernate.ejb;
-
-import javax.persistence.PersistenceException;
-
-import org.hibernate.HibernateException;
-import org.hibernate.StaleStateException;
-
-/**
- * @author Emmanuel Bernard
- */
-public interface HibernateEntityManagerImplementor extends HibernateEntityManager {
-	boolean isTransactionInProgress();
-
-	public void throwPersistenceException(PersistenceException e);
-
-	public void throwPersistenceException(HibernateException e);
-
-	public PersistenceException wrapStaleStateException(StaleStateException e);
-}

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/HibernateEntityManagerImplementor.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/HibernateEntityManagerImplementor.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/HibernateEntityManagerImplementor.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/HibernateEntityManagerImplementor.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,20 @@
+//$Id$
+package org.hibernate.ejb;
+
+import javax.persistence.PersistenceException;
+
+import org.hibernate.HibernateException;
+import org.hibernate.StaleStateException;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public interface HibernateEntityManagerImplementor extends HibernateEntityManager {
+	boolean isTransactionInProgress();
+
+	public void throwPersistenceException(PersistenceException e);
+
+	public void throwPersistenceException(HibernateException e);
+
+	public PersistenceException wrapStaleStateException(StaleStateException e);
+}

Deleted: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/HibernatePersistence.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/HibernatePersistence.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/HibernatePersistence.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,140 +0,0 @@
-//$Id$
-package org.hibernate.ejb;
-
-import java.util.Map;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.spi.PersistenceUnitInfo;
-
-/**
- * Hibernate EJB3 persistence provider implementation
- *
- * @author Gavin King
- */
-public class HibernatePersistence implements javax.persistence.spi.PersistenceProvider {
-
-	/**
-	 * Provider
-	 */
-	public static final String PROVIDER = "javax.persistence.provider";
-	/**
-	 * ²
-	 * transaction type
-	 */
-	public static final String TRANSACTION_TYPE = "javax.persistence.transactionType";
-	/**
-	 * JTA datasource name
-	 */
-	public static final String JTA_DATASOURCE = "javax.persistence.jtaDataSource";
-	/**
-	 * Non JTA datasource name
-	 */
-	public static final String NON_JTA_DATASOURCE = "javax.persistence.nonJtaDataSource";
-	/**
-	 * JAR autodetection artifacts class, hbm
-	 */
-	public static final String AUTODETECTION = "hibernate.archive.autodetection";
-	/**
-	 * cfg.xml configuration file used
-	 */
-	public static final String CFG_FILE = "hibernate.ejb.cfgfile";
-	/**
-	 * Caching configuration should follow the following pattern
-	 * hibernate.ejb.classcache.<fully.qualified.Classname> usage[, region]
-	 * where usage is the cache strategy used and region the cache region name
-	 */
-	public static final String CLASS_CACHE_PREFIX = "hibernate.ejb.classcache";
-	/**
-	 * Caching configuration should follow the following pattern
-	 * hibernate.ejb.collectioncache.<fully.qualified.Classname>.<role> usage[, region]
-	 * where usage is the cache strategy used and region the cache region name
-	 */
-	public static final String COLLECTION_CACHE_PREFIX = "hibernate.ejb.collectioncache";
-	/**
-	 * Interceptor class name, the class has to have a no-arg constructor
-	 */
-	public static final String INTERCEPTOR = "hibernate.ejb.interceptor";
-	/**
-	 * Naming strategy class name, the class has to have a no-arg constructor
-	 */
-	public static final String NAMING_STRATEGY = "hibernate.ejb.naming_strategy";
-	/**
-	 * Event configuration should follow the following pattern
-	 * hibernate.ejb.event.[eventType] f.q.c.n.EventListener1, f.q.c.n.EventListener12 ...
-	 */
-	public static final String EVENT_LISTENER_PREFIX = "hibernate.ejb.event";
-	/**
-	 * Enable the class file enhancement
-	 */
-	public static final String USE_CLASS_ENHANCER = "hibernate.ejb.use_class_enhancer";
-	/**
-	 * Whether or not discard persistent context on entityManager.close()
-	 * The EJB3 compliant and default choice is false
-	 */
-	public static final String DISCARD_PC_ON_CLOSE = "hibernate.ejb.discard_pc_on_close";
-	/**
-	 * Consider this as experimental
-	 * It is not recommended to set up this property, the configuration is stored
-	 * in the JNDI in a serialized form
-	 */
-	public static final String CONFIGURATION_JNDI_NAME = "hibernate.ejb.configuration_jndi_name";
-
-	//The following properties are for Internal use only
-	/**
-	 * link to the alternative Hibernate configuration file
-	 * Internal use only
-	 */
-	/**
-	 * List of classes names
-	 * Internal use only
-	 */
-	public static final String CLASS_NAMES = "hibernate.ejb.classes";
-	/**
-	 * List of annotated packages
-	 * Internal use only
-	 */
-	public static final String PACKAGE_NAMES = "hibernate.ejb.packages";
-	/**
-	 * List of classes names
-	 * Internal use only
-	 */
-	public static final String XML_FILE_NAMES = "hibernate.ejb.xml_files";
-	public static final String HBXML_FILES = "hibernate.hbmxml.files";
-	public static final String LOADED_CLASSES = "hibernate.ejb.loaded.classes";
-	public static final String JACC_CONTEXT_ID = "hibernate.jacc.ctx.id";
-	public static final String JACC_PREFIX = "hibernate.jacc";
-	public static final String JACC_ENABLED = "hibernate.jacc.enabled";
-	public static final String PERSISTENCE_UNIT_NAME = "hibernate.ejb.persistenceUnitName";
-
-
-	/**
-	 * Get an entity manager factory by its entity manager name and given the
-	 * appropriate extra properties. Those proeprties override the one get through
-	 * the peristence.xml file.
-	 *
-	 * @param persistenceUnitName entity manager name
-	 * @param overridenProperties properties passed to the persistence provider
-	 * @return initialized EntityManagerFactory
-	 */
-	public EntityManagerFactory createEntityManagerFactory(String persistenceUnitName, Map overridenProperties) {
-		Ejb3Configuration cfg = new Ejb3Configuration();
-		Ejb3Configuration configured = cfg.configure( persistenceUnitName, overridenProperties );
-		return configured != null ? configured.buildEntityManagerFactory() : null;
-	}
-
-	public EntityManagerFactory createContainerEntityManagerFactory(PersistenceUnitInfo info, Map map) {
-		Ejb3Configuration cfg = new Ejb3Configuration();
-		Ejb3Configuration configured = cfg.configure( info, map );
-		return configured != null ? configured.buildEntityManagerFactory() : null;
-	}
-
-	/**
-	 * create a factory from a canonical version
-	 * @deprecated
-	 */
-	// This is used directly by JBoss so don't remove until further notice.  bill at jboss.org
-	public EntityManagerFactory createEntityManagerFactory(Map properties) {
-		Ejb3Configuration cfg = new Ejb3Configuration();
-		return cfg.createEntityManagerFactory( properties );
-	}
-
-}
\ No newline at end of file

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/HibernatePersistence.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/HibernatePersistence.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/HibernatePersistence.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/HibernatePersistence.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,140 @@
+//$Id$
+package org.hibernate.ejb;
+
+import java.util.Map;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.spi.PersistenceUnitInfo;
+
+/**
+ * Hibernate EJB3 persistence provider implementation
+ *
+ * @author Gavin King
+ */
+public class HibernatePersistence implements javax.persistence.spi.PersistenceProvider {
+
+	/**
+	 * Provider
+	 */
+	public static final String PROVIDER = "javax.persistence.provider";
+	/**
+	 * ²
+	 * transaction type
+	 */
+	public static final String TRANSACTION_TYPE = "javax.persistence.transactionType";
+	/**
+	 * JTA datasource name
+	 */
+	public static final String JTA_DATASOURCE = "javax.persistence.jtaDataSource";
+	/**
+	 * Non JTA datasource name
+	 */
+	public static final String NON_JTA_DATASOURCE = "javax.persistence.nonJtaDataSource";
+	/**
+	 * JAR autodetection artifacts class, hbm
+	 */
+	public static final String AUTODETECTION = "hibernate.archive.autodetection";
+	/**
+	 * cfg.xml configuration file used
+	 */
+	public static final String CFG_FILE = "hibernate.ejb.cfgfile";
+	/**
+	 * Caching configuration should follow the following pattern
+	 * hibernate.ejb.classcache.<fully.qualified.Classname> usage[, region]
+	 * where usage is the cache strategy used and region the cache region name
+	 */
+	public static final String CLASS_CACHE_PREFIX = "hibernate.ejb.classcache";
+	/**
+	 * Caching configuration should follow the following pattern
+	 * hibernate.ejb.collectioncache.<fully.qualified.Classname>.<role> usage[, region]
+	 * where usage is the cache strategy used and region the cache region name
+	 */
+	public static final String COLLECTION_CACHE_PREFIX = "hibernate.ejb.collectioncache";
+	/**
+	 * Interceptor class name, the class has to have a no-arg constructor
+	 */
+	public static final String INTERCEPTOR = "hibernate.ejb.interceptor";
+	/**
+	 * Naming strategy class name, the class has to have a no-arg constructor
+	 */
+	public static final String NAMING_STRATEGY = "hibernate.ejb.naming_strategy";
+	/**
+	 * Event configuration should follow the following pattern
+	 * hibernate.ejb.event.[eventType] f.q.c.n.EventListener1, f.q.c.n.EventListener12 ...
+	 */
+	public static final String EVENT_LISTENER_PREFIX = "hibernate.ejb.event";
+	/**
+	 * Enable the class file enhancement
+	 */
+	public static final String USE_CLASS_ENHANCER = "hibernate.ejb.use_class_enhancer";
+	/**
+	 * Whether or not discard persistent context on entityManager.close()
+	 * The EJB3 compliant and default choice is false
+	 */
+	public static final String DISCARD_PC_ON_CLOSE = "hibernate.ejb.discard_pc_on_close";
+	/**
+	 * Consider this as experimental
+	 * It is not recommended to set up this property, the configuration is stored
+	 * in the JNDI in a serialized form
+	 */
+	public static final String CONFIGURATION_JNDI_NAME = "hibernate.ejb.configuration_jndi_name";
+
+	//The following properties are for Internal use only
+	/**
+	 * link to the alternative Hibernate configuration file
+	 * Internal use only
+	 */
+	/**
+	 * List of classes names
+	 * Internal use only
+	 */
+	public static final String CLASS_NAMES = "hibernate.ejb.classes";
+	/**
+	 * List of annotated packages
+	 * Internal use only
+	 */
+	public static final String PACKAGE_NAMES = "hibernate.ejb.packages";
+	/**
+	 * List of classes names
+	 * Internal use only
+	 */
+	public static final String XML_FILE_NAMES = "hibernate.ejb.xml_files";
+	public static final String HBXML_FILES = "hibernate.hbmxml.files";
+	public static final String LOADED_CLASSES = "hibernate.ejb.loaded.classes";
+	public static final String JACC_CONTEXT_ID = "hibernate.jacc.ctx.id";
+	public static final String JACC_PREFIX = "hibernate.jacc";
+	public static final String JACC_ENABLED = "hibernate.jacc.enabled";
+	public static final String PERSISTENCE_UNIT_NAME = "hibernate.ejb.persistenceUnitName";
+
+
+	/**
+	 * Get an entity manager factory by its entity manager name and given the
+	 * appropriate extra properties. Those proeprties override the one get through
+	 * the peristence.xml file.
+	 *
+	 * @param persistenceUnitName entity manager name
+	 * @param overridenProperties properties passed to the persistence provider
+	 * @return initialized EntityManagerFactory
+	 */
+	public EntityManagerFactory createEntityManagerFactory(String persistenceUnitName, Map overridenProperties) {
+		Ejb3Configuration cfg = new Ejb3Configuration();
+		Ejb3Configuration configured = cfg.configure( persistenceUnitName, overridenProperties );
+		return configured != null ? configured.buildEntityManagerFactory() : null;
+	}
+
+	public EntityManagerFactory createContainerEntityManagerFactory(PersistenceUnitInfo info, Map map) {
+		Ejb3Configuration cfg = new Ejb3Configuration();
+		Ejb3Configuration configured = cfg.configure( info, map );
+		return configured != null ? configured.buildEntityManagerFactory() : null;
+	}
+
+	/**
+	 * create a factory from a canonical version
+	 * @deprecated
+	 */
+	// This is used directly by JBoss so don't remove until further notice.  bill at jboss.org
+	public EntityManagerFactory createEntityManagerFactory(Map properties) {
+		Ejb3Configuration cfg = new Ejb3Configuration();
+		return cfg.createEntityManagerFactory( properties );
+	}
+
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/HibernateQuery.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/HibernateQuery.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/HibernateQuery.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,8 +0,0 @@
-//$Id$
-package org.hibernate.ejb;
-
-import javax.persistence.Query;
-
-public interface HibernateQuery extends Query {
-	public org.hibernate.Query getHibernateQuery();
-}

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/HibernateQuery.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/HibernateQuery.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/HibernateQuery.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/HibernateQuery.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,8 @@
+//$Id$
+package org.hibernate.ejb;
+
+import javax.persistence.Query;
+
+public interface HibernateQuery extends Query {
+	public org.hibernate.Query getHibernateQuery();
+}

Deleted: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/InjectionSettingsFactory.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/InjectionSettingsFactory.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/InjectionSettingsFactory.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,31 +0,0 @@
-//$Id$
-package org.hibernate.ejb;
-
-import java.util.Map;
-import java.util.Properties;
-
-import org.hibernate.cfg.SettingsFactory;
-import org.hibernate.connection.ConnectionProvider;
-import org.hibernate.connection.ConnectionProviderFactory;
-
-/**
- * @author Emmanuel Bernard
- */
-public class InjectionSettingsFactory extends SettingsFactory {
-	private Map connectionProviderInjectionData;
-
-	/**
-	 * Map<String,Object> where the key represents the javabean property in witch
-	 * Object will be injected
-	 *
-	 * @param connectionProviderInjectionData
-	 *
-	 */
-	public void setConnectionProviderInjectionData(Map connectionProviderInjectionData) {
-		this.connectionProviderInjectionData = connectionProviderInjectionData;
-	}
-
-	protected ConnectionProvider createConnectionProvider(Properties properties) {
-		return ConnectionProviderFactory.newConnectionProvider( properties, connectionProviderInjectionData );
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/InjectionSettingsFactory.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/InjectionSettingsFactory.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/InjectionSettingsFactory.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/InjectionSettingsFactory.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,31 @@
+//$Id$
+package org.hibernate.ejb;
+
+import java.util.Map;
+import java.util.Properties;
+
+import org.hibernate.cfg.SettingsFactory;
+import org.hibernate.connection.ConnectionProvider;
+import org.hibernate.connection.ConnectionProviderFactory;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class InjectionSettingsFactory extends SettingsFactory {
+	private Map connectionProviderInjectionData;
+
+	/**
+	 * Map<String,Object> where the key represents the javabean property in witch
+	 * Object will be injected
+	 *
+	 * @param connectionProviderInjectionData
+	 *
+	 */
+	public void setConnectionProviderInjectionData(Map connectionProviderInjectionData) {
+		this.connectionProviderInjectionData = connectionProviderInjectionData;
+	}
+
+	protected ConnectionProvider createConnectionProvider(Properties properties) {
+		return ConnectionProviderFactory.newConnectionProvider( properties, connectionProviderInjectionData );
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/QueryImpl.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/QueryImpl.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/QueryImpl.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,342 +0,0 @@
-//$Id$
-package org.hibernate.ejb;
-
-import java.util.Calendar;
-import java.util.Collection;
-import java.util.Date;
-import java.util.List;
-import java.util.HashSet;
-import java.util.Set;
-import javax.persistence.FlushModeType;
-import javax.persistence.NoResultException;
-import javax.persistence.NonUniqueResultException;
-import javax.persistence.Query;
-import javax.persistence.TemporalType;
-import static javax.persistence.TemporalType.*;
-import javax.persistence.TransactionRequiredException;
-
-import org.hibernate.CacheMode;
-import org.hibernate.FlushMode;
-import org.hibernate.HibernateException;
-import org.hibernate.QueryParameterException;
-import org.hibernate.TypeMismatchException;
-import org.hibernate.ejb.util.ConfigurationHelper;
-import org.hibernate.hql.QueryExecutionRequestException;
-
-/**
- * @author <a href="mailto:gavin at hibernate.org">Gavin King</a>
- * @author Emmanuel Bernard
- */
-public class QueryImpl implements Query, HibernateQuery {
-	private org.hibernate.Query query;
-	private HibernateEntityManagerImplementor em;
-	private Boolean isPositional = null;
-
-	public QueryImpl(org.hibernate.Query query, AbstractEntityManagerImpl em) {
-		this.query = query;
-		this.em = em;
-	}
-
-	public org.hibernate.Query getHibernateQuery() {
-		return query;
-	}
-
-	public int executeUpdate() {
-		try {
-			if ( ! em.isTransactionInProgress() ) {
-				em.throwPersistenceException( new TransactionRequiredException( "Executing an update/delete query" ) );
-				return 0;
-			}
-			return query.executeUpdate();
-		}
-		catch (QueryExecutionRequestException he) {
-			throw new IllegalStateException(he);
-		}
-		catch( TypeMismatchException e ) {
-			throw new IllegalArgumentException(e);
-		}
-		catch (HibernateException he) {
-			em.throwPersistenceException( he );
-			return 0;
-		}
-	}
-
-	public List getResultList() {
-		try {
-			return query.list();
-		}
-		catch (QueryExecutionRequestException he) {
-			throw new IllegalStateException(he);
-		}
-		catch( TypeMismatchException e ) {
-			throw new IllegalArgumentException(e);
-		}
-		catch (HibernateException he) {
-			em.throwPersistenceException( he );
-			return null;
-		}
-	}
-
-	public Object getSingleResult() {
-		try {
-			List result = query.list();
-			if ( result.size() == 0 ) {
-				em.throwPersistenceException( new NoResultException( "No entity found for query" ) );
-			}
-			else if ( result.size() > 1 ) {
-				Set uniqueResult = new HashSet(result);
-				if ( uniqueResult.size() > 1 ) {
-					em.throwPersistenceException( new NonUniqueResultException( "result returns " + uniqueResult.size() + " elements") );
-				}
-				else {
-					return uniqueResult.iterator().next();
-				}
-
-			}
-			else {
-				return result.get(0);
-			}
-			return null; //should never happen
-		}
-		catch (QueryExecutionRequestException he) {
-			throw new IllegalStateException(he);
-		}
-		catch( TypeMismatchException e ) {
-			throw new IllegalArgumentException(e);
-		}
-		catch (HibernateException he) {
-			em.throwPersistenceException( he );
-			return null;
-		}
-	}
-
-	public Query setMaxResults(int maxResult) {
-		if ( maxResult < 0 ) {
-			throw new IllegalArgumentException(
-					"Negative ("
-							+ maxResult
-							+ ") parameter passed in to setMaxResults"
-			);
-		}
-		query.setMaxResults( maxResult );
-		return this;
-	}
-
-	public Query setFirstResult(int firstResult) {
-		if ( firstResult < 0 ) {
-			throw new IllegalArgumentException(
-					"Negative ("
-							+ firstResult
-							+ ") parameter passed in to setFirstResult"
-			);
-		}
-		query.setFirstResult( firstResult );
-		return this;
-	}
-
-	public Query setHint(String hintName, Object value) {
-		try {
-			if ( "org.hibernate.timeout".equals( hintName ) ) {
-				query.setTimeout( (Integer) value );
-			}
-			else if ( "org.hibernate.comment".equals( hintName ) ) {
-				query.setComment( (String) value );
-			}
-			else if ( "org.hibernate.fetchSize".equals( hintName ) ) {
-				query.setFetchSize( (Integer) value );
-			}
-			else if ( "org.hibernate.cacheRegion".equals( hintName ) ) {
-				query.setCacheRegion( (String) value );
-			}
-			else if ( "org.hibernate.cacheable".equals( hintName ) ) {
-				query.setCacheable( (Boolean) value );
-			}
-			else if ( "org.hibernate.readOnly".equals( hintName ) ) {
-				query.setReadOnly( (Boolean) value );
-			}
-			else if ( "org.hibernate.cacheMode".equals( hintName ) ) {
-				query.setCacheMode( (CacheMode) value );
-			}
-			else if ( "org.hibernate.flushMode".equals( hintName ) ) {
-				query.setFlushMode( ConfigurationHelper.getFlushMode( value ) );
-			}
-			//TODO:
-			/*else if ( "org.hibernate.lockMode".equals( hintName ) ) {
-				query.setLockMode( alias, lockMode );
-			}*/
-		}
-		catch (ClassCastException e) {
-			throw new IllegalArgumentException( "Value for hint" );
-		}
-		return this;
-	}
-
-	public Query setParameter(String name, Object value) {
-		try {
-			if ( value instanceof Collection ) {
-				query.setParameterList( name, (Collection) value );
-			}
-			else {
-				query.setParameter( name, value );
-			}
-			return this;
-		}
-		catch (QueryParameterException e) {
-			throw new IllegalArgumentException( e );
-		}
-		catch (HibernateException he) {
-			em.throwPersistenceException( he );
-			return null;
-		}
-	}
-
-	public Query setParameter(String name, Date value, TemporalType temporalType) {
-		try {
-			if ( temporalType == DATE ) {
-				query.setDate( name, value );
-			}
-			else if ( temporalType == TIME ) {
-				query.setTime( name, value );
-			}
-			else if ( temporalType == TIMESTAMP ) {
-				query.setTimestamp( name, value );
-			}
-			return this;
-		}
-		catch (QueryParameterException e) {
-			throw new IllegalArgumentException( e );
-		}
-		catch (HibernateException he) {
-			em.throwPersistenceException( he );
-			return null;
-		}
-	}
-
-	public Query setParameter(String name, Calendar value, TemporalType temporalType) {
-		try {
-			if ( temporalType == DATE ) {
-				query.setCalendarDate( name, value );
-			}
-			else if ( temporalType == TIME ) {
-				throw new IllegalArgumentException( "not yet implemented" );
-			}
-			else if ( temporalType == TIMESTAMP ) {
-				query.setCalendar( name, value );
-			}
-			return this;
-		}
-		catch (QueryParameterException e) {
-			throw new IllegalArgumentException( e );
-		}
-		catch (HibernateException he) {
-			em.throwPersistenceException( he );
-			return null;
-		}
-	}
-
-	public Query setParameter(int position, Object value) {
-		try {
-			if ( isPositionalParameter() ) {
-				this.setParameter( Integer.toString( position ), value );
-			}
-			else {
-				query.setParameter( position - 1, value );
-			}
-			return this;
-		}
-		catch (QueryParameterException e) {
-			throw new IllegalArgumentException( e );
-		}
-		catch (HibernateException he) {
-			em.throwPersistenceException( he );
-			return null;
-		}
-	}
-
-	private boolean isPositionalParameter() {
-		if (isPositional == null) {
-			//compute it
-			String queryString = query.getQueryString();
-			int index = queryString.indexOf( '?' );
-			//there is a ? and the following char is a digit
-			if (index == -1) {
-				//no ?
-				isPositional = true;
-			}
-			else if ( index == queryString.length() - 1 ) {
-				// "... ?"
-				isPositional = false;
-			}
-			else {
-				isPositional = Character.isDigit( queryString.charAt( index + 1 ) );
-			}
-		}
-		return isPositional;
-	}
-
-	public Query setParameter(int position, Date value, TemporalType temporalType) {
-		try {
-			if ( isPositionalParameter() ) {
-				String name = Integer.toString( position );
-				this.setParameter( name, value, temporalType );
-			}
-			else {
-				if ( temporalType == DATE ) {
-					query.setDate( position - 1, value );
-				}
-				else if ( temporalType == TIME ) {
-					query.setTime( position - 1, value );
-				}
-				else if ( temporalType == TIMESTAMP ) {
-					query.setTimestamp( position - 1, value );
-				}
-			}
-			return this;
-		}
-		catch (QueryParameterException e) {
-			throw new IllegalArgumentException( e );
-		}
-		catch (HibernateException he) {
-			em.throwPersistenceException( he );
-			return null;
-		}
-	}
-
-	public Query setParameter(int position, Calendar value, TemporalType temporalType) {
-		try {
-			if ( isPositionalParameter() ) {
-				String name = Integer.toString( position );
-				this.setParameter( name, value, temporalType );
-			}
-			else {
-				if ( temporalType == DATE ) {
-					query.setCalendarDate( position - 1, value );
-				}
-				else if ( temporalType == TIME ) {
-					throw new IllegalArgumentException( "not yet implemented" );
-				}
-				else if ( temporalType == TIMESTAMP ) {
-					query.setCalendar( position - 1, value );
-				}
-			}
-			return this;
-		}
-		catch (QueryParameterException e) {
-			throw new IllegalArgumentException( e );
-		}
-		catch (HibernateException he) {
-			em.throwPersistenceException( he );
-			return null;
-		}
-	}
-
-	public Query setFlushMode(FlushModeType flushMode) {
-		if ( flushMode == FlushModeType.AUTO ) {
-			query.setFlushMode( FlushMode.AUTO );
-		}
-		else if ( flushMode == FlushModeType.COMMIT ) {
-			query.setFlushMode( FlushMode.COMMIT );
-		}
-		return this;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/QueryImpl.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/QueryImpl.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/QueryImpl.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/QueryImpl.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,342 @@
+//$Id$
+package org.hibernate.ejb;
+
+import java.util.Calendar;
+import java.util.Collection;
+import java.util.Date;
+import java.util.List;
+import java.util.HashSet;
+import java.util.Set;
+import javax.persistence.FlushModeType;
+import javax.persistence.NoResultException;
+import javax.persistence.NonUniqueResultException;
+import javax.persistence.Query;
+import javax.persistence.TemporalType;
+import static javax.persistence.TemporalType.*;
+import javax.persistence.TransactionRequiredException;
+
+import org.hibernate.CacheMode;
+import org.hibernate.FlushMode;
+import org.hibernate.HibernateException;
+import org.hibernate.QueryParameterException;
+import org.hibernate.TypeMismatchException;
+import org.hibernate.ejb.util.ConfigurationHelper;
+import org.hibernate.hql.QueryExecutionRequestException;
+
+/**
+ * @author <a href="mailto:gavin at hibernate.org">Gavin King</a>
+ * @author Emmanuel Bernard
+ */
+public class QueryImpl implements Query, HibernateQuery {
+	private org.hibernate.Query query;
+	private HibernateEntityManagerImplementor em;
+	private Boolean isPositional = null;
+
+	public QueryImpl(org.hibernate.Query query, AbstractEntityManagerImpl em) {
+		this.query = query;
+		this.em = em;
+	}
+
+	public org.hibernate.Query getHibernateQuery() {
+		return query;
+	}
+
+	public int executeUpdate() {
+		try {
+			if ( ! em.isTransactionInProgress() ) {
+				em.throwPersistenceException( new TransactionRequiredException( "Executing an update/delete query" ) );
+				return 0;
+			}
+			return query.executeUpdate();
+		}
+		catch (QueryExecutionRequestException he) {
+			throw new IllegalStateException(he);
+		}
+		catch( TypeMismatchException e ) {
+			throw new IllegalArgumentException(e);
+		}
+		catch (HibernateException he) {
+			em.throwPersistenceException( he );
+			return 0;
+		}
+	}
+
+	public List getResultList() {
+		try {
+			return query.list();
+		}
+		catch (QueryExecutionRequestException he) {
+			throw new IllegalStateException(he);
+		}
+		catch( TypeMismatchException e ) {
+			throw new IllegalArgumentException(e);
+		}
+		catch (HibernateException he) {
+			em.throwPersistenceException( he );
+			return null;
+		}
+	}
+
+	public Object getSingleResult() {
+		try {
+			List result = query.list();
+			if ( result.size() == 0 ) {
+				em.throwPersistenceException( new NoResultException( "No entity found for query" ) );
+			}
+			else if ( result.size() > 1 ) {
+				Set uniqueResult = new HashSet(result);
+				if ( uniqueResult.size() > 1 ) {
+					em.throwPersistenceException( new NonUniqueResultException( "result returns " + uniqueResult.size() + " elements") );
+				}
+				else {
+					return uniqueResult.iterator().next();
+				}
+
+			}
+			else {
+				return result.get(0);
+			}
+			return null; //should never happen
+		}
+		catch (QueryExecutionRequestException he) {
+			throw new IllegalStateException(he);
+		}
+		catch( TypeMismatchException e ) {
+			throw new IllegalArgumentException(e);
+		}
+		catch (HibernateException he) {
+			em.throwPersistenceException( he );
+			return null;
+		}
+	}
+
+	public Query setMaxResults(int maxResult) {
+		if ( maxResult < 0 ) {
+			throw new IllegalArgumentException(
+					"Negative ("
+							+ maxResult
+							+ ") parameter passed in to setMaxResults"
+			);
+		}
+		query.setMaxResults( maxResult );
+		return this;
+	}
+
+	public Query setFirstResult(int firstResult) {
+		if ( firstResult < 0 ) {
+			throw new IllegalArgumentException(
+					"Negative ("
+							+ firstResult
+							+ ") parameter passed in to setFirstResult"
+			);
+		}
+		query.setFirstResult( firstResult );
+		return this;
+	}
+
+	public Query setHint(String hintName, Object value) {
+		try {
+			if ( "org.hibernate.timeout".equals( hintName ) ) {
+				query.setTimeout( (Integer) value );
+			}
+			else if ( "org.hibernate.comment".equals( hintName ) ) {
+				query.setComment( (String) value );
+			}
+			else if ( "org.hibernate.fetchSize".equals( hintName ) ) {
+				query.setFetchSize( (Integer) value );
+			}
+			else if ( "org.hibernate.cacheRegion".equals( hintName ) ) {
+				query.setCacheRegion( (String) value );
+			}
+			else if ( "org.hibernate.cacheable".equals( hintName ) ) {
+				query.setCacheable( (Boolean) value );
+			}
+			else if ( "org.hibernate.readOnly".equals( hintName ) ) {
+				query.setReadOnly( (Boolean) value );
+			}
+			else if ( "org.hibernate.cacheMode".equals( hintName ) ) {
+				query.setCacheMode( (CacheMode) value );
+			}
+			else if ( "org.hibernate.flushMode".equals( hintName ) ) {
+				query.setFlushMode( ConfigurationHelper.getFlushMode( value ) );
+			}
+			//TODO:
+			/*else if ( "org.hibernate.lockMode".equals( hintName ) ) {
+				query.setLockMode( alias, lockMode );
+			}*/
+		}
+		catch (ClassCastException e) {
+			throw new IllegalArgumentException( "Value for hint" );
+		}
+		return this;
+	}
+
+	public Query setParameter(String name, Object value) {
+		try {
+			if ( value instanceof Collection ) {
+				query.setParameterList( name, (Collection) value );
+			}
+			else {
+				query.setParameter( name, value );
+			}
+			return this;
+		}
+		catch (QueryParameterException e) {
+			throw new IllegalArgumentException( e );
+		}
+		catch (HibernateException he) {
+			em.throwPersistenceException( he );
+			return null;
+		}
+	}
+
+	public Query setParameter(String name, Date value, TemporalType temporalType) {
+		try {
+			if ( temporalType == DATE ) {
+				query.setDate( name, value );
+			}
+			else if ( temporalType == TIME ) {
+				query.setTime( name, value );
+			}
+			else if ( temporalType == TIMESTAMP ) {
+				query.setTimestamp( name, value );
+			}
+			return this;
+		}
+		catch (QueryParameterException e) {
+			throw new IllegalArgumentException( e );
+		}
+		catch (HibernateException he) {
+			em.throwPersistenceException( he );
+			return null;
+		}
+	}
+
+	public Query setParameter(String name, Calendar value, TemporalType temporalType) {
+		try {
+			if ( temporalType == DATE ) {
+				query.setCalendarDate( name, value );
+			}
+			else if ( temporalType == TIME ) {
+				throw new IllegalArgumentException( "not yet implemented" );
+			}
+			else if ( temporalType == TIMESTAMP ) {
+				query.setCalendar( name, value );
+			}
+			return this;
+		}
+		catch (QueryParameterException e) {
+			throw new IllegalArgumentException( e );
+		}
+		catch (HibernateException he) {
+			em.throwPersistenceException( he );
+			return null;
+		}
+	}
+
+	public Query setParameter(int position, Object value) {
+		try {
+			if ( isPositionalParameter() ) {
+				this.setParameter( Integer.toString( position ), value );
+			}
+			else {
+				query.setParameter( position - 1, value );
+			}
+			return this;
+		}
+		catch (QueryParameterException e) {
+			throw new IllegalArgumentException( e );
+		}
+		catch (HibernateException he) {
+			em.throwPersistenceException( he );
+			return null;
+		}
+	}
+
+	private boolean isPositionalParameter() {
+		if (isPositional == null) {
+			//compute it
+			String queryString = query.getQueryString();
+			int index = queryString.indexOf( '?' );
+			//there is a ? and the following char is a digit
+			if (index == -1) {
+				//no ?
+				isPositional = true;
+			}
+			else if ( index == queryString.length() - 1 ) {
+				// "... ?"
+				isPositional = false;
+			}
+			else {
+				isPositional = Character.isDigit( queryString.charAt( index + 1 ) );
+			}
+		}
+		return isPositional;
+	}
+
+	public Query setParameter(int position, Date value, TemporalType temporalType) {
+		try {
+			if ( isPositionalParameter() ) {
+				String name = Integer.toString( position );
+				this.setParameter( name, value, temporalType );
+			}
+			else {
+				if ( temporalType == DATE ) {
+					query.setDate( position - 1, value );
+				}
+				else if ( temporalType == TIME ) {
+					query.setTime( position - 1, value );
+				}
+				else if ( temporalType == TIMESTAMP ) {
+					query.setTimestamp( position - 1, value );
+				}
+			}
+			return this;
+		}
+		catch (QueryParameterException e) {
+			throw new IllegalArgumentException( e );
+		}
+		catch (HibernateException he) {
+			em.throwPersistenceException( he );
+			return null;
+		}
+	}
+
+	public Query setParameter(int position, Calendar value, TemporalType temporalType) {
+		try {
+			if ( isPositionalParameter() ) {
+				String name = Integer.toString( position );
+				this.setParameter( name, value, temporalType );
+			}
+			else {
+				if ( temporalType == DATE ) {
+					query.setCalendarDate( position - 1, value );
+				}
+				else if ( temporalType == TIME ) {
+					throw new IllegalArgumentException( "not yet implemented" );
+				}
+				else if ( temporalType == TIMESTAMP ) {
+					query.setCalendar( position - 1, value );
+				}
+			}
+			return this;
+		}
+		catch (QueryParameterException e) {
+			throw new IllegalArgumentException( e );
+		}
+		catch (HibernateException he) {
+			em.throwPersistenceException( he );
+			return null;
+		}
+	}
+
+	public Query setFlushMode(FlushModeType flushMode) {
+		if ( flushMode == FlushModeType.AUTO ) {
+			query.setFlushMode( FlushMode.AUTO );
+		}
+		else if ( flushMode == FlushModeType.COMMIT ) {
+			query.setFlushMode( FlushMode.COMMIT );
+		}
+		return this;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/TransactionImpl.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/TransactionImpl.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/TransactionImpl.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,123 +0,0 @@
-//$Id$
-package org.hibernate.ejb;
-
-import javax.persistence.EntityTransaction;
-import javax.persistence.PersistenceException;
-import javax.persistence.RollbackException;
-
-import org.hibernate.HibernateException;
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-import org.hibernate.StaleStateException;
-
-/**
- * @author Gavin King
- * @author Emmanuel Bernard
- */
-public class TransactionImpl implements EntityTransaction {
-
-	private HibernateEntityManagerImplementor entityManager;
-	private Transaction tx;
-	private boolean rollbackOnly;
-
-	public TransactionImpl(AbstractEntityManagerImpl entityManager) {
-		this.entityManager = entityManager;
-	}
-
-	private Session getSession() {
-		return entityManager.getSession();
-	}
-
-	public void begin() {
-		try {
-			rollbackOnly = false;
-			if ( tx != null && tx.isActive() ) {
-				throw new IllegalStateException( "Transaction already active" );
-			}
-			//entityManager.adjustFlushMode();
-			tx = getSession().beginTransaction();
-		}
-		catch (HibernateException he) {
-			entityManager.throwPersistenceException( he );
-		}
-	}
-
-	public void commit() {
-		if ( tx == null || !tx.isActive() ) {
-			throw new IllegalStateException( "Transaction not active" );
-		}
-		if ( rollbackOnly ) {
-			tx.rollback();
-			throw new RollbackException( "Transaction marked as rollbackOnly" );
-		}
-		try {
-			tx.commit();
-		}
-		catch (Exception e) {
-			Exception wrappedException;
-			if (e instanceof StaleStateException) {
-				wrappedException = entityManager.wrapStaleStateException( (StaleStateException) e );
-			}
-			else {
-				wrappedException = e;
-			}
-			try {
-				//as per the spec we should rollback if commit fails
-				tx.rollback();
-			}
-			catch (Exception re) {
-				//swallow
-			}
-			throw new RollbackException( "Error while commiting the transaction", wrappedException );
-		}
-		finally {
-			rollbackOnly = false;
-		}
-		//if closed and we commit, the mode should have been adjusted already
-		//if ( entityManager.isOpen() ) entityManager.adjustFlushMode();
-	}
-
-	public void rollback() {
-		if ( tx == null || !tx.isActive() ) {
-			throw new IllegalStateException( "Transaction not active" );
-		}
-		try {
-			tx.rollback();
-		}
-		catch (Exception e) {
-			throw new PersistenceException( "unexpected error when rollbacking", e );
-		}
-		finally {
-			try {
-				if (entityManager !=  null) {
-					Session session = getSession();
-					if ( session != null && session.isOpen() ) session.clear();
-				}
-			}
-			catch (Throwable t) {
-				//we don't really care here since it's only for safety purpose
-			}
-			rollbackOnly = false;
-		}
-	}
-
-	public void setRollbackOnly() {
-		if ( ! isActive() ) throw new IllegalStateException( "Transaction not active" );
-		this.rollbackOnly = true;
-	}
-
-	public boolean getRollbackOnly() {
-		if ( ! isActive() ) throw new IllegalStateException( "Transaction not active" );
-		return rollbackOnly;
-	}
-
-	public boolean isActive() {
-		try {
-			return tx != null && tx.isActive();
-		}
-		catch (RuntimeException e) {
-			throw new PersistenceException( "unexpected error when checking transaction status", e );
-		}
-	}
-
-}

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/TransactionImpl.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/TransactionImpl.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/TransactionImpl.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/TransactionImpl.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,123 @@
+//$Id$
+package org.hibernate.ejb;
+
+import javax.persistence.EntityTransaction;
+import javax.persistence.PersistenceException;
+import javax.persistence.RollbackException;
+
+import org.hibernate.HibernateException;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.StaleStateException;
+
+/**
+ * @author Gavin King
+ * @author Emmanuel Bernard
+ */
+public class TransactionImpl implements EntityTransaction {
+
+	private HibernateEntityManagerImplementor entityManager;
+	private Transaction tx;
+	private boolean rollbackOnly;
+
+	public TransactionImpl(AbstractEntityManagerImpl entityManager) {
+		this.entityManager = entityManager;
+	}
+
+	private Session getSession() {
+		return entityManager.getSession();
+	}
+
+	public void begin() {
+		try {
+			rollbackOnly = false;
+			if ( tx != null && tx.isActive() ) {
+				throw new IllegalStateException( "Transaction already active" );
+			}
+			//entityManager.adjustFlushMode();
+			tx = getSession().beginTransaction();
+		}
+		catch (HibernateException he) {
+			entityManager.throwPersistenceException( he );
+		}
+	}
+
+	public void commit() {
+		if ( tx == null || !tx.isActive() ) {
+			throw new IllegalStateException( "Transaction not active" );
+		}
+		if ( rollbackOnly ) {
+			tx.rollback();
+			throw new RollbackException( "Transaction marked as rollbackOnly" );
+		}
+		try {
+			tx.commit();
+		}
+		catch (Exception e) {
+			Exception wrappedException;
+			if (e instanceof StaleStateException) {
+				wrappedException = entityManager.wrapStaleStateException( (StaleStateException) e );
+			}
+			else {
+				wrappedException = e;
+			}
+			try {
+				//as per the spec we should rollback if commit fails
+				tx.rollback();
+			}
+			catch (Exception re) {
+				//swallow
+			}
+			throw new RollbackException( "Error while commiting the transaction", wrappedException );
+		}
+		finally {
+			rollbackOnly = false;
+		}
+		//if closed and we commit, the mode should have been adjusted already
+		//if ( entityManager.isOpen() ) entityManager.adjustFlushMode();
+	}
+
+	public void rollback() {
+		if ( tx == null || !tx.isActive() ) {
+			throw new IllegalStateException( "Transaction not active" );
+		}
+		try {
+			tx.rollback();
+		}
+		catch (Exception e) {
+			throw new PersistenceException( "unexpected error when rollbacking", e );
+		}
+		finally {
+			try {
+				if (entityManager !=  null) {
+					Session session = getSession();
+					if ( session != null && session.isOpen() ) session.clear();
+				}
+			}
+			catch (Throwable t) {
+				//we don't really care here since it's only for safety purpose
+			}
+			rollbackOnly = false;
+		}
+	}
+
+	public void setRollbackOnly() {
+		if ( ! isActive() ) throw new IllegalStateException( "Transaction not active" );
+		this.rollbackOnly = true;
+	}
+
+	public boolean getRollbackOnly() {
+		if ( ! isActive() ) throw new IllegalStateException( "Transaction not active" );
+		return rollbackOnly;
+	}
+
+	public boolean isActive() {
+		try {
+			return tx != null && tx.isActive();
+		}
+		catch (RuntimeException e) {
+			throw new PersistenceException( "unexpected error when checking transaction status", e );
+		}
+	}
+
+}

Deleted: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/Version.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/Version.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/Version.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,20 +0,0 @@
-//$Id: $
-package org.hibernate.ejb;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * @author Emmanuel Bernard
- */
-public class Version {
-	public static final String VERSION = "3.2.1.GA";
-	private static Log log = LogFactory.getLog( Version.class );
-
-	static {
-		log.info( "Hibernate EntityManager " + VERSION );
-	}
-
-	public static void touch() {
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/Version.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/Version.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/Version.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/Version.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,20 @@
+//$Id: $
+package org.hibernate.ejb;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Version {
+	public static final String VERSION = "3.2.1.GA";
+	private static Log log = LogFactory.getLog( Version.class );
+
+	static {
+		log.info( "Hibernate EntityManager " + VERSION );
+	}
+
+	public static void touch() {
+	}
+}

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/connection (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/connection)

Deleted: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/connection/InjectedDataSourceConnectionProvider.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/connection/InjectedDataSourceConnectionProvider.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/connection/InjectedDataSourceConnectionProvider.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,50 +0,0 @@
-//$Id$
-package org.hibernate.ejb.connection;
-
-import java.util.Properties;
-import java.sql.Connection;
-import java.sql.SQLException;
-import javax.sql.DataSource;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.hibernate.HibernateException;
-import org.hibernate.cfg.Environment;
-import org.hibernate.connection.DatasourceConnectionProvider;
-
-/**
- * A connection provider that uses an injected <tt>DataSource</tt>.
- * Setters has to be called before configure()
- *
- * @author Emmanuel Bernard
- * @see org.hibernate.connection.ConnectionProvider
- */
-public class InjectedDataSourceConnectionProvider extends DatasourceConnectionProvider {
-	//TODO make datasource connection provider properties protected in 3.3
-	private String user;
-	private String pass;
-
-	private static final Log log = LogFactory.getLog( InjectedDataSourceConnectionProvider.class );
-
-	public void setDataSource(DataSource ds) {
-		super.setDataSource( ds );
-	}
-
-	public void configure(Properties props) throws HibernateException {
-		user = props.getProperty( Environment.USER );
-		pass = props.getProperty( Environment.PASS );
-
-		if ( getDataSource() == null ) throw new HibernateException( "No datasource provided" );
-		log.info( "Using provided datasource" );
-	}
-
-	@Override
-	public Connection getConnection() throws SQLException {
-		if (user != null || pass != null) {
-			return getDataSource().getConnection(user, pass);
-		}
-		else {
-			return getDataSource().getConnection();
-		}
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/connection/InjectedDataSourceConnectionProvider.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/connection/InjectedDataSourceConnectionProvider.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/connection/InjectedDataSourceConnectionProvider.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/connection/InjectedDataSourceConnectionProvider.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,50 @@
+//$Id$
+package org.hibernate.ejb.connection;
+
+import java.util.Properties;
+import java.sql.Connection;
+import java.sql.SQLException;
+import javax.sql.DataSource;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.hibernate.HibernateException;
+import org.hibernate.cfg.Environment;
+import org.hibernate.connection.DatasourceConnectionProvider;
+
+/**
+ * A connection provider that uses an injected <tt>DataSource</tt>.
+ * Setters has to be called before configure()
+ *
+ * @author Emmanuel Bernard
+ * @see org.hibernate.connection.ConnectionProvider
+ */
+public class InjectedDataSourceConnectionProvider extends DatasourceConnectionProvider {
+	//TODO make datasource connection provider properties protected in 3.3
+	private String user;
+	private String pass;
+
+	private static final Log log = LogFactory.getLog( InjectedDataSourceConnectionProvider.class );
+
+	public void setDataSource(DataSource ds) {
+		super.setDataSource( ds );
+	}
+
+	public void configure(Properties props) throws HibernateException {
+		user = props.getProperty( Environment.USER );
+		pass = props.getProperty( Environment.PASS );
+
+		if ( getDataSource() == null ) throw new HibernateException( "No datasource provided" );
+		log.info( "Using provided datasource" );
+	}
+
+	@Override
+	public Connection getConnection() throws SQLException {
+		if (user != null || pass != null) {
+			return getDataSource().getConnection(user, pass);
+		}
+		else {
+			return getDataSource().getConnection();
+		}
+	}
+}

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event)

Deleted: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/BeanCallback.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/BeanCallback.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/BeanCallback.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,40 +0,0 @@
-/*
- * JBoss, the OpenSource EJB server
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package org.hibernate.ejb.event;
-
-import java.lang.reflect.Method;
-import java.lang.reflect.InvocationTargetException;
-
-/**
- * @author <a href="mailto:kabir.khan at jboss.org">Kabir Khan</a>
- * @version $Revision$
- */
-public class BeanCallback extends Callback {
-	public BeanCallback(Method callbackMethod) {
-		super( callbackMethod );
-	}
-
-	public void invoke(Object bean) {
-		try {
-			callbackMethod.invoke( bean, new Object[0] );
-		}
-		catch (InvocationTargetException e) {
-			//keep runtime exceptions as is
-			if ( e.getTargetException() instanceof RuntimeException ) {
-				throw (RuntimeException) e.getTargetException();
-			}
-			else {
-				throw new RuntimeException( e.getTargetException() );
-			}
-		}
-		catch (Exception e) {
-			throw new RuntimeException( e );
-		}
-	}
-
-
-}

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/BeanCallback.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/BeanCallback.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/BeanCallback.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/BeanCallback.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,40 @@
+/*
+ * JBoss, the OpenSource EJB server
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.hibernate.ejb.event;
+
+import java.lang.reflect.Method;
+import java.lang.reflect.InvocationTargetException;
+
+/**
+ * @author <a href="mailto:kabir.khan at jboss.org">Kabir Khan</a>
+ * @version $Revision$
+ */
+public class BeanCallback extends Callback {
+	public BeanCallback(Method callbackMethod) {
+		super( callbackMethod );
+	}
+
+	public void invoke(Object bean) {
+		try {
+			callbackMethod.invoke( bean, new Object[0] );
+		}
+		catch (InvocationTargetException e) {
+			//keep runtime exceptions as is
+			if ( e.getTargetException() instanceof RuntimeException ) {
+				throw (RuntimeException) e.getTargetException();
+			}
+			else {
+				throw new RuntimeException( e.getTargetException() );
+			}
+		}
+		catch (Exception e) {
+			throw new RuntimeException( e );
+		}
+	}
+
+
+}

Deleted: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/Callback.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/Callback.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/Callback.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,74 +0,0 @@
-/*
- * JBoss, the OpenSource EJB server
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package org.hibernate.ejb.event;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.io.Serializable;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.StringTokenizer;
-
-import org.hibernate.util.ReflectHelper;
-
-/**
- * @author <a href="mailto:kabir.khan at jboss.org">Kabir Khan</a>
- * @version $Revision$
- */
-public abstract class Callback implements Serializable {
-	transient protected Method callbackMethod;
-
-	public Callback(Method callbackMethod) {
-		this.callbackMethod = callbackMethod;
-	}
-
-	public Method getCallbackMethod() {
-		return callbackMethod;
-	}
-
-	public abstract void invoke(Object bean);
-
-	private void writeObject(ObjectOutputStream oos) throws IOException {
-		oos.defaultWriteObject();
-		oos.writeObject( callbackMethod.toGenericString() );
-	}
-
-	private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
-		ois.defaultReadObject();
-		String signature = (String) ois.readObject();
-		StringTokenizer st = new StringTokenizer( signature, " ", false );
-		String usefulSignature = null;
-		while ( st.hasMoreElements() ) usefulSignature = (String) st.nextElement();
-		int parenthesis = usefulSignature.indexOf( "(" );
-		String methodAndClass = usefulSignature.substring( 0, parenthesis );
-		int lastDot = methodAndClass.lastIndexOf( "." );
-		String clazzName = methodAndClass.substring( 0, lastDot );
-		Class callbackClass = ReflectHelper.classForName( clazzName, this.getClass() );
-		String parametersString = usefulSignature.substring( parenthesis + 1, usefulSignature.length() - 1 );
-		st = new StringTokenizer( parametersString, ", ", false );
-		List<Class> parameters = new ArrayList<Class>();
-		while ( st.hasMoreElements() ) {
-			String parameter = (String) st.nextElement();
-			parameters.add( ReflectHelper.classForName( parameter, this.getClass() ) );
-		}
-		String methodName = methodAndClass.substring( lastDot + 1, methodAndClass.length() );
-		try {
-			callbackMethod = callbackClass.getDeclaredMethod(
-					methodName,
-					parameters.toArray( new Class[ parameters.size() ] )
-			);
-			if ( ! callbackMethod.isAccessible() ) {
-				callbackMethod.setAccessible( true );
-			}
-		}
-		catch (NoSuchMethodException e) {
-			throw new IOException( "Unable to get EJB3 callback method: " + signature + ", cause: " + e );
-		}
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/Callback.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/Callback.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/Callback.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/Callback.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,74 @@
+/*
+ * JBoss, the OpenSource EJB server
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.hibernate.ejb.event;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.StringTokenizer;
+
+import org.hibernate.util.ReflectHelper;
+
+/**
+ * @author <a href="mailto:kabir.khan at jboss.org">Kabir Khan</a>
+ * @version $Revision$
+ */
+public abstract class Callback implements Serializable {
+	transient protected Method callbackMethod;
+
+	public Callback(Method callbackMethod) {
+		this.callbackMethod = callbackMethod;
+	}
+
+	public Method getCallbackMethod() {
+		return callbackMethod;
+	}
+
+	public abstract void invoke(Object bean);
+
+	private void writeObject(ObjectOutputStream oos) throws IOException {
+		oos.defaultWriteObject();
+		oos.writeObject( callbackMethod.toGenericString() );
+	}
+
+	private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
+		ois.defaultReadObject();
+		String signature = (String) ois.readObject();
+		StringTokenizer st = new StringTokenizer( signature, " ", false );
+		String usefulSignature = null;
+		while ( st.hasMoreElements() ) usefulSignature = (String) st.nextElement();
+		int parenthesis = usefulSignature.indexOf( "(" );
+		String methodAndClass = usefulSignature.substring( 0, parenthesis );
+		int lastDot = methodAndClass.lastIndexOf( "." );
+		String clazzName = methodAndClass.substring( 0, lastDot );
+		Class callbackClass = ReflectHelper.classForName( clazzName, this.getClass() );
+		String parametersString = usefulSignature.substring( parenthesis + 1, usefulSignature.length() - 1 );
+		st = new StringTokenizer( parametersString, ", ", false );
+		List<Class> parameters = new ArrayList<Class>();
+		while ( st.hasMoreElements() ) {
+			String parameter = (String) st.nextElement();
+			parameters.add( ReflectHelper.classForName( parameter, this.getClass() ) );
+		}
+		String methodName = methodAndClass.substring( lastDot + 1, methodAndClass.length() );
+		try {
+			callbackMethod = callbackClass.getDeclaredMethod(
+					methodName,
+					parameters.toArray( new Class[ parameters.size() ] )
+			);
+			if ( ! callbackMethod.isAccessible() ) {
+				callbackMethod.setAccessible( true );
+			}
+		}
+		catch (NoSuchMethodException e) {
+			throw new IOException( "Unable to get EJB3 callback method: " + signature + ", cause: " + e );
+		}
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/CallbackHandlerConsumer.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/CallbackHandlerConsumer.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/CallbackHandlerConsumer.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,9 +0,0 @@
-//$Id$
-package org.hibernate.ejb.event;
-
-/**
- * @author Emmanuel Bernard
- */
-public interface CallbackHandlerConsumer {
-	void setCallbackHandler(EntityCallbackHandler callbackHandler);
-}

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/CallbackHandlerConsumer.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/CallbackHandlerConsumer.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/CallbackHandlerConsumer.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/CallbackHandlerConsumer.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,9 @@
+//$Id$
+package org.hibernate.ejb.event;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public interface CallbackHandlerConsumer {
+	void setCallbackHandler(EntityCallbackHandler callbackHandler);
+}

Deleted: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/CallbackResolver.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/CallbackResolver.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/CallbackResolver.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,203 +0,0 @@
-/*
- * JBoss, the OpenSource EJB server
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package org.hibernate.ejb.event;
-
-import java.lang.annotation.Annotation;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Target;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.List;
-import javax.persistence.Entity;
-import javax.persistence.EntityListeners;
-import javax.persistence.ExcludeDefaultListeners;
-import javax.persistence.ExcludeSuperclassListeners;
-import javax.persistence.MappedSuperclass;
-import javax.persistence.PersistenceException;
-
-import org.hibernate.annotations.common.reflection.ReflectionManager;
-import org.hibernate.annotations.common.reflection.XClass;
-import org.hibernate.annotations.common.reflection.XMethod;
-
-/**
- * @author <a href="mailto:kabir.khan at jboss.org">Kabir Khan</a>
- * @version $Revision$
- */
-public final class CallbackResolver {
-	private static boolean useAnnotationAnnotatedByListener;
-
-	static {
-		//check whether reading annotations of annotations is useful or not
-		useAnnotationAnnotatedByListener = false;
-		Target target = (Target) EntityListeners.class.getAnnotation( Target.class );
-		if ( target != null ) {
-			for ( ElementType type : target.value() ) {
-				if ( type.equals( ElementType.ANNOTATION_TYPE ) ) useAnnotationAnnotatedByListener = true;
-			}
-		}
-	}
-
-	private CallbackResolver() {
-	}
-
-	public static Callback[] resolveCallback(XClass beanClass, Class annotation, ReflectionManager reflectionManager) {
-		List<Callback> callbacks = new ArrayList<Callback>();
-		List<String> callbacksMethodNames = new ArrayList<String>(); //used to track overriden methods
-		List<Class> orderedListeners = new ArrayList<Class>();
-		XClass currentClazz = beanClass;
-		boolean stopListeners = false;
-		boolean stopDefaultListeners = false;
-		do {
-			Callback callback = null;
-			List<XMethod> methods = currentClazz.getDeclaredMethods();
-			final int size = methods.size();
-			for ( int i = 0; i < size ; i++ ) {
-				final XMethod xMethod = methods.get( i );
-				if ( xMethod.isAnnotationPresent( annotation ) ) {
-					Method method = reflectionManager.toMethod( xMethod );
-					final String methodName = method.getName();
-					if ( ! callbacksMethodNames.contains( methodName ) ) {
-						//overriden method, remove the superclass overriden method
-						if ( callback == null ) {
-							callback = new BeanCallback( method );
-							Class returnType = method.getReturnType();
-							Class[] args = method.getParameterTypes();
-							if ( returnType != Void.TYPE || args.length != 0 ) {
-								throw new RuntimeException(
-										"Callback methods annotated on the bean class must return void and take no arguments: " + annotation
-												.getName() + " - " + xMethod
-								);
-							}
-							if ( ! method.isAccessible() ) {
-								method.setAccessible( true );
-							}
-							callbacks.add( 0, callback ); //superclass first
-							callbacksMethodNames.add( 0, methodName );
-						}
-						else {
-							throw new PersistenceException(
-									"You can only annotate one callback method with "
-											+ annotation.getName() + " in bean class: " + beanClass.getName()
-							);
-						}
-					}
-				}
-			}
-			if ( !stopListeners ) {
-				getListeners( currentClazz, orderedListeners );
-				stopListeners = currentClazz.isAnnotationPresent( ExcludeSuperclassListeners.class );
-				stopDefaultListeners = currentClazz.isAnnotationPresent( ExcludeDefaultListeners.class );
-			}
-
-			do {
-				currentClazz = currentClazz.getSuperclass();
-			}
-			while ( currentClazz != null
-					&& ! ( currentClazz.isAnnotationPresent( Entity.class )
-					|| currentClazz.isAnnotationPresent( MappedSuperclass.class ) )
-					);
-		}
-		while ( currentClazz != null );
-
-		//handle default listeners
-		if ( ! stopDefaultListeners ) {
-			List<Class> defaultListeners = (List<Class>) reflectionManager.getDefaults().get( EntityListeners.class );
-
-			if ( defaultListeners != null ) {
-				int defaultListenerSize = defaultListeners.size();
-				for ( int i = defaultListenerSize - 1; i >= 0 ; i-- ) {
-					orderedListeners.add( defaultListeners.get( i ) );
-				}
-			}
-		}
-
-		for ( Class listener : orderedListeners ) {
-			Callback callback = null;
-			if ( listener != null ) {
-				XClass xListener = reflectionManager.toXClass( listener );
-				callbacksMethodNames = new ArrayList<String>();
-				do {
-					List<XMethod> methods = xListener.getDeclaredMethods();
-					final int size = methods.size();
-					for ( int i = 0; i < size ; i++ ) {
-						final XMethod xMethod = methods.get( i );
-						if ( xMethod.isAnnotationPresent( annotation ) ) {
-							final Method method = reflectionManager.toMethod( xMethod );
-							final String methodName = method.getName();
-							if ( ! callbacksMethodNames.contains( methodName ) ) {
-								//overriden method, remove the superclass overriden method
-								if ( callback == null ) {
-									try {
-										callback = new ListenerCallback( method, listener.newInstance() );
-									}
-									catch (IllegalAccessException e) {
-										throw new PersistenceException(
-												"Unable to create instance of " + listener.getName()
-														+ " as a listener of beanClass", e
-										);
-									}
-									catch (InstantiationException e) {
-										throw new PersistenceException(
-												"Unable to create instance of " + listener.getName()
-														+ " as a listener of beanClass", e
-										);
-									}
-									Class returnType = method.getReturnType();
-									Class[] args = method.getParameterTypes();
-									if ( returnType != Void.TYPE || args.length != 1 ) {
-										throw new PersistenceException(
-												"Callback methods annotated in a listener bean class must return void and take one argument: " + annotation
-														.getName() + " - " + method
-										);
-									}
-									if ( ! method.isAccessible() ) {
-										method.setAccessible( true );
-									}
-									callbacks.add( 0, callback ); // listeners first
-								}
-								else {
-									throw new PersistenceException(
-											"You can only annotate one callback method with "
-													+ annotation.getName() + " in bean class: " + beanClass.getName() + " and callback listener: "
-													+ listener.getName()
-									);
-								}
-							}
-						}
-					}
-					xListener = null;  //xListener.getSuperclass();
-				}
-				while ( xListener != null );
-			}
-		}
-		return callbacks.toArray( new Callback[ callbacks.size() ] );
-	}
-
-	private static void getListeners(XClass currentClazz, List<Class> orderedListeners) {
-		EntityListeners entityListeners = (EntityListeners) currentClazz.getAnnotation( EntityListeners.class );
-		if ( entityListeners != null ) {
-			Class[] classes = entityListeners.value();
-			int size = classes.length;
-			for ( int index = size - 1; index >= 0 ; index-- ) {
-				orderedListeners.add( classes[index] );
-			}
-		}
-		if ( useAnnotationAnnotatedByListener ) {
-			Annotation[] annotations = currentClazz.getAnnotations();
-			for ( Annotation annot : annotations ) {
-				entityListeners = annot.getClass().getAnnotation( EntityListeners.class );
-				if ( entityListeners != null ) {
-					Class[] classes = entityListeners.value();
-					int size = classes.length;
-					for ( int index = size - 1; index >= 0 ; index-- ) {
-						orderedListeners.add( classes[index] );
-					}
-				}
-			}
-		}
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/CallbackResolver.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/CallbackResolver.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/CallbackResolver.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/CallbackResolver.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,203 @@
+/*
+ * JBoss, the OpenSource EJB server
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.hibernate.ejb.event;
+
+import java.lang.annotation.Annotation;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Target;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
+import javax.persistence.Entity;
+import javax.persistence.EntityListeners;
+import javax.persistence.ExcludeDefaultListeners;
+import javax.persistence.ExcludeSuperclassListeners;
+import javax.persistence.MappedSuperclass;
+import javax.persistence.PersistenceException;
+
+import org.hibernate.annotations.common.reflection.ReflectionManager;
+import org.hibernate.annotations.common.reflection.XClass;
+import org.hibernate.annotations.common.reflection.XMethod;
+
+/**
+ * @author <a href="mailto:kabir.khan at jboss.org">Kabir Khan</a>
+ * @version $Revision$
+ */
+public final class CallbackResolver {
+	private static boolean useAnnotationAnnotatedByListener;
+
+	static {
+		//check whether reading annotations of annotations is useful or not
+		useAnnotationAnnotatedByListener = false;
+		Target target = (Target) EntityListeners.class.getAnnotation( Target.class );
+		if ( target != null ) {
+			for ( ElementType type : target.value() ) {
+				if ( type.equals( ElementType.ANNOTATION_TYPE ) ) useAnnotationAnnotatedByListener = true;
+			}
+		}
+	}
+
+	private CallbackResolver() {
+	}
+
+	public static Callback[] resolveCallback(XClass beanClass, Class annotation, ReflectionManager reflectionManager) {
+		List<Callback> callbacks = new ArrayList<Callback>();
+		List<String> callbacksMethodNames = new ArrayList<String>(); //used to track overriden methods
+		List<Class> orderedListeners = new ArrayList<Class>();
+		XClass currentClazz = beanClass;
+		boolean stopListeners = false;
+		boolean stopDefaultListeners = false;
+		do {
+			Callback callback = null;
+			List<XMethod> methods = currentClazz.getDeclaredMethods();
+			final int size = methods.size();
+			for ( int i = 0; i < size ; i++ ) {
+				final XMethod xMethod = methods.get( i );
+				if ( xMethod.isAnnotationPresent( annotation ) ) {
+					Method method = reflectionManager.toMethod( xMethod );
+					final String methodName = method.getName();
+					if ( ! callbacksMethodNames.contains( methodName ) ) {
+						//overriden method, remove the superclass overriden method
+						if ( callback == null ) {
+							callback = new BeanCallback( method );
+							Class returnType = method.getReturnType();
+							Class[] args = method.getParameterTypes();
+							if ( returnType != Void.TYPE || args.length != 0 ) {
+								throw new RuntimeException(
+										"Callback methods annotated on the bean class must return void and take no arguments: " + annotation
+												.getName() + " - " + xMethod
+								);
+							}
+							if ( ! method.isAccessible() ) {
+								method.setAccessible( true );
+							}
+							callbacks.add( 0, callback ); //superclass first
+							callbacksMethodNames.add( 0, methodName );
+						}
+						else {
+							throw new PersistenceException(
+									"You can only annotate one callback method with "
+											+ annotation.getName() + " in bean class: " + beanClass.getName()
+							);
+						}
+					}
+				}
+			}
+			if ( !stopListeners ) {
+				getListeners( currentClazz, orderedListeners );
+				stopListeners = currentClazz.isAnnotationPresent( ExcludeSuperclassListeners.class );
+				stopDefaultListeners = currentClazz.isAnnotationPresent( ExcludeDefaultListeners.class );
+			}
+
+			do {
+				currentClazz = currentClazz.getSuperclass();
+			}
+			while ( currentClazz != null
+					&& ! ( currentClazz.isAnnotationPresent( Entity.class )
+					|| currentClazz.isAnnotationPresent( MappedSuperclass.class ) )
+					);
+		}
+		while ( currentClazz != null );
+
+		//handle default listeners
+		if ( ! stopDefaultListeners ) {
+			List<Class> defaultListeners = (List<Class>) reflectionManager.getDefaults().get( EntityListeners.class );
+
+			if ( defaultListeners != null ) {
+				int defaultListenerSize = defaultListeners.size();
+				for ( int i = defaultListenerSize - 1; i >= 0 ; i-- ) {
+					orderedListeners.add( defaultListeners.get( i ) );
+				}
+			}
+		}
+
+		for ( Class listener : orderedListeners ) {
+			Callback callback = null;
+			if ( listener != null ) {
+				XClass xListener = reflectionManager.toXClass( listener );
+				callbacksMethodNames = new ArrayList<String>();
+				do {
+					List<XMethod> methods = xListener.getDeclaredMethods();
+					final int size = methods.size();
+					for ( int i = 0; i < size ; i++ ) {
+						final XMethod xMethod = methods.get( i );
+						if ( xMethod.isAnnotationPresent( annotation ) ) {
+							final Method method = reflectionManager.toMethod( xMethod );
+							final String methodName = method.getName();
+							if ( ! callbacksMethodNames.contains( methodName ) ) {
+								//overriden method, remove the superclass overriden method
+								if ( callback == null ) {
+									try {
+										callback = new ListenerCallback( method, listener.newInstance() );
+									}
+									catch (IllegalAccessException e) {
+										throw new PersistenceException(
+												"Unable to create instance of " + listener.getName()
+														+ " as a listener of beanClass", e
+										);
+									}
+									catch (InstantiationException e) {
+										throw new PersistenceException(
+												"Unable to create instance of " + listener.getName()
+														+ " as a listener of beanClass", e
+										);
+									}
+									Class returnType = method.getReturnType();
+									Class[] args = method.getParameterTypes();
+									if ( returnType != Void.TYPE || args.length != 1 ) {
+										throw new PersistenceException(
+												"Callback methods annotated in a listener bean class must return void and take one argument: " + annotation
+														.getName() + " - " + method
+										);
+									}
+									if ( ! method.isAccessible() ) {
+										method.setAccessible( true );
+									}
+									callbacks.add( 0, callback ); // listeners first
+								}
+								else {
+									throw new PersistenceException(
+											"You can only annotate one callback method with "
+													+ annotation.getName() + " in bean class: " + beanClass.getName() + " and callback listener: "
+													+ listener.getName()
+									);
+								}
+							}
+						}
+					}
+					xListener = null;  //xListener.getSuperclass();
+				}
+				while ( xListener != null );
+			}
+		}
+		return callbacks.toArray( new Callback[ callbacks.size() ] );
+	}
+
+	private static void getListeners(XClass currentClazz, List<Class> orderedListeners) {
+		EntityListeners entityListeners = (EntityListeners) currentClazz.getAnnotation( EntityListeners.class );
+		if ( entityListeners != null ) {
+			Class[] classes = entityListeners.value();
+			int size = classes.length;
+			for ( int index = size - 1; index >= 0 ; index-- ) {
+				orderedListeners.add( classes[index] );
+			}
+		}
+		if ( useAnnotationAnnotatedByListener ) {
+			Annotation[] annotations = currentClazz.getAnnotations();
+			for ( Annotation annot : annotations ) {
+				entityListeners = annot.getClass().getAnnotation( EntityListeners.class );
+				if ( entityListeners != null ) {
+					Class[] classes = entityListeners.value();
+					int size = classes.length;
+					for ( int index = size - 1; index >= 0 ; index-- ) {
+						orderedListeners.add( classes[index] );
+					}
+				}
+			}
+		}
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3AutoFlushEventListener.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3AutoFlushEventListener.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3AutoFlushEventListener.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,28 +0,0 @@
-//$Id$
-package org.hibernate.ejb.event;
-
-import org.hibernate.engine.CascadingAction;
-import org.hibernate.event.AutoFlushEventListener;
-import org.hibernate.event.def.DefaultAutoFlushEventListener;
-import org.hibernate.util.IdentityMap;
-
-/**
- * In EJB3, it is the create operation that is cascaded to unmanaged
- * ebtities at flush time (instead of the save-update operation in
- * Hibernate).
- *
- * @author Gavin King
- */
-public class EJB3AutoFlushEventListener extends DefaultAutoFlushEventListener {
-
-	public static final AutoFlushEventListener INSTANCE = new EJB3AutoFlushEventListener();
-
-	protected CascadingAction getCascadingAction() {
-		return CascadingAction.PERSIST_ON_FLUSH;
-	}
-
-	protected Object getAnything() {
-		return IdentityMap.instantiate( 10 );
-	}
-
-}

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3AutoFlushEventListener.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3AutoFlushEventListener.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3AutoFlushEventListener.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3AutoFlushEventListener.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,28 @@
+//$Id$
+package org.hibernate.ejb.event;
+
+import org.hibernate.engine.CascadingAction;
+import org.hibernate.event.AutoFlushEventListener;
+import org.hibernate.event.def.DefaultAutoFlushEventListener;
+import org.hibernate.util.IdentityMap;
+
+/**
+ * In EJB3, it is the create operation that is cascaded to unmanaged
+ * ebtities at flush time (instead of the save-update operation in
+ * Hibernate).
+ *
+ * @author Gavin King
+ */
+public class EJB3AutoFlushEventListener extends DefaultAutoFlushEventListener {
+
+	public static final AutoFlushEventListener INSTANCE = new EJB3AutoFlushEventListener();
+
+	protected CascadingAction getCascadingAction() {
+		return CascadingAction.PERSIST_ON_FLUSH;
+	}
+
+	protected Object getAnything() {
+		return IdentityMap.instantiate( 10 );
+	}
+
+}

Deleted: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3DeleteEventListener.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3DeleteEventListener.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3DeleteEventListener.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,47 +0,0 @@
-//$Id$
-package org.hibernate.ejb.event;
-
-import java.io.Serializable;
-
-import org.hibernate.event.EventSource;
-import org.hibernate.event.DeleteEvent;
-import org.hibernate.event.def.DefaultDeleteEventListener;
-import org.hibernate.persister.entity.EntityPersister;
-
-/**
- * Overrides the LifeCycle OnSave call to call the PreRemove operation
- *
- * @author Emmanuel Bernard
- */
-public class EJB3DeleteEventListener extends DefaultDeleteEventListener implements CallbackHandlerConsumer {
-	private EntityCallbackHandler callbackHandler;
-
-	public void setCallbackHandler(EntityCallbackHandler callbackHandler) {
-		this.callbackHandler = callbackHandler;
-	}
-
-	public EJB3DeleteEventListener() {
-		super();
-	}
-
-	public EJB3DeleteEventListener(EntityCallbackHandler callbackHandler) {
-		this();
-		this.callbackHandler = callbackHandler;
-	}
-
-	@Override
-	protected boolean invokeDeleteLifecycle(EventSource session, Object entity, EntityPersister persister) {
-		callbackHandler.preRemove( entity );
-		return super.invokeDeleteLifecycle( session, entity, persister );
-	}
-
-	@Override
-	protected void performDetachedEntityDeletionCheck(DeleteEvent event) {
-		EventSource source = event.getSession();
-		String entityName = event.getEntityName();
-		EntityPersister persister = source.getEntityPersister( entityName, event.getObject() );
-		Serializable id =  persister.getIdentifier( event.getObject(), source.getEntityMode() );
-		entityName = entityName == null ? source.guessEntityName( event.getObject() ) : entityName; 
-		throw new IllegalArgumentException("Removing a detached instance "+ entityName + "#" + id);
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3DeleteEventListener.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3DeleteEventListener.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3DeleteEventListener.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3DeleteEventListener.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,47 @@
+//$Id$
+package org.hibernate.ejb.event;
+
+import java.io.Serializable;
+
+import org.hibernate.event.EventSource;
+import org.hibernate.event.DeleteEvent;
+import org.hibernate.event.def.DefaultDeleteEventListener;
+import org.hibernate.persister.entity.EntityPersister;
+
+/**
+ * Overrides the LifeCycle OnSave call to call the PreRemove operation
+ *
+ * @author Emmanuel Bernard
+ */
+public class EJB3DeleteEventListener extends DefaultDeleteEventListener implements CallbackHandlerConsumer {
+	private EntityCallbackHandler callbackHandler;
+
+	public void setCallbackHandler(EntityCallbackHandler callbackHandler) {
+		this.callbackHandler = callbackHandler;
+	}
+
+	public EJB3DeleteEventListener() {
+		super();
+	}
+
+	public EJB3DeleteEventListener(EntityCallbackHandler callbackHandler) {
+		this();
+		this.callbackHandler = callbackHandler;
+	}
+
+	@Override
+	protected boolean invokeDeleteLifecycle(EventSource session, Object entity, EntityPersister persister) {
+		callbackHandler.preRemove( entity );
+		return super.invokeDeleteLifecycle( session, entity, persister );
+	}
+
+	@Override
+	protected void performDetachedEntityDeletionCheck(DeleteEvent event) {
+		EventSource source = event.getSession();
+		String entityName = event.getEntityName();
+		EntityPersister persister = source.getEntityPersister( entityName, event.getObject() );
+		Serializable id =  persister.getIdentifier( event.getObject(), source.getEntityMode() );
+		entityName = entityName == null ? source.guessEntityName( event.getObject() ) : entityName; 
+		throw new IllegalArgumentException("Removing a detached instance "+ entityName + "#" + id);
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3FlushEntityEventListener.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3FlushEntityEventListener.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3FlushEntityEventListener.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,64 +0,0 @@
-//$Id$
-package org.hibernate.ejb.event;
-
-import org.hibernate.EntityMode;
-import org.hibernate.SessionFactory;
-import org.hibernate.engine.EntityEntry;
-import org.hibernate.engine.SessionImplementor;
-import org.hibernate.engine.Status;
-import org.hibernate.event.def.DefaultFlushEntityEventListener;
-import org.hibernate.metadata.ClassMetadata;
-import org.hibernate.persister.entity.EntityPersister;
-import org.hibernate.type.Type;
-
-/**
- * Overrides the LifeCycle OnSave call to call the PreUpdate operation
- *
- * @author Emmanuel Bernard
- */
-public class EJB3FlushEntityEventListener extends DefaultFlushEntityEventListener implements CallbackHandlerConsumer {
-	private EntityCallbackHandler callbackHandler;
-
-	public void setCallbackHandler(EntityCallbackHandler callbackHandler) {
-		this.callbackHandler = callbackHandler;
-	}
-
-	public EJB3FlushEntityEventListener() {
-		super();
-	}
-
-	public EJB3FlushEntityEventListener(EntityCallbackHandler callbackHandler) {
-		super();
-		this.callbackHandler = callbackHandler;
-	}
-
-	@Override
-	protected boolean invokeInterceptor(
-			SessionImplementor session, Object entity, EntityEntry entry, Object[] values, EntityPersister persister
-	) {
-		boolean isDirty = false;
-		if ( entry.getStatus() != Status.DELETED ) {
-			if ( callbackHandler.preUpdate( entity ) ) {
-				isDirty = copyState( entity, persister.getPropertyTypes(), values, session.getFactory() );
-			}
-		}
-		return super.invokeInterceptor( session, entity, entry, values, persister ) || isDirty;
-	}
-
-	/**
-	 * copy the entity state into the state array and return true if the state has changed
-	 */
-	private boolean copyState(Object entity, Type[] types, Object[] state, SessionFactory sf) {
-		ClassMetadata metadata = sf.getClassMetadata( entity.getClass() );
-		Object[] newState = metadata.getPropertyValues( entity, EntityMode.POJO );
-		int size = newState.length;
-		boolean isDirty = false;
-		for ( int index = 0; index < size ; index++ ) {
-			if ( !types[index].isEqual( state[index], newState[index], EntityMode.POJO ) ) {
-				isDirty = true;
-				state[index] = newState[index];
-			}
-		}
-		return isDirty;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3FlushEntityEventListener.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3FlushEntityEventListener.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3FlushEntityEventListener.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3FlushEntityEventListener.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,64 @@
+//$Id$
+package org.hibernate.ejb.event;
+
+import org.hibernate.EntityMode;
+import org.hibernate.SessionFactory;
+import org.hibernate.engine.EntityEntry;
+import org.hibernate.engine.SessionImplementor;
+import org.hibernate.engine.Status;
+import org.hibernate.event.def.DefaultFlushEntityEventListener;
+import org.hibernate.metadata.ClassMetadata;
+import org.hibernate.persister.entity.EntityPersister;
+import org.hibernate.type.Type;
+
+/**
+ * Overrides the LifeCycle OnSave call to call the PreUpdate operation
+ *
+ * @author Emmanuel Bernard
+ */
+public class EJB3FlushEntityEventListener extends DefaultFlushEntityEventListener implements CallbackHandlerConsumer {
+	private EntityCallbackHandler callbackHandler;
+
+	public void setCallbackHandler(EntityCallbackHandler callbackHandler) {
+		this.callbackHandler = callbackHandler;
+	}
+
+	public EJB3FlushEntityEventListener() {
+		super();
+	}
+
+	public EJB3FlushEntityEventListener(EntityCallbackHandler callbackHandler) {
+		super();
+		this.callbackHandler = callbackHandler;
+	}
+
+	@Override
+	protected boolean invokeInterceptor(
+			SessionImplementor session, Object entity, EntityEntry entry, Object[] values, EntityPersister persister
+	) {
+		boolean isDirty = false;
+		if ( entry.getStatus() != Status.DELETED ) {
+			if ( callbackHandler.preUpdate( entity ) ) {
+				isDirty = copyState( entity, persister.getPropertyTypes(), values, session.getFactory() );
+			}
+		}
+		return super.invokeInterceptor( session, entity, entry, values, persister ) || isDirty;
+	}
+
+	/**
+	 * copy the entity state into the state array and return true if the state has changed
+	 */
+	private boolean copyState(Object entity, Type[] types, Object[] state, SessionFactory sf) {
+		ClassMetadata metadata = sf.getClassMetadata( entity.getClass() );
+		Object[] newState = metadata.getPropertyValues( entity, EntityMode.POJO );
+		int size = newState.length;
+		boolean isDirty = false;
+		for ( int index = 0; index < size ; index++ ) {
+			if ( !types[index].isEqual( state[index], newState[index], EntityMode.POJO ) ) {
+				isDirty = true;
+				state[index] = newState[index];
+			}
+		}
+		return isDirty;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3FlushEventListener.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3FlushEventListener.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3FlushEventListener.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,28 +0,0 @@
-//$Id$
-package org.hibernate.ejb.event;
-
-import org.hibernate.engine.CascadingAction;
-import org.hibernate.event.FlushEventListener;
-import org.hibernate.event.def.DefaultFlushEventListener;
-import org.hibernate.util.IdentityMap;
-
-/**
- * In EJB3, it is the create operation that is cascaded to unmanaged
- * ebtities at flush time (instead of the save-update operation in
- * Hibernate).
- *
- * @author Gavin King
- */
-public class EJB3FlushEventListener extends DefaultFlushEventListener {
-
-	public static final FlushEventListener INSTANCE = new EJB3FlushEventListener();
-
-	protected CascadingAction getCascadingAction() {
-		return CascadingAction.PERSIST_ON_FLUSH;
-	}
-
-	protected Object getAnything() {
-		return IdentityMap.instantiate( 10 );
-	}
-
-}

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3FlushEventListener.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3FlushEventListener.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3FlushEventListener.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3FlushEventListener.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,28 @@
+//$Id$
+package org.hibernate.ejb.event;
+
+import org.hibernate.engine.CascadingAction;
+import org.hibernate.event.FlushEventListener;
+import org.hibernate.event.def.DefaultFlushEventListener;
+import org.hibernate.util.IdentityMap;
+
+/**
+ * In EJB3, it is the create operation that is cascaded to unmanaged
+ * ebtities at flush time (instead of the save-update operation in
+ * Hibernate).
+ *
+ * @author Gavin King
+ */
+public class EJB3FlushEventListener extends DefaultFlushEventListener {
+
+	public static final FlushEventListener INSTANCE = new EJB3FlushEventListener();
+
+	protected CascadingAction getCascadingAction() {
+		return CascadingAction.PERSIST_ON_FLUSH;
+	}
+
+	protected Object getAnything() {
+		return IdentityMap.instantiate( 10 );
+	}
+
+}

Deleted: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3MergeEventListener.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3MergeEventListener.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3MergeEventListener.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,46 +0,0 @@
-//$Id$
-package org.hibernate.ejb.event;
-
-import java.io.Serializable;
-
-import org.hibernate.event.EventSource;
-import org.hibernate.event.def.DefaultMergeEventListener;
-import org.hibernate.persister.entity.EntityPersister;
-
-/**
- * Overrides the LifeCycle OnSave call to call the PrePersist operation
- *
- * @author Emmanuel Bernard
- */
-public class EJB3MergeEventListener extends DefaultMergeEventListener implements CallbackHandlerConsumer {
-	private EntityCallbackHandler callbackHandler;
-
-	public void setCallbackHandler(EntityCallbackHandler callbackHandler) {
-		this.callbackHandler = callbackHandler;
-	}
-
-	public EJB3MergeEventListener() {
-		super();
-	}
-
-	public EJB3MergeEventListener(EntityCallbackHandler callbackHandler) {
-		super();
-		this.callbackHandler = callbackHandler;
-	}
-
-	@Override
-	protected Serializable saveWithRequestedId(Object entity, Serializable requestedId, String entityName,
-											   Object anything, EventSource source) {
-		callbackHandler.preCreate( entity );
-		return super.saveWithRequestedId( entity, requestedId, entityName, anything,
-				source );
-	}
-
-	@Override
-	protected Serializable saveWithGeneratedId(Object entity, String entityName, Object anything, EventSource source,
-											   boolean requiresImmediateIdAccess) {
-		callbackHandler.preCreate( entity );
-		return super.saveWithGeneratedId( entity, entityName, anything, source,
-				requiresImmediateIdAccess );
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3MergeEventListener.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3MergeEventListener.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3MergeEventListener.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3MergeEventListener.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,46 @@
+//$Id$
+package org.hibernate.ejb.event;
+
+import java.io.Serializable;
+
+import org.hibernate.event.EventSource;
+import org.hibernate.event.def.DefaultMergeEventListener;
+import org.hibernate.persister.entity.EntityPersister;
+
+/**
+ * Overrides the LifeCycle OnSave call to call the PrePersist operation
+ *
+ * @author Emmanuel Bernard
+ */
+public class EJB3MergeEventListener extends DefaultMergeEventListener implements CallbackHandlerConsumer {
+	private EntityCallbackHandler callbackHandler;
+
+	public void setCallbackHandler(EntityCallbackHandler callbackHandler) {
+		this.callbackHandler = callbackHandler;
+	}
+
+	public EJB3MergeEventListener() {
+		super();
+	}
+
+	public EJB3MergeEventListener(EntityCallbackHandler callbackHandler) {
+		super();
+		this.callbackHandler = callbackHandler;
+	}
+
+	@Override
+	protected Serializable saveWithRequestedId(Object entity, Serializable requestedId, String entityName,
+											   Object anything, EventSource source) {
+		callbackHandler.preCreate( entity );
+		return super.saveWithRequestedId( entity, requestedId, entityName, anything,
+				source );
+	}
+
+	@Override
+	protected Serializable saveWithGeneratedId(Object entity, String entityName, Object anything, EventSource source,
+											   boolean requiresImmediateIdAccess) {
+		callbackHandler.preCreate( entity );
+		return super.saveWithGeneratedId( entity, entityName, anything, source,
+				requiresImmediateIdAccess );
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PersistEventListener.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PersistEventListener.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PersistEventListener.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,57 +0,0 @@
-//$Id$
-package org.hibernate.ejb.event;
-
-import java.io.Serializable;
-
-import org.hibernate.event.EventSource;
-import org.hibernate.event.def.DefaultPersistEventListener;
-import org.hibernate.engine.CascadingAction;
-import org.hibernate.engine.EJB3CascadingAction;
-import org.hibernate.engine.EJB3CascadeStyle;
-
-/**
- * Overrides the LifeCycle OnSave call to call the PrePersist operation
- *
- * @author Emmanuel Bernard
- */
-public class EJB3PersistEventListener extends DefaultPersistEventListener implements CallbackHandlerConsumer {
-	static {
-		EJB3CascadeStyle.PERSIST_EJB3.hasOrphanDelete(); //triggers class loading
-	}
-
-	private EntityCallbackHandler callbackHandler;
-
-	public void setCallbackHandler(EntityCallbackHandler callbackHandler) {
-		this.callbackHandler = callbackHandler;
-	}
-
-	public EJB3PersistEventListener() {
-		super();
-	}
-
-	public EJB3PersistEventListener(EntityCallbackHandler callbackHandler) {
-		super();
-		this.callbackHandler = callbackHandler;
-	}
-
-	@Override
-	protected Serializable saveWithRequestedId(Object entity, Serializable requestedId, String entityName,
-											   Object anything, EventSource source) {
-		callbackHandler.preCreate( entity );
-		return super.saveWithRequestedId( entity, requestedId, entityName, anything,
-				source );
-	}
-
-	@Override
-	protected Serializable saveWithGeneratedId(Object entity, String entityName, Object anything, EventSource source,
-											   boolean requiresImmediateIdAccess) {
-		callbackHandler.preCreate( entity );
-		return super.saveWithGeneratedId( entity, entityName, anything, source,
-				requiresImmediateIdAccess );
-	}
-
-	@Override
-	protected CascadingAction getCascadeAction() {
-		return EJB3CascadingAction.PERSIST_SKIPLAZY;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PersistEventListener.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PersistEventListener.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PersistEventListener.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PersistEventListener.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,57 @@
+//$Id$
+package org.hibernate.ejb.event;
+
+import java.io.Serializable;
+
+import org.hibernate.event.EventSource;
+import org.hibernate.event.def.DefaultPersistEventListener;
+import org.hibernate.engine.CascadingAction;
+import org.hibernate.engine.EJB3CascadingAction;
+import org.hibernate.engine.EJB3CascadeStyle;
+
+/**
+ * Overrides the LifeCycle OnSave call to call the PrePersist operation
+ *
+ * @author Emmanuel Bernard
+ */
+public class EJB3PersistEventListener extends DefaultPersistEventListener implements CallbackHandlerConsumer {
+	static {
+		EJB3CascadeStyle.PERSIST_EJB3.hasOrphanDelete(); //triggers class loading
+	}
+
+	private EntityCallbackHandler callbackHandler;
+
+	public void setCallbackHandler(EntityCallbackHandler callbackHandler) {
+		this.callbackHandler = callbackHandler;
+	}
+
+	public EJB3PersistEventListener() {
+		super();
+	}
+
+	public EJB3PersistEventListener(EntityCallbackHandler callbackHandler) {
+		super();
+		this.callbackHandler = callbackHandler;
+	}
+
+	@Override
+	protected Serializable saveWithRequestedId(Object entity, Serializable requestedId, String entityName,
+											   Object anything, EventSource source) {
+		callbackHandler.preCreate( entity );
+		return super.saveWithRequestedId( entity, requestedId, entityName, anything,
+				source );
+	}
+
+	@Override
+	protected Serializable saveWithGeneratedId(Object entity, String entityName, Object anything, EventSource source,
+											   boolean requiresImmediateIdAccess) {
+		callbackHandler.preCreate( entity );
+		return super.saveWithGeneratedId( entity, entityName, anything, source,
+				requiresImmediateIdAccess );
+	}
+
+	@Override
+	protected CascadingAction getCascadeAction() {
+		return EJB3CascadingAction.PERSIST_SKIPLAZY;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PersistOnFlushEventListener.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PersistOnFlushEventListener.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PersistOnFlushEventListener.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,14 +0,0 @@
-//$Id$
-package org.hibernate.ejb.event;
-
-import org.hibernate.engine.CascadingAction;
-
-/**
- * @author Emmanuel Bernard
- */
-public class EJB3PersistOnFlushEventListener extends EJB3PersistEventListener {
-	@Override
-	protected CascadingAction getCascadeAction() {
-		return CascadingAction.PERSIST_ON_FLUSH;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PersistOnFlushEventListener.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PersistOnFlushEventListener.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PersistOnFlushEventListener.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PersistOnFlushEventListener.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,14 @@
+//$Id$
+package org.hibernate.ejb.event;
+
+import org.hibernate.engine.CascadingAction;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class EJB3PersistOnFlushEventListener extends EJB3PersistEventListener {
+	@Override
+	protected CascadingAction getCascadeAction() {
+		return CascadingAction.PERSIST_ON_FLUSH;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PostDeleteEventListener.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PostDeleteEventListener.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PostDeleteEventListener.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,36 +0,0 @@
-/*
- * JBoss, the OpenSource EJB server
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package org.hibernate.ejb.event;
-
-import org.hibernate.event.PostDeleteEvent;
-import org.hibernate.event.PostDeleteEventListener;
-
-/**
- * @author <a href="mailto:kabir.khan at jboss.org">Kabir Khan</a>
- * @version $Revision$
- */
-public class EJB3PostDeleteEventListener implements PostDeleteEventListener, CallbackHandlerConsumer {
-	EntityCallbackHandler callbackHandler;
-
-	public void setCallbackHandler(EntityCallbackHandler callbackHandler) {
-		this.callbackHandler = callbackHandler;
-	}
-
-	public EJB3PostDeleteEventListener() {
-		super();
-	}
-
-	public EJB3PostDeleteEventListener(EntityCallbackHandler callbackHandler) {
-		this.callbackHandler = callbackHandler;
-	}
-
-	public void onPostDelete(PostDeleteEvent event) {
-		Object entity = event.getEntity();
-		callbackHandler.postRemove( entity );
-	}
-
-}

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PostDeleteEventListener.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PostDeleteEventListener.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PostDeleteEventListener.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PostDeleteEventListener.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,36 @@
+/*
+ * JBoss, the OpenSource EJB server
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.hibernate.ejb.event;
+
+import org.hibernate.event.PostDeleteEvent;
+import org.hibernate.event.PostDeleteEventListener;
+
+/**
+ * @author <a href="mailto:kabir.khan at jboss.org">Kabir Khan</a>
+ * @version $Revision$
+ */
+public class EJB3PostDeleteEventListener implements PostDeleteEventListener, CallbackHandlerConsumer {
+	EntityCallbackHandler callbackHandler;
+
+	public void setCallbackHandler(EntityCallbackHandler callbackHandler) {
+		this.callbackHandler = callbackHandler;
+	}
+
+	public EJB3PostDeleteEventListener() {
+		super();
+	}
+
+	public EJB3PostDeleteEventListener(EntityCallbackHandler callbackHandler) {
+		this.callbackHandler = callbackHandler;
+	}
+
+	public void onPostDelete(PostDeleteEvent event) {
+		Object entity = event.getEntity();
+		callbackHandler.postRemove( entity );
+	}
+
+}

Deleted: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PostInsertEventListener.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PostInsertEventListener.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PostInsertEventListener.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,35 +0,0 @@
-/*
- * JBoss, the OpenSource EJB server
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package org.hibernate.ejb.event;
-
-import org.hibernate.event.PostInsertEvent;
-import org.hibernate.event.PostInsertEventListener;
-
-/**
- * @author <a href="mailto:kabir.khan at jboss.org">Kabir Khan</a>
- * @version $Revision$
- */
-public class EJB3PostInsertEventListener implements PostInsertEventListener, CallbackHandlerConsumer {
-	EntityCallbackHandler callbackHandler;
-
-	public void setCallbackHandler(EntityCallbackHandler callbackHandler) {
-		this.callbackHandler = callbackHandler;
-	}
-
-	public EJB3PostInsertEventListener() {
-		super();
-	}
-
-	public EJB3PostInsertEventListener(EntityCallbackHandler callbackHandler) {
-		this.callbackHandler = callbackHandler;
-	}
-
-	public void onPostInsert(PostInsertEvent event) {
-		Object entity = event.getEntity();
-		callbackHandler.postCreate( entity );
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PostInsertEventListener.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PostInsertEventListener.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PostInsertEventListener.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PostInsertEventListener.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,35 @@
+/*
+ * JBoss, the OpenSource EJB server
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.hibernate.ejb.event;
+
+import org.hibernate.event.PostInsertEvent;
+import org.hibernate.event.PostInsertEventListener;
+
+/**
+ * @author <a href="mailto:kabir.khan at jboss.org">Kabir Khan</a>
+ * @version $Revision$
+ */
+public class EJB3PostInsertEventListener implements PostInsertEventListener, CallbackHandlerConsumer {
+	EntityCallbackHandler callbackHandler;
+
+	public void setCallbackHandler(EntityCallbackHandler callbackHandler) {
+		this.callbackHandler = callbackHandler;
+	}
+
+	public EJB3PostInsertEventListener() {
+		super();
+	}
+
+	public EJB3PostInsertEventListener(EntityCallbackHandler callbackHandler) {
+		this.callbackHandler = callbackHandler;
+	}
+
+	public void onPostInsert(PostInsertEvent event) {
+		Object entity = event.getEntity();
+		callbackHandler.postCreate( entity );
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PostLoadEventListener.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PostLoadEventListener.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PostLoadEventListener.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,36 +0,0 @@
-/*
- * JBoss, the OpenSource EJB server
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package org.hibernate.ejb.event;
-
-import org.hibernate.event.PostLoadEvent;
-import org.hibernate.event.PostLoadEventListener;
-
-/**
- * @author <a href="mailto:kabir.khan at jboss.org">Kabir Khan</a>
- * @version $Revision$
- */
-public class EJB3PostLoadEventListener implements PostLoadEventListener, CallbackHandlerConsumer {
-	EntityCallbackHandler callbackHandler;
-
-	public void setCallbackHandler(EntityCallbackHandler callbackHandler) {
-		this.callbackHandler = callbackHandler;
-	}
-
-	public EJB3PostLoadEventListener() {
-		super();
-	}
-
-	public EJB3PostLoadEventListener(EntityCallbackHandler callbackHandler) {
-		this.callbackHandler = callbackHandler;
-	}
-
-	public void onPostLoad(PostLoadEvent event) {
-		Object entity = event.getEntity();
-		callbackHandler.postLoad( entity );
-	}
-
-}

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PostLoadEventListener.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PostLoadEventListener.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PostLoadEventListener.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PostLoadEventListener.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,36 @@
+/*
+ * JBoss, the OpenSource EJB server
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.hibernate.ejb.event;
+
+import org.hibernate.event.PostLoadEvent;
+import org.hibernate.event.PostLoadEventListener;
+
+/**
+ * @author <a href="mailto:kabir.khan at jboss.org">Kabir Khan</a>
+ * @version $Revision$
+ */
+public class EJB3PostLoadEventListener implements PostLoadEventListener, CallbackHandlerConsumer {
+	EntityCallbackHandler callbackHandler;
+
+	public void setCallbackHandler(EntityCallbackHandler callbackHandler) {
+		this.callbackHandler = callbackHandler;
+	}
+
+	public EJB3PostLoadEventListener() {
+		super();
+	}
+
+	public EJB3PostLoadEventListener(EntityCallbackHandler callbackHandler) {
+		this.callbackHandler = callbackHandler;
+	}
+
+	public void onPostLoad(PostLoadEvent event) {
+		Object entity = event.getEntity();
+		callbackHandler.postLoad( entity );
+	}
+
+}

Deleted: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PostUpdateEventListener.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PostUpdateEventListener.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PostUpdateEventListener.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,41 +0,0 @@
-/*
- * JBoss, the OpenSource EJB server
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package org.hibernate.ejb.event;
-
-import org.hibernate.event.PostUpdateEvent;
-import org.hibernate.event.PostUpdateEventListener;
-import org.hibernate.engine.EntityEntry;
-import org.hibernate.engine.Status;
-
-/**
- * @author <a href="mailto:kabir.khan at jboss.org">Kabir Khan</a>
- * @version $Revision$
- */
-public class EJB3PostUpdateEventListener implements PostUpdateEventListener, CallbackHandlerConsumer {
-	EntityCallbackHandler callbackHandler;
-
-	public void setCallbackHandler(EntityCallbackHandler callbackHandler) {
-		this.callbackHandler = callbackHandler;
-	}
-
-	public EJB3PostUpdateEventListener() {
-		super();
-	}
-
-	public EJB3PostUpdateEventListener(EntityCallbackHandler callbackHandler) {
-		this.callbackHandler = callbackHandler;
-	}
-
-	public void onPostUpdate(PostUpdateEvent event) {
-		Object entity = event.getEntity();
-		EntityEntry entry = (EntityEntry) event.getSession().getPersistenceContext().getEntityEntries().get( entity );
-		//mimic the preUpdate filter
-		if ( Status.DELETED != entry.getStatus() ) {
-			callbackHandler.postUpdate( entity );
-		}
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PostUpdateEventListener.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PostUpdateEventListener.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PostUpdateEventListener.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3PostUpdateEventListener.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,41 @@
+/*
+ * JBoss, the OpenSource EJB server
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.hibernate.ejb.event;
+
+import org.hibernate.event.PostUpdateEvent;
+import org.hibernate.event.PostUpdateEventListener;
+import org.hibernate.engine.EntityEntry;
+import org.hibernate.engine.Status;
+
+/**
+ * @author <a href="mailto:kabir.khan at jboss.org">Kabir Khan</a>
+ * @version $Revision$
+ */
+public class EJB3PostUpdateEventListener implements PostUpdateEventListener, CallbackHandlerConsumer {
+	EntityCallbackHandler callbackHandler;
+
+	public void setCallbackHandler(EntityCallbackHandler callbackHandler) {
+		this.callbackHandler = callbackHandler;
+	}
+
+	public EJB3PostUpdateEventListener() {
+		super();
+	}
+
+	public EJB3PostUpdateEventListener(EntityCallbackHandler callbackHandler) {
+		this.callbackHandler = callbackHandler;
+	}
+
+	public void onPostUpdate(PostUpdateEvent event) {
+		Object entity = event.getEntity();
+		EntityEntry entry = (EntityEntry) event.getSession().getPersistenceContext().getEntityEntries().get( entity );
+		//mimic the preUpdate filter
+		if ( Status.DELETED != entry.getStatus() ) {
+			callbackHandler.postUpdate( entity );
+		}
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3SaveEventListener.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3SaveEventListener.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3SaveEventListener.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,46 +0,0 @@
-//$Id$
-package org.hibernate.ejb.event;
-
-import java.io.Serializable;
-
-import org.hibernate.event.EventSource;
-import org.hibernate.event.def.DefaultSaveEventListener;
-import org.hibernate.persister.entity.EntityPersister;
-
-/**
- * Overrides the LifeCycle OnSave call to call the PrePersist operation
- *
- * @author Emmanuel Bernard
- */
-public class EJB3SaveEventListener extends DefaultSaveEventListener implements CallbackHandlerConsumer {
-	private EntityCallbackHandler callbackHandler;
-
-	public void setCallbackHandler(EntityCallbackHandler callbackHandler) {
-		this.callbackHandler = callbackHandler;
-	}
-
-	public EJB3SaveEventListener() {
-		super();
-	}
-
-	public EJB3SaveEventListener(EntityCallbackHandler callbackHandler) {
-		super();
-		this.callbackHandler = callbackHandler;
-	}
-
-	@Override
-	protected Serializable saveWithRequestedId(Object entity, Serializable requestedId, String entityName,
-											   Object anything, EventSource source) {
-		callbackHandler.preCreate( entity );
-		return super.saveWithRequestedId( entity, requestedId, entityName, anything,
-				source );
-	}
-
-	@Override
-	protected Serializable saveWithGeneratedId(Object entity, String entityName, Object anything, EventSource source,
-											   boolean requiresImmediateIdAccess) {
-		callbackHandler.preCreate( entity );
-		return super.saveWithGeneratedId( entity, entityName, anything, source,
-				requiresImmediateIdAccess );
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3SaveEventListener.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3SaveEventListener.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3SaveEventListener.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3SaveEventListener.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,46 @@
+//$Id$
+package org.hibernate.ejb.event;
+
+import java.io.Serializable;
+
+import org.hibernate.event.EventSource;
+import org.hibernate.event.def.DefaultSaveEventListener;
+import org.hibernate.persister.entity.EntityPersister;
+
+/**
+ * Overrides the LifeCycle OnSave call to call the PrePersist operation
+ *
+ * @author Emmanuel Bernard
+ */
+public class EJB3SaveEventListener extends DefaultSaveEventListener implements CallbackHandlerConsumer {
+	private EntityCallbackHandler callbackHandler;
+
+	public void setCallbackHandler(EntityCallbackHandler callbackHandler) {
+		this.callbackHandler = callbackHandler;
+	}
+
+	public EJB3SaveEventListener() {
+		super();
+	}
+
+	public EJB3SaveEventListener(EntityCallbackHandler callbackHandler) {
+		super();
+		this.callbackHandler = callbackHandler;
+	}
+
+	@Override
+	protected Serializable saveWithRequestedId(Object entity, Serializable requestedId, String entityName,
+											   Object anything, EventSource source) {
+		callbackHandler.preCreate( entity );
+		return super.saveWithRequestedId( entity, requestedId, entityName, anything,
+				source );
+	}
+
+	@Override
+	protected Serializable saveWithGeneratedId(Object entity, String entityName, Object anything, EventSource source,
+											   boolean requiresImmediateIdAccess) {
+		callbackHandler.preCreate( entity );
+		return super.saveWithGeneratedId( entity, entityName, anything, source,
+				requiresImmediateIdAccess );
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3SaveOrUpdateEventListener.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3SaveOrUpdateEventListener.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3SaveOrUpdateEventListener.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,46 +0,0 @@
-//$Id$
-package org.hibernate.ejb.event;
-
-import java.io.Serializable;
-
-import org.hibernate.event.EventSource;
-import org.hibernate.event.def.DefaultSaveOrUpdateEventListener;
-import org.hibernate.persister.entity.EntityPersister;
-
-/**
- * Overrides the LifeCycle OnSave call to call the PrePersist operation
- *
- * @author Emmanuel Bernard
- */
-public class EJB3SaveOrUpdateEventListener extends DefaultSaveOrUpdateEventListener implements CallbackHandlerConsumer {
-	private EntityCallbackHandler callbackHandler;
-
-	public void setCallbackHandler(EntityCallbackHandler callbackHandler) {
-		this.callbackHandler = callbackHandler;
-	}
-
-	public EJB3SaveOrUpdateEventListener() {
-		super();
-	}
-
-	public EJB3SaveOrUpdateEventListener(EntityCallbackHandler callbackHandler) {
-		super();
-		this.callbackHandler = callbackHandler;
-	}
-
-	@Override
-	protected Serializable saveWithRequestedId(Object entity, Serializable requestedId, String entityName,
-											   Object anything, EventSource source) {
-		callbackHandler.preCreate( entity );
-		return super.saveWithRequestedId( entity, requestedId, entityName, anything,
-				source );
-	}
-
-	@Override
-	protected Serializable saveWithGeneratedId(Object entity, String entityName, Object anything, EventSource source,
-											   boolean requiresImmediateIdAccess) {
-		callbackHandler.preCreate( entity );
-		return super.saveWithGeneratedId( entity, entityName, anything, source,
-				requiresImmediateIdAccess );
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3SaveOrUpdateEventListener.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3SaveOrUpdateEventListener.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3SaveOrUpdateEventListener.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EJB3SaveOrUpdateEventListener.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,46 @@
+//$Id$
+package org.hibernate.ejb.event;
+
+import java.io.Serializable;
+
+import org.hibernate.event.EventSource;
+import org.hibernate.event.def.DefaultSaveOrUpdateEventListener;
+import org.hibernate.persister.entity.EntityPersister;
+
+/**
+ * Overrides the LifeCycle OnSave call to call the PrePersist operation
+ *
+ * @author Emmanuel Bernard
+ */
+public class EJB3SaveOrUpdateEventListener extends DefaultSaveOrUpdateEventListener implements CallbackHandlerConsumer {
+	private EntityCallbackHandler callbackHandler;
+
+	public void setCallbackHandler(EntityCallbackHandler callbackHandler) {
+		this.callbackHandler = callbackHandler;
+	}
+
+	public EJB3SaveOrUpdateEventListener() {
+		super();
+	}
+
+	public EJB3SaveOrUpdateEventListener(EntityCallbackHandler callbackHandler) {
+		super();
+		this.callbackHandler = callbackHandler;
+	}
+
+	@Override
+	protected Serializable saveWithRequestedId(Object entity, Serializable requestedId, String entityName,
+											   Object anything, EventSource source) {
+		callbackHandler.preCreate( entity );
+		return super.saveWithRequestedId( entity, requestedId, entityName, anything,
+				source );
+	}
+
+	@Override
+	protected Serializable saveWithGeneratedId(Object entity, String entityName, Object anything, EventSource source,
+											   boolean requiresImmediateIdAccess) {
+		callbackHandler.preCreate( entity );
+		return super.saveWithGeneratedId( entity, entityName, anything, source,
+				requiresImmediateIdAccess );
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EntityCallbackHandler.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EntityCallbackHandler.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EntityCallbackHandler.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,95 +0,0 @@
-/*
- * JBoss, the OpenSource EJB server
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package org.hibernate.ejb.event;
-
-import java.io.Serializable;
-import java.util.HashMap;
-import javax.persistence.PostLoad;
-import javax.persistence.PostPersist;
-import javax.persistence.PostRemove;
-import javax.persistence.PostUpdate;
-import javax.persistence.PrePersist;
-import javax.persistence.PreRemove;
-import javax.persistence.PreUpdate;
-
-import org.hibernate.annotations.common.reflection.XClass;
-import org.hibernate.annotations.common.reflection.ReflectionManager;
-
-/**
- * Keep track of all lifecycle callbacks and listeners for a given persistence unit
- *
- * @author <a href="mailto:kabir.khan at jboss.org">Kabir Khan</a>
- */
-public class EntityCallbackHandler implements Serializable {
-	private HashMap<Class, Callback[]> preCreates = new HashMap<Class, Callback[]>();
-	private HashMap<Class, Callback[]> postCreates = new HashMap<Class, Callback[]>();
-	private HashMap<Class, Callback[]> preRemoves = new HashMap<Class, Callback[]>();
-	private HashMap<Class, Callback[]> postRemoves = new HashMap<Class, Callback[]>();
-	private HashMap<Class, Callback[]> preUpdates = new HashMap<Class, Callback[]>();
-	private HashMap<Class, Callback[]> postUpdates = new HashMap<Class, Callback[]>();
-	private HashMap<Class, Callback[]> postLoads = new HashMap<Class, Callback[]>();
-
-	public void add(XClass entity, ReflectionManager reflectionManager) {
-		addCallback( entity, preCreates, PrePersist.class, reflectionManager );
-		addCallback( entity, postCreates, PostPersist.class, reflectionManager );
-		addCallback( entity, preRemoves, PreRemove.class, reflectionManager );
-		addCallback( entity, postRemoves, PostRemove.class, reflectionManager );
-		addCallback( entity, preUpdates, PreUpdate.class, reflectionManager );
-		addCallback( entity, postUpdates, PostUpdate.class, reflectionManager );
-		addCallback( entity, postLoads, PostLoad.class, reflectionManager );
-	}
-
-	public boolean preCreate(Object bean) {
-		return callback( preCreates.get( bean.getClass() ), bean );
-	}
-
-	public boolean postCreate(Object bean) {
-		return callback( postCreates.get( bean.getClass() ), bean );
-	}
-
-	public boolean preRemove(Object bean) {
-		return callback( preRemoves.get( bean.getClass() ), bean );
-	}
-
-	public boolean postRemove(Object bean) {
-		return callback( postRemoves.get( bean.getClass() ), bean );
-	}
-
-	public boolean preUpdate(Object bean) {
-		return callback( preUpdates.get( bean.getClass() ), bean );
-	}
-
-	public boolean postUpdate(Object bean) {
-		return callback( postUpdates.get( bean.getClass() ), bean );
-	}
-
-	public boolean postLoad(Object bean) {
-		return callback( postLoads.get( bean.getClass() ), bean );
-	}
-
-
-	private boolean callback(Callback[] callbacks, Object bean) {
-		if ( callbacks != null && callbacks.length != 0 ) {
-			for ( Callback callback : callbacks ) {
-				callback.invoke( bean );
-			}
-			return true;
-		}
-		else {
-			return false;
-		}
-	}
-
-
-	private void addCallback(
-			XClass entity, HashMap<Class, Callback[]> map, Class annotation, ReflectionManager reflectionManager
-	) {
-		Callback[] callbacks = null;
-		callbacks = CallbackResolver.resolveCallback( entity, annotation, reflectionManager );
-		map.put( reflectionManager.toClass( entity ), callbacks );
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EntityCallbackHandler.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EntityCallbackHandler.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EntityCallbackHandler.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/EntityCallbackHandler.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,95 @@
+/*
+ * JBoss, the OpenSource EJB server
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.hibernate.ejb.event;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import javax.persistence.PostLoad;
+import javax.persistence.PostPersist;
+import javax.persistence.PostRemove;
+import javax.persistence.PostUpdate;
+import javax.persistence.PrePersist;
+import javax.persistence.PreRemove;
+import javax.persistence.PreUpdate;
+
+import org.hibernate.annotations.common.reflection.XClass;
+import org.hibernate.annotations.common.reflection.ReflectionManager;
+
+/**
+ * Keep track of all lifecycle callbacks and listeners for a given persistence unit
+ *
+ * @author <a href="mailto:kabir.khan at jboss.org">Kabir Khan</a>
+ */
+public class EntityCallbackHandler implements Serializable {
+	private HashMap<Class, Callback[]> preCreates = new HashMap<Class, Callback[]>();
+	private HashMap<Class, Callback[]> postCreates = new HashMap<Class, Callback[]>();
+	private HashMap<Class, Callback[]> preRemoves = new HashMap<Class, Callback[]>();
+	private HashMap<Class, Callback[]> postRemoves = new HashMap<Class, Callback[]>();
+	private HashMap<Class, Callback[]> preUpdates = new HashMap<Class, Callback[]>();
+	private HashMap<Class, Callback[]> postUpdates = new HashMap<Class, Callback[]>();
+	private HashMap<Class, Callback[]> postLoads = new HashMap<Class, Callback[]>();
+
+	public void add(XClass entity, ReflectionManager reflectionManager) {
+		addCallback( entity, preCreates, PrePersist.class, reflectionManager );
+		addCallback( entity, postCreates, PostPersist.class, reflectionManager );
+		addCallback( entity, preRemoves, PreRemove.class, reflectionManager );
+		addCallback( entity, postRemoves, PostRemove.class, reflectionManager );
+		addCallback( entity, preUpdates, PreUpdate.class, reflectionManager );
+		addCallback( entity, postUpdates, PostUpdate.class, reflectionManager );
+		addCallback( entity, postLoads, PostLoad.class, reflectionManager );
+	}
+
+	public boolean preCreate(Object bean) {
+		return callback( preCreates.get( bean.getClass() ), bean );
+	}
+
+	public boolean postCreate(Object bean) {
+		return callback( postCreates.get( bean.getClass() ), bean );
+	}
+
+	public boolean preRemove(Object bean) {
+		return callback( preRemoves.get( bean.getClass() ), bean );
+	}
+
+	public boolean postRemove(Object bean) {
+		return callback( postRemoves.get( bean.getClass() ), bean );
+	}
+
+	public boolean preUpdate(Object bean) {
+		return callback( preUpdates.get( bean.getClass() ), bean );
+	}
+
+	public boolean postUpdate(Object bean) {
+		return callback( postUpdates.get( bean.getClass() ), bean );
+	}
+
+	public boolean postLoad(Object bean) {
+		return callback( postLoads.get( bean.getClass() ), bean );
+	}
+
+
+	private boolean callback(Callback[] callbacks, Object bean) {
+		if ( callbacks != null && callbacks.length != 0 ) {
+			for ( Callback callback : callbacks ) {
+				callback.invoke( bean );
+			}
+			return true;
+		}
+		else {
+			return false;
+		}
+	}
+
+
+	private void addCallback(
+			XClass entity, HashMap<Class, Callback[]> map, Class annotation, ReflectionManager reflectionManager
+	) {
+		Callback[] callbacks = null;
+		callbacks = CallbackResolver.resolveCallback( entity, annotation, reflectionManager );
+		map.put( reflectionManager.toClass( entity ), callbacks );
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/ListenerCallback.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/ListenerCallback.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/ListenerCallback.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,65 +0,0 @@
-/*
- * JBoss, the OpenSource EJB server
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package org.hibernate.ejb.event;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.lang.reflect.Method;
-import java.lang.reflect.InvocationTargetException;
-
-import org.hibernate.util.ReflectHelper;
-
-/**
- * @author <a href="mailto:kabir.khan at jboss.org">Kabir Khan</a>
- * @version $Revision$
- */
-public class ListenerCallback extends Callback {
-	protected transient Object listener;
-
-	public ListenerCallback(Method callbackMethod, Object listener) {
-		super( callbackMethod );
-		this.listener = listener;
-	}
-
-	public void invoke(Object bean) {
-		try {
-			callbackMethod.invoke( listener, new Object[]{bean} );
-		}
-		catch (InvocationTargetException e) {
-			//keep runtime exceptions as is
-			if ( e.getTargetException() instanceof RuntimeException ) {
-				throw (RuntimeException) e.getTargetException();
-			}
-			else {
-				throw new RuntimeException( e.getTargetException() );
-			}
-		}
-		catch (Exception e) {
-			throw new RuntimeException( e );
-		}
-	}
-
-	private void writeObject(ObjectOutputStream oos) throws IOException {
-		oos.defaultWriteObject();
-		oos.writeObject( listener.getClass().getName() );
-	}
-
-	private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
-		ois.defaultReadObject();
-		String listenerClass = (String) ois.readObject();
-		try {
-			listener = ReflectHelper.classForName( listenerClass, this.getClass() ).newInstance();
-		}
-		catch (InstantiationException e) {
-			throw new ClassNotFoundException( "Unable to load class:" + listenerClass, e );
-		}
-		catch (IllegalAccessException e) {
-			throw new ClassNotFoundException( "Unable to load class:" + listenerClass, e );
-		}
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/ListenerCallback.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/ListenerCallback.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/ListenerCallback.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/event/ListenerCallback.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,65 @@
+/*
+ * JBoss, the OpenSource EJB server
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.hibernate.ejb.event;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.lang.reflect.Method;
+import java.lang.reflect.InvocationTargetException;
+
+import org.hibernate.util.ReflectHelper;
+
+/**
+ * @author <a href="mailto:kabir.khan at jboss.org">Kabir Khan</a>
+ * @version $Revision$
+ */
+public class ListenerCallback extends Callback {
+	protected transient Object listener;
+
+	public ListenerCallback(Method callbackMethod, Object listener) {
+		super( callbackMethod );
+		this.listener = listener;
+	}
+
+	public void invoke(Object bean) {
+		try {
+			callbackMethod.invoke( listener, new Object[]{bean} );
+		}
+		catch (InvocationTargetException e) {
+			//keep runtime exceptions as is
+			if ( e.getTargetException() instanceof RuntimeException ) {
+				throw (RuntimeException) e.getTargetException();
+			}
+			else {
+				throw new RuntimeException( e.getTargetException() );
+			}
+		}
+		catch (Exception e) {
+			throw new RuntimeException( e );
+		}
+	}
+
+	private void writeObject(ObjectOutputStream oos) throws IOException {
+		oos.defaultWriteObject();
+		oos.writeObject( listener.getClass().getName() );
+	}
+
+	private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
+		ois.defaultReadObject();
+		String listenerClass = (String) ois.readObject();
+		try {
+			listener = ReflectHelper.classForName( listenerClass, this.getClass() ).newInstance();
+		}
+		catch (InstantiationException e) {
+			throw new ClassNotFoundException( "Unable to load class:" + listenerClass, e );
+		}
+		catch (IllegalAccessException e) {
+			throw new ClassNotFoundException( "Unable to load class:" + listenerClass, e );
+		}
+	}
+}

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/instrument (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/instrument)

Deleted: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/instrument/InterceptFieldClassFileTransformer.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/instrument/InterceptFieldClassFileTransformer.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/instrument/InterceptFieldClassFileTransformer.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,64 +0,0 @@
-//$Id$
-package org.hibernate.ejb.instrument;
-
-import java.lang.instrument.IllegalClassFormatException;
-import java.security.ProtectionDomain;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.hibernate.bytecode.util.ClassFilter;
-import org.hibernate.bytecode.util.FieldFilter;
-import org.hibernate.cfg.Environment;
-
-/**
- * Enhance the classes allowing them to implements InterceptFieldEnabled
- * This interface is then used by Hibernate for some optimizations.
- *
- * @author Emmanuel Bernard
- */
-public class InterceptFieldClassFileTransformer implements javax.persistence.spi.ClassTransformer {
-	private org.hibernate.bytecode.ClassTransformer classTransformer;
-
-	public InterceptFieldClassFileTransformer(List<String> entities) {
-//		classTransformer = Environment.getBytecodeProvider().getEntityClassTransformer(
-//				null, entities.toArray( new String[ entities.size() ] )
-//		);
-		final List<String> copyEntities = new ArrayList<String>( entities.size() );
-		copyEntities.addAll( entities );
-		classTransformer = Environment.getBytecodeProvider().getTransformer(
-				//TODO change it to a static class to make it faster?
-				new ClassFilter() {
-					public boolean shouldInstrumentClass(String className) {
-						return copyEntities.contains( className );
-					}
-				},
-				//TODO change it to a static class to make it faster?
-				new FieldFilter() {
-
-					public boolean shouldInstrumentField(String className, String fieldName) {
-						return true;
-					}
-
-					public boolean shouldTransformFieldAccess(
-							String transformingClassName, String fieldOwnerClassName, String fieldName
-					) {
-						return true;
-					}
-				}
-		);
-	}
-
-	public byte[]
-			transform(
-			ClassLoader loader, String className, Class<?> classBeingRedefined,
-			ProtectionDomain protectionDomain, byte[] classfileBuffer
-	) throws IllegalClassFormatException {
-		try {
-			return classTransformer.transform( loader, className, classBeingRedefined,
-					protectionDomain, classfileBuffer );
-		}
-		catch (Exception e) {
-			throw new IllegalClassFormatException( e.getMessage() );
-		}
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/instrument/InterceptFieldClassFileTransformer.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/instrument/InterceptFieldClassFileTransformer.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/instrument/InterceptFieldClassFileTransformer.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/instrument/InterceptFieldClassFileTransformer.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,64 @@
+//$Id$
+package org.hibernate.ejb.instrument;
+
+import java.lang.instrument.IllegalClassFormatException;
+import java.security.ProtectionDomain;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.hibernate.bytecode.util.ClassFilter;
+import org.hibernate.bytecode.util.FieldFilter;
+import org.hibernate.cfg.Environment;
+
+/**
+ * Enhance the classes allowing them to implements InterceptFieldEnabled
+ * This interface is then used by Hibernate for some optimizations.
+ *
+ * @author Emmanuel Bernard
+ */
+public class InterceptFieldClassFileTransformer implements javax.persistence.spi.ClassTransformer {
+	private org.hibernate.bytecode.ClassTransformer classTransformer;
+
+	public InterceptFieldClassFileTransformer(List<String> entities) {
+//		classTransformer = Environment.getBytecodeProvider().getEntityClassTransformer(
+//				null, entities.toArray( new String[ entities.size() ] )
+//		);
+		final List<String> copyEntities = new ArrayList<String>( entities.size() );
+		copyEntities.addAll( entities );
+		classTransformer = Environment.getBytecodeProvider().getTransformer(
+				//TODO change it to a static class to make it faster?
+				new ClassFilter() {
+					public boolean shouldInstrumentClass(String className) {
+						return copyEntities.contains( className );
+					}
+				},
+				//TODO change it to a static class to make it faster?
+				new FieldFilter() {
+
+					public boolean shouldInstrumentField(String className, String fieldName) {
+						return true;
+					}
+
+					public boolean shouldTransformFieldAccess(
+							String transformingClassName, String fieldOwnerClassName, String fieldName
+					) {
+						return true;
+					}
+				}
+		);
+	}
+
+	public byte[]
+			transform(
+			ClassLoader loader, String className, Class<?> classBeingRedefined,
+			ProtectionDomain protectionDomain, byte[] classfileBuffer
+	) throws IllegalClassFormatException {
+		try {
+			return classTransformer.transform( loader, className, classBeingRedefined,
+					protectionDomain, classfileBuffer );
+		}
+		catch (Exception e) {
+			throw new IllegalClassFormatException( e.getMessage() );
+		}
+	}
+}

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging)

Deleted: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/ExplodedJarVisitor.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/ExplodedJarVisitor.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/ExplodedJarVisitor.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,66 +0,0 @@
-//$Id$
-package org.hibernate.ejb.packaging;
-
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.net.URL;
-import java.net.URISyntaxException;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * @author Emmanuel Bernard
- */
-public class ExplodedJarVisitor extends JarVisitor {
-	private static Log log = LogFactory.getLog( ExplodedJarVisitor.class );
-
-	public ExplodedJarVisitor(URL url, Filter[] filters) {
-		super( url, filters );
-	}
-
-	public ExplodedJarVisitor(String fileName, Filter[] filters) {
-		super( fileName, filters );
-	}
-
-	protected void doProcessElements() throws IOException {
-		File jarFile;
-		try {
-			jarFile = new File( jarUrl.toURI().getSchemeSpecificPart() );
-		}
-		catch (URISyntaxException e) {
-			log.warn( "Malformed url: " + jarUrl, e );
-			return;
-		}
-		if ( !jarFile.exists() ) {
-			log.warn( "Exploded jar does not exists (ignored): " + jarUrl );
-			return;
-		}
-		if ( !jarFile.isDirectory() ) {
-			log.warn( "Exploded jar file not a directory (ignored): " + jarUrl );
-			return;
-		}
-		getClassNamesInTree( jarFile, null );
-	}
-
-	private void getClassNamesInTree(File jarFile, String header) throws IOException {
-		File[] files = jarFile.listFiles();
-		header = header == null ? "" : header + "/";
-		for ( File localFile : files ) {
-			if ( !localFile.isDirectory() ) {
-				String entryName = localFile.getName();
-				addElement(
-						header + entryName,
-						new BufferedInputStream( new FileInputStream( localFile ) ),
-						new BufferedInputStream( new FileInputStream( localFile ) )
-				);
-
-			}
-			else {
-				getClassNamesInTree( localFile, header + localFile.getName() );
-			}
-		}
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/ExplodedJarVisitor.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/ExplodedJarVisitor.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/ExplodedJarVisitor.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/ExplodedJarVisitor.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,66 @@
+//$Id$
+package org.hibernate.ejb.packaging;
+
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.net.URL;
+import java.net.URISyntaxException;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class ExplodedJarVisitor extends JarVisitor {
+	private static Log log = LogFactory.getLog( ExplodedJarVisitor.class );
+
+	public ExplodedJarVisitor(URL url, Filter[] filters) {
+		super( url, filters );
+	}
+
+	public ExplodedJarVisitor(String fileName, Filter[] filters) {
+		super( fileName, filters );
+	}
+
+	protected void doProcessElements() throws IOException {
+		File jarFile;
+		try {
+			jarFile = new File( jarUrl.toURI().getSchemeSpecificPart() );
+		}
+		catch (URISyntaxException e) {
+			log.warn( "Malformed url: " + jarUrl, e );
+			return;
+		}
+		if ( !jarFile.exists() ) {
+			log.warn( "Exploded jar does not exists (ignored): " + jarUrl );
+			return;
+		}
+		if ( !jarFile.isDirectory() ) {
+			log.warn( "Exploded jar file not a directory (ignored): " + jarUrl );
+			return;
+		}
+		getClassNamesInTree( jarFile, null );
+	}
+
+	private void getClassNamesInTree(File jarFile, String header) throws IOException {
+		File[] files = jarFile.listFiles();
+		header = header == null ? "" : header + "/";
+		for ( File localFile : files ) {
+			if ( !localFile.isDirectory() ) {
+				String entryName = localFile.getName();
+				addElement(
+						header + entryName,
+						new BufferedInputStream( new FileInputStream( localFile ) ),
+						new BufferedInputStream( new FileInputStream( localFile ) )
+				);
+
+			}
+			else {
+				getClassNamesInTree( localFile, header + localFile.getName() );
+			}
+		}
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/FileZippedJarVisitor.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/FileZippedJarVisitor.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/FileZippedJarVisitor.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,56 +0,0 @@
-//$Id$
-package org.hibernate.ejb.packaging;
-
-import java.io.BufferedInputStream;
-import java.io.IOException;
-import java.net.URL;
-import java.net.URISyntaxException;
-import java.util.Enumeration;
-import java.util.jar.JarFile;
-import java.util.zip.ZipEntry;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * Work on a JAR that can be accessed through a File
- *
- * @author Emmanuel Bernard
- */
-public class FileZippedJarVisitor extends JarVisitor {
-	private static Log log = LogFactory.getLog( FileZippedJarVisitor.class );
-
-	public FileZippedJarVisitor(String fileName, Filter[] filters) {
-		super( fileName, filters );
-	}
-
-	public FileZippedJarVisitor(URL url, Filter[] filters) {
-		super( url, filters );
-	}
-
-	protected void doProcessElements() throws IOException {
-		JarFile jarFile;
-		try {
-			jarFile = new JarFile( jarUrl.toURI().getSchemeSpecificPart() );
-		}
-		catch (IOException ze) {
-			log.warn( "Unable to find file (ignored): " + jarUrl, ze );
-			return;
-		}
-		catch (URISyntaxException e) {
-			log.warn( "Malformed url: " + jarUrl, e );
-			return;
-		}
-		Enumeration<? extends ZipEntry> entries = jarFile.entries();
-		while ( entries.hasMoreElements() ) {
-			ZipEntry entry = entries.nextElement();
-			if ( !entry.isDirectory() ) {
-				addElement(
-						entry.getName(),
-						new BufferedInputStream( jarFile.getInputStream( entry ) ),
-						new BufferedInputStream( jarFile.getInputStream( entry ) )
-				);
-			}
-		}
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/FileZippedJarVisitor.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/FileZippedJarVisitor.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/FileZippedJarVisitor.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/FileZippedJarVisitor.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,56 @@
+//$Id$
+package org.hibernate.ejb.packaging;
+
+import java.io.BufferedInputStream;
+import java.io.IOException;
+import java.net.URL;
+import java.net.URISyntaxException;
+import java.util.Enumeration;
+import java.util.jar.JarFile;
+import java.util.zip.ZipEntry;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * Work on a JAR that can be accessed through a File
+ *
+ * @author Emmanuel Bernard
+ */
+public class FileZippedJarVisitor extends JarVisitor {
+	private static Log log = LogFactory.getLog( FileZippedJarVisitor.class );
+
+	public FileZippedJarVisitor(String fileName, Filter[] filters) {
+		super( fileName, filters );
+	}
+
+	public FileZippedJarVisitor(URL url, Filter[] filters) {
+		super( url, filters );
+	}
+
+	protected void doProcessElements() throws IOException {
+		JarFile jarFile;
+		try {
+			jarFile = new JarFile( jarUrl.toURI().getSchemeSpecificPart() );
+		}
+		catch (IOException ze) {
+			log.warn( "Unable to find file (ignored): " + jarUrl, ze );
+			return;
+		}
+		catch (URISyntaxException e) {
+			log.warn( "Malformed url: " + jarUrl, e );
+			return;
+		}
+		Enumeration<? extends ZipEntry> entries = jarFile.entries();
+		while ( entries.hasMoreElements() ) {
+			ZipEntry entry = entries.nextElement();
+			if ( !entry.isDirectory() ) {
+				addElement(
+						entry.getName(),
+						new BufferedInputStream( jarFile.getInputStream( entry ) ),
+						new BufferedInputStream( jarFile.getInputStream( entry ) )
+				);
+			}
+		}
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/InputStreamZippedJarVisitor.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/InputStreamZippedJarVisitor.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/InputStreamZippedJarVisitor.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,64 +0,0 @@
-//$Id$
-package org.hibernate.ejb.packaging;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.net.URL;
-import java.util.jar.JarEntry;
-import java.util.jar.JarInputStream;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * Work on a JAR that can only be accessed through a inputstream
- * This is less efficient than the {@link FileZippedJarVisitor}
- *
- * @author Emmanuel Bernard
- */
-public class InputStreamZippedJarVisitor extends JarVisitor {
-	private static Log log = LogFactory.getLog( InputStreamZippedJarVisitor.class );
-
-	public InputStreamZippedJarVisitor(URL url, Filter[] filters) {
-		super( url, filters );
-	}
-
-	public InputStreamZippedJarVisitor(String fileName, Filter[] filters) {
-		super( fileName, filters );
-	}
-
-	protected void doProcessElements() throws IOException {
-		JarInputStream jis;
-		try {
-			jis = new JarInputStream( jarUrl.openStream() );
-		}
-		catch (Exception ze) {
-			//really should catch IOException but Eclipse is buggy and raise NPE...
-			log.warn( "Unable to find file (ignored): " + jarUrl, ze );
-			return;
-		}
-		JarEntry entry;
-		while ( ( entry = jis.getNextJarEntry() ) != null ) {
-			if ( !entry.isDirectory() ) {
-				int size;
-				byte[] tmpByte = new byte[ 4096 ];
-				byte[] entryBytes = new byte[0];
-				for ( ; ; ) {
-					size = jis.read( tmpByte );
-					if ( size == -1 ) break;
-					byte[] current = new byte[ entryBytes.length + size ];
-					System.arraycopy( entryBytes, 0, current, 0, entryBytes.length );
-					System.arraycopy( tmpByte, 0, current, entryBytes.length, size );
-					entryBytes = current;
-				}
-				//this is bad cause we actually read everything instead of walking it lazily
-				addElement(
-						entry.getName(),
-						new ByteArrayInputStream( entryBytes ),
-						new ByteArrayInputStream( entryBytes )
-				);
-			}
-		}
-		jis.close();
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/InputStreamZippedJarVisitor.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/InputStreamZippedJarVisitor.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/InputStreamZippedJarVisitor.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/InputStreamZippedJarVisitor.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,64 @@
+//$Id$
+package org.hibernate.ejb.packaging;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.net.URL;
+import java.util.jar.JarEntry;
+import java.util.jar.JarInputStream;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * Work on a JAR that can only be accessed through a inputstream
+ * This is less efficient than the {@link FileZippedJarVisitor}
+ *
+ * @author Emmanuel Bernard
+ */
+public class InputStreamZippedJarVisitor extends JarVisitor {
+	private static Log log = LogFactory.getLog( InputStreamZippedJarVisitor.class );
+
+	public InputStreamZippedJarVisitor(URL url, Filter[] filters) {
+		super( url, filters );
+	}
+
+	public InputStreamZippedJarVisitor(String fileName, Filter[] filters) {
+		super( fileName, filters );
+	}
+
+	protected void doProcessElements() throws IOException {
+		JarInputStream jis;
+		try {
+			jis = new JarInputStream( jarUrl.openStream() );
+		}
+		catch (Exception ze) {
+			//really should catch IOException but Eclipse is buggy and raise NPE...
+			log.warn( "Unable to find file (ignored): " + jarUrl, ze );
+			return;
+		}
+		JarEntry entry;
+		while ( ( entry = jis.getNextJarEntry() ) != null ) {
+			if ( !entry.isDirectory() ) {
+				int size;
+				byte[] tmpByte = new byte[ 4096 ];
+				byte[] entryBytes = new byte[0];
+				for ( ; ; ) {
+					size = jis.read( tmpByte );
+					if ( size == -1 ) break;
+					byte[] current = new byte[ entryBytes.length + size ];
+					System.arraycopy( entryBytes, 0, current, 0, entryBytes.length );
+					System.arraycopy( tmpByte, 0, current, entryBytes.length, size );
+					entryBytes = current;
+				}
+				//this is bad cause we actually read everything instead of walking it lazily
+				addElement(
+						entry.getName(),
+						new ByteArrayInputStream( entryBytes ),
+						new ByteArrayInputStream( entryBytes )
+				);
+			}
+		}
+		jis.close();
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/JarVisitor.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/JarVisitor.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/JarVisitor.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,473 +0,0 @@
-package org.hibernate.ejb.packaging;
-
-import java.io.DataInputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URISyntaxException;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import javassist.bytecode.AnnotationsAttribute;
-import javassist.bytecode.ClassFile;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.hibernate.util.StringHelper;
-
-/**
- * Parse a JAR of any form (zip file, exploded directory, ...)
- * apply a set of filters (File filter, Class filter, Package filter)
- * and return the appropriate matching sets of elements
- *
- * @author Emmanuel Bernard
- */
-//TODO shortcut when filters are null or empty
-public abstract class JarVisitor {
-	private static Log log = LogFactory.getLog( JarVisitor.class );
-	protected String unqualifiedJarName;
-	protected URL jarUrl;
-	private boolean done = false;
-	private List<Filter> filters = new ArrayList<Filter>();
-	private Set<FileFilter> fileFilters = new HashSet<FileFilter>();
-	private Set<JavaElementFilter> classFilters = new HashSet<JavaElementFilter>();
-	;
-	private Set<JavaElementFilter> packageFilters = new HashSet<JavaElementFilter>();
-	private Set[] entries;
-
-	/**
-	 * Get the JAR URL of the JAR containing the given entry
-	 *
-	 * @param url
-	 * @param entry
-	 * @return the JAR URL
-	 * @throws IllegalArgumentException if none URL is found
-	 */
-	public static final URL getJarURLFromURLEntry(URL url, String entry) throws IllegalArgumentException {
-		URL jarUrl;
-		String file = url.getFile();
-		if ( ! entry.startsWith( "/" ) ) entry = "/" + entry;
-		file = file.substring( 0, file.length() - entry.length() );
-		if ( file.endsWith( "!" ) ) file = file.substring( 0, file.length() - 1 );
-		try {
-			String protocol = url.getProtocol();
-
-			if ( "jar".equals( protocol )
-					|| "wsjar".equals( protocol ) ) { //Websphere has it's own way
-				//Original URL is like jar:protocol
-				jarUrl = new URL( file );
-				if ( "file".equals( jarUrl.getProtocol() ) ) {
-					//Do some voodoo magic because WAS doesn't think escaping URL is an interesting feature
-					if ( file.indexOf( ' ' ) != -1 ) {
-						//not escaped, need to voodoo
-						jarUrl = new File( jarUrl.getFile() ).toURI().toURL(); //goes by toURI to escape the path
-					}
-				} //otherwise left as is
-			}
-			else if ( "zip".equals( protocol ) //Weblogic has it's own way
-					|| "code-source".equals( url.getProtocol() ) ) { //OC4J prevent ejb.jar access (ie everything without path)
-				//we have extracted the zip file, so it should be read as a file
-				//Just in case some containers are as stupid as WAS: luckily WAS is closed source so nobody will dupe the bug
-				if ( file.indexOf( ' ' ) != -1 ) {
-					//not escaped, need to voodoo
-					jarUrl = new File(file).toURI().toURL(); //goes by toURI to escape the path
-				}
-				else {
-					jarUrl = new File(file).toURL();
-				}
-			}
-			else {
-				jarUrl = new URL( protocol, url.getHost(), url.getPort(), file );
-			}
-		}
-		catch (MalformedURLException e) {
-			throw new IllegalArgumentException(
-					"Unable to determine JAR Url from " + url + ". Cause: " + e.getMessage()
-			);
-		}
-		log.trace("JAR URL from URL Entry: " + url + " >> " + jarUrl);
-		return jarUrl;
-	}
-
-	/**
-	 * Build a JarVisitor on the given JAR URL applying th given filters
-	 *
-	 * @throws IllegalArgumentException if the URL is malformed
-	 */
-	public static final JarVisitor getVisitor(URL jarUrl, Filter[] filters) throws IllegalArgumentException {
-		String protocol = jarUrl.getProtocol();
-		if ( "jar".equals( protocol ) ) {
-			//FIXME remove this code, this should not happen
-			return new InputStreamZippedJarVisitor( jarUrl, filters );
-		}
-		else if ( StringHelper.isEmpty( protocol ) || "file".equals( protocol ) ) {
-			File file;
-			try {
-				file = new File( jarUrl.toURI().getSchemeSpecificPart() );
-			}
-			catch (URISyntaxException e) {
-				throw new IllegalArgumentException(
-						"Unable to visit JAR " + jarUrl + ". Cause: " + e.getMessage()
-				);
-			}
-			if ( file.isDirectory() ) {
-				return new ExplodedJarVisitor( jarUrl, filters );
-			}
-			else {
-				return new FileZippedJarVisitor( jarUrl, filters );
-			}
-		}
-		else {
-			//let's assume the url can return the jar as a zip stream
-			return new InputStreamZippedJarVisitor( jarUrl, filters );
-		}
-	}
-
-	/**
-	 * Build a jar visitor from its jar string path
-	 */
-	private JarVisitor(String jarPath) {
-		URL jarUrl;
-		try {
-			//is it an url
-			jarUrl = new URL( jarPath );
-		}
-		catch (MalformedURLException e) {
-			try {
-				//consider it as a file path
-				jarUrl = new URL( "file:" + jarPath );
-			}
-			catch (MalformedURLException ee) {
-				throw new IllegalArgumentException( "Unable to find jar:" + jarPath, ee );
-			}
-		}
-		this.jarUrl = jarUrl;
-		unqualify();
-	}
-
-	protected JarVisitor(String fileName, Filter[] filters) {
-		this( fileName );
-		initFilters( filters );
-	}
-
-	private void initFilters(Filter[] filters) {
-		for ( Filter filter : filters ) {
-			if ( filter instanceof FileFilter ) {
-				fileFilters.add( (FileFilter) filter );
-			}
-			else if ( filter instanceof ClassFilter ) {
-				classFilters.add( (ClassFilter) filter );
-			}
-			else if ( filter instanceof PackageFilter ) {
-				packageFilters.add( (PackageFilter) filter );
-			}
-			else {
-				throw new AssertionError( "Unknown filter type: " + filter.getClass().getName() );
-			}
-			this.filters.add( filter );
-		}
-		int size = this.filters.size();
-		this.entries = new Set[ size ];
-		for ( int index = 0; index < size ; index++ ) {
-			this.entries[index] = new HashSet<Entry>();
-		}
-	}
-
-	protected JarVisitor(URL url, Filter[] filters) {
-		this( url );
-		initFilters( filters );
-	}
-
-	/**
-	 * Get a JarVisitor to the jar <code>jarPath</code> applying the given filters
-	 *
-	 * @throws IllegalArgumentException if the jarPath is incorrect
-	 */
-	public static final JarVisitor getVisitor(String jarPath, Filter[] filters) throws IllegalArgumentException {
-		File file = new File( jarPath );
-		if ( file.isFile() ) {
-			return new InputStreamZippedJarVisitor( jarPath, filters );
-		}
-		else {
-			return new ExplodedJarVisitor( jarPath, filters );
-		}
-	}
-
-	private JarVisitor(URL url) {
-		jarUrl = url;
-		unqualify();
-	}
-
-	protected void unqualify() {
-		//FIXME weak algorithm subject to AOOBE
-		String fileName = jarUrl.getFile();
-		int slash = fileName.lastIndexOf( "/" );
-		if ( slash != -1 ) {
-			fileName = fileName.substring(
-					fileName.lastIndexOf( "/" ) + 1,
-					fileName.length()
-			);
-		}
-		if ( fileName.length() > 4 && fileName.endsWith( "ar" ) && fileName.charAt( fileName.length() - 4 ) == '.' ) {
-			fileName = fileName.substring( 0, fileName.length() - 4 );
-		}
-		unqualifiedJarName = fileName;
-		log.debug( "Searching mapped entities in jar/par: " + jarUrl );
-	}
-
-	/**
-	 * Get the unqualified Jar name (ie wo path and wo extension)
-	 */
-	public String getUnqualifiedJarName() {
-		return unqualifiedJarName;
-	}
-
-	public Filter[] getFilters() {
-		return filters.toArray( new Filter[ filters.size() ] );
-	}
-
-	/**
-	 * Return the matching entries for each filter in the same order the filter where passed
-	 *
-	 * @return array of Set of JarVisitor.Entry
-	 * @throws IOException if something went wrong
-	 */
-	public final Set[] getMatchingEntries() throws IOException {
-		if ( !done ) {
-			//avoid url access and so on
-			if ( filters.size() > 0 ) doProcessElements();
-			done = true;
-		}
-		return entries;
-	}
-
-	protected abstract void doProcessElements() throws IOException;
-
-	//TODO avoid 2 input stream when not needed
-	protected final void addElement(String entryName, InputStream is, InputStream secondIs) throws IOException {
-		if ( entryName.endsWith( "package-info.class" ) ) {
-			String name = entryName.substring( 0, entryName.length() - ".package-info.class".length() )
-					.replace( '/', '.' );
-			executeJavaElementFilter( name, packageFilters, is, secondIs );
-		}
-		else if ( entryName.endsWith( ".class" ) ) {
-			String name = entryName.substring( 0, entryName.length() - ".class".length() ).replace( '/', '.' );
-			log.debug( "Filtering: " + name );
-			executeJavaElementFilter( name, classFilters, is, secondIs );
-		}
-		else {
-			String name = entryName;
-			boolean accepted = false;
-			for ( FileFilter filter : fileFilters ) {
-				if ( filter.accept( name ) ) {
-					accepted = true;
-					InputStream localIs;
-					if ( filter.getStream() ) {
-						localIs = secondIs;
-					}
-					else {
-						localIs = null;
-						secondIs.close();
-					}
-					is.close();
-					log.debug( "File Filter matched for " + name );
-					Entry entry = new Entry( name, localIs );
-					int index = this.filters.indexOf( filter );
-					this.entries[index].add( entry );
-				}
-			}
-			if (!accepted) {
-				//not accepted free resources
-				is.close();
-				secondIs.close();
-			}
-		}
-	}
-
-	private void executeJavaElementFilter(
-			String name, Set<JavaElementFilter> filters, InputStream is, InputStream secondIs
-	) throws IOException {
-		boolean accepted = false;
-		for ( JavaElementFilter filter : filters ) {
-			if ( filter.accept( name ) ) {
-				//FIXME cannot currently have a class filtered twice but matching once
-				// need to copy the is
-				boolean match = checkAnnotationMatching( is, filter );
-				if ( match ) {
-					accepted = true;
-					InputStream localIs;
-					if ( filter.getStream() ) {
-						localIs = secondIs;
-					}
-					else {
-						localIs = null;
-						secondIs.close();
-					}
-					log.debug( "Java element filter matched for " + name );
-					Entry entry = new Entry( name, localIs );
-					int index = this.filters.indexOf( filter );
-					this.entries[index].add( entry );
-					break; //we matched
-				}
-			}
-		}
-		if (!accepted) {
-			is.close();
-			secondIs.close();
-		}
-	}
-
-	private boolean checkAnnotationMatching(InputStream is, JavaElementFilter filter) throws IOException {
-		if ( filter.getAnnotations().length == 0 ) {
-			is.close();
-			return true;
-		}
-		DataInputStream dstream = new DataInputStream( is );
-		ClassFile cf = null;
-
-		try {
-			cf = new ClassFile( dstream );
-		}
-		finally {
-			dstream.close();
-			is.close();
-		}
-		boolean match = false;
-		AnnotationsAttribute visible = (AnnotationsAttribute) cf.getAttribute( AnnotationsAttribute.visibleTag );
-		if ( visible != null ) {
-			for ( Class annotation : filter.getAnnotations() ) {
-				match = visible.getAnnotation( annotation.getName() ) != null;
-				if ( match ) break;
-			}
-		}
-		return match;
-	}
-
-	/**
-	 * Filter used when searching elements in a JAR
-	 */
-	public static abstract class Filter {
-		private boolean retrieveStream;
-
-		protected Filter(boolean retrieveStream) {
-			this.retrieveStream = retrieveStream;
-		}
-
-		public boolean getStream() {
-			return retrieveStream;
-		}
-	}
-
-	/**
-	 * Filter use to match a file by its name
-	 */
-	public static abstract class FileFilter extends Filter {
-
-		/**
-		 * @param retrieveStream Give back an open stream to the matching element or not
-		 */
-		public FileFilter(boolean retrieveStream) {
-			super( retrieveStream );
-		}
-
-		/**
-		 * Return true if the fully qualified file name match
-		 */
-		public abstract boolean accept(String name);
-	}
-
-	/**
-	 * Filter a Java element (class or package per fully qualified name and annotation existence)
-	 * At least 1 annotation has to annotate the element and the accept method must match
-	 * If none annotations are passed, only the accept method must pass.
-	 */
-	public static abstract class JavaElementFilter extends Filter {
-		private Class[] annotations;
-
-		/**
-		 * @param retrieveStream Give back an open stream to the matching element or not
-		 * @param annotations	Array of annotations that must be present to match (1 of them should annotate the element
-		 */
-		protected JavaElementFilter(boolean retrieveStream, Class[] annotations) {
-			super( retrieveStream );
-			this.annotations = annotations == null ? new Class[]{} : annotations;
-		}
-
-		public Class[] getAnnotations() {
-			return annotations;
-		}
-
-		/**
-		 * Return true if the fully qualified name match
-		 */
-		public abstract boolean accept(String javaElementName);
-	}
-
-	/**
-	 * Filter on class elements
-	 *
-	 * @see JavaElementFilter
-	 */
-	public static abstract class ClassFilter extends JavaElementFilter {
-		/**
-		 * @see JavaElementFilter#JavaElementFilter(boolean, Class[])
-		 */
-		protected ClassFilter(boolean retrieveStream, Class[] annotations) {
-			super( retrieveStream, annotations );
-		}
-	}
-
-	/**
-	 * Filter on pachage element
-	 *
-	 * @see JavaElementFilter
-	 */
-	public static abstract class PackageFilter extends JavaElementFilter {
-		/**
-		 * @see JavaElementFilter#JavaElementFilter(boolean, Class[])
-		 */
-		protected PackageFilter(boolean retrieveStream, Class[] annotations) {
-			super( retrieveStream, annotations );
-		}
-	}
-
-	/**
-	 * Represent a JAR entry
-	 * Contains a name and an optional Input stream to the entry
-	 */
-	public static class Entry {
-		private String name;
-		private InputStream is;
-
-		public Entry(String name, InputStream is) {
-			this.name = name;
-			this.is = is;
-		}
-
-		public String getName() {
-			return name;
-		}
-
-		public InputStream getInputStream() {
-			return is;
-		}
-
-		public boolean equals(Object o) {
-			if ( this == o ) return true;
-			if ( o == null || getClass() != o.getClass() ) return false;
-
-			final Entry entry = (Entry) o;
-
-			if ( !name.equals( entry.name ) ) return false;
-
-			return true;
-		}
-
-		public int hashCode() {
-			return name.hashCode();
-		}
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/JarVisitor.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/JarVisitor.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/JarVisitor.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/JarVisitor.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,473 @@
+package org.hibernate.ejb.packaging;
+
+import java.io.DataInputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import javassist.bytecode.AnnotationsAttribute;
+import javassist.bytecode.ClassFile;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.hibernate.util.StringHelper;
+
+/**
+ * Parse a JAR of any form (zip file, exploded directory, ...)
+ * apply a set of filters (File filter, Class filter, Package filter)
+ * and return the appropriate matching sets of elements
+ *
+ * @author Emmanuel Bernard
+ */
+//TODO shortcut when filters are null or empty
+public abstract class JarVisitor {
+	private static Log log = LogFactory.getLog( JarVisitor.class );
+	protected String unqualifiedJarName;
+	protected URL jarUrl;
+	private boolean done = false;
+	private List<Filter> filters = new ArrayList<Filter>();
+	private Set<FileFilter> fileFilters = new HashSet<FileFilter>();
+	private Set<JavaElementFilter> classFilters = new HashSet<JavaElementFilter>();
+	;
+	private Set<JavaElementFilter> packageFilters = new HashSet<JavaElementFilter>();
+	private Set[] entries;
+
+	/**
+	 * Get the JAR URL of the JAR containing the given entry
+	 *
+	 * @param url
+	 * @param entry
+	 * @return the JAR URL
+	 * @throws IllegalArgumentException if none URL is found
+	 */
+	public static final URL getJarURLFromURLEntry(URL url, String entry) throws IllegalArgumentException {
+		URL jarUrl;
+		String file = url.getFile();
+		if ( ! entry.startsWith( "/" ) ) entry = "/" + entry;
+		file = file.substring( 0, file.length() - entry.length() );
+		if ( file.endsWith( "!" ) ) file = file.substring( 0, file.length() - 1 );
+		try {
+			String protocol = url.getProtocol();
+
+			if ( "jar".equals( protocol )
+					|| "wsjar".equals( protocol ) ) { //Websphere has it's own way
+				//Original URL is like jar:protocol
+				jarUrl = new URL( file );
+				if ( "file".equals( jarUrl.getProtocol() ) ) {
+					//Do some voodoo magic because WAS doesn't think escaping URL is an interesting feature
+					if ( file.indexOf( ' ' ) != -1 ) {
+						//not escaped, need to voodoo
+						jarUrl = new File( jarUrl.getFile() ).toURI().toURL(); //goes by toURI to escape the path
+					}
+				} //otherwise left as is
+			}
+			else if ( "zip".equals( protocol ) //Weblogic has it's own way
+					|| "code-source".equals( url.getProtocol() ) ) { //OC4J prevent ejb.jar access (ie everything without path)
+				//we have extracted the zip file, so it should be read as a file
+				//Just in case some containers are as stupid as WAS: luckily WAS is closed source so nobody will dupe the bug
+				if ( file.indexOf( ' ' ) != -1 ) {
+					//not escaped, need to voodoo
+					jarUrl = new File(file).toURI().toURL(); //goes by toURI to escape the path
+				}
+				else {
+					jarUrl = new File(file).toURL();
+				}
+			}
+			else {
+				jarUrl = new URL( protocol, url.getHost(), url.getPort(), file );
+			}
+		}
+		catch (MalformedURLException e) {
+			throw new IllegalArgumentException(
+					"Unable to determine JAR Url from " + url + ". Cause: " + e.getMessage()
+			);
+		}
+		log.trace("JAR URL from URL Entry: " + url + " >> " + jarUrl);
+		return jarUrl;
+	}
+
+	/**
+	 * Build a JarVisitor on the given JAR URL applying th given filters
+	 *
+	 * @throws IllegalArgumentException if the URL is malformed
+	 */
+	public static final JarVisitor getVisitor(URL jarUrl, Filter[] filters) throws IllegalArgumentException {
+		String protocol = jarUrl.getProtocol();
+		if ( "jar".equals( protocol ) ) {
+			//FIXME remove this code, this should not happen
+			return new InputStreamZippedJarVisitor( jarUrl, filters );
+		}
+		else if ( StringHelper.isEmpty( protocol ) || "file".equals( protocol ) ) {
+			File file;
+			try {
+				file = new File( jarUrl.toURI().getSchemeSpecificPart() );
+			}
+			catch (URISyntaxException e) {
+				throw new IllegalArgumentException(
+						"Unable to visit JAR " + jarUrl + ". Cause: " + e.getMessage()
+				);
+			}
+			if ( file.isDirectory() ) {
+				return new ExplodedJarVisitor( jarUrl, filters );
+			}
+			else {
+				return new FileZippedJarVisitor( jarUrl, filters );
+			}
+		}
+		else {
+			//let's assume the url can return the jar as a zip stream
+			return new InputStreamZippedJarVisitor( jarUrl, filters );
+		}
+	}
+
+	/**
+	 * Build a jar visitor from its jar string path
+	 */
+	private JarVisitor(String jarPath) {
+		URL jarUrl;
+		try {
+			//is it an url
+			jarUrl = new URL( jarPath );
+		}
+		catch (MalformedURLException e) {
+			try {
+				//consider it as a file path
+				jarUrl = new URL( "file:" + jarPath );
+			}
+			catch (MalformedURLException ee) {
+				throw new IllegalArgumentException( "Unable to find jar:" + jarPath, ee );
+			}
+		}
+		this.jarUrl = jarUrl;
+		unqualify();
+	}
+
+	protected JarVisitor(String fileName, Filter[] filters) {
+		this( fileName );
+		initFilters( filters );
+	}
+
+	private void initFilters(Filter[] filters) {
+		for ( Filter filter : filters ) {
+			if ( filter instanceof FileFilter ) {
+				fileFilters.add( (FileFilter) filter );
+			}
+			else if ( filter instanceof ClassFilter ) {
+				classFilters.add( (ClassFilter) filter );
+			}
+			else if ( filter instanceof PackageFilter ) {
+				packageFilters.add( (PackageFilter) filter );
+			}
+			else {
+				throw new AssertionError( "Unknown filter type: " + filter.getClass().getName() );
+			}
+			this.filters.add( filter );
+		}
+		int size = this.filters.size();
+		this.entries = new Set[ size ];
+		for ( int index = 0; index < size ; index++ ) {
+			this.entries[index] = new HashSet<Entry>();
+		}
+	}
+
+	protected JarVisitor(URL url, Filter[] filters) {
+		this( url );
+		initFilters( filters );
+	}
+
+	/**
+	 * Get a JarVisitor to the jar <code>jarPath</code> applying the given filters
+	 *
+	 * @throws IllegalArgumentException if the jarPath is incorrect
+	 */
+	public static final JarVisitor getVisitor(String jarPath, Filter[] filters) throws IllegalArgumentException {
+		File file = new File( jarPath );
+		if ( file.isFile() ) {
+			return new InputStreamZippedJarVisitor( jarPath, filters );
+		}
+		else {
+			return new ExplodedJarVisitor( jarPath, filters );
+		}
+	}
+
+	private JarVisitor(URL url) {
+		jarUrl = url;
+		unqualify();
+	}
+
+	protected void unqualify() {
+		//FIXME weak algorithm subject to AOOBE
+		String fileName = jarUrl.getFile();
+		int slash = fileName.lastIndexOf( "/" );
+		if ( slash != -1 ) {
+			fileName = fileName.substring(
+					fileName.lastIndexOf( "/" ) + 1,
+					fileName.length()
+			);
+		}
+		if ( fileName.length() > 4 && fileName.endsWith( "ar" ) && fileName.charAt( fileName.length() - 4 ) == '.' ) {
+			fileName = fileName.substring( 0, fileName.length() - 4 );
+		}
+		unqualifiedJarName = fileName;
+		log.debug( "Searching mapped entities in jar/par: " + jarUrl );
+	}
+
+	/**
+	 * Get the unqualified Jar name (ie wo path and wo extension)
+	 */
+	public String getUnqualifiedJarName() {
+		return unqualifiedJarName;
+	}
+
+	public Filter[] getFilters() {
+		return filters.toArray( new Filter[ filters.size() ] );
+	}
+
+	/**
+	 * Return the matching entries for each filter in the same order the filter where passed
+	 *
+	 * @return array of Set of JarVisitor.Entry
+	 * @throws IOException if something went wrong
+	 */
+	public final Set[] getMatchingEntries() throws IOException {
+		if ( !done ) {
+			//avoid url access and so on
+			if ( filters.size() > 0 ) doProcessElements();
+			done = true;
+		}
+		return entries;
+	}
+
+	protected abstract void doProcessElements() throws IOException;
+
+	//TODO avoid 2 input stream when not needed
+	protected final void addElement(String entryName, InputStream is, InputStream secondIs) throws IOException {
+		if ( entryName.endsWith( "package-info.class" ) ) {
+			String name = entryName.substring( 0, entryName.length() - ".package-info.class".length() )
+					.replace( '/', '.' );
+			executeJavaElementFilter( name, packageFilters, is, secondIs );
+		}
+		else if ( entryName.endsWith( ".class" ) ) {
+			String name = entryName.substring( 0, entryName.length() - ".class".length() ).replace( '/', '.' );
+			log.debug( "Filtering: " + name );
+			executeJavaElementFilter( name, classFilters, is, secondIs );
+		}
+		else {
+			String name = entryName;
+			boolean accepted = false;
+			for ( FileFilter filter : fileFilters ) {
+				if ( filter.accept( name ) ) {
+					accepted = true;
+					InputStream localIs;
+					if ( filter.getStream() ) {
+						localIs = secondIs;
+					}
+					else {
+						localIs = null;
+						secondIs.close();
+					}
+					is.close();
+					log.debug( "File Filter matched for " + name );
+					Entry entry = new Entry( name, localIs );
+					int index = this.filters.indexOf( filter );
+					this.entries[index].add( entry );
+				}
+			}
+			if (!accepted) {
+				//not accepted free resources
+				is.close();
+				secondIs.close();
+			}
+		}
+	}
+
+	private void executeJavaElementFilter(
+			String name, Set<JavaElementFilter> filters, InputStream is, InputStream secondIs
+	) throws IOException {
+		boolean accepted = false;
+		for ( JavaElementFilter filter : filters ) {
+			if ( filter.accept( name ) ) {
+				//FIXME cannot currently have a class filtered twice but matching once
+				// need to copy the is
+				boolean match = checkAnnotationMatching( is, filter );
+				if ( match ) {
+					accepted = true;
+					InputStream localIs;
+					if ( filter.getStream() ) {
+						localIs = secondIs;
+					}
+					else {
+						localIs = null;
+						secondIs.close();
+					}
+					log.debug( "Java element filter matched for " + name );
+					Entry entry = new Entry( name, localIs );
+					int index = this.filters.indexOf( filter );
+					this.entries[index].add( entry );
+					break; //we matched
+				}
+			}
+		}
+		if (!accepted) {
+			is.close();
+			secondIs.close();
+		}
+	}
+
+	private boolean checkAnnotationMatching(InputStream is, JavaElementFilter filter) throws IOException {
+		if ( filter.getAnnotations().length == 0 ) {
+			is.close();
+			return true;
+		}
+		DataInputStream dstream = new DataInputStream( is );
+		ClassFile cf = null;
+
+		try {
+			cf = new ClassFile( dstream );
+		}
+		finally {
+			dstream.close();
+			is.close();
+		}
+		boolean match = false;
+		AnnotationsAttribute visible = (AnnotationsAttribute) cf.getAttribute( AnnotationsAttribute.visibleTag );
+		if ( visible != null ) {
+			for ( Class annotation : filter.getAnnotations() ) {
+				match = visible.getAnnotation( annotation.getName() ) != null;
+				if ( match ) break;
+			}
+		}
+		return match;
+	}
+
+	/**
+	 * Filter used when searching elements in a JAR
+	 */
+	public static abstract class Filter {
+		private boolean retrieveStream;
+
+		protected Filter(boolean retrieveStream) {
+			this.retrieveStream = retrieveStream;
+		}
+
+		public boolean getStream() {
+			return retrieveStream;
+		}
+	}
+
+	/**
+	 * Filter use to match a file by its name
+	 */
+	public static abstract class FileFilter extends Filter {
+
+		/**
+		 * @param retrieveStream Give back an open stream to the matching element or not
+		 */
+		public FileFilter(boolean retrieveStream) {
+			super( retrieveStream );
+		}
+
+		/**
+		 * Return true if the fully qualified file name match
+		 */
+		public abstract boolean accept(String name);
+	}
+
+	/**
+	 * Filter a Java element (class or package per fully qualified name and annotation existence)
+	 * At least 1 annotation has to annotate the element and the accept method must match
+	 * If none annotations are passed, only the accept method must pass.
+	 */
+	public static abstract class JavaElementFilter extends Filter {
+		private Class[] annotations;
+
+		/**
+		 * @param retrieveStream Give back an open stream to the matching element or not
+		 * @param annotations	Array of annotations that must be present to match (1 of them should annotate the element
+		 */
+		protected JavaElementFilter(boolean retrieveStream, Class[] annotations) {
+			super( retrieveStream );
+			this.annotations = annotations == null ? new Class[]{} : annotations;
+		}
+
+		public Class[] getAnnotations() {
+			return annotations;
+		}
+
+		/**
+		 * Return true if the fully qualified name match
+		 */
+		public abstract boolean accept(String javaElementName);
+	}
+
+	/**
+	 * Filter on class elements
+	 *
+	 * @see JavaElementFilter
+	 */
+	public static abstract class ClassFilter extends JavaElementFilter {
+		/**
+		 * @see JavaElementFilter#JavaElementFilter(boolean, Class[])
+		 */
+		protected ClassFilter(boolean retrieveStream, Class[] annotations) {
+			super( retrieveStream, annotations );
+		}
+	}
+
+	/**
+	 * Filter on pachage element
+	 *
+	 * @see JavaElementFilter
+	 */
+	public static abstract class PackageFilter extends JavaElementFilter {
+		/**
+		 * @see JavaElementFilter#JavaElementFilter(boolean, Class[])
+		 */
+		protected PackageFilter(boolean retrieveStream, Class[] annotations) {
+			super( retrieveStream, annotations );
+		}
+	}
+
+	/**
+	 * Represent a JAR entry
+	 * Contains a name and an optional Input stream to the entry
+	 */
+	public static class Entry {
+		private String name;
+		private InputStream is;
+
+		public Entry(String name, InputStream is) {
+			this.name = name;
+			this.is = is;
+		}
+
+		public String getName() {
+			return name;
+		}
+
+		public InputStream getInputStream() {
+			return is;
+		}
+
+		public boolean equals(Object o) {
+			if ( this == o ) return true;
+			if ( o == null || getClass() != o.getClass() ) return false;
+
+			final Entry entry = (Entry) o;
+
+			if ( !name.equals( entry.name ) ) return false;
+
+			return true;
+		}
+
+		public int hashCode() {
+			return name.hashCode();
+		}
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/NamedInputStream.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/NamedInputStream.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/NamedInputStream.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,33 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.packaging;
-
-import java.io.InputStream;
-
-/**
- * @author Emmanuel Bernard
- */
-public class NamedInputStream {
-	public NamedInputStream(String name, InputStream stream) {
-		this.name = name;
-		this.stream = stream;
-	}
-
-	private String name;
-	private InputStream stream;
-
-	public InputStream getStream() {
-		return stream;
-	}
-
-	public void setStream(InputStream stream) {
-		this.stream = stream;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/NamedInputStream.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/NamedInputStream.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/NamedInputStream.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/NamedInputStream.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,33 @@
+//$Id: $
+package org.hibernate.ejb.packaging;
+
+import java.io.InputStream;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class NamedInputStream {
+	public NamedInputStream(String name, InputStream stream) {
+		this.name = name;
+		this.stream = stream;
+	}
+
+	private String name;
+	private InputStream stream;
+
+	public InputStream getStream() {
+		return stream;
+	}
+
+	public void setStream(InputStream stream) {
+		this.stream = stream;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/PersistenceMetadata.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/PersistenceMetadata.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/PersistenceMetadata.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,185 +0,0 @@
-package org.hibernate.ejb.packaging;
-
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Properties;
-import java.util.Set;
-import java.util.Map;
-import javax.persistence.spi.PersistenceUnitTransactionType;
-
-/**
- * Simple represenation of persistence.xml
- *
- * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
- * @version $Revision$
- */
-public class PersistenceMetadata {
-
-	private String name;
-	private String nonJtaDatasource;
-	private String jtaDatasource;
-	private String provider;
-	private PersistenceUnitTransactionType transactionType;
-	private List<String> classes = new ArrayList<String>();
-	private List<String> packages = new ArrayList<String>();
-	private List<String> mappingFiles = new ArrayList<String>();
-	private Set<String> jarFiles = new HashSet<String>();
-	private List<NamedInputStream> hbmfiles = new ArrayList<NamedInputStream>();
-	private Properties props = new Properties();
-	private boolean excludeUnlistedClasses = false;
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	public PersistenceUnitTransactionType getTransactionType() {
-		return transactionType;
-	}
-
-	public void setTransactionType(PersistenceUnitTransactionType transactionType) {
-		this.transactionType = transactionType;
-	}
-
-	public String getNonJtaDatasource() {
-		return nonJtaDatasource;
-	}
-
-	public void setNonJtaDatasource(String nonJtaDatasource) {
-		this.nonJtaDatasource = nonJtaDatasource;
-	}
-
-	public String getJtaDatasource() {
-		return jtaDatasource;
-	}
-
-	public void setJtaDatasource(String jtaDatasource) {
-		this.jtaDatasource = jtaDatasource;
-	}
-
-	public String getProvider() {
-		return provider;
-	}
-
-	public void setProvider(String provider) {
-		if ( provider != null && provider.endsWith( ".class" ) ) {
-			this.provider = provider.substring( 0, provider.length() - 6 );
-		}
-		this.provider = provider;
-	}
-
-	public List<String> getClasses() {
-		return classes;
-	}
-
-	public void setClasses(List<String> classes) {
-		this.classes = classes;
-	}
-
-	public List<String> getPackages() {
-		return packages;
-	}
-
-	public void setPackages(List<String> packages) {
-		this.packages = packages;
-	}
-
-	public List<String> getMappingFiles() {
-		return mappingFiles;
-	}
-
-	public void setMappingFiles(List<String> mappingFiles) {
-		this.mappingFiles = mappingFiles;
-	}
-
-	public Set<String> getJarFiles() {
-		return jarFiles;
-	}
-
-	public void setJarFiles(Set<String> jarFiles) {
-		this.jarFiles = jarFiles;
-	}
-
-	public Properties getProps() {
-		return props;
-	}
-
-	public void setProps(Properties props) {
-		this.props = props;
-	}
-
-	public List<NamedInputStream> getHbmfiles() {
-		return hbmfiles;
-	}
-
-	/**
-	 * @deprecated use getHbmfiles() rather
-	 */
-	public void setHbmfiles(List<NamedInputStream> hbmfiles) {
-		this.hbmfiles = hbmfiles;
-	}
-
-	public boolean getExcludeUnlistedClasses() {
-		return excludeUnlistedClasses;
-	}
-
-	public void setExcludeUnlistedClasses(boolean excludeUnlistedClasses) {
-		this.excludeUnlistedClasses = excludeUnlistedClasses;
-	}
-
-	@Override
-	public String toString() {
-		StringBuilder sb = new StringBuilder();
-		sb.append( "PersistenceMetadata [\n")
-				.append("\tname: ").append(name).append("\n")
-				.append("\tjtaDataSource: ").append(jtaDatasource).append("\n")
-				.append("\tnonJtaDataSource: ").append(nonJtaDatasource).append("\n")
-				.append("\ttransactionType: ").append(transactionType).append("\n")
-				.append("\tprovider: ").append(provider).append("\n")
-				.append("\tclasses[\n");
-		if (classes != null) {
-			for (String elt : classes) {
-				sb.append("\t\t").append( elt );
-			}
-		}
-		sb.append( "\t]\n")
-				.append("\tpackages[\n");
-		if (packages != null) {
-			for (String elt : packages) {
-				sb.append("\t\t").append( elt ).append("\n");
-			}
-		}
-		sb.append( "\t]\n")
-				.append("\tmappingFiles[\n");
-		if (mappingFiles != null) {
-			for (String elt : mappingFiles) {
-				sb.append("\t\t").append( elt ).append("\n");
-			}
-		}
-		sb.append( "\t]\n")
-				.append("\tjarFiles[\n");
-		if (jarFiles != null) {
-			for (String elt : jarFiles) {
-				sb.append("\t\t").append( elt ).append("\n");
-			}
-		}
-		sb.append( "\t]\n")
-				.append("\thbmfiles: ")
-				.append( hbmfiles != null ? hbmfiles.size() : 0 ).append("\n")
-				.append("\tproperties[\n");
-
-		if (props != null) {
-			for ( Map.Entry elt : props.entrySet()) {
-				sb.append("\t\t").append( elt.getKey() ).append(": ").append( elt.getValue() ).append("\n");
-			}
-		}
-		sb.append( "\t]").append( "]");
-
-		return sb.toString();
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/PersistenceMetadata.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/PersistenceMetadata.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/PersistenceMetadata.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/PersistenceMetadata.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,185 @@
+package org.hibernate.ejb.packaging;
+
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Properties;
+import java.util.Set;
+import java.util.Map;
+import javax.persistence.spi.PersistenceUnitTransactionType;
+
+/**
+ * Simple represenation of persistence.xml
+ *
+ * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
+ * @version $Revision$
+ */
+public class PersistenceMetadata {
+
+	private String name;
+	private String nonJtaDatasource;
+	private String jtaDatasource;
+	private String provider;
+	private PersistenceUnitTransactionType transactionType;
+	private List<String> classes = new ArrayList<String>();
+	private List<String> packages = new ArrayList<String>();
+	private List<String> mappingFiles = new ArrayList<String>();
+	private Set<String> jarFiles = new HashSet<String>();
+	private List<NamedInputStream> hbmfiles = new ArrayList<NamedInputStream>();
+	private Properties props = new Properties();
+	private boolean excludeUnlistedClasses = false;
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public PersistenceUnitTransactionType getTransactionType() {
+		return transactionType;
+	}
+
+	public void setTransactionType(PersistenceUnitTransactionType transactionType) {
+		this.transactionType = transactionType;
+	}
+
+	public String getNonJtaDatasource() {
+		return nonJtaDatasource;
+	}
+
+	public void setNonJtaDatasource(String nonJtaDatasource) {
+		this.nonJtaDatasource = nonJtaDatasource;
+	}
+
+	public String getJtaDatasource() {
+		return jtaDatasource;
+	}
+
+	public void setJtaDatasource(String jtaDatasource) {
+		this.jtaDatasource = jtaDatasource;
+	}
+
+	public String getProvider() {
+		return provider;
+	}
+
+	public void setProvider(String provider) {
+		if ( provider != null && provider.endsWith( ".class" ) ) {
+			this.provider = provider.substring( 0, provider.length() - 6 );
+		}
+		this.provider = provider;
+	}
+
+	public List<String> getClasses() {
+		return classes;
+	}
+
+	public void setClasses(List<String> classes) {
+		this.classes = classes;
+	}
+
+	public List<String> getPackages() {
+		return packages;
+	}
+
+	public void setPackages(List<String> packages) {
+		this.packages = packages;
+	}
+
+	public List<String> getMappingFiles() {
+		return mappingFiles;
+	}
+
+	public void setMappingFiles(List<String> mappingFiles) {
+		this.mappingFiles = mappingFiles;
+	}
+
+	public Set<String> getJarFiles() {
+		return jarFiles;
+	}
+
+	public void setJarFiles(Set<String> jarFiles) {
+		this.jarFiles = jarFiles;
+	}
+
+	public Properties getProps() {
+		return props;
+	}
+
+	public void setProps(Properties props) {
+		this.props = props;
+	}
+
+	public List<NamedInputStream> getHbmfiles() {
+		return hbmfiles;
+	}
+
+	/**
+	 * @deprecated use getHbmfiles() rather
+	 */
+	public void setHbmfiles(List<NamedInputStream> hbmfiles) {
+		this.hbmfiles = hbmfiles;
+	}
+
+	public boolean getExcludeUnlistedClasses() {
+		return excludeUnlistedClasses;
+	}
+
+	public void setExcludeUnlistedClasses(boolean excludeUnlistedClasses) {
+		this.excludeUnlistedClasses = excludeUnlistedClasses;
+	}
+
+	@Override
+	public String toString() {
+		StringBuilder sb = new StringBuilder();
+		sb.append( "PersistenceMetadata [\n")
+				.append("\tname: ").append(name).append("\n")
+				.append("\tjtaDataSource: ").append(jtaDatasource).append("\n")
+				.append("\tnonJtaDataSource: ").append(nonJtaDatasource).append("\n")
+				.append("\ttransactionType: ").append(transactionType).append("\n")
+				.append("\tprovider: ").append(provider).append("\n")
+				.append("\tclasses[\n");
+		if (classes != null) {
+			for (String elt : classes) {
+				sb.append("\t\t").append( elt );
+			}
+		}
+		sb.append( "\t]\n")
+				.append("\tpackages[\n");
+		if (packages != null) {
+			for (String elt : packages) {
+				sb.append("\t\t").append( elt ).append("\n");
+			}
+		}
+		sb.append( "\t]\n")
+				.append("\tmappingFiles[\n");
+		if (mappingFiles != null) {
+			for (String elt : mappingFiles) {
+				sb.append("\t\t").append( elt ).append("\n");
+			}
+		}
+		sb.append( "\t]\n")
+				.append("\tjarFiles[\n");
+		if (jarFiles != null) {
+			for (String elt : jarFiles) {
+				sb.append("\t\t").append( elt ).append("\n");
+			}
+		}
+		sb.append( "\t]\n")
+				.append("\thbmfiles: ")
+				.append( hbmfiles != null ? hbmfiles.size() : 0 ).append("\n")
+				.append("\tproperties[\n");
+
+		if (props != null) {
+			for ( Map.Entry elt : props.entrySet()) {
+				sb.append("\t\t").append( elt.getKey() ).append(": ").append( elt.getValue() ).append("\n");
+			}
+		}
+		sb.append( "\t]").append( "]");
+
+		return sb.toString();
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/PersistenceXmlLoader.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/PersistenceXmlLoader.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/PersistenceXmlLoader.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,250 +0,0 @@
-package org.hibernate.ejb.packaging;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.net.URLConnection;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import javax.persistence.PersistenceException;
-import javax.persistence.spi.PersistenceUnitTransactionType;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.hibernate.cfg.EJB3DTDEntityResolver;
-import org.hibernate.ejb.HibernatePersistence;
-import org.hibernate.ejb.util.ConfigurationHelper;
-import org.hibernate.util.StringHelper;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.xml.sax.EntityResolver;
-import org.xml.sax.ErrorHandler;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXParseException;
-
-/**
- * Persistence.xml handler
- *
- * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
- * @author Emmanuel Bernard
- */
-public final class PersistenceXmlLoader {
-	private static Log log = LogFactory.getLog( PersistenceXmlLoader.class );
-
-	private PersistenceXmlLoader() {
-	}
-
-	private static Document loadURL(URL configURL, EntityResolver resolver) throws Exception {
-		InputStream is = null;
-		if (configURL != null) {
-			URLConnection conn = configURL.openConnection();
-			conn.setUseCaches( false ); //avoid JAR locking on Windows and Tomcat
-			is = conn.getInputStream();
-		}
-		if ( is == null ) {
-			throw new IOException( "Failed to obtain InputStream from url: " + configURL );
-		}
-		List errors = new ArrayList();
-		DocumentBuilderFactory docBuilderFactory = null;
-		docBuilderFactory = DocumentBuilderFactory.newInstance();
-		docBuilderFactory.setValidating( true );
-		docBuilderFactory.setNamespaceAware( true );
-		try {
-			//otherwise Xerces fails in validation
-			docBuilderFactory.setAttribute( "http://apache.org/xml/features/validation/schema", true );
-		}
-		catch (IllegalArgumentException e) {
-			docBuilderFactory.setValidating( false );
-			docBuilderFactory.setNamespaceAware( false );
-		}
-		InputSource source = new InputSource( is );
-		DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
-		docBuilder.setEntityResolver( resolver );
-		docBuilder.setErrorHandler( new ErrorLogger( "XML InputStream", errors, resolver ) );
-		Document doc = docBuilder.parse( source );
-		if ( errors.size() != 0 ) {
-			throw new PersistenceException( "invalid persistence.xml", (Throwable) errors.get( 0 ) );
-		}
-		return doc;
-	}
-
-	public static List<PersistenceMetadata> deploy(URL url, Map overrides, EntityResolver resolver,
-												   PersistenceUnitTransactionType defaultTransactionType) throws Exception {
-		Document doc = loadURL( url, resolver );
-		Element top = doc.getDocumentElement();
-		NodeList children = top.getChildNodes();
-		ArrayList<PersistenceMetadata> units = new ArrayList<PersistenceMetadata>();
-		for ( int i = 0; i < children.getLength() ; i++ ) {
-			if ( children.item( i ).getNodeType() == Node.ELEMENT_NODE ) {
-				Element element = (Element) children.item( i );
-				String tag = element.getTagName();
-				if ( tag.equals( "persistence-unit" ) ) {
-					PersistenceMetadata metadata = parsePersistenceUnit( element );
-					//override properties of metadata if needed
-					if ( overrides.containsKey( HibernatePersistence.PROVIDER ) ) {
-						String provider = (String) overrides.get( HibernatePersistence.PROVIDER );
-						metadata.setProvider( provider );
-					}
-					if ( overrides.containsKey( HibernatePersistence.TRANSACTION_TYPE ) ) {
-						String transactionType = (String) overrides.get( HibernatePersistence.TRANSACTION_TYPE );
-						metadata.setTransactionType( PersistenceXmlLoader.getTransactionType( transactionType ) );
-					}
-					if ( overrides.containsKey( HibernatePersistence.JTA_DATASOURCE ) ) {
-						String dataSource = (String) overrides.get( HibernatePersistence.JTA_DATASOURCE );
-						metadata.setJtaDatasource( dataSource );
-					}
-					if ( overrides.containsKey( HibernatePersistence.NON_JTA_DATASOURCE ) ) {
-						String dataSource = (String) overrides.get( HibernatePersistence.NON_JTA_DATASOURCE );
-						metadata.setNonJtaDatasource( dataSource );
-					}
-					/*
-					 * if explicit => use it
-					 * if JTA DS => JTA transaction
-					 * if non JTA DA => RESOURCE_LOCAL transaction
-					 * else default JavaSE => RESOURCE_LOCAL
-					 */
-					PersistenceUnitTransactionType transactionType = metadata.getTransactionType();
-					Boolean isJTA = null;
-					if ( StringHelper.isNotEmpty( metadata.getJtaDatasource() ) ) {
-						isJTA = Boolean.TRUE;
-					}
-					else if ( StringHelper.isNotEmpty( metadata.getNonJtaDatasource() ) ) {
-						isJTA = Boolean.FALSE;
-					}
-					if (transactionType == null) {
-						if (isJTA == Boolean.TRUE) {
-							transactionType = PersistenceUnitTransactionType.JTA;
-						}
-						else if (isJTA == Boolean.FALSE) {
-							transactionType = PersistenceUnitTransactionType.RESOURCE_LOCAL;
-						}
-						else {
-							transactionType = defaultTransactionType;
-						}
-					}
-					metadata.setTransactionType( transactionType );
-					Properties properties = metadata.getProps();
-					ConfigurationHelper.overrideProperties( properties, overrides );
-					units.add( metadata );
-				}
-			}
-		}
-		return units;
-	}
-
-	private static PersistenceMetadata parsePersistenceUnit(Element top)
-			throws Exception {
-		PersistenceMetadata metadata = new PersistenceMetadata();
-		String puName = top.getAttribute( "name" );
-		if ( StringHelper.isNotEmpty( puName ) ) {
-			log.trace( "Persistent Unit name from persistence.xml: " + puName );
-			metadata.setName( puName );
-		}
-		NodeList children = top.getChildNodes();
-		for ( int i = 0; i < children.getLength() ; i++ ) {
-			if ( children.item( i ).getNodeType() == Node.ELEMENT_NODE ) {
-				Element element = (Element) children.item( i );
-				String tag = element.getTagName();
-//				if ( tag.equals( "name" ) ) {
-//					String puName = XmlHelper.getElementContent( element );
-//					log.trace( "FOUND PU NAME: " + puName );
-//					metadata.setName( puName );
-//				}
-//				else
-				if ( tag.equals( "non-jta-data-source" ) ) {
-					metadata.setNonJtaDatasource( XmlHelper.getElementContent( element ) );
-				}
-				else if ( tag.equals( "jta-data-source" ) ) {
-					metadata.setJtaDatasource( XmlHelper.getElementContent( element ) );
-				}
-				else if ( tag.equals( "provider" ) ) {
-					metadata.setProvider( XmlHelper.getElementContent( element ) );
-				}
-				else if ( tag.equals( "class" ) ) {
-					metadata.getClasses().add( XmlHelper.getElementContent( element ) );
-				}
-				else if ( tag.equals( "mapping-file" ) ) {
-					metadata.getMappingFiles().add( XmlHelper.getElementContent( element ) );
-				}
-				else if ( tag.equals( "jar-file" ) ) {
-					metadata.getJarFiles().add( XmlHelper.getElementContent( element ) );
-				}
-				else if ( tag.equals( "exclude-unlisted-classes" ) ) {
-					metadata.setExcludeUnlistedClasses( true );
-				}
-				else if ( tag.equals( "properties" ) ) {
-					NodeList props = element.getChildNodes();
-					for ( int j = 0; j < props.getLength() ; j++ ) {
-						if ( props.item( j ).getNodeType() == Node.ELEMENT_NODE ) {
-							Element propElement = (Element) props.item( j );
-							if ( !"property".equals( propElement.getTagName() ) ) continue;
-							String propName = propElement.getAttribute( "name" ).trim();
-							String propValue = propElement.getAttribute( "value" ).trim();
-							if ( StringHelper.isEmpty( propValue ) ) {
-								//fall back to the natural (Hibernate) way of description
-								propValue = XmlHelper.getElementContent( propElement, "" );
-							}
-							metadata.getProps().put( propName, propValue );
-						}
-					}
-
-				}
-			}
-		}
-		PersistenceUnitTransactionType transactionType = getTransactionType( top.getAttribute( "transaction-type" ) );
-		if (transactionType != null) metadata.setTransactionType( transactionType );
-
-		return metadata;
-	}
-
-	public static PersistenceUnitTransactionType getTransactionType(String elementContent) {
-		if ( StringHelper.isEmpty( elementContent ) ) {
-			return null; //PersistenceUnitTransactionType.JTA;
-		}
-		else if ( elementContent.equalsIgnoreCase( "JTA" ) ) {
-			return PersistenceUnitTransactionType.JTA;
-		}
-		else if ( elementContent.equalsIgnoreCase( "RESOURCE_LOCAL" ) ) {
-			return PersistenceUnitTransactionType.RESOURCE_LOCAL;
-		}
-		else {
-			throw new PersistenceException( "Unknown TransactionType: " + elementContent );
-		}
-	}
-
-	public static class ErrorLogger implements ErrorHandler {
-		private String file;
-		private List errors;
-		private EntityResolver resolver;
-
-		ErrorLogger(String file, List errors, EntityResolver resolver) {
-			this.file = file;
-			this.errors = errors;
-			this.resolver = resolver;
-		}
-
-		public void error(SAXParseException error) {
-			if ( resolver instanceof EJB3DTDEntityResolver ) {
-				if ( ( (EJB3DTDEntityResolver) resolver ).isResolved() == false ) return;
-			}
-			log.error( "Error parsing XML: " + file + '(' + error.getLineNumber() + ") " + error.getMessage() );
-			errors.add( error );
-		}
-
-		public void fatalError(SAXParseException error) {
-			log.error( "Error parsing XML: " + file + '(' + error.getLineNumber() + ") " + error.getMessage() );
-			errors.add( error );
-		}
-
-		public void warning(SAXParseException warn) {
-			log.warn( "Warning parsing XML: " + file + '(' + warn.getLineNumber() + ") " + warn.getMessage() );
-		}
-	}
-
-}

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/PersistenceXmlLoader.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/PersistenceXmlLoader.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/PersistenceXmlLoader.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/PersistenceXmlLoader.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,250 @@
+package org.hibernate.ejb.packaging;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import javax.persistence.PersistenceException;
+import javax.persistence.spi.PersistenceUnitTransactionType;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.hibernate.cfg.EJB3DTDEntityResolver;
+import org.hibernate.ejb.HibernatePersistence;
+import org.hibernate.ejb.util.ConfigurationHelper;
+import org.hibernate.util.StringHelper;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.EntityResolver;
+import org.xml.sax.ErrorHandler;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXParseException;
+
+/**
+ * Persistence.xml handler
+ *
+ * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
+ * @author Emmanuel Bernard
+ */
+public final class PersistenceXmlLoader {
+	private static Log log = LogFactory.getLog( PersistenceXmlLoader.class );
+
+	private PersistenceXmlLoader() {
+	}
+
+	private static Document loadURL(URL configURL, EntityResolver resolver) throws Exception {
+		InputStream is = null;
+		if (configURL != null) {
+			URLConnection conn = configURL.openConnection();
+			conn.setUseCaches( false ); //avoid JAR locking on Windows and Tomcat
+			is = conn.getInputStream();
+		}
+		if ( is == null ) {
+			throw new IOException( "Failed to obtain InputStream from url: " + configURL );
+		}
+		List errors = new ArrayList();
+		DocumentBuilderFactory docBuilderFactory = null;
+		docBuilderFactory = DocumentBuilderFactory.newInstance();
+		docBuilderFactory.setValidating( true );
+		docBuilderFactory.setNamespaceAware( true );
+		try {
+			//otherwise Xerces fails in validation
+			docBuilderFactory.setAttribute( "http://apache.org/xml/features/validation/schema", true );
+		}
+		catch (IllegalArgumentException e) {
+			docBuilderFactory.setValidating( false );
+			docBuilderFactory.setNamespaceAware( false );
+		}
+		InputSource source = new InputSource( is );
+		DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
+		docBuilder.setEntityResolver( resolver );
+		docBuilder.setErrorHandler( new ErrorLogger( "XML InputStream", errors, resolver ) );
+		Document doc = docBuilder.parse( source );
+		if ( errors.size() != 0 ) {
+			throw new PersistenceException( "invalid persistence.xml", (Throwable) errors.get( 0 ) );
+		}
+		return doc;
+	}
+
+	public static List<PersistenceMetadata> deploy(URL url, Map overrides, EntityResolver resolver,
+												   PersistenceUnitTransactionType defaultTransactionType) throws Exception {
+		Document doc = loadURL( url, resolver );
+		Element top = doc.getDocumentElement();
+		NodeList children = top.getChildNodes();
+		ArrayList<PersistenceMetadata> units = new ArrayList<PersistenceMetadata>();
+		for ( int i = 0; i < children.getLength() ; i++ ) {
+			if ( children.item( i ).getNodeType() == Node.ELEMENT_NODE ) {
+				Element element = (Element) children.item( i );
+				String tag = element.getTagName();
+				if ( tag.equals( "persistence-unit" ) ) {
+					PersistenceMetadata metadata = parsePersistenceUnit( element );
+					//override properties of metadata if needed
+					if ( overrides.containsKey( HibernatePersistence.PROVIDER ) ) {
+						String provider = (String) overrides.get( HibernatePersistence.PROVIDER );
+						metadata.setProvider( provider );
+					}
+					if ( overrides.containsKey( HibernatePersistence.TRANSACTION_TYPE ) ) {
+						String transactionType = (String) overrides.get( HibernatePersistence.TRANSACTION_TYPE );
+						metadata.setTransactionType( PersistenceXmlLoader.getTransactionType( transactionType ) );
+					}
+					if ( overrides.containsKey( HibernatePersistence.JTA_DATASOURCE ) ) {
+						String dataSource = (String) overrides.get( HibernatePersistence.JTA_DATASOURCE );
+						metadata.setJtaDatasource( dataSource );
+					}
+					if ( overrides.containsKey( HibernatePersistence.NON_JTA_DATASOURCE ) ) {
+						String dataSource = (String) overrides.get( HibernatePersistence.NON_JTA_DATASOURCE );
+						metadata.setNonJtaDatasource( dataSource );
+					}
+					/*
+					 * if explicit => use it
+					 * if JTA DS => JTA transaction
+					 * if non JTA DA => RESOURCE_LOCAL transaction
+					 * else default JavaSE => RESOURCE_LOCAL
+					 */
+					PersistenceUnitTransactionType transactionType = metadata.getTransactionType();
+					Boolean isJTA = null;
+					if ( StringHelper.isNotEmpty( metadata.getJtaDatasource() ) ) {
+						isJTA = Boolean.TRUE;
+					}
+					else if ( StringHelper.isNotEmpty( metadata.getNonJtaDatasource() ) ) {
+						isJTA = Boolean.FALSE;
+					}
+					if (transactionType == null) {
+						if (isJTA == Boolean.TRUE) {
+							transactionType = PersistenceUnitTransactionType.JTA;
+						}
+						else if (isJTA == Boolean.FALSE) {
+							transactionType = PersistenceUnitTransactionType.RESOURCE_LOCAL;
+						}
+						else {
+							transactionType = defaultTransactionType;
+						}
+					}
+					metadata.setTransactionType( transactionType );
+					Properties properties = metadata.getProps();
+					ConfigurationHelper.overrideProperties( properties, overrides );
+					units.add( metadata );
+				}
+			}
+		}
+		return units;
+	}
+
+	private static PersistenceMetadata parsePersistenceUnit(Element top)
+			throws Exception {
+		PersistenceMetadata metadata = new PersistenceMetadata();
+		String puName = top.getAttribute( "name" );
+		if ( StringHelper.isNotEmpty( puName ) ) {
+			log.trace( "Persistent Unit name from persistence.xml: " + puName );
+			metadata.setName( puName );
+		}
+		NodeList children = top.getChildNodes();
+		for ( int i = 0; i < children.getLength() ; i++ ) {
+			if ( children.item( i ).getNodeType() == Node.ELEMENT_NODE ) {
+				Element element = (Element) children.item( i );
+				String tag = element.getTagName();
+//				if ( tag.equals( "name" ) ) {
+//					String puName = XmlHelper.getElementContent( element );
+//					log.trace( "FOUND PU NAME: " + puName );
+//					metadata.setName( puName );
+//				}
+//				else
+				if ( tag.equals( "non-jta-data-source" ) ) {
+					metadata.setNonJtaDatasource( XmlHelper.getElementContent( element ) );
+				}
+				else if ( tag.equals( "jta-data-source" ) ) {
+					metadata.setJtaDatasource( XmlHelper.getElementContent( element ) );
+				}
+				else if ( tag.equals( "provider" ) ) {
+					metadata.setProvider( XmlHelper.getElementContent( element ) );
+				}
+				else if ( tag.equals( "class" ) ) {
+					metadata.getClasses().add( XmlHelper.getElementContent( element ) );
+				}
+				else if ( tag.equals( "mapping-file" ) ) {
+					metadata.getMappingFiles().add( XmlHelper.getElementContent( element ) );
+				}
+				else if ( tag.equals( "jar-file" ) ) {
+					metadata.getJarFiles().add( XmlHelper.getElementContent( element ) );
+				}
+				else if ( tag.equals( "exclude-unlisted-classes" ) ) {
+					metadata.setExcludeUnlistedClasses( true );
+				}
+				else if ( tag.equals( "properties" ) ) {
+					NodeList props = element.getChildNodes();
+					for ( int j = 0; j < props.getLength() ; j++ ) {
+						if ( props.item( j ).getNodeType() == Node.ELEMENT_NODE ) {
+							Element propElement = (Element) props.item( j );
+							if ( !"property".equals( propElement.getTagName() ) ) continue;
+							String propName = propElement.getAttribute( "name" ).trim();
+							String propValue = propElement.getAttribute( "value" ).trim();
+							if ( StringHelper.isEmpty( propValue ) ) {
+								//fall back to the natural (Hibernate) way of description
+								propValue = XmlHelper.getElementContent( propElement, "" );
+							}
+							metadata.getProps().put( propName, propValue );
+						}
+					}
+
+				}
+			}
+		}
+		PersistenceUnitTransactionType transactionType = getTransactionType( top.getAttribute( "transaction-type" ) );
+		if (transactionType != null) metadata.setTransactionType( transactionType );
+
+		return metadata;
+	}
+
+	public static PersistenceUnitTransactionType getTransactionType(String elementContent) {
+		if ( StringHelper.isEmpty( elementContent ) ) {
+			return null; //PersistenceUnitTransactionType.JTA;
+		}
+		else if ( elementContent.equalsIgnoreCase( "JTA" ) ) {
+			return PersistenceUnitTransactionType.JTA;
+		}
+		else if ( elementContent.equalsIgnoreCase( "RESOURCE_LOCAL" ) ) {
+			return PersistenceUnitTransactionType.RESOURCE_LOCAL;
+		}
+		else {
+			throw new PersistenceException( "Unknown TransactionType: " + elementContent );
+		}
+	}
+
+	public static class ErrorLogger implements ErrorHandler {
+		private String file;
+		private List errors;
+		private EntityResolver resolver;
+
+		ErrorLogger(String file, List errors, EntityResolver resolver) {
+			this.file = file;
+			this.errors = errors;
+			this.resolver = resolver;
+		}
+
+		public void error(SAXParseException error) {
+			if ( resolver instanceof EJB3DTDEntityResolver ) {
+				if ( ( (EJB3DTDEntityResolver) resolver ).isResolved() == false ) return;
+			}
+			log.error( "Error parsing XML: " + file + '(' + error.getLineNumber() + ") " + error.getMessage() );
+			errors.add( error );
+		}
+
+		public void fatalError(SAXParseException error) {
+			log.error( "Error parsing XML: " + file + '(' + error.getLineNumber() + ") " + error.getMessage() );
+			errors.add( error );
+		}
+
+		public void warning(SAXParseException warn) {
+			log.warn( "Warning parsing XML: " + file + '(' + warn.getLineNumber() + ") " + warn.getMessage() );
+		}
+	}
+
+}

Deleted: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/XmlHelper.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/XmlHelper.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/XmlHelper.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,203 +0,0 @@
-package org.hibernate.ejb.packaging;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
-/**
- * A utility class to cover up the rough bits of xml parsing
- *
- * @author <a href="mailto:chris at kimptoc.net">Chris Kimpton</a>
- * @version $Revision$
- */
-public final class XmlHelper {
-	private XmlHelper() {
-	}
-
-	/**
-	 * Returns an iterator over the children of the given element with
-	 * the given tag name.
-	 *
-	 * @param element The parent element
-	 * @param tagName The name of the desired child
-	 * @return An interator of children or null if element is null.
-	 */
-	public static Iterator getChildrenByTagName(
-			Element element,
-			String tagName
-	) {
-		if ( element == null ) return null;
-		// getElementsByTagName gives the corresponding elements in the whole
-		// descendance. We want only children
-
-		NodeList children = element.getChildNodes();
-		ArrayList goodChildren = new ArrayList();
-		for ( int i = 0; i < children.getLength() ; i++ ) {
-			Node currentChild = children.item( i );
-			if ( currentChild.getNodeType() == Node.ELEMENT_NODE &&
-					( (Element) currentChild ).getTagName().equals( tagName ) ) {
-				goodChildren.add( (Element) currentChild );
-			}
-		}
-		return goodChildren.iterator();
-	}
-
-	/**
-	 * Gets the child of the specified element having the specified unique
-	 * name.  If there are more than one children elements with the same name
-	 * and exception is thrown.
-	 *
-	 * @param element The parent element
-	 * @param tagName The name of the desired child
-	 * @return The named child.
-	 * @throws Exception Child was not found or was not unique.
-	 */
-	public static Element getUniqueChild(Element element, String tagName)
-			throws Exception {
-		Iterator goodChildren = getChildrenByTagName( element, tagName );
-
-		if ( goodChildren != null && goodChildren.hasNext() ) {
-			Element child = (Element) goodChildren.next();
-			if ( goodChildren.hasNext() ) {
-				throw new Exception
-						( "expected only one " + tagName + " tag" );
-			}
-			return child;
-		}
-		else {
-			throw new Exception
-					( "expected one " + tagName + " tag" );
-		}
-	}
-
-	/**
-	 * Gets the child of the specified element having the
-	 * specified name. If the child with this name doesn't exist
-	 * then null is returned instead.
-	 *
-	 * @param element the parent element
-	 * @param tagName the name of the desired child
-	 * @return either the named child or null
-	 */
-	public static Element getOptionalChild(Element element, String tagName)
-			throws Exception {
-		return getOptionalChild( element, tagName, null );
-	}
-
-	/**
-	 * Gets the child of the specified element having the
-	 * specified name. If the child with this name doesn't exist
-	 * then the supplied default element is returned instead.
-	 *
-	 * @param element		the parent element
-	 * @param tagName		the name of the desired child
-	 * @param defaultElement the element to return if the child
-	 *                       doesn't exist
-	 * @return either the named child or the supplied default
-	 */
-	public static Element getOptionalChild(
-			Element element,
-			String tagName,
-			Element defaultElement
-	)
-			throws Exception {
-		Iterator goodChildren = getChildrenByTagName( element, tagName );
-
-		if ( goodChildren != null && goodChildren.hasNext() ) {
-			Element child = (Element) goodChildren.next();
-			if ( goodChildren.hasNext() ) {
-				throw new Exception
-						( "expected only one " + tagName + " tag" );
-			}
-			return child;
-		}
-		else {
-			return defaultElement;
-		}
-	}
-
-	/**
-	 * Get the content of the given element.
-	 *
-	 * @param element The element to get the content for.
-	 * @return The content of the element or null.
-	 */
-	public static String getElementContent(final Element element)
-			throws Exception {
-		return getElementContent( element, null );
-	}
-
-	/**
-	 * Get the content of the given element.
-	 *
-	 * @param element	The element to get the content for.
-	 * @param defaultStr The default to return when there is no content.
-	 * @return The content of the element or the default.
-	 */
-	public static String getElementContent(Element element, String defaultStr)
-			throws Exception {
-		if ( element == null ) {
-			return defaultStr;
-		}
-
-		NodeList children = element.getChildNodes();
-		StringBuilder result = new StringBuilder("");
-		for ( int i = 0; i < children.getLength() ; i++ ) {
-			if ( children.item( i ).getNodeType() == Node.TEXT_NODE ||
-					children.item( i ).getNodeType() == Node.CDATA_SECTION_NODE ) {
-				result.append( children.item( i ).getNodeValue() );
-			}
-//			else if ( children.item( i ).getNodeType() == Node.COMMENT_NODE ) {
-//				// Ignore comment nodes
-//			}
-		}
-		return result.toString().trim();
-	}
-
-	/**
-	 * Macro to get the content of a unique child element.
-	 *
-	 * @param element The parent element.
-	 * @param tagName The name of the desired child.
-	 * @return The element content or null.
-	 */
-	public static String getUniqueChildContent(
-			Element element,
-			String tagName
-	)
-			throws Exception {
-		return getElementContent( getUniqueChild( element, tagName ) );
-	}
-
-	/**
-	 * Macro to get the content of an optional child element.
-	 *
-	 * @param element The parent element.
-	 * @param tagName The name of the desired child.
-	 * @return The element content or null.
-	 */
-	public static String getOptionalChildContent(
-			Element element,
-			String tagName
-	)
-			throws Exception {
-		return getElementContent( getOptionalChild( element, tagName ) );
-	}
-
-	public static boolean getOptionalChildBooleanContent(Element element, String name) throws Exception {
-		Element child = getOptionalChild( element, name );
-		if ( child != null ) {
-			String value = getElementContent( child ).toLowerCase();
-			return value.equals( "true" ) || value.equals( "yes" );
-		}
-
-		return false;
-	}
-
-
-}
-
-

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/XmlHelper.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/XmlHelper.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/XmlHelper.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/packaging/XmlHelper.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,203 @@
+package org.hibernate.ejb.packaging;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+/**
+ * A utility class to cover up the rough bits of xml parsing
+ *
+ * @author <a href="mailto:chris at kimptoc.net">Chris Kimpton</a>
+ * @version $Revision$
+ */
+public final class XmlHelper {
+	private XmlHelper() {
+	}
+
+	/**
+	 * Returns an iterator over the children of the given element with
+	 * the given tag name.
+	 *
+	 * @param element The parent element
+	 * @param tagName The name of the desired child
+	 * @return An interator of children or null if element is null.
+	 */
+	public static Iterator getChildrenByTagName(
+			Element element,
+			String tagName
+	) {
+		if ( element == null ) return null;
+		// getElementsByTagName gives the corresponding elements in the whole
+		// descendance. We want only children
+
+		NodeList children = element.getChildNodes();
+		ArrayList goodChildren = new ArrayList();
+		for ( int i = 0; i < children.getLength() ; i++ ) {
+			Node currentChild = children.item( i );
+			if ( currentChild.getNodeType() == Node.ELEMENT_NODE &&
+					( (Element) currentChild ).getTagName().equals( tagName ) ) {
+				goodChildren.add( (Element) currentChild );
+			}
+		}
+		return goodChildren.iterator();
+	}
+
+	/**
+	 * Gets the child of the specified element having the specified unique
+	 * name.  If there are more than one children elements with the same name
+	 * and exception is thrown.
+	 *
+	 * @param element The parent element
+	 * @param tagName The name of the desired child
+	 * @return The named child.
+	 * @throws Exception Child was not found or was not unique.
+	 */
+	public static Element getUniqueChild(Element element, String tagName)
+			throws Exception {
+		Iterator goodChildren = getChildrenByTagName( element, tagName );
+
+		if ( goodChildren != null && goodChildren.hasNext() ) {
+			Element child = (Element) goodChildren.next();
+			if ( goodChildren.hasNext() ) {
+				throw new Exception
+						( "expected only one " + tagName + " tag" );
+			}
+			return child;
+		}
+		else {
+			throw new Exception
+					( "expected one " + tagName + " tag" );
+		}
+	}
+
+	/**
+	 * Gets the child of the specified element having the
+	 * specified name. If the child with this name doesn't exist
+	 * then null is returned instead.
+	 *
+	 * @param element the parent element
+	 * @param tagName the name of the desired child
+	 * @return either the named child or null
+	 */
+	public static Element getOptionalChild(Element element, String tagName)
+			throws Exception {
+		return getOptionalChild( element, tagName, null );
+	}
+
+	/**
+	 * Gets the child of the specified element having the
+	 * specified name. If the child with this name doesn't exist
+	 * then the supplied default element is returned instead.
+	 *
+	 * @param element		the parent element
+	 * @param tagName		the name of the desired child
+	 * @param defaultElement the element to return if the child
+	 *                       doesn't exist
+	 * @return either the named child or the supplied default
+	 */
+	public static Element getOptionalChild(
+			Element element,
+			String tagName,
+			Element defaultElement
+	)
+			throws Exception {
+		Iterator goodChildren = getChildrenByTagName( element, tagName );
+
+		if ( goodChildren != null && goodChildren.hasNext() ) {
+			Element child = (Element) goodChildren.next();
+			if ( goodChildren.hasNext() ) {
+				throw new Exception
+						( "expected only one " + tagName + " tag" );
+			}
+			return child;
+		}
+		else {
+			return defaultElement;
+		}
+	}
+
+	/**
+	 * Get the content of the given element.
+	 *
+	 * @param element The element to get the content for.
+	 * @return The content of the element or null.
+	 */
+	public static String getElementContent(final Element element)
+			throws Exception {
+		return getElementContent( element, null );
+	}
+
+	/**
+	 * Get the content of the given element.
+	 *
+	 * @param element	The element to get the content for.
+	 * @param defaultStr The default to return when there is no content.
+	 * @return The content of the element or the default.
+	 */
+	public static String getElementContent(Element element, String defaultStr)
+			throws Exception {
+		if ( element == null ) {
+			return defaultStr;
+		}
+
+		NodeList children = element.getChildNodes();
+		StringBuilder result = new StringBuilder("");
+		for ( int i = 0; i < children.getLength() ; i++ ) {
+			if ( children.item( i ).getNodeType() == Node.TEXT_NODE ||
+					children.item( i ).getNodeType() == Node.CDATA_SECTION_NODE ) {
+				result.append( children.item( i ).getNodeValue() );
+			}
+//			else if ( children.item( i ).getNodeType() == Node.COMMENT_NODE ) {
+//				// Ignore comment nodes
+//			}
+		}
+		return result.toString().trim();
+	}
+
+	/**
+	 * Macro to get the content of a unique child element.
+	 *
+	 * @param element The parent element.
+	 * @param tagName The name of the desired child.
+	 * @return The element content or null.
+	 */
+	public static String getUniqueChildContent(
+			Element element,
+			String tagName
+	)
+			throws Exception {
+		return getElementContent( getUniqueChild( element, tagName ) );
+	}
+
+	/**
+	 * Macro to get the content of an optional child element.
+	 *
+	 * @param element The parent element.
+	 * @param tagName The name of the desired child.
+	 * @return The element content or null.
+	 */
+	public static String getOptionalChildContent(
+			Element element,
+			String tagName
+	)
+			throws Exception {
+		return getElementContent( getOptionalChild( element, tagName ) );
+	}
+
+	public static boolean getOptionalChildBooleanContent(Element element, String name) throws Exception {
+		Element child = getOptionalChild( element, name );
+		if ( child != null ) {
+			String value = getElementContent( child ).toLowerCase();
+			return value.equals( "true" ) || value.equals( "yes" );
+		}
+
+		return false;
+	}
+
+
+}
+
+

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/transaction (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/transaction)

Deleted: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/transaction/JoinableCMTTransaction.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/transaction/JoinableCMTTransaction.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/transaction/JoinableCMTTransaction.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,102 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.transaction;
-
-import javax.transaction.SystemException;
-import javax.transaction.Transaction;
-
-import org.hibernate.HibernateException;
-import org.hibernate.TransactionException;
-import org.hibernate.jdbc.JDBCContext;
-import org.hibernate.transaction.CMTTransaction;
-import org.hibernate.transaction.TransactionFactory;
-import org.hibernate.util.JTAHelper;
-
-/**
- * Implements a joinable transaction. Until the transaction is marked for joined, the TM.isTransactionInProgress()
- * must return false
- *
- * @author Emmanuel Bernard
- */
-public class JoinableCMTTransaction extends CMTTransaction {
-	private JoinStatus status;
-
-	public JoinableCMTTransaction(JDBCContext jdbcContext, TransactionFactory.Context transactionContext) {
-		super( jdbcContext, transactionContext );
-		//status = JoinStatus.MARKED_FOR_JOINED;
-		//tryJoiningTransaction();
-	}
-
-	public boolean isTransactionInProgress(
-			JDBCContext jdbcContext,
-			TransactionFactory.Context transactionContext
-	) {
-		try {
-			return status == JoinStatus.JOINED && isTransactionInProgress(
-					transactionContext.getFactory().getTransactionManager().getTransaction()
-			);
-		}
-		catch (SystemException se) {
-			throw new TransactionException( "Unable to check transaction status", se );
-		}
-	}
-
-	private boolean isTransactionInProgress() {
-		try {
-			Transaction transaction = transactionContext.getFactory().getTransactionManager().getTransaction();
-			return isTransactionInProgress(transaction);
-		}
-		catch (SystemException se) {
-			throw new TransactionException( "Unable to check transaction status", se );
-		}
-	}
-
-	private boolean isTransactionInProgress(Transaction tx) throws SystemException {
-		return JTAHelper.isTransactionInProgress(tx) && ! JTAHelper.isRollback( tx.getStatus() );
-	}
-
-	void tryJoiningTransaction() {
-		if ( status == JoinStatus.MARKED_FOR_JOINED ) {
-			if ( isTransactionInProgress() ) {
-				status = JoinStatus.JOINED;
-			}
-			else {
-				status = JoinStatus.NOT_JOINED;
-			}
-		}
-	}
-
-	@Override
-	public void begin() throws HibernateException {
-		super.begin();
-		status = JoinStatus.JOINED;
-	}
-
-	@Override
-	public void commit() throws HibernateException {
-		/* this method is not supposed to be called
-		 * it breaks the flushBeforeCompletion flag optimizeation
-		 * regarding flushing skip.
-		 * In its current form, it will generate too much flush() calls
-		 */
-		super.commit();
-	}
-
-
-	public JoinStatus getStatus() {
-		return status;
-	}
-
-	public void resetStatus() {
-		status = JoinStatus.NOT_JOINED;
-	}
-
-	public void markForJoined() {
-		if ( status != JoinStatus.JOINED ) status = JoinStatus.MARKED_FOR_JOINED;
-	}
-
-	public static enum JoinStatus {
-		NOT_JOINED,
-		MARKED_FOR_JOINED,
-		JOINED
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/transaction/JoinableCMTTransaction.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/transaction/JoinableCMTTransaction.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/transaction/JoinableCMTTransaction.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/transaction/JoinableCMTTransaction.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,102 @@
+//$Id: $
+package org.hibernate.ejb.transaction;
+
+import javax.transaction.SystemException;
+import javax.transaction.Transaction;
+
+import org.hibernate.HibernateException;
+import org.hibernate.TransactionException;
+import org.hibernate.jdbc.JDBCContext;
+import org.hibernate.transaction.CMTTransaction;
+import org.hibernate.transaction.TransactionFactory;
+import org.hibernate.util.JTAHelper;
+
+/**
+ * Implements a joinable transaction. Until the transaction is marked for joined, the TM.isTransactionInProgress()
+ * must return false
+ *
+ * @author Emmanuel Bernard
+ */
+public class JoinableCMTTransaction extends CMTTransaction {
+	private JoinStatus status;
+
+	public JoinableCMTTransaction(JDBCContext jdbcContext, TransactionFactory.Context transactionContext) {
+		super( jdbcContext, transactionContext );
+		//status = JoinStatus.MARKED_FOR_JOINED;
+		//tryJoiningTransaction();
+	}
+
+	public boolean isTransactionInProgress(
+			JDBCContext jdbcContext,
+			TransactionFactory.Context transactionContext
+	) {
+		try {
+			return status == JoinStatus.JOINED && isTransactionInProgress(
+					transactionContext.getFactory().getTransactionManager().getTransaction()
+			);
+		}
+		catch (SystemException se) {
+			throw new TransactionException( "Unable to check transaction status", se );
+		}
+	}
+
+	private boolean isTransactionInProgress() {
+		try {
+			Transaction transaction = transactionContext.getFactory().getTransactionManager().getTransaction();
+			return isTransactionInProgress(transaction);
+		}
+		catch (SystemException se) {
+			throw new TransactionException( "Unable to check transaction status", se );
+		}
+	}
+
+	private boolean isTransactionInProgress(Transaction tx) throws SystemException {
+		return JTAHelper.isTransactionInProgress(tx) && ! JTAHelper.isRollback( tx.getStatus() );
+	}
+
+	void tryJoiningTransaction() {
+		if ( status == JoinStatus.MARKED_FOR_JOINED ) {
+			if ( isTransactionInProgress() ) {
+				status = JoinStatus.JOINED;
+			}
+			else {
+				status = JoinStatus.NOT_JOINED;
+			}
+		}
+	}
+
+	@Override
+	public void begin() throws HibernateException {
+		super.begin();
+		status = JoinStatus.JOINED;
+	}
+
+	@Override
+	public void commit() throws HibernateException {
+		/* this method is not supposed to be called
+		 * it breaks the flushBeforeCompletion flag optimizeation
+		 * regarding flushing skip.
+		 * In its current form, it will generate too much flush() calls
+		 */
+		super.commit();
+	}
+
+
+	public JoinStatus getStatus() {
+		return status;
+	}
+
+	public void resetStatus() {
+		status = JoinStatus.NOT_JOINED;
+	}
+
+	public void markForJoined() {
+		if ( status != JoinStatus.JOINED ) status = JoinStatus.MARKED_FOR_JOINED;
+	}
+
+	public static enum JoinStatus {
+		NOT_JOINED,
+		MARKED_FOR_JOINED,
+		JOINED
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/transaction/JoinableCMTTransactionFactory.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/transaction/JoinableCMTTransactionFactory.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/transaction/JoinableCMTTransactionFactory.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,30 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.transaction;
-
-import org.hibernate.HibernateException;
-import org.hibernate.Transaction;
-import org.hibernate.jdbc.JDBCContext;
-import org.hibernate.transaction.CMTTransactionFactory;
-
-/**
- * A transaction is in progress if the underlying JTA tx is in progress and if the Tx is marked as
- * MARKED_FOR_JOINED
- *
- * @author Emmanuel Bernard
- */
-public class JoinableCMTTransactionFactory extends CMTTransactionFactory {
-	public Transaction createTransaction(JDBCContext jdbcContext, Context transactionContext)
-			throws HibernateException {
-		return new JoinableCMTTransaction( jdbcContext, transactionContext );
-	}
-
-	@Override
-	public boolean isTransactionInProgress(
-			JDBCContext jdbcContext, Context transactionContext, Transaction transaction
-	) {
-		if ( transaction == null ) return false; //should not happen though
-		JoinableCMTTransaction joinableCMTTransaction = ( (JoinableCMTTransaction) transaction );
-		joinableCMTTransaction.tryJoiningTransaction();
-		return joinableCMTTransaction.isTransactionInProgress( jdbcContext, transactionContext );
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/transaction/JoinableCMTTransactionFactory.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/transaction/JoinableCMTTransactionFactory.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/transaction/JoinableCMTTransactionFactory.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/transaction/JoinableCMTTransactionFactory.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,30 @@
+//$Id: $
+package org.hibernate.ejb.transaction;
+
+import org.hibernate.HibernateException;
+import org.hibernate.Transaction;
+import org.hibernate.jdbc.JDBCContext;
+import org.hibernate.transaction.CMTTransactionFactory;
+
+/**
+ * A transaction is in progress if the underlying JTA tx is in progress and if the Tx is marked as
+ * MARKED_FOR_JOINED
+ *
+ * @author Emmanuel Bernard
+ */
+public class JoinableCMTTransactionFactory extends CMTTransactionFactory {
+	public Transaction createTransaction(JDBCContext jdbcContext, Context transactionContext)
+			throws HibernateException {
+		return new JoinableCMTTransaction( jdbcContext, transactionContext );
+	}
+
+	@Override
+	public boolean isTransactionInProgress(
+			JDBCContext jdbcContext, Context transactionContext, Transaction transaction
+	) {
+		if ( transaction == null ) return false; //should not happen though
+		JoinableCMTTransaction joinableCMTTransaction = ( (JoinableCMTTransaction) transaction );
+		joinableCMTTransaction.tryJoiningTransaction();
+		return joinableCMTTransaction.isTransactionInProgress( jdbcContext, transactionContext );
+	}
+}

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/util (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/util)

Deleted: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/util/ConfigurationHelper.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/util/ConfigurationHelper.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/util/ConfigurationHelper.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,60 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.util;
-
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-
-import javax.persistence.FlushModeType;
-import javax.persistence.PersistenceException;
-
-import org.hibernate.FlushMode;
-import org.hibernate.AssertionFailure;
-
-/**
- * @author Emmanuel Bernard
- */
-public abstract class ConfigurationHelper {
-	public static void overrideProperties(Properties properties, Map overrides) {
-		for ( Map.Entry entry : (Set<Map.Entry>) overrides.entrySet() ) {
-			if ( entry.getKey() instanceof String && entry.getValue() instanceof String ) {
-				properties.setProperty( (String) entry.getKey(), (String) entry.getValue() );
-			}
-		}
-	}
-
-	public static FlushMode getFlushMode(Object value) {
-		FlushMode flushMode = null;
-		if (value instanceof FlushMode) {
-			flushMode = (FlushMode) value;
-		}
-		else if (value instanceof javax.persistence.FlushModeType) {
-			flushMode = ConfigurationHelper.getFlushMode( (javax.persistence.FlushModeType) value);
-		}
-		else if (value instanceof String) {
-			flushMode = ConfigurationHelper.getFlushMode( (String) value);
-		}
-		if (flushMode == null) {
-			throw new PersistenceException("Unable to parse org.hibernate.flushMode: " + value);
-		}
-		return flushMode;
-	}
-
-	private static FlushMode getFlushMode(String flushMode)  {
-		if (flushMode == null) return null;
-		flushMode = flushMode.toUpperCase();
-		return FlushMode.parse( flushMode );
-	}
-
-	private static FlushMode getFlushMode(FlushModeType flushMode)  {
-		switch(flushMode) {
-			case AUTO:
-				return FlushMode.AUTO;
-			case COMMIT:
-				return FlushMode.COMMIT;
-			default:
-				throw new AssertionFailure("Unknown FlushModeType: " + flushMode);
-		}
-
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/util/ConfigurationHelper.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/util/ConfigurationHelper.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/util/ConfigurationHelper.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/util/ConfigurationHelper.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,60 @@
+//$Id: $
+package org.hibernate.ejb.util;
+
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+
+import javax.persistence.FlushModeType;
+import javax.persistence.PersistenceException;
+
+import org.hibernate.FlushMode;
+import org.hibernate.AssertionFailure;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public abstract class ConfigurationHelper {
+	public static void overrideProperties(Properties properties, Map overrides) {
+		for ( Map.Entry entry : (Set<Map.Entry>) overrides.entrySet() ) {
+			if ( entry.getKey() instanceof String && entry.getValue() instanceof String ) {
+				properties.setProperty( (String) entry.getKey(), (String) entry.getValue() );
+			}
+		}
+	}
+
+	public static FlushMode getFlushMode(Object value) {
+		FlushMode flushMode = null;
+		if (value instanceof FlushMode) {
+			flushMode = (FlushMode) value;
+		}
+		else if (value instanceof javax.persistence.FlushModeType) {
+			flushMode = ConfigurationHelper.getFlushMode( (javax.persistence.FlushModeType) value);
+		}
+		else if (value instanceof String) {
+			flushMode = ConfigurationHelper.getFlushMode( (String) value);
+		}
+		if (flushMode == null) {
+			throw new PersistenceException("Unable to parse org.hibernate.flushMode: " + value);
+		}
+		return flushMode;
+	}
+
+	private static FlushMode getFlushMode(String flushMode)  {
+		if (flushMode == null) return null;
+		flushMode = flushMode.toUpperCase();
+		return FlushMode.parse( flushMode );
+	}
+
+	private static FlushMode getFlushMode(FlushModeType flushMode)  {
+		switch(flushMode) {
+			case AUTO:
+				return FlushMode.AUTO;
+			case COMMIT:
+				return FlushMode.COMMIT;
+			default:
+				throw new AssertionFailure("Unknown FlushModeType: " + flushMode);
+		}
+
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/util/LogHelper.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/util/LogHelper.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/util/LogHelper.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,76 +0,0 @@
-//$Id$
-package org.hibernate.ejb.util;
-
-import java.net.URL;
-import java.util.Enumeration;
-import java.util.List;
-import java.util.Properties;
-import javax.persistence.spi.PersistenceUnitInfo;
-
-/**
- * @author Emmanuel Bernard
- */
-public final class LogHelper {
-	private LogHelper() {
-	}
-
-	public static String logPersistenceUnitInfo(PersistenceUnitInfo unitInfo) {
-		StringBuilder sb = new StringBuilder();
-		sb.append( "PersistenceUnitInfo [\n\t" )
-				.append( "name: " )
-				.append( unitInfo.getPersistenceUnitName() )
-				.append( "\n\t" )
-				.append( "persistence provider classname: " )
-				.append( unitInfo.getPersistenceProviderClassName() )
-				.append( "\n\t" )
-				.append( "classloader: " )
-				.append( unitInfo.getClassLoader() )
-				.append( "\n\t" )
-				.append( "Temporary classloader: " )
-				.append( unitInfo.getNewTempClassLoader() )
-				.append( "\n\t" )
-				.append( "excludeUnlistedClasses: " )
-				.append( unitInfo.excludeUnlistedClasses() )
-				.append( "\n\t" )
-				.append( "JTA datasource: " )
-				.append( unitInfo.getJtaDataSource() )
-				.append( "\n\t" )
-				.append( "Non JTA datasource: " )
-				.append( unitInfo.getNonJtaDataSource() )
-				.append( "\n\t" )
-				.append( "Transaction type: " )
-				.append( unitInfo.getTransactionType() )
-				.append( "\n\t" )
-				.append( "PU root URL: " )
-				.append( unitInfo.getPersistenceUnitRootUrl() )
-				.append( "\n\t" );
-		sb.append( "Jar files URLs [" );
-		List<URL> jarFileUrls = unitInfo.getJarFileUrls();
-		for ( URL url : jarFileUrls ) {
-			sb.append( "\n\t\t" ).append( url );
-		}
-		sb.append( "]\n\t" );
-		sb.append( "Managed classes names [" );
-		List<String> classesNames = unitInfo.getManagedClassNames();
-		for ( String clazz : classesNames ) {
-			sb.append( "\n\t\t" ).append( clazz );
-		}
-		sb.append( "]\n\t" );
-		sb.append( "Mapping files names [" );
-		List<String> mappingFiles = unitInfo.getMappingFileNames();
-		for ( String file : mappingFiles ) {
-			sb.append( "\n\t\t" ).append( file );
-		}
-		sb.append( "]\n\t" );
-		sb.append( "Properties [" );
-		Properties properties = unitInfo.getProperties();
-		Enumeration names = properties.propertyNames();
-		while ( names.hasMoreElements() ) {
-			String name = (String) names.nextElement();
-			sb.append( "\n\t\t" ).append( name ).append( ": " ).append( properties.getProperty( name ) );
-		}
-		sb.append( "]" );
-		return sb.toString();
-	}
-
-}

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/util/LogHelper.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/util/LogHelper.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/util/LogHelper.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/util/LogHelper.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,76 @@
+//$Id$
+package org.hibernate.ejb.util;
+
+import java.net.URL;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.Properties;
+import javax.persistence.spi.PersistenceUnitInfo;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public final class LogHelper {
+	private LogHelper() {
+	}
+
+	public static String logPersistenceUnitInfo(PersistenceUnitInfo unitInfo) {
+		StringBuilder sb = new StringBuilder();
+		sb.append( "PersistenceUnitInfo [\n\t" )
+				.append( "name: " )
+				.append( unitInfo.getPersistenceUnitName() )
+				.append( "\n\t" )
+				.append( "persistence provider classname: " )
+				.append( unitInfo.getPersistenceProviderClassName() )
+				.append( "\n\t" )
+				.append( "classloader: " )
+				.append( unitInfo.getClassLoader() )
+				.append( "\n\t" )
+				.append( "Temporary classloader: " )
+				.append( unitInfo.getNewTempClassLoader() )
+				.append( "\n\t" )
+				.append( "excludeUnlistedClasses: " )
+				.append( unitInfo.excludeUnlistedClasses() )
+				.append( "\n\t" )
+				.append( "JTA datasource: " )
+				.append( unitInfo.getJtaDataSource() )
+				.append( "\n\t" )
+				.append( "Non JTA datasource: " )
+				.append( unitInfo.getNonJtaDataSource() )
+				.append( "\n\t" )
+				.append( "Transaction type: " )
+				.append( unitInfo.getTransactionType() )
+				.append( "\n\t" )
+				.append( "PU root URL: " )
+				.append( unitInfo.getPersistenceUnitRootUrl() )
+				.append( "\n\t" );
+		sb.append( "Jar files URLs [" );
+		List<URL> jarFileUrls = unitInfo.getJarFileUrls();
+		for ( URL url : jarFileUrls ) {
+			sb.append( "\n\t\t" ).append( url );
+		}
+		sb.append( "]\n\t" );
+		sb.append( "Managed classes names [" );
+		List<String> classesNames = unitInfo.getManagedClassNames();
+		for ( String clazz : classesNames ) {
+			sb.append( "\n\t\t" ).append( clazz );
+		}
+		sb.append( "]\n\t" );
+		sb.append( "Mapping files names [" );
+		List<String> mappingFiles = unitInfo.getMappingFileNames();
+		for ( String file : mappingFiles ) {
+			sb.append( "\n\t\t" ).append( file );
+		}
+		sb.append( "]\n\t" );
+		sb.append( "Properties [" );
+		Properties properties = unitInfo.getProperties();
+		Enumeration names = properties.propertyNames();
+		while ( names.hasMoreElements() ) {
+			String name = (String) names.nextElement();
+			sb.append( "\n\t\t" ).append( name ).append( ": " ).append( properties.getProperty( name ) );
+		}
+		sb.append( "]" );
+		return sb.toString();
+	}
+
+}

Deleted: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/util/NamingHelper.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/util/NamingHelper.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/util/NamingHelper.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,74 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.util;
-
-import javax.naming.Context;
-import javax.naming.InvalidNameException;
-import javax.naming.NamingException;
-import javax.naming.event.EventContext;
-import javax.naming.event.NamespaceChangeListener;
-import javax.naming.event.NamingEvent;
-import javax.naming.event.NamingExceptionEvent;
-import javax.naming.event.NamingListener;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.hibernate.ejb.Ejb3Configuration;
-import org.hibernate.ejb.HibernatePersistence;
-
-/**
- * @author Emmanuel Bernard
- */
-public class NamingHelper {
-	private NamingHelper() {};
-
-	private static Log log = LogFactory.getLog( NamingHelper.class );
-
-	/** bind the configuration to the JNDI */
-	public static void bind(Ejb3Configuration cfg) {
-		String name = cfg.getHibernateConfiguration().getProperty( HibernatePersistence.CONFIGURATION_JNDI_NAME );
-		if ( name == null ) {
-			log.debug( "Not Ejb3Configuration to JNDI, no JNDI name configured" );
-		}
-		else {
-			log.info( "Ejb3Configuration name: " + name );
-
-			try {
-				Context ctx = org.hibernate.util.NamingHelper.getInitialContext( cfg.getProperties() );
-				org.hibernate.util.NamingHelper.bind( ctx, name, cfg );
-				log.info( "Bound Ejb3Configuration to JNDI name: " + name );
-				( (EventContext) ctx ).addNamingListener( name, EventContext.OBJECT_SCOPE, LISTENER );
-			}
-			catch (InvalidNameException ine) {
-				log.error( "Invalid JNDI name: " + name, ine );
-			}
-			catch (NamingException ne) {
-				log.warn( "Could not bind Ejb3Configuration to JNDI", ne );
-			}
-			catch (ClassCastException cce) {
-				log.warn( "InitialContext did not implement EventContext" );
-			}
-		}
-	}
-
-	private static final NamingListener LISTENER = new NamespaceChangeListener() {
-		public void objectAdded(NamingEvent evt) {
-			log.debug( "An Ejb3Configuration was successfully bound to name: " + evt.getNewBinding().getName() );
-		}
-
-		public void objectRemoved(NamingEvent evt) {
-			String name = evt.getOldBinding().getName();
-			log.info( "An Ejb3Configuration was unbound from name: " + name );
-		}
-
-		public void objectRenamed(NamingEvent evt) {
-			String name = evt.getOldBinding().getName();
-			log.info( "An Ejb3Configuration was renamed from name: " + name );
-		}
-
-		public void namingExceptionThrown(NamingExceptionEvent evt) {
-			log.warn( "Naming exception occurred accessing Ejb3Configuration: " + evt.getException() );
-		}
-	};
-
-
-}

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/util/NamingHelper.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/ejb/util/NamingHelper.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/util/NamingHelper.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/ejb/util/NamingHelper.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,74 @@
+//$Id: $
+package org.hibernate.ejb.util;
+
+import javax.naming.Context;
+import javax.naming.InvalidNameException;
+import javax.naming.NamingException;
+import javax.naming.event.EventContext;
+import javax.naming.event.NamespaceChangeListener;
+import javax.naming.event.NamingEvent;
+import javax.naming.event.NamingExceptionEvent;
+import javax.naming.event.NamingListener;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.hibernate.ejb.Ejb3Configuration;
+import org.hibernate.ejb.HibernatePersistence;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class NamingHelper {
+	private NamingHelper() {};
+
+	private static Log log = LogFactory.getLog( NamingHelper.class );
+
+	/** bind the configuration to the JNDI */
+	public static void bind(Ejb3Configuration cfg) {
+		String name = cfg.getHibernateConfiguration().getProperty( HibernatePersistence.CONFIGURATION_JNDI_NAME );
+		if ( name == null ) {
+			log.debug( "Not Ejb3Configuration to JNDI, no JNDI name configured" );
+		}
+		else {
+			log.info( "Ejb3Configuration name: " + name );
+
+			try {
+				Context ctx = org.hibernate.util.NamingHelper.getInitialContext( cfg.getProperties() );
+				org.hibernate.util.NamingHelper.bind( ctx, name, cfg );
+				log.info( "Bound Ejb3Configuration to JNDI name: " + name );
+				( (EventContext) ctx ).addNamingListener( name, EventContext.OBJECT_SCOPE, LISTENER );
+			}
+			catch (InvalidNameException ine) {
+				log.error( "Invalid JNDI name: " + name, ine );
+			}
+			catch (NamingException ne) {
+				log.warn( "Could not bind Ejb3Configuration to JNDI", ne );
+			}
+			catch (ClassCastException cce) {
+				log.warn( "InitialContext did not implement EventContext" );
+			}
+		}
+	}
+
+	private static final NamingListener LISTENER = new NamespaceChangeListener() {
+		public void objectAdded(NamingEvent evt) {
+			log.debug( "An Ejb3Configuration was successfully bound to name: " + evt.getNewBinding().getName() );
+		}
+
+		public void objectRemoved(NamingEvent evt) {
+			String name = evt.getOldBinding().getName();
+			log.info( "An Ejb3Configuration was unbound from name: " + name );
+		}
+
+		public void objectRenamed(NamingEvent evt) {
+			String name = evt.getOldBinding().getName();
+			log.info( "An Ejb3Configuration was renamed from name: " + name );
+		}
+
+		public void namingExceptionThrown(NamingExceptionEvent evt) {
+			log.warn( "Naming exception occurred accessing Ejb3Configuration: " + evt.getException() );
+		}
+	};
+
+
+}

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/engine (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/engine)

Deleted: trunk/HibernateExt/entitymanager/src/java/org/hibernate/engine/EJB3CascadeStyle.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/engine/EJB3CascadeStyle.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/engine/EJB3CascadeStyle.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,32 +0,0 @@
-//$Id: $
-package org.hibernate.engine;
-
-/**
- * Becasue CascadeStyle is not opened and package protected,
- * I need to subclass and override the persist alias
- *
- * Note that This class has to be triggered by EJB3PersistEventListener at class loading time
- *
- * TODO get rid of it for 3.3
- *
- * @author Emmanuel Bernard
- */
-public abstract class EJB3CascadeStyle extends CascadeStyle {
-
-	/**
-	 * cascade using EJB3CascadingAction
-	 */
-	public static final CascadeStyle PERSIST_EJB3 = new CascadeStyle() {
-		public boolean doCascade(CascadingAction action) {
-			return action==EJB3CascadingAction.PERSIST_SKIPLAZY
-					|| action==CascadingAction.PERSIST_ON_FLUSH;
-		}
-		public String toString() {
-			return "STYLE_PERSIST_SKIPLAZY";
-		}
-	};
-
-	static {
-		STYLES.put( "persist", PERSIST_EJB3 );
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/engine/EJB3CascadeStyle.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/engine/EJB3CascadeStyle.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/java/org/hibernate/engine/EJB3CascadeStyle.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/engine/EJB3CascadeStyle.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,32 @@
+//$Id: $
+package org.hibernate.engine;
+
+/**
+ * Becasue CascadeStyle is not opened and package protected,
+ * I need to subclass and override the persist alias
+ *
+ * Note that This class has to be triggered by EJB3PersistEventListener at class loading time
+ *
+ * TODO get rid of it for 3.3
+ *
+ * @author Emmanuel Bernard
+ */
+public abstract class EJB3CascadeStyle extends CascadeStyle {
+
+	/**
+	 * cascade using EJB3CascadingAction
+	 */
+	public static final CascadeStyle PERSIST_EJB3 = new CascadeStyle() {
+		public boolean doCascade(CascadingAction action) {
+			return action==EJB3CascadingAction.PERSIST_SKIPLAZY
+					|| action==CascadingAction.PERSIST_ON_FLUSH;
+		}
+		public String toString() {
+			return "STYLE_PERSIST_SKIPLAZY";
+		}
+	};
+
+	static {
+		STYLES.put( "persist", PERSIST_EJB3 );
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/java/org/hibernate/engine/EJB3CascadingAction.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/engine/EJB3CascadingAction.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/engine/EJB3CascadingAction.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,47 +0,0 @@
-//$Id: $
-package org.hibernate.engine;
-
-import java.util.Map;
-import java.util.Iterator;
-
-import org.hibernate.event.EventSource;
-import org.hibernate.HibernateException;
-import org.hibernate.type.CollectionType;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * Because of CascadingAction constructor visibility
- * I need a packaged friendly subclass
- * TODO Get rid of it for 3.3
- * @author Emmanuel Bernard
- */
-public abstract class EJB3CascadingAction extends CascadingAction {
-	private static Log log = LogFactory.getLog( CascadingAction.class );
-	/**
-	 * @see org.hibernate.Session#persist(Object)
-	 */
-	public static final CascadingAction PERSIST_SKIPLAZY = new CascadingAction() {
-		public void cascade(EventSource session, Object child, String entityName, Object anything, boolean isCascadeDeleteEnabled)
-		throws HibernateException {
-			if ( log.isTraceEnabled() ) {
-				log.trace( "cascading to persist: " + entityName );
-			}
-			session.persist( entityName, child, (Map) anything );
-		}
-		public Iterator getCascadableChildrenIterator(EventSource session, CollectionType collectionType, Object collection) {
-			// persists don't cascade to uninitialized collections
-			return CascadingAction.getLoadedElementsIterator( session, collectionType, collection );
-		}
-		public boolean deleteOrphans() {
-			return false;
-		}
-		public boolean performOnLazyProperty() {
-			return false;
-		}
-		public String toString() {
-			return "ACTION_PERSIST_SKIPLAZY";
-		}
-	};
-	
-}

Copied: trunk/HibernateExt/entitymanager/src/java/org/hibernate/engine/EJB3CascadingAction.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/java/org/hibernate/engine/EJB3CascadingAction.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/java/org/hibernate/engine/EJB3CascadingAction.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/java/org/hibernate/engine/EJB3CascadingAction.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,47 @@
+//$Id: $
+package org.hibernate.engine;
+
+import java.util.Map;
+import java.util.Iterator;
+
+import org.hibernate.event.EventSource;
+import org.hibernate.HibernateException;
+import org.hibernate.type.CollectionType;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * Because of CascadingAction constructor visibility
+ * I need a packaged friendly subclass
+ * TODO Get rid of it for 3.3
+ * @author Emmanuel Bernard
+ */
+public abstract class EJB3CascadingAction extends CascadingAction {
+	private static Log log = LogFactory.getLog( CascadingAction.class );
+	/**
+	 * @see org.hibernate.Session#persist(Object)
+	 */
+	public static final CascadingAction PERSIST_SKIPLAZY = new CascadingAction() {
+		public void cascade(EventSource session, Object child, String entityName, Object anything, boolean isCascadeDeleteEnabled)
+		throws HibernateException {
+			if ( log.isTraceEnabled() ) {
+				log.trace( "cascading to persist: " + entityName );
+			}
+			session.persist( entityName, child, (Map) anything );
+		}
+		public Iterator getCascadableChildrenIterator(EventSource session, CollectionType collectionType, Object collection) {
+			// persists don't cascade to uninitialized collections
+			return CascadingAction.getLoadedElementsIterator( session, collectionType, collection );
+		}
+		public boolean deleteOrphans() {
+			return false;
+		}
+		public boolean performOnLazyProperty() {
+			return false;
+		}
+		public String toString() {
+			return "ACTION_PERSIST_SKIPLAZY";
+		}
+	};
+	
+}

Copied: trunk/HibernateExt/entitymanager/src/resources (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/resources)

Copied: trunk/HibernateExt/entitymanager/src/resources/META-INF (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/resources/META-INF)

Copied: trunk/HibernateExt/entitymanager/src/resources/META-INF/services (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/resources/META-INF/services)

Deleted: trunk/HibernateExt/entitymanager/src/resources/META-INF/services/javax.persistence.spi.PersistenceProvider
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/resources/META-INF/services/javax.persistence.spi.PersistenceProvider	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/resources/META-INF/services/javax.persistence.spi.PersistenceProvider	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1 +0,0 @@
-org.hibernate.ejb.HibernatePersistence

Copied: trunk/HibernateExt/entitymanager/src/resources/META-INF/services/javax.persistence.spi.PersistenceProvider (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/resources/META-INF/services/javax.persistence.spi.PersistenceProvider)
===================================================================
--- trunk/HibernateExt/entitymanager/src/resources/META-INF/services/javax.persistence.spi.PersistenceProvider	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/resources/META-INF/services/javax.persistence.spi.PersistenceProvider	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1 @@
+org.hibernate.ejb.HibernatePersistence

Copied: trunk/HibernateExt/entitymanager/src/resources/org (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/resources/org)

Copied: trunk/HibernateExt/entitymanager/src/resources/org/hibernate (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/resources/org/hibernate)

Copied: trunk/HibernateExt/entitymanager/src/resources/org/hibernate/ejb (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/resources/org/hibernate/ejb)

Deleted: trunk/HibernateExt/entitymanager/src/resources/org/hibernate/ejb/persistence_1_0.xsd
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/resources/org/hibernate/ejb/persistence_1_0.xsd	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/resources/org/hibernate/ejb/persistence_1_0.xsd	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,260 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- persistence.xml schema -->
-<xsd:schema targetNamespace="http://java.sun.com/xml/ns/persistence"
-            xmlns:xsd="http://www.w3.org/2001/XMLSchema"
-            xmlns:persistence="http://java.sun.com/xml/ns/persistence"
-            elementFormDefault="qualified"
-            attributeFormDefault="unqualified"
-            version="1.0">
-
-    <xsd:annotation>
-        <xsd:documentation>
-            @(#)persistence_1_0.xsd 1.0 Feb 9 2006
-        </xsd:documentation>
-    </xsd:annotation>
-    <xsd:annotation>
-        <xsd:documentation><![CDATA[
-
-     This is the XML Schema for the persistence configuration file.
-     The file must be named "META-INF/persistence.xml" in the 
-     persistence archive.
-     Persistence configuration files must indicate
-     the persistence schema by using the persistence namespace:
-
-     http://java.sun.com/xml/ns/persistence
-
-     and indicate the version of the schema by
-     using the version element as shown below:
-
-      <persistence xmlns="http://java.sun.com/xml/ns/persistence"
-        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
-          http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
-        version="1.0">
-          ...
-      </persistence>
-
-    ]]></xsd:documentation>
-    </xsd:annotation>
-
-    <xsd:simpleType name="versionType">
-        <xsd:restriction base="xsd:token">
-            <xsd:pattern value="[0-9]+(\.[0-9]+)*"/>
-        </xsd:restriction>
-    </xsd:simpleType>
-
-    <!-- **************************************************** -->
-
-    <xsd:element name="persistence">
-        <xsd:complexType>
-            <xsd:sequence>
-
-                <!-- **************************************************** -->
-
-                <xsd:element name="persistence-unit"
-                             minOccurs="0" maxOccurs="unbounded">
-                    <xsd:complexType>
-                        <xsd:annotation>
-                            <xsd:documentation>
-
-                                Configuration of a persistence unit.
-
-                            </xsd:documentation>
-                        </xsd:annotation>
-                        <xsd:sequence>
-
-                            <!-- **************************************************** -->
-
-                            <xsd:element name="description" type="xsd:string"
-                                         minOccurs="0">
-                                <xsd:annotation>
-                                    <xsd:documentation>
-
-                                        Textual description of this persistence unit.
-
-                                    </xsd:documentation>
-                                </xsd:annotation>
-                            </xsd:element>
-
-                            <!-- **************************************************** -->
-
-                            <xsd:element name="provider" type="xsd:string"
-                                         minOccurs="0">
-                                <xsd:annotation>
-                                    <xsd:documentation>
-
-                                        Provider class that supplies EntityManagers for this
-                                        persistence unit.
-
-                                    </xsd:documentation>
-                                </xsd:annotation>
-                            </xsd:element>
-
-                            <!-- **************************************************** -->
-
-                            <xsd:element name="jta-data-source" type="xsd:string"
-                                         minOccurs="0">
-                                <xsd:annotation>
-                                    <xsd:documentation>
-
-                                        The container-specific name of the JTA datasource to use.
-
-                                    </xsd:documentation>
-                                </xsd:annotation>
-                            </xsd:element>
-
-                            <!-- **************************************************** -->
-
-                            <xsd:element name="non-jta-data-source" type="xsd:string"
-                                         minOccurs="0">
-                                <xsd:annotation>
-                                    <xsd:documentation>
-
-                                        The container-specific name of a non-JTA datasource to use.
-
-                                    </xsd:documentation>
-                                </xsd:annotation>
-                            </xsd:element>
-
-                            <!-- **************************************************** -->
-
-                            <xsd:element name="mapping-file" type="xsd:string"
-                                         minOccurs="0" maxOccurs="unbounded">
-                                <xsd:annotation>
-                                    <xsd:documentation>
-
-                                        File containing mapping information. Loaded as a resource
-                                        by the persistence provider.
-
-                                    </xsd:documentation>
-                                </xsd:annotation>
-                            </xsd:element>
-
-                            <!-- **************************************************** -->
-
-                            <xsd:element name="jar-file" type="xsd:string"
-                                         minOccurs="0" maxOccurs="unbounded">
-                                <xsd:annotation>
-                                    <xsd:documentation>
-
-                                        Jar file that should be scanned for entities.
-                                        Not applicable to Java SE persistence units.
-
-                                    </xsd:documentation>
-                                </xsd:annotation>
-                            </xsd:element>
-
-                            <!-- **************************************************** -->
-
-                            <xsd:element name="class" type="xsd:string"
-                                         minOccurs="0" maxOccurs="unbounded">
-                                <xsd:annotation>
-                                    <xsd:documentation>
-
-                                        Class to scan for annotations. It should be annotated
-                                        with either @Entity, @Embeddable or @MappedSuperclass.
-
-                                    </xsd:documentation>
-                                </xsd:annotation>
-                            </xsd:element>
-
-                            <!-- **************************************************** -->
-
-                            <xsd:element name="exclude-unlisted-classes" type="xsd:boolean"
-                                         default="false" minOccurs="0">
-                                <xsd:annotation>
-                                    <xsd:documentation>
-
-                                        When set to true then only listed classes and jars will
-                                        be scanned for persistent classes, otherwise the enclosing
-                                        jar or directory will also be scanned. Not applicable to
-                                        Java SE persistence units.
-
-                                    </xsd:documentation>
-                                </xsd:annotation>
-                            </xsd:element>
-
-                            <!-- **************************************************** -->
-
-                            <xsd:element name="properties" minOccurs="0">
-                                <xsd:annotation>
-                                    <xsd:documentation>
-
-                                        A list of vendor-specific properties.
-
-                                    </xsd:documentation>
-                                </xsd:annotation>
-                                <xsd:complexType>
-                                    <xsd:sequence>
-                                        <xsd:element name="property"
-                                                     minOccurs="0" maxOccurs="unbounded">
-                                            <xsd:annotation>
-                                                <xsd:documentation>
-                                                    A name-value pair.
-                                                </xsd:documentation>
-                                            </xsd:annotation>
-                                            <xsd:complexType>
-                                                <xsd:attribute name="name" type="xsd:string"
-                                                               use="required"/>
-                                                <xsd:attribute name="value" type="xsd:string"
-                                                               use="required"/>
-                                            </xsd:complexType>
-                                        </xsd:element>
-                                    </xsd:sequence>
-                                </xsd:complexType>
-                            </xsd:element>
-
-                        </xsd:sequence>
-
-                        <!-- **************************************************** -->
-
-                        <xsd:attribute name="name" type="xsd:string" use="required">
-                            <xsd:annotation>
-                                <xsd:documentation>
-
-                                    Name used in code to reference this persistence unit.
-
-                                </xsd:documentation>
-                            </xsd:annotation>
-                        </xsd:attribute>
-
-                        <!-- **************************************************** -->
-
-                        <xsd:attribute name="transaction-type"
-                                       type="persistence:persistence-unit-transaction-type">
-                            <xsd:annotation>
-                                <xsd:documentation>
-
-                                    Type of transactions used by EntityManagers from this
-                                    persistence unit.
-
-                                </xsd:documentation>
-                            </xsd:annotation>
-                        </xsd:attribute>
-
-                    </xsd:complexType>
-                </xsd:element>
-            </xsd:sequence>
-            <xsd:attribute name="version" type="persistence:versionType"
-                           fixed="1.0" use="required"/>
-        </xsd:complexType>
-    </xsd:element>
-
-    <!-- **************************************************** -->
-
-    <xsd:simpleType name="persistence-unit-transaction-type">
-        <xsd:annotation>
-            <xsd:documentation>
-
-                public enum TransactionType { JTA, RESOURCE_LOCAL };
-
-            </xsd:documentation>
-        </xsd:annotation>
-        <xsd:restriction base="xsd:token">
-            <xsd:enumeration value="JTA"/>
-            <xsd:enumeration value="RESOURCE_LOCAL"/>
-        </xsd:restriction>
-    </xsd:simpleType>
-
-</xsd:schema>
-

Copied: trunk/HibernateExt/entitymanager/src/resources/org/hibernate/ejb/persistence_1_0.xsd (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/resources/org/hibernate/ejb/persistence_1_0.xsd)
===================================================================
--- trunk/HibernateExt/entitymanager/src/resources/org/hibernate/ejb/persistence_1_0.xsd	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/resources/org/hibernate/ejb/persistence_1_0.xsd	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,260 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- persistence.xml schema -->
+<xsd:schema targetNamespace="http://java.sun.com/xml/ns/persistence"
+            xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+            xmlns:persistence="http://java.sun.com/xml/ns/persistence"
+            elementFormDefault="qualified"
+            attributeFormDefault="unqualified"
+            version="1.0">
+
+    <xsd:annotation>
+        <xsd:documentation>
+            @(#)persistence_1_0.xsd 1.0 Feb 9 2006
+        </xsd:documentation>
+    </xsd:annotation>
+    <xsd:annotation>
+        <xsd:documentation><![CDATA[
+
+     This is the XML Schema for the persistence configuration file.
+     The file must be named "META-INF/persistence.xml" in the 
+     persistence archive.
+     Persistence configuration files must indicate
+     the persistence schema by using the persistence namespace:
+
+     http://java.sun.com/xml/ns/persistence
+
+     and indicate the version of the schema by
+     using the version element as shown below:
+
+      <persistence xmlns="http://java.sun.com/xml/ns/persistence"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
+          http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
+        version="1.0">
+          ...
+      </persistence>
+
+    ]]></xsd:documentation>
+    </xsd:annotation>
+
+    <xsd:simpleType name="versionType">
+        <xsd:restriction base="xsd:token">
+            <xsd:pattern value="[0-9]+(\.[0-9]+)*"/>
+        </xsd:restriction>
+    </xsd:simpleType>
+
+    <!-- **************************************************** -->
+
+    <xsd:element name="persistence">
+        <xsd:complexType>
+            <xsd:sequence>
+
+                <!-- **************************************************** -->
+
+                <xsd:element name="persistence-unit"
+                             minOccurs="0" maxOccurs="unbounded">
+                    <xsd:complexType>
+                        <xsd:annotation>
+                            <xsd:documentation>
+
+                                Configuration of a persistence unit.
+
+                            </xsd:documentation>
+                        </xsd:annotation>
+                        <xsd:sequence>
+
+                            <!-- **************************************************** -->
+
+                            <xsd:element name="description" type="xsd:string"
+                                         minOccurs="0">
+                                <xsd:annotation>
+                                    <xsd:documentation>
+
+                                        Textual description of this persistence unit.
+
+                                    </xsd:documentation>
+                                </xsd:annotation>
+                            </xsd:element>
+
+                            <!-- **************************************************** -->
+
+                            <xsd:element name="provider" type="xsd:string"
+                                         minOccurs="0">
+                                <xsd:annotation>
+                                    <xsd:documentation>
+
+                                        Provider class that supplies EntityManagers for this
+                                        persistence unit.
+
+                                    </xsd:documentation>
+                                </xsd:annotation>
+                            </xsd:element>
+
+                            <!-- **************************************************** -->
+
+                            <xsd:element name="jta-data-source" type="xsd:string"
+                                         minOccurs="0">
+                                <xsd:annotation>
+                                    <xsd:documentation>
+
+                                        The container-specific name of the JTA datasource to use.
+
+                                    </xsd:documentation>
+                                </xsd:annotation>
+                            </xsd:element>
+
+                            <!-- **************************************************** -->
+
+                            <xsd:element name="non-jta-data-source" type="xsd:string"
+                                         minOccurs="0">
+                                <xsd:annotation>
+                                    <xsd:documentation>
+
+                                        The container-specific name of a non-JTA datasource to use.
+
+                                    </xsd:documentation>
+                                </xsd:annotation>
+                            </xsd:element>
+
+                            <!-- **************************************************** -->
+
+                            <xsd:element name="mapping-file" type="xsd:string"
+                                         minOccurs="0" maxOccurs="unbounded">
+                                <xsd:annotation>
+                                    <xsd:documentation>
+
+                                        File containing mapping information. Loaded as a resource
+                                        by the persistence provider.
+
+                                    </xsd:documentation>
+                                </xsd:annotation>
+                            </xsd:element>
+
+                            <!-- **************************************************** -->
+
+                            <xsd:element name="jar-file" type="xsd:string"
+                                         minOccurs="0" maxOccurs="unbounded">
+                                <xsd:annotation>
+                                    <xsd:documentation>
+
+                                        Jar file that should be scanned for entities.
+                                        Not applicable to Java SE persistence units.
+
+                                    </xsd:documentation>
+                                </xsd:annotation>
+                            </xsd:element>
+
+                            <!-- **************************************************** -->
+
+                            <xsd:element name="class" type="xsd:string"
+                                         minOccurs="0" maxOccurs="unbounded">
+                                <xsd:annotation>
+                                    <xsd:documentation>
+
+                                        Class to scan for annotations. It should be annotated
+                                        with either @Entity, @Embeddable or @MappedSuperclass.
+
+                                    </xsd:documentation>
+                                </xsd:annotation>
+                            </xsd:element>
+
+                            <!-- **************************************************** -->
+
+                            <xsd:element name="exclude-unlisted-classes" type="xsd:boolean"
+                                         default="false" minOccurs="0">
+                                <xsd:annotation>
+                                    <xsd:documentation>
+
+                                        When set to true then only listed classes and jars will
+                                        be scanned for persistent classes, otherwise the enclosing
+                                        jar or directory will also be scanned. Not applicable to
+                                        Java SE persistence units.
+
+                                    </xsd:documentation>
+                                </xsd:annotation>
+                            </xsd:element>
+
+                            <!-- **************************************************** -->
+
+                            <xsd:element name="properties" minOccurs="0">
+                                <xsd:annotation>
+                                    <xsd:documentation>
+
+                                        A list of vendor-specific properties.
+
+                                    </xsd:documentation>
+                                </xsd:annotation>
+                                <xsd:complexType>
+                                    <xsd:sequence>
+                                        <xsd:element name="property"
+                                                     minOccurs="0" maxOccurs="unbounded">
+                                            <xsd:annotation>
+                                                <xsd:documentation>
+                                                    A name-value pair.
+                                                </xsd:documentation>
+                                            </xsd:annotation>
+                                            <xsd:complexType>
+                                                <xsd:attribute name="name" type="xsd:string"
+                                                               use="required"/>
+                                                <xsd:attribute name="value" type="xsd:string"
+                                                               use="required"/>
+                                            </xsd:complexType>
+                                        </xsd:element>
+                                    </xsd:sequence>
+                                </xsd:complexType>
+                            </xsd:element>
+
+                        </xsd:sequence>
+
+                        <!-- **************************************************** -->
+
+                        <xsd:attribute name="name" type="xsd:string" use="required">
+                            <xsd:annotation>
+                                <xsd:documentation>
+
+                                    Name used in code to reference this persistence unit.
+
+                                </xsd:documentation>
+                            </xsd:annotation>
+                        </xsd:attribute>
+
+                        <!-- **************************************************** -->
+
+                        <xsd:attribute name="transaction-type"
+                                       type="persistence:persistence-unit-transaction-type">
+                            <xsd:annotation>
+                                <xsd:documentation>
+
+                                    Type of transactions used by EntityManagers from this
+                                    persistence unit.
+
+                                </xsd:documentation>
+                            </xsd:annotation>
+                        </xsd:attribute>
+
+                    </xsd:complexType>
+                </xsd:element>
+            </xsd:sequence>
+            <xsd:attribute name="version" type="persistence:versionType"
+                           fixed="1.0" use="required"/>
+        </xsd:complexType>
+    </xsd:element>
+
+    <!-- **************************************************** -->
+
+    <xsd:simpleType name="persistence-unit-transaction-type">
+        <xsd:annotation>
+            <xsd:documentation>
+
+                public enum TransactionType { JTA, RESOURCE_LOCAL };
+
+            </xsd:documentation>
+        </xsd:annotation>
+        <xsd:restriction base="xsd:token">
+            <xsd:enumeration value="JTA"/>
+            <xsd:enumeration value="RESOURCE_LOCAL"/>
+        </xsd:restriction>
+    </xsd:simpleType>
+
+</xsd:schema>
+

Copied: trunk/HibernateExt/entitymanager/src/test (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test)

Deleted: trunk/HibernateExt/entitymanager/src/test/NoPackageEntity.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/NoPackageEntity.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/NoPackageEntity.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,9 +0,0 @@
-//$Id: $
-
-/**
- * @author Emmanuel Bernard
- */
-public class NoPackageEntity {
-	private Integer id;
-	private String name;
-}

Copied: trunk/HibernateExt/entitymanager/src/test/NoPackageEntity.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/NoPackageEntity.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/NoPackageEntity.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/NoPackageEntity.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,9 @@
+//$Id: $
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class NoPackageEntity {
+	private Integer id;
+	private String name;
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/hibernate.properties
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/hibernate.properties	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/hibernate.properties	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,491 +0,0 @@
-###############
-### EJB 3.0 ###
-###############
-
-## select Hibernate persistence provider
-
-javax.persistence.provider org.hibernate.ejb.HibernatePersistence
-javax.persistence.transactionType=RESOURCE_LOCAL
-
-## entity bean class name (comma separated)
-
-#hibernate.ejb.classes org.hibernate.ejb.test.Item, org.hibernate.ejb.test.Distributor
-
-## entity caching (strategy, optional region name)
-#hibernate.ejb.classcache.org.hibernate.ejb.test.Item read-write, RegionName
-#hibernate.ejb.classcache.org.hibernate.ejb.test.Item read-write
-
-## collection caching (role, optional region name)
-#hibernate.ejb.collectioncache.org.hibernate.ejb.test.Item.distributors read-write, RegionName
-
-######################
-### Query Language ###
-######################
-
-## define query language constants / function names
-
-hibernate.query.substitutions true 1, false 0, yes 'Y', no 'N'
-
-
-## select the classic query parser
-
-#hibernate.query.factory_class org.hibernate.hql.classic.ClassicQueryTranslatorFactory
-
-
-
-#################
-### Platforms ###
-#################
-
-## JNDI Datasource
-
-#hibernate.connection.datasource jdbc/test
-#hibernate.connection.username db2
-#hibernate.connection.password db2
-
-
-## HypersonicSQL
-
-hibernate.dialect org.hibernate.dialect.HSQLDialect
-hibernate.connection.driver_class org.hsqldb.jdbcDriver
-hibernate.connection.username sa
-hibernate.connection.password
-hibernate.connection.url jdbc:hsqldb:hsql://localhost
-hibernate.connection.url jdbc:hsqldb:test
-hibernate.connection.url jdbc:hsqldb:.
-
-
-## MySQL
-
-#hibernate.dialect org.hibernate.dialect.MySQLDialect
-#hibernate.dialect org.hibernate.dialect.MySQLInnoDBDialect
-#hibernate.dialect org.hibernate.dialect.MySQLMyISAMDialect
-#hibernate.connection.driver_class org.gjt.mm.mysql.Driver
-#hibernate.connection.driver_class com.mysql.jdbc.Driver
-#hibernate.connection.url jdbc:mysql:///test
-#hibernate.connection.username emmanuel
-#hibernate.connection.password
-
-
-## Oracle
-
-#hibernate.dialect org.hibernate.dialect.OracleDialect
-#hibernate.dialect org.hibernate.dialect.Oracle9Dialect
-#hibernate.connection.driver_class oracle.jdbc.driver.OracleDriver
-#hibernate.connection.username ora
-#hibernate.connection.password ora
-#hibernate.connection.url jdbc:oracle:thin:@localhost:1521:test
-
-
-## PostgreSQL
-
-#hibernate.dialect org.hibernate.dialect.PostgreSQLDialect
-#hibernate.connection.driver_class org.postgresql.Driver
-#hibernate.connection.url jdbc:postgresql:annotations
-#hibernate.connection.username postgres
-#hibernate.connection.password hibernate
-#hibernate.query.substitutions yes 'Y', no 'N'
-
-
-## DB2
-
-#hibernate.dialect org.hibernate.dialect.DB2Dialect
-#hibernate.connection.driver_class COM.ibm.db2.jdbc.app.DB2Driver
-#hibernate.connection.url jdbc:db2:test
-#hibernate.connection.username db2
-#hibernate.connection.password db2
-
-## TimesTen (not supported yet)
-
-#hibernate.dialect org.hibernate.dialect.TimesTenDialect
-#hibernate.connection.driver_class com.timesten.jdbc.TimesTenDriver
-#hibernate.connection.url jdbc:timesten:direct:test
-#hibernate.connection.username
-#hibernate.connection.password 
-
-## DB2/400
-
-#hibernate.dialect org.hibernate.dialect.DB2400Dialect
-#hibernate.connection.username user
-#hibernate.connection.password password
-
-## Native driver
-#hibernate.connection.driver_class COM.ibm.db2.jdbc.app.DB2Driver
-#hibernate.connection.url jdbc:db2://systemname
-
-## Toolbox driver
-#hibernate.connection.driver_class com.ibm.as400.access.AS400JDBCDriver
-#hibernate.connection.url jdbc:as400://systemname
-
-
-## Derby (Not supported!)
-
-#hibernate.dialect org.hibernate.dialect.DerbyDialect
-#hibernate.connection.driver_class org.apache.derby.jdbc.EmbeddedDriver
-#hibernate.connection.username
-#hibernate.connection.password
-#hibernate.connection.url jdbc:derby:/test;create=true
-
-
-## Sybase
-
-#hibernate.dialect org.hibernate.dialect.SybaseDialect
-#hibernate.connection.driver_class com.sybase.jdbc2.jdbc.SybDriver
-#hibernate.connection.username sa
-#hibernate.connection.password sasasa
-#hibernate.connection.url jdbc:sybase:Tds:co3061835-a:5000/tempdb
-
-
-## Mckoi SQL
-
-#hibernate.dialect org.hibernate.dialect.MckoiDialect
-#hibernate.connection.driver_class com.mckoi.JDBCDriver
-#hibernate.connection.url jdbc:mckoi:///
-#hibernate.connection.url jdbc:mckoi:local://C:/mckoi1.00/db.conf
-#hibernate.connection.username admin
-#hibernate.connection.password nimda
-
-
-## SAP DB
-
-#hibernate.dialect org.hibernate.dialect.SAPDBDialect
-#hibernate.connection.driver_class com.sap.dbtech.jdbc.DriverSapDB
-#hibernate.connection.url jdbc:sapdb://localhost/TST
-#hibernate.connection.username TEST
-#hibernate.connection.password TEST
-#hibernate.query.substitutions yes 'Y', no 'N'
-
-
-## MS SQL Server
-
-#hibernate.dialect org.hibernate.dialect.SQLServerDialect
-#hibernate.connection.username sa
-#hibernate.connection.password sa
-
-## JSQL Driver
-#hibernate.connection.driver_class com.jnetdirect.jsql.JSQLDriver
-#hibernate.connection.url jdbc:JSQLConnect://1E1/test
-
-## JTURBO Driver
-#hibernate.connection.driver_class com.newatlanta.jturbo.driver.Driver
-#hibernate.connection.url jdbc:JTurbo://1E1:1433/test
-
-## WebLogic Driver
-#hibernate.connection.driver_class weblogic.jdbc.mssqlserver4.Driver
-#hibernate.connection.url jdbc:weblogic:mssqlserver4:1E1:1433
-
-## Microsoft Driver (not recommended!)
-#hibernate.connection.driver_class com.microsoft.jdbc.sqlserver.SQLServerDriver
-#hibernate.connection.url jdbc:microsoft:sqlserver://1E1;DatabaseName=test;SelectMethod=cursor
-
-## jTDS (since version 0.9)
-#hibernate.connection.driver_class net.sourceforge.jtds.jdbc.Driver
-#hibernate.connection.url jdbc:jtds:sqlserver://1E1/test
-
-## Interbase
-
-#hibernate.dialect org.hibernate.dialect.InterbaseDialect
-#hibernate.connection.username sysdba
-#hibernate.connection.password masterkey
-
-## DO NOT specify hibernate.connection.sqlDialect
-
-## InterClient
-
-#hibernate.connection.driver_class interbase.interclient.Driver
-#hibernate.connection.url jdbc:interbase://localhost:3060/C:/firebird/test.gdb
-
-## Pure Java
-
-#hibernate.connection.driver_class org.firebirdsql.jdbc.FBDriver
-#hibernate.connection.url jdbc:firebirdsql:localhost/3050:/firebird/test.gdb
-
-
-## Pointbase
-
-#hibernate.dialect org.hibernate.dialect.PointbaseDialect
-#hibernate.connection.driver_class com.pointbase.jdbc.jdbcUniversalDriver
-#hibernate.connection.url jdbc:pointbase:embedded:sample
-#hibernate.connection.username PBPUBLIC
-#hibernate.connection.password PBPUBLIC
-
-
-
-#################################
-### Hibernate Connection Pool ###
-#################################
-
-hibernate.connection.pool_size 1
-
-
-
-###########################
-### C3P0 Connection Pool###
-###########################
-
-#hibernate.c3p0.max_size 2
-#hibernate.c3p0.min_size 2
-#hibernate.c3p0.timeout 5000
-#hibernate.c3p0.max_statements 100
-#hibernate.c3p0.idle_test_period 3000
-#hibernate.c3p0.acquire_increment 2
-#hibernate.c3p0.validate false
-
-
-
-##############################
-### Proxool Connection Pool###
-##############################
-
-## Properties for external configuration of Proxool
-
-hibernate.proxool.pool_alias pool1
-
-## Only need one of the following
-
-#hibernate.proxool.existing_pool true
-#hibernate.proxool.xml proxool.xml
-#hibernate.proxool.properties proxool.properties
-
-
-
-#################################
-### Plugin ConnectionProvider ###
-#################################
-
-## use a custom ConnectionProvider (if not set, Hibernate will choose a built-in ConnectionProvider using hueristics)
-
-#hibernate.connection.provider_class org.hibernate.connection.DriverManagerConnectionProvider
-#hibernate.connection.provider_class org.hibernate.connection.DatasourceConnectionProvider
-#hibernate.connection.provider_class org.hibernate.connection.C3P0ConnectionProvider
-#hibernate.connection.provider_class org.hibernate.connection.DBCPConnectionProvider
-#hibernate.connection.provider_class org.hibernate.connection.ProxoolConnectionProvider
-
-
-
-#######################
-### Transaction API ###
-#######################
-
-## Enable automatic flush during the JTA beforeCompletion() callback
-## (This setting is relevant with or without the Transaction API)
-
-#hibernate.transaction.flush_before_completion
-
-
-## Enable automatic session close at the end of transaction
-## (This setting is relevant with or without the Transaction API)
-
-#hibernate.transaction.auto_close_session
-
-
-## the Transaction API abstracts application code from the underlying JTA or JDBC transactions
-
-#hibernate.transaction.factory_class org.hibernate.transaction.JTATransactionFactory
-#hibernate.transaction.factory_class org.hibernate.transaction.JDBCTransactionFactory
-
-
-## to use JTATransactionFactory, Hibernate must be able to locate the UserTransaction in JNDI
-## default is java:comp/UserTransaction
-## you do NOT need this setting if you specify hibernate.transaction.manager_lookup_class
-
-#jta.UserTransaction jta/usertransaction
-#jta.UserTransaction javax.transaction.UserTransaction
-#jta.UserTransaction UserTransaction
-
-
-## to use the second-level cache with JTA, Hibernate must be able to obtain the JTA TransactionManager
-
-#hibernate.transaction.manager_lookup_class org.hibernate.transaction.JBossTransactionManagerLookup
-#hibernate.transaction.manager_lookup_class org.hibernate.transaction.WeblogicTransactionManagerLookup
-#hibernate.transaction.manager_lookup_class org.hibernate.transaction.WebSphereTransactionManagerLookup
-#hibernate.transaction.manager_lookup_class org.hibernate.transaction.OrionTransactionManagerLookup
-#hibernate.transaction.manager_lookup_class org.hibernate.transaction.ResinTransactionManagerLookup
-
-
-
-##############################
-### Miscellaneous Settings ###
-##############################
-
-## print all generated SQL to the console
-
-#hibernate.show_sql true
-
-
-## add comments to the generated SQL
-
-#hibernate.use_sql_comments true
-
-
-## generate statistics
-
-#hibernate.generate_statistics true
-
-
-## auto schema export
-
-hibernate.hbm2ddl.auto create-drop
-#hibernate.hbm2ddl.auto create
-#hibernate.hbm2ddl.auto update
-
-
-## specify a default schema and catalog for unqualified tablenames
-
-#hibernate.default_schema test
-#hibernate.default_catalog test
-
-
-## enable ordering of SQL UPDATEs by primary key
-
-hibernate.order_updates true
-
-
-## set the maximum depth of the outer join fetch tree
-
-hibernate.max_fetch_depth 1
-
-
-## set the default batch size for batch fetching
-
-hibernate.default_batch_fetch_size 8
-
-
-## rollback generated identifier values of deleted entities to default values
-
-#hibernate.use_identifer_rollback true
-
-
-## enable CGLIB reflection optimizer (enabled by default)
-
-#hibernate.cglib.use_reflection_optimizer false
-
-
-
-#####################
-### JDBC Settings ###
-#####################
-
-## specify a JDBC isolation level
-
-#hibernate.connection.isolation 4
-
-
-## enable JDBC autocommit (not recommended!)
-
-#hibernate.connection.autocommit true
-
-
-## set the JDBC fetch size
-
-#hibernate.jdbc.fetch_size 25
-
-
-## set the maximum JDBC 2 batch size (a nonzero value enables batching)
-
-#hibernate.jdbc.batch_size 5
-
-
-## enable batch updates even for versioned data
-
-hibernate.jdbc.batch_versioned_data true
-
-
-## enable use of JDBC 2 scrollable ResultSets (specifying a Dialect will cause Hibernate to use a sensible default)
-
-#hibernate.jdbc.use_scrollable_resultset true
-
-
-## use streams when writing binary types to / from JDBC
-
-hibernate.jdbc.use_streams_for_binary true
-
-
-## use JDBC 3 PreparedStatement.getGeneratedKeys() to get the identifier of an inserted row
-
-#hibernate.jdbc.use_get_generated_keys false
-
-
-## choose a custom JDBC batcher
-
-# hibernate.jdbc.factory_class
-
-
-## enable JDBC result set column alias caching 
-## (minor performance enhancement for broken JDBC drivers)
-
-# hibernate.jdbc.wrap_result_sets
-
-
-## choose a custom SQL exception converter
-
-#hibernate.jdbc.sql_exception_converter
-
-
-
-##########################
-### Second-level Cache ###
-##########################
-
-## optimize chache for minimal "puts" instead of minimal "gets" (good for clustered cache)
-
-#hibernate.cache.use_minimal_puts true
-
-
-## set a prefix for cache region names
-
-hibernate.cache.region_prefix hibernate.test
-
-
-## disable the second-level cache
-
-#hibernate.cache.use_second_level_cache false
-
-
-## enable the query cache
-
-#hibernate.cache.use_query_cache true
-
-
-## store the second-level cache entries in a more human-friendly format
-
-#hibernate.cache.use_structured_entries true
-
-
-## choose a cache implementation
-
-#hibernate.cache.provider_class org.hibernate.cache.EhCacheProvider
-#hibernate.cache.provider_class org.hibernate.cache.EmptyCacheProvider
-hibernate.cache.provider_class org.hibernate.cache.HashtableCacheProvider
-#hibernate.cache.provider_class org.hibernate.cache.TreeCacheProvider
-#hibernate.cache.provider_class org.hibernate.cache.OSCacheProvider
-#hibernate.cache.provider_class org.hibernate.cache.SwarmCacheProvider
-
-
-## choose a custom query cache implementation
-
-#hibernate.cache.query_cache_factory
-
-
-
-############
-### JNDI ###
-############
-
-## specify a JNDI name for the SessionFactory
-
-#hibernate.session_factory_name hibernate/session_factory
-
-
-## Hibernate uses JNDI to bind a name to a SessionFactory and to look up the JTA UserTransaction;
-## if hibernate.jndi.* are not specified, Hibernate will use the default InitialContext() which
-## is the best approach in an application server
-
-#file system
-#hibernate.jndi.class com.sun.jndi.fscontext.RefFSContextFactory
-#hibernate.jndi.url file:/
-
-#WebSphere
-#hibernate.jndi.class com.ibm.websphere.naming.WsnInitialContextFactory
-#hibernate.jndi.url iiop://localhost:900/
-

Copied: trunk/HibernateExt/entitymanager/src/test/hibernate.properties (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/hibernate.properties)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/hibernate.properties	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/hibernate.properties	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,491 @@
+###############
+### EJB 3.0 ###
+###############
+
+## select Hibernate persistence provider
+
+javax.persistence.provider org.hibernate.ejb.HibernatePersistence
+javax.persistence.transactionType=RESOURCE_LOCAL
+
+## entity bean class name (comma separated)
+
+#hibernate.ejb.classes org.hibernate.ejb.test.Item, org.hibernate.ejb.test.Distributor
+
+## entity caching (strategy, optional region name)
+#hibernate.ejb.classcache.org.hibernate.ejb.test.Item read-write, RegionName
+#hibernate.ejb.classcache.org.hibernate.ejb.test.Item read-write
+
+## collection caching (role, optional region name)
+#hibernate.ejb.collectioncache.org.hibernate.ejb.test.Item.distributors read-write, RegionName
+
+######################
+### Query Language ###
+######################
+
+## define query language constants / function names
+
+hibernate.query.substitutions true 1, false 0, yes 'Y', no 'N'
+
+
+## select the classic query parser
+
+#hibernate.query.factory_class org.hibernate.hql.classic.ClassicQueryTranslatorFactory
+
+
+
+#################
+### Platforms ###
+#################
+
+## JNDI Datasource
+
+#hibernate.connection.datasource jdbc/test
+#hibernate.connection.username db2
+#hibernate.connection.password db2
+
+
+## HypersonicSQL
+
+hibernate.dialect org.hibernate.dialect.HSQLDialect
+hibernate.connection.driver_class org.hsqldb.jdbcDriver
+hibernate.connection.username sa
+hibernate.connection.password
+hibernate.connection.url jdbc:hsqldb:hsql://localhost
+hibernate.connection.url jdbc:hsqldb:test
+hibernate.connection.url jdbc:hsqldb:.
+
+
+## MySQL
+
+#hibernate.dialect org.hibernate.dialect.MySQLDialect
+#hibernate.dialect org.hibernate.dialect.MySQLInnoDBDialect
+#hibernate.dialect org.hibernate.dialect.MySQLMyISAMDialect
+#hibernate.connection.driver_class org.gjt.mm.mysql.Driver
+#hibernate.connection.driver_class com.mysql.jdbc.Driver
+#hibernate.connection.url jdbc:mysql:///test
+#hibernate.connection.username emmanuel
+#hibernate.connection.password
+
+
+## Oracle
+
+#hibernate.dialect org.hibernate.dialect.OracleDialect
+#hibernate.dialect org.hibernate.dialect.Oracle9Dialect
+#hibernate.connection.driver_class oracle.jdbc.driver.OracleDriver
+#hibernate.connection.username ora
+#hibernate.connection.password ora
+#hibernate.connection.url jdbc:oracle:thin:@localhost:1521:test
+
+
+## PostgreSQL
+
+#hibernate.dialect org.hibernate.dialect.PostgreSQLDialect
+#hibernate.connection.driver_class org.postgresql.Driver
+#hibernate.connection.url jdbc:postgresql:annotations
+#hibernate.connection.username postgres
+#hibernate.connection.password hibernate
+#hibernate.query.substitutions yes 'Y', no 'N'
+
+
+## DB2
+
+#hibernate.dialect org.hibernate.dialect.DB2Dialect
+#hibernate.connection.driver_class COM.ibm.db2.jdbc.app.DB2Driver
+#hibernate.connection.url jdbc:db2:test
+#hibernate.connection.username db2
+#hibernate.connection.password db2
+
+## TimesTen (not supported yet)
+
+#hibernate.dialect org.hibernate.dialect.TimesTenDialect
+#hibernate.connection.driver_class com.timesten.jdbc.TimesTenDriver
+#hibernate.connection.url jdbc:timesten:direct:test
+#hibernate.connection.username
+#hibernate.connection.password 
+
+## DB2/400
+
+#hibernate.dialect org.hibernate.dialect.DB2400Dialect
+#hibernate.connection.username user
+#hibernate.connection.password password
+
+## Native driver
+#hibernate.connection.driver_class COM.ibm.db2.jdbc.app.DB2Driver
+#hibernate.connection.url jdbc:db2://systemname
+
+## Toolbox driver
+#hibernate.connection.driver_class com.ibm.as400.access.AS400JDBCDriver
+#hibernate.connection.url jdbc:as400://systemname
+
+
+## Derby (Not supported!)
+
+#hibernate.dialect org.hibernate.dialect.DerbyDialect
+#hibernate.connection.driver_class org.apache.derby.jdbc.EmbeddedDriver
+#hibernate.connection.username
+#hibernate.connection.password
+#hibernate.connection.url jdbc:derby:/test;create=true
+
+
+## Sybase
+
+#hibernate.dialect org.hibernate.dialect.SybaseDialect
+#hibernate.connection.driver_class com.sybase.jdbc2.jdbc.SybDriver
+#hibernate.connection.username sa
+#hibernate.connection.password sasasa
+#hibernate.connection.url jdbc:sybase:Tds:co3061835-a:5000/tempdb
+
+
+## Mckoi SQL
+
+#hibernate.dialect org.hibernate.dialect.MckoiDialect
+#hibernate.connection.driver_class com.mckoi.JDBCDriver
+#hibernate.connection.url jdbc:mckoi:///
+#hibernate.connection.url jdbc:mckoi:local://C:/mckoi1.00/db.conf
+#hibernate.connection.username admin
+#hibernate.connection.password nimda
+
+
+## SAP DB
+
+#hibernate.dialect org.hibernate.dialect.SAPDBDialect
+#hibernate.connection.driver_class com.sap.dbtech.jdbc.DriverSapDB
+#hibernate.connection.url jdbc:sapdb://localhost/TST
+#hibernate.connection.username TEST
+#hibernate.connection.password TEST
+#hibernate.query.substitutions yes 'Y', no 'N'
+
+
+## MS SQL Server
+
+#hibernate.dialect org.hibernate.dialect.SQLServerDialect
+#hibernate.connection.username sa
+#hibernate.connection.password sa
+
+## JSQL Driver
+#hibernate.connection.driver_class com.jnetdirect.jsql.JSQLDriver
+#hibernate.connection.url jdbc:JSQLConnect://1E1/test
+
+## JTURBO Driver
+#hibernate.connection.driver_class com.newatlanta.jturbo.driver.Driver
+#hibernate.connection.url jdbc:JTurbo://1E1:1433/test
+
+## WebLogic Driver
+#hibernate.connection.driver_class weblogic.jdbc.mssqlserver4.Driver
+#hibernate.connection.url jdbc:weblogic:mssqlserver4:1E1:1433
+
+## Microsoft Driver (not recommended!)
+#hibernate.connection.driver_class com.microsoft.jdbc.sqlserver.SQLServerDriver
+#hibernate.connection.url jdbc:microsoft:sqlserver://1E1;DatabaseName=test;SelectMethod=cursor
+
+## jTDS (since version 0.9)
+#hibernate.connection.driver_class net.sourceforge.jtds.jdbc.Driver
+#hibernate.connection.url jdbc:jtds:sqlserver://1E1/test
+
+## Interbase
+
+#hibernate.dialect org.hibernate.dialect.InterbaseDialect
+#hibernate.connection.username sysdba
+#hibernate.connection.password masterkey
+
+## DO NOT specify hibernate.connection.sqlDialect
+
+## InterClient
+
+#hibernate.connection.driver_class interbase.interclient.Driver
+#hibernate.connection.url jdbc:interbase://localhost:3060/C:/firebird/test.gdb
+
+## Pure Java
+
+#hibernate.connection.driver_class org.firebirdsql.jdbc.FBDriver
+#hibernate.connection.url jdbc:firebirdsql:localhost/3050:/firebird/test.gdb
+
+
+## Pointbase
+
+#hibernate.dialect org.hibernate.dialect.PointbaseDialect
+#hibernate.connection.driver_class com.pointbase.jdbc.jdbcUniversalDriver
+#hibernate.connection.url jdbc:pointbase:embedded:sample
+#hibernate.connection.username PBPUBLIC
+#hibernate.connection.password PBPUBLIC
+
+
+
+#################################
+### Hibernate Connection Pool ###
+#################################
+
+hibernate.connection.pool_size 1
+
+
+
+###########################
+### C3P0 Connection Pool###
+###########################
+
+#hibernate.c3p0.max_size 2
+#hibernate.c3p0.min_size 2
+#hibernate.c3p0.timeout 5000
+#hibernate.c3p0.max_statements 100
+#hibernate.c3p0.idle_test_period 3000
+#hibernate.c3p0.acquire_increment 2
+#hibernate.c3p0.validate false
+
+
+
+##############################
+### Proxool Connection Pool###
+##############################
+
+## Properties for external configuration of Proxool
+
+hibernate.proxool.pool_alias pool1
+
+## Only need one of the following
+
+#hibernate.proxool.existing_pool true
+#hibernate.proxool.xml proxool.xml
+#hibernate.proxool.properties proxool.properties
+
+
+
+#################################
+### Plugin ConnectionProvider ###
+#################################
+
+## use a custom ConnectionProvider (if not set, Hibernate will choose a built-in ConnectionProvider using hueristics)
+
+#hibernate.connection.provider_class org.hibernate.connection.DriverManagerConnectionProvider
+#hibernate.connection.provider_class org.hibernate.connection.DatasourceConnectionProvider
+#hibernate.connection.provider_class org.hibernate.connection.C3P0ConnectionProvider
+#hibernate.connection.provider_class org.hibernate.connection.DBCPConnectionProvider
+#hibernate.connection.provider_class org.hibernate.connection.ProxoolConnectionProvider
+
+
+
+#######################
+### Transaction API ###
+#######################
+
+## Enable automatic flush during the JTA beforeCompletion() callback
+## (This setting is relevant with or without the Transaction API)
+
+#hibernate.transaction.flush_before_completion
+
+
+## Enable automatic session close at the end of transaction
+## (This setting is relevant with or without the Transaction API)
+
+#hibernate.transaction.auto_close_session
+
+
+## the Transaction API abstracts application code from the underlying JTA or JDBC transactions
+
+#hibernate.transaction.factory_class org.hibernate.transaction.JTATransactionFactory
+#hibernate.transaction.factory_class org.hibernate.transaction.JDBCTransactionFactory
+
+
+## to use JTATransactionFactory, Hibernate must be able to locate the UserTransaction in JNDI
+## default is java:comp/UserTransaction
+## you do NOT need this setting if you specify hibernate.transaction.manager_lookup_class
+
+#jta.UserTransaction jta/usertransaction
+#jta.UserTransaction javax.transaction.UserTransaction
+#jta.UserTransaction UserTransaction
+
+
+## to use the second-level cache with JTA, Hibernate must be able to obtain the JTA TransactionManager
+
+#hibernate.transaction.manager_lookup_class org.hibernate.transaction.JBossTransactionManagerLookup
+#hibernate.transaction.manager_lookup_class org.hibernate.transaction.WeblogicTransactionManagerLookup
+#hibernate.transaction.manager_lookup_class org.hibernate.transaction.WebSphereTransactionManagerLookup
+#hibernate.transaction.manager_lookup_class org.hibernate.transaction.OrionTransactionManagerLookup
+#hibernate.transaction.manager_lookup_class org.hibernate.transaction.ResinTransactionManagerLookup
+
+
+
+##############################
+### Miscellaneous Settings ###
+##############################
+
+## print all generated SQL to the console
+
+#hibernate.show_sql true
+
+
+## add comments to the generated SQL
+
+#hibernate.use_sql_comments true
+
+
+## generate statistics
+
+#hibernate.generate_statistics true
+
+
+## auto schema export
+
+hibernate.hbm2ddl.auto create-drop
+#hibernate.hbm2ddl.auto create
+#hibernate.hbm2ddl.auto update
+
+
+## specify a default schema and catalog for unqualified tablenames
+
+#hibernate.default_schema test
+#hibernate.default_catalog test
+
+
+## enable ordering of SQL UPDATEs by primary key
+
+hibernate.order_updates true
+
+
+## set the maximum depth of the outer join fetch tree
+
+hibernate.max_fetch_depth 1
+
+
+## set the default batch size for batch fetching
+
+hibernate.default_batch_fetch_size 8
+
+
+## rollback generated identifier values of deleted entities to default values
+
+#hibernate.use_identifer_rollback true
+
+
+## enable CGLIB reflection optimizer (enabled by default)
+
+#hibernate.cglib.use_reflection_optimizer false
+
+
+
+#####################
+### JDBC Settings ###
+#####################
+
+## specify a JDBC isolation level
+
+#hibernate.connection.isolation 4
+
+
+## enable JDBC autocommit (not recommended!)
+
+#hibernate.connection.autocommit true
+
+
+## set the JDBC fetch size
+
+#hibernate.jdbc.fetch_size 25
+
+
+## set the maximum JDBC 2 batch size (a nonzero value enables batching)
+
+#hibernate.jdbc.batch_size 5
+
+
+## enable batch updates even for versioned data
+
+hibernate.jdbc.batch_versioned_data true
+
+
+## enable use of JDBC 2 scrollable ResultSets (specifying a Dialect will cause Hibernate to use a sensible default)
+
+#hibernate.jdbc.use_scrollable_resultset true
+
+
+## use streams when writing binary types to / from JDBC
+
+hibernate.jdbc.use_streams_for_binary true
+
+
+## use JDBC 3 PreparedStatement.getGeneratedKeys() to get the identifier of an inserted row
+
+#hibernate.jdbc.use_get_generated_keys false
+
+
+## choose a custom JDBC batcher
+
+# hibernate.jdbc.factory_class
+
+
+## enable JDBC result set column alias caching 
+## (minor performance enhancement for broken JDBC drivers)
+
+# hibernate.jdbc.wrap_result_sets
+
+
+## choose a custom SQL exception converter
+
+#hibernate.jdbc.sql_exception_converter
+
+
+
+##########################
+### Second-level Cache ###
+##########################
+
+## optimize chache for minimal "puts" instead of minimal "gets" (good for clustered cache)
+
+#hibernate.cache.use_minimal_puts true
+
+
+## set a prefix for cache region names
+
+hibernate.cache.region_prefix hibernate.test
+
+
+## disable the second-level cache
+
+#hibernate.cache.use_second_level_cache false
+
+
+## enable the query cache
+
+#hibernate.cache.use_query_cache true
+
+
+## store the second-level cache entries in a more human-friendly format
+
+#hibernate.cache.use_structured_entries true
+
+
+## choose a cache implementation
+
+#hibernate.cache.provider_class org.hibernate.cache.EhCacheProvider
+#hibernate.cache.provider_class org.hibernate.cache.EmptyCacheProvider
+hibernate.cache.provider_class org.hibernate.cache.HashtableCacheProvider
+#hibernate.cache.provider_class org.hibernate.cache.TreeCacheProvider
+#hibernate.cache.provider_class org.hibernate.cache.OSCacheProvider
+#hibernate.cache.provider_class org.hibernate.cache.SwarmCacheProvider
+
+
+## choose a custom query cache implementation
+
+#hibernate.cache.query_cache_factory
+
+
+
+############
+### JNDI ###
+############
+
+## specify a JNDI name for the SessionFactory
+
+#hibernate.session_factory_name hibernate/session_factory
+
+
+## Hibernate uses JNDI to bind a name to a SessionFactory and to look up the JTA UserTransaction;
+## if hibernate.jndi.* are not specified, Hibernate will use the default InitialContext() which
+## is the best approach in an application server
+
+#file system
+#hibernate.jndi.class com.sun.jndi.fscontext.RefFSContextFactory
+#hibernate.jndi.url file:/
+
+#WebSphere
+#hibernate.jndi.class com.ibm.websphere.naming.WsnInitialContextFactory
+#hibernate.jndi.url iiop://localhost:900/
+

Deleted: trunk/HibernateExt/entitymanager/src/test/log4j.properties
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/log4j.properties	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/log4j.properties	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,48 +0,0 @@
-### direct log messages to stdout ###
-log4j.appender.stdout=org.apache.log4j.ConsoleAppender
-log4j.appender.stdout.Target=System.out
-log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
-log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
-
-### direct messages to file hibernate.log ###
-#log4j.appender.file=org.apache.log4j.FileAppender
-#log4j.appender.file.File=hibernate.log
-#log4j.appender.file.layout=org.apache.log4j.PatternLayout
-#log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
-
-### set log levels - for more verbose logging change 'info' to 'debug' ###
-
-log4j.rootLogger=warn, stdout
-
-log4j.logger.org.hibernate=info
-#log4j.logger.org.hibernate=debug
-
-log4j.logger.org.hibernate.ejb=debug
-log4j.logger.org.hibernate.ejb.packaging=debug
-log4j.logger.org.hibernate.reflection=debug
-
-#log4j.logger.org.hibernate.engine.Cascades=debug
-#log4j.logger.org.hibernate.hql=debug
-
-### log just the SQL
-log4j.logger.org.hibernate.SQL=debug
-
-### log JDBC bind parameters ###
-#log4j.logger.org.hibernate.type=info
-log4j.logger.org.hibernate.type=debug
-
-### log schema export/update ###
-log4j.logger.org.hibernate.tool.hbm2ddl=debug
-
-### log HQL parse trees
-#log4j.logger.org.hibernate.hql=debug
-
-### log cache activity ###
-#log4j.logger.org.hibernate.cache=debug
-
-### log JDBC resource acquisition
-#log4j.logger.org.hibernate.jdbc=debug
-
-### enable the following line if you want to track down connection ###
-### leakages when using DriverManagerConnectionProvider ###
-#log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trace

Copied: trunk/HibernateExt/entitymanager/src/test/log4j.properties (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/log4j.properties)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/log4j.properties	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/log4j.properties	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,48 @@
+### direct log messages to stdout ###
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.Target=System.out
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
+
+### direct messages to file hibernate.log ###
+#log4j.appender.file=org.apache.log4j.FileAppender
+#log4j.appender.file.File=hibernate.log
+#log4j.appender.file.layout=org.apache.log4j.PatternLayout
+#log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
+
+### set log levels - for more verbose logging change 'info' to 'debug' ###
+
+log4j.rootLogger=warn, stdout
+
+log4j.logger.org.hibernate=info
+#log4j.logger.org.hibernate=debug
+
+log4j.logger.org.hibernate.ejb=debug
+log4j.logger.org.hibernate.ejb.packaging=debug
+log4j.logger.org.hibernate.reflection=debug
+
+#log4j.logger.org.hibernate.engine.Cascades=debug
+#log4j.logger.org.hibernate.hql=debug
+
+### log just the SQL
+log4j.logger.org.hibernate.SQL=debug
+
+### log JDBC bind parameters ###
+#log4j.logger.org.hibernate.type=info
+log4j.logger.org.hibernate.type=debug
+
+### log schema export/update ###
+log4j.logger.org.hibernate.tool.hbm2ddl=debug
+
+### log HQL parse trees
+#log4j.logger.org.hibernate.hql=debug
+
+### log cache activity ###
+#log4j.logger.org.hibernate.cache=debug
+
+### log JDBC resource acquisition
+#log4j.logger.org.hibernate.jdbc=debug
+
+### enable the following line if you want to track down connection ###
+### leakages when using DriverManagerConnectionProvider ###
+#log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trace

Copied: trunk/HibernateExt/entitymanager/src/test/org (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org)

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate)

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb)

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test)

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/Cat.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/Cat.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/Cat.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,139 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Collections;
-import java.util.Date;
-import java.util.GregorianCalendar;
-import java.util.List;
-import javax.persistence.Basic;
-import javax.persistence.Entity;
-import javax.persistence.EntityListeners;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.PostLoad;
-import javax.persistence.PostPersist;
-import javax.persistence.PostUpdate;
-import javax.persistence.Temporal;
-import javax.persistence.TemporalType;
-import javax.persistence.Transient;
-
-import org.hibernate.validator.Length;
-import org.hibernate.validator.Min;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at EntityListeners(LastUpdateListener.class)
-public class Cat implements Serializable {
-	private Integer id;
-	private String name;
-	private Date dateOfBirth;
-	private int age;
-	private long length;
-	private Date lastUpdate;
-	private int manualVersion = 0;
-	private int postVersion = 0;
-	private static final List ids = new ArrayList();
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	@Length(min = 4)
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	public Date getDateOfBirth() {
-		return dateOfBirth;
-	}
-
-	public void setDateOfBirth(Date dateOfBirth) {
-		this.dateOfBirth = dateOfBirth;
-	}
-
-	public int getManualVersion() {
-		return manualVersion;
-	}
-
-	public void setManualVersion(int manualVersion) {
-		this.manualVersion = manualVersion;
-	}
-
-	@Transient
-	public int getAge() {
-		return age;
-	}
-
-	public void setAge(int age) {
-		this.age = age;
-	}
-
-	@Basic
-	@Temporal(TemporalType.TIMESTAMP)
-	public Date getLastUpdate() {
-		return lastUpdate;
-	}
-
-	public void setLastUpdate(Date lastUpdate) {
-		this.lastUpdate = lastUpdate;
-	}
-
-	public int getPostVersion() {
-		return postVersion;
-	}
-
-	public void setPostVersion(int postVersion) {
-		this.postVersion = postVersion;
-	}
-
-	@PostUpdate
-	private void someLateUpdateWorking() {
-		this.postVersion++;
-	}
-
-	@PostLoad
-	public void calculateAge() {
-		Calendar birth = new GregorianCalendar();
-		birth.setTime( dateOfBirth );
-		Calendar now = new GregorianCalendar();
-		now.setTime( new Date() );
-		int adjust = 0;
-		if ( now.get( Calendar.DAY_OF_YEAR ) - birth.get( Calendar.DAY_OF_YEAR ) < 0 ) {
-			adjust = -1;
-		}
-		age = now.get( Calendar.YEAR ) - birth.get( Calendar.YEAR ) + adjust;
-	}
-
-	@PostPersist
-	public synchronized void addIdsToList() {
-		ids.add( getId() );
-	}
-
-	public static synchronized List getIdList() {
-		return Collections.unmodifiableList( ids );
-	}
-
-	@Min(0)
-	public long getLength() {
-		return length;
-	}
-
-	public void setLength(long length) {
-		this.length = length;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/Cat.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/Cat.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/Cat.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/Cat.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,139 @@
+//$Id$
+package org.hibernate.ejb.test;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Collections;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.List;
+import javax.persistence.Basic;
+import javax.persistence.Entity;
+import javax.persistence.EntityListeners;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.PostLoad;
+import javax.persistence.PostPersist;
+import javax.persistence.PostUpdate;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+import javax.persistence.Transient;
+
+import org.hibernate.validator.Length;
+import org.hibernate.validator.Min;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at EntityListeners(LastUpdateListener.class)
+public class Cat implements Serializable {
+	private Integer id;
+	private String name;
+	private Date dateOfBirth;
+	private int age;
+	private long length;
+	private Date lastUpdate;
+	private int manualVersion = 0;
+	private int postVersion = 0;
+	private static final List ids = new ArrayList();
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	@Length(min = 4)
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public Date getDateOfBirth() {
+		return dateOfBirth;
+	}
+
+	public void setDateOfBirth(Date dateOfBirth) {
+		this.dateOfBirth = dateOfBirth;
+	}
+
+	public int getManualVersion() {
+		return manualVersion;
+	}
+
+	public void setManualVersion(int manualVersion) {
+		this.manualVersion = manualVersion;
+	}
+
+	@Transient
+	public int getAge() {
+		return age;
+	}
+
+	public void setAge(int age) {
+		this.age = age;
+	}
+
+	@Basic
+	@Temporal(TemporalType.TIMESTAMP)
+	public Date getLastUpdate() {
+		return lastUpdate;
+	}
+
+	public void setLastUpdate(Date lastUpdate) {
+		this.lastUpdate = lastUpdate;
+	}
+
+	public int getPostVersion() {
+		return postVersion;
+	}
+
+	public void setPostVersion(int postVersion) {
+		this.postVersion = postVersion;
+	}
+
+	@PostUpdate
+	private void someLateUpdateWorking() {
+		this.postVersion++;
+	}
+
+	@PostLoad
+	public void calculateAge() {
+		Calendar birth = new GregorianCalendar();
+		birth.setTime( dateOfBirth );
+		Calendar now = new GregorianCalendar();
+		now.setTime( new Date() );
+		int adjust = 0;
+		if ( now.get( Calendar.DAY_OF_YEAR ) - birth.get( Calendar.DAY_OF_YEAR ) < 0 ) {
+			adjust = -1;
+		}
+		age = now.get( Calendar.YEAR ) - birth.get( Calendar.YEAR ) + adjust;
+	}
+
+	@PostPersist
+	public synchronized void addIdsToList() {
+		ids.add( getId() );
+	}
+
+	public static synchronized List getIdList() {
+		return Collections.unmodifiableList( ids );
+	}
+
+	@Min(0)
+	public long getLength() {
+		return length;
+	}
+
+	public void setLength(long length) {
+		this.length = length;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/Distributor.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/Distributor.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/Distributor.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,49 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test;
-
-import java.io.Serializable;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Distributor implements Serializable {
-	private Integer id;
-	private String name;
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	public boolean equals(Object o) {
-		if ( this == o ) return true;
-		if ( !( o instanceof Distributor ) ) return false;
-
-		final Distributor distributor = (Distributor) o;
-
-		if ( !name.equals( distributor.name ) ) return false;
-
-		return true;
-	}
-
-	public int hashCode() {
-		return name.hashCode();
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/Distributor.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/Distributor.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/Distributor.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/Distributor.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,49 @@
+//$Id$
+package org.hibernate.ejb.test;
+
+import java.io.Serializable;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Distributor implements Serializable {
+	private Integer id;
+	private String name;
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public boolean equals(Object o) {
+		if ( this == o ) return true;
+		if ( !( o instanceof Distributor ) ) return false;
+
+		final Distributor distributor = (Distributor) o;
+
+		if ( !name.equals( distributor.name ) ) return false;
+
+		return true;
+	}
+
+	public int hashCode() {
+		return name.hashCode();
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/EJB3TestCase.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/EJB3TestCase.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/EJB3TestCase.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,219 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test;
-
-import java.sql.Blob;
-import java.sql.Clob;
-import java.util.Iterator;
-import java.util.Properties;
-
-import org.hibernate.HibernateException;
-import org.hibernate.Interceptor;
-import org.hibernate.SessionFactory;
-import org.hibernate.cfg.Configuration;
-import org.hibernate.cfg.Environment;
-import org.hibernate.dialect.Dialect;
-import org.hibernate.ejb.event.EJB3AutoFlushEventListener;
-import org.hibernate.ejb.event.EJB3FlushEventListener;
-import org.hibernate.engine.SessionFactoryImplementor;
-import org.hibernate.event.AutoFlushEventListener;
-import org.hibernate.mapping.Collection;
-import org.hibernate.mapping.PersistentClass;
-import org.hibernate.mapping.Property;
-import org.hibernate.mapping.SimpleValue;
-
-/**
- * @author Gavin King
- */
-public abstract class EJB3TestCase extends junit.framework.TestCase {
-	private static SessionFactory sessions;
-	private static Configuration cfg;
-	private static Dialect dialect;
-	private static Class lastTestClass;
-	private org.hibernate.classic.Session session;
-
-	protected boolean recreateSchema() {
-		return true;
-	}
-
-	public EJB3TestCase(String x) {
-		super( x );
-	}
-
-	private void buildSessionFactory(String[] files) throws Exception {
-
-		if ( getSessions() != null ) getSessions().close();
-
-		try {
-
-			setCfg( new Configuration() );
-
-			cfg.addProperties( getExtraProperties() );
-
-			if ( recreateSchema() ) {
-				cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
-			}
-
-			for ( int i = 0; i < files.length ; i++ ) {
-				if ( !files[i].startsWith( "net/" ) ) files[i] = getBaseForMappings() + files[i];
-				getCfg().addResource( files[i], TestCase.class.getClassLoader() );
-			}
-
-			setDialect( Dialect.getDialect() );
-
-			configure( cfg );
-
-			if ( getCacheConcurrencyStrategy() != null ) {
-
-				Iterator iter = cfg.getClassMappings();
-				while ( iter.hasNext() ) {
-					PersistentClass clazz = (PersistentClass) iter.next();
-					Iterator props = clazz.getPropertyClosureIterator();
-					boolean hasLob = false;
-					while ( props.hasNext() ) {
-						Property prop = (Property) props.next();
-						if ( prop.getValue().isSimpleValue() ) {
-							String type = ( (SimpleValue) prop.getValue() ).getTypeName();
-							if ( "blob".equals( type ) || "clob".equals( type ) ) hasLob = true;
-							if ( Blob.class.getName().equals( type ) || Clob.class.getName().equals( type ) ) {
-								hasLob = true;
-							}
-						}
-					}
-					if ( !hasLob && !clazz.isInherited() ) {
-						cfg.setCacheConcurrencyStrategy(
-								clazz.getEntityName(),
-								getCacheConcurrencyStrategy()
-						);
-					}
-				}
-
-				iter = cfg.getCollectionMappings();
-				while ( iter.hasNext() ) {
-					Collection coll = (Collection) iter.next();
-					cfg.setCollectionCacheConcurrencyStrategy(
-							coll.getRole(),
-							getCacheConcurrencyStrategy()
-					);
-				}
-
-			}
-
-			setSessions( getCfg().buildSessionFactory( /*new TestInterceptor()*/ ) );
-
-		}
-		catch (Exception e) {
-			e.printStackTrace();
-			throw e;
-		}
-
-	}
-
-	public String getCacheConcurrencyStrategy() {
-		return "nonstrict-read-write";
-	}
-
-	protected void setUp() throws Exception {
-		if ( getSessions() == null || lastTestClass != getClass() ) {
-			buildSessionFactory( getMappings() );
-			lastTestClass = getClass();
-		}
-	}
-
-	protected void runTest() throws Throwable {
-		final boolean stats = ( (SessionFactoryImplementor) sessions ).getStatistics().isStatisticsEnabled();
-		try {
-			if ( stats ) sessions.getStatistics().clear();
-
-			super.runTest();
-
-			if ( stats ) sessions.getStatistics().logSummary();
-
-			if ( session != null && session.isOpen() ) {
-				if ( session.isConnected() ) session.connection().rollback();
-				session.close();
-				session = null;
-				fail( "unclosed session" );
-			}
-			else {
-				session = null;
-			}
-		}
-		catch (Throwable e) {
-			try {
-				if ( session != null && session.isOpen() ) {
-					if ( session.isConnected() ) session.connection().rollback();
-					session.close();
-				}
-			}
-			catch (Exception ignore) {
-			}
-			try {
-				if ( dropAfterFailure() && sessions != null ) {
-					sessions.close();
-					sessions = null;
-				}
-			}
-			catch (Exception ignore) {
-			}
-			throw e;
-		}
-	}
-
-	protected boolean dropAfterFailure() {
-		return true;
-	}
-
-	public org.hibernate.classic.Session openSession() throws HibernateException {
-		session = getSessions().openSession();
-		return session;
-	}
-
-	public org.hibernate.classic.Session openSession(Interceptor interceptor)
-			throws HibernateException {
-		session = getSessions().openSession( interceptor );
-		return session;
-	}
-
-	protected abstract String[] getMappings();
-
-	private void setSessions(SessionFactory sessions) {
-		EJB3TestCase.sessions = sessions;
-	}
-
-	protected SessionFactory getSessions() {
-		return sessions;
-	}
-
-	private void setDialect(Dialect dialect) {
-		EJB3TestCase.dialect = dialect;
-	}
-
-	protected Dialect getDialect() {
-		return dialect;
-	}
-
-	protected static void setCfg(Configuration cfg) {
-		EJB3TestCase.cfg = cfg;
-	}
-
-	protected static Configuration getCfg() {
-		return cfg;
-	}
-
-	/**
-	 * @deprecated
-	 */
-	public Properties getExtraProperties() {
-		return new Properties();
-	}
-
-	protected String getBaseForMappings() {
-		return "org/hibernate/ejb/test/";
-	}
-
-	protected void configure(Configuration cfg) {
-		cfg.setListener( "flush", EJB3FlushEventListener.INSTANCE );
-		cfg.setListeners( "auto-flush", new AutoFlushEventListener[]{EJB3AutoFlushEventListener.INSTANCE} );
-	}
-
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/EJB3TestCase.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/EJB3TestCase.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/EJB3TestCase.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/EJB3TestCase.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,219 @@
+//$Id$
+package org.hibernate.ejb.test;
+
+import java.sql.Blob;
+import java.sql.Clob;
+import java.util.Iterator;
+import java.util.Properties;
+
+import org.hibernate.HibernateException;
+import org.hibernate.Interceptor;
+import org.hibernate.SessionFactory;
+import org.hibernate.cfg.Configuration;
+import org.hibernate.cfg.Environment;
+import org.hibernate.dialect.Dialect;
+import org.hibernate.ejb.event.EJB3AutoFlushEventListener;
+import org.hibernate.ejb.event.EJB3FlushEventListener;
+import org.hibernate.engine.SessionFactoryImplementor;
+import org.hibernate.event.AutoFlushEventListener;
+import org.hibernate.mapping.Collection;
+import org.hibernate.mapping.PersistentClass;
+import org.hibernate.mapping.Property;
+import org.hibernate.mapping.SimpleValue;
+
+/**
+ * @author Gavin King
+ */
+public abstract class EJB3TestCase extends junit.framework.TestCase {
+	private static SessionFactory sessions;
+	private static Configuration cfg;
+	private static Dialect dialect;
+	private static Class lastTestClass;
+	private org.hibernate.classic.Session session;
+
+	protected boolean recreateSchema() {
+		return true;
+	}
+
+	public EJB3TestCase(String x) {
+		super( x );
+	}
+
+	private void buildSessionFactory(String[] files) throws Exception {
+
+		if ( getSessions() != null ) getSessions().close();
+
+		try {
+
+			setCfg( new Configuration() );
+
+			cfg.addProperties( getExtraProperties() );
+
+			if ( recreateSchema() ) {
+				cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
+			}
+
+			for ( int i = 0; i < files.length ; i++ ) {
+				if ( !files[i].startsWith( "net/" ) ) files[i] = getBaseForMappings() + files[i];
+				getCfg().addResource( files[i], TestCase.class.getClassLoader() );
+			}
+
+			setDialect( Dialect.getDialect() );
+
+			configure( cfg );
+
+			if ( getCacheConcurrencyStrategy() != null ) {
+
+				Iterator iter = cfg.getClassMappings();
+				while ( iter.hasNext() ) {
+					PersistentClass clazz = (PersistentClass) iter.next();
+					Iterator props = clazz.getPropertyClosureIterator();
+					boolean hasLob = false;
+					while ( props.hasNext() ) {
+						Property prop = (Property) props.next();
+						if ( prop.getValue().isSimpleValue() ) {
+							String type = ( (SimpleValue) prop.getValue() ).getTypeName();
+							if ( "blob".equals( type ) || "clob".equals( type ) ) hasLob = true;
+							if ( Blob.class.getName().equals( type ) || Clob.class.getName().equals( type ) ) {
+								hasLob = true;
+							}
+						}
+					}
+					if ( !hasLob && !clazz.isInherited() ) {
+						cfg.setCacheConcurrencyStrategy(
+								clazz.getEntityName(),
+								getCacheConcurrencyStrategy()
+						);
+					}
+				}
+
+				iter = cfg.getCollectionMappings();
+				while ( iter.hasNext() ) {
+					Collection coll = (Collection) iter.next();
+					cfg.setCollectionCacheConcurrencyStrategy(
+							coll.getRole(),
+							getCacheConcurrencyStrategy()
+					);
+				}
+
+			}
+
+			setSessions( getCfg().buildSessionFactory( /*new TestInterceptor()*/ ) );
+
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+			throw e;
+		}
+
+	}
+
+	public String getCacheConcurrencyStrategy() {
+		return "nonstrict-read-write";
+	}
+
+	protected void setUp() throws Exception {
+		if ( getSessions() == null || lastTestClass != getClass() ) {
+			buildSessionFactory( getMappings() );
+			lastTestClass = getClass();
+		}
+	}
+
+	protected void runTest() throws Throwable {
+		final boolean stats = ( (SessionFactoryImplementor) sessions ).getStatistics().isStatisticsEnabled();
+		try {
+			if ( stats ) sessions.getStatistics().clear();
+
+			super.runTest();
+
+			if ( stats ) sessions.getStatistics().logSummary();
+
+			if ( session != null && session.isOpen() ) {
+				if ( session.isConnected() ) session.connection().rollback();
+				session.close();
+				session = null;
+				fail( "unclosed session" );
+			}
+			else {
+				session = null;
+			}
+		}
+		catch (Throwable e) {
+			try {
+				if ( session != null && session.isOpen() ) {
+					if ( session.isConnected() ) session.connection().rollback();
+					session.close();
+				}
+			}
+			catch (Exception ignore) {
+			}
+			try {
+				if ( dropAfterFailure() && sessions != null ) {
+					sessions.close();
+					sessions = null;
+				}
+			}
+			catch (Exception ignore) {
+			}
+			throw e;
+		}
+	}
+
+	protected boolean dropAfterFailure() {
+		return true;
+	}
+
+	public org.hibernate.classic.Session openSession() throws HibernateException {
+		session = getSessions().openSession();
+		return session;
+	}
+
+	public org.hibernate.classic.Session openSession(Interceptor interceptor)
+			throws HibernateException {
+		session = getSessions().openSession( interceptor );
+		return session;
+	}
+
+	protected abstract String[] getMappings();
+
+	private void setSessions(SessionFactory sessions) {
+		EJB3TestCase.sessions = sessions;
+	}
+
+	protected SessionFactory getSessions() {
+		return sessions;
+	}
+
+	private void setDialect(Dialect dialect) {
+		EJB3TestCase.dialect = dialect;
+	}
+
+	protected Dialect getDialect() {
+		return dialect;
+	}
+
+	protected static void setCfg(Configuration cfg) {
+		EJB3TestCase.cfg = cfg;
+	}
+
+	protected static Configuration getCfg() {
+		return cfg;
+	}
+
+	/**
+	 * @deprecated
+	 */
+	public Properties getExtraProperties() {
+		return new Properties();
+	}
+
+	protected String getBaseForMappings() {
+		return "org/hibernate/ejb/test/";
+	}
+
+	protected void configure(Configuration cfg) {
+		cfg.setListener( "flush", EJB3FlushEventListener.INSTANCE );
+		cfg.setListeners( "auto-flush", new AutoFlushEventListener[]{EJB3AutoFlushEventListener.INSTANCE} );
+	}
+
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/EntityManagerTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/EntityManagerTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/EntityManagerTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,336 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutput;
-import java.io.ObjectOutputStream;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import javax.persistence.EntityManager;
-import javax.persistence.FlushModeType;
-import javax.persistence.Query;
-
-import org.hibernate.FlushMode;
-import org.hibernate.HibernateException;
-import org.hibernate.ejb.HibernateEntityManager;
-import org.hibernate.ejb.HibernateEntityManagerFactory;
-import org.hibernate.stat.Statistics;
-
-/**
- * @author Gavin King
- */
-public class EntityManagerTest extends TestCase {
-
-	public Class[] getAnnotatedClasses() {
-		return new Class[]{
-				Item.class,
-				Distributor.class,
-				Wallet.class
-		};
-	}
-
-	public Map<Class, String> getCachedClasses() {
-		Map<Class, String> result = new HashMap<Class, String>();
-		result.put( Item.class, "read-write" );
-		return result;
-	}
-
-	public Map<String, String> getCachedCollections() {
-		Map<String, String> result = new HashMap<String, String>();
-		result.put( Item.class.getName() + ".distributors", "read-write, RegionName" );
-		return result;
-	}
-
-	// EM TRANSACTION
-//	public void testEntityManager() {
-//
-//		Item item = new Item( "Mouse", "Micro$oft mouse" );
-//
-//		EntityManager em = factory.createEntityManager();
-//		em.getTransaction().begin();
-//		em.persist( item );
-//		assertTrue( em.contains( item ) );
-//		em.getTransaction().commit();
-//
-//		assertFalse( em.contains( item ) );
-//
-//		em.getTransaction().begin();
-//		item = (Item) em.createQuery( "from Item where descr like 'M%'" ).getSingleResult();
-//		assertNotNull( item );
-//		assertEquals( "Micro$oft mouse", item.getDescr() );
-//		item.setDescr( "Micro$oft wireless mouse" );
-//		assertTrue( em.contains( item ) );
-//		em.getTransaction().commit();
-//
-//		assertFalse( em.contains( item ) );
-//
-//		em.getTransaction().begin();
-//		item = (Item) em.find( Item.class, "Mouse" );
-//		assertNotNull( item );
-//		em.getTransaction().commit();
-//
-//		item = em.find( Item.class, "Mouse" );
-//		assertFalse( em.contains( item ) );
-//
-//		item = (Item) em.createQuery( "from Item where descr like 'M%'" ).getSingleResult();
-//		assertNotNull( item );
-//		assertFalse( em.contains( item ) );
-//
-//		em.getTransaction().begin();
-//		item = em.find( Item.class, "Mouse" );
-//		assertNotNull( item );
-//		assertTrue( em.contains( item ) );
-//		assertEquals( "Micro$oft wireless mouse", item.getDescr() );
-//		em.remove( item );
-//		em.remove( item );//second should be a no-op
-//		em.getTransaction().commit();
-//
-//		em.close();
-//	}
-
-	public void testExtendedEntityManager() {
-
-		Item item = new Item( "Mouse", "Micro$oft mouse" );
-
-		EntityManager em = factory.createEntityManager();
-		em.getTransaction().begin();
-		em.persist( item );
-		assertTrue( em.contains( item ) );
-		em.getTransaction().commit();
-
-		assertTrue( em.contains( item ) );
-
-		em.getTransaction().begin();
-		Item item1 = (Item) em.createQuery( "select i from Item i where descr like 'M%'" ).getSingleResult();
-		assertNotNull( item1 );
-		assertSame( item, item1 );
-		item.setDescr( "Micro$oft wireless mouse" );
-		assertTrue( em.contains( item ) );
-		em.getTransaction().commit();
-
-		assertTrue( em.contains( item ) );
-
-		em.getTransaction().begin();
-		item1 = em.find( Item.class, "Mouse" );
-		assertSame( item, item1 );
-		em.getTransaction().commit();
-		assertTrue( em.contains( item ) );
-
-		item1 = em.find( Item.class, "Mouse" );
-		assertSame( item, item1 );
-		assertTrue( em.contains( item ) );
-
-		item1 = (Item) em.createQuery( "select i from Item i where descr like 'M%'" ).getSingleResult();
-		assertNotNull( item1 );
-		assertSame( item, item1 );
-		assertTrue( em.contains( item ) );
-
-		em.getTransaction().begin();
-		assertTrue( em.contains( item ) );
-		em.remove( item );
-		em.remove( item ); //Second should be no-op
-		em.getTransaction().commit();
-
-		em.close();
-
-	}
-
-	public void testConfiguration() throws Exception {
-		Item item = new Item( "Mouse", "Micro$oft mouse" );
-		Distributor res = new Distributor();
-		res.setName( "Bruce" );
-		item.setDistributors( new HashSet<Distributor>() );
-		item.getDistributors().add( res );
-		Statistics stats = ( (HibernateEntityManagerFactory) factory ).getSessionFactory().getStatistics();
-		stats.clear();
-		stats.setStatisticsEnabled( true );
-
-		EntityManager em = factory.createEntityManager();
-		em.getTransaction().begin();
-
-		em.persist( res );
-		em.persist( item );
-		assertTrue( em.contains( item ) );
-
-		em.getTransaction().commit();
-		em.close();
-
-		assertEquals( 1, stats.getSecondLevelCachePutCount() );
-		assertEquals( 0, stats.getSecondLevelCacheHitCount() );
-
-		em = factory.createEntityManager();
-		em.getTransaction().begin();
-		Item second = em.find( Item.class, item.getName() );
-		assertEquals( 1, second.getDistributors().size() );
-		assertEquals( 1, stats.getSecondLevelCacheHitCount() );
-		em.getTransaction().commit();
-		em.close();
-
-		em = factory.createEntityManager();
-		em.getTransaction().begin();
-		second = em.find( Item.class, item.getName() );
-		assertEquals( 1, second.getDistributors().size() );
-		assertEquals( 3, stats.getSecondLevelCacheHitCount() );
-		em.remove( second );
-		em.remove( second.getDistributors().iterator().next() );
-		em.getTransaction().commit();
-		em.close();
-
-		stats.clear();
-		stats.setStatisticsEnabled( false );
-	}
-
-	public void testContains() throws Exception {
-		EntityManager em = factory.createEntityManager();
-		em.getTransaction().begin();
-		Integer nonManagedObject = new Integer( 4 );
-		try {
-			em.contains( nonManagedObject );
-			fail( "Should have raised an exception" );
-		}
-		catch (IllegalArgumentException iae) {
-			//success
-			if ( em.getTransaction() != null ) em.getTransaction().rollback();
-		}
-		finally {
-			em.close();
-		}
-		em = factory.createEntityManager();
-		em.getTransaction().begin();
-		Item item = new Item();
-		item.setDescr( "Mine" );
-		item.setName( "Juggy" );
-		em.persist( item );
-		em.getTransaction().commit();
-		em.getTransaction().begin();
-		item = em.getReference( Item.class, item.getName() );
-		assertTrue( em.contains( item ) );
-		em.remove( item );
-		em.getTransaction().commit();
-		em.close();
-	}
-
-	public void testClear() throws Exception {
-		EntityManager em = factory.createEntityManager();
-		em.getTransaction().begin();
-		Wallet w = new Wallet();
-		w.setBrand( "Lacoste" );
-		w.setModel( "Minimic" );
-		w.setSerial( "0100202002" );
-		em.persist( w );
-		em.flush();
-		em.clear();
-		assertFalse( em.contains( w ) );
-		em.getTransaction().rollback();
-		em.close();
-	}
-
-	public void testFlushMode() throws Exception {
-		EntityManager em = factory.createEntityManager();
-		em.setFlushMode( FlushModeType.COMMIT );
-		assertEquals( FlushModeType.COMMIT, em.getFlushMode() );
-		( (HibernateEntityManager) em ).getSession().setFlushMode( FlushMode.ALWAYS );
-		assertNull( em.getFlushMode() );
-		em.close();
-	}
-
-	public void testPersistNoneGenerator() throws Exception {
-		EntityManager em = factory.createEntityManager();
-		em.getTransaction().begin();
-		Wallet w = new Wallet();
-		w.setBrand( "Lacoste" );
-		w.setModel( "Minimic" );
-		w.setSerial( "0100202002" );
-		em.persist( w );
-		em.getTransaction().commit();
-		em.getTransaction().begin();
-		Wallet wallet = em.find( Wallet.class, w.getSerial() );
-		assertEquals( w.getBrand(), wallet.getBrand() );
-		em.remove( wallet );
-		em.getTransaction().commit();
-		em.close();
-	}
-
-	public void testSerializableException() throws Exception {
-		EntityManager em = factory.createEntityManager();
-		em.getTransaction().begin();
-		try {
-			Query query = em.createQuery( "SELECT p FETCH JOIN p.distributors FROM Item p" );
-			query.getSingleResult();
-		}
-		catch (IllegalArgumentException e) {
-			ByteArrayOutputStream stream = new ByteArrayOutputStream();
-			ObjectOutput out = new ObjectOutputStream( stream );
-			out.writeObject( e );
-			out.close();
-			byte[] serialized = stream.toByteArray();
-			stream.close();
-			ByteArrayInputStream byteIn = new ByteArrayInputStream( serialized );
-			ObjectInputStream in = new ObjectInputStream( byteIn );
-			IllegalArgumentException deserializedException = (IllegalArgumentException) in.readObject();
-			in.close();
-			byteIn.close();
-			assertNull( deserializedException.getCause().getCause() );
-			assertNull( e.getCause().getCause() );
-		}
-		em.getTransaction().rollback();
-		em.close();
-
-
-		Exception e = new HibernateException( "Exception", new NullPointerException( "NPE" ) );
-		ByteArrayOutputStream stream = new ByteArrayOutputStream();
-		ObjectOutput out = new ObjectOutputStream( stream );
-		out.writeObject( e );
-		out.close();
-		byte[] serialized = stream.toByteArray();
-		stream.close();
-		ByteArrayInputStream byteIn = new ByteArrayInputStream( serialized );
-		ObjectInputStream in = new ObjectInputStream( byteIn );
-		HibernateException deserializedException = (HibernateException) in.readObject();
-		in.close();
-		byteIn.close();
-		assertNotNull( "Arbitrary exceptions nullified", deserializedException.getCause() );
-		assertNotNull( e.getCause() );
-	}
-
-	public void testIsOpen() throws Exception {
-		EntityManager em = factory.createEntityManager();
-		assertTrue( em.isOpen() );
-		em.getTransaction().begin();
-		assertTrue( em.isOpen() );
-		em.getTransaction().rollback();
-		em.close();
-		assertFalse( em.isOpen() );
-	}
-
-	//EJB-9
-//	public void testGet() throws Exception {
-//		EntityManager em = factory.createEntityManager();
-//		em.getTransaction().begin();
-//		Item item = (Item) em.get(Item.class, "nonexistentone");
-//		try {
-//			item.getDescr();
-//			em.getTransaction().commit();
-//			fail("Object with wrong id should have failed");
-//		}
-//		catch (EntityNotFoundException e) {
-//			//success
-//			if (em.getTransaction() != null) em.getTransaction().rollback();
-//		}
-//		finally {
-//			em.close();
-//		}
-//	}
-
-	public EntityManagerTest() {
-		super();
-	}
-
-	public EntityManagerTest(String arg0) {
-		super( arg0 );
-	}
-
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/EntityManagerTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/EntityManagerTest.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/EntityManagerTest.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/EntityManagerTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,336 @@
+//$Id$
+package org.hibernate.ejb.test;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutput;
+import java.io.ObjectOutputStream;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import javax.persistence.EntityManager;
+import javax.persistence.FlushModeType;
+import javax.persistence.Query;
+
+import org.hibernate.FlushMode;
+import org.hibernate.HibernateException;
+import org.hibernate.ejb.HibernateEntityManager;
+import org.hibernate.ejb.HibernateEntityManagerFactory;
+import org.hibernate.stat.Statistics;
+
+/**
+ * @author Gavin King
+ */
+public class EntityManagerTest extends TestCase {
+
+	public Class[] getAnnotatedClasses() {
+		return new Class[]{
+				Item.class,
+				Distributor.class,
+				Wallet.class
+		};
+	}
+
+	public Map<Class, String> getCachedClasses() {
+		Map<Class, String> result = new HashMap<Class, String>();
+		result.put( Item.class, "read-write" );
+		return result;
+	}
+
+	public Map<String, String> getCachedCollections() {
+		Map<String, String> result = new HashMap<String, String>();
+		result.put( Item.class.getName() + ".distributors", "read-write, RegionName" );
+		return result;
+	}
+
+	// EM TRANSACTION
+//	public void testEntityManager() {
+//
+//		Item item = new Item( "Mouse", "Micro$oft mouse" );
+//
+//		EntityManager em = factory.createEntityManager();
+//		em.getTransaction().begin();
+//		em.persist( item );
+//		assertTrue( em.contains( item ) );
+//		em.getTransaction().commit();
+//
+//		assertFalse( em.contains( item ) );
+//
+//		em.getTransaction().begin();
+//		item = (Item) em.createQuery( "from Item where descr like 'M%'" ).getSingleResult();
+//		assertNotNull( item );
+//		assertEquals( "Micro$oft mouse", item.getDescr() );
+//		item.setDescr( "Micro$oft wireless mouse" );
+//		assertTrue( em.contains( item ) );
+//		em.getTransaction().commit();
+//
+//		assertFalse( em.contains( item ) );
+//
+//		em.getTransaction().begin();
+//		item = (Item) em.find( Item.class, "Mouse" );
+//		assertNotNull( item );
+//		em.getTransaction().commit();
+//
+//		item = em.find( Item.class, "Mouse" );
+//		assertFalse( em.contains( item ) );
+//
+//		item = (Item) em.createQuery( "from Item where descr like 'M%'" ).getSingleResult();
+//		assertNotNull( item );
+//		assertFalse( em.contains( item ) );
+//
+//		em.getTransaction().begin();
+//		item = em.find( Item.class, "Mouse" );
+//		assertNotNull( item );
+//		assertTrue( em.contains( item ) );
+//		assertEquals( "Micro$oft wireless mouse", item.getDescr() );
+//		em.remove( item );
+//		em.remove( item );//second should be a no-op
+//		em.getTransaction().commit();
+//
+//		em.close();
+//	}
+
+	public void testExtendedEntityManager() {
+
+		Item item = new Item( "Mouse", "Micro$oft mouse" );
+
+		EntityManager em = factory.createEntityManager();
+		em.getTransaction().begin();
+		em.persist( item );
+		assertTrue( em.contains( item ) );
+		em.getTransaction().commit();
+
+		assertTrue( em.contains( item ) );
+
+		em.getTransaction().begin();
+		Item item1 = (Item) em.createQuery( "select i from Item i where descr like 'M%'" ).getSingleResult();
+		assertNotNull( item1 );
+		assertSame( item, item1 );
+		item.setDescr( "Micro$oft wireless mouse" );
+		assertTrue( em.contains( item ) );
+		em.getTransaction().commit();
+
+		assertTrue( em.contains( item ) );
+
+		em.getTransaction().begin();
+		item1 = em.find( Item.class, "Mouse" );
+		assertSame( item, item1 );
+		em.getTransaction().commit();
+		assertTrue( em.contains( item ) );
+
+		item1 = em.find( Item.class, "Mouse" );
+		assertSame( item, item1 );
+		assertTrue( em.contains( item ) );
+
+		item1 = (Item) em.createQuery( "select i from Item i where descr like 'M%'" ).getSingleResult();
+		assertNotNull( item1 );
+		assertSame( item, item1 );
+		assertTrue( em.contains( item ) );
+
+		em.getTransaction().begin();
+		assertTrue( em.contains( item ) );
+		em.remove( item );
+		em.remove( item ); //Second should be no-op
+		em.getTransaction().commit();
+
+		em.close();
+
+	}
+
+	public void testConfiguration() throws Exception {
+		Item item = new Item( "Mouse", "Micro$oft mouse" );
+		Distributor res = new Distributor();
+		res.setName( "Bruce" );
+		item.setDistributors( new HashSet<Distributor>() );
+		item.getDistributors().add( res );
+		Statistics stats = ( (HibernateEntityManagerFactory) factory ).getSessionFactory().getStatistics();
+		stats.clear();
+		stats.setStatisticsEnabled( true );
+
+		EntityManager em = factory.createEntityManager();
+		em.getTransaction().begin();
+
+		em.persist( res );
+		em.persist( item );
+		assertTrue( em.contains( item ) );
+
+		em.getTransaction().commit();
+		em.close();
+
+		assertEquals( 1, stats.getSecondLevelCachePutCount() );
+		assertEquals( 0, stats.getSecondLevelCacheHitCount() );
+
+		em = factory.createEntityManager();
+		em.getTransaction().begin();
+		Item second = em.find( Item.class, item.getName() );
+		assertEquals( 1, second.getDistributors().size() );
+		assertEquals( 1, stats.getSecondLevelCacheHitCount() );
+		em.getTransaction().commit();
+		em.close();
+
+		em = factory.createEntityManager();
+		em.getTransaction().begin();
+		second = em.find( Item.class, item.getName() );
+		assertEquals( 1, second.getDistributors().size() );
+		assertEquals( 3, stats.getSecondLevelCacheHitCount() );
+		em.remove( second );
+		em.remove( second.getDistributors().iterator().next() );
+		em.getTransaction().commit();
+		em.close();
+
+		stats.clear();
+		stats.setStatisticsEnabled( false );
+	}
+
+	public void testContains() throws Exception {
+		EntityManager em = factory.createEntityManager();
+		em.getTransaction().begin();
+		Integer nonManagedObject = new Integer( 4 );
+		try {
+			em.contains( nonManagedObject );
+			fail( "Should have raised an exception" );
+		}
+		catch (IllegalArgumentException iae) {
+			//success
+			if ( em.getTransaction() != null ) em.getTransaction().rollback();
+		}
+		finally {
+			em.close();
+		}
+		em = factory.createEntityManager();
+		em.getTransaction().begin();
+		Item item = new Item();
+		item.setDescr( "Mine" );
+		item.setName( "Juggy" );
+		em.persist( item );
+		em.getTransaction().commit();
+		em.getTransaction().begin();
+		item = em.getReference( Item.class, item.getName() );
+		assertTrue( em.contains( item ) );
+		em.remove( item );
+		em.getTransaction().commit();
+		em.close();
+	}
+
+	public void testClear() throws Exception {
+		EntityManager em = factory.createEntityManager();
+		em.getTransaction().begin();
+		Wallet w = new Wallet();
+		w.setBrand( "Lacoste" );
+		w.setModel( "Minimic" );
+		w.setSerial( "0100202002" );
+		em.persist( w );
+		em.flush();
+		em.clear();
+		assertFalse( em.contains( w ) );
+		em.getTransaction().rollback();
+		em.close();
+	}
+
+	public void testFlushMode() throws Exception {
+		EntityManager em = factory.createEntityManager();
+		em.setFlushMode( FlushModeType.COMMIT );
+		assertEquals( FlushModeType.COMMIT, em.getFlushMode() );
+		( (HibernateEntityManager) em ).getSession().setFlushMode( FlushMode.ALWAYS );
+		assertNull( em.getFlushMode() );
+		em.close();
+	}
+
+	public void testPersistNoneGenerator() throws Exception {
+		EntityManager em = factory.createEntityManager();
+		em.getTransaction().begin();
+		Wallet w = new Wallet();
+		w.setBrand( "Lacoste" );
+		w.setModel( "Minimic" );
+		w.setSerial( "0100202002" );
+		em.persist( w );
+		em.getTransaction().commit();
+		em.getTransaction().begin();
+		Wallet wallet = em.find( Wallet.class, w.getSerial() );
+		assertEquals( w.getBrand(), wallet.getBrand() );
+		em.remove( wallet );
+		em.getTransaction().commit();
+		em.close();
+	}
+
+	public void testSerializableException() throws Exception {
+		EntityManager em = factory.createEntityManager();
+		em.getTransaction().begin();
+		try {
+			Query query = em.createQuery( "SELECT p FETCH JOIN p.distributors FROM Item p" );
+			query.getSingleResult();
+		}
+		catch (IllegalArgumentException e) {
+			ByteArrayOutputStream stream = new ByteArrayOutputStream();
+			ObjectOutput out = new ObjectOutputStream( stream );
+			out.writeObject( e );
+			out.close();
+			byte[] serialized = stream.toByteArray();
+			stream.close();
+			ByteArrayInputStream byteIn = new ByteArrayInputStream( serialized );
+			ObjectInputStream in = new ObjectInputStream( byteIn );
+			IllegalArgumentException deserializedException = (IllegalArgumentException) in.readObject();
+			in.close();
+			byteIn.close();
+			assertNull( deserializedException.getCause().getCause() );
+			assertNull( e.getCause().getCause() );
+		}
+		em.getTransaction().rollback();
+		em.close();
+
+
+		Exception e = new HibernateException( "Exception", new NullPointerException( "NPE" ) );
+		ByteArrayOutputStream stream = new ByteArrayOutputStream();
+		ObjectOutput out = new ObjectOutputStream( stream );
+		out.writeObject( e );
+		out.close();
+		byte[] serialized = stream.toByteArray();
+		stream.close();
+		ByteArrayInputStream byteIn = new ByteArrayInputStream( serialized );
+		ObjectInputStream in = new ObjectInputStream( byteIn );
+		HibernateException deserializedException = (HibernateException) in.readObject();
+		in.close();
+		byteIn.close();
+		assertNotNull( "Arbitrary exceptions nullified", deserializedException.getCause() );
+		assertNotNull( e.getCause() );
+	}
+
+	public void testIsOpen() throws Exception {
+		EntityManager em = factory.createEntityManager();
+		assertTrue( em.isOpen() );
+		em.getTransaction().begin();
+		assertTrue( em.isOpen() );
+		em.getTransaction().rollback();
+		em.close();
+		assertFalse( em.isOpen() );
+	}
+
+	//EJB-9
+//	public void testGet() throws Exception {
+//		EntityManager em = factory.createEntityManager();
+//		em.getTransaction().begin();
+//		Item item = (Item) em.get(Item.class, "nonexistentone");
+//		try {
+//			item.getDescr();
+//			em.getTransaction().commit();
+//			fail("Object with wrong id should have failed");
+//		}
+//		catch (EntityNotFoundException e) {
+//			//success
+//			if (em.getTransaction() != null) em.getTransaction().rollback();
+//		}
+//		finally {
+//			em.close();
+//		}
+//	}
+
+	public EntityManagerTest() {
+		super();
+	}
+
+	public EntityManagerTest(String arg0) {
+		super( arg0 );
+	}
+
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/Item.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/Item.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/Item.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,72 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test;
-
-import java.io.Serializable;
-import java.util.HashSet;
-import java.util.Set;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.EntityResult;
-import javax.persistence.FieldResult;
-import javax.persistence.Id;
-import javax.persistence.OneToMany;
-import javax.persistence.SqlResultSetMapping;
-
-/**
- * @author Gavin King
- */
- at Entity(name = "Item")
- at SqlResultSetMapping(name = "getItem", entities =
- at EntityResult(entityClass = org.hibernate.ejb.test.Item.class, fields = {
- at FieldResult(name = "name", column = "itemname"),
- at FieldResult(name = "descr", column = "itemdescription")
-		})
-)
-//@Cache(region="Item", usage=NONSTRICT_READ_WRITE)
-public class Item implements Serializable {
-
-	private String name;
-	private String descr;
-	private Set<Distributor> distributors = new HashSet<Distributor>();
-
-	public Item() {
-	}
-
-	public Item(String name, String desc) {
-		this.name = name;
-		this.descr = desc;
-	}
-
-	@Column(length = 200)
-	public String getDescr() {
-		return descr;
-	}
-
-	public void setDescr(String desc) {
-		this.descr = desc;
-	}
-
-	@Id
-	@Column(length = 30)
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	@OneToMany
-	public Set<Distributor> getDistributors() {
-		return distributors;
-	}
-
-	public void setDistributors(Set<Distributor> distributors) {
-		this.distributors = distributors;
-	}
-
-	public void addDistributor(Distributor d) {
-		if ( distributors == null ) distributors = new HashSet();
-		distributors.add( d );
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/Item.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/Item.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/Item.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/Item.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,72 @@
+//$Id$
+package org.hibernate.ejb.test;
+
+import java.io.Serializable;
+import java.util.HashSet;
+import java.util.Set;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EntityResult;
+import javax.persistence.FieldResult;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+import javax.persistence.SqlResultSetMapping;
+
+/**
+ * @author Gavin King
+ */
+ at Entity(name = "Item")
+ at SqlResultSetMapping(name = "getItem", entities =
+ at EntityResult(entityClass = org.hibernate.ejb.test.Item.class, fields = {
+ at FieldResult(name = "name", column = "itemname"),
+ at FieldResult(name = "descr", column = "itemdescription")
+		})
+)
+//@Cache(region="Item", usage=NONSTRICT_READ_WRITE)
+public class Item implements Serializable {
+
+	private String name;
+	private String descr;
+	private Set<Distributor> distributors = new HashSet<Distributor>();
+
+	public Item() {
+	}
+
+	public Item(String name, String desc) {
+		this.name = name;
+		this.descr = desc;
+	}
+
+	@Column(length = 200)
+	public String getDescr() {
+		return descr;
+	}
+
+	public void setDescr(String desc) {
+		this.descr = desc;
+	}
+
+	@Id
+	@Column(length = 30)
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	@OneToMany
+	public Set<Distributor> getDistributors() {
+		return distributors;
+	}
+
+	public void setDistributors(Set<Distributor> distributors) {
+		this.distributors = distributors;
+	}
+
+	public void addDistributor(Distributor d) {
+		if ( distributors == null ) distributors = new HashSet();
+		distributors.add( d );
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/LastUpdateListener.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/LastUpdateListener.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/LastUpdateListener.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,18 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test;
-
-import java.util.Date;
-import javax.persistence.PrePersist;
-import javax.persistence.PreUpdate;
-
-/**
- * @author Emmanuel Bernard
- */
-public class LastUpdateListener {
-	@PreUpdate
-	@PrePersist
-	public void setLastUpdate(Cat o) {
-		o.setLastUpdate( new Date() );
-		o.setManualVersion( o.getManualVersion() + 1 );
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/LastUpdateListener.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/LastUpdateListener.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/LastUpdateListener.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/LastUpdateListener.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,18 @@
+//$Id$
+package org.hibernate.ejb.test;
+
+import java.util.Date;
+import javax.persistence.PrePersist;
+import javax.persistence.PreUpdate;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class LastUpdateListener {
+	@PreUpdate
+	@PrePersist
+	public void setLastUpdate(Cat o) {
+		o.setLastUpdate( new Date() );
+		o.setManualVersion( o.getManualVersion() + 1 );
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/MyNamingStrategy.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/MyNamingStrategy.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/MyNamingStrategy.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,14 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test;
-
-import org.hibernate.cfg.EJB3NamingStrategy;
-
-/**
- * @author Emmanuel Bernard
- */
-public class MyNamingStrategy extends EJB3NamingStrategy {
-	@Override
-	public String tableName(String tableName) {
-		return "tbl_" + super.tableName( tableName );
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/MyNamingStrategy.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/MyNamingStrategy.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/MyNamingStrategy.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/MyNamingStrategy.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,14 @@
+//$Id$
+package org.hibernate.ejb.test;
+
+import org.hibernate.cfg.EJB3NamingStrategy;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class MyNamingStrategy extends EJB3NamingStrategy {
+	@Override
+	public String tableName(String tableName) {
+		return "tbl_" + super.tableName( tableName );
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/PackagedEntityManagerTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/PackagedEntityManagerTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/PackagedEntityManagerTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,427 +0,0 @@
-package org.hibernate.ejb.test;
-
-import java.util.HashMap;
-import java.util.HashSet;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.Persistence;
-import javax.persistence.PersistenceException;
-
-import org.hibernate.ejb.HibernateEntityManagerFactory;
-import org.hibernate.ejb.HibernatePersistence;
-import org.hibernate.ejb.test.pack.cfgxmlpar.Morito;
-import org.hibernate.ejb.test.pack.defaultpar.ApplicationServer;
-import org.hibernate.ejb.test.pack.defaultpar.IncrementListener;
-import org.hibernate.ejb.test.pack.defaultpar.Lighter;
-import org.hibernate.ejb.test.pack.defaultpar.Money;
-import org.hibernate.ejb.test.pack.defaultpar.Mouse;
-import org.hibernate.ejb.test.pack.defaultpar.OtherIncrementListener;
-import org.hibernate.ejb.test.pack.defaultpar.Version;
-import org.hibernate.ejb.test.pack.excludehbmpar.Caipirinha;
-import org.hibernate.ejb.test.pack.explodedpar.Carpet;
-import org.hibernate.ejb.test.pack.explodedpar.Elephant;
-import org.hibernate.ejb.test.pack.externaljar.Scooter;
-import org.hibernate.ejb.test.pack.spacepar.Bug;
-import org.hibernate.ejb.test.pack.various.Seat;
-import org.hibernate.ejb.test.pack.various.Airplane;
-import org.hibernate.stat.Statistics;
-import org.hibernate.validator.InvalidStateException;
-import org.hibernate.JDBCException;
-
-//$Id$
-
-/**
- * @author Gavin King
- */
-public class PackagedEntityManagerTest extends TestCase {
-
-	public Class[] getAnnotatedClasses() {
-		return new Class[]{
-		};
-	}
-
-	public void setUp() {
-		factory = Persistence.createEntityManagerFactory( "manager1" );
-	}
-
-	public void testDefaultPar() throws Exception {
-		EntityManagerFactory emf = Persistence.createEntityManagerFactory( "defaultpar", new HashMap() );
-		EntityManager em = emf.createEntityManager();
-		ApplicationServer as = new ApplicationServer();
-		as.setName( "JBoss AS" );
-		Version v = new Version();
-		v.setMajor( 4 );
-		v.setMinor( 0 );
-		v.setMicro( 3 );
-		as.setVersion( v );
-		Mouse mouse = new Mouse();
-		mouse.setName( "mickey" );
-		em.getTransaction().begin();
-		em.persist( as );
-		em.persist( mouse );
-		assertEquals( 1, em.createNamedQuery( "allMouse" ).getResultList().size() );
-		Lighter lighter = new Lighter();
-		lighter.name = "main";
-		lighter.power = " 250 W";
-		em.persist( lighter );
-		em.flush();
-		em.remove( lighter );
-		em.remove( mouse );
-		assertNotNull( as.getId() );
-		em.remove( as );
-		em.getTransaction().commit();
-		em.close();
-		emf.close();
-	}
-
-	public void testListenersDefaultPar() throws Exception {
-		IncrementListener.reset();
-		OtherIncrementListener.reset();
-		EntityManagerFactory emf = Persistence.createEntityManagerFactory( "defaultpar", new HashMap() );
-		EntityManager em = emf.createEntityManager();
-		em.getTransaction().begin();
-		ApplicationServer as = new ApplicationServer();
-		as.setName( "JBoss AS" );
-		Version v = new Version();
-		v.setMajor( 4 );
-		v.setMinor( 0 );
-		v.setMicro( 3 );
-		as.setVersion( v );
-		em.persist( as );
-		em.flush();
-		assertEquals( "Failure in default listeners", 1, IncrementListener.getIncrement() );
-		assertEquals( "Failuer in XML overriden listeners", 1, OtherIncrementListener.getIncrement() );
-
-		Mouse mouse = new Mouse();
-		mouse.setName( "mickey" );
-		em.persist( mouse );
-		em.flush();
-		assertEquals( "Failure in @ExcludeDefaultListeners", 1, IncrementListener.getIncrement() );
-		assertEquals( 1, OtherIncrementListener.getIncrement() );
-
-		Money money = new Money();
-		em.persist( money );
-		em.flush();
-		assertEquals( "Failure in @ExcludeDefaultListeners", 2, IncrementListener.getIncrement() );
-		assertEquals( 1, OtherIncrementListener.getIncrement() );
-
-		em.getTransaction().rollback();
-		em.close();
-		emf.close();
-	}
-
-	public void testExplodedPar() throws Exception {
-		EntityManagerFactory emf = Persistence.createEntityManagerFactory( "explodedpar", new HashMap() );
-		EntityManager em = emf.createEntityManager();
-		org.hibernate.ejb.test.pack.explodedpar.Carpet carpet = new Carpet();
-		Elephant el = new Elephant();
-		el.setName( "Dumbo" );
-		carpet.setCountry( "Turkey" );
-		em.getTransaction().begin();
-		em.persist( carpet );
-		em.persist( el );
-		assertEquals( 1, em.createNamedQuery( "allCarpet" ).getResultList().size() );
-		assertNotNull( carpet.getId() );
-		em.remove( carpet );
-		em.getTransaction().commit();
-		em.close();
-		emf.close();
-	}
-
-
-	public void testExcludeHbmPar() throws Exception {
-		EntityManagerFactory emf = null;
-		try {
-			emf = Persistence.createEntityManagerFactory( "excludehbmpar", new HashMap() );
-		}
-		catch (PersistenceException e) {
-			Throwable nested = e.getCause();
-			if ( nested == null ) throw e;
-			nested = nested.getCause();
-			if ( nested == null ) throw e;
-			if ( ! ( nested instanceof ClassNotFoundException ) ) throw e;
-			fail( "Try to process hbm file: " + e.getMessage() );
-		}
-		EntityManager em = emf.createEntityManager();
-		Caipirinha s = new Caipirinha( "Strong" );
-		em.getTransaction().begin();
-		em.persist( s );
-		em.getTransaction().commit();
-
-		em.getTransaction().begin();
-		s = em.find( Caipirinha.class, s.getId() );
-		em.remove( s );
-		em.getTransaction().commit();
-		em.close();
-		emf.close();
-	}
-
-	public void testCfgXmlPar() throws Exception {
-		EntityManagerFactory emf = Persistence.createEntityManagerFactory( "cfgxmlpar", new HashMap() );
-		EntityManager em = emf.createEntityManager();
-		Item i = new Item();
-		i.setDescr( "Blah" );
-		i.setName( "factory" );
-		Morito m = new Morito();
-		m.setPower( "SuperStrong" );
-		em.getTransaction().begin();
-		em.persist( i );
-		em.persist( m );
-		em.getTransaction().commit();
-
-		em.getTransaction().begin();
-		i = em.find( Item.class, i.getName() );
-		em.remove( i );
-		em.remove( em.find( Morito.class, m.getId() ) );
-		em.getTransaction().commit();
-		em.close();
-		emf.close();
-	}
-
-	public void testSpacePar() throws Exception {
-		EntityManagerFactory emf = Persistence.createEntityManagerFactory( "space par", new HashMap() );
-		EntityManager em = emf.createEntityManager();
-		Bug bug = new Bug();
-		bug.setSubject( "Spaces in directory name don't play well on Windows");
-		em.getTransaction().begin();
-		em.persist( bug );
-		em.flush();
-		em.remove( bug );
-		assertNotNull( bug.getId() );
-		em.getTransaction().rollback();
-		em.close();
-		emf.close();
-	}
-
-	public void testOverridenPar() throws Exception {
-		HashMap properties = new HashMap();
-		properties.put( HibernatePersistence.JTA_DATASOURCE, null );
-		properties.put( "hibernate.connection.driver_class", "org.hsqldb.jdbcDriver" );
-		properties.put( "hibernate.connection.username", "sa" );
-		properties.put( "hibernate.connection.password", "" );
-		properties.put( "hibernate.connection.url", "jdbc:hsqldb:." );
-		EntityManagerFactory emf = Persistence.createEntityManagerFactory( "overridenpar", properties );
-		EntityManager em = emf.createEntityManager();
-		org.hibernate.ejb.test.pack.overridenpar.Bug bug = new org.hibernate.ejb.test.pack.overridenpar.Bug();
-		bug.setSubject( "Allow DS overriding");
-		em.getTransaction().begin();
-		em.persist( bug );
-		em.flush();
-		em.remove( bug );
-		assertNotNull( bug.getId() );
-		em.getTransaction().rollback();
-		em.close();
-		emf.close();
-	}
-
-
-//  This test does not make sense anymore, validator being autoregistered at the HAN level
-//	public void testListenersOverridingCfgXmlPar() throws Exception {
-//		EntityManagerFactory emf = Persistence.createEntityManagerFactory( "cfgxmlpar", new HashMap() );
-//		EntityManager em = emf.createEntityManager();
-//		Cat cat = new Cat();
-//		cat.setName( "123"); //validator catch that
-//		em.getTransaction().begin();
-//		try {
-//			em.persist( cat );
-//			em.flush();
-//		}
-//		catch (InvalidStateException e) {
-//			fail("Shouldn't call the ValidatorEvent listener");
-//		}
-//		catch (PersistenceException e) {
-//			if ( ! (e.getCause() instanceof JDBCException ) ) {
-//				fail("Unexpected exception: " + e);
-//			}
-//		}
-//		em.getTransaction().rollback();
-//
-//		em.close();
-//		emf.close();
-//	}
-
-	//EM TRANSACTION
-//	public void testEntityManager() {
-//
-//		Item item = new Item( "Mouse", "Micro$oft mouse" );
-//
-//		EntityManager em = factory.createEntityManager();
-//		em.getTransaction().begin();
-//		em.persist( item );
-//		assertTrue( em.contains( item ) );
-//		em.getTransaction().commit();
-//
-//		assertFalse( em.contains( item ) );
-//
-//		em.getTransaction().begin();
-//		item = (Item) em.createQuery( "from Item where descr like 'M%'" ).getSingleResult();
-//		assertNotNull( item );
-//		assertEquals( "Micro$oft mouse", item.getDescr() );
-//		item.setDescr( "Micro$oft wireless mouse" );
-//		assertTrue( em.contains( item ) );
-//		em.getTransaction().commit();
-//
-//		assertFalse( em.contains( item ) );
-//
-//		em.getTransaction().begin();
-//		item = (Item) em.find( Item.class, "Mouse" );
-//		assertNotNull( item );
-//		em.getTransaction().commit();
-//
-//		item = em.find( Item.class, "Mouse" );
-//		assertFalse( em.contains( item ) );
-//
-//		item = (Item) em.createQuery( "from Item where descr like 'M%'" ).getSingleResult();
-//		assertNotNull( item );
-//		assertFalse( em.contains( item ) );
-//
-//		em.getTransaction().begin();
-//		assertEquals("Explicit package in <class> should work", 1, em.createNamedQuery( "countItems" ).getSingleResult() );
-//		em.getTransaction().commit();
-//
-//		em.getTransaction().begin();
-//		item = em.find( Item.class, "Mouse" );
-//		assertNotNull( item );
-//		assertTrue( em.contains( item ) );
-//		assertEquals( "Micro$oft wireless mouse", item.getDescr() );
-//		em.remove( item );
-//		em.getTransaction().commit();
-//
-//		em.close();
-//	}
-
-	public void testExtendedEntityManager() {
-
-		Item item = new Item( "Mouse", "Micro$oft mouse" );
-
-		EntityManager em = factory.createEntityManager();
-		em.getTransaction().begin();
-		em.persist( item );
-		assertTrue( em.contains( item ) );
-		em.getTransaction().commit();
-
-		assertTrue( em.contains( item ) );
-
-		em.getTransaction().begin();
-		Item item1 = (Item) em.createQuery( "select i from Item i where descr like 'M%'" ).getSingleResult();
-		assertNotNull( item1 );
-		assertSame( item, item1 );
-		item.setDescr( "Micro$oft wireless mouse" );
-		assertTrue( em.contains( item ) );
-		em.getTransaction().commit();
-
-		assertTrue( em.contains( item ) );
-
-		em.getTransaction().begin();
-		item1 = em.find( Item.class, "Mouse" );
-		assertSame( item, item1 );
-		em.getTransaction().commit();
-		assertTrue( em.contains( item ) );
-
-		item1 = em.find( Item.class, "Mouse" );
-		assertSame( item, item1 );
-		assertTrue( em.contains( item ) );
-
-		item1 = (Item) em.createQuery( "select i from Item i where descr like 'M%'" ).getSingleResult();
-		assertNotNull( item1 );
-		assertSame( item, item1 );
-		assertTrue( em.contains( item ) );
-
-		em.getTransaction().begin();
-		assertTrue( em.contains( item ) );
-		em.remove( item );
-		em.remove( item ); //second remove should be a no-op
-		em.getTransaction().commit();
-
-		em.close();
-
-	}
-
-	public void testConfiguration() throws Exception {
-		Item item = new Item( "Mouse", "Micro$oft mouse" );
-		Distributor res = new Distributor();
-		res.setName( "Bruce" );
-		item.setDistributors( new HashSet<Distributor>() );
-		item.getDistributors().add( res );
-		Statistics stats = ( (HibernateEntityManagerFactory) factory ).getSessionFactory().getStatistics();
-		stats.clear();
-		stats.setStatisticsEnabled( true );
-
-		EntityManager em = factory.createEntityManager();
-		em.getTransaction().begin();
-
-		em.persist( res );
-		em.persist( item );
-		assertTrue( em.contains( item ) );
-
-		em.getTransaction().commit();
-		em.close();
-
-		assertEquals( 1, stats.getSecondLevelCachePutCount() );
-		assertEquals( 0, stats.getSecondLevelCacheHitCount() );
-
-		em = factory.createEntityManager();
-		em.getTransaction().begin();
-		Item second = em.find( Item.class, item.getName() );
-		assertEquals( 1, second.getDistributors().size() );
-		assertEquals( 1, stats.getSecondLevelCacheHitCount() );
-		em.getTransaction().commit();
-		em.close();
-
-		em = factory.createEntityManager();
-		em.getTransaction().begin();
-		second = em.find( Item.class, item.getName() );
-		assertEquals( 1, second.getDistributors().size() );
-		assertEquals( 3, stats.getSecondLevelCacheHitCount() );
-		for ( Distributor distro : second.getDistributors() ) {
-			em.remove( distro );
-		}
-		em.remove( second );
-		em.getTransaction().commit();
-		em.close();
-
-		stats.clear();
-		stats.setStatisticsEnabled( false );
-	}
-
-	public void testExternalJar() throws Exception {
-		EntityManager em = factory.createEntityManager();
-		Scooter s = new Scooter();
-		s.setModel( "Abadah" );
-		s.setSpeed( 85l );
-		em.getTransaction().begin();
-		em.persist( s );
-		em.getTransaction().commit();
-		em.close();
-		em = factory.createEntityManager();
-		em.getTransaction().begin();
-		s = em.find( Scooter.class, s.getModel() );
-		assertEquals( new Long( 85 ), s.getSpeed() );
-		em.remove( s );
-		em.getTransaction().commit();
-		em.close();
-	}
-
-	public void testORMFileOnMainAndExplicitJars() throws Exception {
-		EntityManager em = factory.createEntityManager();
-		Seat seat = new Seat();
-		seat.setNumber( "3B" );
-		Airplane plane = new Airplane();
-		plane.setSerialNumber( "75924418409052355");
-		em.getTransaction().begin();
-		em.persist( seat );
-		em.persist( plane );
-		em.flush();
-		em.getTransaction().rollback();
-		em.close();
-	}
-
-	public PackagedEntityManagerTest() {
-		super();
-	}
-
-	public PackagedEntityManagerTest(String arg0) {
-		super( arg0 );
-	}
-
-}
\ No newline at end of file

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/PackagedEntityManagerTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/PackagedEntityManagerTest.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/PackagedEntityManagerTest.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/PackagedEntityManagerTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,427 @@
+package org.hibernate.ejb.test;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+import javax.persistence.PersistenceException;
+
+import org.hibernate.ejb.HibernateEntityManagerFactory;
+import org.hibernate.ejb.HibernatePersistence;
+import org.hibernate.ejb.test.pack.cfgxmlpar.Morito;
+import org.hibernate.ejb.test.pack.defaultpar.ApplicationServer;
+import org.hibernate.ejb.test.pack.defaultpar.IncrementListener;
+import org.hibernate.ejb.test.pack.defaultpar.Lighter;
+import org.hibernate.ejb.test.pack.defaultpar.Money;
+import org.hibernate.ejb.test.pack.defaultpar.Mouse;
+import org.hibernate.ejb.test.pack.defaultpar.OtherIncrementListener;
+import org.hibernate.ejb.test.pack.defaultpar.Version;
+import org.hibernate.ejb.test.pack.excludehbmpar.Caipirinha;
+import org.hibernate.ejb.test.pack.explodedpar.Carpet;
+import org.hibernate.ejb.test.pack.explodedpar.Elephant;
+import org.hibernate.ejb.test.pack.externaljar.Scooter;
+import org.hibernate.ejb.test.pack.spacepar.Bug;
+import org.hibernate.ejb.test.pack.various.Seat;
+import org.hibernate.ejb.test.pack.various.Airplane;
+import org.hibernate.stat.Statistics;
+import org.hibernate.validator.InvalidStateException;
+import org.hibernate.JDBCException;
+
+//$Id$
+
+/**
+ * @author Gavin King
+ */
+public class PackagedEntityManagerTest extends TestCase {
+
+	public Class[] getAnnotatedClasses() {
+		return new Class[]{
+		};
+	}
+
+	public void setUp() {
+		factory = Persistence.createEntityManagerFactory( "manager1" );
+	}
+
+	public void testDefaultPar() throws Exception {
+		EntityManagerFactory emf = Persistence.createEntityManagerFactory( "defaultpar", new HashMap() );
+		EntityManager em = emf.createEntityManager();
+		ApplicationServer as = new ApplicationServer();
+		as.setName( "JBoss AS" );
+		Version v = new Version();
+		v.setMajor( 4 );
+		v.setMinor( 0 );
+		v.setMicro( 3 );
+		as.setVersion( v );
+		Mouse mouse = new Mouse();
+		mouse.setName( "mickey" );
+		em.getTransaction().begin();
+		em.persist( as );
+		em.persist( mouse );
+		assertEquals( 1, em.createNamedQuery( "allMouse" ).getResultList().size() );
+		Lighter lighter = new Lighter();
+		lighter.name = "main";
+		lighter.power = " 250 W";
+		em.persist( lighter );
+		em.flush();
+		em.remove( lighter );
+		em.remove( mouse );
+		assertNotNull( as.getId() );
+		em.remove( as );
+		em.getTransaction().commit();
+		em.close();
+		emf.close();
+	}
+
+	public void testListenersDefaultPar() throws Exception {
+		IncrementListener.reset();
+		OtherIncrementListener.reset();
+		EntityManagerFactory emf = Persistence.createEntityManagerFactory( "defaultpar", new HashMap() );
+		EntityManager em = emf.createEntityManager();
+		em.getTransaction().begin();
+		ApplicationServer as = new ApplicationServer();
+		as.setName( "JBoss AS" );
+		Version v = new Version();
+		v.setMajor( 4 );
+		v.setMinor( 0 );
+		v.setMicro( 3 );
+		as.setVersion( v );
+		em.persist( as );
+		em.flush();
+		assertEquals( "Failure in default listeners", 1, IncrementListener.getIncrement() );
+		assertEquals( "Failuer in XML overriden listeners", 1, OtherIncrementListener.getIncrement() );
+
+		Mouse mouse = new Mouse();
+		mouse.setName( "mickey" );
+		em.persist( mouse );
+		em.flush();
+		assertEquals( "Failure in @ExcludeDefaultListeners", 1, IncrementListener.getIncrement() );
+		assertEquals( 1, OtherIncrementListener.getIncrement() );
+
+		Money money = new Money();
+		em.persist( money );
+		em.flush();
+		assertEquals( "Failure in @ExcludeDefaultListeners", 2, IncrementListener.getIncrement() );
+		assertEquals( 1, OtherIncrementListener.getIncrement() );
+
+		em.getTransaction().rollback();
+		em.close();
+		emf.close();
+	}
+
+	public void testExplodedPar() throws Exception {
+		EntityManagerFactory emf = Persistence.createEntityManagerFactory( "explodedpar", new HashMap() );
+		EntityManager em = emf.createEntityManager();
+		org.hibernate.ejb.test.pack.explodedpar.Carpet carpet = new Carpet();
+		Elephant el = new Elephant();
+		el.setName( "Dumbo" );
+		carpet.setCountry( "Turkey" );
+		em.getTransaction().begin();
+		em.persist( carpet );
+		em.persist( el );
+		assertEquals( 1, em.createNamedQuery( "allCarpet" ).getResultList().size() );
+		assertNotNull( carpet.getId() );
+		em.remove( carpet );
+		em.getTransaction().commit();
+		em.close();
+		emf.close();
+	}
+
+
+	public void testExcludeHbmPar() throws Exception {
+		EntityManagerFactory emf = null;
+		try {
+			emf = Persistence.createEntityManagerFactory( "excludehbmpar", new HashMap() );
+		}
+		catch (PersistenceException e) {
+			Throwable nested = e.getCause();
+			if ( nested == null ) throw e;
+			nested = nested.getCause();
+			if ( nested == null ) throw e;
+			if ( ! ( nested instanceof ClassNotFoundException ) ) throw e;
+			fail( "Try to process hbm file: " + e.getMessage() );
+		}
+		EntityManager em = emf.createEntityManager();
+		Caipirinha s = new Caipirinha( "Strong" );
+		em.getTransaction().begin();
+		em.persist( s );
+		em.getTransaction().commit();
+
+		em.getTransaction().begin();
+		s = em.find( Caipirinha.class, s.getId() );
+		em.remove( s );
+		em.getTransaction().commit();
+		em.close();
+		emf.close();
+	}
+
+	public void testCfgXmlPar() throws Exception {
+		EntityManagerFactory emf = Persistence.createEntityManagerFactory( "cfgxmlpar", new HashMap() );
+		EntityManager em = emf.createEntityManager();
+		Item i = new Item();
+		i.setDescr( "Blah" );
+		i.setName( "factory" );
+		Morito m = new Morito();
+		m.setPower( "SuperStrong" );
+		em.getTransaction().begin();
+		em.persist( i );
+		em.persist( m );
+		em.getTransaction().commit();
+
+		em.getTransaction().begin();
+		i = em.find( Item.class, i.getName() );
+		em.remove( i );
+		em.remove( em.find( Morito.class, m.getId() ) );
+		em.getTransaction().commit();
+		em.close();
+		emf.close();
+	}
+
+	public void testSpacePar() throws Exception {
+		EntityManagerFactory emf = Persistence.createEntityManagerFactory( "space par", new HashMap() );
+		EntityManager em = emf.createEntityManager();
+		Bug bug = new Bug();
+		bug.setSubject( "Spaces in directory name don't play well on Windows");
+		em.getTransaction().begin();
+		em.persist( bug );
+		em.flush();
+		em.remove( bug );
+		assertNotNull( bug.getId() );
+		em.getTransaction().rollback();
+		em.close();
+		emf.close();
+	}
+
+	public void testOverridenPar() throws Exception {
+		HashMap properties = new HashMap();
+		properties.put( HibernatePersistence.JTA_DATASOURCE, null );
+		properties.put( "hibernate.connection.driver_class", "org.hsqldb.jdbcDriver" );
+		properties.put( "hibernate.connection.username", "sa" );
+		properties.put( "hibernate.connection.password", "" );
+		properties.put( "hibernate.connection.url", "jdbc:hsqldb:." );
+		EntityManagerFactory emf = Persistence.createEntityManagerFactory( "overridenpar", properties );
+		EntityManager em = emf.createEntityManager();
+		org.hibernate.ejb.test.pack.overridenpar.Bug bug = new org.hibernate.ejb.test.pack.overridenpar.Bug();
+		bug.setSubject( "Allow DS overriding");
+		em.getTransaction().begin();
+		em.persist( bug );
+		em.flush();
+		em.remove( bug );
+		assertNotNull( bug.getId() );
+		em.getTransaction().rollback();
+		em.close();
+		emf.close();
+	}
+
+
+//  This test does not make sense anymore, validator being autoregistered at the HAN level
+//	public void testListenersOverridingCfgXmlPar() throws Exception {
+//		EntityManagerFactory emf = Persistence.createEntityManagerFactory( "cfgxmlpar", new HashMap() );
+//		EntityManager em = emf.createEntityManager();
+//		Cat cat = new Cat();
+//		cat.setName( "123"); //validator catch that
+//		em.getTransaction().begin();
+//		try {
+//			em.persist( cat );
+//			em.flush();
+//		}
+//		catch (InvalidStateException e) {
+//			fail("Shouldn't call the ValidatorEvent listener");
+//		}
+//		catch (PersistenceException e) {
+//			if ( ! (e.getCause() instanceof JDBCException ) ) {
+//				fail("Unexpected exception: " + e);
+//			}
+//		}
+//		em.getTransaction().rollback();
+//
+//		em.close();
+//		emf.close();
+//	}
+
+	//EM TRANSACTION
+//	public void testEntityManager() {
+//
+//		Item item = new Item( "Mouse", "Micro$oft mouse" );
+//
+//		EntityManager em = factory.createEntityManager();
+//		em.getTransaction().begin();
+//		em.persist( item );
+//		assertTrue( em.contains( item ) );
+//		em.getTransaction().commit();
+//
+//		assertFalse( em.contains( item ) );
+//
+//		em.getTransaction().begin();
+//		item = (Item) em.createQuery( "from Item where descr like 'M%'" ).getSingleResult();
+//		assertNotNull( item );
+//		assertEquals( "Micro$oft mouse", item.getDescr() );
+//		item.setDescr( "Micro$oft wireless mouse" );
+//		assertTrue( em.contains( item ) );
+//		em.getTransaction().commit();
+//
+//		assertFalse( em.contains( item ) );
+//
+//		em.getTransaction().begin();
+//		item = (Item) em.find( Item.class, "Mouse" );
+//		assertNotNull( item );
+//		em.getTransaction().commit();
+//
+//		item = em.find( Item.class, "Mouse" );
+//		assertFalse( em.contains( item ) );
+//
+//		item = (Item) em.createQuery( "from Item where descr like 'M%'" ).getSingleResult();
+//		assertNotNull( item );
+//		assertFalse( em.contains( item ) );
+//
+//		em.getTransaction().begin();
+//		assertEquals("Explicit package in <class> should work", 1, em.createNamedQuery( "countItems" ).getSingleResult() );
+//		em.getTransaction().commit();
+//
+//		em.getTransaction().begin();
+//		item = em.find( Item.class, "Mouse" );
+//		assertNotNull( item );
+//		assertTrue( em.contains( item ) );
+//		assertEquals( "Micro$oft wireless mouse", item.getDescr() );
+//		em.remove( item );
+//		em.getTransaction().commit();
+//
+//		em.close();
+//	}
+
+	public void testExtendedEntityManager() {
+
+		Item item = new Item( "Mouse", "Micro$oft mouse" );
+
+		EntityManager em = factory.createEntityManager();
+		em.getTransaction().begin();
+		em.persist( item );
+		assertTrue( em.contains( item ) );
+		em.getTransaction().commit();
+
+		assertTrue( em.contains( item ) );
+
+		em.getTransaction().begin();
+		Item item1 = (Item) em.createQuery( "select i from Item i where descr like 'M%'" ).getSingleResult();
+		assertNotNull( item1 );
+		assertSame( item, item1 );
+		item.setDescr( "Micro$oft wireless mouse" );
+		assertTrue( em.contains( item ) );
+		em.getTransaction().commit();
+
+		assertTrue( em.contains( item ) );
+
+		em.getTransaction().begin();
+		item1 = em.find( Item.class, "Mouse" );
+		assertSame( item, item1 );
+		em.getTransaction().commit();
+		assertTrue( em.contains( item ) );
+
+		item1 = em.find( Item.class, "Mouse" );
+		assertSame( item, item1 );
+		assertTrue( em.contains( item ) );
+
+		item1 = (Item) em.createQuery( "select i from Item i where descr like 'M%'" ).getSingleResult();
+		assertNotNull( item1 );
+		assertSame( item, item1 );
+		assertTrue( em.contains( item ) );
+
+		em.getTransaction().begin();
+		assertTrue( em.contains( item ) );
+		em.remove( item );
+		em.remove( item ); //second remove should be a no-op
+		em.getTransaction().commit();
+
+		em.close();
+
+	}
+
+	public void testConfiguration() throws Exception {
+		Item item = new Item( "Mouse", "Micro$oft mouse" );
+		Distributor res = new Distributor();
+		res.setName( "Bruce" );
+		item.setDistributors( new HashSet<Distributor>() );
+		item.getDistributors().add( res );
+		Statistics stats = ( (HibernateEntityManagerFactory) factory ).getSessionFactory().getStatistics();
+		stats.clear();
+		stats.setStatisticsEnabled( true );
+
+		EntityManager em = factory.createEntityManager();
+		em.getTransaction().begin();
+
+		em.persist( res );
+		em.persist( item );
+		assertTrue( em.contains( item ) );
+
+		em.getTransaction().commit();
+		em.close();
+
+		assertEquals( 1, stats.getSecondLevelCachePutCount() );
+		assertEquals( 0, stats.getSecondLevelCacheHitCount() );
+
+		em = factory.createEntityManager();
+		em.getTransaction().begin();
+		Item second = em.find( Item.class, item.getName() );
+		assertEquals( 1, second.getDistributors().size() );
+		assertEquals( 1, stats.getSecondLevelCacheHitCount() );
+		em.getTransaction().commit();
+		em.close();
+
+		em = factory.createEntityManager();
+		em.getTransaction().begin();
+		second = em.find( Item.class, item.getName() );
+		assertEquals( 1, second.getDistributors().size() );
+		assertEquals( 3, stats.getSecondLevelCacheHitCount() );
+		for ( Distributor distro : second.getDistributors() ) {
+			em.remove( distro );
+		}
+		em.remove( second );
+		em.getTransaction().commit();
+		em.close();
+
+		stats.clear();
+		stats.setStatisticsEnabled( false );
+	}
+
+	public void testExternalJar() throws Exception {
+		EntityManager em = factory.createEntityManager();
+		Scooter s = new Scooter();
+		s.setModel( "Abadah" );
+		s.setSpeed( 85l );
+		em.getTransaction().begin();
+		em.persist( s );
+		em.getTransaction().commit();
+		em.close();
+		em = factory.createEntityManager();
+		em.getTransaction().begin();
+		s = em.find( Scooter.class, s.getModel() );
+		assertEquals( new Long( 85 ), s.getSpeed() );
+		em.remove( s );
+		em.getTransaction().commit();
+		em.close();
+	}
+
+	public void testORMFileOnMainAndExplicitJars() throws Exception {
+		EntityManager em = factory.createEntityManager();
+		Seat seat = new Seat();
+		seat.setNumber( "3B" );
+		Airplane plane = new Airplane();
+		plane.setSerialNumber( "75924418409052355");
+		em.getTransaction().begin();
+		em.persist( seat );
+		em.persist( plane );
+		em.flush();
+		em.getTransaction().rollback();
+		em.close();
+	}
+
+	public PackagedEntityManagerTest() {
+		super();
+	}
+
+	public PackagedEntityManagerTest(String arg0) {
+		super( arg0 );
+	}
+
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/QueryTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/QueryTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/QueryTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,353 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test;
-
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import javax.persistence.EntityManager;
-import javax.persistence.Query;
-import javax.persistence.TemporalType;
-
-import org.hibernate.Hibernate;
-
-
-/**
- * @author Emmanuel Bernard
- */
-public class QueryTest extends TestCase {
-
-	public void testPagedQuery() throws Exception {
-		EntityManager em = factory.createEntityManager();
-		em.getTransaction().begin();
-		Item item = new Item( "Mouse", "Micro$oft mouse" );
-		em.persist( item );
-		item = new Item( "Computer", "Apple II" );
-		em.persist( item );
-		Query q = em.createQuery( "select i from " + Item.class.getName() + " i where i.name like :itemName" );
-		q.setParameter( "itemName", "%" );
-		q.setMaxResults( 1 );
-		q.getSingleResult();
-		q = em.createQuery( "select i from Item i where i.name like :itemName" );
-		q.setParameter( "itemName", "%" );
-		q.setFirstResult( 1 );
-		q.setMaxResults( 1 );
-		em.getTransaction().rollback();
-		em.close();
-	}
-
-	public void testAggregationReturnType() throws Exception {
-		EntityManager em = factory.createEntityManager();
-		em.getTransaction().begin();
-		Item item = new Item( "Mouse", "Micro$oft mouse" );
-		em.persist( item );
-		item = new Item( "Computer", "Apple II" );
-		em.persist( item );
-		Query q = em.createQuery( "select count(i) from Item i where i.name like :itemName" );
-		q.setParameter( "itemName", "%" );
-		assertTrue( q.getSingleResult() instanceof Long );
-		em.getTransaction().rollback();
-		em.close();
-	}
-
-	public void testParameterList() throws Exception {
-		final Item item = new Item( "Mouse", "Micro$oft mouse" );
-		final Item item2 = new Item( "Computer", "D€ll computer" );
-
-		EntityManager em = factory.createEntityManager();
-		em.getTransaction().begin();
-		em.persist( item );
-		em.persist( item2 );
-		assertTrue( em.contains( item ) );
-		em.getTransaction().commit();
-
-		em.getTransaction().begin();
-		Query q = em.createQuery( "select item from Item item where item.name in (:names)" );
-		List params = new ArrayList();
-		params.add( item.getName() );
-		params.add( item2.getName() );
-		q.setParameter( "names", params );
-		List result = q.getResultList();
-		assertNotNull( result );
-		assertEquals( 2, result.size() );
-
-		q = em.createQuery( "select item from Item item where item.name in ( ?1 )" );
-		params = new ArrayList();
-		params.add( item.getName() );
-		params.add( item2.getName() );
-		q.setParameter( "1", params );
-		result = q.getResultList();
-		assertNotNull( result );
-		assertEquals( 2, result.size() );
-		em.remove( result.get( 0 ) );
-		em.remove( result.get( 1 ) );
-		em.getTransaction().commit();
-
-		em.close();
-	}
-
-//	public void testDistinct() throws Exception {
-//		Item item = new Item("Mouse", "Micro_oft mouse");
-//		Distributor fnac = new Distributor();
-//		fnac.setName("Fnac");
-//		item.addDistributor(fnac);
-//		Distributor auchan = new Distributor();
-//		auchan.setName("Auchan");
-//		item.addDistributor(auchan);
-//
-//		EntityManager em = factory.createEntityManager();
-//		em.getTransaction().begin();
-//		em.persist(fnac);
-//		em.persist(auchan);
-//		em.persist(item);
-//		em.getTransaction().commit();
-//
-//		em.getTransaction().begin();
-//		Query q = em.createQuery("select distinct item from Item item join fetch item.distributors");
-//		List result = q.getResultList();
-//		assertNotNull(result);
-//		assertEquals( 1, result.size() );
-//		item = (Item) result.get(0);
-//		item.getDistributors().clear();
-//		em.flush();
-//		int deleted = em.createQuery("delete from Item").executeUpdate();
-//		assertEquals( 1, deleted );
-//		deleted = em.createQuery("delete from Distributor").executeUpdate();
-//		assertEquals( 2, deleted );
-//		em.getTransaction().commit();
-//
-//		em.close();
-//	}
-
-	public void testEscapeCharacter() throws Exception {
-		final Item item = new Item( "Mouse", "Micro_oft mouse" );
-		final Item item2 = new Item( "Computer", "D€ll computer" );
-
-		EntityManager em = factory.createEntityManager();
-		em.getTransaction().begin();
-		em.persist( item );
-		em.persist( item2 );
-		assertTrue( em.contains( item ) );
-		em.getTransaction().commit();
-
-		em.getTransaction().begin();
-		Query q = em.createQuery( "select item from Item item where item.descr like 'Microk_oft mouse' escape 'k' " );
-		List result = q.getResultList();
-		assertNotNull( result );
-		assertEquals( 1, result.size() );
-		int deleted = em.createQuery( "delete from Item" ).executeUpdate();
-		assertEquals( 2, deleted );
-		em.getTransaction().commit();
-
-		em.close();
-	}
-
-	public void testNativeQueryByEntity() {
-
-		Item item = new Item( "Mouse", "Micro$oft mouse" );
-
-		EntityManager em = factory.createEntityManager();
-		em.getTransaction().begin();
-		em.persist( item );
-		assertTrue( em.contains( item ) );
-		em.getTransaction().commit();
-
-		em.getTransaction().begin();
-		item = (Item) em.createNativeQuery( "select * from Item", Item.class ).getSingleResult();
-		assertNotNull( item );
-		assertEquals( "Micro$oft mouse", item.getDescr() );
-		em.remove( item );
-		em.getTransaction().commit();
-
-		em.close();
-
-	}
-
-	public void testNativeQueryByResultSet() {
-
-		Item item = new Item( "Mouse", "Micro$oft mouse" );
-
-		EntityManager em = factory.createEntityManager();
-		em.getTransaction().begin();
-		em.persist( item );
-		assertTrue( em.contains( item ) );
-		em.getTransaction().commit();
-
-		em.getTransaction().begin();
-		item = (Item) em.createNativeQuery( "select name as itemname, descr as itemdescription from Item", "getItem" )
-				.getSingleResult();
-		assertNotNull( item );
-		assertEquals( "Micro$oft mouse", item.getDescr() );
-		em.remove( item );
-		em.getTransaction().commit();
-
-		em.close();
-
-	}
-
-	public void testExplicitPositionalParameter() throws Exception {
-		EntityManager em = factory.createEntityManager();
-		em.getTransaction().begin();
-		Wallet w = new Wallet();
-		w.setBrand( "Lacoste" );
-		w.setModel( "Minimic" );
-		w.setSerial( "0100202002" );
-		em.persist( w );
-		em.getTransaction().commit();
-		em.getTransaction().begin();
-		Query query = em.createQuery( "select w from " + Wallet.class.getName() + " w where w.brand in (?1)" );
-		List brands = new ArrayList();
-		brands.add( "Lacoste" );
-		query.setParameter( 1, brands );
-		w = (Wallet) query.getSingleResult();
-		assertNotNull( w );
-		query = em.createQuery( "select w from " + Wallet.class.getName() + " w where w.marketEntrance = ?1" );
-		query.setParameter( 1, new Date(), TemporalType.DATE );
-		//assertNull( query.getSingleResult() );
-		assertEquals( 0, query.getResultList().size() );
-		em.remove( w );
-		em.getTransaction().commit();
-		em.close();
-	}
-
-	public void testNativeQuestionMarkParameter() throws Exception {
-		EntityManager em = factory.createEntityManager();
-		em.getTransaction().begin();
-		Wallet w = new Wallet();
-		w.setBrand( "Lacoste" );
-		w.setModel( "Minimic" );
-		w.setSerial( "0100202002" );
-		em.persist( w );
-		em.getTransaction().commit();
-		em.getTransaction().begin();
-		Query query = em.createNativeQuery( "select * from Wallet w where w.brand = ?", Wallet.class );
-		query.setParameter( 1, "Lacoste" );
-		w = (Wallet) query.getSingleResult();
-		assertNotNull( w );
-		em.remove( w );
-		em.getTransaction().commit();
-		em.close();
-	}
-
-	public void testNativeQueryWithPositionalParameter() {
-
-		Item item = new Item( "Mouse", "Micro$oft mouse" );
-
-		EntityManager em = factory.createEntityManager();
-		em.getTransaction().begin();
-		em.persist( item );
-		assertTrue( em.contains( item ) );
-		em.getTransaction().commit();
-
-		em.getTransaction().begin();
-		Query query = em.createNativeQuery( "select * from Item where name = ?1", Item.class );
-		query.setParameter( 1, "Mouse" );
-		item = (Item) query.getSingleResult();
-		assertNotNull( item );
-		assertEquals( "Micro$oft mouse", item.getDescr() );
-		query = em.createNativeQuery( "select * from Item where name = ?", Item.class );
-		query.setParameter( 1, "Mouse" );
-		item = (Item) query.getSingleResult();
-		assertNotNull( item );
-		assertEquals( "Micro$oft mouse", item.getDescr() );
-		em.remove( item );
-		em.getTransaction().commit();
-
-		em.close();
-
-	}
-
-	public void testDistinct() throws Exception {
-		EntityManager em = factory.createEntityManager();
-		em.getTransaction().begin();
-		em.createQuery( "delete Item" ).executeUpdate();
-		em.createQuery( "delete Distributor" ).executeUpdate();
-		Distributor d1 = new Distributor();
-		d1.setName( "Fnac" );
-		Distributor d2 = new Distributor();
-		d2.setName( "Darty" );
-		Item item = new Item( "Mouse", "Micro$oft mouse" );
-		item.getDistributors().add( d1 );
-		item.getDistributors().add( d2 );
-		em.persist( d1 );
-		em.persist( d2 );
-		em.persist( item );
-		em.flush();
-		em.clear();
-		Query q = em.createQuery( "select distinct i from Item i left join fetch i.distributors" );
-		item = (Item) q.getSingleResult()
-				;
-		//assertEquals( 1, distinctResult.size() );
-		//item = (Item) distinctResult.get( 0 );
-		assertTrue( Hibernate.isInitialized( item.getDistributors() ) );
-		assertEquals( 2, item.getDistributors().size() );
-		em.getTransaction().rollback();
-		em.close();
-	}
-
-	public void testIsNull() throws Exception {
-		EntityManager em = factory.createEntityManager();
-		em.getTransaction().begin();
-		Distributor d1 = new Distributor();
-		d1.setName( "Fnac" );
-		Distributor d2 = new Distributor();
-		d2.setName( "Darty" );
-		Item item = new Item( "Mouse", null );
-		Item item2 = new Item( "Mouse2", "dd" );
-		item.getDistributors().add( d1 );
-		item.getDistributors().add( d2 );
-		em.persist( d1 );
-		em.persist( d2 );
-		em.persist( item );
-		em.persist( item2 );
-		em.flush();
-		em.clear();
-		Query q = em.createQuery(
-				"select i from Item i where (i.descr is null and :descr is null) or i.descr = :descr"
-		);
-		//Query q = em.createQuery( "select i from Item i where (i.descr is null and :descr is null) or (i.descr = :descr");
-		q.setParameter( "descr", "dd" );
-		List result = q.getResultList();
-		assertEquals( 1, result.size() );
-		q.setParameter( "descr", null );
-		result = q.getResultList();
-		assertEquals( 1, result.size() );
-		//item = (Item) distinctResult.get( 0 );
-
-		em.getTransaction().rollback();
-		em.close();
-	}
-
-	public void testUpdateQuery() {
-
-		Item item = new Item( "Mouse", "Micro$oft mouse" );
-
-		EntityManager em = factory.createEntityManager();
-		em.getTransaction().begin();
-		em.persist( item );
-		assertTrue( em.contains( item ) );
-
-		em.flush();
-		em.clear();
-
-		assertEquals(
-				1, em.createNativeQuery(
-				"update Item i set i.descr = 'Logitech Mouse' where i.name = 'Mouse'"
-		).executeUpdate()
-		);
-		item = em.find( Item.class, item.getName() );
-		assertEquals( "Logitech Mouse", item.getDescr() );
-		em.remove( item );
-		em.getTransaction().rollback();
-
-		em.close();
-
-	}
-
-	public Class[] getAnnotatedClasses() {
-		return new Class[]{
-				Item.class,
-				Distributor.class,
-				Wallet.class
-		};
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/QueryTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/QueryTest.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/QueryTest.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/QueryTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,353 @@
+//$Id$
+package org.hibernate.ejb.test;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import javax.persistence.EntityManager;
+import javax.persistence.Query;
+import javax.persistence.TemporalType;
+
+import org.hibernate.Hibernate;
+
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class QueryTest extends TestCase {
+
+	public void testPagedQuery() throws Exception {
+		EntityManager em = factory.createEntityManager();
+		em.getTransaction().begin();
+		Item item = new Item( "Mouse", "Micro$oft mouse" );
+		em.persist( item );
+		item = new Item( "Computer", "Apple II" );
+		em.persist( item );
+		Query q = em.createQuery( "select i from " + Item.class.getName() + " i where i.name like :itemName" );
+		q.setParameter( "itemName", "%" );
+		q.setMaxResults( 1 );
+		q.getSingleResult();
+		q = em.createQuery( "select i from Item i where i.name like :itemName" );
+		q.setParameter( "itemName", "%" );
+		q.setFirstResult( 1 );
+		q.setMaxResults( 1 );
+		em.getTransaction().rollback();
+		em.close();
+	}
+
+	public void testAggregationReturnType() throws Exception {
+		EntityManager em = factory.createEntityManager();
+		em.getTransaction().begin();
+		Item item = new Item( "Mouse", "Micro$oft mouse" );
+		em.persist( item );
+		item = new Item( "Computer", "Apple II" );
+		em.persist( item );
+		Query q = em.createQuery( "select count(i) from Item i where i.name like :itemName" );
+		q.setParameter( "itemName", "%" );
+		assertTrue( q.getSingleResult() instanceof Long );
+		em.getTransaction().rollback();
+		em.close();
+	}
+
+	public void testParameterList() throws Exception {
+		final Item item = new Item( "Mouse", "Micro$oft mouse" );
+		final Item item2 = new Item( "Computer", "D€ll computer" );
+
+		EntityManager em = factory.createEntityManager();
+		em.getTransaction().begin();
+		em.persist( item );
+		em.persist( item2 );
+		assertTrue( em.contains( item ) );
+		em.getTransaction().commit();
+
+		em.getTransaction().begin();
+		Query q = em.createQuery( "select item from Item item where item.name in (:names)" );
+		List params = new ArrayList();
+		params.add( item.getName() );
+		params.add( item2.getName() );
+		q.setParameter( "names", params );
+		List result = q.getResultList();
+		assertNotNull( result );
+		assertEquals( 2, result.size() );
+
+		q = em.createQuery( "select item from Item item where item.name in ( ?1 )" );
+		params = new ArrayList();
+		params.add( item.getName() );
+		params.add( item2.getName() );
+		q.setParameter( "1", params );
+		result = q.getResultList();
+		assertNotNull( result );
+		assertEquals( 2, result.size() );
+		em.remove( result.get( 0 ) );
+		em.remove( result.get( 1 ) );
+		em.getTransaction().commit();
+
+		em.close();
+	}
+
+//	public void testDistinct() throws Exception {
+//		Item item = new Item("Mouse", "Micro_oft mouse");
+//		Distributor fnac = new Distributor();
+//		fnac.setName("Fnac");
+//		item.addDistributor(fnac);
+//		Distributor auchan = new Distributor();
+//		auchan.setName("Auchan");
+//		item.addDistributor(auchan);
+//
+//		EntityManager em = factory.createEntityManager();
+//		em.getTransaction().begin();
+//		em.persist(fnac);
+//		em.persist(auchan);
+//		em.persist(item);
+//		em.getTransaction().commit();
+//
+//		em.getTransaction().begin();
+//		Query q = em.createQuery("select distinct item from Item item join fetch item.distributors");
+//		List result = q.getResultList();
+//		assertNotNull(result);
+//		assertEquals( 1, result.size() );
+//		item = (Item) result.get(0);
+//		item.getDistributors().clear();
+//		em.flush();
+//		int deleted = em.createQuery("delete from Item").executeUpdate();
+//		assertEquals( 1, deleted );
+//		deleted = em.createQuery("delete from Distributor").executeUpdate();
+//		assertEquals( 2, deleted );
+//		em.getTransaction().commit();
+//
+//		em.close();
+//	}
+
+	public void testEscapeCharacter() throws Exception {
+		final Item item = new Item( "Mouse", "Micro_oft mouse" );
+		final Item item2 = new Item( "Computer", "D€ll computer" );
+
+		EntityManager em = factory.createEntityManager();
+		em.getTransaction().begin();
+		em.persist( item );
+		em.persist( item2 );
+		assertTrue( em.contains( item ) );
+		em.getTransaction().commit();
+
+		em.getTransaction().begin();
+		Query q = em.createQuery( "select item from Item item where item.descr like 'Microk_oft mouse' escape 'k' " );
+		List result = q.getResultList();
+		assertNotNull( result );
+		assertEquals( 1, result.size() );
+		int deleted = em.createQuery( "delete from Item" ).executeUpdate();
+		assertEquals( 2, deleted );
+		em.getTransaction().commit();
+
+		em.close();
+	}
+
+	public void testNativeQueryByEntity() {
+
+		Item item = new Item( "Mouse", "Micro$oft mouse" );
+
+		EntityManager em = factory.createEntityManager();
+		em.getTransaction().begin();
+		em.persist( item );
+		assertTrue( em.contains( item ) );
+		em.getTransaction().commit();
+
+		em.getTransaction().begin();
+		item = (Item) em.createNativeQuery( "select * from Item", Item.class ).getSingleResult();
+		assertNotNull( item );
+		assertEquals( "Micro$oft mouse", item.getDescr() );
+		em.remove( item );
+		em.getTransaction().commit();
+
+		em.close();
+
+	}
+
+	public void testNativeQueryByResultSet() {
+
+		Item item = new Item( "Mouse", "Micro$oft mouse" );
+
+		EntityManager em = factory.createEntityManager();
+		em.getTransaction().begin();
+		em.persist( item );
+		assertTrue( em.contains( item ) );
+		em.getTransaction().commit();
+
+		em.getTransaction().begin();
+		item = (Item) em.createNativeQuery( "select name as itemname, descr as itemdescription from Item", "getItem" )
+				.getSingleResult();
+		assertNotNull( item );
+		assertEquals( "Micro$oft mouse", item.getDescr() );
+		em.remove( item );
+		em.getTransaction().commit();
+
+		em.close();
+
+	}
+
+	public void testExplicitPositionalParameter() throws Exception {
+		EntityManager em = factory.createEntityManager();
+		em.getTransaction().begin();
+		Wallet w = new Wallet();
+		w.setBrand( "Lacoste" );
+		w.setModel( "Minimic" );
+		w.setSerial( "0100202002" );
+		em.persist( w );
+		em.getTransaction().commit();
+		em.getTransaction().begin();
+		Query query = em.createQuery( "select w from " + Wallet.class.getName() + " w where w.brand in (?1)" );
+		List brands = new ArrayList();
+		brands.add( "Lacoste" );
+		query.setParameter( 1, brands );
+		w = (Wallet) query.getSingleResult();
+		assertNotNull( w );
+		query = em.createQuery( "select w from " + Wallet.class.getName() + " w where w.marketEntrance = ?1" );
+		query.setParameter( 1, new Date(), TemporalType.DATE );
+		//assertNull( query.getSingleResult() );
+		assertEquals( 0, query.getResultList().size() );
+		em.remove( w );
+		em.getTransaction().commit();
+		em.close();
+	}
+
+	public void testNativeQuestionMarkParameter() throws Exception {
+		EntityManager em = factory.createEntityManager();
+		em.getTransaction().begin();
+		Wallet w = new Wallet();
+		w.setBrand( "Lacoste" );
+		w.setModel( "Minimic" );
+		w.setSerial( "0100202002" );
+		em.persist( w );
+		em.getTransaction().commit();
+		em.getTransaction().begin();
+		Query query = em.createNativeQuery( "select * from Wallet w where w.brand = ?", Wallet.class );
+		query.setParameter( 1, "Lacoste" );
+		w = (Wallet) query.getSingleResult();
+		assertNotNull( w );
+		em.remove( w );
+		em.getTransaction().commit();
+		em.close();
+	}
+
+	public void testNativeQueryWithPositionalParameter() {
+
+		Item item = new Item( "Mouse", "Micro$oft mouse" );
+
+		EntityManager em = factory.createEntityManager();
+		em.getTransaction().begin();
+		em.persist( item );
+		assertTrue( em.contains( item ) );
+		em.getTransaction().commit();
+
+		em.getTransaction().begin();
+		Query query = em.createNativeQuery( "select * from Item where name = ?1", Item.class );
+		query.setParameter( 1, "Mouse" );
+		item = (Item) query.getSingleResult();
+		assertNotNull( item );
+		assertEquals( "Micro$oft mouse", item.getDescr() );
+		query = em.createNativeQuery( "select * from Item where name = ?", Item.class );
+		query.setParameter( 1, "Mouse" );
+		item = (Item) query.getSingleResult();
+		assertNotNull( item );
+		assertEquals( "Micro$oft mouse", item.getDescr() );
+		em.remove( item );
+		em.getTransaction().commit();
+
+		em.close();
+
+	}
+
+	public void testDistinct() throws Exception {
+		EntityManager em = factory.createEntityManager();
+		em.getTransaction().begin();
+		em.createQuery( "delete Item" ).executeUpdate();
+		em.createQuery( "delete Distributor" ).executeUpdate();
+		Distributor d1 = new Distributor();
+		d1.setName( "Fnac" );
+		Distributor d2 = new Distributor();
+		d2.setName( "Darty" );
+		Item item = new Item( "Mouse", "Micro$oft mouse" );
+		item.getDistributors().add( d1 );
+		item.getDistributors().add( d2 );
+		em.persist( d1 );
+		em.persist( d2 );
+		em.persist( item );
+		em.flush();
+		em.clear();
+		Query q = em.createQuery( "select distinct i from Item i left join fetch i.distributors" );
+		item = (Item) q.getSingleResult()
+				;
+		//assertEquals( 1, distinctResult.size() );
+		//item = (Item) distinctResult.get( 0 );
+		assertTrue( Hibernate.isInitialized( item.getDistributors() ) );
+		assertEquals( 2, item.getDistributors().size() );
+		em.getTransaction().rollback();
+		em.close();
+	}
+
+	public void testIsNull() throws Exception {
+		EntityManager em = factory.createEntityManager();
+		em.getTransaction().begin();
+		Distributor d1 = new Distributor();
+		d1.setName( "Fnac" );
+		Distributor d2 = new Distributor();
+		d2.setName( "Darty" );
+		Item item = new Item( "Mouse", null );
+		Item item2 = new Item( "Mouse2", "dd" );
+		item.getDistributors().add( d1 );
+		item.getDistributors().add( d2 );
+		em.persist( d1 );
+		em.persist( d2 );
+		em.persist( item );
+		em.persist( item2 );
+		em.flush();
+		em.clear();
+		Query q = em.createQuery(
+				"select i from Item i where (i.descr is null and :descr is null) or i.descr = :descr"
+		);
+		//Query q = em.createQuery( "select i from Item i where (i.descr is null and :descr is null) or (i.descr = :descr");
+		q.setParameter( "descr", "dd" );
+		List result = q.getResultList();
+		assertEquals( 1, result.size() );
+		q.setParameter( "descr", null );
+		result = q.getResultList();
+		assertEquals( 1, result.size() );
+		//item = (Item) distinctResult.get( 0 );
+
+		em.getTransaction().rollback();
+		em.close();
+	}
+
+	public void testUpdateQuery() {
+
+		Item item = new Item( "Mouse", "Micro$oft mouse" );
+
+		EntityManager em = factory.createEntityManager();
+		em.getTransaction().begin();
+		em.persist( item );
+		assertTrue( em.contains( item ) );
+
+		em.flush();
+		em.clear();
+
+		assertEquals(
+				1, em.createNativeQuery(
+				"update Item i set i.descr = 'Logitech Mouse' where i.name = 'Mouse'"
+		).executeUpdate()
+		);
+		item = em.find( Item.class, item.getName() );
+		assertEquals( "Logitech Mouse", item.getDescr() );
+		em.remove( item );
+		em.getTransaction().rollback();
+
+		em.close();
+
+	}
+
+	public Class[] getAnnotatedClasses() {
+		return new Class[]{
+				Item.class,
+				Distributor.class,
+				Wallet.class
+		};
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/TestCase.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/TestCase.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/TestCase.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,104 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Properties;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.Persistence;
-
-import org.hibernate.cfg.Environment;
-import org.hibernate.ejb.HibernatePersistence;
-
-
-/**
- * @author Emmanuel Bernard
- */
-public abstract class TestCase extends junit.framework.TestCase {
-	protected EntityManagerFactory factory;
-
-	public TestCase() {
-		super();
-	}
-
-	public TestCase(String name) {
-		super( name );
-	}
-
-	public void setUp() {
-		factory = new HibernatePersistence().createEntityManagerFactory( getConfig() );
-	}
-
-	public void tearDown() {
-		factory.close();
-	}
-
-	public abstract Class[] getAnnotatedClasses();
-
-	public String[] getEjb3DD() {
-		return new String[] {};
-	}
-
-	public Map<Class, String> getCachedClasses() {
-		return new HashMap<Class, String>();
-	}
-
-	public Map<String, String> getCachedCollections() {
-		return new HashMap<String, String>();
-	}
-
-	public static Properties loadProperties() {
-		Properties props = new Properties();
-		InputStream stream = Persistence.class.getResourceAsStream( "/hibernate.properties" );
-		if ( stream != null ) {
-			try {
-				props.load( stream );
-			}
-			catch (Exception e) {
-				throw new RuntimeException( "could not load hibernate.properties" );
-			}
-			finally {
-				try {
-					stream.close();
-				}
-				catch (IOException ioe) {
-				}
-			}
-		}
-		props.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
-		return props;
-	}
-
-	public Map getConfig() {
-		Map config = loadProperties();
-		ArrayList<Class> classes = new ArrayList<Class>();
-
-		for ( Class clazz : getAnnotatedClasses() ) {
-			classes.add( clazz );
-		}
-		config.put( HibernatePersistence.LOADED_CLASSES, classes );
-		for ( Map.Entry<Class, String> entry : getCachedClasses().entrySet() ) {
-			config.put(
-					HibernatePersistence.CLASS_CACHE_PREFIX + "." + entry.getKey().getName(),
-					entry.getValue()
-			);
-		}
-		for ( Map.Entry<String, String> entry : getCachedCollections().entrySet() ) {
-			config.put(
-					HibernatePersistence.COLLECTION_CACHE_PREFIX + "." + entry.getKey(),
-					entry.getValue()
-			);
-		}
-		if ( getEjb3DD().length > 0 ) {
-			ArrayList<String> dds = new ArrayList<String>();
-			for ( String dd : getEjb3DD() ) {
-				dds.add( dd );
-			}
-			config.put( HibernatePersistence.XML_FILE_NAMES, dds );
-		}
-		return config;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/TestCase.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/TestCase.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/TestCase.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/TestCase.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,104 @@
+//$Id$
+package org.hibernate.ejb.test;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+
+import org.hibernate.cfg.Environment;
+import org.hibernate.ejb.HibernatePersistence;
+
+
+/**
+ * @author Emmanuel Bernard
+ */
+public abstract class TestCase extends junit.framework.TestCase {
+	protected EntityManagerFactory factory;
+
+	public TestCase() {
+		super();
+	}
+
+	public TestCase(String name) {
+		super( name );
+	}
+
+	public void setUp() {
+		factory = new HibernatePersistence().createEntityManagerFactory( getConfig() );
+	}
+
+	public void tearDown() {
+		factory.close();
+	}
+
+	public abstract Class[] getAnnotatedClasses();
+
+	public String[] getEjb3DD() {
+		return new String[] {};
+	}
+
+	public Map<Class, String> getCachedClasses() {
+		return new HashMap<Class, String>();
+	}
+
+	public Map<String, String> getCachedCollections() {
+		return new HashMap<String, String>();
+	}
+
+	public static Properties loadProperties() {
+		Properties props = new Properties();
+		InputStream stream = Persistence.class.getResourceAsStream( "/hibernate.properties" );
+		if ( stream != null ) {
+			try {
+				props.load( stream );
+			}
+			catch (Exception e) {
+				throw new RuntimeException( "could not load hibernate.properties" );
+			}
+			finally {
+				try {
+					stream.close();
+				}
+				catch (IOException ioe) {
+				}
+			}
+		}
+		props.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
+		return props;
+	}
+
+	public Map getConfig() {
+		Map config = loadProperties();
+		ArrayList<Class> classes = new ArrayList<Class>();
+
+		for ( Class clazz : getAnnotatedClasses() ) {
+			classes.add( clazz );
+		}
+		config.put( HibernatePersistence.LOADED_CLASSES, classes );
+		for ( Map.Entry<Class, String> entry : getCachedClasses().entrySet() ) {
+			config.put(
+					HibernatePersistence.CLASS_CACHE_PREFIX + "." + entry.getKey().getName(),
+					entry.getValue()
+			);
+		}
+		for ( Map.Entry<String, String> entry : getCachedCollections().entrySet() ) {
+			config.put(
+					HibernatePersistence.COLLECTION_CACHE_PREFIX + "." + entry.getKey(),
+					entry.getValue()
+			);
+		}
+		if ( getEjb3DD().length > 0 ) {
+			ArrayList<String> dds = new ArrayList<String>();
+			for ( String dd : getEjb3DD() ) {
+				dds.add( dd );
+			}
+			config.put( HibernatePersistence.XML_FILE_NAMES, dds );
+		}
+		return config;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ValidatorIntegrationTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ValidatorIntegrationTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ValidatorIntegrationTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,41 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test;
-
-import java.util.Date;
-import javax.persistence.EntityManager;
-
-import org.hibernate.validator.InvalidStateException;
-
-/**
- * @author Emmanuel Bernard
- */
-public class ValidatorIntegrationTest extends TestCase {
-
-	public void testPropertyValidation() throws Exception {
-		EntityManager em = factory.createEntityManager();
-		Cat cat = new Cat();
-		cat.setAge( 33 );
-		cat.setDateOfBirth( new Date() );
-		cat.setName( "iti" );
-		em.getTransaction().begin();
-		try {
-			em.persist( cat );
-			em.flush();
-			fail( "No validation" );
-		}
-		catch (InvalidStateException e) {
-			//success
-		}
-		finally {
-			em.getTransaction().rollback();
-			em.close();
-		}
-
-	}
-
-	public Class[] getAnnotatedClasses() {
-		return new Class[]{
-				Cat.class
-		};
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ValidatorIntegrationTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ValidatorIntegrationTest.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ValidatorIntegrationTest.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ValidatorIntegrationTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,41 @@
+//$Id$
+package org.hibernate.ejb.test;
+
+import java.util.Date;
+import javax.persistence.EntityManager;
+
+import org.hibernate.validator.InvalidStateException;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class ValidatorIntegrationTest extends TestCase {
+
+	public void testPropertyValidation() throws Exception {
+		EntityManager em = factory.createEntityManager();
+		Cat cat = new Cat();
+		cat.setAge( 33 );
+		cat.setDateOfBirth( new Date() );
+		cat.setName( "iti" );
+		em.getTransaction().begin();
+		try {
+			em.persist( cat );
+			em.flush();
+			fail( "No validation" );
+		}
+		catch (InvalidStateException e) {
+			//success
+		}
+		finally {
+			em.getTransaction().rollback();
+			em.close();
+		}
+
+	}
+
+	public Class[] getAnnotatedClasses() {
+		return new Class[]{
+				Cat.class
+		};
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/Wallet.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/Wallet.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/Wallet.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,51 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test;
-
-import java.io.Serializable;
-import java.util.Date;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Wallet implements Serializable {
-	private String serial;
-	private String model;
-	private Date marketEntrance;
-	private String brand;
-
-	@Id
-	public String getSerial() {
-		return serial;
-	}
-
-	public void setSerial(String serial) {
-		this.serial = serial;
-	}
-
-	public String getModel() {
-		return model;
-	}
-
-	public void setModel(String model) {
-		this.model = model;
-	}
-
-	public String getBrand() {
-		return brand;
-	}
-
-	public void setBrand(String brand) {
-		this.brand = brand;
-	}
-
-	public Date getMarketEntrance() {
-		return marketEntrance;
-	}
-
-	public void setMarketEntrance(Date marketEntrance) {
-		this.marketEntrance = marketEntrance;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/Wallet.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/Wallet.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/Wallet.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/Wallet.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,51 @@
+//$Id$
+package org.hibernate.ejb.test;
+
+import java.io.Serializable;
+import java.util.Date;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Wallet implements Serializable {
+	private String serial;
+	private String model;
+	private Date marketEntrance;
+	private String brand;
+
+	@Id
+	public String getSerial() {
+		return serial;
+	}
+
+	public void setSerial(String serial) {
+		this.serial = serial;
+	}
+
+	public String getModel() {
+		return model;
+	}
+
+	public void setModel(String model) {
+		this.model = model;
+	}
+
+	public String getBrand() {
+		return brand;
+	}
+
+	public void setBrand(String brand) {
+		this.brand = brand;
+	}
+
+	public Date getMarketEntrance() {
+		return marketEntrance;
+	}
+
+	public void setMarketEntrance(Date marketEntrance) {
+		this.marketEntrance = marketEntrance;
+	}
+}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/association (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/association)

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/association/AssociationTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/association/AssociationTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/association/AssociationTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,59 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.association;
-
-import javax.persistence.EntityManager;
-
-import org.hibernate.ejb.test.TestCase;
-
-/**
- * @author Emmanuel Bernard
- */
-public class AssociationTest extends TestCase {
-	public void testBidirOneToOne() throws Exception {
-		EntityManager em = factory.createEntityManager();
-		em.getTransaction().begin();
-		String id = "10";
-		Incident i = em.find( Incident.class, id );
-		if ( i == null ) {
-			i = new Incident( id );
-			IncidentStatus ist = new IncidentStatus( id );
-			i.setIncidentStatus( ist );
-			ist.setIncident( i );
-			em.persist( i );
-		}
-		em.getTransaction().commit();
-		em.clear();
-		em.getTransaction().begin();
-		em.remove( em.find(Incident.class, id) );
-		em.getTransaction().commit();
-		em.close();
-	}
-
-	public void testMergeAndBidirOneToOne() throws Exception {
-		EntityManager em = factory.createEntityManager();
-		em.getTransaction().begin();
-		Oven oven = new Oven();
-		Kitchen kitchen = new Kitchen();
-		em.persist( oven );
-		em.persist( kitchen );
-		kitchen.setOven( oven );
-		oven.setKitchen( kitchen );
-		em.flush();
-		em.clear();
-		//oven = em.find(Oven.class, oven.getId() );
-		oven = em.merge( oven );
-		em.flush();
-
-		em.getTransaction().rollback();
-		em.close();
-	}
-
-	public Class[] getAnnotatedClasses() {
-		return new Class[]{
-				Incident.class,
-				IncidentStatus.class,
-				Kitchen.class,
-				Oven.class
-		};
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/association/AssociationTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/association/AssociationTest.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/association/AssociationTest.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/association/AssociationTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,59 @@
+//$Id: $
+package org.hibernate.ejb.test.association;
+
+import javax.persistence.EntityManager;
+
+import org.hibernate.ejb.test.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class AssociationTest extends TestCase {
+	public void testBidirOneToOne() throws Exception {
+		EntityManager em = factory.createEntityManager();
+		em.getTransaction().begin();
+		String id = "10";
+		Incident i = em.find( Incident.class, id );
+		if ( i == null ) {
+			i = new Incident( id );
+			IncidentStatus ist = new IncidentStatus( id );
+			i.setIncidentStatus( ist );
+			ist.setIncident( i );
+			em.persist( i );
+		}
+		em.getTransaction().commit();
+		em.clear();
+		em.getTransaction().begin();
+		em.remove( em.find(Incident.class, id) );
+		em.getTransaction().commit();
+		em.close();
+	}
+
+	public void testMergeAndBidirOneToOne() throws Exception {
+		EntityManager em = factory.createEntityManager();
+		em.getTransaction().begin();
+		Oven oven = new Oven();
+		Kitchen kitchen = new Kitchen();
+		em.persist( oven );
+		em.persist( kitchen );
+		kitchen.setOven( oven );
+		oven.setKitchen( kitchen );
+		em.flush();
+		em.clear();
+		//oven = em.find(Oven.class, oven.getId() );
+		oven = em.merge( oven );
+		em.flush();
+
+		em.getTransaction().rollback();
+		em.close();
+	}
+
+	public Class[] getAnnotatedClasses() {
+		return new Class[]{
+				Incident.class,
+				IncidentStatus.class,
+				Kitchen.class,
+				Oven.class
+		};
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/association/Incident.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/association/Incident.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/association/Incident.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,39 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.association;
-
-import javax.persistence.CascadeType;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.OneToOne;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Incident {
-	@Id
-	String id;
-
-	@OneToOne(cascade = CascadeType.ALL)
-	IncidentStatus incidentStatus;
-
-	public Incident() {
-	}
-
-	public Incident(String id) {
-		this.id = id;
-	}
-
-	public IncidentStatus getIncidentStatus() {
-		return incidentStatus;
-	}
-
-	public void setIncidentStatus(IncidentStatus incidentStatus) {
-		this.incidentStatus = incidentStatus;
-	}
-
-	@Override
-	public String toString() {
-		return "Incident: " + id + " " + incidentStatus;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/association/Incident.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/association/Incident.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/association/Incident.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/association/Incident.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,39 @@
+//$Id: $
+package org.hibernate.ejb.test.association;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.OneToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Incident {
+	@Id
+	String id;
+
+	@OneToOne(cascade = CascadeType.ALL)
+	IncidentStatus incidentStatus;
+
+	public Incident() {
+	}
+
+	public Incident(String id) {
+		this.id = id;
+	}
+
+	public IncidentStatus getIncidentStatus() {
+		return incidentStatus;
+	}
+
+	public void setIncidentStatus(IncidentStatus incidentStatus) {
+		this.incidentStatus = incidentStatus;
+	}
+
+	@Override
+	public String toString() {
+		return "Incident: " + id + " " + incidentStatus;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/association/IncidentStatus.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/association/IncidentStatus.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/association/IncidentStatus.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,38 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.association;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.OneToOne;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class IncidentStatus {
-	@Id
-	String id;
-
-	@OneToOne(mappedBy = "incidentStatus")
-	Incident incident;
-
-	public IncidentStatus() {
-	}
-
-	public IncidentStatus(String id) {
-		this.id = id;
-	}
-
-	public Incident getIncident() {
-		return incident;
-	}
-
-	public void setIncident(Incident incident) {
-		this.incident = incident;
-	}
-
-	@Override
-	public String toString() {
-		return "IncidentStatus " + id;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/association/IncidentStatus.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/association/IncidentStatus.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/association/IncidentStatus.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/association/IncidentStatus.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,38 @@
+//$Id: $
+package org.hibernate.ejb.test.association;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.OneToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class IncidentStatus {
+	@Id
+	String id;
+
+	@OneToOne(mappedBy = "incidentStatus")
+	Incident incident;
+
+	public IncidentStatus() {
+	}
+
+	public IncidentStatus(String id) {
+		this.id = id;
+	}
+
+	public Incident getIncident() {
+		return incident;
+	}
+
+	public void setIncident(Incident incident) {
+		this.incident = incident;
+	}
+
+	@Override
+	public String toString() {
+		return "IncidentStatus " + id;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/association/Kitchen.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/association/Kitchen.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/association/Kitchen.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,35 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.association;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.OneToOne;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Kitchen {
-	@Id @GeneratedValue
-	private Long id;
-
-	@OneToOne(mappedBy = "kitchen")
-	private Oven oven;
-
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-
-	public Oven getOven() {
-		return oven;
-	}
-
-	public void setOven(Oven oven) {
-		this.oven = oven;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/association/Kitchen.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/association/Kitchen.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/association/Kitchen.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/association/Kitchen.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,35 @@
+//$Id: $
+package org.hibernate.ejb.test.association;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.OneToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Kitchen {
+	@Id @GeneratedValue
+	private Long id;
+
+	@OneToOne(mappedBy = "kitchen")
+	private Oven oven;
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public Oven getOven() {
+		return oven;
+	}
+
+	public void setOven(Oven oven) {
+		this.oven = oven;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/association/Oven.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/association/Oven.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/association/Oven.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,38 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.association;
-
-import javax.persistence.Entity;
-import javax.persistence.OneToOne;
-import javax.persistence.JoinColumn;
-import javax.persistence.Id;
-import javax.persistence.GeneratedValue;
-import javax.persistence.FetchType;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Oven {
-	@Id @GeneratedValue
-	private Long id;
-
-	@OneToOne(fetch= FetchType.LAZY)
-	@JoinColumn
-	private Kitchen kitchen;
-
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-
-	public Kitchen getKitchen() {
-		return kitchen;
-	}
-
-	public void setKitchen(Kitchen kitchen) {
-		this.kitchen = kitchen;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/association/Oven.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/association/Oven.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/association/Oven.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/association/Oven.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,38 @@
+//$Id: $
+package org.hibernate.ejb.test.association;
+
+import javax.persistence.Entity;
+import javax.persistence.OneToOne;
+import javax.persistence.JoinColumn;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+import javax.persistence.FetchType;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Oven {
+	@Id @GeneratedValue
+	private Long id;
+
+	@OneToOne(fetch= FetchType.LAZY)
+	@JoinColumn
+	private Kitchen kitchen;
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public Kitchen getKitchen() {
+		return kitchen;
+	}
+
+	public void setKitchen(Kitchen kitchen) {
+		this.kitchen = kitchen;
+	}
+}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks)

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/CallbackAndDirtyTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/CallbackAndDirtyTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/CallbackAndDirtyTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,92 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.callbacks;
-
-import java.util.Iterator;
-import java.util.List;
-import javax.persistence.EntityManager;
-
-import org.hibernate.ejb.test.TestCase;
-
-/**
- * @author Emmanuel Bernard
- */
-public class CallbackAndDirtyTest extends TestCase {
-
-	public void testDirtyButNotDirty() throws Exception {
-		EntityManager manager = factory.createEntityManager();
-		manager.getTransaction().begin();
-		Employee mark = new Employee();
-		mark.setName( "Mark" );
-		mark.setTitle( "internal sales" );
-		mark.setSex( 'M' );
-		mark.setAddress( "buckhead" );
-		mark.setZip( "30305" );
-		mark.setCountry( "USA" );
-
-		Customer joe = new Customer();
-		joe.setName( "Joe" );
-		joe.setAddress( "San Francisco" );
-		joe.setZip( "XXXXX" );
-		joe.setCountry( "USA" );
-		joe.setComments( "Very demanding" );
-		joe.setSalesperson( mark );
-
-		Person yomomma = new Person();
-		yomomma.setName( "mum" );
-		yomomma.setSex( 'F' );
-
-		manager.persist( mark );
-		manager.persist( joe );
-		manager.persist( yomomma );
-		long[] ids = {mark.getId(), joe.getId(), yomomma.getId()};
-		manager.getTransaction().commit();
-
-		manager.getTransaction().begin();
-		assertEquals(
-				manager.createQuery( "select p.address, p.name from Person p order by p.name" ).getResultList().size(),
-				3
-		);
-		assertEquals( manager.createQuery( "select p from Person p where p.class = Customer" ).getResultList().size(), 1 );
-		manager.getTransaction().commit();
-
-		manager.getTransaction().begin();
-		List customers = manager.createQuery( "select c from Customer c left join fetch c.salesperson" ).getResultList();
-		for ( Iterator iter = customers.iterator(); iter.hasNext() ; ) {
-			Customer c = (Customer) iter.next();
-			assertEquals( c.getSalesperson().getName(), "Mark" );
-		}
-		assertEquals( customers.size(), 1 );
-		manager.getTransaction().commit();
-
-		manager.getTransaction().begin();
-		customers = manager.createQuery( "select c from Customer c" ).getResultList();
-		for ( Iterator iter = customers.iterator(); iter.hasNext() ; ) {
-			Customer c = (Customer) iter.next();
-			assertEquals( c.getSalesperson().getName(), "Mark" );
-		}
-		assertEquals( customers.size(), 1 );
-		manager.getTransaction().commit();
-
-		manager.getTransaction().begin();
-		mark = manager.find( Employee.class, new Long( ids[0] ) );
-		joe = (Customer) manager.find( Customer.class, new Long( ids[1] ) );
-		yomomma = manager.find( Person.class, new Long( ids[2] ) );
-
-		mark.setZip( "30306" );
-		assertEquals( 1, manager.createQuery( "select p from Person p where p.zip = '30306'" ).getResultList().size() );
-		manager.remove( mark );
-		manager.remove( joe );
-		manager.remove( yomomma );
-		assertTrue( manager.createQuery( "select p from Person p" ).getResultList().isEmpty() );
-		manager.getTransaction().commit();
-		manager.close();
-	}
-
-	public Class[] getAnnotatedClasses() {
-		return new Class[]{
-				Customer.class,
-				Employee.class,
-				Person.class
-		};
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/CallbackAndDirtyTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/CallbackAndDirtyTest.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/CallbackAndDirtyTest.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/CallbackAndDirtyTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,92 @@
+//$Id$
+package org.hibernate.ejb.test.callbacks;
+
+import java.util.Iterator;
+import java.util.List;
+import javax.persistence.EntityManager;
+
+import org.hibernate.ejb.test.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class CallbackAndDirtyTest extends TestCase {
+
+	public void testDirtyButNotDirty() throws Exception {
+		EntityManager manager = factory.createEntityManager();
+		manager.getTransaction().begin();
+		Employee mark = new Employee();
+		mark.setName( "Mark" );
+		mark.setTitle( "internal sales" );
+		mark.setSex( 'M' );
+		mark.setAddress( "buckhead" );
+		mark.setZip( "30305" );
+		mark.setCountry( "USA" );
+
+		Customer joe = new Customer();
+		joe.setName( "Joe" );
+		joe.setAddress( "San Francisco" );
+		joe.setZip( "XXXXX" );
+		joe.setCountry( "USA" );
+		joe.setComments( "Very demanding" );
+		joe.setSalesperson( mark );
+
+		Person yomomma = new Person();
+		yomomma.setName( "mum" );
+		yomomma.setSex( 'F' );
+
+		manager.persist( mark );
+		manager.persist( joe );
+		manager.persist( yomomma );
+		long[] ids = {mark.getId(), joe.getId(), yomomma.getId()};
+		manager.getTransaction().commit();
+
+		manager.getTransaction().begin();
+		assertEquals(
+				manager.createQuery( "select p.address, p.name from Person p order by p.name" ).getResultList().size(),
+				3
+		);
+		assertEquals( manager.createQuery( "select p from Person p where p.class = Customer" ).getResultList().size(), 1 );
+		manager.getTransaction().commit();
+
+		manager.getTransaction().begin();
+		List customers = manager.createQuery( "select c from Customer c left join fetch c.salesperson" ).getResultList();
+		for ( Iterator iter = customers.iterator(); iter.hasNext() ; ) {
+			Customer c = (Customer) iter.next();
+			assertEquals( c.getSalesperson().getName(), "Mark" );
+		}
+		assertEquals( customers.size(), 1 );
+		manager.getTransaction().commit();
+
+		manager.getTransaction().begin();
+		customers = manager.createQuery( "select c from Customer c" ).getResultList();
+		for ( Iterator iter = customers.iterator(); iter.hasNext() ; ) {
+			Customer c = (Customer) iter.next();
+			assertEquals( c.getSalesperson().getName(), "Mark" );
+		}
+		assertEquals( customers.size(), 1 );
+		manager.getTransaction().commit();
+
+		manager.getTransaction().begin();
+		mark = manager.find( Employee.class, new Long( ids[0] ) );
+		joe = (Customer) manager.find( Customer.class, new Long( ids[1] ) );
+		yomomma = manager.find( Person.class, new Long( ids[2] ) );
+
+		mark.setZip( "30306" );
+		assertEquals( 1, manager.createQuery( "select p from Person p where p.zip = '30306'" ).getResultList().size() );
+		manager.remove( mark );
+		manager.remove( joe );
+		manager.remove( yomomma );
+		assertTrue( manager.createQuery( "select p from Person p" ).getResultList().isEmpty() );
+		manager.getTransaction().commit();
+		manager.close();
+	}
+
+	public Class[] getAnnotatedClasses() {
+		return new Class[]{
+				Customer.class,
+				Employee.class,
+				Person.class
+		};
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/CallbacksTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/CallbacksTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/CallbacksTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,175 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.callbacks;
-
-import java.util.Date;
-import java.util.List;
-import javax.persistence.EntityManager;
-
-import org.hibernate.ejb.test.Cat;
-import org.hibernate.ejb.test.TestCase;
-
-/**
- * @author Emmanuel Bernard
- */
-public class CallbacksTest extends TestCase {
-
-	public void testCallbackMethod() throws Exception {
-		EntityManager em = factory.createEntityManager();
-		Cat c = new Cat();
-		c.setName( "Kitty" );
-		c.setDateOfBirth( new Date( 90, 11, 15 ) );
-		em.getTransaction().begin();
-		em.persist( c );
-		em.getTransaction().commit();
-		em.clear();
-		em.getTransaction().begin();
-		c = em.find( Cat.class, c.getId() );
-		assertFalse( c.getAge() == 0 );
-		c.setName( "Tomcat" ); //update this entity
-		em.getTransaction().commit();
-		em.clear();
-		em.getTransaction().begin();
-		c = em.find( Cat.class, c.getId() );
-		assertEquals( "Tomcat", c.getName() );
-		em.getTransaction().commit();
-		em.close();
-	}
-
-	public void testEntityListener() throws Exception {
-		EntityManager em = factory.createEntityManager();
-		Cat c = new Cat();
-		c.setName( "Kitty" );
-		c.setLength( 12 );
-		c.setDateOfBirth( new Date( 90, 11, 15 ) );
-		em.getTransaction().begin();
-		int previousVersion = c.getManualVersion();
-		em.persist( c );
-		em.getTransaction().commit();
-		em.getTransaction().begin();
-		c = em.find( Cat.class, c.getId() );
-		assertNotNull( c.getLastUpdate() );
-		assertTrue( previousVersion < c.getManualVersion() );
-		assertEquals( 12, c.getLength() );
-		previousVersion = c.getManualVersion();
-		c.setName( "new name" );
-		em.getTransaction().commit();
-		em.getTransaction().begin();
-		c = em.find( Cat.class, c.getId() );
-		assertTrue( previousVersion < c.getManualVersion() );
-		em.getTransaction().commit();
-
-		em.close();
-	}
-
-
-	public void testPostPersist() throws Exception {
-		EntityManager em = factory.createEntityManager();
-		Cat c = new Cat();
-		em.getTransaction().begin();
-		c.setLength( 23 );
-		c.setAge( 2 );
-		c.setName( "Beetle" );
-		c.setDateOfBirth( new Date() );
-		em.persist( c );
-		em.getTransaction().commit();
-		em.close();
-		List ids = c.getIdList();
-		Object id = c.getIdList().get( ids.size() - 1 );
-		assertNotNull( id );
-	}
-
-	//Not a test since the spec did not make the proper change on listeners
-	public void listenerAnnotation() throws Exception {
-		EntityManager em = factory.createEntityManager();
-		Translation tl = new Translation();
-		em.getTransaction().begin();
-		tl.setInto( "France" );
-		em.persist( tl );
-		tl = new Translation();
-		tl.setInto( "Bimboland" );
-		try {
-			em.persist( tl );
-			em.flush();
-			fail( "Annotations annotated by a listener not used" );
-		}
-		catch (IllegalArgumentException e) {
-			//success
-		}
-		finally {
-			em.getTransaction().rollback();
-			em.close();
-		}
-	}
-
-	public void testPrePersistOnCascade() throws Exception {
-		EntityManager em = factory.createEntityManager();
-		em.getTransaction().begin();
-		Television tv = new Television();
-		RemoteControl rc = new RemoteControl();
-		em.persist( tv );
-		em.flush();
-		tv.setControl( rc );
-		tv.init();
-		em.flush();
-		assertNotNull( rc.getCreationDate() );
-		em.getTransaction().rollback();
-	}
-
-	public void testCallBackListenersHierarchy() throws Exception {
-		EntityManager em = factory.createEntityManager();
-		em.getTransaction().begin();
-		Television tv = new Television();
-		em.persist( tv );
-		tv.setName( "Myaio" );
-		tv.init();
-		em.flush();
-		assertEquals( 1, tv.counter );
-		em.getTransaction().rollback();
-		em.close();
-		assertEquals( 5, tv.communication );
-		assertTrue( tv.isLast );
-	}
-
-	public void testException() throws Exception {
-		EntityManager em = factory.createEntityManager();
-		em.getTransaction().begin();
-		Rythm r = new Rythm();
-		try {
-			em.persist( r );
-			em.flush();
-			fail("should have raised an ArythmeticException:");
-		}
-		catch (ArithmeticException e) {
-			//success
-		}
-		catch( Exception e ) {
-			fail("should have raised an ArythmeticException:" + e.getClass() );
-		}
-
-		em.getTransaction().rollback();
-		em.close();
-
-	}
-
-	public void testIdNullSetByPrePersist() throws Exception {
-		Plant plant = new Plant();
-		plant.setName( "Origuna plantula gigantic" );
-		EntityManager em = factory.createEntityManager();
-		em.getTransaction().begin();
-		em.persist( plant );
-		em.flush();
-		em.getTransaction().rollback();
-		em.close();
-	}
-
-	public Class[] getAnnotatedClasses() {
-		return new Class[]{
-				Cat.class,
-				Translation.class,
-				Television.class,
-				RemoteControl.class,
-				Rythm.class,
-				Plant.class
-		};
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/CallbacksTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/CallbacksTest.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/CallbacksTest.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/CallbacksTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,175 @@
+//$Id$
+package org.hibernate.ejb.test.callbacks;
+
+import java.util.Date;
+import java.util.List;
+import javax.persistence.EntityManager;
+
+import org.hibernate.ejb.test.Cat;
+import org.hibernate.ejb.test.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class CallbacksTest extends TestCase {
+
+	public void testCallbackMethod() throws Exception {
+		EntityManager em = factory.createEntityManager();
+		Cat c = new Cat();
+		c.setName( "Kitty" );
+		c.setDateOfBirth( new Date( 90, 11, 15 ) );
+		em.getTransaction().begin();
+		em.persist( c );
+		em.getTransaction().commit();
+		em.clear();
+		em.getTransaction().begin();
+		c = em.find( Cat.class, c.getId() );
+		assertFalse( c.getAge() == 0 );
+		c.setName( "Tomcat" ); //update this entity
+		em.getTransaction().commit();
+		em.clear();
+		em.getTransaction().begin();
+		c = em.find( Cat.class, c.getId() );
+		assertEquals( "Tomcat", c.getName() );
+		em.getTransaction().commit();
+		em.close();
+	}
+
+	public void testEntityListener() throws Exception {
+		EntityManager em = factory.createEntityManager();
+		Cat c = new Cat();
+		c.setName( "Kitty" );
+		c.setLength( 12 );
+		c.setDateOfBirth( new Date( 90, 11, 15 ) );
+		em.getTransaction().begin();
+		int previousVersion = c.getManualVersion();
+		em.persist( c );
+		em.getTransaction().commit();
+		em.getTransaction().begin();
+		c = em.find( Cat.class, c.getId() );
+		assertNotNull( c.getLastUpdate() );
+		assertTrue( previousVersion < c.getManualVersion() );
+		assertEquals( 12, c.getLength() );
+		previousVersion = c.getManualVersion();
+		c.setName( "new name" );
+		em.getTransaction().commit();
+		em.getTransaction().begin();
+		c = em.find( Cat.class, c.getId() );
+		assertTrue( previousVersion < c.getManualVersion() );
+		em.getTransaction().commit();
+
+		em.close();
+	}
+
+
+	public void testPostPersist() throws Exception {
+		EntityManager em = factory.createEntityManager();
+		Cat c = new Cat();
+		em.getTransaction().begin();
+		c.setLength( 23 );
+		c.setAge( 2 );
+		c.setName( "Beetle" );
+		c.setDateOfBirth( new Date() );
+		em.persist( c );
+		em.getTransaction().commit();
+		em.close();
+		List ids = c.getIdList();
+		Object id = c.getIdList().get( ids.size() - 1 );
+		assertNotNull( id );
+	}
+
+	//Not a test since the spec did not make the proper change on listeners
+	public void listenerAnnotation() throws Exception {
+		EntityManager em = factory.createEntityManager();
+		Translation tl = new Translation();
+		em.getTransaction().begin();
+		tl.setInto( "France" );
+		em.persist( tl );
+		tl = new Translation();
+		tl.setInto( "Bimboland" );
+		try {
+			em.persist( tl );
+			em.flush();
+			fail( "Annotations annotated by a listener not used" );
+		}
+		catch (IllegalArgumentException e) {
+			//success
+		}
+		finally {
+			em.getTransaction().rollback();
+			em.close();
+		}
+	}
+
+	public void testPrePersistOnCascade() throws Exception {
+		EntityManager em = factory.createEntityManager();
+		em.getTransaction().begin();
+		Television tv = new Television();
+		RemoteControl rc = new RemoteControl();
+		em.persist( tv );
+		em.flush();
+		tv.setControl( rc );
+		tv.init();
+		em.flush();
+		assertNotNull( rc.getCreationDate() );
+		em.getTransaction().rollback();
+	}
+
+	public void testCallBackListenersHierarchy() throws Exception {
+		EntityManager em = factory.createEntityManager();
+		em.getTransaction().begin();
+		Television tv = new Television();
+		em.persist( tv );
+		tv.setName( "Myaio" );
+		tv.init();
+		em.flush();
+		assertEquals( 1, tv.counter );
+		em.getTransaction().rollback();
+		em.close();
+		assertEquals( 5, tv.communication );
+		assertTrue( tv.isLast );
+	}
+
+	public void testException() throws Exception {
+		EntityManager em = factory.createEntityManager();
+		em.getTransaction().begin();
+		Rythm r = new Rythm();
+		try {
+			em.persist( r );
+			em.flush();
+			fail("should have raised an ArythmeticException:");
+		}
+		catch (ArithmeticException e) {
+			//success
+		}
+		catch( Exception e ) {
+			fail("should have raised an ArythmeticException:" + e.getClass() );
+		}
+
+		em.getTransaction().rollback();
+		em.close();
+
+	}
+
+	public void testIdNullSetByPrePersist() throws Exception {
+		Plant plant = new Plant();
+		plant.setName( "Origuna plantula gigantic" );
+		EntityManager em = factory.createEntityManager();
+		em.getTransaction().begin();
+		em.persist( plant );
+		em.flush();
+		em.getTransaction().rollback();
+		em.close();
+	}
+
+	public Class[] getAnnotatedClasses() {
+		return new Class[]{
+				Cat.class,
+				Translation.class,
+				Television.class,
+				RemoteControl.class,
+				Rythm.class,
+				Plant.class
+		};
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/CommunicationSystem.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/CommunicationSystem.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/CommunicationSystem.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,22 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.callbacks;
-
-import javax.persistence.EntityListeners;
-import javax.persistence.MappedSuperclass;
-
-/**
- * @author Emmanuel Bernard
- */
- at MappedSuperclass
- at EntityListeners(IncreaseListener.class)
-public class CommunicationSystem {
-	public int communication = 0;
-	public boolean isFirst = true;
-	public boolean isLast;
-
-	public void init() {
-		communication = 0;
-		isFirst = true;
-		isLast = false;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/CommunicationSystem.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/CommunicationSystem.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/CommunicationSystem.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/CommunicationSystem.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,22 @@
+//$Id$
+package org.hibernate.ejb.test.callbacks;
+
+import javax.persistence.EntityListeners;
+import javax.persistence.MappedSuperclass;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at MappedSuperclass
+ at EntityListeners(IncreaseListener.class)
+public class CommunicationSystem {
+	public int communication = 0;
+	public boolean isFirst = true;
+	public boolean isLast;
+
+	public void init() {
+		communication = 0;
+		isFirst = true;
+		isLast = false;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/CountryChecker.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/CountryChecker.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/CountryChecker.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,17 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.callbacks;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-import javax.persistence.EntityListeners;
-
-/**
- * @author Emmanuel Bernard
- */
- at EntityListeners(CountryNameCheckerListener.class)
- at Target(ElementType.TYPE)
- at Retention(RetentionPolicy.RUNTIME)
-public @interface CountryChecker {
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/CountryChecker.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/CountryChecker.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/CountryChecker.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/CountryChecker.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,17 @@
+//$Id$
+package org.hibernate.ejb.test.callbacks;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import javax.persistence.EntityListeners;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at EntityListeners(CountryNameCheckerListener.class)
+ at Target(ElementType.TYPE)
+ at Retention(RetentionPolicy.RUNTIME)
+public @interface CountryChecker {
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/CountryNameCheckerListener.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/CountryNameCheckerListener.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/CountryNameCheckerListener.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,30 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.callbacks;
-
-import java.util.ArrayList;
-import java.util.List;
-import javax.persistence.PrePersist;
-import javax.persistence.PreUpdate;
-
-/**
- * @author Emmanuel Bernard
- */
-public class CountryNameCheckerListener {
-	private List<String> countries = new ArrayList<String>();
-
-	{
-		countries.add( "France" );
-		countries.add( "Netherland" );
-	}
-
-	@PrePersist
-	@PreUpdate
-	public void testCountryName(Object object) {
-		if ( object instanceof Translation ) {
-			Translation tr = (Translation) object;
-			if ( ! countries.contains( tr.getInto() ) ) {
-				throw new IllegalArgumentException( "Not a country name: " + tr.getInto() );
-			}
-		}
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/CountryNameCheckerListener.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/CountryNameCheckerListener.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/CountryNameCheckerListener.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/CountryNameCheckerListener.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,30 @@
+//$Id$
+package org.hibernate.ejb.test.callbacks;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.persistence.PrePersist;
+import javax.persistence.PreUpdate;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class CountryNameCheckerListener {
+	private List<String> countries = new ArrayList<String>();
+
+	{
+		countries.add( "France" );
+		countries.add( "Netherland" );
+	}
+
+	@PrePersist
+	@PreUpdate
+	public void testCountryName(Object object) {
+		if ( object instanceof Translation ) {
+			Translation tr = (Translation) object;
+			if ( ! countries.contains( tr.getInto() ) ) {
+				throw new IllegalArgumentException( "Not a country name: " + tr.getInto() );
+			}
+		}
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Customer.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Customer.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Customer.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,38 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.callbacks;
-
-import javax.persistence.Entity;
-import javax.persistence.Inheritance;
-import javax.persistence.InheritanceType;
-import javax.persistence.JoinColumn;
-import javax.persistence.OneToOne;
-import javax.persistence.Table;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Table(name = "CUSTOMER_TABLE")
- at Inheritance(strategy = InheritanceType.JOINED)
-public class Customer extends Person {
-	private Employee salesperson;
-	private String comments;
-
-	@OneToOne
-	@JoinColumn(name = "salesperson")
-	public Employee getSalesperson() {
-		return salesperson;
-	}
-
-	public void setSalesperson(Employee salesperson) {
-		this.salesperson = salesperson;
-	}
-
-	public String getComments() {
-		return comments;
-	}
-
-	public void setComments(String comments) {
-		this.comments = comments;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Customer.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Customer.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Customer.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Customer.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,38 @@
+//$Id$
+package org.hibernate.ejb.test.callbacks;
+
+import javax.persistence.Entity;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+import javax.persistence.JoinColumn;
+import javax.persistence.OneToOne;
+import javax.persistence.Table;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Table(name = "CUSTOMER_TABLE")
+ at Inheritance(strategy = InheritanceType.JOINED)
+public class Customer extends Person {
+	private Employee salesperson;
+	private String comments;
+
+	@OneToOne
+	@JoinColumn(name = "salesperson")
+	public Employee getSalesperson() {
+		return salesperson;
+	}
+
+	public void setSalesperson(Employee salesperson) {
+		this.salesperson = salesperson;
+	}
+
+	public String getComments() {
+		return comments;
+	}
+
+	public void setComments(String comments) {
+		this.comments = comments;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Employee.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Employee.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Employee.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,64 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.callbacks;
-
-import java.math.BigDecimal;
-import javax.persistence.Entity;
-import javax.persistence.Inheritance;
-import javax.persistence.InheritanceType;
-import javax.persistence.JoinColumn;
-import javax.persistence.OneToOne;
-import javax.persistence.Table;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Table(name = "EMPLOYEE_TABLE")
- at Inheritance(strategy = InheritanceType.JOINED)
-public class Employee extends Person {
-	private String title;
-	private BigDecimal salary;
-	private Employee manager;
-
-	/**
-	 * @return Returns the title.
-	 */
-	public String getTitle() {
-		return title;
-	}
-
-	/**
-	 * @param title The title to set.
-	 */
-	public void setTitle(String title) {
-		this.title = title;
-	}
-
-	@OneToOne
-	@JoinColumn(name = "manager")
-	public Employee getManager() {
-		return manager;
-	}
-
-	/**
-	 * @param manager The manager to set.
-	 */
-	public void setManager(Employee manager) {
-		this.manager = manager;
-	}
-
-	/**
-	 * @return Returns the salary.
-	 */
-	public BigDecimal getSalary() {
-		return salary;
-	}
-
-	/**
-	 * @param salary The salary to set.
-	 */
-	public void setSalary(BigDecimal salary) {
-		this.salary = salary;
-	}
-}
-

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Employee.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Employee.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Employee.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Employee.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,64 @@
+//$Id$
+package org.hibernate.ejb.test.callbacks;
+
+import java.math.BigDecimal;
+import javax.persistence.Entity;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+import javax.persistence.JoinColumn;
+import javax.persistence.OneToOne;
+import javax.persistence.Table;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Table(name = "EMPLOYEE_TABLE")
+ at Inheritance(strategy = InheritanceType.JOINED)
+public class Employee extends Person {
+	private String title;
+	private BigDecimal salary;
+	private Employee manager;
+
+	/**
+	 * @return Returns the title.
+	 */
+	public String getTitle() {
+		return title;
+	}
+
+	/**
+	 * @param title The title to set.
+	 */
+	public void setTitle(String title) {
+		this.title = title;
+	}
+
+	@OneToOne
+	@JoinColumn(name = "manager")
+	public Employee getManager() {
+		return manager;
+	}
+
+	/**
+	 * @param manager The manager to set.
+	 */
+	public void setManager(Employee manager) {
+		this.manager = manager;
+	}
+
+	/**
+	 * @return Returns the salary.
+	 */
+	public BigDecimal getSalary() {
+		return salary;
+	}
+
+	/**
+	 * @param salary The salary to set.
+	 */
+	public void setSalary(BigDecimal salary) {
+		this.salary = salary;
+	}
+}
+

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/ExceptionListener.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/ExceptionListener.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/ExceptionListener.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,14 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.callbacks;
-
-import javax.persistence.PrePersist;
-
-/**
- * @author Emmanuel Bernard
- */
-public class ExceptionListener {
-	@PrePersist
-	public void raiseException(Object e) {
-		throw new ArithmeticException( "1/0 impossible" );
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/ExceptionListener.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/ExceptionListener.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/ExceptionListener.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/ExceptionListener.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,14 @@
+//$Id: $
+package org.hibernate.ejb.test.callbacks;
+
+import javax.persistence.PrePersist;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class ExceptionListener {
+	@PrePersist
+	public void raiseException(Object e) {
+		throw new ArithmeticException( "1/0 impossible" );
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/FirstOneListener.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/FirstOneListener.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/FirstOneListener.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,17 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.callbacks;
-
-import javax.persistence.PreUpdate;
-
-/**
- * @author Emmanuel Bernard
- */
-public class FirstOneListener {
-	@PreUpdate
-	public void firstOne(CommunicationSystem object) {
-		if ( !object.isFirst ) throw new IllegalStateException();
-		object.isFirst = true;
-		object.isLast = false;
-		object.communication++;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/FirstOneListener.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/FirstOneListener.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/FirstOneListener.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/FirstOneListener.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,17 @@
+//$Id$
+package org.hibernate.ejb.test.callbacks;
+
+import javax.persistence.PreUpdate;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class FirstOneListener {
+	@PreUpdate
+	public void firstOne(CommunicationSystem object) {
+		if ( !object.isFirst ) throw new IllegalStateException();
+		object.isFirst = true;
+		object.isLast = false;
+		object.communication++;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/IncreaseListener.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/IncreaseListener.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/IncreaseListener.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,16 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.callbacks;
-
-import javax.persistence.PreUpdate;
-
-/**
- * @author Emmanuel Bernard
- */
-public class IncreaseListener {
-	@PreUpdate
-	public void increate(CommunicationSystem object) {
-		object.communication++;
-		object.isFirst = false;
-		object.isLast = false;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/IncreaseListener.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/IncreaseListener.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/IncreaseListener.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/IncreaseListener.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,16 @@
+//$Id$
+package org.hibernate.ejb.test.callbacks;
+
+import javax.persistence.PreUpdate;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class IncreaseListener {
+	@PreUpdate
+	public void increate(CommunicationSystem object) {
+		object.communication++;
+		object.isFirst = false;
+		object.isLast = false;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Person.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Person.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Person.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,74 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.callbacks;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.Inheritance;
-import javax.persistence.InheritanceType;
-import javax.persistence.Table;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Table(name = "PERSON_TABLE")
- at Inheritance(strategy = InheritanceType.JOINED)
-public class Person {
-	private long id;
-	private String name;
-	private String address;
-	private String zip;
-	private String country;
-	private char sex;
-
-	@Id
-	@GeneratedValue
-	public long getId() {
-		return id;
-	}
-
-	public void setId(long id) {
-		this.id = id;
-	}
-
-	public char getSex() {
-		return sex;
-	}
-
-	public void setSex(char sex) {
-		this.sex = sex;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String identity) {
-		this.name = identity;
-	}
-
-	public String getCountry() {
-		return country;
-	}
-
-	public void setCountry(String country) {
-		this.country = country;
-	}
-
-	public String getZip() {
-		return zip;
-	}
-
-	public void setZip(String zip) {
-		this.zip = zip;
-	}
-
-	public String getAddress() {
-		return address;
-	}
-
-	public void setAddress(String address) {
-		this.address = address;
-	}
-}
\ No newline at end of file

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Person.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Person.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Person.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Person.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,74 @@
+//$Id$
+package org.hibernate.ejb.test.callbacks;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+import javax.persistence.Table;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Table(name = "PERSON_TABLE")
+ at Inheritance(strategy = InheritanceType.JOINED)
+public class Person {
+	private long id;
+	private String name;
+	private String address;
+	private String zip;
+	private String country;
+	private char sex;
+
+	@Id
+	@GeneratedValue
+	public long getId() {
+		return id;
+	}
+
+	public void setId(long id) {
+		this.id = id;
+	}
+
+	public char getSex() {
+		return sex;
+	}
+
+	public void setSex(char sex) {
+		this.sex = sex;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String identity) {
+		this.name = identity;
+	}
+
+	public String getCountry() {
+		return country;
+	}
+
+	public void setCountry(String country) {
+		this.country = country;
+	}
+
+	public String getZip() {
+		return zip;
+	}
+
+	public void setZip(String zip) {
+		this.zip = zip;
+	}
+
+	public String getAddress() {
+		return address;
+	}
+
+	public void setAddress(String address) {
+		this.address = address;
+	}
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Plant.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Plant.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Plant.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,43 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.callbacks;
-
-import javax.persistence.Id;
-import javax.persistence.Entity;
-import javax.persistence.PrePersist;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Plant {
-	@Id
-	private String id;
-	private String name;
-
-	public String getId() {
-		return id;
-	}
-
-	public void setId(String id) {
-		this.id = id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	@PrePersist
-	private void defineId() {
-		//some (stupid) id generation
-		if ( name.length() > 5 ) {
-			setId( name.substring( 0, 5 ) );
-		}
-		else {
-			setId( name );
-		}
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Plant.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Plant.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Plant.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Plant.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,43 @@
+//$Id: $
+package org.hibernate.ejb.test.callbacks;
+
+import javax.persistence.Id;
+import javax.persistence.Entity;
+import javax.persistence.PrePersist;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Plant {
+	@Id
+	private String id;
+	private String name;
+
+	public String getId() {
+		return id;
+	}
+
+	public void setId(String id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	@PrePersist
+	private void defineId() {
+		//some (stupid) id generation
+		if ( name.length() > 5 ) {
+			setId( name.substring( 0, 5 ) );
+		}
+		else {
+			setId( name );
+		}
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/RemoteControl.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/RemoteControl.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/RemoteControl.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,45 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.callbacks;
-
-import java.util.Date;
-import javax.persistence.Basic;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.PrePersist;
-import javax.persistence.Temporal;
-import javax.persistence.TemporalType;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class RemoteControl {
-	private Integer id;
-	private Date creationDate;
-
-	@Basic
-	@Temporal(TemporalType.TIMESTAMP)
-	public Date getCreationDate() {
-		return creationDate;
-	}
-
-	public void setCreationDate(Date creationDate) {
-		this.creationDate = creationDate;
-	}
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	@PrePersist
-	private void init() {
-		creationDate = new Date();
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/RemoteControl.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/RemoteControl.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/RemoteControl.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/RemoteControl.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,45 @@
+//$Id$
+package org.hibernate.ejb.test.callbacks;
+
+import java.util.Date;
+import javax.persistence.Basic;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.PrePersist;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class RemoteControl {
+	private Integer id;
+	private Date creationDate;
+
+	@Basic
+	@Temporal(TemporalType.TIMESTAMP)
+	public Date getCreationDate() {
+		return creationDate;
+	}
+
+	public void setCreationDate(Date creationDate) {
+		this.creationDate = creationDate;
+	}
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	@PrePersist
+	private void init() {
+		creationDate = new Date();
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Rythm.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Rythm.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Rythm.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,24 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.callbacks;
-
-import javax.persistence.Id;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Entity;
-import javax.persistence.EntityListeners;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at EntityListeners(ExceptionListener.class)
-public class Rythm {
-	@Id @GeneratedValue private Integer id;
-
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Rythm.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Rythm.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Rythm.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Rythm.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,24 @@
+//$Id: $
+package org.hibernate.ejb.test.callbacks;
+
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Entity;
+import javax.persistence.EntityListeners;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at EntityListeners(ExceptionListener.class)
+public class Rythm {
+	@Id @GeneratedValue private Integer id;
+
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Television.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Television.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Television.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,64 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.callbacks;
-
-import javax.persistence.CascadeType;
-import javax.persistence.Entity;
-import javax.persistence.EntityListeners;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.OneToOne;
-import javax.persistence.PreUpdate;
-import javax.persistence.PrePersist;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at EntityListeners({IncreaseListener.class})
-public class Television extends VideoSystem {
-	private Integer id;
-	private RemoteControl control;
-	private String name;
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	@OneToOne(cascade = CascadeType.ALL)
-	public RemoteControl getControl() {
-		return control;
-	}
-
-	public void setControl(RemoteControl control) {
-		this.control = control;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	@PreUpdate
-	public void isLast() {
-		if ( isLast ) throw new IllegalStateException();
-		isFirst = false;
-		isLast = true;
-		communication++;
-	}
-
-	@PrePersist
-	public void prepareEntity() {
-		//override a super method annotated with the same
-		// event for it not to be called
-		counter++;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Television.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Television.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Television.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Television.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,64 @@
+//$Id$
+package org.hibernate.ejb.test.callbacks;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.EntityListeners;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.OneToOne;
+import javax.persistence.PreUpdate;
+import javax.persistence.PrePersist;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at EntityListeners({IncreaseListener.class})
+public class Television extends VideoSystem {
+	private Integer id;
+	private RemoteControl control;
+	private String name;
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	@OneToOne(cascade = CascadeType.ALL)
+	public RemoteControl getControl() {
+		return control;
+	}
+
+	public void setControl(RemoteControl control) {
+		this.control = control;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	@PreUpdate
+	public void isLast() {
+		if ( isLast ) throw new IllegalStateException();
+		isFirst = false;
+		isLast = true;
+		communication++;
+	}
+
+	@PrePersist
+	public void prepareEntity() {
+		//override a super method annotated with the same
+		// event for it not to be called
+		counter++;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Translation.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Translation.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Translation.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,38 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.callbacks;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.Table;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Table(name = "Translatn")
- at CountryChecker
-public class Translation {
-	private Integer id;
-	private String into;
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	@Column(name = "country_into")
-	public String getInto() {
-		return into;
-	}
-
-	public void setInto(String into) {
-		this.into = into;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Translation.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Translation.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Translation.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/Translation.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,38 @@
+//$Id$
+package org.hibernate.ejb.test.callbacks;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Table(name = "Translatn")
+ at CountryChecker
+public class Translation {
+	private Integer id;
+	private String into;
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	@Column(name = "country_into")
+	public String getInto() {
+		return into;
+	}
+
+	public void setInto(String into) {
+		this.into = into;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/VideoSystem.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/VideoSystem.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/VideoSystem.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,29 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.callbacks;
-
-import javax.persistence.EntityListeners;
-import javax.persistence.ExcludeSuperclassListeners;
-import javax.persistence.MappedSuperclass;
-import javax.persistence.PreUpdate;
-import javax.persistence.PrePersist;
-
-/**
- * @author Emmanuel Bernard
- */
- at ExcludeSuperclassListeners
- at EntityListeners({FirstOneListener.class, IncreaseListener.class})
- at MappedSuperclass
-public class VideoSystem extends CommunicationSystem {
-	public transient int counter = 0;
-	@PreUpdate
-	public void increase() {
-		isFirst = false;
-		isLast = false;
-		communication++;
-	}
-
-	@PrePersist
-	public void prepareEntity() {
-		counter++;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/VideoSystem.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/VideoSystem.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/VideoSystem.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/callbacks/VideoSystem.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,29 @@
+//$Id$
+package org.hibernate.ejb.test.callbacks;
+
+import javax.persistence.EntityListeners;
+import javax.persistence.ExcludeSuperclassListeners;
+import javax.persistence.MappedSuperclass;
+import javax.persistence.PreUpdate;
+import javax.persistence.PrePersist;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at ExcludeSuperclassListeners
+ at EntityListeners({FirstOneListener.class, IncreaseListener.class})
+ at MappedSuperclass
+public class VideoSystem extends CommunicationSystem {
+	public transient int counter = 0;
+	@PreUpdate
+	public void increase() {
+		isFirst = false;
+		isLast = false;
+		communication++;
+	}
+
+	@PrePersist
+	public void prepareEntity() {
+		counter++;
+	}
+}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade)

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Author.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Author.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Author.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,19 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.cascade;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.GeneratedValue;
-import javax.persistence.SequenceGenerator;
-import javax.persistence.GenerationType;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Author {
-	@Id 	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "ENTITY2_SEQ")
-	@SequenceGenerator(name = "ENTITY2_SEQ")
- private Long id;
-
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Author.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Author.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Author.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Author.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,19 @@
+//$Id: $
+package org.hibernate.ejb.test.cascade;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+import javax.persistence.SequenceGenerator;
+import javax.persistence.GenerationType;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Author {
+	@Id 	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "ENTITY2_SEQ")
+	@SequenceGenerator(name = "ENTITY2_SEQ")
+ private Long id;
+
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/CascadeTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/CascadeTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/CascadeTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,96 +0,0 @@
-//$Id: FetchTest.java 9796 2006-04-26 06:46:52Z epbernard $
-package org.hibernate.ejb.test.cascade;
-
-import javax.persistence.EntityManager;
-import javax.persistence.EntityTransaction;
-
-import org.hibernate.ejb.test.TestCase;
-
-
-/**
- * @author Max Rydahl Andersen
- */
-public class CascadeTest extends TestCase {
-
-	public void testCascade() throws Exception {
-		
-		EntityManager em = factory.createEntityManager();
-		em.getTransaction().begin();
-		
-		Teacher teacher = null;
-		
-		teacher = new Teacher();
-
-		Student student = new Student();
-
-		teacher.setFavoriteStudent(student);
-		student.setFavoriteTeacher(teacher);
-
-		teacher.getStudents().add(student);
-		student.setPrimaryTeacher(teacher);
-
-		em.persist( teacher );
-		em.getTransaction().commit();
-	
-		System.out.println("***************************");
-		em = factory.createEntityManager();
-		em.getTransaction().begin();
-		
-		Teacher foundTeacher = (Teacher) em.createQuery( "select t from Teacher as t" ).getSingleResult();
-		
-		System.out.println(foundTeacher);
-		System.out.println(foundTeacher.getFavoriteStudent());
-		
-		for (Student fstudent : foundTeacher.getStudents()) {
-			System.out.println(fstudent);			
-			System.out.println(fstudent.getFavoriteTeacher());
-			System.out.println(fstudent.getPrimaryTeacher());
-		}
-		
-		em.getTransaction().commit(); // here *alot* of flushes occur on an object graph that has *Zero* changes.
-		em.close();
-		
-		
-	}
-
-	public void testNoCascadeAndMerge() throws Exception {
-		Song e1 = new Song();
-		Author e2 = new Author();
-
-		e1.setAuthor(e2);
-
-		EntityManager em = factory.createEntityManager();
-		EntityTransaction tx = em.getTransaction();
-		tx.begin();
-		em.persist(e2);
-		em.persist(e1);
-		tx.commit();
-		em.close();
-
-		em = factory.createEntityManager();
-
-		e1 = em.find(Song.class, e1.getId());
-		e2 = null;
-
-
-		tx = em.getTransaction();
-		tx.begin();
-		em.merge(e1);
-		//em.refresh(e1);
-		tx.commit();
-		em.close();
-
-	}
-
-
-	public Class[] getAnnotatedClasses() {
-		return new Class[]{
-				Teacher.class,
-				Student.class,
-				Song.class,
-				Author.class
-		};
-	}
-	
-	
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/CascadeTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/CascadeTest.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/CascadeTest.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/CascadeTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,96 @@
+//$Id: FetchTest.java 9796 2006-04-26 06:46:52Z epbernard $
+package org.hibernate.ejb.test.cascade;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityTransaction;
+
+import org.hibernate.ejb.test.TestCase;
+
+
+/**
+ * @author Max Rydahl Andersen
+ */
+public class CascadeTest extends TestCase {
+
+	public void testCascade() throws Exception {
+		
+		EntityManager em = factory.createEntityManager();
+		em.getTransaction().begin();
+		
+		Teacher teacher = null;
+		
+		teacher = new Teacher();
+
+		Student student = new Student();
+
+		teacher.setFavoriteStudent(student);
+		student.setFavoriteTeacher(teacher);
+
+		teacher.getStudents().add(student);
+		student.setPrimaryTeacher(teacher);
+
+		em.persist( teacher );
+		em.getTransaction().commit();
+	
+		System.out.println("***************************");
+		em = factory.createEntityManager();
+		em.getTransaction().begin();
+		
+		Teacher foundTeacher = (Teacher) em.createQuery( "select t from Teacher as t" ).getSingleResult();
+		
+		System.out.println(foundTeacher);
+		System.out.println(foundTeacher.getFavoriteStudent());
+		
+		for (Student fstudent : foundTeacher.getStudents()) {
+			System.out.println(fstudent);			
+			System.out.println(fstudent.getFavoriteTeacher());
+			System.out.println(fstudent.getPrimaryTeacher());
+		}
+		
+		em.getTransaction().commit(); // here *alot* of flushes occur on an object graph that has *Zero* changes.
+		em.close();
+		
+		
+	}
+
+	public void testNoCascadeAndMerge() throws Exception {
+		Song e1 = new Song();
+		Author e2 = new Author();
+
+		e1.setAuthor(e2);
+
+		EntityManager em = factory.createEntityManager();
+		EntityTransaction tx = em.getTransaction();
+		tx.begin();
+		em.persist(e2);
+		em.persist(e1);
+		tx.commit();
+		em.close();
+
+		em = factory.createEntityManager();
+
+		e1 = em.find(Song.class, e1.getId());
+		e2 = null;
+
+
+		tx = em.getTransaction();
+		tx.begin();
+		em.merge(e1);
+		//em.refresh(e1);
+		tx.commit();
+		em.close();
+
+	}
+
+
+	public Class[] getAnnotatedClasses() {
+		return new Class[]{
+				Teacher.class,
+				Student.class,
+				Song.class,
+				Author.class
+		};
+	}
+	
+	
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Conference.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Conference.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Conference.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,79 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.cascade;
-
-import java.io.Serializable;
-import java.util.Date;
-import javax.persistence.CascadeType;
-import javax.persistence.Column;
-import javax.persistence.DiscriminatorColumn;
-import javax.persistence.DiscriminatorType;
-import javax.persistence.DiscriminatorValue;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.Inheritance;
-import javax.persistence.InheritanceType;
-import javax.persistence.OneToOne;
-import javax.persistence.Table;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Table(name = "portal_pk_conference")
- at Inheritance(strategy = InheritanceType.SINGLE_TABLE)
- at DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.CHAR)
- at DiscriminatorValue("X")
- at org.hibernate.annotations.Entity(dynamicInsert = true, dynamicUpdate = true)
-public class Conference implements Serializable {
-	private Long id;
-	private Date date;
-	private ExtractionDocumentInfo extractionDocument;
-
-	@OneToOne(mappedBy = "conference", cascade = CascadeType.ALL)
-	public ExtractionDocumentInfo getExtractionDocument() {
-		return extractionDocument;
-	}
-
-	public void setExtractionDocument(ExtractionDocumentInfo extractionDocument) {
-		this.extractionDocument = extractionDocument;
-	}
-
-
-	public Conference() {
-		date = new Date();
-	}
-
-	@Id
-	@GeneratedValue
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-
-	@Column(name = "c_date", nullable = false)
-	public Date getDate() {
-		return date;
-	}
-
-	public void setDate(Date date) {
-		this.date = date;
-	}
-
-	public boolean equals(Object o) {
-		if ( this == o ) return true;
-		if ( o == null || getClass() != o.getClass() ) return false;
-
-		final Conference that = (Conference) o;
-
-		return !( date != null ? !date.equals( that.date ) : that.date != null );
-
-	}
-
-	public int hashCode() {
-		return ( date != null ? date.hashCode() : 0 );
-	}
-}
\ No newline at end of file

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Conference.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Conference.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Conference.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Conference.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,79 @@
+//$Id$
+package org.hibernate.ejb.test.cascade;
+
+import java.io.Serializable;
+import java.util.Date;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.DiscriminatorColumn;
+import javax.persistence.DiscriminatorType;
+import javax.persistence.DiscriminatorValue;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+import javax.persistence.OneToOne;
+import javax.persistence.Table;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Table(name = "portal_pk_conference")
+ at Inheritance(strategy = InheritanceType.SINGLE_TABLE)
+ at DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.CHAR)
+ at DiscriminatorValue("X")
+ at org.hibernate.annotations.Entity(dynamicInsert = true, dynamicUpdate = true)
+public class Conference implements Serializable {
+	private Long id;
+	private Date date;
+	private ExtractionDocumentInfo extractionDocument;
+
+	@OneToOne(mappedBy = "conference", cascade = CascadeType.ALL)
+	public ExtractionDocumentInfo getExtractionDocument() {
+		return extractionDocument;
+	}
+
+	public void setExtractionDocument(ExtractionDocumentInfo extractionDocument) {
+		this.extractionDocument = extractionDocument;
+	}
+
+
+	public Conference() {
+		date = new Date();
+	}
+
+	@Id
+	@GeneratedValue
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	@Column(name = "c_date", nullable = false)
+	public Date getDate() {
+		return date;
+	}
+
+	public void setDate(Date date) {
+		this.date = date;
+	}
+
+	public boolean equals(Object o) {
+		if ( this == o ) return true;
+		if ( o == null || getClass() != o.getClass() ) return false;
+
+		final Conference that = (Conference) o;
+
+		return !( date != null ? !date.equals( that.date ) : that.date != null );
+
+	}
+
+	public int hashCode() {
+		return ( date != null ? date.hashCode() : 0 );
+	}
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/DeleteOrphanTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/DeleteOrphanTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/DeleteOrphanTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,91 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.cascade;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutput;
-import java.io.ObjectOutputStream;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityTransaction;
-
-import org.hibernate.Hibernate;
-import org.hibernate.ejb.test.TestCase;
-
-/**
- * @author Emmanuel Bernard
- */
-public class DeleteOrphanTest extends TestCase {
-	public void testDeleteOrphan() throws Exception {
-		EntityTransaction tx;
-
-		EntityManager em = factory.createEntityManager();
-		tx = em.getTransaction();
-		tx.begin();
-		Troop disney = new Troop();
-
-		disney.setName( "Disney" );
-		Soldier mickey = new Soldier();
-		mickey.setName( "Mickey" );
-		disney.addSoldier( mickey );
-		em.persist( disney );
-		tx.commit();
-		em.close();
-
-		em = factory.createEntityManager();
-		tx = em.getTransaction();
-		tx.begin();
-		Troop troop = em.find( Troop.class, disney.getId() );
-		Hibernate.initialize( troop.getSoldiers() );
-		tx.commit();
-		em.close();
-
-		Soldier soldier = troop.getSoldiers().iterator().next();
-		troop.getSoldiers().remove( soldier );
-		troop = (Troop) unserialize( serialize( troop ) );
-
-		em = factory.createEntityManager();
-		tx = em.getTransaction();
-		tx.begin();
-		em.merge( troop );
-		tx.commit();
-		em.close();
-
-		em = factory.createEntityManager();
-		tx = em.getTransaction();
-		tx.begin();
-		soldier = em.find( Soldier.class, mickey.getId() );
-		assertNull( "delete-orphan should work", soldier );
-		troop = em.find( Troop.class, disney.getId() );
-		em.remove( troop );
-		tx.commit();
-		em.close();
-	}
-
-	public Class[] getAnnotatedClasses() {
-		return new Class[]{
-				Troop.class,
-				Soldier.class
-		};
-	}
-
-	private byte[] serialize(Object object) throws IOException {
-		ByteArrayOutputStream stream = new ByteArrayOutputStream();
-		ObjectOutput out = new ObjectOutputStream( stream );
-		out.writeObject( object );
-		out.close();
-		byte[] serialized = stream.toByteArray();
-		stream.close();
-		return serialized;
-	}
-
-	private Object unserialize(byte[] serialized) throws IOException, ClassNotFoundException {
-		ByteArrayInputStream byteIn = new ByteArrayInputStream( serialized );
-		ObjectInputStream in = new ObjectInputStream( byteIn );
-		Object result = in.readObject();
-		in.close();
-		byteIn.close();
-		return result;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/DeleteOrphanTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/DeleteOrphanTest.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/DeleteOrphanTest.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/DeleteOrphanTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,91 @@
+//$Id$
+package org.hibernate.ejb.test.cascade;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutput;
+import java.io.ObjectOutputStream;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityTransaction;
+
+import org.hibernate.Hibernate;
+import org.hibernate.ejb.test.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class DeleteOrphanTest extends TestCase {
+	public void testDeleteOrphan() throws Exception {
+		EntityTransaction tx;
+
+		EntityManager em = factory.createEntityManager();
+		tx = em.getTransaction();
+		tx.begin();
+		Troop disney = new Troop();
+
+		disney.setName( "Disney" );
+		Soldier mickey = new Soldier();
+		mickey.setName( "Mickey" );
+		disney.addSoldier( mickey );
+		em.persist( disney );
+		tx.commit();
+		em.close();
+
+		em = factory.createEntityManager();
+		tx = em.getTransaction();
+		tx.begin();
+		Troop troop = em.find( Troop.class, disney.getId() );
+		Hibernate.initialize( troop.getSoldiers() );
+		tx.commit();
+		em.close();
+
+		Soldier soldier = troop.getSoldiers().iterator().next();
+		troop.getSoldiers().remove( soldier );
+		troop = (Troop) unserialize( serialize( troop ) );
+
+		em = factory.createEntityManager();
+		tx = em.getTransaction();
+		tx.begin();
+		em.merge( troop );
+		tx.commit();
+		em.close();
+
+		em = factory.createEntityManager();
+		tx = em.getTransaction();
+		tx.begin();
+		soldier = em.find( Soldier.class, mickey.getId() );
+		assertNull( "delete-orphan should work", soldier );
+		troop = em.find( Troop.class, disney.getId() );
+		em.remove( troop );
+		tx.commit();
+		em.close();
+	}
+
+	public Class[] getAnnotatedClasses() {
+		return new Class[]{
+				Troop.class,
+				Soldier.class
+		};
+	}
+
+	private byte[] serialize(Object object) throws IOException {
+		ByteArrayOutputStream stream = new ByteArrayOutputStream();
+		ObjectOutput out = new ObjectOutputStream( stream );
+		out.writeObject( object );
+		out.close();
+		byte[] serialized = stream.toByteArray();
+		stream.close();
+		return serialized;
+	}
+
+	private Object unserialize(byte[] serialized) throws IOException, ClassNotFoundException {
+		ByteArrayInputStream byteIn = new ByteArrayInputStream( serialized );
+		ObjectInputStream in = new ObjectInputStream( byteIn );
+		Object result = in.readObject();
+		in.close();
+		byteIn.close();
+		return result;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/ExtractionDocument.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/ExtractionDocument.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/ExtractionDocument.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,64 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.cascade;
-
-import java.io.Serializable;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.OneToOne;
-import javax.persistence.Table;
-
-import org.hibernate.annotations.Proxy;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Table(name = "portal_pk_docs_extraction")
-//@Cache(usage = READ_WRITE)
- at org.hibernate.annotations.Entity(dynamicInsert = true, dynamicUpdate = true)
- at Proxy
-public class ExtractionDocument implements Serializable {
-	private Long id;
-	private byte[] body;
-	private ExtractionDocumentInfo documentInfo;
-
-	public ExtractionDocument() {
-	}
-
-	public ExtractionDocument(ExtractionDocumentInfo documentInfo) {
-		this.documentInfo = documentInfo;
-	}
-
-
-	@Id
-	@GeneratedValue
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-
-	@OneToOne
-	@JoinColumn(name = "document_info_id")
-	public ExtractionDocumentInfo getDocumentInfo() {
-		return documentInfo;
-	}
-
-	public void setDocumentInfo(ExtractionDocumentInfo documentInfo) {
-		this.documentInfo = documentInfo;
-	}
-
-	@Column(nullable = false)
-	public byte[] getBody() {
-		return body;
-	}
-
-	public void setBody(byte[] body) {
-		this.body = body;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/ExtractionDocument.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/ExtractionDocument.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/ExtractionDocument.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/ExtractionDocument.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,64 @@
+//$Id$
+package org.hibernate.ejb.test.cascade;
+
+import java.io.Serializable;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.OneToOne;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.Proxy;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Table(name = "portal_pk_docs_extraction")
+//@Cache(usage = READ_WRITE)
+ at org.hibernate.annotations.Entity(dynamicInsert = true, dynamicUpdate = true)
+ at Proxy
+public class ExtractionDocument implements Serializable {
+	private Long id;
+	private byte[] body;
+	private ExtractionDocumentInfo documentInfo;
+
+	public ExtractionDocument() {
+	}
+
+	public ExtractionDocument(ExtractionDocumentInfo documentInfo) {
+		this.documentInfo = documentInfo;
+	}
+
+
+	@Id
+	@GeneratedValue
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	@OneToOne
+	@JoinColumn(name = "document_info_id")
+	public ExtractionDocumentInfo getDocumentInfo() {
+		return documentInfo;
+	}
+
+	public void setDocumentInfo(ExtractionDocumentInfo documentInfo) {
+		this.documentInfo = documentInfo;
+	}
+
+	@Column(nullable = false)
+	public byte[] getBody() {
+		return body;
+	}
+
+	public void setBody(byte[] body) {
+		this.body = body;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/ExtractionDocumentInfo.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/ExtractionDocumentInfo.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/ExtractionDocumentInfo.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,121 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.cascade;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.Iterator;
-import java.util.List;
-import javax.persistence.CascadeType;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-import javax.persistence.OneToMany;
-import javax.persistence.PreRemove;
-import javax.persistence.Table;
-import javax.persistence.Transient;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Table(name = "portal_pk_docs_extraction_info")
-//@Cache(usage = READ_WRITE)
- at org.hibernate.annotations.Entity(dynamicInsert = true, dynamicUpdate = true)
-public class ExtractionDocumentInfo implements Serializable {
-	private Long id;
-	private Date lastModified;
-	private Conference conference;
-	private List<ExtractionDocument> documents;
-
-
-	public ExtractionDocumentInfo() {
-		lastModified = new Date();
-	}
-
-	public ExtractionDocumentInfo(Conference conference) {
-		this.conference = conference;
-		lastModified = new Date();
-		documents = new ArrayList<ExtractionDocument>();
-		documents.add( new ExtractionDocument( this ) );
-	}
-
-	@Transient
-	public ExtractionDocument getDocument() {
-		if ( documents.isEmpty() ) {
-			documents.add( new ExtractionDocument( this ) );
-		}
-		Iterator<ExtractionDocument> iterator = documents.iterator();
-		return iterator.next();
-	}
-
-	@Transient
-	public byte[] getBody() {
-		return getDocument().getBody();
-	}
-
-	public void setBody(byte[] body) {
-		getDocument().setBody( body );
-	}
-
-	@Id
-	@GeneratedValue
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-
-	@OneToMany(mappedBy = "documentInfo", cascade = CascadeType.ALL)
-	public List<ExtractionDocument> getDocuments() {
-		return documents;
-	}
-
-	public void setDocuments(List<ExtractionDocument> documents) {
-		this.documents = documents;
-	}
-
-
-	@ManyToOne
-	@JoinColumn(name = "conference_id")
-	public Conference getConference() {
-		return conference;
-	}
-
-	public void setConference(Conference conference) {
-		this.conference = conference;
-	}
-
-	@Column(name = "last_modified", nullable = false)
-	public Date getLastModified() {
-		return lastModified;
-	}
-
-	public void setLastModified(Date lastModified) {
-		this.lastModified = lastModified;
-	}
-
-	public boolean equals(Object o) {
-		if ( this == o ) return true;
-		if ( !( o instanceof ExtractionDocumentInfo ) ) return false;
-
-		final ExtractionDocumentInfo newsInfo = (ExtractionDocumentInfo) o;
-
-		return id.equals( newsInfo.id );
-	}
-
-	public int hashCode() {
-		return id.hashCode();
-	}
-
-	@PreRemove
-	public void preRemove() {
-		getConference().setExtractionDocument( null );
-	}
-}
-

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/ExtractionDocumentInfo.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/ExtractionDocumentInfo.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/ExtractionDocumentInfo.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/ExtractionDocumentInfo.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,121 @@
+//$Id$
+package org.hibernate.ejb.test.cascade;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToMany;
+import javax.persistence.PreRemove;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Table(name = "portal_pk_docs_extraction_info")
+//@Cache(usage = READ_WRITE)
+ at org.hibernate.annotations.Entity(dynamicInsert = true, dynamicUpdate = true)
+public class ExtractionDocumentInfo implements Serializable {
+	private Long id;
+	private Date lastModified;
+	private Conference conference;
+	private List<ExtractionDocument> documents;
+
+
+	public ExtractionDocumentInfo() {
+		lastModified = new Date();
+	}
+
+	public ExtractionDocumentInfo(Conference conference) {
+		this.conference = conference;
+		lastModified = new Date();
+		documents = new ArrayList<ExtractionDocument>();
+		documents.add( new ExtractionDocument( this ) );
+	}
+
+	@Transient
+	public ExtractionDocument getDocument() {
+		if ( documents.isEmpty() ) {
+			documents.add( new ExtractionDocument( this ) );
+		}
+		Iterator<ExtractionDocument> iterator = documents.iterator();
+		return iterator.next();
+	}
+
+	@Transient
+	public byte[] getBody() {
+		return getDocument().getBody();
+	}
+
+	public void setBody(byte[] body) {
+		getDocument().setBody( body );
+	}
+
+	@Id
+	@GeneratedValue
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	@OneToMany(mappedBy = "documentInfo", cascade = CascadeType.ALL)
+	public List<ExtractionDocument> getDocuments() {
+		return documents;
+	}
+
+	public void setDocuments(List<ExtractionDocument> documents) {
+		this.documents = documents;
+	}
+
+
+	@ManyToOne
+	@JoinColumn(name = "conference_id")
+	public Conference getConference() {
+		return conference;
+	}
+
+	public void setConference(Conference conference) {
+		this.conference = conference;
+	}
+
+	@Column(name = "last_modified", nullable = false)
+	public Date getLastModified() {
+		return lastModified;
+	}
+
+	public void setLastModified(Date lastModified) {
+		this.lastModified = lastModified;
+	}
+
+	public boolean equals(Object o) {
+		if ( this == o ) return true;
+		if ( !( o instanceof ExtractionDocumentInfo ) ) return false;
+
+		final ExtractionDocumentInfo newsInfo = (ExtractionDocumentInfo) o;
+
+		return id.equals( newsInfo.id );
+	}
+
+	public int hashCode() {
+		return id.hashCode();
+	}
+
+	@PreRemove
+	public void preRemove() {
+		getConference().setExtractionDocument( null );
+	}
+}
+

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/FetchTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/FetchTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/FetchTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,216 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.cascade;
-
-import java.util.ArrayList;
-import java.util.Date;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityTransaction;
-import javax.persistence.Query;
-
-import org.hibernate.Hibernate;
-import org.hibernate.ejb.HibernateEntityManager;
-import org.hibernate.ejb.test.TestCase;
-
-/**
- * @author Emmanuel Bernard
- */
-public class FetchTest extends TestCase {
-
-	public void testCascadeAndFetchCollection() throws Exception {
-		EntityManager em = factory.createEntityManager();
-		em.getTransaction().begin();
-		Troop disney = new Troop();
-		disney.setName( "Disney" );
-		Soldier mickey = new Soldier();
-		mickey.setName( "Mickey" );
-		disney.addSoldier( mickey );
-		em.persist( disney );
-		em.getTransaction().commit();
-		em.close();
-
-		em = factory.createEntityManager();
-		em.getTransaction().begin();
-		Troop troop = em.find( Troop.class, disney.getId() );
-		assertFalse( Hibernate.isInitialized( troop.getSoldiers() ) );
-		em.getTransaction().commit();
-		assertFalse( Hibernate.isInitialized( troop.getSoldiers() ) );
-		em.close();
-
-		em = factory.createEntityManager();
-		em.getTransaction().begin();
-		troop = em.find( Troop.class, disney.getId() );
-		em.remove( troop );
-		//Fail because of HHH-1187
-		em.getTransaction().commit();
-		em.close();
-	}
-
-	public void testCascadeAndFetchEntity() throws Exception {
-		EntityManager em = factory.createEntityManager();
-		em.getTransaction().begin();
-		Troop disney = new Troop();
-		disney.setName( "Disney" );
-		Soldier mickey = new Soldier();
-		mickey.setName( "Mickey" );
-		disney.addSoldier( mickey );
-		em.persist( disney );
-		em.getTransaction().commit();
-		em.close();
-
-		em = factory.createEntityManager();
-		em.getTransaction().begin();
-		Soldier soldier = em.find( Soldier.class, mickey.getId() );
-		assertFalse( Hibernate.isInitialized( soldier.getTroop() ) );
-		em.getTransaction().commit();
-		assertFalse( Hibernate.isInitialized( soldier.getTroop() ) );
-		em.close();
-		em = factory.createEntityManager();
-		em.getTransaction().begin();
-		Troop troop = em.find( Troop.class, disney.getId() );
-		em.remove( troop );
-		//Fail because of HHH-1187
-		em.getTransaction().commit();
-		em.close();
-	}
-
-	public void testTwoLevelDeepPersist() throws Exception {
-		EntityTransaction tx;
-
-		EntityManager em = factory.createEntityManager();
-		tx = em.getTransaction();
-		tx.begin();
-		Conference jbwBarcelona = new Conference();
-		jbwBarcelona.setDate( new Date() );
-		ExtractionDocumentInfo info = new ExtractionDocumentInfo();
-		info.setConference( jbwBarcelona );
-		jbwBarcelona.setExtractionDocument( info );
-		info.setLastModified( new Date() );
-		ExtractionDocument doc = new ExtractionDocument();
-		doc.setDocumentInfo( info );
-		info.setDocuments( new ArrayList<ExtractionDocument>() );
-		info.getDocuments().add( doc );
-		doc.setBody( new byte[]{'c', 'f'} );
-		em.persist( jbwBarcelona );
-		tx.commit();
-		em.close();
-
-		em = factory.createEntityManager();
-		tx = em.getTransaction();
-		tx.begin();
-		jbwBarcelona = em.find( Conference.class, jbwBarcelona.getId() );
-		assertTrue( Hibernate.isInitialized( jbwBarcelona ) );
-		assertTrue( Hibernate.isInitialized( jbwBarcelona.getExtractionDocument() ) );
-		assertFalse( Hibernate.isInitialized( jbwBarcelona.getExtractionDocument().getDocuments() ) );
-		em.flush();
-		assertTrue( Hibernate.isInitialized( jbwBarcelona ) );
-		assertTrue( Hibernate.isInitialized( jbwBarcelona.getExtractionDocument() ) );
-		assertFalse( Hibernate.isInitialized( jbwBarcelona.getExtractionDocument().getDocuments() ) );
-		em.remove( jbwBarcelona );
-		tx.commit();
-		em.close();
-	}
-
-	public void testTwoLevelDeepPersistOnManyToOne() throws Exception {
-		EntityTransaction tx;
-		EntityManager em = factory.createEntityManager();
-		tx = em.getTransaction();
-		tx.begin();
-		Grandson gs = new Grandson();
-		gs.setParent( new Son() );
-		gs.getParent().setParent( new Parent() );
-		em.persist( gs );
-		tx.commit();
-		em.close();
-		em = factory.createEntityManager();
-		tx = em.getTransaction();
-		tx.begin();
-		gs = em.find( Grandson.class, gs.getId() );
-		em.flush();
-		assertTrue( Hibernate.isInitialized( gs.getParent() ) );
-		assertFalse( Hibernate.isInitialized( gs.getParent().getParent() ) );
-		em.remove( gs );
-		tx.commit();
-		em.close();
-	}
-
-	public void testPerfCascadeAndFetchEntity() throws Exception {
-		EntityManager em = factory.createEntityManager();
-		//init data
-		em.getTransaction().begin();
-		int loop = 50;
-		for ( int i = 0; i < loop ; i++ ) {
-			Troop disney = new Troop();
-			disney.setName( "Disney" );
-			Soldier mickey = new Soldier();
-			mickey.setName( "Mickey" );
-			disney.addSoldier( mickey );
-			em.persist( disney );
-		}
-		em.getTransaction().commit();
-		em.close();
-
-		//Warm up loop
-		em = factory.createEntityManager();
-		em.getTransaction().begin();
-		for ( int i = 0; i < loop ; i++ ) {
-			//Soldier soldier = em.find( Soldier.class, new Integer(i) );
-			Troop troop = em.find( Troop.class, new Integer( i ) );
-			//( ( HibernateEntityManager ) em ).getSession().evict(soldier);
-		}
-		long l11 = System.currentTimeMillis();
-		Query query = em.createQuery( "SELECT count(t) FROM Soldier t" );
-		query.getSingleResult();
-		long l2 = System.currentTimeMillis();
-		System.out.println( "Query1 " + ( l2 - l11 ) );
-		em.getTransaction().commit();
-		em.close();
-
-		//do not evict
-		for ( int j = 0; j < 10 ; j++ ) {
-			em = factory.createEntityManager();
-			em.getTransaction().begin();
-			for ( int i = 0; i < loop ; i++ ) {
-				Troop troop = em.find( Troop.class, new Integer( i ) );
-				( (HibernateEntityManager) em ).getSession().evict( troop );
-			}
-			l11 = System.currentTimeMillis();
-			query = em.createQuery( "SELECT count(t) FROM Soldier t" );
-			query.getSingleResult();
-			l2 = System.currentTimeMillis();
-			System.out.println( "Query " + ( l2 - l11 ) );
-			em.getTransaction().commit();
-			em.close();
-
-			//evict
-			em = factory.createEntityManager();
-			em.getTransaction().begin();
-			for ( int i = 0; i < loop ; i++ ) {
-				//Soldier soldier = em.find( Soldier.class, new Integer(i) );
-				Troop troop = em.find( Troop.class, new Integer( i ) );
-
-				//( ( HibernateEntityManager ) em ).getSession().evict(troop);
-			}
-			l11 = System.currentTimeMillis();
-			query = em.createQuery( "SELECT count(t) FROM Soldier t" );
-			query.getSingleResult();
-			l2 = System.currentTimeMillis();
-			System.out.println( "Query " + ( l2 - l11 ) );
-			em.getTransaction().commit();
-		}
-		em.close();
-	}
-
-
-	public Class[] getAnnotatedClasses() {
-		return new Class[]{
-				Troop.class,
-				Soldier.class,
-				Conference.class,
-				ExtractionDocument.class,
-				ExtractionDocumentInfo.class,
-				Parent.class,
-				Son.class,
-				Grandson.class
-		};
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/FetchTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/FetchTest.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/FetchTest.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/FetchTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,216 @@
+//$Id$
+package org.hibernate.ejb.test.cascade;
+
+import java.util.ArrayList;
+import java.util.Date;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityTransaction;
+import javax.persistence.Query;
+
+import org.hibernate.Hibernate;
+import org.hibernate.ejb.HibernateEntityManager;
+import org.hibernate.ejb.test.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class FetchTest extends TestCase {
+
+	public void testCascadeAndFetchCollection() throws Exception {
+		EntityManager em = factory.createEntityManager();
+		em.getTransaction().begin();
+		Troop disney = new Troop();
+		disney.setName( "Disney" );
+		Soldier mickey = new Soldier();
+		mickey.setName( "Mickey" );
+		disney.addSoldier( mickey );
+		em.persist( disney );
+		em.getTransaction().commit();
+		em.close();
+
+		em = factory.createEntityManager();
+		em.getTransaction().begin();
+		Troop troop = em.find( Troop.class, disney.getId() );
+		assertFalse( Hibernate.isInitialized( troop.getSoldiers() ) );
+		em.getTransaction().commit();
+		assertFalse( Hibernate.isInitialized( troop.getSoldiers() ) );
+		em.close();
+
+		em = factory.createEntityManager();
+		em.getTransaction().begin();
+		troop = em.find( Troop.class, disney.getId() );
+		em.remove( troop );
+		//Fail because of HHH-1187
+		em.getTransaction().commit();
+		em.close();
+	}
+
+	public void testCascadeAndFetchEntity() throws Exception {
+		EntityManager em = factory.createEntityManager();
+		em.getTransaction().begin();
+		Troop disney = new Troop();
+		disney.setName( "Disney" );
+		Soldier mickey = new Soldier();
+		mickey.setName( "Mickey" );
+		disney.addSoldier( mickey );
+		em.persist( disney );
+		em.getTransaction().commit();
+		em.close();
+
+		em = factory.createEntityManager();
+		em.getTransaction().begin();
+		Soldier soldier = em.find( Soldier.class, mickey.getId() );
+		assertFalse( Hibernate.isInitialized( soldier.getTroop() ) );
+		em.getTransaction().commit();
+		assertFalse( Hibernate.isInitialized( soldier.getTroop() ) );
+		em.close();
+		em = factory.createEntityManager();
+		em.getTransaction().begin();
+		Troop troop = em.find( Troop.class, disney.getId() );
+		em.remove( troop );
+		//Fail because of HHH-1187
+		em.getTransaction().commit();
+		em.close();
+	}
+
+	public void testTwoLevelDeepPersist() throws Exception {
+		EntityTransaction tx;
+
+		EntityManager em = factory.createEntityManager();
+		tx = em.getTransaction();
+		tx.begin();
+		Conference jbwBarcelona = new Conference();
+		jbwBarcelona.setDate( new Date() );
+		ExtractionDocumentInfo info = new ExtractionDocumentInfo();
+		info.setConference( jbwBarcelona );
+		jbwBarcelona.setExtractionDocument( info );
+		info.setLastModified( new Date() );
+		ExtractionDocument doc = new ExtractionDocument();
+		doc.setDocumentInfo( info );
+		info.setDocuments( new ArrayList<ExtractionDocument>() );
+		info.getDocuments().add( doc );
+		doc.setBody( new byte[]{'c', 'f'} );
+		em.persist( jbwBarcelona );
+		tx.commit();
+		em.close();
+
+		em = factory.createEntityManager();
+		tx = em.getTransaction();
+		tx.begin();
+		jbwBarcelona = em.find( Conference.class, jbwBarcelona.getId() );
+		assertTrue( Hibernate.isInitialized( jbwBarcelona ) );
+		assertTrue( Hibernate.isInitialized( jbwBarcelona.getExtractionDocument() ) );
+		assertFalse( Hibernate.isInitialized( jbwBarcelona.getExtractionDocument().getDocuments() ) );
+		em.flush();
+		assertTrue( Hibernate.isInitialized( jbwBarcelona ) );
+		assertTrue( Hibernate.isInitialized( jbwBarcelona.getExtractionDocument() ) );
+		assertFalse( Hibernate.isInitialized( jbwBarcelona.getExtractionDocument().getDocuments() ) );
+		em.remove( jbwBarcelona );
+		tx.commit();
+		em.close();
+	}
+
+	public void testTwoLevelDeepPersistOnManyToOne() throws Exception {
+		EntityTransaction tx;
+		EntityManager em = factory.createEntityManager();
+		tx = em.getTransaction();
+		tx.begin();
+		Grandson gs = new Grandson();
+		gs.setParent( new Son() );
+		gs.getParent().setParent( new Parent() );
+		em.persist( gs );
+		tx.commit();
+		em.close();
+		em = factory.createEntityManager();
+		tx = em.getTransaction();
+		tx.begin();
+		gs = em.find( Grandson.class, gs.getId() );
+		em.flush();
+		assertTrue( Hibernate.isInitialized( gs.getParent() ) );
+		assertFalse( Hibernate.isInitialized( gs.getParent().getParent() ) );
+		em.remove( gs );
+		tx.commit();
+		em.close();
+	}
+
+	public void testPerfCascadeAndFetchEntity() throws Exception {
+		EntityManager em = factory.createEntityManager();
+		//init data
+		em.getTransaction().begin();
+		int loop = 50;
+		for ( int i = 0; i < loop ; i++ ) {
+			Troop disney = new Troop();
+			disney.setName( "Disney" );
+			Soldier mickey = new Soldier();
+			mickey.setName( "Mickey" );
+			disney.addSoldier( mickey );
+			em.persist( disney );
+		}
+		em.getTransaction().commit();
+		em.close();
+
+		//Warm up loop
+		em = factory.createEntityManager();
+		em.getTransaction().begin();
+		for ( int i = 0; i < loop ; i++ ) {
+			//Soldier soldier = em.find( Soldier.class, new Integer(i) );
+			Troop troop = em.find( Troop.class, new Integer( i ) );
+			//( ( HibernateEntityManager ) em ).getSession().evict(soldier);
+		}
+		long l11 = System.currentTimeMillis();
+		Query query = em.createQuery( "SELECT count(t) FROM Soldier t" );
+		query.getSingleResult();
+		long l2 = System.currentTimeMillis();
+		System.out.println( "Query1 " + ( l2 - l11 ) );
+		em.getTransaction().commit();
+		em.close();
+
+		//do not evict
+		for ( int j = 0; j < 10 ; j++ ) {
+			em = factory.createEntityManager();
+			em.getTransaction().begin();
+			for ( int i = 0; i < loop ; i++ ) {
+				Troop troop = em.find( Troop.class, new Integer( i ) );
+				( (HibernateEntityManager) em ).getSession().evict( troop );
+			}
+			l11 = System.currentTimeMillis();
+			query = em.createQuery( "SELECT count(t) FROM Soldier t" );
+			query.getSingleResult();
+			l2 = System.currentTimeMillis();
+			System.out.println( "Query " + ( l2 - l11 ) );
+			em.getTransaction().commit();
+			em.close();
+
+			//evict
+			em = factory.createEntityManager();
+			em.getTransaction().begin();
+			for ( int i = 0; i < loop ; i++ ) {
+				//Soldier soldier = em.find( Soldier.class, new Integer(i) );
+				Troop troop = em.find( Troop.class, new Integer( i ) );
+
+				//( ( HibernateEntityManager ) em ).getSession().evict(troop);
+			}
+			l11 = System.currentTimeMillis();
+			query = em.createQuery( "SELECT count(t) FROM Soldier t" );
+			query.getSingleResult();
+			l2 = System.currentTimeMillis();
+			System.out.println( "Query " + ( l2 - l11 ) );
+			em.getTransaction().commit();
+		}
+		em.close();
+	}
+
+
+	public Class[] getAnnotatedClasses() {
+		return new Class[]{
+				Troop.class,
+				Soldier.class,
+				Conference.class,
+				ExtractionDocument.class,
+				ExtractionDocumentInfo.class,
+				Parent.class,
+				Son.class,
+				Grandson.class
+		};
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/FetchTest2.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/FetchTest2.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/FetchTest2.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,67 +0,0 @@
-package org.hibernate.ejb.test.cascade;
-
-import javax.persistence.EntityManager;
-
-import org.hibernate.ejb.test.TestCase;
-
-public class FetchTest2 extends TestCase {
-
-	public void testProxyTransientStuff() throws Exception {
-
-		EntityManager em = factory.createEntityManager();
-		em.getTransaction().begin();
-
-		Troop2 disney = new Troop2();
-		disney.setName( "Disney" );
-
-		Soldier2 mickey = new Soldier2();
-		mickey.setName( "Mickey" );
-		mickey.setTroop( disney );
-
-		em.persist( disney );
-		em.persist( mickey );
-
-		em.getTransaction().commit();
-		em.close();
-
-		em = factory.createEntityManager();
-		em.getTransaction().begin();
-
-		Soldier2 soldier = em.find( Soldier2.class, mickey.getId() );
-		soldier.getTroop().getId();
-		try {
-			em.flush();
-		}
-		catch (IllegalStateException e) {
-			fail( "Should not raise an exception" );
-		}
-
-		em.getTransaction().commit();
-		em.close();
-
-		em = factory.createEntityManager();
-		em.getTransaction().begin();
-
-		//load troop wo a proxy
-		disney = em.find( Troop2.class, disney.getId() );
-		soldier = em.find( Soldier2.class, mickey.getId() );
-
-		try {
-			em.flush();
-		}
-		catch (IllegalStateException e) {
-			fail( "Should not raise an exception" );
-		}
-		em.remove( soldier );
-		em.remove( disney );
-		em.getTransaction().commit();
-		em.close();
-	}
-
-	public Class[] getAnnotatedClasses() {
-		return new Class[]{
-				Troop2.class,
-				Soldier2.class
-		};
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/FetchTest2.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/FetchTest2.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/FetchTest2.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/FetchTest2.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,67 @@
+package org.hibernate.ejb.test.cascade;
+
+import javax.persistence.EntityManager;
+
+import org.hibernate.ejb.test.TestCase;
+
+public class FetchTest2 extends TestCase {
+
+	public void testProxyTransientStuff() throws Exception {
+
+		EntityManager em = factory.createEntityManager();
+		em.getTransaction().begin();
+
+		Troop2 disney = new Troop2();
+		disney.setName( "Disney" );
+
+		Soldier2 mickey = new Soldier2();
+		mickey.setName( "Mickey" );
+		mickey.setTroop( disney );
+
+		em.persist( disney );
+		em.persist( mickey );
+
+		em.getTransaction().commit();
+		em.close();
+
+		em = factory.createEntityManager();
+		em.getTransaction().begin();
+
+		Soldier2 soldier = em.find( Soldier2.class, mickey.getId() );
+		soldier.getTroop().getId();
+		try {
+			em.flush();
+		}
+		catch (IllegalStateException e) {
+			fail( "Should not raise an exception" );
+		}
+
+		em.getTransaction().commit();
+		em.close();
+
+		em = factory.createEntityManager();
+		em.getTransaction().begin();
+
+		//load troop wo a proxy
+		disney = em.find( Troop2.class, disney.getId() );
+		soldier = em.find( Soldier2.class, mickey.getId() );
+
+		try {
+			em.flush();
+		}
+		catch (IllegalStateException e) {
+			fail( "Should not raise an exception" );
+		}
+		em.remove( soldier );
+		em.remove( disney );
+		em.getTransaction().commit();
+		em.close();
+	}
+
+	public Class[] getAnnotatedClasses() {
+		return new Class[]{
+				Troop2.class,
+				Soldier2.class
+		};
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Grandson.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Grandson.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Grandson.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,37 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.cascade;
-
-import javax.persistence.CascadeType;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.ManyToOne;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Grandson {
-	@Id
-	@GeneratedValue
-	private Integer id;
-	@ManyToOne(fetch = FetchType.EAGER, cascade = {CascadeType.ALL})
-	private Son parent;
-
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public Son getParent() {
-		return parent;
-	}
-
-	public void setParent(Son parent) {
-		this.parent = parent;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Grandson.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Grandson.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Grandson.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Grandson.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,37 @@
+//$Id$
+package org.hibernate.ejb.test.cascade;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Grandson {
+	@Id
+	@GeneratedValue
+	private Integer id;
+	@ManyToOne(fetch = FetchType.EAGER, cascade = {CascadeType.ALL})
+	private Son parent;
+
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public Son getParent() {
+		return parent;
+	}
+
+	public void setParent(Son parent) {
+		this.parent = parent;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Parent.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Parent.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Parent.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,27 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.cascade;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.Table;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Table(name = "family_parent")
-public class Parent {
-	@Id
-	@GeneratedValue
-	private Integer id;
-
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Parent.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Parent.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Parent.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Parent.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,27 @@
+//$Id$
+package org.hibernate.ejb.test.cascade;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Table(name = "family_parent")
+public class Parent {
+	@Id
+	@GeneratedValue
+	private Integer id;
+
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Soldier.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Soldier.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Soldier.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,64 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.cascade;
-
-import java.io.Serializable;
-import javax.persistence.CascadeType;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Soldier implements Serializable {
-	private Integer id;
-	private String name;
-	private Troop troop;
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)
-	@JoinColumn(name = "troop_fk")
-	public Troop getTroop() {
-		return troop;
-	}
-
-	public void setTroop(Troop troop) {
-		this.troop = troop;
-	}
-
-	public boolean equals(Object o) {
-		if ( this == o ) return true;
-		if ( !( o instanceof Soldier ) ) return false;
-
-		final Soldier soldier = (Soldier) o;
-
-		if ( !name.equals( soldier.name ) ) return false;
-
-		return true;
-	}
-
-	public int hashCode() {
-		return name.hashCode();
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Soldier.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Soldier.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Soldier.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Soldier.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,64 @@
+//$Id$
+package org.hibernate.ejb.test.cascade;
+
+import java.io.Serializable;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Soldier implements Serializable {
+	private Integer id;
+	private String name;
+	private Troop troop;
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)
+	@JoinColumn(name = "troop_fk")
+	public Troop getTroop() {
+		return troop;
+	}
+
+	public void setTroop(Troop troop) {
+		this.troop = troop;
+	}
+
+	public boolean equals(Object o) {
+		if ( this == o ) return true;
+		if ( !( o instanceof Soldier ) ) return false;
+
+		final Soldier soldier = (Soldier) o;
+
+		if ( !name.equals( soldier.name ) ) return false;
+
+		return true;
+	}
+
+	public int hashCode() {
+		return name.hashCode();
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Soldier2.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Soldier2.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Soldier2.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,62 +0,0 @@
-package org.hibernate.ejb.test.cascade;
-
-import java.io.Serializable;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Soldier2 implements Serializable {
-	private Integer id;
-	private String name;
-	private Troop2 troop;
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	@ManyToOne(fetch = FetchType.LAZY)
-	@JoinColumn(name = "troop_fk")
-	public Troop2 getTroop() {
-		return troop;
-	}
-
-	public void setTroop(Troop2 troop) {
-		this.troop = troop;
-	}
-
-	public boolean equals(Object o) {
-		if ( this == o ) return true;
-		if ( !( o instanceof Soldier2 ) ) return false;
-
-		final Soldier2 soldier = (Soldier2) o;
-
-		if ( !name.equals( soldier.name ) ) return false;
-
-		return true;
-	}
-
-	public int hashCode() {
-		return name.hashCode();
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Soldier2.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Soldier2.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Soldier2.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Soldier2.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,62 @@
+package org.hibernate.ejb.test.cascade;
+
+import java.io.Serializable;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Soldier2 implements Serializable {
+	private Integer id;
+	private String name;
+	private Troop2 troop;
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	@ManyToOne(fetch = FetchType.LAZY)
+	@JoinColumn(name = "troop_fk")
+	public Troop2 getTroop() {
+		return troop;
+	}
+
+	public void setTroop(Troop2 troop) {
+		this.troop = troop;
+	}
+
+	public boolean equals(Object o) {
+		if ( this == o ) return true;
+		if ( !( o instanceof Soldier2 ) ) return false;
+
+		final Soldier2 soldier = (Soldier2) o;
+
+		if ( !name.equals( soldier.name ) ) return false;
+
+		return true;
+	}
+
+	public int hashCode() {
+		return name.hashCode();
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Son.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Son.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Son.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,38 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.cascade;
-
-import javax.persistence.CascadeType;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.ManyToOne;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Son {
-	@Id
-	@GeneratedValue
-	public Integer id;
-	@ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.ALL})
-	public Parent parent;
-
-
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public Parent getParent() {
-		return parent;
-	}
-
-	public void setParent(Parent parent) {
-		this.parent = parent;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Son.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Son.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Son.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Son.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,38 @@
+//$Id$
+package org.hibernate.ejb.test.cascade;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Son {
+	@Id
+	@GeneratedValue
+	public Integer id;
+	@ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.ALL})
+	public Parent parent;
+
+
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public Parent getParent() {
+		return parent;
+	}
+
+	public void setParent(Parent parent) {
+		this.parent = parent;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Song.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Song.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Song.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,38 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.cascade;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.GeneratedValue;
-import javax.persistence.FetchType;
-import javax.persistence.ManyToOne;
-import javax.persistence.GenerationType;
-import javax.persistence.SequenceGenerator;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Song {
-	@Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "ENTITY1_SEQ")
-	@SequenceGenerator(name = "ENTITY1_SEQ") private Long id;
-	@ManyToOne(fetch = FetchType.LAZY, optional = false)
-	private Author author;
-
-	public Author getAuthor() {
-		return author;
-	}
-
-	public void setAuthor(Author author) {
-		this.author = author;
-	}
-
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Song.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Song.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Song.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Song.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,38 @@
+//$Id: $
+package org.hibernate.ejb.test.cascade;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+import javax.persistence.FetchType;
+import javax.persistence.ManyToOne;
+import javax.persistence.GenerationType;
+import javax.persistence.SequenceGenerator;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Song {
+	@Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "ENTITY1_SEQ")
+	@SequenceGenerator(name = "ENTITY1_SEQ") private Long id;
+	@ManyToOne(fetch = FetchType.LAZY, optional = false)
+	private Author author;
+
+	public Author getAuthor() {
+		return author;
+	}
+
+	public void setAuthor(Author author) {
+		this.author = author;
+	}
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Student.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Student.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Student.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,57 +0,0 @@
-package org.hibernate.ejb.test.cascade;
-
-import javax.persistence.CascadeType;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.ManyToOne;
-import javax.persistence.OneToOne;
-
-import org.hibernate.annotations.AccessType;
-
- at Entity
- at AccessType("field")
-public class Student {
-
-	@Id @GeneratedValue
-	Long id;
-	
-	String name;
-	
-	@ManyToOne(cascade={CascadeType.MERGE, CascadeType.PERSIST})
-	private Teacher primaryTeacher;
-
-	@OneToOne(cascade={CascadeType.MERGE, CascadeType.PERSIST})
-	private Teacher favoriteTeacher;
-	
-	public  Student() {
-	}
-
-	public Teacher getFavoriteTeacher() {
-		return favoriteTeacher;
-	}
-
-	public void setFavoriteTeacher(Teacher lifeCover) {
-		this.favoriteTeacher = lifeCover;
-	}
-
-	public Teacher getPrimaryTeacher() {
-		return primaryTeacher;
-	}
-
-	public void setPrimaryTeacher(Teacher relativeTo) {
-		this.primaryTeacher = relativeTo;
-	}
-	
-	public Long getId() {
-		return id;
-	}
-
-	public String getName() {
-		return name;
-	}
-	
-	public void setName(String name) {
-		this.name = name;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Student.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Student.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Student.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Student.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,57 @@
+package org.hibernate.ejb.test.cascade;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToOne;
+
+import org.hibernate.annotations.AccessType;
+
+ at Entity
+ at AccessType("field")
+public class Student {
+
+	@Id @GeneratedValue
+	Long id;
+	
+	String name;
+	
+	@ManyToOne(cascade={CascadeType.MERGE, CascadeType.PERSIST})
+	private Teacher primaryTeacher;
+
+	@OneToOne(cascade={CascadeType.MERGE, CascadeType.PERSIST})
+	private Teacher favoriteTeacher;
+	
+	public  Student() {
+	}
+
+	public Teacher getFavoriteTeacher() {
+		return favoriteTeacher;
+	}
+
+	public void setFavoriteTeacher(Teacher lifeCover) {
+		this.favoriteTeacher = lifeCover;
+	}
+
+	public Teacher getPrimaryTeacher() {
+		return primaryTeacher;
+	}
+
+	public void setPrimaryTeacher(Teacher relativeTo) {
+		this.primaryTeacher = relativeTo;
+	}
+	
+	public Long getId() {
+		return id;
+	}
+
+	public String getName() {
+		return name;
+	}
+	
+	public void setName(String name) {
+		this.name = name;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Teacher.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Teacher.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Teacher.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,62 +0,0 @@
-package org.hibernate.ejb.test.cascade;
-
-import java.util.HashSet;
-import java.util.Set;
-
-import javax.persistence.CascadeType;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.OneToMany;
-import javax.persistence.OneToOne;
-
-import org.hibernate.annotations.AccessType;
-
- at Entity
- at AccessType("field")
-public class Teacher {
-	
-	@Id @GeneratedValue
-	Long id;
-	
-	String name;
-
-	@OneToMany(mappedBy="primaryTeacher", cascade={CascadeType.MERGE, CascadeType.PERSIST})
-	private Set<Student> students = new HashSet<Student>();
-
-	@OneToOne(mappedBy="favoriteTeacher", cascade={CascadeType.MERGE, CascadeType.PERSIST})
-	private Student favoriteStudent;
-	
-	public  Teacher() {
-	}
-
-	public Student getFavoriteStudent() {
-		return favoriteStudent;
-	}
-
-	public void setFavoriteStudent(
-			Student contributionOrBenefitParameters) {
-		this.favoriteStudent = contributionOrBenefitParameters;
-	}
-
-	public Set<Student> getStudents() {
-		return students;
-	}
-
-	public void setStudents(
-			Set<Student> todoCollection) {
-		this.students = todoCollection;
-	}
-	
-	public Long getId() {
-		return id;
-	}
-	
-	public String getName() {
-		return name;
-	}
-	
-	public void setName(String name) {
-		this.name = name;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Teacher.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Teacher.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Teacher.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Teacher.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,62 @@
+package org.hibernate.ejb.test.cascade;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+import javax.persistence.OneToOne;
+
+import org.hibernate.annotations.AccessType;
+
+ at Entity
+ at AccessType("field")
+public class Teacher {
+	
+	@Id @GeneratedValue
+	Long id;
+	
+	String name;
+
+	@OneToMany(mappedBy="primaryTeacher", cascade={CascadeType.MERGE, CascadeType.PERSIST})
+	private Set<Student> students = new HashSet<Student>();
+
+	@OneToOne(mappedBy="favoriteTeacher", cascade={CascadeType.MERGE, CascadeType.PERSIST})
+	private Student favoriteStudent;
+	
+	public  Teacher() {
+	}
+
+	public Student getFavoriteStudent() {
+		return favoriteStudent;
+	}
+
+	public void setFavoriteStudent(
+			Student contributionOrBenefitParameters) {
+		this.favoriteStudent = contributionOrBenefitParameters;
+	}
+
+	public Set<Student> getStudents() {
+		return students;
+	}
+
+	public void setStudents(
+			Set<Student> todoCollection) {
+		this.students = todoCollection;
+	}
+	
+	public Long getId() {
+		return id;
+	}
+	
+	public String getName() {
+		return name;
+	}
+	
+	public void setName(String name) {
+		this.name = name;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Troop.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Troop.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Troop.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,59 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.cascade;
-
-import java.io.Serializable;
-import java.util.HashSet;
-import java.util.Set;
-import javax.persistence.CascadeType;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.OneToMany;
-
-import org.hibernate.annotations.OrderBy;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Troop implements Serializable {
-	private Integer id;
-	private String name;
-	private Set<Soldier> soldiers;
-
-	@OneToMany(mappedBy = "troop", cascade = {CascadeType.ALL}, fetch = FetchType.LAZY)
-	@OrderBy(clause = "name desc")
-	@org.hibernate.annotations.Cascade({org.hibernate.annotations.CascadeType.DELETE_ORPHAN})
-	public Set<Soldier> getSoldiers() {
-		return soldiers;
-	}
-
-	public void setSoldiers(Set<Soldier> soldiers) {
-		this.soldiers = soldiers;
-	}
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	public void addSoldier(Soldier s) {
-		if ( soldiers == null ) soldiers = new HashSet<Soldier>();
-		soldiers.add( s );
-		s.setTroop( this );
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Troop.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Troop.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Troop.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Troop.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,59 @@
+//$Id$
+package org.hibernate.ejb.test.cascade;
+
+import java.io.Serializable;
+import java.util.HashSet;
+import java.util.Set;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+
+import org.hibernate.annotations.OrderBy;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Troop implements Serializable {
+	private Integer id;
+	private String name;
+	private Set<Soldier> soldiers;
+
+	@OneToMany(mappedBy = "troop", cascade = {CascadeType.ALL}, fetch = FetchType.LAZY)
+	@OrderBy(clause = "name desc")
+	@org.hibernate.annotations.Cascade({org.hibernate.annotations.CascadeType.DELETE_ORPHAN})
+	public Set<Soldier> getSoldiers() {
+		return soldiers;
+	}
+
+	public void setSoldiers(Set<Soldier> soldiers) {
+		this.soldiers = soldiers;
+	}
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public void addSoldier(Soldier s) {
+		if ( soldiers == null ) soldiers = new HashSet<Soldier>();
+		soldiers.add( s );
+		s.setTroop( this );
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Troop2.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Troop2.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Troop2.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,40 +0,0 @@
-package org.hibernate.ejb.test.cascade;
-
-import java.io.Serializable;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.GeneratedValue;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Troop2 implements Serializable {
-
-	/* FAILS: */
-	@Id
-	@GeneratedValue
-	private Integer id;
-	private String name;
-
-	/* WORKS:
-	@Id
-	@GeneratedValue
-	*/
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Troop2.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Troop2.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Troop2.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/cascade/Troop2.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,40 @@
+package org.hibernate.ejb.test.cascade;
+
+import java.io.Serializable;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Troop2 implements Serializable {
+
+	/* FAILS: */
+	@Id
+	@GeneratedValue
+	private Integer id;
+	private String name;
+
+	/* WORKS:
+	@Id
+	@GeneratedValue
+	*/
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/connection (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/connection)

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/connection/DataSourceInjectionTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/connection/DataSourceInjectionTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/connection/DataSourceInjectionTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,23 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.connection;
-
-import javax.persistence.EntityManagerFactory;
-
-import junit.framework.TestCase;
-import org.hibernate.ejb.HibernatePersistence;
-
-/**
- * @author Emmanuel Bernard
- */
-public class DataSourceInjectionTest extends TestCase {
-	public void testDatasourceInjection() {
-		PersistenceUnitInfoImpl info = new PersistenceUnitInfoImpl( new String[]{} );
-		try {
-			EntityManagerFactory emf = ( new HibernatePersistence() ).createContainerEntityManagerFactory( info, null );
-			fail( "FakeDatasource should have been used" );
-		}
-		catch (FakeDataSourceException fde) {
-			//success
-		}
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/connection/DataSourceInjectionTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/connection/DataSourceInjectionTest.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/connection/DataSourceInjectionTest.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/connection/DataSourceInjectionTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,23 @@
+//$Id$
+package org.hibernate.ejb.test.connection;
+
+import javax.persistence.EntityManagerFactory;
+
+import junit.framework.TestCase;
+import org.hibernate.ejb.HibernatePersistence;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class DataSourceInjectionTest extends TestCase {
+	public void testDatasourceInjection() {
+		PersistenceUnitInfoImpl info = new PersistenceUnitInfoImpl( new String[]{} );
+		try {
+			EntityManagerFactory emf = ( new HibernatePersistence() ).createContainerEntityManagerFactory( info, null );
+			fail( "FakeDatasource should have been used" );
+		}
+		catch (FakeDataSourceException fde) {
+			//success
+		}
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/connection/FakeDataSource.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/connection/FakeDataSource.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/connection/FakeDataSource.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,36 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.connection;
-
-import java.io.PrintWriter;
-import java.sql.Connection;
-import java.sql.SQLException;
-import javax.sql.DataSource;
-
-/**
- * @author Emmanuel Bernard
- */
-public class FakeDataSource implements DataSource {
-	public Connection getConnection() throws SQLException {
-		throw new FakeDataSourceException( "connection" );
-	}
-
-	public Connection getConnection(String username, String password) throws SQLException {
-		throw new FakeDataSourceException( "connection with password" );
-	}
-
-	public PrintWriter getLogWriter() throws SQLException {
-		throw new FakeDataSourceException( "getLogWriter" );
-	}
-
-	public void setLogWriter(PrintWriter out) throws SQLException {
-		throw new FakeDataSourceException( "setLogWriter" );
-	}
-
-	public void setLoginTimeout(int seconds) throws SQLException {
-		throw new FakeDataSourceException( "setLoginTimeout" );
-	}
-
-	public int getLoginTimeout() throws SQLException {
-		throw new FakeDataSourceException( "getLoginTimeout" );
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/connection/FakeDataSource.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/connection/FakeDataSource.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/connection/FakeDataSource.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/connection/FakeDataSource.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,36 @@
+//$Id$
+package org.hibernate.ejb.test.connection;
+
+import java.io.PrintWriter;
+import java.sql.Connection;
+import java.sql.SQLException;
+import javax.sql.DataSource;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class FakeDataSource implements DataSource {
+	public Connection getConnection() throws SQLException {
+		throw new FakeDataSourceException( "connection" );
+	}
+
+	public Connection getConnection(String username, String password) throws SQLException {
+		throw new FakeDataSourceException( "connection with password" );
+	}
+
+	public PrintWriter getLogWriter() throws SQLException {
+		throw new FakeDataSourceException( "getLogWriter" );
+	}
+
+	public void setLogWriter(PrintWriter out) throws SQLException {
+		throw new FakeDataSourceException( "setLogWriter" );
+	}
+
+	public void setLoginTimeout(int seconds) throws SQLException {
+		throw new FakeDataSourceException( "setLoginTimeout" );
+	}
+
+	public int getLoginTimeout() throws SQLException {
+		throw new FakeDataSourceException( "getLoginTimeout" );
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/connection/FakeDataSourceException.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/connection/FakeDataSourceException.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/connection/FakeDataSourceException.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,11 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.connection;
-
-/**
- * @author Emmanuel Bernard
- */
-public class FakeDataSourceException extends RuntimeException {
-	public FakeDataSourceException(String message) {
-		super( message );
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/connection/FakeDataSourceException.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/connection/FakeDataSourceException.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/connection/FakeDataSourceException.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/connection/FakeDataSourceException.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,11 @@
+//$Id$
+package org.hibernate.ejb.test.connection;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class FakeDataSourceException extends RuntimeException {
+	public FakeDataSourceException(String message) {
+		super( message );
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/connection/PersistenceUnitInfoImpl.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/connection/PersistenceUnitInfoImpl.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/connection/PersistenceUnitInfoImpl.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,94 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.connection;
-
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Properties;
-import javax.persistence.spi.ClassTransformer;
-import javax.persistence.spi.PersistenceUnitInfo;
-import javax.persistence.spi.PersistenceUnitTransactionType;
-import javax.sql.DataSource;
-
-import org.hibernate.cfg.Environment;
-import org.hibernate.ejb.HibernatePersistence;
-import org.hibernate.ejb.test.Distributor;
-import org.hibernate.ejb.test.Item;
-import org.hibernate.ejb.test.xml.Light;
-import org.hibernate.ejb.test.xml.Lighter;
-
-/**
- * @author Emmanuel Bernard
- */
-public class PersistenceUnitInfoImpl implements PersistenceUnitInfo {
-	private Properties properties = new Properties();
-	private List<String> mappingFiles;
-
-	public PersistenceUnitInfoImpl(String[] mappingFiles) {
-		this.mappingFiles = new ArrayList<String>( mappingFiles.length );
-		for ( String mappingFile : mappingFiles ) {
-			this.mappingFiles.add( mappingFile );
-		}
-	}
-
-	public String getPersistenceUnitName() {
-		return "persistenceinfo";
-	}
-
-	public String getPersistenceProviderClassName() {
-		return HibernatePersistence.class.getName();
-	}
-
-	public DataSource getJtaDataSource() {
-		return new FakeDataSource();
-	}
-
-	public DataSource getNonJtaDataSource() {
-		return null;
-	}
-
-	public List<String> getMappingFileNames() {
-		return mappingFiles;
-	}
-
-	public List<URL> getJarFileUrls() {
-		return new ArrayList<URL>();
-	}
-
-	public List<String> getManagedClassNames() {
-		List<String> classes = new ArrayList<String>();
-		classes.add( Item.class.getName() );
-		classes.add( Distributor.class.getName() );
-		classes.add( Light.class.getName() );
-		classes.add( Lighter.class.getName() );
-		return classes;
-	}
-
-	public Properties getProperties() {
-		properties.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
-		return properties;
-	}
-
-	public ClassLoader getClassLoader() {
-		return Thread.currentThread().getContextClassLoader();
-	}
-
-	public PersistenceUnitTransactionType getTransactionType() {
-		return null;
-	}
-
-	public URL getPersistenceUnitRootUrl() {
-		return null;
-	}
-
-	public boolean excludeUnlistedClasses() {
-		return true;
-	}
-
-	public void addTransformer(ClassTransformer transformer) {
-	}
-
-	public ClassLoader getNewTempClassLoader() {
-		return Thread.currentThread().getContextClassLoader();
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/connection/PersistenceUnitInfoImpl.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/connection/PersistenceUnitInfoImpl.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/connection/PersistenceUnitInfoImpl.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/connection/PersistenceUnitInfoImpl.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,94 @@
+//$Id$
+package org.hibernate.ejb.test.connection;
+
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+import javax.persistence.spi.ClassTransformer;
+import javax.persistence.spi.PersistenceUnitInfo;
+import javax.persistence.spi.PersistenceUnitTransactionType;
+import javax.sql.DataSource;
+
+import org.hibernate.cfg.Environment;
+import org.hibernate.ejb.HibernatePersistence;
+import org.hibernate.ejb.test.Distributor;
+import org.hibernate.ejb.test.Item;
+import org.hibernate.ejb.test.xml.Light;
+import org.hibernate.ejb.test.xml.Lighter;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class PersistenceUnitInfoImpl implements PersistenceUnitInfo {
+	private Properties properties = new Properties();
+	private List<String> mappingFiles;
+
+	public PersistenceUnitInfoImpl(String[] mappingFiles) {
+		this.mappingFiles = new ArrayList<String>( mappingFiles.length );
+		for ( String mappingFile : mappingFiles ) {
+			this.mappingFiles.add( mappingFile );
+		}
+	}
+
+	public String getPersistenceUnitName() {
+		return "persistenceinfo";
+	}
+
+	public String getPersistenceProviderClassName() {
+		return HibernatePersistence.class.getName();
+	}
+
+	public DataSource getJtaDataSource() {
+		return new FakeDataSource();
+	}
+
+	public DataSource getNonJtaDataSource() {
+		return null;
+	}
+
+	public List<String> getMappingFileNames() {
+		return mappingFiles;
+	}
+
+	public List<URL> getJarFileUrls() {
+		return new ArrayList<URL>();
+	}
+
+	public List<String> getManagedClassNames() {
+		List<String> classes = new ArrayList<String>();
+		classes.add( Item.class.getName() );
+		classes.add( Distributor.class.getName() );
+		classes.add( Light.class.getName() );
+		classes.add( Lighter.class.getName() );
+		return classes;
+	}
+
+	public Properties getProperties() {
+		properties.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
+		return properties;
+	}
+
+	public ClassLoader getClassLoader() {
+		return Thread.currentThread().getContextClassLoader();
+	}
+
+	public PersistenceUnitTransactionType getTransactionType() {
+		return null;
+	}
+
+	public URL getPersistenceUnitRootUrl() {
+		return null;
+	}
+
+	public boolean excludeUnlistedClasses() {
+		return true;
+	}
+
+	public void addTransformer(ClassTransformer transformer) {
+	}
+
+	public ClassLoader getNewTempClassLoader() {
+		return Thread.currentThread().getContextClassLoader();
+	}
+}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration)

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration/EntityManagerSerializationTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration/EntityManagerSerializationTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration/EntityManagerSerializationTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,91 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.ejb3configuration;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutput;
-import java.io.ObjectOutputStream;
-import java.util.Date;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-
-import org.hibernate.ejb.HibernateEntityManager;
-import org.hibernate.ejb.test.Cat;
-import org.hibernate.ejb.test.Distributor;
-import org.hibernate.ejb.test.Item;
-import org.hibernate.ejb.test.Wallet;
-
-/**
- * @author Emmanuel Bernard
- */
-public class EntityManagerSerializationTest extends org.hibernate.ejb.test.TestCase {
-
-	public void testSerialization() throws Exception {
-		ByteArrayOutputStream stream = new ByteArrayOutputStream();
-		ObjectOutput out = new ObjectOutputStream( stream );
-		out.writeObject( factory );
-		out.close();
-		byte[] serialized = stream.toByteArray();
-		stream.close();
-		ByteArrayInputStream byteIn = new ByteArrayInputStream( serialized );
-		ObjectInputStream in = new ObjectInputStream( byteIn );
-		EntityManagerFactory seriallizedFactory = (EntityManagerFactory) in.readObject();
-		in.close();
-		byteIn.close();
-		EntityManager em = seriallizedFactory.createEntityManager();
-		//em.getTransaction().begin();
-		//em.setFlushMode( FlushModeType.NEVER );
-		Cat cat = new Cat();
-		cat.setAge( 3 );
-		cat.setDateOfBirth( new Date() );
-		cat.setLength( 22 );
-		cat.setName( "Kitty" );
-		em.persist( cat );
-		Item item = new Item();
-		item.setName( "Train Ticket" );
-		item.setDescr( "Paris-London" );
-		em.persist( item );
-		//em.getTransaction().commit();
-		//em.getTransaction().begin();
-		item.setDescr( "Paris-Bruxelles" );
-		//em.getTransaction().commit();
-
-		//fake the in container work
-		( (HibernateEntityManager) em ).getSession().disconnect();
-		stream = new ByteArrayOutputStream();
-		out = new ObjectOutputStream( stream );
-		out.writeObject( em );
-		out.close();
-		serialized = stream.toByteArray();
-		stream.close();
-		byteIn = new ByteArrayInputStream( serialized );
-		in = new ObjectInputStream( byteIn );
-		em = (EntityManager) in.readObject();
-		in.close();
-		byteIn.close();
-		//fake the in container work
-		em.getTransaction().begin();
-		item = em.find( Item.class, item.getName() );
-		item.setDescr( item.getDescr() + "-Amsterdam" );
-		cat = (Cat) em.createQuery( "select c from " + Cat.class.getName() + " c" ).getSingleResult();
-		cat.setLength( 34 );
-		em.flush();
-		em.remove( item );
-		em.remove( cat );
-		em.flush();
-		em.getTransaction().commit();
-
-		em.close();
-	}
-
-	public Class[] getAnnotatedClasses() {
-		return new Class[]{
-				Item.class,
-				Distributor.class,
-				Wallet.class,
-				Cat.class
-
-		};
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration/EntityManagerSerializationTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration/EntityManagerSerializationTest.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration/EntityManagerSerializationTest.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration/EntityManagerSerializationTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,91 @@
+//$Id$
+package org.hibernate.ejb.test.ejb3configuration;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutput;
+import java.io.ObjectOutputStream;
+import java.util.Date;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+
+import org.hibernate.ejb.HibernateEntityManager;
+import org.hibernate.ejb.test.Cat;
+import org.hibernate.ejb.test.Distributor;
+import org.hibernate.ejb.test.Item;
+import org.hibernate.ejb.test.Wallet;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class EntityManagerSerializationTest extends org.hibernate.ejb.test.TestCase {
+
+	public void testSerialization() throws Exception {
+		ByteArrayOutputStream stream = new ByteArrayOutputStream();
+		ObjectOutput out = new ObjectOutputStream( stream );
+		out.writeObject( factory );
+		out.close();
+		byte[] serialized = stream.toByteArray();
+		stream.close();
+		ByteArrayInputStream byteIn = new ByteArrayInputStream( serialized );
+		ObjectInputStream in = new ObjectInputStream( byteIn );
+		EntityManagerFactory seriallizedFactory = (EntityManagerFactory) in.readObject();
+		in.close();
+		byteIn.close();
+		EntityManager em = seriallizedFactory.createEntityManager();
+		//em.getTransaction().begin();
+		//em.setFlushMode( FlushModeType.NEVER );
+		Cat cat = new Cat();
+		cat.setAge( 3 );
+		cat.setDateOfBirth( new Date() );
+		cat.setLength( 22 );
+		cat.setName( "Kitty" );
+		em.persist( cat );
+		Item item = new Item();
+		item.setName( "Train Ticket" );
+		item.setDescr( "Paris-London" );
+		em.persist( item );
+		//em.getTransaction().commit();
+		//em.getTransaction().begin();
+		item.setDescr( "Paris-Bruxelles" );
+		//em.getTransaction().commit();
+
+		//fake the in container work
+		( (HibernateEntityManager) em ).getSession().disconnect();
+		stream = new ByteArrayOutputStream();
+		out = new ObjectOutputStream( stream );
+		out.writeObject( em );
+		out.close();
+		serialized = stream.toByteArray();
+		stream.close();
+		byteIn = new ByteArrayInputStream( serialized );
+		in = new ObjectInputStream( byteIn );
+		em = (EntityManager) in.readObject();
+		in.close();
+		byteIn.close();
+		//fake the in container work
+		em.getTransaction().begin();
+		item = em.find( Item.class, item.getName() );
+		item.setDescr( item.getDescr() + "-Amsterdam" );
+		cat = (Cat) em.createQuery( "select c from " + Cat.class.getName() + " c" ).getSingleResult();
+		cat.setLength( 34 );
+		em.flush();
+		em.remove( item );
+		em.remove( cat );
+		em.flush();
+		em.getTransaction().commit();
+
+		em.close();
+	}
+
+	public Class[] getAnnotatedClasses() {
+		return new Class[]{
+				Item.class,
+				Distributor.class,
+				Wallet.class,
+				Cat.class
+
+		};
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration/EventOverridingTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration/EventOverridingTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration/EventOverridingTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,50 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.ejb3configuration;
-
-import java.util.HashMap;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.Persistence;
-
-import org.hibernate.ejb.test.Cat;
-import org.hibernate.ejb.HibernateEntityManagerFactory;
-import org.hibernate.event.EventListeners;
-import org.hibernate.event.PreInsertEventListener;
-import org.hibernate.Session;
-import org.hibernate.engine.SessionImplementor;
-
-/**
- * @author Emmanuel Bernard
- */
-public class EventOverridingTest extends TestCase {
-
-	public void testEventOverriding() throws Exception {
-		EventListeners eventListeners = configuration.getEventListeners();
-		assertEquals( 1, eventListeners.getPreInsertEventListeners().length );
-		eventListeners.setPreInsertEventListeners( new PreInsertEventListener[]{} );
-		Cat cat = new Cat();
-		cat.setLength( 3 );
-		cat.setAge( 34 );
-		cat.setName( "Did" ); //should raise a validation exception
-		EntityManagerFactory entityManagerFactory = configuration.createEntityManagerFactory();
-		EntityManager em = entityManagerFactory.createEntityManager();
-		assertEquals( "only validator should be present", 1,
-				( (SessionImplementor) em.getDelegate() ).getListeners().getPreInsertEventListeners().length);
-		em.close();
-	}
-
-	public void testEventPerProperties() throws Exception {
-		EntityManagerFactory emf = Persistence.createEntityManagerFactory( "manager1", new HashMap() );
-		EntityManager em = emf.createEntityManager();
-		assertEquals( "Only validator should be present", 1,
-				( (SessionImplementor) em.getDelegate() ).getListeners().getPreInsertEventListeners().length);
-		em.close();
-		emf.close();
-	}
-
-	public Class[] getAnnotatedClasses() {
-		return new Class[]{
-				Cat.class
-		};
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration/EventOverridingTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration/EventOverridingTest.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration/EventOverridingTest.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration/EventOverridingTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,50 @@
+//$Id$
+package org.hibernate.ejb.test.ejb3configuration;
+
+import java.util.HashMap;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+
+import org.hibernate.ejb.test.Cat;
+import org.hibernate.ejb.HibernateEntityManagerFactory;
+import org.hibernate.event.EventListeners;
+import org.hibernate.event.PreInsertEventListener;
+import org.hibernate.Session;
+import org.hibernate.engine.SessionImplementor;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class EventOverridingTest extends TestCase {
+
+	public void testEventOverriding() throws Exception {
+		EventListeners eventListeners = configuration.getEventListeners();
+		assertEquals( 1, eventListeners.getPreInsertEventListeners().length );
+		eventListeners.setPreInsertEventListeners( new PreInsertEventListener[]{} );
+		Cat cat = new Cat();
+		cat.setLength( 3 );
+		cat.setAge( 34 );
+		cat.setName( "Did" ); //should raise a validation exception
+		EntityManagerFactory entityManagerFactory = configuration.createEntityManagerFactory();
+		EntityManager em = entityManagerFactory.createEntityManager();
+		assertEquals( "only validator should be present", 1,
+				( (SessionImplementor) em.getDelegate() ).getListeners().getPreInsertEventListeners().length);
+		em.close();
+	}
+
+	public void testEventPerProperties() throws Exception {
+		EntityManagerFactory emf = Persistence.createEntityManagerFactory( "manager1", new HashMap() );
+		EntityManager em = emf.createEntityManager();
+		assertEquals( "Only validator should be present", 1,
+				( (SessionImplementor) em.getDelegate() ).getListeners().getPreInsertEventListeners().length);
+		em.close();
+		emf.close();
+	}
+
+	public Class[] getAnnotatedClasses() {
+		return new Class[]{
+				Cat.class
+		};
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration/ExceptionInterceptor.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration/ExceptionInterceptor.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration/ExceptionInterceptor.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,99 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.ejb3configuration;
-
-import java.io.Serializable;
-import java.util.Iterator;
-
-import org.hibernate.CallbackException;
-import org.hibernate.EntityMode;
-import org.hibernate.Interceptor;
-import org.hibernate.Transaction;
-import org.hibernate.type.Type;
-
-/**
- * @author Emmanuel Bernard
- */
-public class ExceptionInterceptor implements Interceptor {
-	public static final String EXCEPTION_MESSAGE = "Interceptor enabled";
-
-	public boolean onLoad(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types)
-			throws CallbackException {
-		return false;  //To change body of implemented methods use File | Settings | File Templates.
-	}
-
-	public boolean onFlushDirty(
-			Object entity, Serializable id, Object[] currentState, Object[] previousState, String[] propertyNames,
-			Type[] types
-	) throws CallbackException {
-		return false;  //To change body of implemented methods use File | Settings | File Templates.
-	}
-
-	public boolean onSave(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types)
-			throws CallbackException {
-		throw new IllegalStateException( EXCEPTION_MESSAGE );
-	}
-
-	public void onDelete(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types)
-			throws CallbackException {
-		//To change body of implemented methods use File | Settings | File Templates.
-	}
-
-	public void onCollectionRecreate(Object collection, Serializable key) throws CallbackException {
-		//To change body of implemented methods use File | Settings | File Templates.
-	}
-
-	public void onCollectionRemove(Object collection, Serializable key) throws CallbackException {
-		//To change body of implemented methods use File | Settings | File Templates.
-	}
-
-	public void onCollectionUpdate(Object collection, Serializable key) throws CallbackException {
-		//To change body of implemented methods use File | Settings | File Templates.
-	}
-
-	public void preFlush(Iterator entities) throws CallbackException {
-		//To change body of implemented methods use File | Settings | File Templates.
-	}
-
-	public void postFlush(Iterator entities) throws CallbackException {
-		//To change body of implemented methods use File | Settings | File Templates.
-	}
-
-	public Boolean isTransient(Object entity) {
-		return null;  //To change body of implemented methods use File | Settings | File Templates.
-	}
-
-	public int[] findDirty(
-			Object entity, Serializable id, Object[] currentState, Object[] previousState, String[] propertyNames,
-			Type[] types
-	) {
-		return new int[0];  //To change body of implemented methods use File | Settings | File Templates.
-	}
-
-	public Object instantiate(String entityName, EntityMode entityMode, Serializable id) throws CallbackException {
-		return null;  //To change body of implemented methods use File | Settings | File Templates.
-	}
-
-	public String getEntityName(Object object) throws CallbackException {
-		return null;  //To change body of implemented methods use File | Settings | File Templates.
-	}
-
-	public Object getEntity(String entityName, Serializable id) throws CallbackException {
-		return null;  //To change body of implemented methods use File | Settings | File Templates.
-	}
-
-	public void afterTransactionBegin(Transaction tx) {
-		//To change body of implemented methods use File | Settings | File Templates.
-	}
-
-	public void beforeTransactionCompletion(Transaction tx) {
-		//To change body of implemented methods use File | Settings | File Templates.
-	}
-
-	public void afterTransactionCompletion(Transaction tx) {
-		//To change body of implemented methods use File | Settings | File Templates.
-	}
-
-	public String onPrepareStatement(String sql) {
-		return null;  //To change body of implemented methods use File | Settings | File Templates.
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration/ExceptionInterceptor.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration/ExceptionInterceptor.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration/ExceptionInterceptor.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration/ExceptionInterceptor.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,99 @@
+//$Id$
+package org.hibernate.ejb.test.ejb3configuration;
+
+import java.io.Serializable;
+import java.util.Iterator;
+
+import org.hibernate.CallbackException;
+import org.hibernate.EntityMode;
+import org.hibernate.Interceptor;
+import org.hibernate.Transaction;
+import org.hibernate.type.Type;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class ExceptionInterceptor implements Interceptor {
+	public static final String EXCEPTION_MESSAGE = "Interceptor enabled";
+
+	public boolean onLoad(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types)
+			throws CallbackException {
+		return false;  //To change body of implemented methods use File | Settings | File Templates.
+	}
+
+	public boolean onFlushDirty(
+			Object entity, Serializable id, Object[] currentState, Object[] previousState, String[] propertyNames,
+			Type[] types
+	) throws CallbackException {
+		return false;  //To change body of implemented methods use File | Settings | File Templates.
+	}
+
+	public boolean onSave(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types)
+			throws CallbackException {
+		throw new IllegalStateException( EXCEPTION_MESSAGE );
+	}
+
+	public void onDelete(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types)
+			throws CallbackException {
+		//To change body of implemented methods use File | Settings | File Templates.
+	}
+
+	public void onCollectionRecreate(Object collection, Serializable key) throws CallbackException {
+		//To change body of implemented methods use File | Settings | File Templates.
+	}
+
+	public void onCollectionRemove(Object collection, Serializable key) throws CallbackException {
+		//To change body of implemented methods use File | Settings | File Templates.
+	}
+
+	public void onCollectionUpdate(Object collection, Serializable key) throws CallbackException {
+		//To change body of implemented methods use File | Settings | File Templates.
+	}
+
+	public void preFlush(Iterator entities) throws CallbackException {
+		//To change body of implemented methods use File | Settings | File Templates.
+	}
+
+	public void postFlush(Iterator entities) throws CallbackException {
+		//To change body of implemented methods use File | Settings | File Templates.
+	}
+
+	public Boolean isTransient(Object entity) {
+		return null;  //To change body of implemented methods use File | Settings | File Templates.
+	}
+
+	public int[] findDirty(
+			Object entity, Serializable id, Object[] currentState, Object[] previousState, String[] propertyNames,
+			Type[] types
+	) {
+		return new int[0];  //To change body of implemented methods use File | Settings | File Templates.
+	}
+
+	public Object instantiate(String entityName, EntityMode entityMode, Serializable id) throws CallbackException {
+		return null;  //To change body of implemented methods use File | Settings | File Templates.
+	}
+
+	public String getEntityName(Object object) throws CallbackException {
+		return null;  //To change body of implemented methods use File | Settings | File Templates.
+	}
+
+	public Object getEntity(String entityName, Serializable id) throws CallbackException {
+		return null;  //To change body of implemented methods use File | Settings | File Templates.
+	}
+
+	public void afterTransactionBegin(Transaction tx) {
+		//To change body of implemented methods use File | Settings | File Templates.
+	}
+
+	public void beforeTransactionCompletion(Transaction tx) {
+		//To change body of implemented methods use File | Settings | File Templates.
+	}
+
+	public void afterTransactionCompletion(Transaction tx) {
+		//To change body of implemented methods use File | Settings | File Templates.
+	}
+
+	public String onPrepareStatement(String sql) {
+		return null;  //To change body of implemented methods use File | Settings | File Templates.
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration/InterceptorTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration/InterceptorTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration/InterceptorTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,87 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.ejb3configuration;
-
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-
-import org.hibernate.ejb.HibernatePersistence;
-import org.hibernate.ejb.test.Distributor;
-import org.hibernate.ejb.test.Item;
-
-/**
- * @author Emmanuel Bernard
- */
-public class InterceptorTest extends TestCase {
-
-	public void testInjectedInterceptor() {
-		configuration.setInterceptor( new ExceptionInterceptor() );
-		EntityManagerFactory emf = configuration.createEntityManagerFactory();
-		EntityManager em = emf.createEntityManager();
-		Item i = new Item();
-		i.setName( "Laptop" );
-		try {
-			em.getTransaction().begin();
-			em.persist( i );
-			em.getTransaction().commit();
-		}
-		catch (IllegalStateException e) {
-			assertEquals( ExceptionInterceptor.EXCEPTION_MESSAGE, e.getMessage() );
-		}
-		finally {
-			if ( em.getTransaction() != null && em.getTransaction().isActive() ) em.getTransaction().rollback();
-			em.close();
-			emf.close();
-		}
-	}
-
-	public void testConfiguredInterceptor() {
-		configuration.setProperty( HibernatePersistence.INTERCEPTOR, ExceptionInterceptor.class.getName() );
-		EntityManagerFactory emf = configuration.createEntityManagerFactory();
-		EntityManager em = emf.createEntityManager();
-		Item i = new Item();
-		i.setName( "Laptop" );
-		try {
-			em.getTransaction().begin();
-			em.persist( i );
-			em.getTransaction().commit();
-			fail( "No interceptor" );
-		}
-		catch (IllegalStateException e) {
-			assertEquals( ExceptionInterceptor.EXCEPTION_MESSAGE, e.getMessage() );
-		}
-		finally {
-			if ( em.getTransaction() != null && em.getTransaction().isActive() ) em.getTransaction().rollback();
-			em.close();
-			emf.close();
-		}
-	}
-
-	public void testEmptyCreateEntityManagerFactoryAndPropertyUse() {
-		configuration.setProperty( HibernatePersistence.INTERCEPTOR, ExceptionInterceptor.class.getName() );
-		EntityManagerFactory emf = configuration.createEntityManagerFactory();
-		EntityManager em = emf.createEntityManager();
-		Item i = new Item();
-		i.setName( "Laptop" );
-		try {
-			em.getTransaction().begin();
-			em.persist( i );
-			em.getTransaction().commit();
-			fail( "No interceptor" );
-		}
-		catch (IllegalStateException e) {
-			assertEquals( ExceptionInterceptor.EXCEPTION_MESSAGE, e.getMessage() );
-		}
-		finally {
-			if ( em.getTransaction() != null && em.getTransaction().isActive() ) em.getTransaction().rollback();
-			em.close();
-			emf.close();
-		}
-	}
-
-	public Class[] getAnnotatedClasses() {
-		return new Class[]{
-				Item.class,
-				Distributor.class
-		};
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration/InterceptorTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration/InterceptorTest.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration/InterceptorTest.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration/InterceptorTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,87 @@
+//$Id$
+package org.hibernate.ejb.test.ejb3configuration;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+
+import org.hibernate.ejb.HibernatePersistence;
+import org.hibernate.ejb.test.Distributor;
+import org.hibernate.ejb.test.Item;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class InterceptorTest extends TestCase {
+
+	public void testInjectedInterceptor() {
+		configuration.setInterceptor( new ExceptionInterceptor() );
+		EntityManagerFactory emf = configuration.createEntityManagerFactory();
+		EntityManager em = emf.createEntityManager();
+		Item i = new Item();
+		i.setName( "Laptop" );
+		try {
+			em.getTransaction().begin();
+			em.persist( i );
+			em.getTransaction().commit();
+		}
+		catch (IllegalStateException e) {
+			assertEquals( ExceptionInterceptor.EXCEPTION_MESSAGE, e.getMessage() );
+		}
+		finally {
+			if ( em.getTransaction() != null && em.getTransaction().isActive() ) em.getTransaction().rollback();
+			em.close();
+			emf.close();
+		}
+	}
+
+	public void testConfiguredInterceptor() {
+		configuration.setProperty( HibernatePersistence.INTERCEPTOR, ExceptionInterceptor.class.getName() );
+		EntityManagerFactory emf = configuration.createEntityManagerFactory();
+		EntityManager em = emf.createEntityManager();
+		Item i = new Item();
+		i.setName( "Laptop" );
+		try {
+			em.getTransaction().begin();
+			em.persist( i );
+			em.getTransaction().commit();
+			fail( "No interceptor" );
+		}
+		catch (IllegalStateException e) {
+			assertEquals( ExceptionInterceptor.EXCEPTION_MESSAGE, e.getMessage() );
+		}
+		finally {
+			if ( em.getTransaction() != null && em.getTransaction().isActive() ) em.getTransaction().rollback();
+			em.close();
+			emf.close();
+		}
+	}
+
+	public void testEmptyCreateEntityManagerFactoryAndPropertyUse() {
+		configuration.setProperty( HibernatePersistence.INTERCEPTOR, ExceptionInterceptor.class.getName() );
+		EntityManagerFactory emf = configuration.createEntityManagerFactory();
+		EntityManager em = emf.createEntityManager();
+		Item i = new Item();
+		i.setName( "Laptop" );
+		try {
+			em.getTransaction().begin();
+			em.persist( i );
+			em.getTransaction().commit();
+			fail( "No interceptor" );
+		}
+		catch (IllegalStateException e) {
+			assertEquals( ExceptionInterceptor.EXCEPTION_MESSAGE, e.getMessage() );
+		}
+		finally {
+			if ( em.getTransaction() != null && em.getTransaction().isActive() ) em.getTransaction().rollback();
+			em.close();
+			emf.close();
+		}
+	}
+
+	public Class[] getAnnotatedClasses() {
+		return new Class[]{
+				Item.class,
+				Distributor.class
+		};
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration/ProgrammaticConfTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration/ProgrammaticConfTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration/ProgrammaticConfTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,58 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.ejb3configuration;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Date;
-import java.util.Properties;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-
-import org.hibernate.cfg.Environment;
-import org.hibernate.ejb.Ejb3Configuration;
-import org.hibernate.ejb.test.Cat;
-import org.hibernate.util.ConfigHelper;
-
-/**
- * @author Emmanuel Bernard
- */
-public class ProgrammaticConfTest extends junit.framework.TestCase {
-
-	public void testProgrammaticAPI() throws Exception {
-		Ejb3Configuration conf = new Ejb3Configuration();
-		conf.addAnnotatedClass( Cat.class );
-		EntityManagerFactory emf = conf.buildEntityManagerFactory();
-		EntityManager em = emf.createEntityManager();
-		Cat cat = new Cat();
-		cat.setAge( 23 );
-		cat.setDateOfBirth( new Date() );
-		cat.setLength( 32 );
-		cat.setName( "Tomy" );
-		em.getTransaction().begin();
-		em.persist( cat );
-		em.flush();
-		assertNotNull( em.find(Cat.class, cat.getId() ) );
-		em.getTransaction().rollback();
-		emf.close();
-	}
-
-	protected Properties getProperties() throws IOException {
-		Properties properties = new Properties( );
-		InputStream stream = ConfigHelper.getResourceAsStream("/hibernate.properties");
-		try {
-			properties.load(stream);
-		}
-
-		finally {
-			try{
-				stream.close();
-			}
-			catch (IOException ioe){
-			}
-		}
-		properties.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
-		return properties;
-	}
-
-
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration/ProgrammaticConfTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration/ProgrammaticConfTest.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration/ProgrammaticConfTest.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration/ProgrammaticConfTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,58 @@
+//$Id: $
+package org.hibernate.ejb.test.ejb3configuration;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Date;
+import java.util.Properties;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+
+import org.hibernate.cfg.Environment;
+import org.hibernate.ejb.Ejb3Configuration;
+import org.hibernate.ejb.test.Cat;
+import org.hibernate.util.ConfigHelper;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class ProgrammaticConfTest extends junit.framework.TestCase {
+
+	public void testProgrammaticAPI() throws Exception {
+		Ejb3Configuration conf = new Ejb3Configuration();
+		conf.addAnnotatedClass( Cat.class );
+		EntityManagerFactory emf = conf.buildEntityManagerFactory();
+		EntityManager em = emf.createEntityManager();
+		Cat cat = new Cat();
+		cat.setAge( 23 );
+		cat.setDateOfBirth( new Date() );
+		cat.setLength( 32 );
+		cat.setName( "Tomy" );
+		em.getTransaction().begin();
+		em.persist( cat );
+		em.flush();
+		assertNotNull( em.find(Cat.class, cat.getId() ) );
+		em.getTransaction().rollback();
+		emf.close();
+	}
+
+	protected Properties getProperties() throws IOException {
+		Properties properties = new Properties( );
+		InputStream stream = ConfigHelper.getResourceAsStream("/hibernate.properties");
+		try {
+			properties.load(stream);
+		}
+
+		finally {
+			try{
+				stream.close();
+			}
+			catch (IOException ioe){
+			}
+		}
+		properties.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
+		return properties;
+	}
+
+
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration/TestCase.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration/TestCase.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration/TestCase.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,105 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.ejb3configuration;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Properties;
-import javax.persistence.Persistence;
-
-import org.hibernate.cfg.Environment;
-import org.hibernate.ejb.Ejb3Configuration;
-import org.hibernate.ejb.HibernatePersistence;
-
-/**
- * @author Emmanuel Bernard
- */
-public abstract class TestCase extends junit.framework.TestCase {
-	protected Ejb3Configuration configuration;
-	private Class lastTestClass;
-
-	public TestCase() {
-		super();
-	}
-
-	public TestCase(String name) {
-		super( name );
-	}
-
-	public void setUp() {
-		if ( configuration == null || lastTestClass != getClass() ) {
-			buildConfiguration();
-			lastTestClass = getClass();
-		}
-		//factory = new HibernatePersistence().createEntityManagerFactory( getConfig() );
-	}
-
-	protected boolean recreateSchema() {
-		return true;
-	}
-
-	;
-
-	private void buildConfiguration() {
-		configuration = new Ejb3Configuration();
-		configuration.addProperties( loadProperties() );
-		if ( recreateSchema() ) {
-			configuration.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
-		}
-
-		for ( Class clazz : getAnnotatedClasses() ) {
-			configuration.addAnnotatedClass( clazz );
-		}
-
-		for ( Map.Entry<Class, String> entry : getCachedClasses().entrySet() ) {
-			configuration.setProperty(
-					HibernatePersistence.CLASS_CACHE_PREFIX + "." + entry.getKey().getName(),
-					entry.getValue()
-			);
-		}
-		for ( Map.Entry<String, String> entry : getCachedCollections().entrySet() ) {
-			configuration.setProperty(
-					HibernatePersistence.COLLECTION_CACHE_PREFIX + "." + entry.getKey(),
-					entry.getValue()
-			);
-		}
-	}
-
-	public abstract Class[] getAnnotatedClasses();
-
-	public Map<Class, String> getCachedClasses() {
-		return new HashMap<Class, String>();
-	}
-
-	public Map<String, String> getCachedCollections() {
-		return new HashMap<String, String>();
-	}
-
-	public static Properties loadProperties() {
-		Properties props = new Properties();
-		InputStream stream = Persistence.class.getResourceAsStream( "/hibernate.properties" );
-		if ( stream != null ) {
-			try {
-				props.load( stream );
-			}
-			catch (Exception e) {
-				throw new RuntimeException( "could not load hibernate.properties" );
-			}
-			finally {
-				try {
-					stream.close();
-				}
-				catch (IOException ioe) {
-				}
-			}
-		}
-		return props;
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		super.tearDown();
-		configuration = null; //avoid side effects
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration/TestCase.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration/TestCase.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration/TestCase.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ejb3configuration/TestCase.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,105 @@
+//$Id$
+package org.hibernate.ejb.test.ejb3configuration;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+import javax.persistence.Persistence;
+
+import org.hibernate.cfg.Environment;
+import org.hibernate.ejb.Ejb3Configuration;
+import org.hibernate.ejb.HibernatePersistence;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public abstract class TestCase extends junit.framework.TestCase {
+	protected Ejb3Configuration configuration;
+	private Class lastTestClass;
+
+	public TestCase() {
+		super();
+	}
+
+	public TestCase(String name) {
+		super( name );
+	}
+
+	public void setUp() {
+		if ( configuration == null || lastTestClass != getClass() ) {
+			buildConfiguration();
+			lastTestClass = getClass();
+		}
+		//factory = new HibernatePersistence().createEntityManagerFactory( getConfig() );
+	}
+
+	protected boolean recreateSchema() {
+		return true;
+	}
+
+	;
+
+	private void buildConfiguration() {
+		configuration = new Ejb3Configuration();
+		configuration.addProperties( loadProperties() );
+		if ( recreateSchema() ) {
+			configuration.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
+		}
+
+		for ( Class clazz : getAnnotatedClasses() ) {
+			configuration.addAnnotatedClass( clazz );
+		}
+
+		for ( Map.Entry<Class, String> entry : getCachedClasses().entrySet() ) {
+			configuration.setProperty(
+					HibernatePersistence.CLASS_CACHE_PREFIX + "." + entry.getKey().getName(),
+					entry.getValue()
+			);
+		}
+		for ( Map.Entry<String, String> entry : getCachedCollections().entrySet() ) {
+			configuration.setProperty(
+					HibernatePersistence.COLLECTION_CACHE_PREFIX + "." + entry.getKey(),
+					entry.getValue()
+			);
+		}
+	}
+
+	public abstract Class[] getAnnotatedClasses();
+
+	public Map<Class, String> getCachedClasses() {
+		return new HashMap<Class, String>();
+	}
+
+	public Map<String, String> getCachedCollections() {
+		return new HashMap<String, String>();
+	}
+
+	public static Properties loadProperties() {
+		Properties props = new Properties();
+		InputStream stream = Persistence.class.getResourceAsStream( "/hibernate.properties" );
+		if ( stream != null ) {
+			try {
+				props.load( stream );
+			}
+			catch (Exception e) {
+				throw new RuntimeException( "could not load hibernate.properties" );
+			}
+			finally {
+				try {
+					stream.close();
+				}
+				catch (IOException ioe) {
+				}
+			}
+		}
+		return props;
+	}
+
+	@Override
+	protected void tearDown() throws Exception {
+		super.tearDown();
+		configuration = null; //avoid side effects
+	}
+}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops)

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Cat.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Cat.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Cat.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,20 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.emops;
-
-import javax.persistence.Entity;
-import javax.persistence.Inheritance;
-import javax.persistence.InheritanceType;
-
- at Entity
- at Inheritance( strategy = InheritanceType.JOINED )
-public class Cat extends Pet {
-	int lives;
-
-	public int getLives() {
-		return lives;
-	}
-
-	public void setLives(int lives) {
-		this.lives = lives;
-	}
-}
\ No newline at end of file

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Cat.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Cat.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Cat.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Cat.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,20 @@
+//$Id: $
+package org.hibernate.ejb.test.emops;
+
+import javax.persistence.Entity;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+
+ at Entity
+ at Inheritance( strategy = InheritanceType.JOINED )
+public class Cat extends Pet {
+	int lives;
+
+	public int getLives() {
+		return lives;
+	}
+
+	public void setLives(int lives) {
+		this.lives = lives;
+	}
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Colony.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Colony.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Colony.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,25 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.emops;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.GeneratedValue;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Colony {
-	@Id
-	@GeneratedValue
-	private Long id;
-
-
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Colony.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Colony.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Colony.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Colony.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,25 @@
+//$Id: $
+package org.hibernate.ejb.test.emops;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Colony {
+	@Id
+	@GeneratedValue
+	private Long id;
+
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Competition.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Competition.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Competition.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,47 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.emops;
-
-import java.util.Collection;
-import java.util.ArrayList;
-import java.util.List;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.GeneratedValue;
-import javax.persistence.ManyToMany;
-import javax.persistence.CascadeType;
-import javax.persistence.FetchType;
-import javax.persistence.JoinTable;
-import javax.persistence.JoinColumn;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Competition {
-	@Id
-	@GeneratedValue
-	private Integer id;
-
-	@ManyToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE },
-			fetch = FetchType.LAZY)
-	@JoinTable(name="competition_competitor")
-	@JoinColumn
-	private List<Competitor> competitors = new ArrayList<Competitor>();
-
-
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public List<Competitor> getCompetitors() {
-		return competitors;
-	}
-
-	public void setCompetitors(List<Competitor> competitors) {
-		this.competitors = competitors;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Competition.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Competition.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Competition.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Competition.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,47 @@
+//$Id: $
+package org.hibernate.ejb.test.emops;
+
+import java.util.Collection;
+import java.util.ArrayList;
+import java.util.List;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+import javax.persistence.ManyToMany;
+import javax.persistence.CascadeType;
+import javax.persistence.FetchType;
+import javax.persistence.JoinTable;
+import javax.persistence.JoinColumn;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Competition {
+	@Id
+	@GeneratedValue
+	private Integer id;
+
+	@ManyToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE },
+			fetch = FetchType.LAZY)
+	@JoinTable(name="competition_competitor")
+	@JoinColumn
+	private List<Competitor> competitors = new ArrayList<Competitor>();
+
+
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public List<Competitor> getCompetitors() {
+		return competitors;
+	}
+
+	public void setCompetitors(List<Competitor> competitors) {
+		this.competitors = competitors;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Competitor.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Competitor.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Competitor.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,39 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.emops;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.GeneratedValue;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Competitor {
-	@Id @GeneratedValue public Integer id;
-	private String name;
-
-
-	public Competitor() {
-	}
-
-	public Competitor(String name) {
-		this.name = name;
-	}
-
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Competitor.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Competitor.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Competitor.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Competitor.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,39 @@
+//$Id: $
+package org.hibernate.ejb.test.emops;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Competitor {
+	@Id @GeneratedValue public Integer id;
+	private String name;
+
+
+	public Competitor() {
+	}
+
+	public Competitor(String name) {
+		this.name = name;
+	}
+
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Decorate.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Decorate.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Decorate.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,51 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.emops;
-
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.OneToOne;
-
- at Entity
-public class Decorate implements java.io.Serializable {
-
-	private int id;
-
-	private String name;
-
-	private Pet pet;
-
-	public Decorate() {
-		super();
-
-	}
-
-	@Id
-	@GeneratedValue( strategy = GenerationType.AUTO )
-	public int getId() {
-		return id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	@OneToOne( fetch = FetchType.LAZY )
-	public Pet getPet() {
-		return pet;
-	}
-
-	public void setId(int id) {
-		this.id = id;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	public void setPet(Pet pet) {
-		this.pet = pet;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Decorate.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Decorate.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Decorate.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Decorate.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,51 @@
+//$Id: $
+package org.hibernate.ejb.test.emops;
+
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.OneToOne;
+
+ at Entity
+public class Decorate implements java.io.Serializable {
+
+	private int id;
+
+	private String name;
+
+	private Pet pet;
+
+	public Decorate() {
+		super();
+
+	}
+
+	@Id
+	@GeneratedValue( strategy = GenerationType.AUTO )
+	public int getId() {
+		return id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	@OneToOne( fetch = FetchType.LAZY )
+	public Pet getPet() {
+		return pet;
+	}
+
+	public void setId(int id) {
+		this.id = id;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public void setPet(Pet pet) {
+		this.pet = pet;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Dog.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Dog.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Dog.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,20 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.emops;
-
-import javax.persistence.Entity;
-import javax.persistence.Inheritance;
-import javax.persistence.InheritanceType;
-
- at Entity
- at Inheritance( strategy = InheritanceType.JOINED )
-public class Dog extends Pet {
-	private int numBones;
-
-	public int getNumBones() {
-		return numBones;
-	}
-
-	public void setNumBones(int numBones) {
-		this.numBones = numBones;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Dog.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Dog.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Dog.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Dog.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,20 @@
+//$Id: $
+package org.hibernate.ejb.test.emops;
+
+import javax.persistence.Entity;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+
+ at Entity
+ at Inheritance( strategy = InheritanceType.JOINED )
+public class Dog extends Pet {
+	private int numBones;
+
+	public int getNumBones() {
+		return numBones;
+	}
+
+	public void setNumBones(int numBones) {
+		this.numBones = numBones;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Dress.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Dress.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Dress.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,14 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.emops;
-
-import javax.persistence.Id;
-import javax.persistence.Entity;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Dress {
-	@Id public String name;
-
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Dress.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Dress.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Dress.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Dress.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,14 @@
+//$Id: $
+package org.hibernate.ejb.test.emops;
+
+import javax.persistence.Id;
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Dress {
+	@Id public String name;
+
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Empire.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Empire.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Empire.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,39 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.emops;
-
-import java.util.HashSet;
-import java.util.Set;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.GeneratedValue;
-import javax.persistence.OneToMany;
-import javax.persistence.CascadeType;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Empire {
-	@Id
-	@GeneratedValue
-	private Long id;
-
-	@OneToMany(cascade= CascadeType.ALL )
-	private Set<Colony> colonies = new HashSet<Colony>();
-
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-
-	public Set<Colony> getColonies() {
-		return colonies;
-	}
-
-	public void setColonies(Set<Colony> colonies) {
-		this.colonies = colonies;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Empire.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Empire.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Empire.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Empire.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,39 @@
+//$Id: $
+package org.hibernate.ejb.test.emops;
+
+import java.util.HashSet;
+import java.util.Set;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+import javax.persistence.OneToMany;
+import javax.persistence.CascadeType;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Empire {
+	@Id
+	@GeneratedValue
+	private Long id;
+
+	@OneToMany(cascade= CascadeType.ALL )
+	private Set<Colony> colonies = new HashSet<Colony>();
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public Set<Colony> getColonies() {
+		return colonies;
+	}
+
+	public void setColonies(Set<Colony> colonies) {
+		this.colonies = colonies;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/FlushModeTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/FlushModeTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/FlushModeTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,39 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.emops;
-
-import java.util.Map;
-import java.util.HashMap;
-import javax.persistence.EntityManager;
-
-import org.hibernate.ejb.test.TestCase;
-
-/**
- * @author Emmanuel Bernard
- */
-public class FlushModeTest extends TestCase {
-
-	public void testCreateEMFlushMode() throws Exception {
-		Map properties = new HashMap();
-		properties.put( "org.hibernate.flushMode", "manual" );
-		EntityManager em = factory.createEntityManager( properties );
-		em.getTransaction().begin();
-		Dress dress = new Dress();
-		dress.name  = "long dress";
-		em.persist( dress );
-		em.getTransaction().commit();
-
-		em.clear();
-
-		assertNull( em.find( Dress.class, dress.name ) );
-
-		em.close();
-	}
-
-	public Class[] getAnnotatedClasses() {
-		return new Class[] {
-				Race.class,
-				Competitor.class,
-				Dress.class
-		};
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/FlushModeTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/FlushModeTest.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/FlushModeTest.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/FlushModeTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,39 @@
+//$Id: $
+package org.hibernate.ejb.test.emops;
+
+import java.util.Map;
+import java.util.HashMap;
+import javax.persistence.EntityManager;
+
+import org.hibernate.ejb.test.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class FlushModeTest extends TestCase {
+
+	public void testCreateEMFlushMode() throws Exception {
+		Map properties = new HashMap();
+		properties.put( "org.hibernate.flushMode", "manual" );
+		EntityManager em = factory.createEntityManager( properties );
+		em.getTransaction().begin();
+		Dress dress = new Dress();
+		dress.name  = "long dress";
+		em.persist( dress );
+		em.getTransaction().commit();
+
+		em.clear();
+
+		assertNull( em.find( Dress.class, dress.name ) );
+
+		em.close();
+	}
+
+	public Class[] getAnnotatedClasses() {
+		return new Class[] {
+				Race.class,
+				Competitor.class,
+				Dress.class
+		};
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/FlushTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/FlushTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/FlushTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,124 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.emops;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Set;
-import java.util.HashSet;
-
-import javax.persistence.Query;
-import javax.persistence.EntityManager;
-
-import org.hibernate.ejb.test.TestCase;
-
-/**
- * @author Emmanuel Bernard
- */
-public class FlushTest extends TestCase {
-	private static Set<String> names= new HashSet<String>();
-	static {
-		names.add("Toonses");
-		names.add("Sox");
-		names.add("Winnie");
-		names.add("Junior");
-	}
-
-	//Test for EJBTHREE-722
-	public void testFlushOnDetached() throws Exception {
-		EntityManager manager = factory.createEntityManager( );
-
-		manager.getTransaction().begin();
-		Pet p1 = createCat("Toonses", 15.0, 9, manager);
-		manager.flush();
-		manager.clear();
-
-		Pet p2 = createCat("Sox", 10.0, 5, manager);
-		manager.flush();
-		manager.clear();
-
-		Pet p3 = createDog("Winnie", 70.0, 5, manager);
-		manager.flush();
-		manager.clear();
-
-		Pet p4 = createDog("Junior", 11.0, 1, manager);
-		manager.flush();
-		manager.clear();
-
-		Decorate d1 = createDecorate("Test", p1, manager);
-		manager.flush();
-		manager.clear();
-
-		Decorate d2 = createDecorate("Test2", p2, manager);
-		manager.flush();
-		manager.clear();
-
-		List l = findByWeight(14.0, manager);
-		manager.flush();
-		manager.clear();
-		for (Object o : l) {
-			assertTrue( names.contains( ( (Pet) o).getName() ) );
-		}
-
-		Collection<Decorate> founds = getDecorate(manager);
-		manager.flush();
-		manager.clear();
-		for (Decorate value : founds) {
-			assertTrue( names.contains( value.getPet().getName() ) );
-		}
-		
-	}
-
-	public Dog createDog(String name, double weight, int bones, EntityManager manager) {
-		Dog dog = new Dog();
-		dog.setName(name);
-		dog.setWeight(weight);
-		dog.setNumBones(bones);
-		manager.persist(dog);
-		return dog;
-	}
-
-	public Cat createCat(String name, double weight, int lives, EntityManager manager) {
-		Cat cat = new Cat();
-		cat.setName(name);
-		cat.setWeight(weight);
-		cat.setLives(lives);
-		manager.persist(cat);
-		return cat;
-	}
-
-	public List findByWeight(double weight, EntityManager manager) {
-		return manager.createQuery(
-				"select p from Pet p where p.weight < :weight").setParameter(
-				"weight", weight).getResultList();
-	}
-
-	public Decorate createDecorate(String name, Pet pet, EntityManager manager) {
-		Decorate dec = new Decorate();
-		dec.setName(name);
-		dec.setPet(pet);
-		manager.persist(dec);
-		return dec;
-	}
-
-	public Collection<Decorate> getDecorate(EntityManager manager) {
-		Collection<Decorate> founds = new ArrayList<Decorate>();
-		Query query = manager.createQuery("SELECT o FROM Decorate o");
-		List list = query.getResultList();
-		for (Object obj : list) {
-			if (obj instanceof Decorate) {
-				founds.add((Decorate) obj);
-			}
-		}
-		return founds;
-	}
-
-	public Class[] getAnnotatedClasses() {
-		return new Class[] {
-				Pet.class,
-				Dog.class,
-				Cat.class,
-				Decorate.class
-		};
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/FlushTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/FlushTest.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/FlushTest.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/FlushTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,124 @@
+//$Id: $
+package org.hibernate.ejb.test.emops;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Set;
+import java.util.HashSet;
+
+import javax.persistence.Query;
+import javax.persistence.EntityManager;
+
+import org.hibernate.ejb.test.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class FlushTest extends TestCase {
+	private static Set<String> names= new HashSet<String>();
+	static {
+		names.add("Toonses");
+		names.add("Sox");
+		names.add("Winnie");
+		names.add("Junior");
+	}
+
+	//Test for EJBTHREE-722
+	public void testFlushOnDetached() throws Exception {
+		EntityManager manager = factory.createEntityManager( );
+
+		manager.getTransaction().begin();
+		Pet p1 = createCat("Toonses", 15.0, 9, manager);
+		manager.flush();
+		manager.clear();
+
+		Pet p2 = createCat("Sox", 10.0, 5, manager);
+		manager.flush();
+		manager.clear();
+
+		Pet p3 = createDog("Winnie", 70.0, 5, manager);
+		manager.flush();
+		manager.clear();
+
+		Pet p4 = createDog("Junior", 11.0, 1, manager);
+		manager.flush();
+		manager.clear();
+
+		Decorate d1 = createDecorate("Test", p1, manager);
+		manager.flush();
+		manager.clear();
+
+		Decorate d2 = createDecorate("Test2", p2, manager);
+		manager.flush();
+		manager.clear();
+
+		List l = findByWeight(14.0, manager);
+		manager.flush();
+		manager.clear();
+		for (Object o : l) {
+			assertTrue( names.contains( ( (Pet) o).getName() ) );
+		}
+
+		Collection<Decorate> founds = getDecorate(manager);
+		manager.flush();
+		manager.clear();
+		for (Decorate value : founds) {
+			assertTrue( names.contains( value.getPet().getName() ) );
+		}
+		
+	}
+
+	public Dog createDog(String name, double weight, int bones, EntityManager manager) {
+		Dog dog = new Dog();
+		dog.setName(name);
+		dog.setWeight(weight);
+		dog.setNumBones(bones);
+		manager.persist(dog);
+		return dog;
+	}
+
+	public Cat createCat(String name, double weight, int lives, EntityManager manager) {
+		Cat cat = new Cat();
+		cat.setName(name);
+		cat.setWeight(weight);
+		cat.setLives(lives);
+		manager.persist(cat);
+		return cat;
+	}
+
+	public List findByWeight(double weight, EntityManager manager) {
+		return manager.createQuery(
+				"select p from Pet p where p.weight < :weight").setParameter(
+				"weight", weight).getResultList();
+	}
+
+	public Decorate createDecorate(String name, Pet pet, EntityManager manager) {
+		Decorate dec = new Decorate();
+		dec.setName(name);
+		dec.setPet(pet);
+		manager.persist(dec);
+		return dec;
+	}
+
+	public Collection<Decorate> getDecorate(EntityManager manager) {
+		Collection<Decorate> founds = new ArrayList<Decorate>();
+		Query query = manager.createQuery("SELECT o FROM Decorate o");
+		List list = query.getResultList();
+		for (Object obj : list) {
+			if (obj instanceof Decorate) {
+				founds.add((Decorate) obj);
+			}
+		}
+		return founds;
+	}
+
+	public Class[] getAnnotatedClasses() {
+		return new Class[] {
+				Pet.class,
+				Dog.class,
+				Cat.class,
+				Decorate.class
+		};
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/GetReferenceTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/GetReferenceTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/GetReferenceTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,47 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.emops;
-
-import javax.persistence.EntityManager;
-
-import org.hibernate.ejb.test.TestCase;
-
-
-/**
- * @author Emmanuel Bernard
- */
-public class GetReferenceTest extends TestCase {
-
-	public void testWrongIdType() throws Exception {
-		EntityManager em = factory.createEntityManager();
-		try {
-			Competitor c = em.getReference( Competitor.class, new String("30") );
-			fail("Expected IllegalArgumentException");
-		}
-		catch (IllegalArgumentException e) {
-			//success
-		}
-		catch ( Exception e ) {
-			fail("Wrong exception: " + e );
-		}
-
-		try {
-			Mail c = em.getReference( Mail.class, 1 );
-			fail("Expected IllegalArgumentException");
-		}
-		catch (IllegalArgumentException e) {
-			//success
-		}
-		catch ( Exception e ) {
-			fail("Wrong exception: " + e );
-		}
-		em.close();
-	}
-
-	public Class[] getAnnotatedClasses() {
-		return new Class[] {
-				Competitor.class,
-				Race.class,
-				Mail.class
-		};
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/GetReferenceTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/GetReferenceTest.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/GetReferenceTest.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/GetReferenceTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,47 @@
+//$Id: $
+package org.hibernate.ejb.test.emops;
+
+import javax.persistence.EntityManager;
+
+import org.hibernate.ejb.test.TestCase;
+
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class GetReferenceTest extends TestCase {
+
+	public void testWrongIdType() throws Exception {
+		EntityManager em = factory.createEntityManager();
+		try {
+			Competitor c = em.getReference( Competitor.class, new String("30") );
+			fail("Expected IllegalArgumentException");
+		}
+		catch (IllegalArgumentException e) {
+			//success
+		}
+		catch ( Exception e ) {
+			fail("Wrong exception: " + e );
+		}
+
+		try {
+			Mail c = em.getReference( Mail.class, 1 );
+			fail("Expected IllegalArgumentException");
+		}
+		catch (IllegalArgumentException e) {
+			//success
+		}
+		catch ( Exception e ) {
+			fail("Wrong exception: " + e );
+		}
+		em.close();
+	}
+
+	public Class[] getAnnotatedClasses() {
+		return new Class[] {
+				Competitor.class,
+				Race.class,
+				Mail.class
+		};
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Mail.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Mail.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Mail.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,31 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.emops;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Mail {
-	@Id private Long id;
-	private String from;
-
-	public String getFrom() {
-		return from;
-	}
-
-	public void setFrom(String from) {
-		this.from = from;
-	}
-
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Mail.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Mail.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Mail.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Mail.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,31 @@
+//$Id: $
+package org.hibernate.ejb.test.emops;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Mail {
+	@Id private Long id;
+	private String from;
+
+	public String getFrom() {
+		return from;
+	}
+
+	public void setFrom(String from) {
+		this.from = from;
+	}
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/MergeTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/MergeTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/MergeTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,171 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.emops;
-
-import java.util.List;
-import java.util.ArrayList;
-import javax.persistence.EntityManager;
-
-import org.hibernate.ejb.test.TestCase;
-
-/**
- * @author Emmanuel Bernard
- */
-public class MergeTest extends TestCase {
-	public void testMergeWithIndexColumn() {
-		Race race = new Race();
-		race.competitors.add( new Competitor("Name") );
-		race.competitors.add( new Competitor() );
-		race.competitors.add( new Competitor() );
-		EntityManager em = factory.createEntityManager();
-		em.getTransaction().begin();
-		em.persist( race );
-		em.flush();
-		em.clear();
-		race.competitors.add( new Competitor() );
-		race.competitors.remove( 2 );
-		race.competitors.remove( 1 );
-		race.competitors.get( 0 ).setName( "Name2" );
-		race = em.merge( race );
-		em.flush();
-		em.clear();
-		race = em.find( Race.class, race.id );
-		assertEquals( 2, race.competitors.size() );
-		assertEquals( "Name2", race.competitors.get(0).getName() );
-		em.getTransaction().rollback();
-		em.close();
-	}
-
-	public void testMergeManyToMany() {
-		Competition competition = new Competition();
-		competition.getCompetitors().add( new Competitor("Name") );
-		competition.getCompetitors().add( new Competitor() );
-		competition.getCompetitors().add( new Competitor() );
-		EntityManager em = factory.createEntityManager();
-		em.getTransaction().begin();
-		em.persist( competition );
-		em.flush();
-		em.clear();
-		competition.getCompetitors().add( new Competitor() );
-		competition.getCompetitors().remove( 2 );
-		competition.getCompetitors().remove( 1 );
-		competition.getCompetitors().get(0).setName( "Name2" );
-		competition = em.merge( competition );
-		em.flush();
-		em.clear();
-		competition = em.find( Competition.class, competition.getId() );
-		assertEquals( 2, competition.getCompetitors().size() );
-		assertEquals( "Name2", competition.getCompetitors().get(0).getName() );
-		em.getTransaction().rollback();
-		em.close();
-	}
-
-	public void testMergeManyToManyWithDeference() {
-		Competition competition = new Competition();
-		competition.getCompetitors().add( new Competitor("Name") );
-		competition.getCompetitors().add( new Competitor() );
-		competition.getCompetitors().add( new Competitor() );
-		EntityManager em = factory.createEntityManager();
-		em.getTransaction().begin();
-		em.persist( competition );
-		em.flush();
-		em.clear();
-		List<Competitor> newComp = new ArrayList<Competitor>();
-		newComp.add( competition.getCompetitors().get(0) );
-		newComp.add( new Competitor() );
-		newComp.get(0).setName( "Name2" );
-		competition.setCompetitors( newComp );
-		competition = em.merge( competition );
-		em.flush();
-		em.clear();
-		competition = em.find( Competition.class, competition.getId() );
-		assertEquals( 2, competition.getCompetitors().size() );
-		assertEquals( "Name2", competition.getCompetitors().get(0).getName() );
-		em.getTransaction().rollback();
-		em.close();
-	}
-
-	public void testRemoveAndMerge() {
-		Race race = new Race();
-		EntityManager em = factory.createEntityManager();
-		em.getTransaction().begin();
-		em.persist( race );
-		em.flush();
-		em.clear();
-		race = em.find(Race.class, race.id );
-		em.remove(race);
-		try {
-			race = em.merge( race );
-			em.flush();
-			fail("Should raise an IllegalArgumentException");
-		}
-		catch (IllegalArgumentException e) {
-			//all good
-		}
-		catch (Exception e) {
-			fail("Should raise an IllegalArgumentException");
-		}
-		em.getTransaction().rollback();
-		em.close();
-	}
-
-	public void testConcurrentMerge() {
-		Race race = new Race();
-		race.name = "Derby";
-		EntityManager em = factory.createEntityManager();
-		em.getTransaction().begin();
-		em.persist( race );
-		em.flush();
-		em.getTransaction().commit();
-		em.close();
-
-		race.name = "Magnicourt";
-
-		em = factory.createEntityManager();
-		em.getTransaction().begin();
-		Race race2 = em.find(Race.class, race.id );
-		race2.name = "Mans";
-
-		race = em.merge( race );
-		em.flush();
-		em.getTransaction().commit();
-		em.close();
-
-		em = factory.createEntityManager();
-		em.getTransaction().begin();
-		race2 = em.find(Race.class, race.id );
-		assertEquals( "Last commit win in merge", "Magnicourt", race2.name );
-
-		em.remove( race2 );
-		em.getTransaction().commit();
-		em.close();
-	}
-
-	public void testMergeUnidirectionalOneToMany() throws Exception {
-		EntityManager em = factory.createEntityManager();
-		em.getTransaction().begin();
-		Empire roman = new Empire();
-		em.persist( roman );
-		em.flush();
-		em.clear();
-		roman = em.find( Empire.class, roman.getId() );
-		Colony gaule = new Colony();
-		roman.getColonies().add(gaule);
-		em.merge( roman );
-		em.flush();
-		em.clear();
-		roman = em.find(Empire.class, roman.getId() );
-		assertEquals( 1, roman.getColonies().size() );
-		em.getTransaction().rollback();
-		em.close();
-	}
-
-	public Class[] getAnnotatedClasses() {
-		return new Class[] {
-				Race.class,
-				Competitor.class,
-				Competition.class,
-				Empire.class,
-				Colony.class
-		};
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/MergeTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/MergeTest.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/MergeTest.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/MergeTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,171 @@
+//$Id: $
+package org.hibernate.ejb.test.emops;
+
+import java.util.List;
+import java.util.ArrayList;
+import javax.persistence.EntityManager;
+
+import org.hibernate.ejb.test.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class MergeTest extends TestCase {
+	public void testMergeWithIndexColumn() {
+		Race race = new Race();
+		race.competitors.add( new Competitor("Name") );
+		race.competitors.add( new Competitor() );
+		race.competitors.add( new Competitor() );
+		EntityManager em = factory.createEntityManager();
+		em.getTransaction().begin();
+		em.persist( race );
+		em.flush();
+		em.clear();
+		race.competitors.add( new Competitor() );
+		race.competitors.remove( 2 );
+		race.competitors.remove( 1 );
+		race.competitors.get( 0 ).setName( "Name2" );
+		race = em.merge( race );
+		em.flush();
+		em.clear();
+		race = em.find( Race.class, race.id );
+		assertEquals( 2, race.competitors.size() );
+		assertEquals( "Name2", race.competitors.get(0).getName() );
+		em.getTransaction().rollback();
+		em.close();
+	}
+
+	public void testMergeManyToMany() {
+		Competition competition = new Competition();
+		competition.getCompetitors().add( new Competitor("Name") );
+		competition.getCompetitors().add( new Competitor() );
+		competition.getCompetitors().add( new Competitor() );
+		EntityManager em = factory.createEntityManager();
+		em.getTransaction().begin();
+		em.persist( competition );
+		em.flush();
+		em.clear();
+		competition.getCompetitors().add( new Competitor() );
+		competition.getCompetitors().remove( 2 );
+		competition.getCompetitors().remove( 1 );
+		competition.getCompetitors().get(0).setName( "Name2" );
+		competition = em.merge( competition );
+		em.flush();
+		em.clear();
+		competition = em.find( Competition.class, competition.getId() );
+		assertEquals( 2, competition.getCompetitors().size() );
+		assertEquals( "Name2", competition.getCompetitors().get(0).getName() );
+		em.getTransaction().rollback();
+		em.close();
+	}
+
+	public void testMergeManyToManyWithDeference() {
+		Competition competition = new Competition();
+		competition.getCompetitors().add( new Competitor("Name") );
+		competition.getCompetitors().add( new Competitor() );
+		competition.getCompetitors().add( new Competitor() );
+		EntityManager em = factory.createEntityManager();
+		em.getTransaction().begin();
+		em.persist( competition );
+		em.flush();
+		em.clear();
+		List<Competitor> newComp = new ArrayList<Competitor>();
+		newComp.add( competition.getCompetitors().get(0) );
+		newComp.add( new Competitor() );
+		newComp.get(0).setName( "Name2" );
+		competition.setCompetitors( newComp );
+		competition = em.merge( competition );
+		em.flush();
+		em.clear();
+		competition = em.find( Competition.class, competition.getId() );
+		assertEquals( 2, competition.getCompetitors().size() );
+		assertEquals( "Name2", competition.getCompetitors().get(0).getName() );
+		em.getTransaction().rollback();
+		em.close();
+	}
+
+	public void testRemoveAndMerge() {
+		Race race = new Race();
+		EntityManager em = factory.createEntityManager();
+		em.getTransaction().begin();
+		em.persist( race );
+		em.flush();
+		em.clear();
+		race = em.find(Race.class, race.id );
+		em.remove(race);
+		try {
+			race = em.merge( race );
+			em.flush();
+			fail("Should raise an IllegalArgumentException");
+		}
+		catch (IllegalArgumentException e) {
+			//all good
+		}
+		catch (Exception e) {
+			fail("Should raise an IllegalArgumentException");
+		}
+		em.getTransaction().rollback();
+		em.close();
+	}
+
+	public void testConcurrentMerge() {
+		Race race = new Race();
+		race.name = "Derby";
+		EntityManager em = factory.createEntityManager();
+		em.getTransaction().begin();
+		em.persist( race );
+		em.flush();
+		em.getTransaction().commit();
+		em.close();
+
+		race.name = "Magnicourt";
+
+		em = factory.createEntityManager();
+		em.getTransaction().begin();
+		Race race2 = em.find(Race.class, race.id );
+		race2.name = "Mans";
+
+		race = em.merge( race );
+		em.flush();
+		em.getTransaction().commit();
+		em.close();
+
+		em = factory.createEntityManager();
+		em.getTransaction().begin();
+		race2 = em.find(Race.class, race.id );
+		assertEquals( "Last commit win in merge", "Magnicourt", race2.name );
+
+		em.remove( race2 );
+		em.getTransaction().commit();
+		em.close();
+	}
+
+	public void testMergeUnidirectionalOneToMany() throws Exception {
+		EntityManager em = factory.createEntityManager();
+		em.getTransaction().begin();
+		Empire roman = new Empire();
+		em.persist( roman );
+		em.flush();
+		em.clear();
+		roman = em.find( Empire.class, roman.getId() );
+		Colony gaule = new Colony();
+		roman.getColonies().add(gaule);
+		em.merge( roman );
+		em.flush();
+		em.clear();
+		roman = em.find(Empire.class, roman.getId() );
+		assertEquals( 1, roman.getColonies().size() );
+		em.getTransaction().rollback();
+		em.close();
+	}
+
+	public Class[] getAnnotatedClasses() {
+		return new Class[] {
+				Race.class,
+				Competitor.class,
+				Competition.class,
+				Empire.class,
+				Colony.class
+		};
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Music.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Music.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Music.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,43 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.emops;
-
-import javax.persistence.Version;
-import javax.persistence.Id;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Music {
-	@Id @GeneratedValue
-	private Integer id;
-	private String name;
-	@Version
-	private Integer version;
-
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	public Integer getVersion() {
-		return version;
-	}
-
-	public void setVersion(Integer version) {
-		this.version = version;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Music.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Music.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Music.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Music.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,43 @@
+//$Id: $
+package org.hibernate.ejb.test.emops;
+
+import javax.persistence.Version;
+import javax.persistence.Id;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Music {
+	@Id @GeneratedValue
+	private Integer id;
+	private String name;
+	@Version
+	private Integer version;
+
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public Integer getVersion() {
+		return version;
+	}
+
+	public void setVersion(Integer version) {
+		this.version = version;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Pet.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Pet.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Pet.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,43 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.emops;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.Inheritance;
-import javax.persistence.InheritanceType;
-
- at Entity
- at Inheritance( strategy = InheritanceType.JOINED )
-public class Pet implements java.io.Serializable {
-	private int id;
-	private String name;
-	private double weight;
-
-	@Id
-	@GeneratedValue( strategy = GenerationType.AUTO )
-	public int getId() {
-		return id;
-	}
-
-	public void setId(int id) {
-		this.id = id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	public double getWeight() {
-		return weight;
-	}
-
-	public void setWeight(double weight) {
-		this.weight = weight;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Pet.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Pet.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Pet.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Pet.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,43 @@
+//$Id: $
+package org.hibernate.ejb.test.emops;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+
+ at Entity
+ at Inheritance( strategy = InheritanceType.JOINED )
+public class Pet implements java.io.Serializable {
+	private int id;
+	private String name;
+	private double weight;
+
+	@Id
+	@GeneratedValue( strategy = GenerationType.AUTO )
+	public int getId() {
+		return id;
+	}
+
+	public void setId(int id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public double getWeight() {
+		return weight;
+	}
+
+	public void setWeight(double weight) {
+		this.weight = weight;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Race.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Race.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Race.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,25 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.emops;
-
-import java.util.List;
-import java.util.ArrayList;
-import javax.persistence.Id;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Entity;
-import javax.persistence.OneToMany;
-import javax.persistence.CascadeType;
-import javax.persistence.FetchType;
-
-import org.hibernate.annotations.IndexColumn;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Race {
-	@Id @GeneratedValue public Integer id;
-	@IndexColumn( name="index" ) @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
-	@org.hibernate.annotations.Cascade( { org.hibernate.annotations.CascadeType.ALL, org.hibernate.annotations.CascadeType.DELETE_ORPHAN }) 
-	public List<Competitor> competitors = new ArrayList<Competitor>();
-	public String name;
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Race.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Race.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Race.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/Race.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,25 @@
+//$Id: $
+package org.hibernate.ejb.test.emops;
+
+import java.util.List;
+import java.util.ArrayList;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Entity;
+import javax.persistence.OneToMany;
+import javax.persistence.CascadeType;
+import javax.persistence.FetchType;
+
+import org.hibernate.annotations.IndexColumn;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Race {
+	@Id @GeneratedValue public Integer id;
+	@IndexColumn( name="index" ) @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
+	@org.hibernate.annotations.Cascade( { org.hibernate.annotations.CascadeType.ALL, org.hibernate.annotations.CascadeType.DELETE_ORPHAN }) 
+	public List<Competitor> competitors = new ArrayList<Competitor>();
+	public String name;
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/RefreshTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/RefreshTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/RefreshTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,39 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.emops;
-
-import javax.persistence.EntityManager;
-
-import org.hibernate.ejb.test.TestCase;
-
-/**
- * @author Emmanuel Bernard
- */
-public class RefreshTest extends TestCase {
-
-	public void testRefreshNonManaged() throws Exception {
-		EntityManager em = factory.createEntityManager();
-		em.getTransaction().begin();
-		Race race = new Race();
-		em.persist( race );
-		em.flush();
-		em.clear();
-
-		try {
-			em.refresh( race );
-			fail("Refresh should fail on a non managed entity");
-		}
-		catch( IllegalArgumentException e) {
-			//success
-		}
-
-		em.getTransaction().rollback();
-		em.close();
-	}
-
-	public Class[] getAnnotatedClasses() {
-		return new Class[] {
-				Race.class,
-				Competitor.class
-		};
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/RefreshTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/RefreshTest.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/RefreshTest.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/RefreshTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,39 @@
+//$Id: $
+package org.hibernate.ejb.test.emops;
+
+import javax.persistence.EntityManager;
+
+import org.hibernate.ejb.test.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class RefreshTest extends TestCase {
+
+	public void testRefreshNonManaged() throws Exception {
+		EntityManager em = factory.createEntityManager();
+		em.getTransaction().begin();
+		Race race = new Race();
+		em.persist( race );
+		em.flush();
+		em.clear();
+
+		try {
+			em.refresh( race );
+			fail("Refresh should fail on a non managed entity");
+		}
+		catch( IllegalArgumentException e) {
+			//success
+		}
+
+		em.getTransaction().rollback();
+		em.close();
+	}
+
+	public Class[] getAnnotatedClasses() {
+		return new Class[] {
+				Race.class,
+				Competitor.class
+		};
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/RemoveTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/RemoveTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/RemoveTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,95 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.emops;
-
-import java.util.Map;
-import javax.persistence.EntityManager;
-import javax.persistence.OptimisticLockException;
-
-import org.hibernate.ejb.test.TestCase;
-
-/**
- * @author Emmanuel Bernard
- */
-public class RemoveTest extends TestCase {
-	public void testRemove() {
-		Race race = new Race();
-		race.competitors.add( new Competitor() );
-		race.competitors.add( new Competitor() );
-		race.competitors.add( new Competitor() );
-		EntityManager em = factory.createEntityManager();
-		em.getTransaction().begin();
-		em.persist( race );
-		em.flush();
-		em.remove( race );
-		em.flush();
-		em.getTransaction().rollback();
-		em.close();
-	}
-
-	public void testRemoveAndFind() {
-		Race race = new Race();
-		EntityManager em = factory.createEntityManager();
-		em.getTransaction().begin();
-		em.persist( race );
-		em.remove( race );
-		assertNull( em.find( Race.class, race.id ) );
-		em.getTransaction().rollback();
-		em.close();
-	}
-
-	public void testUpdatedAndRemove() {
-		Music music = new Music();
-		music.setName( "Classical" );
-		EntityManager em = factory.createEntityManager();
-		em.getTransaction().begin();
-		em.persist( music );
-		em.getTransaction().commit();
-
-		em.clear();
-
-		em = factory.createEntityManager();
-		em.getTransaction().begin();
-		EntityManager em2 = factory.createEntityManager();
-		em2.getTransaction().begin();
-
-		//read music from 2nd EM
-		music = em2.find( Music.class, music.getId() );
-
-		//change music
-		em.find( Music.class, music.getId() ).setName( "Rap" );
-		em.getTransaction().commit();
-
-		try {
-			em2.remove( music ); //remove changed music
-			em2.flush();
-			fail("should have an optimistic lock exception");
-		}
-		catch( OptimisticLockException e ) {
-			//success
-		}
-		finally {
-			em2.getTransaction().rollback();
-		}
-
-		//clean
-		em.remove( em.find( Music.class, music.getId() ) );
-		
-		em.close();
-		em2.close();
-	}
-
-	public Class[] getAnnotatedClasses() {
-		return new Class[] {
-				Race.class,
-				Competitor.class,
-				Music.class
-		};
-	}
-
-
-	public Map getConfig() {
-		Map cfg =  super.getConfig();
-		cfg.put( "hibernate.jdbc.batch_size", "0");
-		return cfg;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/RemoveTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/RemoveTest.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/RemoveTest.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/RemoveTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,95 @@
+//$Id: $
+package org.hibernate.ejb.test.emops;
+
+import java.util.Map;
+import javax.persistence.EntityManager;
+import javax.persistence.OptimisticLockException;
+
+import org.hibernate.ejb.test.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class RemoveTest extends TestCase {
+	public void testRemove() {
+		Race race = new Race();
+		race.competitors.add( new Competitor() );
+		race.competitors.add( new Competitor() );
+		race.competitors.add( new Competitor() );
+		EntityManager em = factory.createEntityManager();
+		em.getTransaction().begin();
+		em.persist( race );
+		em.flush();
+		em.remove( race );
+		em.flush();
+		em.getTransaction().rollback();
+		em.close();
+	}
+
+	public void testRemoveAndFind() {
+		Race race = new Race();
+		EntityManager em = factory.createEntityManager();
+		em.getTransaction().begin();
+		em.persist( race );
+		em.remove( race );
+		assertNull( em.find( Race.class, race.id ) );
+		em.getTransaction().rollback();
+		em.close();
+	}
+
+	public void testUpdatedAndRemove() {
+		Music music = new Music();
+		music.setName( "Classical" );
+		EntityManager em = factory.createEntityManager();
+		em.getTransaction().begin();
+		em.persist( music );
+		em.getTransaction().commit();
+
+		em.clear();
+
+		em = factory.createEntityManager();
+		em.getTransaction().begin();
+		EntityManager em2 = factory.createEntityManager();
+		em2.getTransaction().begin();
+
+		//read music from 2nd EM
+		music = em2.find( Music.class, music.getId() );
+
+		//change music
+		em.find( Music.class, music.getId() ).setName( "Rap" );
+		em.getTransaction().commit();
+
+		try {
+			em2.remove( music ); //remove changed music
+			em2.flush();
+			fail("should have an optimistic lock exception");
+		}
+		catch( OptimisticLockException e ) {
+			//success
+		}
+		finally {
+			em2.getTransaction().rollback();
+		}
+
+		//clean
+		em.remove( em.find( Music.class, music.getId() ) );
+		
+		em.close();
+		em2.close();
+	}
+
+	public Class[] getAnnotatedClasses() {
+		return new Class[] {
+				Race.class,
+				Competitor.class,
+				Music.class
+		};
+	}
+
+
+	public Map getConfig() {
+		Map cfg =  super.getConfig();
+		cfg.put( "hibernate.jdbc.batch_size", "0");
+		return cfg;
+	}
+}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade)

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/A.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/A.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/A.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,92 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.emops.cascade;
-
-import java.util.HashSet;
-import java.util.Set;
-import javax.persistence.CascadeType;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.OneToMany;
-
- at Entity
-public class A {
-
-	@Id
-	@GeneratedValue( strategy = GenerationType.AUTO )
-	private int id;
-
-	private String name;
-
-	@OneToMany( fetch = FetchType.LAZY, mappedBy = "a", cascade = {CascadeType.PERSIST} )
-	private Set<B1> b1List;
-
-	@OneToMany( fetch = FetchType.LAZY, mappedBy = "a", cascade = {CascadeType.PERSIST} )
-	private Set<B2> b2List;
-
-	@OneToMany( fetch = FetchType.LAZY, mappedBy = "a", cascade = {CascadeType.PERSIST} )
-	private Set<B3> b3List;
-
-	@OneToMany( fetch = FetchType.LAZY, mappedBy = "a", cascade = {CascadeType.PERSIST} )
-	private Set<B4> b4List;
-
-	public int getId() {
-		return id;
-	}
-
-	public void setId(int id) {
-		this.id = id;
-	}
-
-	public Set<B1> getB1List() {
-		if ( b1List == null )
-			b1List = new HashSet<B1>();
-		return b1List;
-	}
-
-	public void setB1List(Set<B1> list) {
-		b1List = list;
-	}
-
-	public Set<B2> getB2List() {
-		if ( b2List == null )
-			b2List = new HashSet<B2>();
-		return b2List;
-	}
-
-	public void setB2List(Set<B2> list) {
-		b2List = list;
-	}
-
-	public Set<B3> getB3List() {
-		return b3List;
-	}
-
-	public void setB3List(Set<B3> list) {
-		if ( b3List == null )
-			b3List = new HashSet<B3>();
-		b3List = list;
-	}
-
-	public Set<B4> getB4List() {
-		return b4List;
-	}
-
-	public void setB4List(Set<B4> list) {
-		if ( b4List == null )
-			b4List = new HashSet<B4>();
-		b4List = list;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/A.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/A.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/A.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/A.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,92 @@
+//$Id: $
+package org.hibernate.ejb.test.emops.cascade;
+
+import java.util.HashSet;
+import java.util.Set;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+
+ at Entity
+public class A {
+
+	@Id
+	@GeneratedValue( strategy = GenerationType.AUTO )
+	private int id;
+
+	private String name;
+
+	@OneToMany( fetch = FetchType.LAZY, mappedBy = "a", cascade = {CascadeType.PERSIST} )
+	private Set<B1> b1List;
+
+	@OneToMany( fetch = FetchType.LAZY, mappedBy = "a", cascade = {CascadeType.PERSIST} )
+	private Set<B2> b2List;
+
+	@OneToMany( fetch = FetchType.LAZY, mappedBy = "a", cascade = {CascadeType.PERSIST} )
+	private Set<B3> b3List;
+
+	@OneToMany( fetch = FetchType.LAZY, mappedBy = "a", cascade = {CascadeType.PERSIST} )
+	private Set<B4> b4List;
+
+	public int getId() {
+		return id;
+	}
+
+	public void setId(int id) {
+		this.id = id;
+	}
+
+	public Set<B1> getB1List() {
+		if ( b1List == null )
+			b1List = new HashSet<B1>();
+		return b1List;
+	}
+
+	public void setB1List(Set<B1> list) {
+		b1List = list;
+	}
+
+	public Set<B2> getB2List() {
+		if ( b2List == null )
+			b2List = new HashSet<B2>();
+		return b2List;
+	}
+
+	public void setB2List(Set<B2> list) {
+		b2List = list;
+	}
+
+	public Set<B3> getB3List() {
+		return b3List;
+	}
+
+	public void setB3List(Set<B3> list) {
+		if ( b3List == null )
+			b3List = new HashSet<B3>();
+		b3List = list;
+	}
+
+	public Set<B4> getB4List() {
+		return b4List;
+	}
+
+	public void setB4List(Set<B4> list) {
+		if ( b4List == null )
+			b4List = new HashSet<B4>();
+		b4List = list;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/B1.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/B1.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/B1.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,56 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.emops.cascade;
-
-import java.util.HashSet;
-import java.util.Set;
-import javax.persistence.CascadeType;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-import javax.persistence.OneToMany;
-
-
- at Entity
-public class B1 {
-
-	@Id
-	@GeneratedValue( strategy = GenerationType.AUTO )
-	private int id;
-
-	@ManyToOne( fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST} )
-	@JoinColumn( name = "aId" )
-	private A a;
-
-	@OneToMany( fetch = FetchType.LAZY, mappedBy = "b1", cascade = {CascadeType.PERSIST} )
-	private Set<C1> c1List;
-
-	public int getId() {
-		return id;
-	}
-
-	public void setId(int id) {
-		this.id = id;
-	}
-
-	public A getA() {
-		return a;
-	}
-
-	public void setA(A a) {
-		this.a = a;
-	}
-
-	public Set<C1> getC1List() {
-		if ( c1List == null )
-			c1List = new HashSet<C1>();
-		return c1List;
-	}
-
-	public void setC1List(Set<C1> list) {
-		c1List = list;
-	}
-}
\ No newline at end of file

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/B1.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/B1.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/B1.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/B1.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,56 @@
+//$Id: $
+package org.hibernate.ejb.test.emops.cascade;
+
+import java.util.HashSet;
+import java.util.Set;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToMany;
+
+
+ at Entity
+public class B1 {
+
+	@Id
+	@GeneratedValue( strategy = GenerationType.AUTO )
+	private int id;
+
+	@ManyToOne( fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST} )
+	@JoinColumn( name = "aId" )
+	private A a;
+
+	@OneToMany( fetch = FetchType.LAZY, mappedBy = "b1", cascade = {CascadeType.PERSIST} )
+	private Set<C1> c1List;
+
+	public int getId() {
+		return id;
+	}
+
+	public void setId(int id) {
+		this.id = id;
+	}
+
+	public A getA() {
+		return a;
+	}
+
+	public void setA(A a) {
+		this.a = a;
+	}
+
+	public Set<C1> getC1List() {
+		if ( c1List == null )
+			c1List = new HashSet<C1>();
+		return c1List;
+	}
+
+	public void setC1List(Set<C1> list) {
+		c1List = list;
+	}
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/B2.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/B2.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/B2.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,55 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.emops.cascade;
-
-import java.util.HashSet;
-import java.util.Set;
-import javax.persistence.CascadeType;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-import javax.persistence.OneToMany;
-
- at Entity
-public class B2 {
-
-	@Id
-	@GeneratedValue( strategy = GenerationType.AUTO )
-	private int id;
-
-	@ManyToOne( fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST} )
-	@JoinColumn( name = "aId" )
-	private A a;
-
-	@OneToMany( fetch = FetchType.LAZY, mappedBy = "b2", cascade = {CascadeType.PERSIST} )
-	private Set<C2> c2List;
-
-	public A getA() {
-		return a;
-	}
-
-	public void setA(A a) {
-		this.a = a;
-	}
-
-	public Set<C2> getC2List() {
-		if ( c2List == null )
-			c2List = new HashSet<C2>();
-		return c2List;
-	}
-
-	public void setC2List(Set<C2> list) {
-		c2List = list;
-	}
-
-	public int getId() {
-		return id;
-	}
-
-	public void setId(int id) {
-		this.id = id;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/B2.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/B2.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/B2.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/B2.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,55 @@
+//$Id: $
+package org.hibernate.ejb.test.emops.cascade;
+
+import java.util.HashSet;
+import java.util.Set;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToMany;
+
+ at Entity
+public class B2 {
+
+	@Id
+	@GeneratedValue( strategy = GenerationType.AUTO )
+	private int id;
+
+	@ManyToOne( fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST} )
+	@JoinColumn( name = "aId" )
+	private A a;
+
+	@OneToMany( fetch = FetchType.LAZY, mappedBy = "b2", cascade = {CascadeType.PERSIST} )
+	private Set<C2> c2List;
+
+	public A getA() {
+		return a;
+	}
+
+	public void setA(A a) {
+		this.a = a;
+	}
+
+	public Set<C2> getC2List() {
+		if ( c2List == null )
+			c2List = new HashSet<C2>();
+		return c2List;
+	}
+
+	public void setC2List(Set<C2> list) {
+		c2List = list;
+	}
+
+	public int getId() {
+		return id;
+	}
+
+	public void setId(int id) {
+		this.id = id;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/B3.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/B3.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/B3.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,39 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.emops.cascade;
-
-import javax.persistence.CascadeType;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-
- at Entity
-public class B3 {
-
-	@Id
-	@GeneratedValue( strategy = GenerationType.AUTO )
-	private int id;
-
-	@ManyToOne( fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST} )
-	@JoinColumn( name = "aId" )
-	private A a;
-
-	public int getId() {
-		return id;
-	}
-
-	public void setId(int id) {
-		this.id = id;
-	}
-
-	public A getA() {
-		return a;
-	}
-
-	public void setA(A a) {
-		this.a = a;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/B3.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/B3.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/B3.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/B3.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,39 @@
+//$Id: $
+package org.hibernate.ejb.test.emops.cascade;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+
+ at Entity
+public class B3 {
+
+	@Id
+	@GeneratedValue( strategy = GenerationType.AUTO )
+	private int id;
+
+	@ManyToOne( fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST} )
+	@JoinColumn( name = "aId" )
+	private A a;
+
+	public int getId() {
+		return id;
+	}
+
+	public void setId(int id) {
+		this.id = id;
+	}
+
+	public A getA() {
+		return a;
+	}
+
+	public void setA(A a) {
+		this.a = a;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/B4.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/B4.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/B4.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,39 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.emops.cascade;
-
-import javax.persistence.CascadeType;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-
- at Entity
-public class B4 {
-
-	@Id
-	@GeneratedValue( strategy = GenerationType.AUTO )
-	private int id;
-
-	@ManyToOne( fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST} )
-	@JoinColumn( name = "aId" )
-	private A a;
-
-	public int getId() {
-		return id;
-	}
-
-	public void setId(int id) {
-		this.id = id;
-	}
-
-	public A getA() {
-		return a;
-	}
-
-	public void setA(A a) {
-		this.a = a;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/B4.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/B4.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/B4.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/B4.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,39 @@
+//$Id: $
+package org.hibernate.ejb.test.emops.cascade;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+
+ at Entity
+public class B4 {
+
+	@Id
+	@GeneratedValue( strategy = GenerationType.AUTO )
+	private int id;
+
+	@ManyToOne( fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST} )
+	@JoinColumn( name = "aId" )
+	private A a;
+
+	public int getId() {
+		return id;
+	}
+
+	public void setId(int id) {
+		this.id = id;
+	}
+
+	public A getA() {
+		return a;
+	}
+
+	public void setA(A a) {
+		this.a = a;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/C1.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/C1.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/C1.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,39 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.emops.cascade;
-
-import javax.persistence.CascadeType;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-
- at Entity
-public class C1 {
-
-	@Id
-	@GeneratedValue( strategy = GenerationType.AUTO )
-	private int id;
-
-	@ManyToOne( fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST} )
-	@JoinColumn( name = "b1Id" )
-	private B1 b1;
-
-	public B1 getB1() {
-		return b1;
-	}
-
-	public void setB1(B1 b1) {
-		this.b1 = b1;
-	}
-
-	public int getId() {
-		return id;
-	}
-
-	public void setId(int id) {
-		this.id = id;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/C1.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/C1.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/C1.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/C1.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,39 @@
+//$Id: $
+package org.hibernate.ejb.test.emops.cascade;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+
+ at Entity
+public class C1 {
+
+	@Id
+	@GeneratedValue( strategy = GenerationType.AUTO )
+	private int id;
+
+	@ManyToOne( fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST} )
+	@JoinColumn( name = "b1Id" )
+	private B1 b1;
+
+	public B1 getB1() {
+		return b1;
+	}
+
+	public void setB1(B1 b1) {
+		this.b1 = b1;
+	}
+
+	public int getId() {
+		return id;
+	}
+
+	public void setId(int id) {
+		this.id = id;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/C2.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/C2.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/C2.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,39 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.emops.cascade;
-
-import javax.persistence.CascadeType;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-
- at Entity
-public class C2 {
-
-	@Id
-	@GeneratedValue( strategy = GenerationType.AUTO )
-	private int id;
-
-	@ManyToOne( fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST} )
-	@JoinColumn( name = "b2Id" )
-	private B2 b2;
-
-	public B2 getB2() {
-		return b2;
-	}
-
-	public void setB2(B2 b2) {
-		this.b2 = b2;
-	}
-
-	public int getId() {
-		return id;
-	}
-
-	public void setId(int id) {
-		this.id = id;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/C2.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/C2.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/C2.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/C2.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,39 @@
+//$Id: $
+package org.hibernate.ejb.test.emops.cascade;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+
+ at Entity
+public class C2 {
+
+	@Id
+	@GeneratedValue( strategy = GenerationType.AUTO )
+	private int id;
+
+	@ManyToOne( fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST} )
+	@JoinColumn( name = "b2Id" )
+	private B2 b2;
+
+	public B2 getB2() {
+		return b2;
+	}
+
+	public void setB2(B2 b2) {
+		this.b2 = b2;
+	}
+
+	public int getId() {
+		return id;
+	}
+
+	public void setId(int id) {
+		this.id = id;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/CascadePersistTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/CascadePersistTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/CascadePersistTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,97 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.emops.cascade;
-
-import javax.persistence.EntityManager;
-
-import org.hibernate.ejb.test.TestCase;
-import org.hibernate.Session;
-import org.hibernate.stat.Statistics;
-
-/**
- * @author Emmanuel Bernard
- */
-public class CascadePersistTest extends TestCase {
-
-	public void testLazyCollectionsStayLazyOnPersist() throws Exception {
-		EntityManager em = factory.createEntityManager();
-		em.getTransaction().begin();
-		//initialize
-		A a = new A();
-		a.setName( "name1" );
-		em.persist( a );
-		a = new A();
-		a.setName( "name2" );
-		em.persist( a );
-		a = new A();
-		a.setName( "name3" );
-		em.persist( a );
-		em.flush();
-		a = em.find( A.class, 1 );
-		for ( int i = 0; i < 3; i++ ) {
-			B1 b1 = new B1();
-			b1.setA( a );
-			em.persist( b1 );
-		}
-		for ( int i = 0; i < 3; i++ ) {
-			B2 b2 = new B2();
-			b2.setA( a );
-			em.persist( b2 );
-		}
-		for ( int i = 0; i < 3; i++ ) {
-			B3 b3 = new B3();
-			b3.setA( a );
-			em.persist( b3 );
-		}
-		for ( int i = 0; i < 3; i++ ) {
-			B4 b4 = new B4();
-			b4.setA( a );
-			em.persist( b4 );
-		}
-		em.flush();
-		B1 b1 = em.find( B1.class, 1 );
-		for ( int i = 0; i < 2; i++ ) {
-			C1 c1 = new C1();
-			c1.setB1( b1 );
-			em.persist( c1 );
-		}
-		B2 b2 = em.find( B2.class, 1 );
-		for ( int i = 0; i < 4; i++ ) {
-			C2 c2 = new C2();
-			c2.setB2( b2 );
-			em.persist( c2 );
-		}
-		em.flush();
-		em.clear();
-
-		//test
-		a = em.find( A.class, 1 );
-		C2 c2 = new C2();
-		for ( B2 anotherB2 : a.getB2List() ) {
-			if ( anotherB2.getId() == 1 ) {
-				anotherB2.getC2List().add( c2 );
-				c2.setB2( anotherB2 );
-			}
-		}
-		Statistics statistics = ( (Session) em.getDelegate() ).getSessionFactory().getStatistics();
-		statistics.setStatisticsEnabled( true );
-		statistics.clear();
-		em.persist( c2 );
-		long loaded = statistics.getEntityLoadCount();
-		assertEquals( 0, loaded );
-		em.flush();
-		em.getTransaction().rollback();
-		em.close();
-	}
-
-	public Class[] getAnnotatedClasses() {
-		return new Class[]{
-				A.class,
-				B1.class,
-				B2.class,
-				B3.class,
-				B4.class,
-				C1.class,
-				C2.class
-		};
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/CascadePersistTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/CascadePersistTest.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/CascadePersistTest.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/emops/cascade/CascadePersistTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,97 @@
+//$Id: $
+package org.hibernate.ejb.test.emops.cascade;
+
+import javax.persistence.EntityManager;
+
+import org.hibernate.ejb.test.TestCase;
+import org.hibernate.Session;
+import org.hibernate.stat.Statistics;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class CascadePersistTest extends TestCase {
+
+	public void testLazyCollectionsStayLazyOnPersist() throws Exception {
+		EntityManager em = factory.createEntityManager();
+		em.getTransaction().begin();
+		//initialize
+		A a = new A();
+		a.setName( "name1" );
+		em.persist( a );
+		a = new A();
+		a.setName( "name2" );
+		em.persist( a );
+		a = new A();
+		a.setName( "name3" );
+		em.persist( a );
+		em.flush();
+		a = em.find( A.class, 1 );
+		for ( int i = 0; i < 3; i++ ) {
+			B1 b1 = new B1();
+			b1.setA( a );
+			em.persist( b1 );
+		}
+		for ( int i = 0; i < 3; i++ ) {
+			B2 b2 = new B2();
+			b2.setA( a );
+			em.persist( b2 );
+		}
+		for ( int i = 0; i < 3; i++ ) {
+			B3 b3 = new B3();
+			b3.setA( a );
+			em.persist( b3 );
+		}
+		for ( int i = 0; i < 3; i++ ) {
+			B4 b4 = new B4();
+			b4.setA( a );
+			em.persist( b4 );
+		}
+		em.flush();
+		B1 b1 = em.find( B1.class, 1 );
+		for ( int i = 0; i < 2; i++ ) {
+			C1 c1 = new C1();
+			c1.setB1( b1 );
+			em.persist( c1 );
+		}
+		B2 b2 = em.find( B2.class, 1 );
+		for ( int i = 0; i < 4; i++ ) {
+			C2 c2 = new C2();
+			c2.setB2( b2 );
+			em.persist( c2 );
+		}
+		em.flush();
+		em.clear();
+
+		//test
+		a = em.find( A.class, 1 );
+		C2 c2 = new C2();
+		for ( B2 anotherB2 : a.getB2List() ) {
+			if ( anotherB2.getId() == 1 ) {
+				anotherB2.getC2List().add( c2 );
+				c2.setB2( anotherB2 );
+			}
+		}
+		Statistics statistics = ( (Session) em.getDelegate() ).getSessionFactory().getStatistics();
+		statistics.setStatisticsEnabled( true );
+		statistics.clear();
+		em.persist( c2 );
+		long loaded = statistics.getEntityLoadCount();
+		assertEquals( 0, loaded );
+		em.flush();
+		em.getTransaction().rollback();
+		em.close();
+	}
+
+	public Class[] getAnnotatedClasses() {
+		return new Class[]{
+				A.class,
+				B1.class,
+				B2.class,
+				B3.class,
+				B4.class,
+				C1.class,
+				C2.class
+		};
+	}
+}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/exception (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/exception)

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/exception/ExceptionTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/exception/ExceptionTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/exception/ExceptionTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,79 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.exception;
-
-import java.util.Map;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityNotFoundException;
-import javax.persistence.OptimisticLockException;
-
-import org.hibernate.cfg.Environment;
-import org.hibernate.ejb.test.TestCase;
-
-/**
- * @author Emmanuel Bernard
- */
-public class ExceptionTest extends TestCase {
-
-	public void testOptimisticLockingException() throws Exception {
-		EntityManager em = factory.createEntityManager();
-		EntityManager em2 = factory.createEntityManager();
-		em.getTransaction().begin();
-		Music music = new Music();
-		music.setName( "Old Country" );
-		em.persist( music );
-		em.getTransaction().commit();
-
-		em2.getTransaction().begin();
-		Music music2 = em2.find( Music.class, music.getId() );
-		music2.setName( "HouseMusic" );
-		em2.getTransaction().commit();
-		em2.close();
-
-		em.getTransaction().begin();
-		music.setName( "Rock" );
-		try {
-
-			em.flush();
-			fail("Should raise an optimistic lock exception");
-		}
-		catch( OptimisticLockException e) {
-			//success
-			assertEquals( music, e.getEntity() );
-		}
-		catch( Exception e ) {
-			fail("Should raise an optimistic lock exception");
-		}
-		finally {
-			em.getTransaction().rollback();
-			em.close();
-		}
-	}
-
-	public void testEntityNotFoundException() throws Exception {
-		EntityManager em = factory.createEntityManager( );
-		Music music = em.getReference( Music.class, new Integer(-1) );
-		try {
-			music.getName();
-			fail("Non existent entity should raise an exception when state is accessed");
-		}
-		catch( EntityNotFoundException e ) {
-			//success
-		}
-		finally {
-			em.close();
-		}
-	}
-
-	@Override
-	public Map getConfig() {
-		Map config = super.getConfig();
-		config.put( Environment.BATCH_VERSIONED_DATA, "false");
-		return config;
-	}
-
-	public Class[] getAnnotatedClasses() {
-		return new Class[] {
-				Music.class
-		};
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/exception/ExceptionTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/exception/ExceptionTest.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/exception/ExceptionTest.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/exception/ExceptionTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,79 @@
+//$Id: $
+package org.hibernate.ejb.test.exception;
+
+import java.util.Map;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityNotFoundException;
+import javax.persistence.OptimisticLockException;
+
+import org.hibernate.cfg.Environment;
+import org.hibernate.ejb.test.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class ExceptionTest extends TestCase {
+
+	public void testOptimisticLockingException() throws Exception {
+		EntityManager em = factory.createEntityManager();
+		EntityManager em2 = factory.createEntityManager();
+		em.getTransaction().begin();
+		Music music = new Music();
+		music.setName( "Old Country" );
+		em.persist( music );
+		em.getTransaction().commit();
+
+		em2.getTransaction().begin();
+		Music music2 = em2.find( Music.class, music.getId() );
+		music2.setName( "HouseMusic" );
+		em2.getTransaction().commit();
+		em2.close();
+
+		em.getTransaction().begin();
+		music.setName( "Rock" );
+		try {
+
+			em.flush();
+			fail("Should raise an optimistic lock exception");
+		}
+		catch( OptimisticLockException e) {
+			//success
+			assertEquals( music, e.getEntity() );
+		}
+		catch( Exception e ) {
+			fail("Should raise an optimistic lock exception");
+		}
+		finally {
+			em.getTransaction().rollback();
+			em.close();
+		}
+	}
+
+	public void testEntityNotFoundException() throws Exception {
+		EntityManager em = factory.createEntityManager( );
+		Music music = em.getReference( Music.class, new Integer(-1) );
+		try {
+			music.getName();
+			fail("Non existent entity should raise an exception when state is accessed");
+		}
+		catch( EntityNotFoundException e ) {
+			//success
+		}
+		finally {
+			em.close();
+		}
+	}
+
+	@Override
+	public Map getConfig() {
+		Map config = super.getConfig();
+		config.put( Environment.BATCH_VERSIONED_DATA, "false");
+		return config;
+	}
+
+	public Class[] getAnnotatedClasses() {
+		return new Class[] {
+				Music.class
+		};
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/exception/Music.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/exception/Music.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/exception/Music.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,42 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.exception;
-
-import java.io.Serializable;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Version;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Music implements Serializable {
-	private Integer id;
-	private Integer version;
-	private String name;
-
-	@Id @GeneratedValue public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	@Version public Integer getVersion() {
-		return version;
-	}
-
-	public void setVersion(Integer version) {
-		this.version = version;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/exception/Music.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/exception/Music.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/exception/Music.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/exception/Music.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,42 @@
+//$Id: $
+package org.hibernate.ejb.test.exception;
+
+import java.io.Serializable;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Version;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Music implements Serializable {
+	private Integer id;
+	private Integer version;
+	private String name;
+
+	@Id @GeneratedValue public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	@Version public Integer getVersion() {
+		return version;
+	}
+
+	public void setVersion(Integer version) {
+		this.version = version;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/hibernate.cfg.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/hibernate.cfg.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/hibernate.cfg.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,26 +0,0 @@
-<!DOCTYPE hibernate-configuration PUBLIC
-        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
-        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
-
-<hibernate-configuration>
-    <session-factory>
-        <property name="hibernate.dialect">org.hibernate.dialect.HSQLDialect</property>
-        <property name="hibernate.connection.driver_class">org.hsqldb.jdbcDriver</property>
-        <property name="hibernate.connection.username">sa</property>
-        <property name="hibernate.connection.password"></property>
-        <property name="hibernate.connection.url">jdbc:hsqldb:.</property>
-        <property name="hibernate.cache.use_query_cache">true</property>
-        <property name="hibernate.cache.region_prefix">hibernate.test</property>
-        <property name="hibernate.jdbc.use_streams_for_binary">true</property>
-        <property name="hibernate.jdbc.batch_size">0</property>
-        <property name="hibernate.max_fetch_depth">3</property>
-        <property name="hibernate.hbm2ddl.auto">create-drop</property>
-        <property name="hibernate.generate_statistics">true</property>
-        <property name="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</property>
-        <mapping class="org.hibernate.ejb.test.Item"/>
-        <mapping class="org.hibernate.ejb.test.Cat"/>
-        <mapping class="org.hibernate.ejb.test.Distributor"/>
-        <class-cache class="org.hibernate.ejb.test.Item" usage="read-write"/>
-        <collection-cache collection="org.hibernate.ejb.test.Item.distributors" usage="read-write" region="RegionName"/>
-    </session-factory>
-</hibernate-configuration>
\ No newline at end of file

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/hibernate.cfg.xml (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/hibernate.cfg.xml)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/hibernate.cfg.xml	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/hibernate.cfg.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,26 @@
+<!DOCTYPE hibernate-configuration PUBLIC
+        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
+        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
+
+<hibernate-configuration>
+    <session-factory>
+        <property name="hibernate.dialect">org.hibernate.dialect.HSQLDialect</property>
+        <property name="hibernate.connection.driver_class">org.hsqldb.jdbcDriver</property>
+        <property name="hibernate.connection.username">sa</property>
+        <property name="hibernate.connection.password"></property>
+        <property name="hibernate.connection.url">jdbc:hsqldb:.</property>
+        <property name="hibernate.cache.use_query_cache">true</property>
+        <property name="hibernate.cache.region_prefix">hibernate.test</property>
+        <property name="hibernate.jdbc.use_streams_for_binary">true</property>
+        <property name="hibernate.jdbc.batch_size">0</property>
+        <property name="hibernate.max_fetch_depth">3</property>
+        <property name="hibernate.hbm2ddl.auto">create-drop</property>
+        <property name="hibernate.generate_statistics">true</property>
+        <property name="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</property>
+        <mapping class="org.hibernate.ejb.test.Item"/>
+        <mapping class="org.hibernate.ejb.test.Cat"/>
+        <mapping class="org.hibernate.ejb.test.Distributor"/>
+        <class-cache class="org.hibernate.ejb.test.Item" usage="read-write"/>
+        <collection-cache collection="org.hibernate.ejb.test.Item.distributors" usage="read-write" region="RegionName"/>
+    </session-factory>
+</hibernate-configuration>
\ No newline at end of file

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/inheritance (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/inheritance)

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/inheritance/Fruit.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/inheritance/Fruit.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/inheritance/Fruit.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,27 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.inheritance;
-
-import javax.persistence.Entity;
-import javax.persistence.Inheritance;
-import javax.persistence.InheritanceType;
-import javax.persistence.Id;
-import javax.persistence.GeneratedValue;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Inheritance(strategy = InheritanceType.JOINED)
-public abstract class Fruit {
-	Long id;
-
-	@Id
-	@GeneratedValue
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/inheritance/Fruit.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/inheritance/Fruit.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/inheritance/Fruit.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/inheritance/Fruit.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,27 @@
+//$Id: $
+package org.hibernate.ejb.test.inheritance;
+
+import javax.persistence.Entity;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Inheritance(strategy = InheritanceType.JOINED)
+public abstract class Fruit {
+	Long id;
+
+	@Id
+	@GeneratedValue
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/inheritance/InheritanceTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/inheritance/InheritanceTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/inheritance/InheritanceTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,41 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.inheritance;
-
-import javax.persistence.EntityManager;
-
-import org.hibernate.ejb.test.TestCase;
-
-/**
- * @author Emmanuel Bernard
- */
-public class InheritanceTest extends TestCase {
-
-	public void testFind() throws Exception {
-		EntityManager firstSession = factory.createEntityManager( );
-        Strawberry u = new Strawberry();
-		u.setSize( 12l );
-		firstSession.getTransaction().begin();
-        firstSession.persist(u);
-        firstSession.getTransaction().commit();
-        Long newId = u.getId();
-        firstSession.clear();
-
-		firstSession.getTransaction().begin();
-        // 1.
-        Strawberry result1 = firstSession.find(Strawberry.class, newId);
-        assertNotNull( result1 );
-
-        // 2.
-        Strawberry result2 = (Strawberry) firstSession.find(Fruit.class, newId);
-        System.out.println("2. result is:" + result2);
-
-        firstSession.getTransaction().commit();
-        firstSession.close();
-	}
-	public Class[] getAnnotatedClasses() {
-		return new Class[] {
-				Fruit.class,
-				Strawberry.class
-		};
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/inheritance/InheritanceTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/inheritance/InheritanceTest.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/inheritance/InheritanceTest.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/inheritance/InheritanceTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,41 @@
+//$Id: $
+package org.hibernate.ejb.test.inheritance;
+
+import javax.persistence.EntityManager;
+
+import org.hibernate.ejb.test.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class InheritanceTest extends TestCase {
+
+	public void testFind() throws Exception {
+		EntityManager firstSession = factory.createEntityManager( );
+        Strawberry u = new Strawberry();
+		u.setSize( 12l );
+		firstSession.getTransaction().begin();
+        firstSession.persist(u);
+        firstSession.getTransaction().commit();
+        Long newId = u.getId();
+        firstSession.clear();
+
+		firstSession.getTransaction().begin();
+        // 1.
+        Strawberry result1 = firstSession.find(Strawberry.class, newId);
+        assertNotNull( result1 );
+
+        // 2.
+        Strawberry result2 = (Strawberry) firstSession.find(Fruit.class, newId);
+        System.out.println("2. result is:" + result2);
+
+        firstSession.getTransaction().commit();
+        firstSession.close();
+	}
+	public Class[] getAnnotatedClasses() {
+		return new Class[] {
+				Fruit.class,
+				Strawberry.class
+		};
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/inheritance/Strawberry.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/inheritance/Strawberry.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/inheritance/Strawberry.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,20 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.inheritance;
-
-import javax.persistence.Entity;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Strawberry extends Fruit {
-	private Long size;
-
-	public Long getSize() {
-		return size;
-	}
-
-	public void setSize(Long size) {
-		this.size = size;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/inheritance/Strawberry.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/inheritance/Strawberry.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/inheritance/Strawberry.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/inheritance/Strawberry.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,20 @@
+//$Id: $
+package org.hibernate.ejb.test.inheritance;
+
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Strawberry extends Fruit {
+	private Long size;
+
+	public Long getSize() {
+		return size;
+	}
+
+	public void setSize(Long size) {
+		this.size = size;
+	}
+}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/instrument (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/instrument)

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/instrument/InstrumentedClassLoader.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/instrument/InstrumentedClassLoader.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/instrument/InstrumentedClassLoader.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,76 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.instrument;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.lang.instrument.IllegalClassFormatException;
-import java.util.List;
-
-import org.hibernate.ejb.instrument.InterceptFieldClassFileTransformer;
-
-/**
- * @author Emmanuel Bernard
- */
-public class InstrumentedClassLoader extends ClassLoader {
-	private List<String> entities;
-
-	public InstrumentedClassLoader(ClassLoader parent) {
-		super( parent );
-	}
-
-	@Override
-	public Class<?> loadClass(String name) throws ClassNotFoundException {
-		if ( "java.lang.Object".equals( name ) ) return getParent().loadClass( name );
-		Class c = findLoadedClass( name );
-		if ( c != null ) return c;
-		InputStream is = this.getResourceAsStream( name.replace( ".", "/" ) + ".class" );
-		if ( is == null ) throw new ClassNotFoundException( name );
-		byte[] buffer = new byte[409600];
-		byte[] originalClass = new byte[0];
-		int r = 0;
-		try {
-			r = is.read( buffer );
-		}
-		catch (IOException e) {
-			throw new ClassNotFoundException( name + " not found", e );
-		}
-		while ( r >= buffer.length ) {
-			byte[] temp = new byte[ originalClass.length + buffer.length ];
-			System.arraycopy( originalClass, 0, temp, 0, originalClass.length );
-			System.arraycopy( buffer, 0, temp, originalClass.length, buffer.length );
-			originalClass = temp;
-		}
-		if ( r != -1 ) {
-			byte[] temp = new byte[ originalClass.length + r ];
-			System.arraycopy( originalClass, 0, temp, 0, originalClass.length );
-			System.arraycopy( buffer, 0, temp, originalClass.length, r );
-			originalClass = temp;
-		}
-		try {
-			is.close();
-		}
-		catch (IOException e) {
-			throw new ClassNotFoundException( name + " not found", e );
-		}
-		InterceptFieldClassFileTransformer t = new InterceptFieldClassFileTransformer( entities );
-		byte[] transformed = new byte[0];
-		try {
-			transformed = t.transform(
-					getParent(),
-					name,
-					null,
-					null,
-					originalClass
-			);
-		}
-		catch (IllegalClassFormatException e) {
-			throw new ClassNotFoundException( name + " not found", e );
-		}
-
-		return defineClass( name, transformed, 0, transformed.length );
-	}
-
-	public void setEntities(List<String> entities) {
-		this.entities = entities;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/instrument/InstrumentedClassLoader.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/instrument/InstrumentedClassLoader.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/instrument/InstrumentedClassLoader.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/instrument/InstrumentedClassLoader.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,76 @@
+//$Id$
+package org.hibernate.ejb.test.instrument;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.instrument.IllegalClassFormatException;
+import java.util.List;
+
+import org.hibernate.ejb.instrument.InterceptFieldClassFileTransformer;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class InstrumentedClassLoader extends ClassLoader {
+	private List<String> entities;
+
+	public InstrumentedClassLoader(ClassLoader parent) {
+		super( parent );
+	}
+
+	@Override
+	public Class<?> loadClass(String name) throws ClassNotFoundException {
+		if ( "java.lang.Object".equals( name ) ) return getParent().loadClass( name );
+		Class c = findLoadedClass( name );
+		if ( c != null ) return c;
+		InputStream is = this.getResourceAsStream( name.replace( ".", "/" ) + ".class" );
+		if ( is == null ) throw new ClassNotFoundException( name );
+		byte[] buffer = new byte[409600];
+		byte[] originalClass = new byte[0];
+		int r = 0;
+		try {
+			r = is.read( buffer );
+		}
+		catch (IOException e) {
+			throw new ClassNotFoundException( name + " not found", e );
+		}
+		while ( r >= buffer.length ) {
+			byte[] temp = new byte[ originalClass.length + buffer.length ];
+			System.arraycopy( originalClass, 0, temp, 0, originalClass.length );
+			System.arraycopy( buffer, 0, temp, originalClass.length, buffer.length );
+			originalClass = temp;
+		}
+		if ( r != -1 ) {
+			byte[] temp = new byte[ originalClass.length + r ];
+			System.arraycopy( originalClass, 0, temp, 0, originalClass.length );
+			System.arraycopy( buffer, 0, temp, originalClass.length, r );
+			originalClass = temp;
+		}
+		try {
+			is.close();
+		}
+		catch (IOException e) {
+			throw new ClassNotFoundException( name + " not found", e );
+		}
+		InterceptFieldClassFileTransformer t = new InterceptFieldClassFileTransformer( entities );
+		byte[] transformed = new byte[0];
+		try {
+			transformed = t.transform(
+					getParent(),
+					name,
+					null,
+					null,
+					originalClass
+			);
+		}
+		catch (IllegalClassFormatException e) {
+			throw new ClassNotFoundException( name + " not found", e );
+		}
+
+		return defineClass( name, transformed, 0, transformed.length );
+	}
+
+	public void setEntities(List<String> entities) {
+		this.entities = entities;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/instrument/InterceptFieldClassFileTransformerTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/instrument/InterceptFieldClassFileTransformerTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/instrument/InterceptFieldClassFileTransformerTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,24 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.instrument;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import junit.framework.TestCase;
-
-/**
- * @author Emmanuel Bernard
- */
-public class InterceptFieldClassFileTransformerTest extends TestCase {
-	public void testEnhancement() throws Exception {
-		List<String> entities = new ArrayList<String>();
-		entities.add( "org.hibernate.ejb.test.instrument.Simple" );
-		InstrumentedClassLoader cl = new InstrumentedClassLoader( Thread.currentThread().getContextClassLoader() );
-		cl.setEntities( entities );
-		Class interceptedFieldEnabled = cl.loadClass( "net.sf.cglib.transform.impl.InterceptFieldEnabled" );
-		Class clazz = cl.loadClass( entities.get( 0 ) );
-		//clazz = cl.loadClass( "org.hibernate.ejb.test.instrument.Simple" );
-		assertTrue( interceptedFieldEnabled.isAssignableFrom( clazz ) );
-		clazz.getName();
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/instrument/InterceptFieldClassFileTransformerTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/instrument/InterceptFieldClassFileTransformerTest.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/instrument/InterceptFieldClassFileTransformerTest.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/instrument/InterceptFieldClassFileTransformerTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,24 @@
+//$Id$
+package org.hibernate.ejb.test.instrument;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class InterceptFieldClassFileTransformerTest extends TestCase {
+	public void testEnhancement() throws Exception {
+		List<String> entities = new ArrayList<String>();
+		entities.add( "org.hibernate.ejb.test.instrument.Simple" );
+		InstrumentedClassLoader cl = new InstrumentedClassLoader( Thread.currentThread().getContextClassLoader() );
+		cl.setEntities( entities );
+		Class interceptedFieldEnabled = cl.loadClass( "net.sf.cglib.transform.impl.InterceptFieldEnabled" );
+		Class clazz = cl.loadClass( entities.get( 0 ) );
+		//clazz = cl.loadClass( "org.hibernate.ejb.test.instrument.Simple" );
+		assertTrue( interceptedFieldEnabled.isAssignableFrom( clazz ) );
+		clazz.getName();
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/instrument/Simple.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/instrument/Simple.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/instrument/Simple.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,17 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.instrument;
-
-/**
- * @author Emmanuel Bernard
- */
-public class Simple {
-	private String name;
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/instrument/Simple.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/instrument/Simple.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/instrument/Simple.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/instrument/Simple.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,17 @@
+//$Id$
+package org.hibernate.ejb.test.instrument;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Simple {
+	private String name;
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/lob (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/lob)

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/lob/BlobTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/lob/BlobTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/lob/BlobTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,49 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.lob;
-
-import java.io.ByteArrayOutputStream;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.sql.Blob;
-import java.util.HashMap;
-import java.util.Map;
-import javax.persistence.EntityManager;
-
-import org.hibernate.Hibernate;
-import org.hibernate.ejb.test.TestCase;
-
-/**
- * @author Emmanuel Bernard
- */
-public class BlobTest extends TestCase {
-
-	public void testBlobSerialization() throws Exception {
-		EntityManager em = factory.createEntityManager();
-		em.getTransaction().begin();
-		Map image = new HashMap();
-		image.put( "meta", "metadata" );
-		image.put( "data", "imagedata" );
-		ImageReader reader = new ImageReader();
-		ByteArrayOutputStream baos = new ByteArrayOutputStream();
-		ObjectOutputStream oos = new ObjectOutputStream( baos );
-		oos.writeObject( image );
-		reader.setImage( (Blob) Hibernate.createBlob( baos.toByteArray() ) );
-		em.persist( reader );
-		em.getTransaction().commit();
-		em.close(); //useless but y'a know
-		em = factory.createEntityManager();
-		em.getTransaction().begin();
-		reader = em.find( ImageReader.class, reader.getId() );
-		ObjectInputStream ois = new ObjectInputStream( reader.getImage().getBinaryStream() );
-		image = (HashMap) ois.readObject();
-		assertTrue( image.containsKey( "meta" ) );
-		em.getTransaction().commit();
-		em.close();
-	}
-
-	public Class[] getAnnotatedClasses() {
-		return new Class[]{
-				ImageReader.class
-		};
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/lob/BlobTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/lob/BlobTest.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/lob/BlobTest.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/lob/BlobTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,49 @@
+//$Id$
+package org.hibernate.ejb.test.lob;
+
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.sql.Blob;
+import java.util.HashMap;
+import java.util.Map;
+import javax.persistence.EntityManager;
+
+import org.hibernate.Hibernate;
+import org.hibernate.ejb.test.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class BlobTest extends TestCase {
+
+	public void testBlobSerialization() throws Exception {
+		EntityManager em = factory.createEntityManager();
+		em.getTransaction().begin();
+		Map image = new HashMap();
+		image.put( "meta", "metadata" );
+		image.put( "data", "imagedata" );
+		ImageReader reader = new ImageReader();
+		ByteArrayOutputStream baos = new ByteArrayOutputStream();
+		ObjectOutputStream oos = new ObjectOutputStream( baos );
+		oos.writeObject( image );
+		reader.setImage( (Blob) Hibernate.createBlob( baos.toByteArray() ) );
+		em.persist( reader );
+		em.getTransaction().commit();
+		em.close(); //useless but y'a know
+		em = factory.createEntityManager();
+		em.getTransaction().begin();
+		reader = em.find( ImageReader.class, reader.getId() );
+		ObjectInputStream ois = new ObjectInputStream( reader.getImage().getBinaryStream() );
+		image = (HashMap) ois.readObject();
+		assertTrue( image.containsKey( "meta" ) );
+		em.getTransaction().commit();
+		em.close();
+	}
+
+	public Class[] getAnnotatedClasses() {
+		return new Class[]{
+				ImageReader.class
+		};
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/lob/ImageReader.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/lob/ImageReader.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/lob/ImageReader.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,52 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.lob;
-
-import java.io.Serializable;
-import java.sql.Blob;
-import java.sql.Clob;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.Lob;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class ImageReader implements Serializable {
-
-	private long id;
-	private Blob image;
-	private Clob text;
-
-	@Id
-	@GeneratedValue
-	public long getId() {
-		return id;
-	}
-
-	public void setId(long id) {
-		this.id = id;
-	}
-
-	@Lob
-	@Column(name = "bin_img")
-	public Blob getImage() {
-		return image;
-	}
-
-	public void setImage(Blob image) {
-		this.image = image;
-	}
-
-	@Lob
-	@Column(name = "img_text")
-	public Clob getText() {
-		return text;
-	}
-
-	public void setText(Clob text) {
-		this.text = text;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/lob/ImageReader.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/lob/ImageReader.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/lob/ImageReader.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/lob/ImageReader.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,52 @@
+//$Id$
+package org.hibernate.ejb.test.lob;
+
+import java.io.Serializable;
+import java.sql.Blob;
+import java.sql.Clob;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Lob;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class ImageReader implements Serializable {
+
+	private long id;
+	private Blob image;
+	private Clob text;
+
+	@Id
+	@GeneratedValue
+	public long getId() {
+		return id;
+	}
+
+	public void setId(long id) {
+		this.id = id;
+	}
+
+	@Lob
+	@Column(name = "bin_img")
+	public Blob getImage() {
+		return image;
+	}
+
+	public void setImage(Blob image) {
+		this.image = image;
+	}
+
+	@Lob
+	@Column(name = "img_text")
+	public Clob getText() {
+		return text;
+	}
+
+	public void setText(Clob text) {
+		this.text = text;
+	}
+}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/lock (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/lock)

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/lock/Lock.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/lock/Lock.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/lock/Lock.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,44 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.lock;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.Version;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Lock {
-	private Integer id;
-	private Integer version;
-	private String name;
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	@Version
-	public Integer getVersion() {
-		return version;
-	}
-
-	public void setVersion(Integer version) {
-		this.version = version;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/lock/Lock.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/lock/Lock.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/lock/Lock.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/lock/Lock.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,44 @@
+//$Id$
+package org.hibernate.ejb.test.lock;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Version;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Lock {
+	private Integer id;
+	private Integer version;
+	private String name;
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	@Version
+	public Integer getVersion() {
+		return version;
+	}
+
+	public void setVersion(Integer version) {
+		this.version = version;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/lock/LockTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/lock/LockTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/lock/LockTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,65 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.lock;
-
-import javax.persistence.EntityManager;
-import javax.persistence.LockModeType;
-
-import org.hibernate.ejb.test.TestCase;
-
-/**
- * @author Emmanuel Bernard
- */
-public class LockTest extends TestCase {
-
-	public void testLockRead() throws Exception {
-		Lock lock = new Lock();
-		lock.setName( "name" );
-		EntityManager em = factory.createEntityManager();
-		em.getTransaction().begin();
-		em.persist( lock );
-		em.getTransaction().commit();
-
-		em.getTransaction().begin();
-		lock = em.getReference( Lock.class, lock.getId() );
-		em.lock( lock, LockModeType.READ );
-		lock.setName( "surname" );
-		em.getTransaction().commit();
-
-		em.getTransaction().begin();
-		lock = em.find( Lock.class, lock.getId() );
-		assertEquals( "surname", lock.getName() );
-		em.remove( lock );
-		em.getTransaction().commit();
-	}
-
-	public void testLockWrite() throws Exception {
-		Lock lock = new Lock();
-		lock.setName( "second" );
-		EntityManager em = factory.createEntityManager();
-		em.getTransaction().begin();
-		em.persist( lock );
-		em.getTransaction().commit();
-
-		em.getTransaction().begin();
-		lock = em.getReference( Lock.class, lock.getId() );
-		Integer version = lock.getVersion();
-		em.lock( lock, LockModeType.WRITE );
-		em.getTransaction().commit();
-
-		em.getTransaction().begin();
-		lock = em.getReference( Lock.class, lock.getId() );
-		try {
-			assertEquals( "should increase the version number EJB-106", 1, lock.getVersion() - version );
-		}
-		finally {
-			em.remove( lock );
-			em.getTransaction().commit();
-		}
-	}
-
-	public Class[] getAnnotatedClasses() {
-		return new Class[]{
-				Lock.class
-		};
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/lock/LockTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/lock/LockTest.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/lock/LockTest.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/lock/LockTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,65 @@
+//$Id$
+package org.hibernate.ejb.test.lock;
+
+import javax.persistence.EntityManager;
+import javax.persistence.LockModeType;
+
+import org.hibernate.ejb.test.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class LockTest extends TestCase {
+
+	public void testLockRead() throws Exception {
+		Lock lock = new Lock();
+		lock.setName( "name" );
+		EntityManager em = factory.createEntityManager();
+		em.getTransaction().begin();
+		em.persist( lock );
+		em.getTransaction().commit();
+
+		em.getTransaction().begin();
+		lock = em.getReference( Lock.class, lock.getId() );
+		em.lock( lock, LockModeType.READ );
+		lock.setName( "surname" );
+		em.getTransaction().commit();
+
+		em.getTransaction().begin();
+		lock = em.find( Lock.class, lock.getId() );
+		assertEquals( "surname", lock.getName() );
+		em.remove( lock );
+		em.getTransaction().commit();
+	}
+
+	public void testLockWrite() throws Exception {
+		Lock lock = new Lock();
+		lock.setName( "second" );
+		EntityManager em = factory.createEntityManager();
+		em.getTransaction().begin();
+		em.persist( lock );
+		em.getTransaction().commit();
+
+		em.getTransaction().begin();
+		lock = em.getReference( Lock.class, lock.getId() );
+		Integer version = lock.getVersion();
+		em.lock( lock, LockModeType.WRITE );
+		em.getTransaction().commit();
+
+		em.getTransaction().begin();
+		lock = em.getReference( Lock.class, lock.getId() );
+		try {
+			assertEquals( "should increase the version number EJB-106", 1, lock.getVersion() - version );
+		}
+		finally {
+			em.remove( lock );
+			em.getTransaction().commit();
+		}
+	}
+
+	public Class[] getAnnotatedClasses() {
+		return new Class[]{
+				Lock.class
+		};
+	}
+}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops)

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Animal.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Animal.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Animal.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,32 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.ops;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.GeneratedValue;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public abstract class Animal {
-	private String name;
-	private Long id;
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-	@Id
-	@GeneratedValue
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Animal.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Animal.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Animal.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Animal.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,32 @@
+//$Id: $
+package org.hibernate.ejb.test.ops;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public abstract class Animal {
+	private String name;
+	private Long id;
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+	@Id
+	@GeneratedValue
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Child.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Child.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Child.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,43 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.ops;
-
-/**
- * @author Emmanuel Bernard
- */
-public class Child {
-	private String name;
-	private int age;
-
-	Child() {
-	}
-
-	public Child(String name) {
-		this.name = name;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	public int getAge() {
-		return age;
-	}
-
-	public void setAge(int age) {
-		this.age = age;
-	}
-
-	private Parent parent;
-
-	public Parent getParent() {
-		return parent;
-	}
-
-	public void setParent(Parent parent) {
-		this.parent = parent;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Child.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Child.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Child.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Child.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,43 @@
+//$Id$
+package org.hibernate.ejb.test.ops;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Child {
+	private String name;
+	private int age;
+
+	Child() {
+	}
+
+	public Child(String name) {
+		this.name = name;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public int getAge() {
+		return age;
+	}
+
+	public void setAge(int age) {
+		this.age = age;
+	}
+
+	private Parent parent;
+
+	public Parent getParent() {
+		return parent;
+	}
+
+	public void setParent(Parent parent) {
+		this.parent = parent;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Employee.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Employee.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Employee.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,35 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.ops;
-
-import java.io.Serializable;
-import java.util.Collection;
-
-
-/**
- * Employee in an Employer-Employee relationship
- *
- * @author Emmanuel Bernard
- */
-
-public class Employee implements Serializable {
-	private Integer id;
-	private Collection employers;
-
-
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer integer) {
-		id = integer;
-	}
-
-
-	public Collection getEmployers() {
-		return employers;
-	}
-
-	public void setEmployers(Collection employers) {
-		this.employers = employers;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Employee.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Employee.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Employee.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Employee.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,35 @@
+//$Id$
+package org.hibernate.ejb.test.ops;
+
+import java.io.Serializable;
+import java.util.Collection;
+
+
+/**
+ * Employee in an Employer-Employee relationship
+ *
+ * @author Emmanuel Bernard
+ */
+
+public class Employee implements Serializable {
+	private Integer id;
+	private Collection employers;
+
+
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer integer) {
+		id = integer;
+	}
+
+
+	public Collection getEmployers() {
+		return employers;
+	}
+
+	public void setEmployers(Collection employers) {
+		this.employers = employers;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Employer.hbm.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Employer.hbm.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Employer.hbm.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,38 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE hibernate-mapping PUBLIC
-        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
-        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
-
-<!--
-  
--->
-
-<hibernate-mapping package="org.hibernate.ejb.test.ops">
-
-    <class name="Employer" polymorphism="explicit">
-        <id name="id">
-            <generator class="native"/>
-        </id>
-        <bag name="employees"
-             cascade="persist,merge"
-             table="EMPLOYER_EMPLOYEE">
-            <key column="EMPER_ID"/>
-            <many-to-many class="Employee" column="EMPEE_ID"/>
-        </bag>
-    </class>
-
-    <class name="Employee" polymorphism="explicit">
-        <id name="id">
-            <generator class="native"/>
-        </id>
-        <bag name="employers"
-             inverse="true"
-             cascade="persist,merge"
-             table="EMPLOYER_EMPLOYEE">
-            <key column="EMPEE_ID"/>
-            <many-to-many class="Employer" column="EMPER_ID"/>
-        </bag>
-    </class>
-
-</hibernate-mapping>
-

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Employer.hbm.xml (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Employer.hbm.xml)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Employer.hbm.xml	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Employer.hbm.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,38 @@
+<?xml version="1.0"?>
+<!DOCTYPE hibernate-mapping PUBLIC
+        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+
+<!--
+  
+-->
+
+<hibernate-mapping package="org.hibernate.ejb.test.ops">
+
+    <class name="Employer" polymorphism="explicit">
+        <id name="id">
+            <generator class="native"/>
+        </id>
+        <bag name="employees"
+             cascade="persist,merge"
+             table="EMPLOYER_EMPLOYEE">
+            <key column="EMPER_ID"/>
+            <many-to-many class="Employee" column="EMPEE_ID"/>
+        </bag>
+    </class>
+
+    <class name="Employee" polymorphism="explicit">
+        <id name="id">
+            <generator class="native"/>
+        </id>
+        <bag name="employers"
+             inverse="true"
+             cascade="persist,merge"
+             table="EMPLOYER_EMPLOYEE">
+            <key column="EMPEE_ID"/>
+            <many-to-many class="Employer" column="EMPER_ID"/>
+        </bag>
+    </class>
+
+</hibernate-mapping>
+

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Employer.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Employer.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Employer.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,35 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.ops;
-
-import java.io.Serializable;
-import java.util.Collection;
-
-
-/**
- * Employer in a employer-Employee relationship
- *
- * @author Emmanuel Bernard
- */
-
-public class Employer implements Serializable {
-	private Integer id;
-	private Collection employees;
-
-
-	public Collection getEmployees() {
-		return employees;
-	}
-
-
-	public Integer getId() {
-		return id;
-	}
-
-	public void setEmployees(Collection set) {
-		employees = set;
-	}
-
-	public void setId(Integer integer) {
-		id = integer;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Employer.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Employer.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Employer.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Employer.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,35 @@
+//$Id$
+package org.hibernate.ejb.test.ops;
+
+import java.io.Serializable;
+import java.util.Collection;
+
+
+/**
+ * Employer in a employer-Employee relationship
+ *
+ * @author Emmanuel Bernard
+ */
+
+public class Employer implements Serializable {
+	private Integer id;
+	private Collection employees;
+
+
+	public Collection getEmployees() {
+		return employees;
+	}
+
+
+	public Integer getId() {
+		return id;
+	}
+
+	public void setEmployees(Collection set) {
+		employees = set;
+	}
+
+	public void setId(Integer integer) {
+		id = integer;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/FindTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/FindTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/FindTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,33 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.ops;
-
-import javax.persistence.EntityManager;
-
-import org.hibernate.ejb.test.TestCase;
-
-/**
- * @author Emmanuel Bernard
- */
-public class FindTest extends TestCase {
-
-	public void testSubclassWrongId() throws Exception {
-		Mammal mammal = new Mammal();
-		mammal.setMamalNbr( 2 );
-		mammal.setName( "Human" );
-		EntityManager em = factory.createEntityManager();
-		em.getTransaction().begin();
-		em.persist( mammal );
-		em.flush();
-		assertNull( em.find(Reptile.class, 1l) );
-		em.getTransaction().rollback();
-		em.close();
-	}
-
-	public Class[] getAnnotatedClasses() {
-		return new Class[] {
-				Mammal.class,
-				Reptile.class,
-				Animal.class
-		};
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/FindTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/FindTest.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/FindTest.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/FindTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,33 @@
+//$Id: $
+package org.hibernate.ejb.test.ops;
+
+import javax.persistence.EntityManager;
+
+import org.hibernate.ejb.test.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class FindTest extends TestCase {
+
+	public void testSubclassWrongId() throws Exception {
+		Mammal mammal = new Mammal();
+		mammal.setMamalNbr( 2 );
+		mammal.setName( "Human" );
+		EntityManager em = factory.createEntityManager();
+		em.getTransaction().begin();
+		em.persist( mammal );
+		em.flush();
+		assertNull( em.find(Reptile.class, 1l) );
+		em.getTransaction().rollback();
+		em.close();
+	}
+
+	public Class[] getAnnotatedClasses() {
+		return new Class[] {
+				Mammal.class,
+				Reptile.class,
+				Animal.class
+		};
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/FlushTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/FlushTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/FlushTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,49 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.ops;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-import org.hibernate.ejb.test.EJB3TestCase;
-
-/**
- * @author Emmanuel Bernard
- */
-public class FlushTest extends EJB3TestCase {
-
-	public void testPersistCascasde() {
-		Session s = openSession();
-		Transaction t = s.beginTransaction();
-
-		Parent p = new Parent( "Marc" );
-		Parent p2 = new Parent( "Nathalie" );
-
-		// FAILS
-		s.persist( p );
-		s.persist( p2 );
-
-		Child c = new Child( "Elvira" );
-		Child c2 = new Child( "Blase" );
-		p.getChildren().add( c );
-		c.setParent( p );
-		p.getChildren().add( c2 );
-		c2.setParent( p );
-
-		// WORKS
-		//s.persist(p);
-		//s.persist(p2);
-
-		t.commit();
-		s.close();
-
-	}
-
-	public FlushTest(String x) {
-		super( x );
-	}
-
-	protected String[] getMappings() {
-		return new String[]{
-				"ops/ParentChild.hbm.xml"
-		};
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/FlushTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/FlushTest.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/FlushTest.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/FlushTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,49 @@
+//$Id$
+package org.hibernate.ejb.test.ops;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.ejb.test.EJB3TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class FlushTest extends EJB3TestCase {
+
+	public void testPersistCascasde() {
+		Session s = openSession();
+		Transaction t = s.beginTransaction();
+
+		Parent p = new Parent( "Marc" );
+		Parent p2 = new Parent( "Nathalie" );
+
+		// FAILS
+		s.persist( p );
+		s.persist( p2 );
+
+		Child c = new Child( "Elvira" );
+		Child c2 = new Child( "Blase" );
+		p.getChildren().add( c );
+		c.setParent( p );
+		p.getChildren().add( c2 );
+		c2.setParent( p );
+
+		// WORKS
+		//s.persist(p);
+		//s.persist(p2);
+
+		t.commit();
+		s.close();
+
+	}
+
+	public FlushTest(String x) {
+		super( x );
+	}
+
+	protected String[] getMappings() {
+		return new String[]{
+				"ops/ParentChild.hbm.xml"
+		};
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/GetLoadTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/GetLoadTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/GetLoadTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,114 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.ops;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import org.hibernate.Hibernate;
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-import org.hibernate.cfg.Configuration;
-import org.hibernate.cfg.Environment;
-import org.hibernate.ejb.test.EJB3TestCase;
-
-/**
- * @author Gavin King
- */
-public class GetLoadTest extends EJB3TestCase {
-
-	public GetLoadTest(String str) {
-		super( str );
-	}
-
-	public void testGetLoad() {
-		clearCounts();
-
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		Employer emp = new Employer();
-		s.persist( emp );
-		Node node = new Node( "foo" );
-		Node parent = new Node( "bar" );
-		parent.addChild( node );
-		s.persist( parent );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		emp = (Employer) s.get( Employer.class, emp.getId() );
-		assertTrue( Hibernate.isInitialized( emp ) );
-		assertFalse( Hibernate.isInitialized( emp.getEmployees() ) );
-		node = (Node) s.get( Node.class, node.getName() );
-		assertTrue( Hibernate.isInitialized( node ) );
-		assertFalse( Hibernate.isInitialized( node.getChildren() ) );
-		assertFalse( Hibernate.isInitialized( node.getParent() ) );
-		assertNull( s.get( Node.class, "xyz" ) );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		emp = (Employer) s.load( Employer.class, emp.getId() );
-		emp.getId();
-		assertFalse( Hibernate.isInitialized( emp ) );
-		node = (Node) s.load( Node.class, node.getName() );
-		assertEquals( node.getName(), "foo" );
-		assertFalse( Hibernate.isInitialized( node ) );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		emp = (Employer) s.get( "org.hibernate.ejb.test.ops.Employer", emp.getId() );
-		assertTrue( Hibernate.isInitialized( emp ) );
-		node = (Node) s.get( "org.hibernate.ejb.test.ops.Node", node.getName() );
-		assertTrue( Hibernate.isInitialized( node ) );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		emp = (Employer) s.load( "org.hibernate.ejb.test.ops.Employer", emp.getId() );
-		emp.getId();
-		assertFalse( Hibernate.isInitialized( emp ) );
-		node = (Node) s.load( "org.hibernate.ejb.test.ops.Node", node.getName() );
-		assertEquals( node.getName(), "foo" );
-		assertFalse( Hibernate.isInitialized( node ) );
-		tx.commit();
-		s.close();
-
-		assertFetchCount( 0 );
-	}
-
-	private void clearCounts() {
-		getSessions().getStatistics().clear();
-	}
-
-	private void assertFetchCount(int count) {
-		int fetches = (int) getSessions().getStatistics().getEntityFetchCount();
-		assertEquals( count, fetches );
-	}
-
-	protected void configure(Configuration cfg) {
-		super.configure( cfg );
-		cfg.setProperty( Environment.GENERATE_STATISTICS, "true" );
-		cfg.setProperty( Environment.STATEMENT_BATCH_SIZE, "0" );
-	}
-
-	protected String[] getMappings() {
-		return new String[]{
-				"ops/Node.hbm.xml",
-				"ops/Employer.hbm.xml"
-		};
-	}
-
-	public static Test suite() {
-		return new TestSuite( GetLoadTest.class );
-	}
-
-	public String getCacheConcurrencyStrategy() {
-		return null;
-	}
-
-}
-

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/GetLoadTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/GetLoadTest.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/GetLoadTest.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/GetLoadTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,114 @@
+//$Id$
+package org.hibernate.ejb.test.ops;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+import org.hibernate.Hibernate;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.cfg.Configuration;
+import org.hibernate.cfg.Environment;
+import org.hibernate.ejb.test.EJB3TestCase;
+
+/**
+ * @author Gavin King
+ */
+public class GetLoadTest extends EJB3TestCase {
+
+	public GetLoadTest(String str) {
+		super( str );
+	}
+
+	public void testGetLoad() {
+		clearCounts();
+
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		Employer emp = new Employer();
+		s.persist( emp );
+		Node node = new Node( "foo" );
+		Node parent = new Node( "bar" );
+		parent.addChild( node );
+		s.persist( parent );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		emp = (Employer) s.get( Employer.class, emp.getId() );
+		assertTrue( Hibernate.isInitialized( emp ) );
+		assertFalse( Hibernate.isInitialized( emp.getEmployees() ) );
+		node = (Node) s.get( Node.class, node.getName() );
+		assertTrue( Hibernate.isInitialized( node ) );
+		assertFalse( Hibernate.isInitialized( node.getChildren() ) );
+		assertFalse( Hibernate.isInitialized( node.getParent() ) );
+		assertNull( s.get( Node.class, "xyz" ) );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		emp = (Employer) s.load( Employer.class, emp.getId() );
+		emp.getId();
+		assertFalse( Hibernate.isInitialized( emp ) );
+		node = (Node) s.load( Node.class, node.getName() );
+		assertEquals( node.getName(), "foo" );
+		assertFalse( Hibernate.isInitialized( node ) );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		emp = (Employer) s.get( "org.hibernate.ejb.test.ops.Employer", emp.getId() );
+		assertTrue( Hibernate.isInitialized( emp ) );
+		node = (Node) s.get( "org.hibernate.ejb.test.ops.Node", node.getName() );
+		assertTrue( Hibernate.isInitialized( node ) );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		emp = (Employer) s.load( "org.hibernate.ejb.test.ops.Employer", emp.getId() );
+		emp.getId();
+		assertFalse( Hibernate.isInitialized( emp ) );
+		node = (Node) s.load( "org.hibernate.ejb.test.ops.Node", node.getName() );
+		assertEquals( node.getName(), "foo" );
+		assertFalse( Hibernate.isInitialized( node ) );
+		tx.commit();
+		s.close();
+
+		assertFetchCount( 0 );
+	}
+
+	private void clearCounts() {
+		getSessions().getStatistics().clear();
+	}
+
+	private void assertFetchCount(int count) {
+		int fetches = (int) getSessions().getStatistics().getEntityFetchCount();
+		assertEquals( count, fetches );
+	}
+
+	protected void configure(Configuration cfg) {
+		super.configure( cfg );
+		cfg.setProperty( Environment.GENERATE_STATISTICS, "true" );
+		cfg.setProperty( Environment.STATEMENT_BATCH_SIZE, "0" );
+	}
+
+	protected String[] getMappings() {
+		return new String[]{
+				"ops/Node.hbm.xml",
+				"ops/Employer.hbm.xml"
+		};
+	}
+
+	public static Test suite() {
+		return new TestSuite( GetLoadTest.class );
+	}
+
+	public String getCacheConcurrencyStrategy() {
+		return null;
+	}
+
+}
+

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Mammal.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Mammal.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Mammal.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,20 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.ops;
-
-import javax.persistence.Entity;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Mammal extends Animal {
-	private int mamalNbr;
-
-	public int getMamalNbr() {
-		return mamalNbr;
-	}
-
-	public void setMamalNbr(int mamalNbr) {
-		this.mamalNbr = mamalNbr;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Mammal.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Mammal.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Mammal.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Mammal.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,20 @@
+//$Id: $
+package org.hibernate.ejb.test.ops;
+
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Mammal extends Animal {
+	private int mamalNbr;
+
+	public int getMamalNbr() {
+		return mamalNbr;
+	}
+
+	public void setMamalNbr(int mamalNbr) {
+		this.mamalNbr = mamalNbr;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/MergeNewTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/MergeNewTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/MergeNewTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,57 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.ops;
-
-import javax.persistence.EntityManager;
-
-import org.hibernate.ejb.test.TestCase;
-
-/**
- * @author Emmanuel Bernard
- */
-public class MergeNewTest extends TestCase {
-
-	public void testMergeNew() throws Exception {
-		Workload load = new Workload();
-		load.name = "Cleaning";
-		load.load = 10;
-		EntityManager em = factory.createEntityManager();
-		em.getTransaction().begin();
-		load = em.merge( load );
-		assertNotNull( load.id );
-		em.flush();
-		assertNotNull( load.id );
-		em.getTransaction().rollback();
-		em.close();
-	}
-
-	public void testMergeAfterRemove() throws Exception {
-		Workload load = new Workload();
-		load.name = "Cleaning";
-		load.load = 10;
-		EntityManager em = factory.createEntityManager();
-		em.getTransaction().begin();
-		load = em.merge( load );
-		em.flush();
-		em.getTransaction().commit();
-		em.close();
-		em = factory.createEntityManager();
-		em.getTransaction().begin();
-		load = em.find( Workload.class, load.id );
-		em.remove( load );
-		em.flush();
-		em.getTransaction().commit();
-		em.close();
-		em = factory.createEntityManager();
-		em.getTransaction().begin();
-		em.merge( load );
-		em.flush();
-		em.getTransaction().commit();
-		em.close();
-	}
-
-	public Class[] getAnnotatedClasses() {
-		return new Class[]{
-				Workload.class
-		};
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/MergeNewTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/MergeNewTest.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/MergeNewTest.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/MergeNewTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,57 @@
+//$Id$
+package org.hibernate.ejb.test.ops;
+
+import javax.persistence.EntityManager;
+
+import org.hibernate.ejb.test.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class MergeNewTest extends TestCase {
+
+	public void testMergeNew() throws Exception {
+		Workload load = new Workload();
+		load.name = "Cleaning";
+		load.load = 10;
+		EntityManager em = factory.createEntityManager();
+		em.getTransaction().begin();
+		load = em.merge( load );
+		assertNotNull( load.id );
+		em.flush();
+		assertNotNull( load.id );
+		em.getTransaction().rollback();
+		em.close();
+	}
+
+	public void testMergeAfterRemove() throws Exception {
+		Workload load = new Workload();
+		load.name = "Cleaning";
+		load.load = 10;
+		EntityManager em = factory.createEntityManager();
+		em.getTransaction().begin();
+		load = em.merge( load );
+		em.flush();
+		em.getTransaction().commit();
+		em.close();
+		em = factory.createEntityManager();
+		em.getTransaction().begin();
+		load = em.find( Workload.class, load.id );
+		em.remove( load );
+		em.flush();
+		em.getTransaction().commit();
+		em.close();
+		em = factory.createEntityManager();
+		em.getTransaction().begin();
+		em.merge( load );
+		em.flush();
+		em.getTransaction().commit();
+		em.close();
+	}
+
+	public Class[] getAnnotatedClasses() {
+		return new Class[]{
+				Workload.class
+		};
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/MergeTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/MergeTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/MergeTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,118 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.ops;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-import org.hibernate.cfg.Configuration;
-import org.hibernate.cfg.Environment;
-import org.hibernate.ejb.test.EJB3TestCase;
-
-/**
- * @author Gavin King
- */
-public class MergeTest extends EJB3TestCase {
-
-	public MergeTest(String str) {
-		super( str );
-	}
-
-	public void testMergeTree() {
-
-		clearCounts();
-
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		Node root = new Node( "root" );
-		Node child = new Node( "child" );
-		root.addChild( child );
-		s.persist( root );
-		tx.commit();
-		s.close();
-
-		assertInsertCount( 2 );
-		clearCounts();
-
-		root.setDescription( "The root node" );
-		child.setDescription( "The child node" );
-
-		Node secondChild = new Node( "second child" );
-
-		root.addChild( secondChild );
-
-		s = openSession();
-		tx = s.beginTransaction();
-		s.merge( root );
-		tx.commit();
-		s.close();
-
-		assertInsertCount( 1 );
-		assertUpdateCount( 2 );
-
-	}
-
-	public void testMergeTreeWithGeneratedId() {
-
-		clearCounts();
-
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		NumberedNode root = new NumberedNode( "root" );
-		NumberedNode child = new NumberedNode( "child" );
-		root.addChild( child );
-		s.persist( root );
-		tx.commit();
-		s.close();
-
-		assertInsertCount( 2 );
-		clearCounts();
-
-		root.setDescription( "The root node" );
-		child.setDescription( "The child node" );
-
-		NumberedNode secondChild = new NumberedNode( "second child" );
-
-		root.addChild( secondChild );
-
-		s = openSession();
-		tx = s.beginTransaction();
-		s.merge( root );
-		tx.commit();
-		s.close();
-
-		assertInsertCount( 1 );
-		assertUpdateCount( 2 );
-
-	}
-
-	private void clearCounts() {
-		getSessions().getStatistics().clear();
-	}
-
-	private void assertInsertCount(int count) {
-		int inserts = (int) getSessions().getStatistics().getEntityInsertCount();
-		assertEquals( count, inserts );
-	}
-
-	private void assertUpdateCount(int count) {
-		int updates = (int) getSessions().getStatistics().getEntityUpdateCount();
-		assertEquals( count, updates );
-	}
-
-	protected void configure(Configuration cfg) {
-		super.configure( cfg );
-		cfg.setProperty( Environment.GENERATE_STATISTICS, "true" );
-		cfg.setProperty( Environment.STATEMENT_BATCH_SIZE, "0" );
-	}
-
-	protected String[] getMappings() {
-		return new String[]{"ops/Node.hbm.xml"};
-	}
-
-	public static Test suite() {
-		return new TestSuite( MergeTest.class );
-	}
-
-}
-

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/MergeTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/MergeTest.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/MergeTest.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/MergeTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,118 @@
+//$Id$
+package org.hibernate.ejb.test.ops;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.cfg.Configuration;
+import org.hibernate.cfg.Environment;
+import org.hibernate.ejb.test.EJB3TestCase;
+
+/**
+ * @author Gavin King
+ */
+public class MergeTest extends EJB3TestCase {
+
+	public MergeTest(String str) {
+		super( str );
+	}
+
+	public void testMergeTree() {
+
+		clearCounts();
+
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		Node root = new Node( "root" );
+		Node child = new Node( "child" );
+		root.addChild( child );
+		s.persist( root );
+		tx.commit();
+		s.close();
+
+		assertInsertCount( 2 );
+		clearCounts();
+
+		root.setDescription( "The root node" );
+		child.setDescription( "The child node" );
+
+		Node secondChild = new Node( "second child" );
+
+		root.addChild( secondChild );
+
+		s = openSession();
+		tx = s.beginTransaction();
+		s.merge( root );
+		tx.commit();
+		s.close();
+
+		assertInsertCount( 1 );
+		assertUpdateCount( 2 );
+
+	}
+
+	public void testMergeTreeWithGeneratedId() {
+
+		clearCounts();
+
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		NumberedNode root = new NumberedNode( "root" );
+		NumberedNode child = new NumberedNode( "child" );
+		root.addChild( child );
+		s.persist( root );
+		tx.commit();
+		s.close();
+
+		assertInsertCount( 2 );
+		clearCounts();
+
+		root.setDescription( "The root node" );
+		child.setDescription( "The child node" );
+
+		NumberedNode secondChild = new NumberedNode( "second child" );
+
+		root.addChild( secondChild );
+
+		s = openSession();
+		tx = s.beginTransaction();
+		s.merge( root );
+		tx.commit();
+		s.close();
+
+		assertInsertCount( 1 );
+		assertUpdateCount( 2 );
+
+	}
+
+	private void clearCounts() {
+		getSessions().getStatistics().clear();
+	}
+
+	private void assertInsertCount(int count) {
+		int inserts = (int) getSessions().getStatistics().getEntityInsertCount();
+		assertEquals( count, inserts );
+	}
+
+	private void assertUpdateCount(int count) {
+		int updates = (int) getSessions().getStatistics().getEntityUpdateCount();
+		assertEquals( count, updates );
+	}
+
+	protected void configure(Configuration cfg) {
+		super.configure( cfg );
+		cfg.setProperty( Environment.GENERATE_STATISTICS, "true" );
+		cfg.setProperty( Environment.STATEMENT_BATCH_SIZE, "0" );
+	}
+
+	protected String[] getMappings() {
+		return new String[]{"ops/Node.hbm.xml"};
+	}
+
+	public static Test suite() {
+		return new TestSuite( MergeTest.class );
+	}
+
+}
+

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Node.hbm.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Node.hbm.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Node.hbm.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,44 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE hibernate-mapping PUBLIC
-        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
-        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
-
-<!--
-  
--->
-
-<hibernate-mapping package="org.hibernate.ejb.test.ops">
-
-    <class name="Node" polymorphism="explicit">
-        <id name="name">
-            <generator class="assigned"/>
-        </id>
-        <property name="description"/>
-        <many-to-one name="parent"/>
-        <set name="children"
-             inverse="true"
-             cascade="persist,merge">
-            <key column="parent"/>
-            <one-to-many class="Node"/>
-        </set>
-    </class>
-
-    <class name="NumberedNode" polymorphism="explicit">
-        <id name="id" unsaved-value="0">
-            <generator class="native"/>
-        </id>
-        <property name="name">
-            <column name="name" index="iname" not-null="true"/>
-        </property>
-        <property name="description"/>
-        <many-to-one name="parent" class="NumberedNode"/>
-        <set name="children"
-             inverse="true"
-             cascade="persist,merge">
-            <key column="parent"/>
-            <one-to-many class="NumberedNode"/>
-        </set>
-    </class>
-
-</hibernate-mapping>
-

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Node.hbm.xml (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Node.hbm.xml)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Node.hbm.xml	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Node.hbm.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,44 @@
+<?xml version="1.0"?>
+<!DOCTYPE hibernate-mapping PUBLIC
+        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+
+<!--
+  
+-->
+
+<hibernate-mapping package="org.hibernate.ejb.test.ops">
+
+    <class name="Node" polymorphism="explicit">
+        <id name="name">
+            <generator class="assigned"/>
+        </id>
+        <property name="description"/>
+        <many-to-one name="parent"/>
+        <set name="children"
+             inverse="true"
+             cascade="persist,merge">
+            <key column="parent"/>
+            <one-to-many class="Node"/>
+        </set>
+    </class>
+
+    <class name="NumberedNode" polymorphism="explicit">
+        <id name="id" unsaved-value="0">
+            <generator class="native"/>
+        </id>
+        <property name="name">
+            <column name="name" index="iname" not-null="true"/>
+        </property>
+        <property name="description"/>
+        <many-to-one name="parent" class="NumberedNode"/>
+        <set name="children"
+             inverse="true"
+             cascade="persist,merge">
+            <key column="parent"/>
+            <one-to-many class="NumberedNode"/>
+        </set>
+    </class>
+
+</hibernate-mapping>
+

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Node.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Node.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Node.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,60 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.ops;
-
-import java.util.HashSet;
-import java.util.Set;
-
-/**
- * @author Gavin King
- */
-public class Node {
-	private String name;
-	private Node parent;
-	private Set children = new HashSet();
-	private String description;
-
-	public Node() {
-	}
-
-	public Node(String name) {
-		this.name = name;
-	}
-
-	public Set getChildren() {
-		return children;
-	}
-
-	public void setChildren(Set children) {
-		this.children = children;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	public Node getParent() {
-		return parent;
-	}
-
-	public void setParent(Node parent) {
-		this.parent = parent;
-	}
-
-	public Node addChild(Node child) {
-		children.add( child );
-		child.setParent( this );
-		return this;
-	}
-
-	public String getDescription() {
-		return description;
-	}
-
-	public void setDescription(String description) {
-		this.description = description;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Node.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Node.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Node.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Node.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,60 @@
+//$Id$
+package org.hibernate.ejb.test.ops;
+
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * @author Gavin King
+ */
+public class Node {
+	private String name;
+	private Node parent;
+	private Set children = new HashSet();
+	private String description;
+
+	public Node() {
+	}
+
+	public Node(String name) {
+		this.name = name;
+	}
+
+	public Set getChildren() {
+		return children;
+	}
+
+	public void setChildren(Set children) {
+		this.children = children;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public Node getParent() {
+		return parent;
+	}
+
+	public void setParent(Node parent) {
+		this.parent = parent;
+	}
+
+	public Node addChild(Node child) {
+		children.add( child );
+		child.setParent( this );
+		return this;
+	}
+
+	public String getDescription() {
+		return description;
+	}
+
+	public void setDescription(String description) {
+		this.description = description;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/NumberedNode.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/NumberedNode.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/NumberedNode.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,27 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.ops;
-
-/**
- * @author Gavin King
- */
-public class NumberedNode extends Node {
-
-	private long id;
-
-	public NumberedNode() {
-		super();
-	}
-
-
-	public NumberedNode(String name) {
-		super( name );
-	}
-
-	public long getId() {
-		return id;
-	}
-
-	public void setId(long id) {
-		this.id = id;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/NumberedNode.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/NumberedNode.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/NumberedNode.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/NumberedNode.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,27 @@
+//$Id$
+package org.hibernate.ejb.test.ops;
+
+/**
+ * @author Gavin King
+ */
+public class NumberedNode extends Node {
+
+	private long id;
+
+	public NumberedNode() {
+		super();
+	}
+
+
+	public NumberedNode(String name) {
+		super( name );
+	}
+
+	public long getId() {
+		return id;
+	}
+
+	public void setId(long id) {
+		this.id = id;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Parent.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Parent.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Parent.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,36 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.ops;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * @author Emmanuel Bernard
- */
-public class Parent {
-	private String name;
-	private List children = new ArrayList();
-
-	Parent() {
-	}
-
-	public Parent(String name) {
-		this.name = name;
-	}
-
-	public List getChildren() {
-		return children;
-	}
-
-	public void setChildren(List children) {
-		this.children = children;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Parent.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Parent.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Parent.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Parent.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,36 @@
+//$Id$
+package org.hibernate.ejb.test.ops;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Parent {
+	private String name;
+	private List children = new ArrayList();
+
+	Parent() {
+	}
+
+	public Parent(String name) {
+		this.name = name;
+	}
+
+	public List getChildren() {
+		return children;
+	}
+
+	public void setChildren(List children) {
+		this.children = children;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/ParentChild.hbm.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/ParentChild.hbm.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/ParentChild.hbm.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,25 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE hibernate-mapping PUBLIC
-        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
-        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
-
-<hibernate-mapping
-        package="org.hibernate.ejb.test.ops">
-
-    <class name="Parent">
-        <id name="name"/>
-        <list name="children" cascade="persist,merge">
-            <key column="parentName" not-null="true"/>
-            <list-index column="sibling"/>
-            <one-to-many class="Child"/>
-        </list>
-    </class>
-
-    <class name="Child">
-        <id name="name"/>
-        <property name="age" not-null="true"/>
-        <many-to-one name="parent" column="parentName"
-                     not-null="true" insert="false" update="false"/>
-    </class>
-
-</hibernate-mapping>
\ No newline at end of file

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/ParentChild.hbm.xml (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/ParentChild.hbm.xml)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/ParentChild.hbm.xml	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/ParentChild.hbm.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,25 @@
+<?xml version="1.0"?>
+<!DOCTYPE hibernate-mapping PUBLIC
+        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+
+<hibernate-mapping
+        package="org.hibernate.ejb.test.ops">
+
+    <class name="Parent">
+        <id name="name"/>
+        <list name="children" cascade="persist,merge">
+            <key column="parentName" not-null="true"/>
+            <list-index column="sibling"/>
+            <one-to-many class="Child"/>
+        </list>
+    </class>
+
+    <class name="Child">
+        <id name="name"/>
+        <property name="age" not-null="true"/>
+        <many-to-one name="parent" column="parentName"
+                     not-null="true" insert="false" update="false"/>
+    </class>
+
+</hibernate-mapping>
\ No newline at end of file

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/PersistTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/PersistTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/PersistTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,223 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.ops;
-
-import java.util.ArrayList;
-import java.util.Collection;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import org.hibernate.PersistentObjectException;
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-import org.hibernate.cfg.Configuration;
-import org.hibernate.cfg.Environment;
-import org.hibernate.ejb.test.EJB3TestCase;
-import org.hibernate.exception.ConstraintViolationException;
-
-/**
- * @author Gavin King
- */
-public class PersistTest extends EJB3TestCase {
-
-	public PersistTest(String str) {
-		super( str );
-	}
-
-	public void testCreateTree() {
-
-		clearCounts();
-
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		Node root = new Node( "root" );
-		Node child = new Node( "child" );
-		root.addChild( child );
-		s.persist( root );
-		tx.commit();
-		s.close();
-
-		assertInsertCount( 2 );
-		assertUpdateCount( 0 );
-
-		s = openSession();
-		tx = s.beginTransaction();
-		root = (Node) s.get( Node.class, "root" );
-		Node child2 = new Node( "child2" );
-		root.addChild( child2 );
-		tx.commit();
-		s.close();
-
-		assertInsertCount( 3 );
-		assertUpdateCount( 0 );
-	}
-
-	public void testCreateTreeWithGeneratedId() {
-
-		clearCounts();
-
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		NumberedNode root = new NumberedNode( "root" );
-		NumberedNode child = new NumberedNode( "child" );
-		root.addChild( child );
-		s.persist( root );
-		tx.commit();
-		s.close();
-
-		assertInsertCount( 2 );
-		assertUpdateCount( 0 );
-
-		s = openSession();
-		tx = s.beginTransaction();
-		root = (NumberedNode) s.get( NumberedNode.class, new Long( root.getId() ) );
-		NumberedNode child2 = new NumberedNode( "child2" );
-		root.addChild( child2 );
-		tx.commit();
-		s.close();
-
-		assertInsertCount( 3 );
-		assertUpdateCount( 0 );
-	}
-
-	public void testCreateException() {
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		Node dupe = new Node( "dupe" );
-		s.persist( dupe );
-		s.persist( dupe );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		s.persist( dupe );
-		try {
-			tx.commit();
-			fail( "Cannot persist() twice the same entity" );
-		}
-		catch (ConstraintViolationException cve) {
-			//verify that an exception is thrown!
-		}
-		tx.rollback();
-		s.close();
-
-		Node nondupe = new Node( "nondupe" );
-		nondupe.addChild( dupe );
-
-		s = openSession();
-		tx = s.beginTransaction();
-		s.persist( nondupe );
-		try {
-			tx.commit();
-			assertFalse( true );
-		}
-		catch (ConstraintViolationException cve) {
-			//verify that an exception is thrown!
-		}
-		tx.rollback();
-		s.close();
-	}
-
-	public void testCreateExceptionWithGeneratedId() {
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		NumberedNode dupe = new NumberedNode( "dupe" );
-		s.persist( dupe );
-		s.persist( dupe );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		try {
-			s.persist( dupe );
-			assertFalse( true );
-		}
-		catch (PersistentObjectException poe) {
-			//verify that an exception is thrown!
-		}
-		tx.rollback();
-		s.close();
-
-		NumberedNode nondupe = new NumberedNode( "nondupe" );
-		nondupe.addChild( dupe );
-
-		s = openSession();
-		tx = s.beginTransaction();
-		try {
-			s.persist( nondupe );
-			assertFalse( true );
-		}
-		catch (PersistentObjectException poe) {
-			//verify that an exception is thrown!
-		}
-		tx.rollback();
-		s.close();
-	}
-
-	public void testBasic() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		Employer er = new Employer();
-		Employee ee = new Employee();
-		s.persist( ee );
-		Collection erColl = new ArrayList();
-		Collection eeColl = new ArrayList();
-		erColl.add( ee );
-		eeColl.add( er );
-		er.setEmployees( erColl );
-		ee.setEmployers( eeColl );
-		tx.commit();
-		s.close();
-
-		s = openSession();
-		tx = s.beginTransaction();
-		er = (Employer) s.load( Employer.class, er.getId() );
-		assertNotNull( er );
-		assertNotNull( er.getEmployees() );
-		assertEquals( 1, er.getEmployees().size() );
-		Employee eeFromDb = (Employee) er.getEmployees().iterator().next();
-		assertEquals( ee.getId(), eeFromDb.getId() );
-		tx.commit();
-		s.close();
-	}
-
-	private void clearCounts() {
-		getSessions().getStatistics().clear();
-	}
-
-	private void assertInsertCount(int count) {
-		int inserts = (int) getSessions().getStatistics().getEntityInsertCount();
-		assertEquals( count, inserts );
-	}
-
-	private void assertUpdateCount(int count) {
-		int updates = (int) getSessions().getStatistics().getEntityUpdateCount();
-		assertEquals( count, updates );
-	}
-
-	protected void configure(Configuration cfg) {
-		super.configure( cfg );
-		cfg.setProperty( Environment.GENERATE_STATISTICS, "true" );
-		cfg.setProperty( Environment.STATEMENT_BATCH_SIZE, "0" );
-	}
-
-	protected String[] getMappings() {
-		return new String[]{
-				"ops/Node.hbm.xml",
-				"ops/Employer.hbm.xml"
-		};
-	}
-
-	public static Test suite() {
-		return new TestSuite( PersistTest.class );
-	}
-
-	public String getCacheConcurrencyStrategy() {
-		return null;
-	}
-
-}
-

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/PersistTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/PersistTest.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/PersistTest.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/PersistTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,223 @@
+//$Id$
+package org.hibernate.ejb.test.ops;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+import org.hibernate.PersistentObjectException;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.cfg.Configuration;
+import org.hibernate.cfg.Environment;
+import org.hibernate.ejb.test.EJB3TestCase;
+import org.hibernate.exception.ConstraintViolationException;
+
+/**
+ * @author Gavin King
+ */
+public class PersistTest extends EJB3TestCase {
+
+	public PersistTest(String str) {
+		super( str );
+	}
+
+	public void testCreateTree() {
+
+		clearCounts();
+
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		Node root = new Node( "root" );
+		Node child = new Node( "child" );
+		root.addChild( child );
+		s.persist( root );
+		tx.commit();
+		s.close();
+
+		assertInsertCount( 2 );
+		assertUpdateCount( 0 );
+
+		s = openSession();
+		tx = s.beginTransaction();
+		root = (Node) s.get( Node.class, "root" );
+		Node child2 = new Node( "child2" );
+		root.addChild( child2 );
+		tx.commit();
+		s.close();
+
+		assertInsertCount( 3 );
+		assertUpdateCount( 0 );
+	}
+
+	public void testCreateTreeWithGeneratedId() {
+
+		clearCounts();
+
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		NumberedNode root = new NumberedNode( "root" );
+		NumberedNode child = new NumberedNode( "child" );
+		root.addChild( child );
+		s.persist( root );
+		tx.commit();
+		s.close();
+
+		assertInsertCount( 2 );
+		assertUpdateCount( 0 );
+
+		s = openSession();
+		tx = s.beginTransaction();
+		root = (NumberedNode) s.get( NumberedNode.class, new Long( root.getId() ) );
+		NumberedNode child2 = new NumberedNode( "child2" );
+		root.addChild( child2 );
+		tx.commit();
+		s.close();
+
+		assertInsertCount( 3 );
+		assertUpdateCount( 0 );
+	}
+
+	public void testCreateException() {
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		Node dupe = new Node( "dupe" );
+		s.persist( dupe );
+		s.persist( dupe );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		s.persist( dupe );
+		try {
+			tx.commit();
+			fail( "Cannot persist() twice the same entity" );
+		}
+		catch (ConstraintViolationException cve) {
+			//verify that an exception is thrown!
+		}
+		tx.rollback();
+		s.close();
+
+		Node nondupe = new Node( "nondupe" );
+		nondupe.addChild( dupe );
+
+		s = openSession();
+		tx = s.beginTransaction();
+		s.persist( nondupe );
+		try {
+			tx.commit();
+			assertFalse( true );
+		}
+		catch (ConstraintViolationException cve) {
+			//verify that an exception is thrown!
+		}
+		tx.rollback();
+		s.close();
+	}
+
+	public void testCreateExceptionWithGeneratedId() {
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		NumberedNode dupe = new NumberedNode( "dupe" );
+		s.persist( dupe );
+		s.persist( dupe );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		try {
+			s.persist( dupe );
+			assertFalse( true );
+		}
+		catch (PersistentObjectException poe) {
+			//verify that an exception is thrown!
+		}
+		tx.rollback();
+		s.close();
+
+		NumberedNode nondupe = new NumberedNode( "nondupe" );
+		nondupe.addChild( dupe );
+
+		s = openSession();
+		tx = s.beginTransaction();
+		try {
+			s.persist( nondupe );
+			assertFalse( true );
+		}
+		catch (PersistentObjectException poe) {
+			//verify that an exception is thrown!
+		}
+		tx.rollback();
+		s.close();
+	}
+
+	public void testBasic() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		Employer er = new Employer();
+		Employee ee = new Employee();
+		s.persist( ee );
+		Collection erColl = new ArrayList();
+		Collection eeColl = new ArrayList();
+		erColl.add( ee );
+		eeColl.add( er );
+		er.setEmployees( erColl );
+		ee.setEmployers( eeColl );
+		tx.commit();
+		s.close();
+
+		s = openSession();
+		tx = s.beginTransaction();
+		er = (Employer) s.load( Employer.class, er.getId() );
+		assertNotNull( er );
+		assertNotNull( er.getEmployees() );
+		assertEquals( 1, er.getEmployees().size() );
+		Employee eeFromDb = (Employee) er.getEmployees().iterator().next();
+		assertEquals( ee.getId(), eeFromDb.getId() );
+		tx.commit();
+		s.close();
+	}
+
+	private void clearCounts() {
+		getSessions().getStatistics().clear();
+	}
+
+	private void assertInsertCount(int count) {
+		int inserts = (int) getSessions().getStatistics().getEntityInsertCount();
+		assertEquals( count, inserts );
+	}
+
+	private void assertUpdateCount(int count) {
+		int updates = (int) getSessions().getStatistics().getEntityUpdateCount();
+		assertEquals( count, updates );
+	}
+
+	protected void configure(Configuration cfg) {
+		super.configure( cfg );
+		cfg.setProperty( Environment.GENERATE_STATISTICS, "true" );
+		cfg.setProperty( Environment.STATEMENT_BATCH_SIZE, "0" );
+	}
+
+	protected String[] getMappings() {
+		return new String[]{
+				"ops/Node.hbm.xml",
+				"ops/Employer.hbm.xml"
+		};
+	}
+
+	public static Test suite() {
+		return new TestSuite( PersistTest.class );
+	}
+
+	public String getCacheConcurrencyStrategy() {
+		return null;
+	}
+
+}
+

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Reptile.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Reptile.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Reptile.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,20 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.ops;
-
-import javax.persistence.Entity;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Reptile extends Animal {
-	private float temperature;
-
-	public float getTemperature() {
-		return temperature;
-	}
-
-	public void setTemperature(float temperature) {
-		this.temperature = temperature;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Reptile.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Reptile.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Reptile.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Reptile.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,20 @@
+//$Id: $
+package org.hibernate.ejb.test.ops;
+
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Reptile extends Animal {
+	private float temperature;
+
+	public float getTemperature() {
+		return temperature;
+	}
+
+	public void setTemperature(float temperature) {
+		this.temperature = temperature;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Workload.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Workload.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Workload.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,18 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.ops;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Workload {
-	@Id
-	@GeneratedValue
-	public Integer id;
-	public String name;
-	public Integer load;
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Workload.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Workload.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Workload.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/ops/Workload.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,18 @@
+//$Id$
+package org.hibernate.ejb.test.ops;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Workload {
+	@Id
+	@GeneratedValue
+	public Integer id;
+	public String name;
+	public Integer load;
+}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack)

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/cfgxmlpar (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/cfgxmlpar)

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/cfgxmlpar/Morito.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/cfgxmlpar/Morito.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/cfgxmlpar/Morito.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,33 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.pack.cfgxmlpar;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Morito {
-	private Integer id;
-	private String power;
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getPower() {
-		return power;
-	}
-
-	public void setPower(String power) {
-		this.power = power;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/cfgxmlpar/Morito.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/cfgxmlpar/Morito.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/cfgxmlpar/Morito.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/cfgxmlpar/Morito.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,33 @@
+//$Id$
+package org.hibernate.ejb.test.pack.cfgxmlpar;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Morito {
+	private Integer id;
+	private String power;
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getPower() {
+		return power;
+	}
+
+	public void setPower(String power) {
+		this.power = power;
+	}
+}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar)

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/ApplicationServer.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/ApplicationServer.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/ApplicationServer.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,42 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.pack.defaultpar;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class ApplicationServer {
-	private Integer id;
-	private String name;
-	private org.hibernate.ejb.test.pack.defaultpar.Version version;
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	public Version getVersion() {
-		return version;
-	}
-
-	public void setVersion(org.hibernate.ejb.test.pack.defaultpar.Version version) {
-		this.version = version;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/ApplicationServer.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/ApplicationServer.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/ApplicationServer.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/ApplicationServer.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,42 @@
+//$Id$
+package org.hibernate.ejb.test.pack.defaultpar;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class ApplicationServer {
+	private Integer id;
+	private String name;
+	private org.hibernate.ejb.test.pack.defaultpar.Version version;
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public Version getVersion() {
+		return version;
+	}
+
+	public void setVersion(org.hibernate.ejb.test.pack.defaultpar.Version version) {
+		this.version = version;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/IncrementListener.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/IncrementListener.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/IncrementListener.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,24 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.pack.defaultpar;
-
-import javax.persistence.PrePersist;
-
-/**
- * @author Emmanuel Bernard
- */
-public class IncrementListener {
-	private static int increment;
-
-	public static int getIncrement() {
-		return increment;
-	}
-
-	public static void reset() {
-		increment = 0;
-	}
-
-	@PrePersist
-	public void increment(Object entity) {
-		increment++;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/IncrementListener.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/IncrementListener.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/IncrementListener.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/IncrementListener.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,24 @@
+//$Id: $
+package org.hibernate.ejb.test.pack.defaultpar;
+
+import javax.persistence.PrePersist;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class IncrementListener {
+	private static int increment;
+
+	public static int getIncrement() {
+		return increment;
+	}
+
+	public static void reset() {
+		increment = 0;
+	}
+
+	@PrePersist
+	public void increment(Object entity) {
+		increment++;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/Lighter.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/Lighter.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/Lighter.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,10 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.pack.defaultpar;
-
-/**
- * @author Emmanuel Bernard
- */
-public class Lighter {
-	public String name;
-	public String power;
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/Lighter.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/Lighter.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/Lighter.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/Lighter.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,10 @@
+//$Id: $
+package org.hibernate.ejb.test.pack.defaultpar;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Lighter {
+	public String name;
+	public String power;
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/Money.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/Money.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/Money.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,24 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.pack.defaultpar;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.GeneratedValue;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Money {
-	private Integer id;
-
-	@Id @GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/Money.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/Money.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/Money.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/Money.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,24 @@
+//$Id: $
+package org.hibernate.ejb.test.pack.defaultpar;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Money {
+	private Integer id;
+
+	@Id @GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/Mouse.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/Mouse.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/Mouse.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,29 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.pack.defaultpar;
-
-import javax.persistence.ExcludeDefaultListeners;
-
-/**
- * @author Emmanuel Bernard
- */
- at ExcludeDefaultListeners
-public class Mouse {
-	private Integer id;
-	private String name;
-
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/Mouse.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/Mouse.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/Mouse.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/Mouse.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,29 @@
+//$Id$
+package org.hibernate.ejb.test.pack.defaultpar;
+
+import javax.persistence.ExcludeDefaultListeners;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at ExcludeDefaultListeners
+public class Mouse {
+	private Integer id;
+	private String name;
+
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/OtherIncrementListener.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/OtherIncrementListener.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/OtherIncrementListener.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,21 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.pack.defaultpar;
-
-/**
- * @author Emmanuel Bernard
- */
-public class OtherIncrementListener {
-	private static int increment;
-
-	public static int getIncrement() {
-		return OtherIncrementListener.increment;
-	}
-
-	public static void reset() {
-		increment = 0;
-	}
-
-	public void increment(Object entity) {
-		OtherIncrementListener.increment++;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/OtherIncrementListener.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/OtherIncrementListener.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/OtherIncrementListener.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/OtherIncrementListener.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,21 @@
+//$Id: $
+package org.hibernate.ejb.test.pack.defaultpar;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class OtherIncrementListener {
+	private static int increment;
+
+	public static int getIncrement() {
+		return OtherIncrementListener.increment;
+	}
+
+	public static void reset() {
+		increment = 0;
+	}
+
+	public void increment(Object entity) {
+		OtherIncrementListener.increment++;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/Version.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/Version.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/Version.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,43 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.pack.defaultpar;
-
-import javax.persistence.Embeddable;
-
-/**
- * @author Emmanuel Bernard
- */
- at Embeddable
-public class Version {
-	private static final String DOT = ".";
-	private int major;
-	private int minor;
-	private int micro;
-
-	public int getMajor() {
-		return major;
-	}
-
-	public void setMajor(int major) {
-		this.major = major;
-	}
-
-	public int getMinor() {
-		return minor;
-	}
-
-	public void setMinor(int minor) {
-		this.minor = minor;
-	}
-
-	public int getMicro() {
-		return micro;
-	}
-
-	public void setMicro(int micro) {
-		this.micro = micro;
-	}
-
-	public String toString() {
-		return new StringBuffer( major ).append( DOT ).append( minor ).append( DOT ).append( micro ).toString();
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/Version.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/Version.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/Version.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/Version.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,43 @@
+//$Id$
+package org.hibernate.ejb.test.pack.defaultpar;
+
+import javax.persistence.Embeddable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Embeddable
+public class Version {
+	private static final String DOT = ".";
+	private int major;
+	private int minor;
+	private int micro;
+
+	public int getMajor() {
+		return major;
+	}
+
+	public void setMajor(int major) {
+		this.major = major;
+	}
+
+	public int getMinor() {
+		return minor;
+	}
+
+	public void setMinor(int minor) {
+		this.minor = minor;
+	}
+
+	public int getMicro() {
+		return micro;
+	}
+
+	public void setMicro(int micro) {
+		this.micro = micro;
+	}
+
+	public String toString() {
+		return new StringBuffer( major ).append( DOT ).append( minor ).append( DOT ).append( micro ).toString();
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/package-info.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/package-info.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/package-info.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,5 +0,0 @@
- at NamedQuery(name = "allMouse",
-		query = "select m from ApplicationServer m") package org.hibernate.ejb.test.pack.defaultpar;
-
-import org.hibernate.annotations.NamedQuery;
-

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/package-info.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/package-info.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/package-info.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/defaultpar/package-info.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,5 @@
+ at NamedQuery(name = "allMouse",
+		query = "select m from ApplicationServer m") package org.hibernate.ejb.test.pack.defaultpar;
+
+import org.hibernate.annotations.NamedQuery;
+

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/excludehbmpar (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/excludehbmpar)

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/excludehbmpar/Caipirinha.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/excludehbmpar/Caipirinha.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/excludehbmpar/Caipirinha.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,40 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.pack.excludehbmpar;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Caipirinha {
-	private Integer id;
-	private String name;
-
-	public Caipirinha() {
-	}
-
-	public Caipirinha(String name) {
-		this.name = name;
-	}
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/excludehbmpar/Caipirinha.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/excludehbmpar/Caipirinha.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/excludehbmpar/Caipirinha.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/excludehbmpar/Caipirinha.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,40 @@
+//$Id$
+package org.hibernate.ejb.test.pack.excludehbmpar;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Caipirinha {
+	private Integer id;
+	private String name;
+
+	public Caipirinha() {
+	}
+
+	public Caipirinha(String name) {
+		this.name = name;
+	}
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/explicitpar (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/explicitpar)

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/explicitpar/Washer.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/explicitpar/Washer.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/explicitpar/Washer.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,12 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.pack.explicitpar;
-
-import javax.persistence.Entity;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Washer {
-	//No @id so picking it up should fail
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/explicitpar/Washer.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/explicitpar/Washer.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/explicitpar/Washer.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/explicitpar/Washer.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,12 @@
+//$Id: $
+package org.hibernate.ejb.test.pack.explicitpar;
+
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Washer {
+	//No @id so picking it up should fail
+}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/explodedpar (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/explodedpar)

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/explodedpar/Carpet.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/explodedpar/Carpet.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/explodedpar/Carpet.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,33 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.pack.explodedpar;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Carpet {
-	private Integer id;
-	private String country;
-
-	@Id
-	@GeneratedValue
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getCountry() {
-		return country;
-	}
-
-	public void setCountry(String country) {
-		this.country = country;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/explodedpar/Carpet.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/explodedpar/Carpet.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/explodedpar/Carpet.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/explodedpar/Carpet.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,33 @@
+//$Id$
+package org.hibernate.ejb.test.pack.explodedpar;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Carpet {
+	private Integer id;
+	private String country;
+
+	@Id
+	@GeneratedValue
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getCountry() {
+		return country;
+	}
+
+	public void setCountry(String country) {
+		this.country = country;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/explodedpar/Elephant.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/explodedpar/Elephant.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/explodedpar/Elephant.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,26 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.pack.explodedpar;
-
-/**
- * @author Emmanuel Bernard
- */
-public class Elephant {
-	private Integer id;
-	private String name;
-
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/explodedpar/Elephant.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/explodedpar/Elephant.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/explodedpar/Elephant.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/explodedpar/Elephant.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,26 @@
+//$Id$
+package org.hibernate.ejb.test.pack.explodedpar;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Elephant {
+	private Integer id;
+	private String name;
+
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/explodedpar/package-info.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/explodedpar/package-info.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/explodedpar/package-info.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,4 +0,0 @@
- at NamedQuery(name = "allCarpet", query = "select c from Carpet c") package org.hibernate.ejb.test.pack.explodedpar;
-
-import org.hibernate.annotations.NamedQuery;
-

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/explodedpar/package-info.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/explodedpar/package-info.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/explodedpar/package-info.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/explodedpar/package-info.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,4 @@
+ at NamedQuery(name = "allCarpet", query = "select c from Carpet c") package org.hibernate.ejb.test.pack.explodedpar;
+
+import org.hibernate.annotations.NamedQuery;
+

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/externaljar (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/externaljar)

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/externaljar/Scooter.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/externaljar/Scooter.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/externaljar/Scooter.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,31 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.pack.externaljar;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Scooter {
-	private String model;
-	private Long speed;
-
-	@Id
-	public String getModel() {
-		return model;
-	}
-
-	public void setModel(String model) {
-		this.model = model;
-	}
-
-	public Long getSpeed() {
-		return speed;
-	}
-
-	public void setSpeed(Long speed) {
-		this.speed = speed;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/externaljar/Scooter.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/externaljar/Scooter.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/externaljar/Scooter.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/externaljar/Scooter.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,31 @@
+//$Id$
+package org.hibernate.ejb.test.pack.externaljar;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Scooter {
+	private String model;
+	private Long speed;
+
+	@Id
+	public String getModel() {
+		return model;
+	}
+
+	public void setModel(String model) {
+		this.model = model;
+	}
+
+	public Long getSpeed() {
+		return speed;
+	}
+
+	public void setSpeed(Long speed) {
+		this.speed = speed;
+	}
+}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/overridenpar (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/overridenpar)

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/overridenpar/Bug.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/overridenpar/Bug.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/overridenpar/Bug.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,42 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.pack.overridenpar;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.GeneratedValue;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Bug {
-	@Id
-	@GeneratedValue
-	private Long id;
-	private String subject;
-	private String comment;
-
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-
-	public String getSubject() {
-		return subject;
-	}
-
-	public void setSubject(String subject) {
-		this.subject = subject;
-	}
-
-	public String getComment() {
-		return comment;
-	}
-
-	public void setComment(String comment) {
-		this.comment = comment;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/overridenpar/Bug.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/overridenpar/Bug.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/overridenpar/Bug.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/overridenpar/Bug.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,42 @@
+//$Id: $
+package org.hibernate.ejb.test.pack.overridenpar;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Bug {
+	@Id
+	@GeneratedValue
+	private Long id;
+	private String subject;
+	private String comment;
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getSubject() {
+		return subject;
+	}
+
+	public void setSubject(String subject) {
+		this.subject = subject;
+	}
+
+	public String getComment() {
+		return comment;
+	}
+
+	public void setComment(String comment) {
+		this.comment = comment;
+	}
+}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/spacepar (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/spacepar)

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/spacepar/Bug.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/spacepar/Bug.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/spacepar/Bug.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,42 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.pack.spacepar;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.GeneratedValue;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Bug {
-	@Id
-	@GeneratedValue
-	private Long id;
-	private String subject;
-	private String comment;
-
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-
-	public String getSubject() {
-		return subject;
-	}
-
-	public void setSubject(String subject) {
-		this.subject = subject;
-	}
-
-	public String getComment() {
-		return comment;
-	}
-
-	public void setComment(String comment) {
-		this.comment = comment;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/spacepar/Bug.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/spacepar/Bug.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/spacepar/Bug.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/spacepar/Bug.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,42 @@
+//$Id: $
+package org.hibernate.ejb.test.pack.spacepar;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Bug {
+	@Id
+	@GeneratedValue
+	private Long id;
+	private String subject;
+	private String comment;
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getSubject() {
+		return subject;
+	}
+
+	public void setSubject(String subject) {
+		this.subject = subject;
+	}
+
+	public String getComment() {
+		return comment;
+	}
+
+	public void setComment(String comment) {
+		this.comment = comment;
+	}
+}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/various (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/various)

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/various/Airplane.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/various/Airplane.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/various/Airplane.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,17 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.pack.various;
-
-/**
- * @author Emmanuel Bernard
- */
-public class Airplane {
-	private String serialNumber;
-
-	public String getSerialNumber() {
-		return serialNumber;
-	}
-
-	public void setSerialNumber(String serialNumber) {
-		this.serialNumber = serialNumber;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/various/Airplane.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/various/Airplane.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/various/Airplane.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/various/Airplane.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,17 @@
+//$Id: $
+package org.hibernate.ejb.test.pack.various;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Airplane {
+	private String serialNumber;
+
+	public String getSerialNumber() {
+		return serialNumber;
+	}
+
+	public void setSerialNumber(String serialNumber) {
+		this.serialNumber = serialNumber;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/various/Seat.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/various/Seat.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/various/Seat.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,17 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.pack.various;
-
-/**
- * @author Emmanuel Bernard
- */
-public class Seat {
-	private String number;
-
-	public String getNumber() {
-		return number;
-	}
-
-	public void setNumber(String number) {
-		this.number = number;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/various/Seat.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/various/Seat.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/various/Seat.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/pack/various/Seat.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,17 @@
+//$Id: $
+package org.hibernate.ejb.test.pack.various;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Seat {
+	private String number;
+
+	public String getNumber() {
+		return number;
+	}
+
+	public void setNumber(String number) {
+		this.number = number;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/package-info.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/package-info.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/package-info.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,4 +0,0 @@
- at NamedQuery(name = "countItems", query = "select count(i) from Item i") package org.hibernate.ejb.test;
-
-import org.hibernate.annotations.NamedQuery;
-

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/package-info.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/package-info.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/package-info.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/package-info.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,4 @@
+ at NamedQuery(name = "countItems", query = "select count(i) from Item i") package org.hibernate.ejb.test;
+
+import org.hibernate.annotations.NamedQuery;
+

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/packaging (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/packaging)

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/packaging/JarVisitorTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/packaging/JarVisitorTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/packaging/JarVisitorTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,184 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.packaging;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.net.URLConnection;
-import java.util.Set;
-import javax.persistence.Embeddable;
-import javax.persistence.Entity;
-import javax.persistence.MappedSuperclass;
-
-import junit.framework.TestCase;
-import org.hibernate.ejb.packaging.ExplodedJarVisitor;
-import org.hibernate.ejb.packaging.InputStreamZippedJarVisitor;
-import org.hibernate.ejb.packaging.JarVisitor;
-import org.hibernate.ejb.packaging.FileZippedJarVisitor;
-import org.hibernate.ejb.test.pack.defaultpar.ApplicationServer;
-import org.hibernate.ejb.test.pack.explodedpar.Carpet;
-
-/**
- * @author Emmanuel Bernard
- */
-public class JarVisitorTest extends TestCase {
-
-	public void testHttp() throws Exception {
-		URL url = JarVisitor.getJarURLFromURLEntry(
-				new URL(
-						"jar:http://www.ibiblio.org/maven/hibernate/jars/hibernate-annotations-3.0beta1.jar!/META-INF/persistence.xml"
-				),
-				"/META-INF/persistence.xml"
-		);
-		try {
-			URLConnection urlConnection = url.openConnection();
-			urlConnection.connect();
-		}
-		catch (IOException ie) {
-			//fail silently
-			return;
-		}
-		JarVisitor visitor = JarVisitor.getVisitor( url, getFilters() );
-		assertEquals( 0, visitor.getMatchingEntries()[0].size() );
-		assertEquals( 0, visitor.getMatchingEntries()[1].size() );
-		assertEquals( 0, visitor.getMatchingEntries()[2].size() );
-	}
-
-	public void testInputStreamZippedJar() throws Exception {
-		String jarFileName = "file:./build/testresources/defaultpar.par";
-		//JarVisitor jarVisitor = new ZippedJarVisitor( jarFileName, true, true );
-		JarVisitor.Filter[] filters = getFilters();
-		JarVisitor jarVisitor = new InputStreamZippedJarVisitor( new URL( jarFileName ), filters );
-		assertEquals( "defaultpar", jarVisitor.getUnqualifiedJarName() );
-		Set entries = jarVisitor.getMatchingEntries()[1];
-		assertEquals( 3, entries.size() );
-		JarVisitor.Entry entry = new JarVisitor.Entry( ApplicationServer.class.getName(), null );
-		assertTrue( entries.contains( entry ) );
-		entry = new JarVisitor.Entry( org.hibernate.ejb.test.pack.defaultpar.Version.class.getName(), null );
-		assertTrue( entries.contains( entry ) );
-		assertNull( ( (JarVisitor.Entry) entries.iterator().next() ).getInputStream() );
-		assertEquals( 2, jarVisitor.getMatchingEntries()[2].size() );
-		for (JarVisitor.Entry localEntry : (Set<JarVisitor.Entry>) jarVisitor.getMatchingEntries()[2] ) {
-			assertNotNull( localEntry.getInputStream() );
-			localEntry.getInputStream().close();
-		}
-
-//		Set<String> classes = jarVisitor.getClassNames();
-//		assertEquals( 3, classes.size() );
-//		assertTrue( classes.contains( ApplicationServer.class.getName() ) );
-//		assertTrue( classes.contains( Mouse.class.getName() ) );
-//		assertTrue( classes.contains( org.hibernate.ejb.test.pack.defaultpar.Version.class.getName() ) );
-	}
-
-	public void testZippedJar() throws Exception {
-		String jarFileName = "file:./build/testresources/defaultpar.par";
-		//JarVisitor jarVisitor = new ZippedJarVisitor( jarFileName, true, true );
-		JarVisitor.Filter[] filters = getFilters();
-		JarVisitor jarVisitor = new FileZippedJarVisitor( new URL( jarFileName ), filters );
-		assertEquals( "defaultpar", jarVisitor.getUnqualifiedJarName() );
-		Set entries = jarVisitor.getMatchingEntries()[1];
-		assertEquals( 3, entries.size() );
-		JarVisitor.Entry entry = new JarVisitor.Entry( ApplicationServer.class.getName(), null );
-		assertTrue( entries.contains( entry ) );
-		entry = new JarVisitor.Entry( org.hibernate.ejb.test.pack.defaultpar.Version.class.getName(), null );
-		assertTrue( entries.contains( entry ) );
-		assertNull( ( (JarVisitor.Entry) entries.iterator().next() ).getInputStream() );
-		assertEquals( 2, jarVisitor.getMatchingEntries()[2].size() );
-		for (JarVisitor.Entry localEntry : (Set<JarVisitor.Entry>) jarVisitor.getMatchingEntries()[2] ) {
-			assertNotNull( localEntry.getInputStream() );
-			localEntry.getInputStream().close();
-		}
-//		Set<String> classes = jarVisitor.getClassNames();
-//		assertEquals( 3, classes.size() );
-//		assertTrue( classes.contains( ApplicationServer.class.getName() ) );
-//		assertTrue( classes.contains( Mouse.class.getName() ) );
-//		assertTrue( classes.contains( org.hibernate.ejb.test.pack.defaultpar.Version.class.getName() ) );
-	}
-
-	public void testExplodedJar() throws Exception {
-		String jarFileName = "./build/testresources/explodedpar.par";
-		//JarVisitor jarVisitor = new ExplodedJarVisitor( jarFileName, true, true );
-		JarVisitor.Filter[] filters = getFilters();
-		JarVisitor jarVisitor = new ExplodedJarVisitor( jarFileName, filters );
-		assertEquals( "explodedpar", jarVisitor.getUnqualifiedJarName() );
-		Set[] entries = jarVisitor.getMatchingEntries();
-		assertEquals( 1, entries[1].size() );
-		assertEquals( 1, entries[0].size() );
-		assertEquals( 1, entries[2].size() );
-
-		JarVisitor.Entry entry = new JarVisitor.Entry( Carpet.class.getName(), null );
-		assertTrue( entries[1].contains( entry ) );
-		for (JarVisitor.Entry localEntry : (Set<JarVisitor.Entry>) jarVisitor.getMatchingEntries()[2] ) {
-			assertNotNull( localEntry.getInputStream() );
-			localEntry.getInputStream().close();
-		}
-//		Set<String> classes = jarVisitor.getClassNames();
-//		assertEquals( 2, classes.size() );
-//		assertEquals( 1, jarVisitor.getPackageNames().size() );
-//		assertEquals( 1, jarVisitor.getHbmFiles().size() );
-//		assertTrue( classes.contains( Carpet.class.getName() ) );
-	}
-
-	public void testDuplicateFilterExplodedJarExpectedfail() throws Exception {
-		String jarFileName = "./build/testresources/explodedpar.par";
-		//JarVisitor jarVisitor = new ExplodedJarVisitor( jarFileName, true, true );
-		JarVisitor.Filter[] filters = getFilters();
-		JarVisitor.Filter[] dupeFilters = new JarVisitor.Filter[filters.length * 2];
-		int index = 0;
-		for ( JarVisitor.Filter filter : filters ) {
-			dupeFilters[index++] = filter;
-		}
-		filters = getFilters();
-		for ( JarVisitor.Filter filter : filters ) {
-			dupeFilters[index++] = filter;
-		}
-		JarVisitor jarVisitor = new ExplodedJarVisitor( jarFileName, dupeFilters );
-		assertEquals( "explodedpar", jarVisitor.getUnqualifiedJarName() );
-		Set[] entries = jarVisitor.getMatchingEntries();
-		assertEquals( 1, entries[1].size() );
-		assertEquals( 1, entries[0].size() );
-		assertEquals( 1, entries[2].size() );
-		for ( JarVisitor.Entry entry : (Set<JarVisitor.Entry>) entries[2] ) {
-			InputStream is = entry.getInputStream();
-			if ( is != null ) {
-				assertTrue( 0 < is.available() );
-				is.close();
-			}
-		}
-		for ( JarVisitor.Entry entry : (Set<JarVisitor.Entry>) entries[5] ) {
-			InputStream is = entry.getInputStream();
-			if ( is != null ) {
-				assertTrue( 0 < is.available() );
-				is.close();
-			}
-		}
-
-		JarVisitor.Entry entry = new JarVisitor.Entry( Carpet.class.getName(), null );
-		assertTrue( entries[1].contains( entry ) );
-	}
-
-	private JarVisitor.Filter[] getFilters() {
-		return new JarVisitor.Filter[]{
-				new JarVisitor.PackageFilter( false, null ) {
-					public boolean accept(String javaElementName) {
-						return true;
-					}
-				},
-				new JarVisitor.ClassFilter(
-						false, new Class[]{
-						Entity.class,
-						MappedSuperclass.class,
-						Embeddable.class}
-				) {
-					public boolean accept(String javaElementName) {
-						return true;
-					}
-				},
-				new JarVisitor.FileFilter( true ) {
-					public boolean accept(String javaElementName) {
-						return javaElementName.endsWith( "hbm.xml" ) || javaElementName.endsWith( "META-INF/orm.xml" );
-					}
-				}
-		};
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/packaging/JarVisitorTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/packaging/JarVisitorTest.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/packaging/JarVisitorTest.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/packaging/JarVisitorTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,184 @@
+//$Id$
+package org.hibernate.ejb.test.packaging;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.Set;
+import javax.persistence.Embeddable;
+import javax.persistence.Entity;
+import javax.persistence.MappedSuperclass;
+
+import junit.framework.TestCase;
+import org.hibernate.ejb.packaging.ExplodedJarVisitor;
+import org.hibernate.ejb.packaging.InputStreamZippedJarVisitor;
+import org.hibernate.ejb.packaging.JarVisitor;
+import org.hibernate.ejb.packaging.FileZippedJarVisitor;
+import org.hibernate.ejb.test.pack.defaultpar.ApplicationServer;
+import org.hibernate.ejb.test.pack.explodedpar.Carpet;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class JarVisitorTest extends TestCase {
+
+	public void testHttp() throws Exception {
+		URL url = JarVisitor.getJarURLFromURLEntry(
+				new URL(
+						"jar:http://www.ibiblio.org/maven/hibernate/jars/hibernate-annotations-3.0beta1.jar!/META-INF/persistence.xml"
+				),
+				"/META-INF/persistence.xml"
+		);
+		try {
+			URLConnection urlConnection = url.openConnection();
+			urlConnection.connect();
+		}
+		catch (IOException ie) {
+			//fail silently
+			return;
+		}
+		JarVisitor visitor = JarVisitor.getVisitor( url, getFilters() );
+		assertEquals( 0, visitor.getMatchingEntries()[0].size() );
+		assertEquals( 0, visitor.getMatchingEntries()[1].size() );
+		assertEquals( 0, visitor.getMatchingEntries()[2].size() );
+	}
+
+	public void testInputStreamZippedJar() throws Exception {
+		String jarFileName = "file:./build/testresources/defaultpar.par";
+		//JarVisitor jarVisitor = new ZippedJarVisitor( jarFileName, true, true );
+		JarVisitor.Filter[] filters = getFilters();
+		JarVisitor jarVisitor = new InputStreamZippedJarVisitor( new URL( jarFileName ), filters );
+		assertEquals( "defaultpar", jarVisitor.getUnqualifiedJarName() );
+		Set entries = jarVisitor.getMatchingEntries()[1];
+		assertEquals( 3, entries.size() );
+		JarVisitor.Entry entry = new JarVisitor.Entry( ApplicationServer.class.getName(), null );
+		assertTrue( entries.contains( entry ) );
+		entry = new JarVisitor.Entry( org.hibernate.ejb.test.pack.defaultpar.Version.class.getName(), null );
+		assertTrue( entries.contains( entry ) );
+		assertNull( ( (JarVisitor.Entry) entries.iterator().next() ).getInputStream() );
+		assertEquals( 2, jarVisitor.getMatchingEntries()[2].size() );
+		for (JarVisitor.Entry localEntry : (Set<JarVisitor.Entry>) jarVisitor.getMatchingEntries()[2] ) {
+			assertNotNull( localEntry.getInputStream() );
+			localEntry.getInputStream().close();
+		}
+
+//		Set<String> classes = jarVisitor.getClassNames();
+//		assertEquals( 3, classes.size() );
+//		assertTrue( classes.contains( ApplicationServer.class.getName() ) );
+//		assertTrue( classes.contains( Mouse.class.getName() ) );
+//		assertTrue( classes.contains( org.hibernate.ejb.test.pack.defaultpar.Version.class.getName() ) );
+	}
+
+	public void testZippedJar() throws Exception {
+		String jarFileName = "file:./build/testresources/defaultpar.par";
+		//JarVisitor jarVisitor = new ZippedJarVisitor( jarFileName, true, true );
+		JarVisitor.Filter[] filters = getFilters();
+		JarVisitor jarVisitor = new FileZippedJarVisitor( new URL( jarFileName ), filters );
+		assertEquals( "defaultpar", jarVisitor.getUnqualifiedJarName() );
+		Set entries = jarVisitor.getMatchingEntries()[1];
+		assertEquals( 3, entries.size() );
+		JarVisitor.Entry entry = new JarVisitor.Entry( ApplicationServer.class.getName(), null );
+		assertTrue( entries.contains( entry ) );
+		entry = new JarVisitor.Entry( org.hibernate.ejb.test.pack.defaultpar.Version.class.getName(), null );
+		assertTrue( entries.contains( entry ) );
+		assertNull( ( (JarVisitor.Entry) entries.iterator().next() ).getInputStream() );
+		assertEquals( 2, jarVisitor.getMatchingEntries()[2].size() );
+		for (JarVisitor.Entry localEntry : (Set<JarVisitor.Entry>) jarVisitor.getMatchingEntries()[2] ) {
+			assertNotNull( localEntry.getInputStream() );
+			localEntry.getInputStream().close();
+		}
+//		Set<String> classes = jarVisitor.getClassNames();
+//		assertEquals( 3, classes.size() );
+//		assertTrue( classes.contains( ApplicationServer.class.getName() ) );
+//		assertTrue( classes.contains( Mouse.class.getName() ) );
+//		assertTrue( classes.contains( org.hibernate.ejb.test.pack.defaultpar.Version.class.getName() ) );
+	}
+
+	public void testExplodedJar() throws Exception {
+		String jarFileName = "./build/testresources/explodedpar.par";
+		//JarVisitor jarVisitor = new ExplodedJarVisitor( jarFileName, true, true );
+		JarVisitor.Filter[] filters = getFilters();
+		JarVisitor jarVisitor = new ExplodedJarVisitor( jarFileName, filters );
+		assertEquals( "explodedpar", jarVisitor.getUnqualifiedJarName() );
+		Set[] entries = jarVisitor.getMatchingEntries();
+		assertEquals( 1, entries[1].size() );
+		assertEquals( 1, entries[0].size() );
+		assertEquals( 1, entries[2].size() );
+
+		JarVisitor.Entry entry = new JarVisitor.Entry( Carpet.class.getName(), null );
+		assertTrue( entries[1].contains( entry ) );
+		for (JarVisitor.Entry localEntry : (Set<JarVisitor.Entry>) jarVisitor.getMatchingEntries()[2] ) {
+			assertNotNull( localEntry.getInputStream() );
+			localEntry.getInputStream().close();
+		}
+//		Set<String> classes = jarVisitor.getClassNames();
+//		assertEquals( 2, classes.size() );
+//		assertEquals( 1, jarVisitor.getPackageNames().size() );
+//		assertEquals( 1, jarVisitor.getHbmFiles().size() );
+//		assertTrue( classes.contains( Carpet.class.getName() ) );
+	}
+
+	public void testDuplicateFilterExplodedJarExpectedfail() throws Exception {
+		String jarFileName = "./build/testresources/explodedpar.par";
+		//JarVisitor jarVisitor = new ExplodedJarVisitor( jarFileName, true, true );
+		JarVisitor.Filter[] filters = getFilters();
+		JarVisitor.Filter[] dupeFilters = new JarVisitor.Filter[filters.length * 2];
+		int index = 0;
+		for ( JarVisitor.Filter filter : filters ) {
+			dupeFilters[index++] = filter;
+		}
+		filters = getFilters();
+		for ( JarVisitor.Filter filter : filters ) {
+			dupeFilters[index++] = filter;
+		}
+		JarVisitor jarVisitor = new ExplodedJarVisitor( jarFileName, dupeFilters );
+		assertEquals( "explodedpar", jarVisitor.getUnqualifiedJarName() );
+		Set[] entries = jarVisitor.getMatchingEntries();
+		assertEquals( 1, entries[1].size() );
+		assertEquals( 1, entries[0].size() );
+		assertEquals( 1, entries[2].size() );
+		for ( JarVisitor.Entry entry : (Set<JarVisitor.Entry>) entries[2] ) {
+			InputStream is = entry.getInputStream();
+			if ( is != null ) {
+				assertTrue( 0 < is.available() );
+				is.close();
+			}
+		}
+		for ( JarVisitor.Entry entry : (Set<JarVisitor.Entry>) entries[5] ) {
+			InputStream is = entry.getInputStream();
+			if ( is != null ) {
+				assertTrue( 0 < is.available() );
+				is.close();
+			}
+		}
+
+		JarVisitor.Entry entry = new JarVisitor.Entry( Carpet.class.getName(), null );
+		assertTrue( entries[1].contains( entry ) );
+	}
+
+	private JarVisitor.Filter[] getFilters() {
+		return new JarVisitor.Filter[]{
+				new JarVisitor.PackageFilter( false, null ) {
+					public boolean accept(String javaElementName) {
+						return true;
+					}
+				},
+				new JarVisitor.ClassFilter(
+						false, new Class[]{
+						Entity.class,
+						MappedSuperclass.class,
+						Embeddable.class}
+				) {
+					public boolean accept(String javaElementName) {
+						return true;
+					}
+				},
+				new JarVisitor.FileFilter( true ) {
+					public boolean accept(String javaElementName) {
+						return javaElementName.endsWith( "hbm.xml" ) || javaElementName.endsWith( "META-INF/orm.xml" );
+					}
+				}
+		};
+	}
+}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/transaction (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/transaction)

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/transaction/Book.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/transaction/Book.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/transaction/Book.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,46 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.transaction;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.Version;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Book {
-	@Id
-	@GeneratedValue(strategy = GenerationType.TABLE)
-	public Integer id;
-	public String name;
-
-	@Version
-	public Integer version;
-
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	public Integer getVersion() {
-		return version;
-	}
-
-	public void setVersion(Integer version) {
-		this.version = version;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/transaction/Book.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/transaction/Book.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/transaction/Book.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/transaction/Book.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,46 @@
+//$Id$
+package org.hibernate.ejb.test.transaction;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Version;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Book {
+	@Id
+	@GeneratedValue(strategy = GenerationType.TABLE)
+	public Integer id;
+	public String name;
+
+	@Version
+	public Integer version;
+
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public Integer getVersion() {
+		return version;
+	}
+
+	public void setVersion(Integer version) {
+		this.version = version;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/transaction/FlushAndTransactionTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/transaction/FlushAndTransactionTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/transaction/FlushAndTransactionTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,288 +0,0 @@
-//$Id$
-package org.hibernate.ejb.test.transaction;
-
-import java.util.List;
-import javax.persistence.EntityManager;
-import javax.persistence.LockModeType;
-import javax.persistence.RollbackException;
-import javax.persistence.TransactionRequiredException;
-import javax.persistence.PersistenceException;
-import javax.persistence.OptimisticLockException;
-
-import org.hibernate.ejb.HibernateEntityManagerFactory;
-import org.hibernate.ejb.test.TestCase;
-import org.hibernate.stat.Statistics;
-import org.hibernate.Session;
-
-/**
- * @author Emmanuel Bernard
- */
-public class FlushAndTransactionTest extends TestCase {
-	public void testAlwaysTransactionalOperations() throws Exception {
-		Book book = new Book();
-		book.name = "Le petit prince";
-		EntityManager em = factory.createEntityManager();
-		em.getTransaction().begin();
-		em.persist( book );
-		em.getTransaction().commit();
-		try {
-			em.flush();
-			fail( "flush has to be inside a Tx" );
-		}
-		catch (TransactionRequiredException e) {
-			//success
-		}
-		try {
-			em.lock( book, LockModeType.READ );
-			fail( "lock has to be inside a Tx" );
-		}
-		catch (TransactionRequiredException e) {
-			//success
-		}
-		em.getTransaction().begin();
-		em.remove( em.find( Book.class, book.id ) );
-		em.getTransaction().commit();
-	}
-
-//	public void testTransactionalOperationsWhenTransactional() throws Exception {
-//		Book book = new Book();
-//		book.name = "Le petit prince";
-//		EntityManager em = factory.createEntityManager( PersistenceContextType.TRANSACTION );
-//		try {
-//			em.persist( book );
-//			fail("flush has to be inside a Tx");
-//		}
-//		catch (TransactionRequiredException e) {
-//			//success
-//		}
-//		try {
-//			em.refresh( book );
-//			fail("refresh has to be inside a Tx");
-//		}
-//		catch (TransactionRequiredException e) {
-//			//success
-//		}
-//		try {
-//			em.remove( book );
-//			fail("refresh has to be inside a Tx");
-//		}
-//		catch (TransactionRequiredException e) {
-//			//success
-//		}
-//		em.close();
-//	}
-
-	public void testTransactionalOperationsWhenExtended() throws Exception {
-		Book book = new Book();
-		book.name = "Le petit prince";
-		EntityManager em = factory.createEntityManager();
-		Statistics stats = ( (HibernateEntityManagerFactory) factory ).getSessionFactory().getStatistics();
-		stats.clear();
-		stats.setStatisticsEnabled( true );
-
-		em.persist( book );
-		assertEquals( 0, stats.getEntityInsertCount() );
-		em.getTransaction().begin();
-		em.flush();
-		em.getTransaction().commit();
-		assertEquals( 1, stats.getEntityInsertCount() );
-
-		em.clear();
-		book.name = "Le prince";
-		book = em.merge( book );
-
-		em.refresh( book );
-		assertEquals( 0, stats.getEntityUpdateCount() );
-		em.getTransaction().begin();
-		em.flush();
-		em.getTransaction().commit();
-		assertEquals( 0, stats.getEntityUpdateCount() );
-
-		book.name = "Le prince";
-		em.getTransaction().begin();
-		em.find( Book.class, book.id );
-		em.getTransaction().commit();
-		assertEquals( 1, stats.getEntityUpdateCount() );
-
-		em.remove( book );
-		assertEquals( 0, stats.getEntityDeleteCount() );
-		em.getTransaction().begin();
-		em.flush();
-		em.getTransaction().commit();
-		assertEquals( 1, stats.getEntityDeleteCount() );
-
-		em.close();
-		stats.setStatisticsEnabled( false );
-	}
-
-	public void testMergeWhenExtended() throws Exception {
-		Book book = new Book();
-		book.name = "Le petit prince";
-		EntityManager em = factory.createEntityManager();
-		Statistics stats = ( (HibernateEntityManagerFactory) factory ).getSessionFactory().getStatistics();
-
-		em.getTransaction().begin();
-		em.persist( book );
-		assertEquals( 0, stats.getEntityInsertCount() );
-		em.getTransaction().commit();
-
-		em.clear(); //persist and clear
-		stats.clear();
-		stats.setStatisticsEnabled( true );
-
-		Book bookReloaded = em.find( Book.class, book.id );
-
-		book.name = "Le prince";
-		assertEquals( "Merge should use the available entiies in the PC", em.merge( book ), bookReloaded );
-		assertEquals( book.name, bookReloaded.name );
-
-		assertEquals( 0, stats.getEntityDeleteCount() );
-		assertEquals( 0, stats.getEntityInsertCount() );
-		assertEquals( "Updates should have been queued", 0, stats.getEntityUpdateCount() );
-
-		em.getTransaction().begin();
-		Book bookReReloaded = em.find( Book.class, bookReloaded.id );
-		assertEquals( "reload should return the object in PC", bookReReloaded, bookReloaded );
-		assertEquals( bookReReloaded.name, bookReloaded.name );
-		em.getTransaction().commit();
-
-		assertEquals( 0, stats.getEntityDeleteCount() );
-		assertEquals( 0, stats.getEntityInsertCount() );
-		assertEquals( "Work on Tx should flush", 1, stats.getEntityUpdateCount() );
-
-		em.getTransaction().begin();
-		em.remove( bookReReloaded );
-		em.getTransaction().commit();
-
-		em.close();
-		stats.setStatisticsEnabled( false );
-	}
-
-	public void testCloseAndTransaction() throws Exception {
-		EntityManager em = factory.createEntityManager();
-		em.getTransaction().begin();
-		Book book = new Book();
-		book.name = "Java for Dummies";
-		em.persist( book );
-		em.close();
-		book.name = "C# for Dummies";
-		assertFalse( em.isOpen() );
-		try {
-			em.flush();
-			fail( "direct action on a closed em should fail" );
-		}
-		catch (IllegalStateException e) {
-			//success
-		}
-		em.getTransaction().commit();
-		assertFalse( em.isOpen() );
-		em = factory.createEntityManager();
-		em.getTransaction().begin();
-		book = em.find( Book.class, book.id );
-		assertEquals( "C# for Dummies", book.name );
-		em.remove( book );
-		em.getTransaction().commit();
-		em.close();
-	}
-
-	public void testTransactionCommitDoesNotFlush() throws Exception {
-		EntityManager em = factory.createEntityManager();
-		em.getTransaction().begin();
-		Book book = new Book();
-		book.name = "Java for Dummies";
-		em.persist( book );
-		em.getTransaction().commit();
-		em.close();
-		em = factory.createEntityManager();
-		em.getTransaction().begin();
-		List result = em.createQuery("select book from Book book where book.name = :title").
-				setParameter( "title", book.name ).getResultList();
-		assertEquals( "EntityManager.commit() should trigger a flush()", 1, result.size() );
-		em.getTransaction().commit();
-		em.close();
-	}
-
-	public void testRollbackOnlyOnPersistenceException() throws Exception {
-		Book book = new Book();
-		book.name = "Stolen keys";
-		book.id = null; //new Integer( 50 );
-		EntityManager em = factory.createEntityManager();
-		em.getTransaction().begin();
-		try {
-			em.persist( book );
-			em.flush();
-			em.clear();
-			book.setName( "kitty kid");
-			em.merge( book );
-			em.flush();
-			em.clear();
-			book.setName( "kitty kid2"); //non updated version
-			em.merge( book );
-			em.flush();
-			fail( "optimistic locking exception" );
-		}
-		catch (PersistenceException e) {
-			//success
-		}
-		try {
-			em.getTransaction().commit();
-			fail( "Commit should be rollbacked" );
-		}
-		catch (RollbackException e) {
-			//success
-		}
-		finally {
-			em.close();
-		}
-
-	}
-
-	public void testRollbackExceptionOnOptimisticLockException() throws Exception {
-		Book book = new Book();
-		book.name = "Stolen keys";
-		book.id = null; //new Integer( 50 );
-		EntityManager em = factory.createEntityManager();
-		em.getTransaction().begin();
-		em.persist( book );
-		em.flush();
-		em.clear();
-		book.setName( "kitty kid");
-		em.merge( book );
-		em.flush();
-		em.clear();
-		book.setName( "kitty kid2"); //non updated version
-		( (Session) em.getDelegate() ).update( book );
-		try {
-			em.getTransaction().commit();
-			fail( "Commit should be rollbacked" );
-		}
-		catch (RollbackException e) {
-			assertTrue( "During flush a StateStateException is wrapped into a OptimisticLockException", e.getCause() instanceof OptimisticLockException );
-		}
-		finally {
-			em.close();
-		}
-
-	}
-
-	public void testRollbackClearPC() throws Exception {
-		Book book = new Book();
-		book.name = "Stolen keys";
-		EntityManager em = factory.createEntityManager();
-		em.getTransaction().begin();
-		em.persist( book );
-		em.getTransaction().commit();
-		em.getTransaction().begin();
-		book.name = "Recovered keys";
-		em.merge( book );
-		em.getTransaction().rollback();
-		assertEquals( "Stolen keys", em.find( Book.class, book.id ).name );
-		em.close();
-	}
-
-	public Class[] getAnnotatedClasses() {
-		return new Class[]{
-				Book.class
-		};
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/transaction/FlushAndTransactionTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/transaction/FlushAndTransactionTest.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/transaction/FlushAndTransactionTest.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/transaction/FlushAndTransactionTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,288 @@
+//$Id$
+package org.hibernate.ejb.test.transaction;
+
+import java.util.List;
+import javax.persistence.EntityManager;
+import javax.persistence.LockModeType;
+import javax.persistence.RollbackException;
+import javax.persistence.TransactionRequiredException;
+import javax.persistence.PersistenceException;
+import javax.persistence.OptimisticLockException;
+
+import org.hibernate.ejb.HibernateEntityManagerFactory;
+import org.hibernate.ejb.test.TestCase;
+import org.hibernate.stat.Statistics;
+import org.hibernate.Session;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class FlushAndTransactionTest extends TestCase {
+	public void testAlwaysTransactionalOperations() throws Exception {
+		Book book = new Book();
+		book.name = "Le petit prince";
+		EntityManager em = factory.createEntityManager();
+		em.getTransaction().begin();
+		em.persist( book );
+		em.getTransaction().commit();
+		try {
+			em.flush();
+			fail( "flush has to be inside a Tx" );
+		}
+		catch (TransactionRequiredException e) {
+			//success
+		}
+		try {
+			em.lock( book, LockModeType.READ );
+			fail( "lock has to be inside a Tx" );
+		}
+		catch (TransactionRequiredException e) {
+			//success
+		}
+		em.getTransaction().begin();
+		em.remove( em.find( Book.class, book.id ) );
+		em.getTransaction().commit();
+	}
+
+//	public void testTransactionalOperationsWhenTransactional() throws Exception {
+//		Book book = new Book();
+//		book.name = "Le petit prince";
+//		EntityManager em = factory.createEntityManager( PersistenceContextType.TRANSACTION );
+//		try {
+//			em.persist( book );
+//			fail("flush has to be inside a Tx");
+//		}
+//		catch (TransactionRequiredException e) {
+//			//success
+//		}
+//		try {
+//			em.refresh( book );
+//			fail("refresh has to be inside a Tx");
+//		}
+//		catch (TransactionRequiredException e) {
+//			//success
+//		}
+//		try {
+//			em.remove( book );
+//			fail("refresh has to be inside a Tx");
+//		}
+//		catch (TransactionRequiredException e) {
+//			//success
+//		}
+//		em.close();
+//	}
+
+	public void testTransactionalOperationsWhenExtended() throws Exception {
+		Book book = new Book();
+		book.name = "Le petit prince";
+		EntityManager em = factory.createEntityManager();
+		Statistics stats = ( (HibernateEntityManagerFactory) factory ).getSessionFactory().getStatistics();
+		stats.clear();
+		stats.setStatisticsEnabled( true );
+
+		em.persist( book );
+		assertEquals( 0, stats.getEntityInsertCount() );
+		em.getTransaction().begin();
+		em.flush();
+		em.getTransaction().commit();
+		assertEquals( 1, stats.getEntityInsertCount() );
+
+		em.clear();
+		book.name = "Le prince";
+		book = em.merge( book );
+
+		em.refresh( book );
+		assertEquals( 0, stats.getEntityUpdateCount() );
+		em.getTransaction().begin();
+		em.flush();
+		em.getTransaction().commit();
+		assertEquals( 0, stats.getEntityUpdateCount() );
+
+		book.name = "Le prince";
+		em.getTransaction().begin();
+		em.find( Book.class, book.id );
+		em.getTransaction().commit();
+		assertEquals( 1, stats.getEntityUpdateCount() );
+
+		em.remove( book );
+		assertEquals( 0, stats.getEntityDeleteCount() );
+		em.getTransaction().begin();
+		em.flush();
+		em.getTransaction().commit();
+		assertEquals( 1, stats.getEntityDeleteCount() );
+
+		em.close();
+		stats.setStatisticsEnabled( false );
+	}
+
+	public void testMergeWhenExtended() throws Exception {
+		Book book = new Book();
+		book.name = "Le petit prince";
+		EntityManager em = factory.createEntityManager();
+		Statistics stats = ( (HibernateEntityManagerFactory) factory ).getSessionFactory().getStatistics();
+
+		em.getTransaction().begin();
+		em.persist( book );
+		assertEquals( 0, stats.getEntityInsertCount() );
+		em.getTransaction().commit();
+
+		em.clear(); //persist and clear
+		stats.clear();
+		stats.setStatisticsEnabled( true );
+
+		Book bookReloaded = em.find( Book.class, book.id );
+
+		book.name = "Le prince";
+		assertEquals( "Merge should use the available entiies in the PC", em.merge( book ), bookReloaded );
+		assertEquals( book.name, bookReloaded.name );
+
+		assertEquals( 0, stats.getEntityDeleteCount() );
+		assertEquals( 0, stats.getEntityInsertCount() );
+		assertEquals( "Updates should have been queued", 0, stats.getEntityUpdateCount() );
+
+		em.getTransaction().begin();
+		Book bookReReloaded = em.find( Book.class, bookReloaded.id );
+		assertEquals( "reload should return the object in PC", bookReReloaded, bookReloaded );
+		assertEquals( bookReReloaded.name, bookReloaded.name );
+		em.getTransaction().commit();
+
+		assertEquals( 0, stats.getEntityDeleteCount() );
+		assertEquals( 0, stats.getEntityInsertCount() );
+		assertEquals( "Work on Tx should flush", 1, stats.getEntityUpdateCount() );
+
+		em.getTransaction().begin();
+		em.remove( bookReReloaded );
+		em.getTransaction().commit();
+
+		em.close();
+		stats.setStatisticsEnabled( false );
+	}
+
+	public void testCloseAndTransaction() throws Exception {
+		EntityManager em = factory.createEntityManager();
+		em.getTransaction().begin();
+		Book book = new Book();
+		book.name = "Java for Dummies";
+		em.persist( book );
+		em.close();
+		book.name = "C# for Dummies";
+		assertFalse( em.isOpen() );
+		try {
+			em.flush();
+			fail( "direct action on a closed em should fail" );
+		}
+		catch (IllegalStateException e) {
+			//success
+		}
+		em.getTransaction().commit();
+		assertFalse( em.isOpen() );
+		em = factory.createEntityManager();
+		em.getTransaction().begin();
+		book = em.find( Book.class, book.id );
+		assertEquals( "C# for Dummies", book.name );
+		em.remove( book );
+		em.getTransaction().commit();
+		em.close();
+	}
+
+	public void testTransactionCommitDoesNotFlush() throws Exception {
+		EntityManager em = factory.createEntityManager();
+		em.getTransaction().begin();
+		Book book = new Book();
+		book.name = "Java for Dummies";
+		em.persist( book );
+		em.getTransaction().commit();
+		em.close();
+		em = factory.createEntityManager();
+		em.getTransaction().begin();
+		List result = em.createQuery("select book from Book book where book.name = :title").
+				setParameter( "title", book.name ).getResultList();
+		assertEquals( "EntityManager.commit() should trigger a flush()", 1, result.size() );
+		em.getTransaction().commit();
+		em.close();
+	}
+
+	public void testRollbackOnlyOnPersistenceException() throws Exception {
+		Book book = new Book();
+		book.name = "Stolen keys";
+		book.id = null; //new Integer( 50 );
+		EntityManager em = factory.createEntityManager();
+		em.getTransaction().begin();
+		try {
+			em.persist( book );
+			em.flush();
+			em.clear();
+			book.setName( "kitty kid");
+			em.merge( book );
+			em.flush();
+			em.clear();
+			book.setName( "kitty kid2"); //non updated version
+			em.merge( book );
+			em.flush();
+			fail( "optimistic locking exception" );
+		}
+		catch (PersistenceException e) {
+			//success
+		}
+		try {
+			em.getTransaction().commit();
+			fail( "Commit should be rollbacked" );
+		}
+		catch (RollbackException e) {
+			//success
+		}
+		finally {
+			em.close();
+		}
+
+	}
+
+	public void testRollbackExceptionOnOptimisticLockException() throws Exception {
+		Book book = new Book();
+		book.name = "Stolen keys";
+		book.id = null; //new Integer( 50 );
+		EntityManager em = factory.createEntityManager();
+		em.getTransaction().begin();
+		em.persist( book );
+		em.flush();
+		em.clear();
+		book.setName( "kitty kid");
+		em.merge( book );
+		em.flush();
+		em.clear();
+		book.setName( "kitty kid2"); //non updated version
+		( (Session) em.getDelegate() ).update( book );
+		try {
+			em.getTransaction().commit();
+			fail( "Commit should be rollbacked" );
+		}
+		catch (RollbackException e) {
+			assertTrue( "During flush a StateStateException is wrapped into a OptimisticLockException", e.getCause() instanceof OptimisticLockException );
+		}
+		finally {
+			em.close();
+		}
+
+	}
+
+	public void testRollbackClearPC() throws Exception {
+		Book book = new Book();
+		book.name = "Stolen keys";
+		EntityManager em = factory.createEntityManager();
+		em.getTransaction().begin();
+		em.persist( book );
+		em.getTransaction().commit();
+		em.getTransaction().begin();
+		book.name = "Recovered keys";
+		em.merge( book );
+		em.getTransaction().rollback();
+		assertEquals( "Stolen keys", em.find( Book.class, book.id ).name );
+		em.close();
+	}
+
+	public Class[] getAnnotatedClasses() {
+		return new Class[]{
+				Book.class
+		};
+	}
+}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml)

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/Address.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/Address.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/Address.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,54 +0,0 @@
-//$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

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/Address.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/Address.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/Address.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/Address.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -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

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/Article.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/Article.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/Article.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,49 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.xml;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Table;
-import javax.persistence.GeneratedValue;
-import javax.persistence.CascadeType;
-import javax.persistence.ManyToOne;
-import javax.persistence.JoinColumn;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Table(name = "ITEM")
- at org.hibernate.annotations.BatchSize(size = 10)
-public class Article {
-	private Integer id;
-	private String name;
-
-	private Article nextArticle;
-
-	@Id @GeneratedValue public Integer getId() {
-		return id;
-	}
-	public void setId(Integer id) {
-		this.id = id;
-	}
-	@Column(name="poopoo")
-	public String getName() {
-		return name;
-	}
-	public void setName(String name) {
-		this.name = name;
-	}
-
-
-	@ManyToOne(cascade = CascadeType.ALL)
-	@JoinColumn(name = "NEXT_MESSAGE_ID")
-	public Article getNextArticle() {
-		return nextArticle;
-	}
-
-	public void setNextArticle(Article nextArticle) {
-		this.nextArticle = nextArticle;
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/Article.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/Article.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/Article.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/Article.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,49 @@
+//$Id: $
+package org.hibernate.ejb.test.xml;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.GeneratedValue;
+import javax.persistence.CascadeType;
+import javax.persistence.ManyToOne;
+import javax.persistence.JoinColumn;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Table(name = "ITEM")
+ at org.hibernate.annotations.BatchSize(size = 10)
+public class Article {
+	private Integer id;
+	private String name;
+
+	private Article nextArticle;
+
+	@Id @GeneratedValue public Integer getId() {
+		return id;
+	}
+	public void setId(Integer id) {
+		this.id = id;
+	}
+	@Column(name="poopoo")
+	public String getName() {
+		return name;
+	}
+	public void setName(String name) {
+		this.name = name;
+	}
+
+
+	@ManyToOne(cascade = CascadeType.ALL)
+	@JoinColumn(name = "NEXT_MESSAGE_ID")
+	public Article getNextArticle() {
+		return nextArticle;
+	}
+
+	public void setNextArticle(Article nextArticle) {
+		this.nextArticle = nextArticle;
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/Employee.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/Employee.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/Employee.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,66 +0,0 @@
-//$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

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/Employee.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/Employee.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/Employee.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/Employee.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -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

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/Light.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/Light.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/Light.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,10 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.xml;
-
-/**
- * @author Emmanuel Bernard
- */
-public class Light {
-	public String name;
-	public String power;
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/Light.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/Light.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/Light.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/Light.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,10 @@
+//$Id: $
+package org.hibernate.ejb.test.xml;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Light {
+	public String name;
+	public String power;
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/Lighter.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/Lighter.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/Lighter.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,10 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.xml;
-
-/**
- * @author Emmanuel Bernard
- */
-public class Lighter {
-	public String name;
-	public String power;
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/Lighter.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/Lighter.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/Lighter.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/Lighter.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,10 @@
+//$Id: $
+package org.hibernate.ejb.test.xml;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Lighter {
+	public String name;
+	public String power;
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/XmlAttributeOverrideTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/XmlAttributeOverrideTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/XmlAttributeOverrideTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,41 +0,0 @@
-//$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"
-		};
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/XmlAttributeOverrideTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/XmlAttributeOverrideTest.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/XmlAttributeOverrideTest.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/XmlAttributeOverrideTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -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"
+		};
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/XmlTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/XmlTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/XmlTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,28 +0,0 @@
-//$Id: $
-package org.hibernate.ejb.test.xml;
-
-import javax.persistence.EntityManager;
-
-import org.hibernate.ejb.test.TestCase;
-
-/**
- * @author Emmanuel Bernard
- */
-public class XmlTest extends TestCase {
-	public void testXmlMappingCorrectness() throws Exception {
-		EntityManager em = factory.createEntityManager();
-		em.close();
-	}
-
-	public Class[] getAnnotatedClasses() {
-		return new Class[0];
-	}
-
-	@Override
-	public String[] getEjb3DD() {
-		return new String[] {
-				"org/hibernate/ejb/test/xml/orm.xml",
-				"org/hibernate/ejb/test/xml/orm2.xml",
-		};
-	}
-}

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/XmlTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/XmlTest.java)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/XmlTest.java	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/XmlTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,28 @@
+//$Id: $
+package org.hibernate.ejb.test.xml;
+
+import javax.persistence.EntityManager;
+
+import org.hibernate.ejb.test.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class XmlTest extends TestCase {
+	public void testXmlMappingCorrectness() throws Exception {
+		EntityManager em = factory.createEntityManager();
+		em.close();
+	}
+
+	public Class[] getAnnotatedClasses() {
+		return new Class[0];
+	}
+
+	@Override
+	public String[] getEjb3DD() {
+		return new String[] {
+				"org/hibernate/ejb/test/xml/orm.xml",
+				"org/hibernate/ejb/test/xml/orm2.xml",
+		};
+	}
+}

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/orm.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/orm.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/orm.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,33 +0,0 @@
-<?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 orm_1_0.xsd"
-                 version="1.0"
-        >
-    <persistence-unit-metadata>
-        <persistence-unit-defaults>
-            <schema>MY_SCHEMA</schema>
-            <catalog>MY_CATALOG</catalog>
-            <access>PROPERTY</access>
-            <cascade-persist/>
-        </persistence-unit-defaults>
-    </persistence-unit-metadata>
-    <package>org.hibernate.ejb.test.xml</package>
-    <entity class="Light" metadata-complete="true" access="FIELD">
-        <attributes>
-            <id name="name">
-                <column name="fld_id"/>
-            </id>
-            <basic name="power"></basic>
-        </attributes>
-    </entity>
-    <entity class="Article"
-            metadata-complete="false">
-        <attributes>
-            <id name="id">
-                <generated-value strategy="SEQUENCE"/>
-            </id>
-        </attributes>
-    </entity>
-</entity-mappings>
\ No newline at end of file

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/orm.xml (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/orm.xml)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/orm.xml	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/orm.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,33 @@
+<?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 orm_1_0.xsd"
+                 version="1.0"
+        >
+    <persistence-unit-metadata>
+        <persistence-unit-defaults>
+            <schema>MY_SCHEMA</schema>
+            <catalog>MY_CATALOG</catalog>
+            <access>PROPERTY</access>
+            <cascade-persist/>
+        </persistence-unit-defaults>
+    </persistence-unit-metadata>
+    <package>org.hibernate.ejb.test.xml</package>
+    <entity class="Light" metadata-complete="true" access="FIELD">
+        <attributes>
+            <id name="name">
+                <column name="fld_id"/>
+            </id>
+            <basic name="power"></basic>
+        </attributes>
+    </entity>
+    <entity class="Article"
+            metadata-complete="false">
+        <attributes>
+            <id name="id">
+                <generated-value strategy="SEQUENCE"/>
+            </id>
+        </attributes>
+    </entity>
+</entity-mappings>
\ No newline at end of file

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/orm2.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/orm2.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/orm2.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,27 +0,0 @@
-<?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 orm_1_0.xsd"
-                 version="1.0"
-        >
-    <entity class="org.hibernate.ejb.test.xml.Lighter" name="ALighter" access="FIELD" metadata-complete="true">
-        <attributes>
-            <id name="name">
-                <column name="fld_id"/>
-            </id>
-            <basic name="power"></basic>
-        </attributes>
-    </entity>
-    <!-- entity class="NoPackageEntity" name="ALighter" access="FIELD" metadata-complete="true">
-        <attributes>
-            <id name="id"/>
-            <basic name="name"/>
-        </attributes>
-    </entity -->
-    <embeddable class="NoPackageEntity" access="FIELD">
-        <attributes>
-            <basic name="name"/>
-        </attributes>
-    </embeddable>
-</entity-mappings>
\ No newline at end of file

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/orm2.xml (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/orm2.xml)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/orm2.xml	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/orm2.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,27 @@
+<?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 orm_1_0.xsd"
+                 version="1.0"
+        >
+    <entity class="org.hibernate.ejb.test.xml.Lighter" name="ALighter" access="FIELD" metadata-complete="true">
+        <attributes>
+            <id name="name">
+                <column name="fld_id"/>
+            </id>
+            <basic name="power"></basic>
+        </attributes>
+    </entity>
+    <!-- entity class="NoPackageEntity" name="ALighter" access="FIELD" metadata-complete="true">
+        <attributes>
+            <id name="id"/>
+            <basic name="name"/>
+        </attributes>
+    </entity -->
+    <embeddable class="NoPackageEntity" access="FIELD">
+        <attributes>
+            <basic name="name"/>
+        </attributes>
+    </embeddable>
+</entity-mappings>
\ No newline at end of file

Deleted: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/orm3.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/orm3.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/orm3.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,55 +0,0 @@
-<?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

Copied: trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/orm3.xml (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/orm3.xml)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/orm3.xml	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test/org/hibernate/ejb/test/xml/orm3.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -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

Copied: trunk/HibernateExt/entitymanager/src/test-resources (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources)

Copied: trunk/HibernateExt/entitymanager/src/test-resources/cfgxmlpar (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/cfgxmlpar)

Copied: trunk/HibernateExt/entitymanager/src/test-resources/cfgxmlpar/META-INF (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/cfgxmlpar/META-INF)

Deleted: trunk/HibernateExt/entitymanager/src/test-resources/cfgxmlpar/META-INF/persistence.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/cfgxmlpar/META-INF/persistence.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test-resources/cfgxmlpar/META-INF/persistence.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- example of reference to a cfg.xml file -->
-<persistence xmlns="http://java.sun.com/xml/ns/persistence"
-             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
-             version="1.0">
-    <persistence-unit name="cfgxmlpar" transaction-type="RESOURCE_LOCAL">
-        <provider>org.hibernate.ejb.HibernatePersistence</provider>
-        <properties>
-            <property name="hibernate.ejb.cfgfile" value="/org/hibernate/ejb/test/pack/cfgxmlpar/hibernate.cfg.xml"/>
-        </properties>
-    </persistence-unit>
-</persistence>

Copied: trunk/HibernateExt/entitymanager/src/test-resources/cfgxmlpar/META-INF/persistence.xml (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/cfgxmlpar/META-INF/persistence.xml)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test-resources/cfgxmlpar/META-INF/persistence.xml	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test-resources/cfgxmlpar/META-INF/persistence.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- example of reference to a cfg.xml file -->
+<persistence xmlns="http://java.sun.com/xml/ns/persistence"
+             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
+             version="1.0">
+    <persistence-unit name="cfgxmlpar" transaction-type="RESOURCE_LOCAL">
+        <provider>org.hibernate.ejb.HibernatePersistence</provider>
+        <properties>
+            <property name="hibernate.ejb.cfgfile" value="/org/hibernate/ejb/test/pack/cfgxmlpar/hibernate.cfg.xml"/>
+        </properties>
+    </persistence-unit>
+</persistence>

Copied: trunk/HibernateExt/entitymanager/src/test-resources/cfgxmlpar/org (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/cfgxmlpar/org)

Copied: trunk/HibernateExt/entitymanager/src/test-resources/cfgxmlpar/org/hibernate (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/cfgxmlpar/org/hibernate)

Copied: trunk/HibernateExt/entitymanager/src/test-resources/cfgxmlpar/org/hibernate/ejb (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/cfgxmlpar/org/hibernate/ejb)

Copied: trunk/HibernateExt/entitymanager/src/test-resources/cfgxmlpar/org/hibernate/ejb/test (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/cfgxmlpar/org/hibernate/ejb/test)

Copied: trunk/HibernateExt/entitymanager/src/test-resources/cfgxmlpar/org/hibernate/ejb/test/pack (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/cfgxmlpar/org/hibernate/ejb/test/pack)

Copied: trunk/HibernateExt/entitymanager/src/test-resources/cfgxmlpar/org/hibernate/ejb/test/pack/cfgxmlpar (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/cfgxmlpar/org/hibernate/ejb/test/pack/cfgxmlpar)

Deleted: trunk/HibernateExt/entitymanager/src/test-resources/cfgxmlpar/org/hibernate/ejb/test/pack/cfgxmlpar/hibernate.cfg.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/cfgxmlpar/org/hibernate/ejb/test/pack/cfgxmlpar/hibernate.cfg.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test-resources/cfgxmlpar/org/hibernate/ejb/test/pack/cfgxmlpar/hibernate.cfg.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,27 +0,0 @@
-<!DOCTYPE hibernate-configuration PUBLIC
-        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
-        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
-
-<hibernate-configuration>
-    <session-factory>
-        <property name="hibernate.dialect">org.hibernate.dialect.HSQLDialect</property>
-        <property name="hibernate.connection.driver_class">org.hsqldb.jdbcDriver</property>
-        <property name="hibernate.connection.username">sa</property>
-        <property name="hibernate.connection.password"></property>
-        <property name="hibernate.connection.url">jdbc:hsqldb:.</property>
-        <property name="hibernate.cache.use_query_cache">true</property>
-        <property name="hibernate.cache.region_prefix">hibernate.test</property>
-        <property name="hibernate.jdbc.use_streams_for_binary">true</property>
-        <property name="hibernate.jdbc.batch_size">0</property>
-        <property name="hibernate.max_fetch_depth">3</property>
-        <property name="hibernate.hbm2ddl.auto">create-drop</property>
-        <property name="hibernate.generate_statistics">true</property>
-        <property name="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</property>
-        <mapping class="org.hibernate.ejb.test.Item"/>
-        <mapping class="org.hibernate.ejb.test.Cat"/>
-        <mapping class="org.hibernate.ejb.test.Distributor"/>
-        <class-cache class="org.hibernate.ejb.test.Item" usage="read-write"/>
-        <collection-cache collection="org.hibernate.ejb.test.Item.distributors" usage="read-write" region="RegionName"/>
-        <event type="pre-insert"/>
-    </session-factory>
-</hibernate-configuration>
\ No newline at end of file

Copied: trunk/HibernateExt/entitymanager/src/test-resources/cfgxmlpar/org/hibernate/ejb/test/pack/cfgxmlpar/hibernate.cfg.xml (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/cfgxmlpar/org/hibernate/ejb/test/pack/cfgxmlpar/hibernate.cfg.xml)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test-resources/cfgxmlpar/org/hibernate/ejb/test/pack/cfgxmlpar/hibernate.cfg.xml	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test-resources/cfgxmlpar/org/hibernate/ejb/test/pack/cfgxmlpar/hibernate.cfg.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,27 @@
+<!DOCTYPE hibernate-configuration PUBLIC
+        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
+        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
+
+<hibernate-configuration>
+    <session-factory>
+        <property name="hibernate.dialect">org.hibernate.dialect.HSQLDialect</property>
+        <property name="hibernate.connection.driver_class">org.hsqldb.jdbcDriver</property>
+        <property name="hibernate.connection.username">sa</property>
+        <property name="hibernate.connection.password"></property>
+        <property name="hibernate.connection.url">jdbc:hsqldb:.</property>
+        <property name="hibernate.cache.use_query_cache">true</property>
+        <property name="hibernate.cache.region_prefix">hibernate.test</property>
+        <property name="hibernate.jdbc.use_streams_for_binary">true</property>
+        <property name="hibernate.jdbc.batch_size">0</property>
+        <property name="hibernate.max_fetch_depth">3</property>
+        <property name="hibernate.hbm2ddl.auto">create-drop</property>
+        <property name="hibernate.generate_statistics">true</property>
+        <property name="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</property>
+        <mapping class="org.hibernate.ejb.test.Item"/>
+        <mapping class="org.hibernate.ejb.test.Cat"/>
+        <mapping class="org.hibernate.ejb.test.Distributor"/>
+        <class-cache class="org.hibernate.ejb.test.Item" usage="read-write"/>
+        <collection-cache collection="org.hibernate.ejb.test.Item.distributors" usage="read-write" region="RegionName"/>
+        <event type="pre-insert"/>
+    </session-factory>
+</hibernate-configuration>
\ No newline at end of file

Copied: trunk/HibernateExt/entitymanager/src/test-resources/defaultpar (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/defaultpar)

Copied: trunk/HibernateExt/entitymanager/src/test-resources/defaultpar/META-INF (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/defaultpar/META-INF)

Deleted: trunk/HibernateExt/entitymanager/src/test-resources/defaultpar/META-INF/orm.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/defaultpar/META-INF/orm.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test-resources/defaultpar/META-INF/orm.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,33 +0,0 @@
-<?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 orm_1_0.xsd"
-                 version="1.0"
-        >
-    <persistence-unit-metadata>
-        <persistence-unit-defaults>
-            <entity-listeners>
-                <entity-listener class="org.hibernate.ejb.test.pack.defaultpar.IncrementListener">
-                    <pre-persist method-name="increment"/>
-                </entity-listener>
-            </entity-listeners>
-        </persistence-unit-defaults>
-    </persistence-unit-metadata>
-    <package>org.hibernate.ejb.test.pack.defaultpar</package>
-    <entity class="Lighter" access="FIELD" metadata-complete="true">
-        <attributes>
-            <id name="name">
-                <column name="fld_id"/>
-            </id>
-            <basic name="power"></basic>
-        </attributes>
-    </entity>
-    <entity class="ApplicationServer">
-        <entity-listeners>
-            <entity-listener class="OtherIncrementListener">
-                <pre-persist method-name="increment"/>
-            </entity-listener>
-        </entity-listeners>
-    </entity>
-</entity-mappings>
\ No newline at end of file

Copied: trunk/HibernateExt/entitymanager/src/test-resources/defaultpar/META-INF/orm.xml (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/defaultpar/META-INF/orm.xml)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test-resources/defaultpar/META-INF/orm.xml	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test-resources/defaultpar/META-INF/orm.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,33 @@
+<?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 orm_1_0.xsd"
+                 version="1.0"
+        >
+    <persistence-unit-metadata>
+        <persistence-unit-defaults>
+            <entity-listeners>
+                <entity-listener class="org.hibernate.ejb.test.pack.defaultpar.IncrementListener">
+                    <pre-persist method-name="increment"/>
+                </entity-listener>
+            </entity-listeners>
+        </persistence-unit-defaults>
+    </persistence-unit-metadata>
+    <package>org.hibernate.ejb.test.pack.defaultpar</package>
+    <entity class="Lighter" access="FIELD" metadata-complete="true">
+        <attributes>
+            <id name="name">
+                <column name="fld_id"/>
+            </id>
+            <basic name="power"></basic>
+        </attributes>
+    </entity>
+    <entity class="ApplicationServer">
+        <entity-listeners>
+            <entity-listener class="OtherIncrementListener">
+                <pre-persist method-name="increment"/>
+            </entity-listener>
+        </entity-listeners>
+    </entity>
+</entity-mappings>
\ No newline at end of file

Deleted: trunk/HibernateExt/entitymanager/src/test-resources/defaultpar/META-INF/persistence.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/defaultpar/META-INF/persistence.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test-resources/defaultpar/META-INF/persistence.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- example of a default persistence.xml -->
-<persistence xmlns="http://java.sun.com/xml/ns/persistence"
-             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
-             version="1.0">
-    <persistence-unit name="defaultpar">
-        <class>org.hibernate.ejb.test.pack.defaultpar.Lighter</class>
-        <properties>
-            <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
-            <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/>
-            <property name="hibernate.connection.username" value="sa"/>
-            <property name="hibernate.connection.password" value=""/>
-            <property name="hibernate.connection.url" value="jdbc:hsqldb:."/>
-            <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
-            <property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider"/>
-        </properties>
-    </persistence-unit>
-</persistence>

Copied: trunk/HibernateExt/entitymanager/src/test-resources/defaultpar/META-INF/persistence.xml (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/defaultpar/META-INF/persistence.xml)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test-resources/defaultpar/META-INF/persistence.xml	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test-resources/defaultpar/META-INF/persistence.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- example of a default persistence.xml -->
+<persistence xmlns="http://java.sun.com/xml/ns/persistence"
+             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
+             version="1.0">
+    <persistence-unit name="defaultpar">
+        <class>org.hibernate.ejb.test.pack.defaultpar.Lighter</class>
+        <properties>
+            <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
+            <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/>
+            <property name="hibernate.connection.username" value="sa"/>
+            <property name="hibernate.connection.password" value=""/>
+            <property name="hibernate.connection.url" value="jdbc:hsqldb:."/>
+            <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
+            <property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider"/>
+        </properties>
+    </persistence-unit>
+</persistence>

Copied: trunk/HibernateExt/entitymanager/src/test-resources/defaultpar/org (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/defaultpar/org)

Copied: trunk/HibernateExt/entitymanager/src/test-resources/defaultpar/org/hibernate (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/defaultpar/org/hibernate)

Copied: trunk/HibernateExt/entitymanager/src/test-resources/defaultpar/org/hibernate/ejb (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/defaultpar/org/hibernate/ejb)

Copied: trunk/HibernateExt/entitymanager/src/test-resources/defaultpar/org/hibernate/ejb/test (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/defaultpar/org/hibernate/ejb/test)

Copied: trunk/HibernateExt/entitymanager/src/test-resources/defaultpar/org/hibernate/ejb/test/pack (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/defaultpar/org/hibernate/ejb/test/pack)

Copied: trunk/HibernateExt/entitymanager/src/test-resources/defaultpar/org/hibernate/ejb/test/pack/defaultpar (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/defaultpar/org/hibernate/ejb/test/pack/defaultpar)

Deleted: trunk/HibernateExt/entitymanager/src/test-resources/defaultpar/org/hibernate/ejb/test/pack/defaultpar/Mouse.hbm.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/defaultpar/org/hibernate/ejb/test/pack/defaultpar/Mouse.hbm.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test-resources/defaultpar/org/hibernate/ejb/test/pack/defaultpar/Mouse.hbm.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,19 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE hibernate-mapping PUBLIC
-        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
-        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
-
-<hibernate-mapping
-        package="org.hibernate.ejb.test.pack.defaultpar"
-        >
-
-    <class name="Mouse">
-
-        <id name="id">
-            <generator class="native"/>
-        </id>
-        <property name="name"/>
-
-    </class>
-
-</hibernate-mapping>

Copied: trunk/HibernateExt/entitymanager/src/test-resources/defaultpar/org/hibernate/ejb/test/pack/defaultpar/Mouse.hbm.xml (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/defaultpar/org/hibernate/ejb/test/pack/defaultpar/Mouse.hbm.xml)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test-resources/defaultpar/org/hibernate/ejb/test/pack/defaultpar/Mouse.hbm.xml	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test-resources/defaultpar/org/hibernate/ejb/test/pack/defaultpar/Mouse.hbm.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+<!DOCTYPE hibernate-mapping PUBLIC
+        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+
+<hibernate-mapping
+        package="org.hibernate.ejb.test.pack.defaultpar"
+        >
+
+    <class name="Mouse">
+
+        <id name="id">
+            <generator class="native"/>
+        </id>
+        <property name="name"/>
+
+    </class>
+
+</hibernate-mapping>

Copied: trunk/HibernateExt/entitymanager/src/test-resources/excludehbmpar (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/excludehbmpar)

Copied: trunk/HibernateExt/entitymanager/src/test-resources/excludehbmpar/META-INF (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/excludehbmpar/META-INF)

Deleted: trunk/HibernateExt/entitymanager/src/test-resources/excludehbmpar/META-INF/persistence.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/excludehbmpar/META-INF/persistence.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test-resources/excludehbmpar/META-INF/persistence.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- example of a default persistence.xml -->
-<persistence xmlns="http://java.sun.com/xml/ns/persistence"
-             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
-             version="1.0">
-    <persistence-unit name="excludehbmpar" transaction-type="RESOURCE_LOCAL">
-        <mapping-file>orm2.xml</mapping-file>
-        <properties>
-            <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
-            <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/>
-            <property name="hibernate.connection.username" value="sa"/>
-            <property name="hibernate.connection.password" value=""/>
-            <property name="hibernate.connection.url" value="jdbc:hsqldb:."/>
-            <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
-            <property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider"/>
-            <property name="hibernate.archive.autodetection" value="class"/>
-        </properties>
-    </persistence-unit>
-</persistence>

Copied: trunk/HibernateExt/entitymanager/src/test-resources/excludehbmpar/META-INF/persistence.xml (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/excludehbmpar/META-INF/persistence.xml)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test-resources/excludehbmpar/META-INF/persistence.xml	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test-resources/excludehbmpar/META-INF/persistence.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- example of a default persistence.xml -->
+<persistence xmlns="http://java.sun.com/xml/ns/persistence"
+             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
+             version="1.0">
+    <persistence-unit name="excludehbmpar" transaction-type="RESOURCE_LOCAL">
+        <mapping-file>orm2.xml</mapping-file>
+        <properties>
+            <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
+            <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/>
+            <property name="hibernate.connection.username" value="sa"/>
+            <property name="hibernate.connection.password" value=""/>
+            <property name="hibernate.connection.url" value="jdbc:hsqldb:."/>
+            <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
+            <property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider"/>
+            <property name="hibernate.archive.autodetection" value="class"/>
+        </properties>
+    </persistence-unit>
+</persistence>

Copied: trunk/HibernateExt/entitymanager/src/test-resources/excludehbmpar/org (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/excludehbmpar/org)

Copied: trunk/HibernateExt/entitymanager/src/test-resources/excludehbmpar/org/hibernate (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/excludehbmpar/org/hibernate)

Copied: trunk/HibernateExt/entitymanager/src/test-resources/excludehbmpar/org/hibernate/ejb (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/excludehbmpar/org/hibernate/ejb)

Copied: trunk/HibernateExt/entitymanager/src/test-resources/excludehbmpar/org/hibernate/ejb/test (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/excludehbmpar/org/hibernate/ejb/test)

Copied: trunk/HibernateExt/entitymanager/src/test-resources/excludehbmpar/org/hibernate/ejb/test/pack (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/excludehbmpar/org/hibernate/ejb/test/pack)

Copied: trunk/HibernateExt/entitymanager/src/test-resources/excludehbmpar/org/hibernate/ejb/test/pack/excludehbmpar (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/excludehbmpar/org/hibernate/ejb/test/pack/excludehbmpar)

Deleted: trunk/HibernateExt/entitymanager/src/test-resources/excludehbmpar/org/hibernate/ejb/test/pack/excludehbmpar/Mouse.hbm.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/excludehbmpar/org/hibernate/ejb/test/pack/excludehbmpar/Mouse.hbm.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test-resources/excludehbmpar/org/hibernate/ejb/test/pack/excludehbmpar/Mouse.hbm.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,19 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE hibernate-mapping PUBLIC
-        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
-        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
-
-<hibernate-mapping
-        package="org.hibernate.ejb.test.pack.excludehbmpar"
-        >
-
-    <class name="Mouse">
-
-        <id name="id">
-            <generator class="native"/>
-        </id>
-        <property name="name"/>
-
-    </class>
-
-</hibernate-mapping>

Copied: trunk/HibernateExt/entitymanager/src/test-resources/excludehbmpar/org/hibernate/ejb/test/pack/excludehbmpar/Mouse.hbm.xml (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/excludehbmpar/org/hibernate/ejb/test/pack/excludehbmpar/Mouse.hbm.xml)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test-resources/excludehbmpar/org/hibernate/ejb/test/pack/excludehbmpar/Mouse.hbm.xml	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test-resources/excludehbmpar/org/hibernate/ejb/test/pack/excludehbmpar/Mouse.hbm.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+<!DOCTYPE hibernate-mapping PUBLIC
+        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+
+<hibernate-mapping
+        package="org.hibernate.ejb.test.pack.excludehbmpar"
+        >
+
+    <class name="Mouse">
+
+        <id name="id">
+            <generator class="native"/>
+        </id>
+        <property name="name"/>
+
+    </class>
+
+</hibernate-mapping>

Deleted: trunk/HibernateExt/entitymanager/src/test-resources/excludehbmpar/orm2.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/excludehbmpar/orm2.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test-resources/excludehbmpar/orm2.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,17 +0,0 @@
-<?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 orm_1_0.xsd"
-                 version="1.0"
-        >
-    <package>org.hibernate.ejb.test.xml</package>
-    <entity class="Light" access="FIELD" metadata-complete="true">
-        <attributes>
-            <id name="name">
-                <column name="fld_id"/>
-            </id>
-            <basic name="power"></basic>
-        </attributes>
-    </entity>
-</entity-mappings>
\ No newline at end of file

Copied: trunk/HibernateExt/entitymanager/src/test-resources/excludehbmpar/orm2.xml (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/excludehbmpar/orm2.xml)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test-resources/excludehbmpar/orm2.xml	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test-resources/excludehbmpar/orm2.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,17 @@
+<?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 orm_1_0.xsd"
+                 version="1.0"
+        >
+    <package>org.hibernate.ejb.test.xml</package>
+    <entity class="Light" access="FIELD" metadata-complete="true">
+        <attributes>
+            <id name="name">
+                <column name="fld_id"/>
+            </id>
+            <basic name="power"></basic>
+        </attributes>
+    </entity>
+</entity-mappings>
\ No newline at end of file

Copied: trunk/HibernateExt/entitymanager/src/test-resources/explicitpar (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/explicitpar)

Copied: trunk/HibernateExt/entitymanager/src/test-resources/explicitpar/META-INF (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/explicitpar/META-INF)

Deleted: trunk/HibernateExt/entitymanager/src/test-resources/explicitpar/META-INF/orm.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/explicitpar/META-INF/orm.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test-resources/explicitpar/META-INF/orm.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,14 +0,0 @@
-<?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 orm_1_0.xsd"
-                 version="1.0"
-        >
-    <package>org.hibernate.ejb.test.pack.various</package>
-    <entity class="Seat" access="PROPERTY" metadata-complete="true">
-        <attributes>
-            <id name="number"/>
-        </attributes>
-    </entity>
-</entity-mappings>
\ No newline at end of file

Copied: trunk/HibernateExt/entitymanager/src/test-resources/explicitpar/META-INF/orm.xml (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/explicitpar/META-INF/orm.xml)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test-resources/explicitpar/META-INF/orm.xml	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test-resources/explicitpar/META-INF/orm.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,14 @@
+<?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 orm_1_0.xsd"
+                 version="1.0"
+        >
+    <package>org.hibernate.ejb.test.pack.various</package>
+    <entity class="Seat" access="PROPERTY" metadata-complete="true">
+        <attributes>
+            <id name="number"/>
+        </attributes>
+    </entity>
+</entity-mappings>
\ No newline at end of file

Deleted: trunk/HibernateExt/entitymanager/src/test-resources/explicitpar/META-INF/persistence.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/explicitpar/META-INF/persistence.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test-resources/explicitpar/META-INF/persistence.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<persistence xmlns="http://java.sun.com/xml/ns/persistence"
-             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
-             version="1.0">
-    <persistence-unit name="manager1" transaction-type="RESOURCE_LOCAL">
-        <jar-file>./build/testresources/externaljar.jar</jar-file>
-        <class>org.hibernate.ejb.test.Cat</class>
-        <class>org.hibernate.ejb.test.Distributor</class>
-        <class>org.hibernate.ejb.test.Item</class>
-        <class>org.hibernate.ejb.test</class>
-        <exclude-unlisted-classes>true</exclude-unlisted-classes>
-        <properties>
-            <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
-            <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/>
-            <property name="hibernate.connection.username" value="sa"/>
-            <property name="hibernate.connection.password" value=""/>
-            <property name="hibernate.connection.url" value="jdbc:hsqldb:."/>
-            <property name="hibernate.cache.use_query_cache" value="true"/>
-            <property name="hibernate.cache.region_prefix" value="hibernate.test"/>
-            <property name="hibernate.jdbc.use_streams_for_binary" value="true"/>
-            <property name="hibernate.jdbc.batch_size" value="0"/>
-            <property name="hibernate.max_fetch_depth" value="3"/>
-            <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
-            <property name="hibernate.generate_statistics" value="true"/>
-            <property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider"/>
-            <property name="hibernate.ejb.naming_strategy" value="org.hibernate.ejb.test.MyNamingStrategy"/>
-            <!-- test naming strategy and fall back to element content -->
-            <!-- property name="hibernate.ejb.naming_strategy">org.hibernate.ejb.test.MyNamingStrategy</property -->
-
-            <!-- cache configuration -->
-            <property name="hibernate.ejb.classcache.org.hibernate.ejb.test.Item" value="read-write"/>
-            <property name="hibernate.ejb.collectioncache.org.hibernate.ejb.test.Item.distributors"
-                      value="read-write, RegionName"/>
-
-            <!-- event overriding -->
-            <property name="hibernate.ejb.event.pre-insert" value=""/>
-            <!-- remove JACC and validator -->
-
-            <!-- alternatively to <class> and <property> declarations, you can use a regular hibernate.cfg.xml file -->
-            <!-- property name="hibernate.ejb.cfgfile" value="/org/hibernate/ejb/test/hibernate.cfg.xml"/ -->
-        </properties>
-    </persistence-unit>
-</persistence>

Copied: trunk/HibernateExt/entitymanager/src/test-resources/explicitpar/META-INF/persistence.xml (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/explicitpar/META-INF/persistence.xml)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test-resources/explicitpar/META-INF/persistence.xml	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test-resources/explicitpar/META-INF/persistence.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<persistence xmlns="http://java.sun.com/xml/ns/persistence"
+             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
+             version="1.0">
+    <persistence-unit name="manager1" transaction-type="RESOURCE_LOCAL">
+        <jar-file>./build/testresources/externaljar.jar</jar-file>
+        <class>org.hibernate.ejb.test.Cat</class>
+        <class>org.hibernate.ejb.test.Distributor</class>
+        <class>org.hibernate.ejb.test.Item</class>
+        <class>org.hibernate.ejb.test</class>
+        <exclude-unlisted-classes>true</exclude-unlisted-classes>
+        <properties>
+            <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
+            <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/>
+            <property name="hibernate.connection.username" value="sa"/>
+            <property name="hibernate.connection.password" value=""/>
+            <property name="hibernate.connection.url" value="jdbc:hsqldb:."/>
+            <property name="hibernate.cache.use_query_cache" value="true"/>
+            <property name="hibernate.cache.region_prefix" value="hibernate.test"/>
+            <property name="hibernate.jdbc.use_streams_for_binary" value="true"/>
+            <property name="hibernate.jdbc.batch_size" value="0"/>
+            <property name="hibernate.max_fetch_depth" value="3"/>
+            <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
+            <property name="hibernate.generate_statistics" value="true"/>
+            <property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider"/>
+            <property name="hibernate.ejb.naming_strategy" value="org.hibernate.ejb.test.MyNamingStrategy"/>
+            <!-- test naming strategy and fall back to element content -->
+            <!-- property name="hibernate.ejb.naming_strategy">org.hibernate.ejb.test.MyNamingStrategy</property -->
+
+            <!-- cache configuration -->
+            <property name="hibernate.ejb.classcache.org.hibernate.ejb.test.Item" value="read-write"/>
+            <property name="hibernate.ejb.collectioncache.org.hibernate.ejb.test.Item.distributors"
+                      value="read-write, RegionName"/>
+
+            <!-- event overriding -->
+            <property name="hibernate.ejb.event.pre-insert" value=""/>
+            <!-- remove JACC and validator -->
+
+            <!-- alternatively to <class> and <property> declarations, you can use a regular hibernate.cfg.xml file -->
+            <!-- property name="hibernate.ejb.cfgfile" value="/org/hibernate/ejb/test/hibernate.cfg.xml"/ -->
+        </properties>
+    </persistence-unit>
+</persistence>

Copied: trunk/HibernateExt/entitymanager/src/test-resources/explodedpar (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/explodedpar)

Copied: trunk/HibernateExt/entitymanager/src/test-resources/explodedpar/META-INF (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/explodedpar/META-INF)

Deleted: trunk/HibernateExt/entitymanager/src/test-resources/explodedpar/META-INF/persistence.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/explodedpar/META-INF/persistence.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test-resources/explodedpar/META-INF/persistence.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- example of a default persistence.xml -->
-<persistence xmlns="http://java.sun.com/xml/ns/persistence"
-             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
-             version="1.0">
-    <persistence-unit name="explodedpar" transaction-type="RESOURCE_LOCAL">
-
-        <properties>
-            <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
-            <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/>
-            <property name="hibernate.connection.username" value="sa"/>
-            <property name="hibernate.connection.password" value=""/>
-            <property name="hibernate.connection.url" value="jdbc:hsqldb:."/>
-            <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
-            <property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider"/>
-        </properties>
-    </persistence-unit>
-</persistence>

Copied: trunk/HibernateExt/entitymanager/src/test-resources/explodedpar/META-INF/persistence.xml (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/explodedpar/META-INF/persistence.xml)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test-resources/explodedpar/META-INF/persistence.xml	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test-resources/explodedpar/META-INF/persistence.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- example of a default persistence.xml -->
+<persistence xmlns="http://java.sun.com/xml/ns/persistence"
+             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
+             version="1.0">
+    <persistence-unit name="explodedpar" transaction-type="RESOURCE_LOCAL">
+
+        <properties>
+            <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
+            <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/>
+            <property name="hibernate.connection.username" value="sa"/>
+            <property name="hibernate.connection.password" value=""/>
+            <property name="hibernate.connection.url" value="jdbc:hsqldb:."/>
+            <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
+            <property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider"/>
+        </properties>
+    </persistence-unit>
+</persistence>

Copied: trunk/HibernateExt/entitymanager/src/test-resources/explodedpar/org (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/explodedpar/org)

Copied: trunk/HibernateExt/entitymanager/src/test-resources/explodedpar/org/hibernate (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/explodedpar/org/hibernate)

Copied: trunk/HibernateExt/entitymanager/src/test-resources/explodedpar/org/hibernate/ejb (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/explodedpar/org/hibernate/ejb)

Copied: trunk/HibernateExt/entitymanager/src/test-resources/explodedpar/org/hibernate/ejb/test (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/explodedpar/org/hibernate/ejb/test)

Copied: trunk/HibernateExt/entitymanager/src/test-resources/explodedpar/org/hibernate/ejb/test/pack (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/explodedpar/org/hibernate/ejb/test/pack)

Copied: trunk/HibernateExt/entitymanager/src/test-resources/explodedpar/org/hibernate/ejb/test/pack/explodedpar (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/explodedpar/org/hibernate/ejb/test/pack/explodedpar)

Deleted: trunk/HibernateExt/entitymanager/src/test-resources/explodedpar/org/hibernate/ejb/test/pack/explodedpar/Elephant.hbm.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/explodedpar/org/hibernate/ejb/test/pack/explodedpar/Elephant.hbm.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test-resources/explodedpar/org/hibernate/ejb/test/pack/explodedpar/Elephant.hbm.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,20 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE hibernate-mapping PUBLIC
-        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
-        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
-
-<hibernate-mapping
-        package="org.hibernate.ejb.test.pack.explodedpar"
-        >
-
-
-    <class name="Elephant">
-
-        <id name="id">
-            <generator class="native"/>
-        </id>
-        <property name="name"/>
-
-    </class>
-
-</hibernate-mapping>

Copied: trunk/HibernateExt/entitymanager/src/test-resources/explodedpar/org/hibernate/ejb/test/pack/explodedpar/Elephant.hbm.xml (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/explodedpar/org/hibernate/ejb/test/pack/explodedpar/Elephant.hbm.xml)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test-resources/explodedpar/org/hibernate/ejb/test/pack/explodedpar/Elephant.hbm.xml	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test-resources/explodedpar/org/hibernate/ejb/test/pack/explodedpar/Elephant.hbm.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<!DOCTYPE hibernate-mapping PUBLIC
+        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+
+<hibernate-mapping
+        package="org.hibernate.ejb.test.pack.explodedpar"
+        >
+
+
+    <class name="Elephant">
+
+        <id name="id">
+            <generator class="native"/>
+        </id>
+        <property name="name"/>
+
+    </class>
+
+</hibernate-mapping>

Copied: trunk/HibernateExt/entitymanager/src/test-resources/externaljar (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/externaljar)

Copied: trunk/HibernateExt/entitymanager/src/test-resources/externaljar/META-INF (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/externaljar/META-INF)

Deleted: trunk/HibernateExt/entitymanager/src/test-resources/externaljar/META-INF/MANIFEST.MF
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/externaljar/META-INF/MANIFEST.MF	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test-resources/externaljar/META-INF/MANIFEST.MF	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,4 +0,0 @@
-Manifest-Version: 1.0
-Ant-Version: Apache Ant 1.6.3
-Created-By: 1.5.0_03-b07 (Sun Microsystems Inc.)
-

Copied: trunk/HibernateExt/entitymanager/src/test-resources/externaljar/META-INF/MANIFEST.MF (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/externaljar/META-INF/MANIFEST.MF)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test-resources/externaljar/META-INF/MANIFEST.MF	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test-resources/externaljar/META-INF/MANIFEST.MF	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,4 @@
+Manifest-Version: 1.0
+Ant-Version: Apache Ant 1.6.3
+Created-By: 1.5.0_03-b07 (Sun Microsystems Inc.)
+

Deleted: trunk/HibernateExt/entitymanager/src/test-resources/externaljar/META-INF/orm.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/externaljar/META-INF/orm.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test-resources/externaljar/META-INF/orm.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,14 +0,0 @@
-<?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 orm_1_0.xsd"
-                 version="1.0"
-        >
-    <package>org.hibernate.ejb.test.pack.various</package>
-    <entity class="Airplane" metadata-complete="true" access="PROPERTY">
-        <attributes>
-            <id name="serialNumber"/>
-        </attributes>
-    </entity>
-</entity-mappings>
\ No newline at end of file

Copied: trunk/HibernateExt/entitymanager/src/test-resources/externaljar/META-INF/orm.xml (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/externaljar/META-INF/orm.xml)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test-resources/externaljar/META-INF/orm.xml	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test-resources/externaljar/META-INF/orm.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,14 @@
+<?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 orm_1_0.xsd"
+                 version="1.0"
+        >
+    <package>org.hibernate.ejb.test.pack.various</package>
+    <entity class="Airplane" metadata-complete="true" access="PROPERTY">
+        <attributes>
+            <id name="serialNumber"/>
+        </attributes>
+    </entity>
+</entity-mappings>
\ No newline at end of file

Copied: trunk/HibernateExt/entitymanager/src/test-resources/overridenpar (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/overridenpar)

Copied: trunk/HibernateExt/entitymanager/src/test-resources/overridenpar/META-INF (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/overridenpar/META-INF)

Deleted: trunk/HibernateExt/entitymanager/src/test-resources/overridenpar/META-INF/persistence.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/overridenpar/META-INF/persistence.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test-resources/overridenpar/META-INF/persistence.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<persistence xmlns="http://java.sun.com/xml/ns/persistence"
-             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
-             version="1.0">
-    <persistence-unit name="overridenpar">
-        <jta-data-source>java:/unreachableDS</jta-data-source>
-		<properties>
-            <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
-            <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
-            <property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider"/>
-        </properties>
-    </persistence-unit>
-</persistence>

Copied: trunk/HibernateExt/entitymanager/src/test-resources/overridenpar/META-INF/persistence.xml (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/overridenpar/META-INF/persistence.xml)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test-resources/overridenpar/META-INF/persistence.xml	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test-resources/overridenpar/META-INF/persistence.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<persistence xmlns="http://java.sun.com/xml/ns/persistence"
+             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
+             version="1.0">
+    <persistence-unit name="overridenpar">
+        <jta-data-source>java:/unreachableDS</jta-data-source>
+		<properties>
+            <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
+            <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
+            <property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider"/>
+        </properties>
+    </persistence-unit>
+</persistence>

Copied: trunk/HibernateExt/entitymanager/src/test-resources/space par (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/space par)

Copied: trunk/HibernateExt/entitymanager/src/test-resources/space par/META-INF (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/space par/META-INF)

Deleted: trunk/HibernateExt/entitymanager/src/test-resources/space par/META-INF/persistence.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/space par/META-INF/persistence.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/entitymanager/src/test-resources/space par/META-INF/persistence.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- example of a default persistence.xml -->
-<persistence xmlns="http://java.sun.com/xml/ns/persistence"
-             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
-             version="1.0">
-    <persistence-unit name="space par">
-        <properties>
-            <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
-            <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/>
-            <property name="hibernate.connection.username" value="sa"/>
-            <property name="hibernate.connection.password" value=""/>
-            <property name="hibernate.connection.url" value="jdbc:hsqldb:."/>
-            <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
-            <property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider"/>
-        </properties>
-    </persistence-unit>
-</persistence>

Copied: trunk/HibernateExt/entitymanager/src/test-resources/space par/META-INF/persistence.xml (from rev 11279, branches/Branch_3_2/HibernateExt/entitymanager/src/test-resources/space par/META-INF/persistence.xml)
===================================================================
--- trunk/HibernateExt/entitymanager/src/test-resources/space par/META-INF/persistence.xml	                        (rev 0)
+++ trunk/HibernateExt/entitymanager/src/test-resources/space par/META-INF/persistence.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- example of a default persistence.xml -->
+<persistence xmlns="http://java.sun.com/xml/ns/persistence"
+             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
+             version="1.0">
+    <persistence-unit name="space par">
+        <properties>
+            <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
+            <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/>
+            <property name="hibernate.connection.username" value="sa"/>
+            <property name="hibernate.connection.password" value=""/>
+            <property name="hibernate.connection.url" value="jdbc:hsqldb:."/>
+            <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
+            <property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider"/>
+        </properties>
+    </persistence-unit>
+</persistence>

Copied: trunk/HibernateExt/jpa-api (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api)


Property changes on: trunk/HibernateExt/jpa-api
___________________________________________________________________
Name: svn:ignore
   + build
.settings
build.properties
classes


Deleted: trunk/HibernateExt/jpa-api/.cvsignore
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/.cvsignore	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/.cvsignore	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,3 +0,0 @@
-build
-.settings
-build.properties

Copied: trunk/HibernateExt/jpa-api/.cvsignore (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/.cvsignore)
===================================================================
--- trunk/HibernateExt/jpa-api/.cvsignore	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/.cvsignore	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,3 @@
+build
+.settings
+build.properties

Deleted: trunk/HibernateExt/jpa-api/build.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/build.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/build.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,109 +0,0 @@
-<!--
-
-	EJB API build script.
-
-	Emmanuel Bernard
-
--->
-
-<project name="EJB-API" default="jar" basedir=".">
-
-	<!-- Give user a chance to override without editing this file or typing -D -->
-	<property file="build.properties"/>
-	<property file="${user.home}/.ant.properties"/>
-
-	<!-- Name of project and version, used to create filenames -->
-	<property name="name" value="ejb3-persistence"/>
-	<property name="version" value="3.0 Final Release"/>
-
-	<!-- set global properties for this build -->
-	<property name="src.dir" value="src"/>
-	<property name="build.dir" value="build"/>
-    <property name="metainf.dir" value="etc"/>
-	<property name="classes.dir" value="${build.dir}/classes"/>
-	<property name="jar.name" value="${name}"/>
-
-	<property name="javac.debug" value="on"/>
-	<property name="javac.optimize" value="off"/>
-
-	<patternset id="src.files">
-		<!-- include everything we want in the src directory
-			that we didn't want in the jar itself -->
-		<include name="**/*.java"/>
-		<include name="META-INF/ra.xml"/>
-	</patternset>
-
-
-	<!-- ############################ Targets #############################-->
-
-	<target name="clean" description="Cleans up build and dist directories">
-		<delete dir="${build.dir}"/>
-	</target>
-
-	<target name="init" description="Initialize the build">
-		<tstamp>
-			<format property="subversion" pattern="yyyy-MM-dd hh:mm:ss"/>
-		</tstamp>
-		<echo message="Build ${name}-${version} (${subversion})"/>
-
-		<mkdir dir="${classes.dir}"/>
-
-	</target>
-
-	<target name="compile" depends="init" description="Compile the Java source code">
-		<available
-			classname="org.eclipse.core.launcher.Main"
-			property="build.compiler"
-			value="org.eclipse.jdt.core.JDTCompilerAdapter"
-			classpath="${java.class.path}"/>
-		<javac
-			destdir="${classes.dir}"
-			debug="${javac.debug}"
-			optimize="${javac.optimize}"
-			nowarn="on"
-            source="1.5">
-          <src path="${src.dir}"/>
-        </javac>
-	</target>
-
-
-	<target name="jar" depends="compile" description="Build the distribution .jar file">
-		<jar jarfile="${build.dir}/${jar.name}.jar" basedir="${classes.dir}">
-			<include name="javax/**/*.class"/>
-            <manifest>
-                <attribute name="Built-By" value="hibernate.org"/>
-                <attribute name="Specification-Title" value="EJB 3.0"/>
-                <attribute name="Specification-Version" value="${version}"/>
-                <attribute name="Specification-Vendor" value="Sun Microsystems, Inc."/>
-                <attribute name="Implementation-Title" value="EJB"/>
-                <attribute name="Implementation-Version" value="${version} ${TODAY}"/> 
-                <attribute name="Implementation-Vendor" value="hibernate.org"/>
-            </manifest>
-            <metainf dir="${basedir}/${metainf.dir}">
-                <include name="**/license.txt"/>
-            </metainf>
-		</jar>
-	</target>
-
-    <target name="javadoc" description="Compile the Javadoc API documentation">
-        <mkdir dir="${build.dir}/api"/>
-        <javadoc
-        	packagenames="javax.persistence.*"
-        	destdir="${build.dir}/api"
-        	use="true"
-        	protected="true"
-        	version="true"
-            overview="${basedir}/doc/api/package.html"
-            windowtitle="EJB 3.0 Persistence API Documentation"
-        	doctitle="EJB 3.0 Persistence API Documentation"
-			stylesheetfile="./etc/jdstyle.css"
-        	link="http://java.sun.com/j2se/1.5/docs/api">
-        	<packageset dir="${src.dir}" defaultexcludes="yes" >
-		      <include name="**/*" />
-		    </packageset>
-        </javadoc>
-
-    </target>
-
-
-</project>

Copied: trunk/HibernateExt/jpa-api/build.xml (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/build.xml)
===================================================================
--- trunk/HibernateExt/jpa-api/build.xml	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/build.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,109 @@
+<!--
+
+	EJB API build script.
+
+	Emmanuel Bernard
+
+-->
+
+<project name="EJB-API" default="jar" basedir=".">
+
+	<!-- Give user a chance to override without editing this file or typing -D -->
+	<property file="build.properties"/>
+	<property file="${user.home}/.ant.properties"/>
+
+	<!-- Name of project and version, used to create filenames -->
+	<property name="name" value="ejb3-persistence"/>
+	<property name="version" value="3.0 Final Release"/>
+
+	<!-- set global properties for this build -->
+	<property name="src.dir" value="src"/>
+	<property name="build.dir" value="build"/>
+    <property name="metainf.dir" value="etc"/>
+	<property name="classes.dir" value="${build.dir}/classes"/>
+	<property name="jar.name" value="${name}"/>
+
+	<property name="javac.debug" value="on"/>
+	<property name="javac.optimize" value="off"/>
+
+	<patternset id="src.files">
+		<!-- include everything we want in the src directory
+			that we didn't want in the jar itself -->
+		<include name="**/*.java"/>
+		<include name="META-INF/ra.xml"/>
+	</patternset>
+
+
+	<!-- ############################ Targets #############################-->
+
+	<target name="clean" description="Cleans up build and dist directories">
+		<delete dir="${build.dir}"/>
+	</target>
+
+	<target name="init" description="Initialize the build">
+		<tstamp>
+			<format property="subversion" pattern="yyyy-MM-dd hh:mm:ss"/>
+		</tstamp>
+		<echo message="Build ${name}-${version} (${subversion})"/>
+
+		<mkdir dir="${classes.dir}"/>
+
+	</target>
+
+	<target name="compile" depends="init" description="Compile the Java source code">
+		<available
+			classname="org.eclipse.core.launcher.Main"
+			property="build.compiler"
+			value="org.eclipse.jdt.core.JDTCompilerAdapter"
+			classpath="${java.class.path}"/>
+		<javac
+			destdir="${classes.dir}"
+			debug="${javac.debug}"
+			optimize="${javac.optimize}"
+			nowarn="on"
+            source="1.5">
+          <src path="${src.dir}"/>
+        </javac>
+	</target>
+
+
+	<target name="jar" depends="compile" description="Build the distribution .jar file">
+		<jar jarfile="${build.dir}/${jar.name}.jar" basedir="${classes.dir}">
+			<include name="javax/**/*.class"/>
+            <manifest>
+                <attribute name="Built-By" value="hibernate.org"/>
+                <attribute name="Specification-Title" value="EJB 3.0"/>
+                <attribute name="Specification-Version" value="${version}"/>
+                <attribute name="Specification-Vendor" value="Sun Microsystems, Inc."/>
+                <attribute name="Implementation-Title" value="EJB"/>
+                <attribute name="Implementation-Version" value="${version} ${TODAY}"/> 
+                <attribute name="Implementation-Vendor" value="hibernate.org"/>
+            </manifest>
+            <metainf dir="${basedir}/${metainf.dir}">
+                <include name="**/license.txt"/>
+            </metainf>
+		</jar>
+	</target>
+
+    <target name="javadoc" description="Compile the Javadoc API documentation">
+        <mkdir dir="${build.dir}/api"/>
+        <javadoc
+        	packagenames="javax.persistence.*"
+        	destdir="${build.dir}/api"
+        	use="true"
+        	protected="true"
+        	version="true"
+            overview="${basedir}/doc/api/package.html"
+            windowtitle="EJB 3.0 Persistence API Documentation"
+        	doctitle="EJB 3.0 Persistence API Documentation"
+			stylesheetfile="./etc/jdstyle.css"
+        	link="http://java.sun.com/j2se/1.5/docs/api">
+        	<packageset dir="${src.dir}" defaultexcludes="yes" >
+		      <include name="**/*" />
+		    </packageset>
+        </javadoc>
+
+    </target>
+
+
+</project>

Copied: trunk/HibernateExt/jpa-api/doc (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/doc)

Copied: trunk/HibernateExt/jpa-api/doc/api (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/doc/api)

Deleted: trunk/HibernateExt/jpa-api/doc/api/package.html
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/doc/api/package.html	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/doc/api/package.html	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1 +0,0 @@
-<body></body>
\ No newline at end of file

Copied: trunk/HibernateExt/jpa-api/doc/api/package.html (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/doc/api/package.html)
===================================================================
--- trunk/HibernateExt/jpa-api/doc/api/package.html	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/doc/api/package.html	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1 @@
+<body></body>
\ No newline at end of file

Copied: trunk/HibernateExt/jpa-api/etc (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/etc)

Deleted: trunk/HibernateExt/jpa-api/etc/jdstyle.css
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/etc/jdstyle.css	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/etc/jdstyle.css	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,117 +0,0 @@
-/* Javadoc style sheet */
-
-/* Define colors, fonts and other style attributes here to override the defaults  */
-
-/* Page background color */
-body { 	font-family: Arial;
-	background-color: white;
-	font-size: 10pt;
- }
-td { 	font-family: Arial;
-	font-size: 10pt;
- }
-/* Table colors */
-.TableHeadingColor     { background: #F4F4F4 }
-.TableSubHeadingColor  { background: #F4F4F4 }
-.TableRowColor         { background: #FFFFFF }
-
-/* Font used in left-hand frame lists */
-.FrameTitleFont   { font-size: normal; font-family: Arial }
-.FrameHeadingFont { font-size: normal; font-family: Arial }
-.FrameItemFont    { font-size: normal; font-family: Arial }
-
-/* Example of smaller, sans-serif font in frames */
-/* .FrameItemFont  { font-size: 10pt; font-family: Helvetica, Arial, sans-serif } */
-
-/* Navigation bar fonts and colors */
-.NavBarCell1    { background-color:#F4F4F4;}
-.NavBarCell1Rev { background-color:silver;}
-
-.NavBarFont1    { font-family: Arial, Helvetica, sans-serif; color:#000000;}
-.NavBarFont1Rev { font-family: Arial, Helvetica, sans-serif; color:#FFFFFF;}
-
-.NavBarCell2    { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;}
-.NavBarCell3    { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;}
-
-A {
-    color: #003399;
-}
-
-A:active {
-    color: #003399;
-}
-
-A:visited {
-    color: #888888;
-}
-
-P, OL, UL, LI, DL, DT, DD, BLOCKQUOTE {
-    color: #000000;
-}
-
-TD, TH, SPAN {
-    color: #000000;
-}
-
-BLOCKQUOTE {
-    margin-right: 0px;
-}
-
-
-/*H1, H2, H3, H4, H5, H6    {
-    color: #000000;
-    font-weight:500;
-    margin-top:10px;
-    padding-top:15px;
-}
-
-H1 { font-size: 150%; }
-H2 { font-size: 140%; }
-H3 { font-size: 110%; font-weight: bold; }
-H4 { font-size: 110%; font-weight: bold;}
-H5 { font-size: 100%; font-style: italic; }
-H6 { font-size: 100%; font-style: italic; }*/
-
-TT {
-font-size: 90%;
-    font-family: "Courier New", Courier, monospace;
-    color: #000000;
-}
-
-PRE {
-font-size: 90%;
-    padding: 5px;
-    border-style: solid;
-    border-width: 1px;
-    border-color: #CCCCCC;
-    background-color: #F4F4F4;
-}
-
-UL, OL, LI {
-    list-style: disc;
-}
-
-HR  {
-    width: 100%;
-    height: 1px;
-    background-color: #CCCCCC;
-    border-width: 0px;
-    padding: 0px;
-    color: #CCCCCC;
-}
-
-.variablelist { 
-    padding-top: 10; 
-    padding-bottom:10; 
-    margin:0;
-}
-
-.itemizedlist, UL { 
-    padding-top: 0; 
-    padding-bottom:0; 
-    margin:0; 
-}
-
-.term { 
-    font-weight:bold;
-}

Copied: trunk/HibernateExt/jpa-api/etc/jdstyle.css (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/etc/jdstyle.css)
===================================================================
--- trunk/HibernateExt/jpa-api/etc/jdstyle.css	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/etc/jdstyle.css	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,117 @@
+/* Javadoc style sheet */
+
+/* Define colors, fonts and other style attributes here to override the defaults  */
+
+/* Page background color */
+body { 	font-family: Arial;
+	background-color: white;
+	font-size: 10pt;
+ }
+td { 	font-family: Arial;
+	font-size: 10pt;
+ }
+/* Table colors */
+.TableHeadingColor     { background: #F4F4F4 }
+.TableSubHeadingColor  { background: #F4F4F4 }
+.TableRowColor         { background: #FFFFFF }
+
+/* Font used in left-hand frame lists */
+.FrameTitleFont   { font-size: normal; font-family: Arial }
+.FrameHeadingFont { font-size: normal; font-family: Arial }
+.FrameItemFont    { font-size: normal; font-family: Arial }
+
+/* Example of smaller, sans-serif font in frames */
+/* .FrameItemFont  { font-size: 10pt; font-family: Helvetica, Arial, sans-serif } */
+
+/* Navigation bar fonts and colors */
+.NavBarCell1    { background-color:#F4F4F4;}
+.NavBarCell1Rev { background-color:silver;}
+
+.NavBarFont1    { font-family: Arial, Helvetica, sans-serif; color:#000000;}
+.NavBarFont1Rev { font-family: Arial, Helvetica, sans-serif; color:#FFFFFF;}
+
+.NavBarCell2    { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;}
+.NavBarCell3    { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;}
+
+A {
+    color: #003399;
+}
+
+A:active {
+    color: #003399;
+}
+
+A:visited {
+    color: #888888;
+}
+
+P, OL, UL, LI, DL, DT, DD, BLOCKQUOTE {
+    color: #000000;
+}
+
+TD, TH, SPAN {
+    color: #000000;
+}
+
+BLOCKQUOTE {
+    margin-right: 0px;
+}
+
+
+/*H1, H2, H3, H4, H5, H6    {
+    color: #000000;
+    font-weight:500;
+    margin-top:10px;
+    padding-top:15px;
+}
+
+H1 { font-size: 150%; }
+H2 { font-size: 140%; }
+H3 { font-size: 110%; font-weight: bold; }
+H4 { font-size: 110%; font-weight: bold;}
+H5 { font-size: 100%; font-style: italic; }
+H6 { font-size: 100%; font-style: italic; }*/
+
+TT {
+font-size: 90%;
+    font-family: "Courier New", Courier, monospace;
+    color: #000000;
+}
+
+PRE {
+font-size: 90%;
+    padding: 5px;
+    border-style: solid;
+    border-width: 1px;
+    border-color: #CCCCCC;
+    background-color: #F4F4F4;
+}
+
+UL, OL, LI {
+    list-style: disc;
+}
+
+HR  {
+    width: 100%;
+    height: 1px;
+    background-color: #CCCCCC;
+    border-width: 0px;
+    padding: 0px;
+    color: #CCCCCC;
+}
+
+.variablelist { 
+    padding-top: 10; 
+    padding-bottom:10; 
+    margin:0;
+}
+
+.itemizedlist, UL { 
+    padding-top: 0; 
+    padding-bottom:0; 
+    margin:0; 
+}
+
+.term { 
+    font-weight:bold;
+}

Deleted: trunk/HibernateExt/jpa-api/etc/license.txt
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/etc/license.txt	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/etc/license.txt	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,119 +0,0 @@
-Specification: JSR-000220 Enterprise JavaBeans v.3.0 ("Specification")
-Version: 3.0
-Status: Final Release
-Release: 8 May 2006
-Copyright 2006 SUN MICROSYSTEMS, INC.
-4150 Network Circle, Santa Clara, California 95054, U.S.A
-All rights reserved.
-LIMITED LICENSE GRANTS
-1. _License for Evaluation Purposes_. Sun hereby grants you a fully-paid, non-exclusive, non-transferable,
-worldwide, limited license (without the right to sublicense), under Sun’s applicable intellectual
-property rights to view, download, use and reproduce the Specification only for the purpose of internal
-evaluation. This includes (i) developing applications intended to run on an implementation of the Specification,
-provided that such applications do not themselves implement any portion(s) of the Specification,
-and (ii) discussing the Specification with any third party; and (iii) excerpting brief portions of the
-Specification in oral or written communications which discuss the Specification provided that such excerpts
-do not in the aggregate constitute a significant portion of the Specification.
-2. _License for the Distribution of Compliant Implementations_. Sun also grants you a perpetual, nonexclusive,
-non-transferable, worldwide, fully paid-up, royalty free, limited license (without the right to
-sublicense) under any applicable copyrights or, subject to the provisions of subsection 4 below, patent
-rights it may have covering the Specification to create and/or distribute an Independent Implementation
-of the Specification that: (a) fully implements the Specification including all its required interfaces and
-functionality; (b) does not modify, subset, superset or otherwise extend the Licensor Name Space, or include
-any public or protected packages, classes, Java interfaces, fields or methods within the Licensor
-Name Space other than those required/authorized by the Specification or Specifications being implemented;
-and (c) passes the Technology Compatibility Kit (including satisfying the requirements of the
-applicable TCK Users Guide) for such Specification ("Compliant Implementation"). In addition, the
-foregoing license is expressly conditioned on your not acting outside its scope. No license is granted
-hereunder for any other purpose (including, for example, modifying the Specification, other than to the
-extent of your fair use rights, or distributing the Specification to third parties). Also, no right, title, or
-interest in or to any trademarks, service marks, or trade names of Sun or Sun’s licensors is granted hereunder.
-Java, and Java-related logos, marks and names are trademarks or registered trademarks of Sun Microsystems,
-Inc. in the U.S. and other countries.
-3. _Pass-through Conditions_. You need not include limitations (a)-(c) from the previous paragraph or
-any other particular "pass through" requirements in any license You grant concerning the use of your Independent
-Implementation or products derived from it. However, except with respect to Independent Implementations
-(and products derived from them) that satisfy limitations (a)-(c) from the previous
-paragraph, You may neither: (a) grant or otherwise pass through to your licensees any licenses under
-Sun’s applicable intellectual property rights; nor (b) authorize your licensees to make any claims concerning
-their implementation’s compliance with the Specification in question.
-4. _Reciprocity Concerning Patent Licenses_.
-a. With respect to any patent claims covered by the license granted under subparagraph 2 above that
-would be infringed by all technically feasible implementations of the Specification, such license is conditioned
-upon your offering on fair, reasonable and non-discriminatory terms, to any party seeking it
-from You, a perpetual, non-exclusive, non-transferable, worldwide license under Your patent rights
-which are or would be infringed by all technically feasible implementations of the Specification to develop,
-distribute and use a Compliant Implementation.
-b With respect to any patent claims owned by Sun and covered by the license granted under subparagraph
-2, whether or not their infringement can be avoided in a technically feasible manner when implementing
-the Specification, such license shall terminate with respect to such claims if You initiate a claim against
-Sun that it has, in the course of performing its responsibilities as the Specification Lead, induced any other
-entity to infringe Your patent rights.
-c Also with respect to any patent claims owned by Sun and covered by the license granted under subparagraph
-2 above, where the infringement of such claims can be avoided in a technically feasible manner
-when implementing the Specification such license, with respect to such claims, shall terminate if You
-initiate a claim against Sun that its making, having made, using, offering to sell, selling or importing a
-Compliant Implementation infringes Your patent rights.
-5. _Definitions_. For the purposes of this Agreement: "Independent Implementation" shall mean an implementation
-of the Specification that neither derives from any of Sun’s source code or binary code materials
-nor, except with an appropriate and separate license from Sun, includes any of Sun’s source code
-or binary code materials; "Licensor Name Space" shall mean the public class or interface declarations
-whose names begin with "java", "javax", "com.sun" or their equivalents in any subsequent naming convention
-adopted by Sun through the Java Community Process, or any recognized successors or replacements
-thereof; and "Technology Compatibility Kit" or "TCK" shall mean the test suite and
-accompanying TCK User’s Guide provided by Sun which corresponds to the Specification and that was
-available either (i) from Sun 120 days before the first release of Your Independent Implementation that
-allows its use for commercial purposes, or (ii) more recently than 120 days from such release but against
-which You elect to test Your implementation of the Specification.
-This Agreement will terminate immediately without notice from Sun if you breach the Agreement or act
-outside the scope of the licenses granted above.
-DISCLAIMER OF WARRANTIES
-THE SPECIFICATION IS PROVIDED "AS IS". SUN MAKES NO REPRESENTATIONS OR WARRANTIES,
-EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES
-OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT
-(INCLUDING AS A CONSEQUENCE OF ANY PRACTICE OR IMPLEMENTATION
-OF THE SPECIFICATION), OR THAT THE CONTENTS OF THE SPECIFICATION ARE
-SUITABLE FOR ANY PURPOSE. This document does not represent any commitment to release or implement
-any portion of the Specification in any product. In addition, the Specification could include technical
-inaccuracies or typographical errors.
-LIMITATION OF LIABILITY
-TO THE EXTENT NOT PROHIBITED BY LAW, IN NO EVENT WILL SUN OR ITS LICENSORS
-BE LIABLE FOR ANY DAMAGES, INCLUDING WITHOUT LIMITATION, LOST REVENUE,
-PROFITS OR DATA, OR FOR SPECIAL, INDIRECT, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
-DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
-ARISING OUT OF OR RELATED IN ANY WAY TO YOUR HAVING, IMPLEMENTING OR
-OTHERWISE USING THE SPECIFICATION, EVEN IF SUN AND/OR ITS LICENSORS HAVE
-BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-You will indemnify, hold harmless, and defend Sun and its licensors from any claims arising or resulting
-from: (i) your use of the Specification; (ii) the use or distribution of your Java application, applet and/or
-implementation; and/or (iii) any claims that later versions or releases of any Specification furnished to
-you are incompatible with the Specification provided to you under this license.
-
-RESTRICTED RIGHTS LEGEND
-U.S. Government: If this Specification is being acquired by or on behalf of the U.S. Government or by a
-U.S. Government prime contractor or subcontractor (at any tier), then the Government’s rights in the
-Software and accompanying documentation shall be only as set forth in this license; this is in accordance
-with 48 C.F.R. 227.7201 through 227.7202-4 (for Department of Defense (DoD) acquisitions) and with
-48 C.F.R. 2.101 and 12.212 (for non-DoD acquisitions).
-REPORT
-If you provide Sun with any comments or suggestions concerning the Specification ("Feedback"), you
-hereby: (i) agree that such Feedback is provided on a non-proprietary and non-confidential basis, and (ii)
-grant Sun a perpetual, non-exclusive, worldwide, fully paid-up, irrevocable license, with the right to sublicense
-through multiple levels of sublicensees, to incorporate, disclose, and use without limitation the
-Feedback for any purpose.
-GENERAL TERMS
-Any action related to this Agreement will be governed by California law and controlling U.S. federal law.
-The U.N. Convention for the International Sale of Goods and the choice of law rules of any jurisdiction
-will not apply.
-The Specification is subject to U.S. export control laws and may be subject to export or import regulations
-in other countries. Licensee agrees to comply strictly with all such laws and regulations and acknowledges
-that it has the responsibility to obtain such licenses to export, re-export or import as may be
-required after delivery to Licensee.
-This Agreement is the parties’ entire agreement relating to its subject matter. It supersedes all prior or
-contemporaneous oral or written communications, proposals, conditions, representations and warranties
-and prevails over any conflicting or additional terms of any quote, order, acknowledgment, or other communication
-between the parties relating to its subject matter during the term of this Agreement. No modification
-to this Agreement will be binding, unless in writing and signed by an authorized representative
-of each party.
-Rev. April, 2006
-Sun/Final/Full
\ No newline at end of file

Copied: trunk/HibernateExt/jpa-api/etc/license.txt (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/etc/license.txt)
===================================================================
--- trunk/HibernateExt/jpa-api/etc/license.txt	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/etc/license.txt	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,119 @@
+Specification: JSR-000220 Enterprise JavaBeans v.3.0 ("Specification")
+Version: 3.0
+Status: Final Release
+Release: 8 May 2006
+Copyright 2006 SUN MICROSYSTEMS, INC.
+4150 Network Circle, Santa Clara, California 95054, U.S.A
+All rights reserved.
+LIMITED LICENSE GRANTS
+1. _License for Evaluation Purposes_. Sun hereby grants you a fully-paid, non-exclusive, non-transferable,
+worldwide, limited license (without the right to sublicense), under Sun’s applicable intellectual
+property rights to view, download, use and reproduce the Specification only for the purpose of internal
+evaluation. This includes (i) developing applications intended to run on an implementation of the Specification,
+provided that such applications do not themselves implement any portion(s) of the Specification,
+and (ii) discussing the Specification with any third party; and (iii) excerpting brief portions of the
+Specification in oral or written communications which discuss the Specification provided that such excerpts
+do not in the aggregate constitute a significant portion of the Specification.
+2. _License for the Distribution of Compliant Implementations_. Sun also grants you a perpetual, nonexclusive,
+non-transferable, worldwide, fully paid-up, royalty free, limited license (without the right to
+sublicense) under any applicable copyrights or, subject to the provisions of subsection 4 below, patent
+rights it may have covering the Specification to create and/or distribute an Independent Implementation
+of the Specification that: (a) fully implements the Specification including all its required interfaces and
+functionality; (b) does not modify, subset, superset or otherwise extend the Licensor Name Space, or include
+any public or protected packages, classes, Java interfaces, fields or methods within the Licensor
+Name Space other than those required/authorized by the Specification or Specifications being implemented;
+and (c) passes the Technology Compatibility Kit (including satisfying the requirements of the
+applicable TCK Users Guide) for such Specification ("Compliant Implementation"). In addition, the
+foregoing license is expressly conditioned on your not acting outside its scope. No license is granted
+hereunder for any other purpose (including, for example, modifying the Specification, other than to the
+extent of your fair use rights, or distributing the Specification to third parties). Also, no right, title, or
+interest in or to any trademarks, service marks, or trade names of Sun or Sun’s licensors is granted hereunder.
+Java, and Java-related logos, marks and names are trademarks or registered trademarks of Sun Microsystems,
+Inc. in the U.S. and other countries.
+3. _Pass-through Conditions_. You need not include limitations (a)-(c) from the previous paragraph or
+any other particular "pass through" requirements in any license You grant concerning the use of your Independent
+Implementation or products derived from it. However, except with respect to Independent Implementations
+(and products derived from them) that satisfy limitations (a)-(c) from the previous
+paragraph, You may neither: (a) grant or otherwise pass through to your licensees any licenses under
+Sun’s applicable intellectual property rights; nor (b) authorize your licensees to make any claims concerning
+their implementation’s compliance with the Specification in question.
+4. _Reciprocity Concerning Patent Licenses_.
+a. With respect to any patent claims covered by the license granted under subparagraph 2 above that
+would be infringed by all technically feasible implementations of the Specification, such license is conditioned
+upon your offering on fair, reasonable and non-discriminatory terms, to any party seeking it
+from You, a perpetual, non-exclusive, non-transferable, worldwide license under Your patent rights
+which are or would be infringed by all technically feasible implementations of the Specification to develop,
+distribute and use a Compliant Implementation.
+b With respect to any patent claims owned by Sun and covered by the license granted under subparagraph
+2, whether or not their infringement can be avoided in a technically feasible manner when implementing
+the Specification, such license shall terminate with respect to such claims if You initiate a claim against
+Sun that it has, in the course of performing its responsibilities as the Specification Lead, induced any other
+entity to infringe Your patent rights.
+c Also with respect to any patent claims owned by Sun and covered by the license granted under subparagraph
+2 above, where the infringement of such claims can be avoided in a technically feasible manner
+when implementing the Specification such license, with respect to such claims, shall terminate if You
+initiate a claim against Sun that its making, having made, using, offering to sell, selling or importing a
+Compliant Implementation infringes Your patent rights.
+5. _Definitions_. For the purposes of this Agreement: "Independent Implementation" shall mean an implementation
+of the Specification that neither derives from any of Sun’s source code or binary code materials
+nor, except with an appropriate and separate license from Sun, includes any of Sun’s source code
+or binary code materials; "Licensor Name Space" shall mean the public class or interface declarations
+whose names begin with "java", "javax", "com.sun" or their equivalents in any subsequent naming convention
+adopted by Sun through the Java Community Process, or any recognized successors or replacements
+thereof; and "Technology Compatibility Kit" or "TCK" shall mean the test suite and
+accompanying TCK User’s Guide provided by Sun which corresponds to the Specification and that was
+available either (i) from Sun 120 days before the first release of Your Independent Implementation that
+allows its use for commercial purposes, or (ii) more recently than 120 days from such release but against
+which You elect to test Your implementation of the Specification.
+This Agreement will terminate immediately without notice from Sun if you breach the Agreement or act
+outside the scope of the licenses granted above.
+DISCLAIMER OF WARRANTIES
+THE SPECIFICATION IS PROVIDED "AS IS". SUN MAKES NO REPRESENTATIONS OR WARRANTIES,
+EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT
+(INCLUDING AS A CONSEQUENCE OF ANY PRACTICE OR IMPLEMENTATION
+OF THE SPECIFICATION), OR THAT THE CONTENTS OF THE SPECIFICATION ARE
+SUITABLE FOR ANY PURPOSE. This document does not represent any commitment to release or implement
+any portion of the Specification in any product. In addition, the Specification could include technical
+inaccuracies or typographical errors.
+LIMITATION OF LIABILITY
+TO THE EXTENT NOT PROHIBITED BY LAW, IN NO EVENT WILL SUN OR ITS LICENSORS
+BE LIABLE FOR ANY DAMAGES, INCLUDING WITHOUT LIMITATION, LOST REVENUE,
+PROFITS OR DATA, OR FOR SPECIAL, INDIRECT, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
+DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
+ARISING OUT OF OR RELATED IN ANY WAY TO YOUR HAVING, IMPLEMENTING OR
+OTHERWISE USING THE SPECIFICATION, EVEN IF SUN AND/OR ITS LICENSORS HAVE
+BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+You will indemnify, hold harmless, and defend Sun and its licensors from any claims arising or resulting
+from: (i) your use of the Specification; (ii) the use or distribution of your Java application, applet and/or
+implementation; and/or (iii) any claims that later versions or releases of any Specification furnished to
+you are incompatible with the Specification provided to you under this license.
+
+RESTRICTED RIGHTS LEGEND
+U.S. Government: If this Specification is being acquired by or on behalf of the U.S. Government or by a
+U.S. Government prime contractor or subcontractor (at any tier), then the Government’s rights in the
+Software and accompanying documentation shall be only as set forth in this license; this is in accordance
+with 48 C.F.R. 227.7201 through 227.7202-4 (for Department of Defense (DoD) acquisitions) and with
+48 C.F.R. 2.101 and 12.212 (for non-DoD acquisitions).
+REPORT
+If you provide Sun with any comments or suggestions concerning the Specification ("Feedback"), you
+hereby: (i) agree that such Feedback is provided on a non-proprietary and non-confidential basis, and (ii)
+grant Sun a perpetual, non-exclusive, worldwide, fully paid-up, irrevocable license, with the right to sublicense
+through multiple levels of sublicensees, to incorporate, disclose, and use without limitation the
+Feedback for any purpose.
+GENERAL TERMS
+Any action related to this Agreement will be governed by California law and controlling U.S. federal law.
+The U.N. Convention for the International Sale of Goods and the choice of law rules of any jurisdiction
+will not apply.
+The Specification is subject to U.S. export control laws and may be subject to export or import regulations
+in other countries. Licensee agrees to comply strictly with all such laws and regulations and acknowledges
+that it has the responsibility to obtain such licenses to export, re-export or import as may be
+required after delivery to Licensee.
+This Agreement is the parties’ entire agreement relating to its subject matter. It supersedes all prior or
+contemporaneous oral or written communications, proposals, conditions, representations and warranties
+and prevails over any conflicting or additional terms of any quote, order, acknowledgment, or other communication
+between the parties relating to its subject matter during the term of this Agreement. No modification
+to this Agreement will be binding, unless in writing and signed by an authorized representative
+of each party.
+Rev. April, 2006
+Sun/Final/Full
\ No newline at end of file

Copied: trunk/HibernateExt/jpa-api/src (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src)

Copied: trunk/HibernateExt/jpa-api/src/javax (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax)

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence)

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/AssociationOverride.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/AssociationOverride.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/AssociationOverride.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,34 +0,0 @@
-//$Id:$
-//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
-package javax.persistence;
-
-import java.lang.annotation.Target;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import static java.lang.annotation.ElementType.TYPE;
-import static java.lang.annotation.ElementType.METHOD;
-import static java.lang.annotation.ElementType.FIELD;
-
-/**
- * This annotation is used to override a many-to-one or one-to-one mapping of property or field for
- * an entity relationship.
- * The AssociationOverride annotation may be applied to an entity that extends a mapped superclass
- * to override a many-to-one or one-to-one mapping defined by the mapped superclass. If the
- * AssociationOverride annotation is not specified, the join column is mapped the same as in
- * the original mapping.
- *
- * @author Emmanuel Bernard
- */
- at Target({TYPE, METHOD, FIELD}) @Retention(RUNTIME)
-public @interface AssociationOverride {
-	/**
-	 * The name of the relationship property whose mapping is being overridden if property-based
-	 * access is being used, or the name of the relationship field if field-based access is used.
-	 */
-	String name();
-
-	/**
-	 * The join column that is being mapped to the persistent attribute.
-	 */
-	JoinColumn[] joinColumns();
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/AssociationOverride.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/AssociationOverride.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/AssociationOverride.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/AssociationOverride.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,34 @@
+//$Id:$
+//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
+package javax.persistence;
+
+import java.lang.annotation.Target;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.FIELD;
+
+/**
+ * This annotation is used to override a many-to-one or one-to-one mapping of property or field for
+ * an entity relationship.
+ * The AssociationOverride annotation may be applied to an entity that extends a mapped superclass
+ * to override a many-to-one or one-to-one mapping defined by the mapped superclass. If the
+ * AssociationOverride annotation is not specified, the join column is mapped the same as in
+ * the original mapping.
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({TYPE, METHOD, FIELD}) @Retention(RUNTIME)
+public @interface AssociationOverride {
+	/**
+	 * The name of the relationship property whose mapping is being overridden if property-based
+	 * access is being used, or the name of the relationship field if field-based access is used.
+	 */
+	String name();
+
+	/**
+	 * The join column that is being mapped to the persistent attribute.
+	 */
+	JoinColumn[] joinColumns();
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/AssociationOverrides.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/AssociationOverrides.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/AssociationOverrides.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,24 +0,0 @@
-//$Id:$
-//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
-package javax.persistence;
-
-import java.lang.annotation.Target;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import static java.lang.annotation.ElementType.TYPE;
-import static java.lang.annotation.ElementType.METHOD;
-import static java.lang.annotation.ElementType.FIELD;
-
-/**
- * This annotation is used to override mappings of multiple many-to-one
- * or one-to-one relationship properties or fields.
- *
- * @author Emmanuel Bernard
- */
- at Target({TYPE, METHOD, FIELD}) @Retention(RUNTIME)
-public @interface AssociationOverrides {
-	/**
-	 * Mapping overrides of relationship properties or fields
-	 */
-	AssociationOverride[] value();
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/AssociationOverrides.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/AssociationOverrides.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/AssociationOverrides.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/AssociationOverrides.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,24 @@
+//$Id:$
+//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
+package javax.persistence;
+
+import java.lang.annotation.Target;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.FIELD;
+
+/**
+ * This annotation is used to override mappings of multiple many-to-one
+ * or one-to-one relationship properties or fields.
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({TYPE, METHOD, FIELD}) @Retention(RUNTIME)
+public @interface AssociationOverrides {
+	/**
+	 * Mapping overrides of relationship properties or fields
+	 */
+	AssociationOverride[] value();
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/AttributeOverride.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/AttributeOverride.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/AttributeOverride.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,34 +0,0 @@
-//$Id$
-//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
-package javax.persistence;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-
-import static java.lang.annotation.RetentionPolicy.*;
-import static java.lang.annotation.ElementType.*;
-
-
-/**
- * The AttributeOverride annotation is used to override the mapping of a Basic (whether explicit
- * or default) property or field or Id property or field.
- *
- * The AttributeOverride annotation may be applied to an entity that extends a mapped superclass
- * or to an embedded field or property to override a basic mapping defined by the mapped superclass
- * or embeddable class. If the AttributeOverride annotation is not specified, the column is mapped
- * the same as in the original mapping.
- *
- * @author Emmanuel Bernard
- */
- at Target({TYPE, METHOD, FIELD}) @Retention(RUNTIME)
-public @interface AttributeOverride {
-	/**
-	 * The name of the property whose mapping is being overridden if property-based access is being
-	 * used, or the name of the field if field-based access is used.
-	 */
-	String name();
-	/**
-	 * The column that is being mapped to the persistent attribute
-	 */
-	Column column();
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/AttributeOverride.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/AttributeOverride.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/AttributeOverride.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/AttributeOverride.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,34 @@
+//$Id$
+//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
+package javax.persistence;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.RetentionPolicy.*;
+import static java.lang.annotation.ElementType.*;
+
+
+/**
+ * The AttributeOverride annotation is used to override the mapping of a Basic (whether explicit
+ * or default) property or field or Id property or field.
+ *
+ * The AttributeOverride annotation may be applied to an entity that extends a mapped superclass
+ * or to an embedded field or property to override a basic mapping defined by the mapped superclass
+ * or embeddable class. If the AttributeOverride annotation is not specified, the column is mapped
+ * the same as in the original mapping.
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({TYPE, METHOD, FIELD}) @Retention(RUNTIME)
+public @interface AttributeOverride {
+	/**
+	 * The name of the property whose mapping is being overridden if property-based access is being
+	 * used, or the name of the field if field-based access is used.
+	 */
+	String name();
+	/**
+	 * The column that is being mapped to the persistent attribute
+	 */
+	Column column();
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/AttributeOverrides.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/AttributeOverrides.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/AttributeOverrides.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,23 +0,0 @@
-//$Id$
-//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
-package javax.persistence;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-
-import static java.lang.annotation.RetentionPolicy.*;
-import static java.lang.annotation.ElementType.*;
-
-
-/**
- * Is used to override mappings of multiple properties or fields
- *
- * @author Emmanuel Bernard
- */
- at Target({TYPE, METHOD, FIELD}) @Retention(RUNTIME)
-public @interface AttributeOverrides {
-	/**
-	 * One or more mapping override
-	 */
-	AttributeOverride[] value();
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/AttributeOverrides.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/AttributeOverrides.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/AttributeOverrides.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/AttributeOverrides.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,23 @@
+//$Id$
+//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
+package javax.persistence;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.RetentionPolicy.*;
+import static java.lang.annotation.ElementType.*;
+
+
+/**
+ * Is used to override mappings of multiple properties or fields
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({TYPE, METHOD, FIELD}) @Retention(RUNTIME)
+public @interface AttributeOverrides {
+	/**
+	 * One or more mapping override
+	 */
+	AttributeOverride[] value();
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/Basic.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/Basic.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/Basic.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,39 +0,0 @@
-//$Id$
-//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
-package javax.persistence;
-
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.ElementType.METHOD;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-import static javax.persistence.FetchType.EAGER;
-
-/**
- * The Basic annotation is the simplest type of mapping to a database column. The Basic
- * annotation can be applied to a persistent property or instance variable of any of the
- * following types: Java primitive types, wrappers of the primitive types, String,
- * java.math.BigInteger, java.math.BigDecimal, java.util.Date, java.util.Calendar,
- * java.sql.Date, java.sql.Time, java.sql.Timestamp, byte[], Byte[], char[], Character[],
- * enums, and any other type that implements Serializable.
- *
- * The use of the Basic annotation is optional for persistent fields and properties of these types.
-
- * @author Emmanuel Bernard
- */
- at Target({METHOD, FIELD}) @Retention(RUNTIME)
-public @interface Basic {
-	/**
-	 * Defines whether the value of the field or property should be lazily loaded or must be
-	 * eagerly fetched. The EAGER strategy is a requirement on the persistence provider runtime
-	 * that the value must be eagerly fetched. The LAZY strategy is a hint to the persistence
-	 * provider runtime. If not specified, defaults to EAGER.
-	 */
-	FetchType fetch() default EAGER;
-	/**
-	 * Defines whether the value of the field or property may be null. This is a hint and is
-	 * disregarded for primitive types; it may be used in schema generation. If not specified,
-	 * defaults to true.
-	 */
-	boolean optional() default true;
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/Basic.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/Basic.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/Basic.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/Basic.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,39 @@
+//$Id$
+//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
+package javax.persistence;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+import static javax.persistence.FetchType.EAGER;
+
+/**
+ * The Basic annotation is the simplest type of mapping to a database column. The Basic
+ * annotation can be applied to a persistent property or instance variable of any of the
+ * following types: Java primitive types, wrappers of the primitive types, String,
+ * java.math.BigInteger, java.math.BigDecimal, java.util.Date, java.util.Calendar,
+ * java.sql.Date, java.sql.Time, java.sql.Timestamp, byte[], Byte[], char[], Character[],
+ * enums, and any other type that implements Serializable.
+ *
+ * The use of the Basic annotation is optional for persistent fields and properties of these types.
+
+ * @author Emmanuel Bernard
+ */
+ at Target({METHOD, FIELD}) @Retention(RUNTIME)
+public @interface Basic {
+	/**
+	 * Defines whether the value of the field or property should be lazily loaded or must be
+	 * eagerly fetched. The EAGER strategy is a requirement on the persistence provider runtime
+	 * that the value must be eagerly fetched. The LAZY strategy is a hint to the persistence
+	 * provider runtime. If not specified, defaults to EAGER.
+	 */
+	FetchType fetch() default EAGER;
+	/**
+	 * Defines whether the value of the field or property may be null. This is a hint and is
+	 * disregarded for primitive types; it may be used in schema generation. If not specified,
+	 * defaults to true.
+	 */
+	boolean optional() default true;
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/CascadeType.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/CascadeType.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/CascadeType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,32 +0,0 @@
-//$Id$
-//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
-package javax.persistence;
-
-/**
- * Defines the set of cascadable operations that are propagated to the associated entity.
- * The value cascade=ALL is equivalent to cascade={PERSIST, MERGE, REMOVE, REFRESH}.
- *
- * @author Emmanuel Bernard
- */
-public enum CascadeType {
-	/**
-	 * Cascade all operations
-	 */
-	ALL,
-	/**
-	 * Cascade persist operations
-	 */
-	PERSIST,
-	/**
-	 * Cascade merge operations
-	 */
-	MERGE,
-	/**
-	 * Cascade remove operations
-	 */
-	REMOVE,
-	/**
-	 * Cascade refresh operations
-	 */
-	REFRESH 
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/CascadeType.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/CascadeType.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/CascadeType.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/CascadeType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,32 @@
+//$Id$
+//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
+package javax.persistence;
+
+/**
+ * Defines the set of cascadable operations that are propagated to the associated entity.
+ * The value cascade=ALL is equivalent to cascade={PERSIST, MERGE, REMOVE, REFRESH}.
+ *
+ * @author Emmanuel Bernard
+ */
+public enum CascadeType {
+	/**
+	 * Cascade all operations
+	 */
+	ALL,
+	/**
+	 * Cascade persist operations
+	 */
+	PERSIST,
+	/**
+	 * Cascade merge operations
+	 */
+	MERGE,
+	/**
+	 * Cascade remove operations
+	 */
+	REMOVE,
+	/**
+	 * Cascade refresh operations
+	 */
+	REFRESH 
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/Column.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/Column.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/Column.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,65 +0,0 @@
-//$Id$
-//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
-package javax.persistence;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-
-import static java.lang.annotation.ElementType.*;
-import static java.lang.annotation.RetentionPolicy.*;
-
-/**
- * Is used to specify a mapped column for a persistent property or field. If no Column annotation is
- * specified, the default values are applied.
- *
- * @author Emmanuel Bernard
- */
- at Target({METHOD, FIELD}) @Retention(RUNTIME)
-public @interface Column {
-	/**
-	 * The name of the column. Defaults to the property or field name
-	 */
-	String name() default "";
-	/**
-	 * Whether the property is a unique key. This is a shortcut for the UniqueConstraint
-	 * annotation at the table level and is useful for when the unique key constraint is
-	 * only a single field. This constraint applies in addition to any constraint entailed
-	 * by primary key mapping and to constraints specified at the table level.
-	 */
-	boolean unique() default false;
-	/**
-	 * Whether the database column is nullable
-	 */
-	boolean nullable() default true;
-	/**
-	 * Whether the column is included in SQL INSERT statements generated by the persistence provider.
-	 */
-	boolean insertable() default true;
-	/**
-	 * Whether the column is included in SQL UPDATE statements generated by the persistence provider.
-	 */
-	boolean updatable() default true;
-	/**
-	 * The SQL fragment that is used when generating the DDL for the column.
-	 * Defaults to the generated SQL to create a column of the inferred type.
-	 */
-	String columnDefinition() default "";
-	/**
-	 * The name of the table that contains the column. If absent the column is assumed to
-	 * be in the primary table.
-	 */
-	String table() default "";
-	/**
-	 * The column length. (Applies only if a string-valued column is used.)
-	 */
-	int length() default 255;
-	/**
-	 * The precision for a decimal (exact numeric) column. (Applies only if a decimal column is used.)
-	 * Value must be set by developer if used when generating the DDL for the column.
-	 */
-	int precision() default 0;
-	/**
-	 * The scale for a decimal (exact numeric) column. (Applies only if a decimal column is used.)
-	 */
-	int scale() default 0;
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/Column.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/Column.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/Column.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/Column.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,65 @@
+//$Id$
+//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
+package javax.persistence;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+/**
+ * Is used to specify a mapped column for a persistent property or field. If no Column annotation is
+ * specified, the default values are applied.
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({METHOD, FIELD}) @Retention(RUNTIME)
+public @interface Column {
+	/**
+	 * The name of the column. Defaults to the property or field name
+	 */
+	String name() default "";
+	/**
+	 * Whether the property is a unique key. This is a shortcut for the UniqueConstraint
+	 * annotation at the table level and is useful for when the unique key constraint is
+	 * only a single field. This constraint applies in addition to any constraint entailed
+	 * by primary key mapping and to constraints specified at the table level.
+	 */
+	boolean unique() default false;
+	/**
+	 * Whether the database column is nullable
+	 */
+	boolean nullable() default true;
+	/**
+	 * Whether the column is included in SQL INSERT statements generated by the persistence provider.
+	 */
+	boolean insertable() default true;
+	/**
+	 * Whether the column is included in SQL UPDATE statements generated by the persistence provider.
+	 */
+	boolean updatable() default true;
+	/**
+	 * The SQL fragment that is used when generating the DDL for the column.
+	 * Defaults to the generated SQL to create a column of the inferred type.
+	 */
+	String columnDefinition() default "";
+	/**
+	 * The name of the table that contains the column. If absent the column is assumed to
+	 * be in the primary table.
+	 */
+	String table() default "";
+	/**
+	 * The column length. (Applies only if a string-valued column is used.)
+	 */
+	int length() default 255;
+	/**
+	 * The precision for a decimal (exact numeric) column. (Applies only if a decimal column is used.)
+	 * Value must be set by developer if used when generating the DDL for the column.
+	 */
+	int precision() default 0;
+	/**
+	 * The scale for a decimal (exact numeric) column. (Applies only if a decimal column is used.)
+	 */
+	int scale() default 0;
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/ColumnResult.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/ColumnResult.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/ColumnResult.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,22 +0,0 @@
-//$Id$
-//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
-package javax.persistence;
-
-import java.lang.annotation.Target;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * References name of a column in the SELECT clause of a SQL query - i.e.,
- * column alias, if applicable. Scalar result types can be included in the query
- * result by specifying this annotation in the metadata.
- *
- * @author Emmanuel Bernard
- */
- at Target({}) @Retention(RetentionPolicy.RUNTIME)
-public @interface ColumnResult {
-	/**
-	 * The name of a column in the SELECT clause of a SQL query
-	 */
-	String name();
-}
\ No newline at end of file

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/ColumnResult.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/ColumnResult.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/ColumnResult.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/ColumnResult.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,22 @@
+//$Id$
+//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
+package javax.persistence;
+
+import java.lang.annotation.Target;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * References name of a column in the SELECT clause of a SQL query - i.e.,
+ * column alias, if applicable. Scalar result types can be included in the query
+ * result by specifying this annotation in the metadata.
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({}) @Retention(RetentionPolicy.RUNTIME)
+public @interface ColumnResult {
+	/**
+	 * The name of a column in the SELECT clause of a SQL query
+	 */
+	String name();
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/DiscriminatorColumn.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/DiscriminatorColumn.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/DiscriminatorColumn.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,47 +0,0 @@
-//$Id$
-//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
-package javax.persistence;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-
-import static java.lang.annotation.ElementType.*;
-import static java.lang.annotation.RetentionPolicy.*;
-import static javax.persistence.DiscriminatorType.STRING;
-
-/**
- * Is used to define the discriminator column for the SINGLE_TABLE and JOINED inheritance
- * mapping strategies.
- *
- * The strategy and the discriminator column are only specified in the root of an entity
- * class hierarchy or subhierarchy in which a different inheritance strategy is applied
- *
- * If the DiscriminatorColumn annotation is missing, and a discriminator column is required,
- * the name of the discriminator column defaults to "DTYPE" and the discriminator type to
- * DiscriminatorType.STRING.
- *
- * @author Emmanuel Bernard
- */
- at Target({TYPE}) @Retention(RUNTIME)
-public @interface DiscriminatorColumn {
-	/**
-	 * The name of column to be used for the discriminator.
-	 */
-	String name() default "DTYPE";
-	/**
-	 * The type of object/column to use as a class discriminator.
-	 * Defaults to DiscriminatorType.STRING
-	 */
-	DiscriminatorType discriminatorType() default STRING;
-	/**
-	 * The SQL fragment that is used when generating the DDL for the discriminator column.
-	 * Defaults to the provider-generated SQL to create a column of the specified
-	 * discriminator type.
-	 */
-	String columnDefinition() default "";
-	/**
-	 * The column length for String-based discriminator types. Ignored for other
-	 * discriminator types.
-	 */
-	int length() default 31;
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/DiscriminatorColumn.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/DiscriminatorColumn.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/DiscriminatorColumn.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/DiscriminatorColumn.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,47 @@
+//$Id$
+//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
+package javax.persistence;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+import static javax.persistence.DiscriminatorType.STRING;
+
+/**
+ * Is used to define the discriminator column for the SINGLE_TABLE and JOINED inheritance
+ * mapping strategies.
+ *
+ * The strategy and the discriminator column are only specified in the root of an entity
+ * class hierarchy or subhierarchy in which a different inheritance strategy is applied
+ *
+ * If the DiscriminatorColumn annotation is missing, and a discriminator column is required,
+ * the name of the discriminator column defaults to "DTYPE" and the discriminator type to
+ * DiscriminatorType.STRING.
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({TYPE}) @Retention(RUNTIME)
+public @interface DiscriminatorColumn {
+	/**
+	 * The name of column to be used for the discriminator.
+	 */
+	String name() default "DTYPE";
+	/**
+	 * The type of object/column to use as a class discriminator.
+	 * Defaults to DiscriminatorType.STRING
+	 */
+	DiscriminatorType discriminatorType() default STRING;
+	/**
+	 * The SQL fragment that is used when generating the DDL for the discriminator column.
+	 * Defaults to the provider-generated SQL to create a column of the specified
+	 * discriminator type.
+	 */
+	String columnDefinition() default "";
+	/**
+	 * The column length for String-based discriminator types. Ignored for other
+	 * discriminator types.
+	 */
+	int length() default 31;
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/DiscriminatorType.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/DiscriminatorType.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/DiscriminatorType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,23 +0,0 @@
-//$Id$
-//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
-package javax.persistence;
-
-/**
- * Defines supported types of the discriminator column
- *
- * @author Emmanuel Bernard
- */
-public enum DiscriminatorType {
-	/**
-	 * String as the discriminator type
-	 */
-	STRING,
-	/**
-	 * Single character as the discriminator type
-	 */
-	CHAR,
-	/**
-	 * Integer as the discriminator type
-	 */
-	INTEGER
-};

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/DiscriminatorType.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/DiscriminatorType.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/DiscriminatorType.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/DiscriminatorType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,23 @@
+//$Id$
+//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
+package javax.persistence;
+
+/**
+ * Defines supported types of the discriminator column
+ *
+ * @author Emmanuel Bernard
+ */
+public enum DiscriminatorType {
+	/**
+	 * String as the discriminator type
+	 */
+	STRING,
+	/**
+	 * Single character as the discriminator type
+	 */
+	CHAR,
+	/**
+	 * Integer as the discriminator type
+	 */
+	INTEGER
+};

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/DiscriminatorValue.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/DiscriminatorValue.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/DiscriminatorValue.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,33 +0,0 @@
-//$Id$
-package javax.persistence;
-
-import java.lang.annotation.Target;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import static java.lang.annotation.ElementType.TYPE;
-
-/**
- * Is used to specify the value of the discriminator column for entities of the given type.
- * The DiscriminatorValue annotation can only be specified on a concrete entity class.
- * If the DiscriminatorValue annotation is not specified and a discriminator column is used,
- * a provider-specific function will be used to generate a value representing the entity type.
- * If the DiscriminatorType is STRING, the discriminator value default is the entity name.
- *
- * The inheritance strategy and the discriminator column are only specified in the root
- * of an entity class hierarchy or subhierarchy in which a different inheritance strategy
- * is applied. The discriminator value, if not defaulted, should be specified for each entity
- * class in the hierarchy.
- *
- * @author Emmanuel Bernard
- */
- at Target({TYPE}) @Retention(RUNTIME)
-public @interface DiscriminatorValue {
-	/**
-	 * The value that indicates that the row is an entity of the annotated entity type.
-	 * 
-	 * If the DiscriminatorValue annotation is not specified and a discriminator column is used,
-	 * a provider-specific function will be used to generate a value representing the entity type.
-	 * If the DiscriminatorType is STRING, the discriminator value default is the entity name.
-	 */
-	String value();
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/DiscriminatorValue.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/DiscriminatorValue.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/DiscriminatorValue.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/DiscriminatorValue.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,33 @@
+//$Id$
+package javax.persistence;
+
+import java.lang.annotation.Target;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import static java.lang.annotation.ElementType.TYPE;
+
+/**
+ * Is used to specify the value of the discriminator column for entities of the given type.
+ * The DiscriminatorValue annotation can only be specified on a concrete entity class.
+ * If the DiscriminatorValue annotation is not specified and a discriminator column is used,
+ * a provider-specific function will be used to generate a value representing the entity type.
+ * If the DiscriminatorType is STRING, the discriminator value default is the entity name.
+ *
+ * The inheritance strategy and the discriminator column are only specified in the root
+ * of an entity class hierarchy or subhierarchy in which a different inheritance strategy
+ * is applied. The discriminator value, if not defaulted, should be specified for each entity
+ * class in the hierarchy.
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({TYPE}) @Retention(RUNTIME)
+public @interface DiscriminatorValue {
+	/**
+	 * The value that indicates that the row is an entity of the annotated entity type.
+	 * 
+	 * If the DiscriminatorValue annotation is not specified and a discriminator column is used,
+	 * a provider-specific function will be used to generate a value representing the entity type.
+	 * If the DiscriminatorType is STRING, the discriminator value default is the entity name.
+	 */
+	String value();
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/Embeddable.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/Embeddable.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/Embeddable.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,22 +0,0 @@
-//$Id$
-//EJB Specification Copyright 2004 Sun Microsystems, Inc.
-package javax.persistence;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-
-import static java.lang.annotation.ElementType.*;
-import static java.lang.annotation.RetentionPolicy.*;
-
-
-/**
- * Defines a class whose instances are stored as an intrinsic part of an owning entity and share
- * the identity of the entity. Each of the persistent properties or fields of the embedded object
- * is mapped to the database table for the entity. Only Basic, Column, Lob, Temporal, and
- * Enumerated mapping annotations may portably be used to map the persistent fields or properties
- * of classes annotated as Embeddable.
- *
- * @author Emmanuel Bernard
- */
- at Target({TYPE}) @Retention(RUNTIME)
-public @interface Embeddable {}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/Embeddable.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/Embeddable.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/Embeddable.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/Embeddable.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,22 @@
+//$Id$
+//EJB Specification Copyright 2004 Sun Microsystems, Inc.
+package javax.persistence;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+
+/**
+ * Defines a class whose instances are stored as an intrinsic part of an owning entity and share
+ * the identity of the entity. Each of the persistent properties or fields of the embedded object
+ * is mapped to the database table for the entity. Only Basic, Column, Lob, Temporal, and
+ * Enumerated mapping annotations may portably be used to map the persistent fields or properties
+ * of classes annotated as Embeddable.
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({TYPE}) @Retention(RUNTIME)
+public @interface Embeddable {}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/Embedded.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/Embedded.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/Embedded.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,18 +0,0 @@
-//$Id$
-//EJB Specification Copyright 2004 Sun Microsystems, Inc.
-package javax.persistence;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-
-import static java.lang.annotation.ElementType.*;
-import static java.lang.annotation.RetentionPolicy.*;
-
-/**
- * Defines a persistent field or property of an entity whose value is an instance of
- * an embeddable class. The embeddable class must be annotated as Embeddable.
- *
- * @author Emmanuel Bernard
- */
- at Target({METHOD, FIELD}) @Retention(RUNTIME)
-public @interface Embedded {}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/Embedded.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/Embedded.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/Embedded.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/Embedded.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,18 @@
+//$Id$
+//EJB Specification Copyright 2004 Sun Microsystems, Inc.
+package javax.persistence;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+/**
+ * Defines a persistent field or property of an entity whose value is an instance of
+ * an embeddable class. The embeddable class must be annotated as Embeddable.
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({METHOD, FIELD}) @Retention(RUNTIME)
+public @interface Embedded {}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/EmbeddedId.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/EmbeddedId.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/EmbeddedId.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,19 +0,0 @@
-//$Id$
-//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
-package javax.persistence;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Is applied to a persistent field or property of an entity class or mapped superclass to denote
- * a composite primary key that is an embeddable class. The embeddable class must be annotated
- * as Embeddable.
- * 
- * @author Emmanuel Bernard
- */
- at Target({ElementType.METHOD, ElementType.FIELD})
- at Retention(RetentionPolicy.RUNTIME)
-public @interface EmbeddedId {}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/EmbeddedId.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/EmbeddedId.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/EmbeddedId.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/EmbeddedId.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,19 @@
+//$Id$
+//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
+package javax.persistence;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Is applied to a persistent field or property of an entity class or mapped superclass to denote
+ * a composite primary key that is an embeddable class. The embeddable class must be annotated
+ * as Embeddable.
+ * 
+ * @author Emmanuel Bernard
+ */
+ at Target({ElementType.METHOD, ElementType.FIELD})
+ at Retention(RetentionPolicy.RUNTIME)
+public @interface EmbeddedId {}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/Entity.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/Entity.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/Entity.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,23 +0,0 @@
-//$Id$
-//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
-package javax.persistence;
-
-import static java.lang.annotation.ElementType.TYPE;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * Specifies that the class is an entity. This annotation is applied to the entity class.
- *
- * @author Emmanuel Bernard
- */
- at Target(TYPE) @Retention(RUNTIME)
-public @interface Entity {
-	/**
-	 * The name of an entity. Defaults to the unqualified name of the entity class.
-	 * This name is used to refer to the entity in queries. The name must not be a
-	 * reserved literal in the Java Persistence query language.
-	 */
-	String name() default "";
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/Entity.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/Entity.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/Entity.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/Entity.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,23 @@
+//$Id$
+//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
+package javax.persistence;
+
+import static java.lang.annotation.ElementType.TYPE;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * Specifies that the class is an entity. This annotation is applied to the entity class.
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target(TYPE) @Retention(RUNTIME)
+public @interface Entity {
+	/**
+	 * The name of an entity. Defaults to the unqualified name of the entity class.
+	 * This name is used to refer to the entity in queries. The name must not be a
+	 * reserved literal in the Java Persistence query language.
+	 */
+	String name() default "";
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/EntityExistsException.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/EntityExistsException.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/EntityExistsException.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,45 +0,0 @@
-//$Id: $
-package javax.persistence;
-
-/**
- * Thrown by the persistence provider when EntityManager.persist(Object) is called and the
- * entity already exists. The current transaction, if one is active, will be marked for rollback.
- *
- * @author Emmanuel Bernard
- */
-public class EntityExistsException extends PersistenceException {
-	/**
-	 * Constructs a new EntityExistsException exception with null as its detail message.
-	 */
-	public EntityExistsException() {
-		super();
-	}
-
-	/**
-	 * Constructs a new EntityExistsException exception with the specified cause.
-	 *
-	 * @param cause the cause
-	 */
-	public EntityExistsException(Throwable cause) {
-		super( cause );
-	}
-
-	/**
-	 * Constructs a new EntityExistsException exception with the specified detail message.
-	 *
-	 * @param message the detail message.
-	 */
-	public EntityExistsException(String message) {
-		super( message );
-	}
-
-	/**
-	 * Constructs a new EntityExistsException exception with the specified detail message and cause.
-	 *
-	 * @param message the detail message.
-	 * @param cause the cause.
-	 */
-	public EntityExistsException(String message, Throwable cause) {
-		super( message, cause );
-	}
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/EntityExistsException.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/EntityExistsException.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/EntityExistsException.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/EntityExistsException.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,45 @@
+//$Id: $
+package javax.persistence;
+
+/**
+ * Thrown by the persistence provider when EntityManager.persist(Object) is called and the
+ * entity already exists. The current transaction, if one is active, will be marked for rollback.
+ *
+ * @author Emmanuel Bernard
+ */
+public class EntityExistsException extends PersistenceException {
+	/**
+	 * Constructs a new EntityExistsException exception with null as its detail message.
+	 */
+	public EntityExistsException() {
+		super();
+	}
+
+	/**
+	 * Constructs a new EntityExistsException exception with the specified cause.
+	 *
+	 * @param cause the cause
+	 */
+	public EntityExistsException(Throwable cause) {
+		super( cause );
+	}
+
+	/**
+	 * Constructs a new EntityExistsException exception with the specified detail message.
+	 *
+	 * @param message the detail message.
+	 */
+	public EntityExistsException(String message) {
+		super( message );
+	}
+
+	/**
+	 * Constructs a new EntityExistsException exception with the specified detail message and cause.
+	 *
+	 * @param message the detail message.
+	 * @param cause the cause.
+	 */
+	public EntityExistsException(String message, Throwable cause) {
+		super( message, cause );
+	}
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/EntityListeners.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/EntityListeners.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/EntityListeners.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,28 +0,0 @@
-/*
- * JBoss, the OpenSource J2EE webOS
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package javax.persistence;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-
-/**
- * Specifies the callback listener classes to be used for an entity or mapped superclass.
- * This annotation may be applied to an entity class or mapped superclass.
- *
- * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
- */
- at Target({ElementType.TYPE})
- at Retention(RetentionPolicy.RUNTIME)
-public @interface EntityListeners {
-	/**
-	 * The callback listener classes
-	 */
-   Class[] value();
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/EntityListeners.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/EntityListeners.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/EntityListeners.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/EntityListeners.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,28 @@
+/*
+ * JBoss, the OpenSource J2EE webOS
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package javax.persistence;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+
+/**
+ * Specifies the callback listener classes to be used for an entity or mapped superclass.
+ * This annotation may be applied to an entity class or mapped superclass.
+ *
+ * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
+ */
+ at Target({ElementType.TYPE})
+ at Retention(RetentionPolicy.RUNTIME)
+public @interface EntityListeners {
+	/**
+	 * The callback listener classes
+	 */
+   Class[] value();
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/EntityManager.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/EntityManager.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/EntityManager.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,298 +0,0 @@
-// $Id$
-package javax.persistence;
-
-/**
- * Interface used to interact with the persistence context.
- *
- * An EntityManager instance is associated with a persistence context. A persistence context is a set of
- * entity instances in which for any persistent entity identity there is a unique entity instance.
- * Within the persistence context, the entity instances and their lifecycle are managed. This interface
- * defines the methods that are used to interact with the persistence context. The EntityManager API is
- * used to create and remove persistent entity instances, to find entities by their primary key, and to
- * query over entities.
- *
- * The set of entities that can be managed by a given EntityManager instance is defined by a persistence unit.
- * A persistence unit defines the set of all classes that are related or grouped by the application, and
- * which must be colocated in their mapping to a single database.
- *
- * @author Emmanuel Bernard
- */
-public interface EntityManager {
-	/**
-	 * Make an entity instance managed and persistent.
-	 *
-	 * @param entity
-	 * @throws EntityExistsException		if the entity already exists.
-	 *                                      (The EntityExistsException may be thrown when the persist
-	 *                                      operation is invoked, or the EntityExistsException or
-	 *                                      another PersistenceException may be thrown at commit
-	 *                                      time.)
-	 * @throws IllegalStateException if this EntityManager has been closed.
-	 * @throws IllegalArgumentException	 if not an entity
-	 * @throws TransactionRequiredException if invoked on a
-	 *                                      container-managed entity manager of type
-	 *                                      PersistenceContextType.TRANSACTION and there is
-	 *                                      no transaction.
-	 */
-	public void persist(Object entity);
-
-	/**
-	 * Merge the state of the given entity into the
-	 * current persistence context.
-	 *
-	 * @param entity
-	 * @return the instance that the state was merged to
-	 * @throws IllegalStateException if this EntityManager has been closed
-	 * @throws IllegalArgumentException	 if instance is not an
-	 *                                      entity or is a removed entity
-	 * @throws TransactionRequiredException if invoked on a
-	 *                                      container-managed entity manager of type
-	 *                                      PersistenceContextType.TRANSACTION and there is
-	 *                                      no transaction.
-	 */
-	public <T> T merge(T entity);
-
-	/**
-	 * Remove the entity instance.
-	 *
-	 * @param entity
-	 * @throws IllegalStateException if this EntityManager has been closed
-	 * @throws IllegalArgumentException	 if not an entity
-	 *                                      or if a detached entity
-	 * @throws TransactionRequiredException if invoked on a
-	 *                                      container-managed entity manager of type
-	 *                                      PersistenceContextType.TRANSACTION and there is
-	 *                                      no transaction.
-	 */
-	public void remove(Object entity);
-
-	/**
-	 * Find by primary key.
-	 *
-	 * @param entityClass
-	 * @param primaryKey
-	 * @return the found entity instance or null
-	 *         if the entity does not exist
-	 * @throws IllegalStateException if this EntityManager has been closed
-	 * @throws IllegalArgumentException if the first argument does
-	 *                                  not denote an entity type or the second
-	 *                                  argument is not a valid type for that
-	 *                                  entity’s primary key
-	 */
-	public <T> T find(Class<T> entityClass, Object primaryKey);
-
-	/**
-	 * Get an instance, whose state may be lazily fetched.
-	 * If the requested instance does not exist in the database,
-	 * the EntityNotFoundException is thrown when the instance
-	 * state is first accessed. (The persistence provider runtime is
-	 * permitted to throw the EntityNotFoundException when
-	 * getReference is called.)
-	 * The application should not expect that the instance state will
-	 * be available upon detachment, unless it was accessed by the
-	 * application while the entity manager was open.
-	 *
-	 * @param entityClass
-	 * @param primaryKey
-	 * @return the found entity instance
-	 * @throws IllegalStateException if this EntityManager has been closed
-	 * @throws IllegalArgumentException if the first argument does
-	 *                                  not denote an entity type or the second
-	 *                                  argument is not a valid type for that
-	 *                                  entity’s primary key
-	 * @throws EntityNotFoundException  if the entity state
-	 *                                  cannot be accessed
-	 */
-	public <T> T getReference(Class<T> entityClass, Object primaryKey);
-
-	/**
-	 * Synchronize the persistence context to the
-	 * underlying database.
-	 *
-	 * @throws IllegalStateException if this EntityManager has been closed
-	 * @throws TransactionRequiredException if there is
-	 *                                      no transaction
-	 * @throws PersistenceException		 if the flush fails
-	 */
-	public void flush();
-
-	/**
-	 * Set the flush mode that applies to all objects contained
-	 * in the persistence context.
-	 *
-	 * @param flushMode
-	 * @throws IllegalStateException if this EntityManager has been closed
-	 */
-	public void setFlushMode(FlushModeType flushMode);
-
-	/**
-	 * Get the flush mode that applies to all objects contained
-	 * in the persistence context.
-	 *
-	 * @return flushMode
-	 * @throws IllegalStateException if this EntityManager has been closed
-	 */
-	public FlushModeType getFlushMode();
-
-	/**
-	 * Set the lock mode for an entity object contained
-	 * in the persistence context.
-	 *
-	 * @param entity
-	 * @param lockMode
-	 * @throws IllegalStateException if this EntityManager has been closed
-	 * @throws PersistenceException		 if an unsupported lock call
-	 *                                      is made
-	 * @throws IllegalArgumentException	 if the instance is not
-	 *                                      an entity or is a detached entity
-	 * @throws TransactionRequiredException if there is no
-	 *                                      transaction
-	 */
-	public void lock(Object entity, LockModeType lockMode);
-
-	/**
-	 * Refresh the state of the instance from the database,
-	 * overwriting changes made to the entity, if any.
-	 *
-	 * @param entity
-	 * @throws IllegalStateException if this EntityManager has been closed
-	 * @throws IllegalArgumentException	 if not an entity
-	 *                                      or entity is not managed
-	 * @throws TransactionRequiredException if invoked on a
-	 *                                      container-managed entity manager of type
-	 *                                      PersistenceContextType.TRANSACTION and there is
-	 *                                      no transaction.
-	 * @throws EntityNotFoundException	  if the entity no longer
-	 *                                      exists in the database
-	 */
-	public void refresh(Object entity);
-
-	/**
-	 * Clear the persistence context, causing all managed
-	 * entities to become detached. Changes made to entities that
-	 * have not been flushed to the database will not be
-	 * persisted.
-	 *
-	 * @throws IllegalStateException if this EntityManager has been closed
-	 */
-	public void clear();
-
-	/**
-	 * Check if the instance belongs to the current persistence
-	 * context.
-	 *
-	 * @param entity
-	 * @return <code>true</code> if the instance belongs to the current persistence context.
-	 * @throws IllegalStateException if this EntityManager has been closed
-	 * @throws IllegalArgumentException if not an entity
-	 */
-	public boolean contains(Object entity);
-
-	/**
-	 * Create an instance of Query for executing an
-	 * EJB QL statement.
-	 *
-	 * @param ejbqlString an EJB QL query string
-	 * @return the new query instance
-	 * @throws IllegalStateException if this EntityManager has been closed
-	 * @throws IllegalArgumentException if query string is not valid
-	 */
-	public Query createQuery(String ejbqlString);
-
-	/**
-	 * Create an instance of Query for executing a
-	 * named query (in EJB QL or native SQL).
-	 *
-	 * @param name the name of a query defined in metadata
-	 * @return the new query instance
-	 * @throws IllegalStateException if this EntityManager has been closed
-	 * @throws IllegalArgumentException if a query has not been
-	 *                                  defined with the given name
-	 */
-	public Query createNamedQuery(String name);
-
-	/**
-	 * Create an instance of Query for executing
-	 * a native SQL statement, e.g., for update or delete.
-	 *
-	 * @param sqlString a native SQL query string
-	 * @return the new query instance
-	 * @throws IllegalStateException if this EntityManager has been closed
-	 */
-	public Query createNativeQuery(String sqlString);
-
-	/**
-	 * Create an instance of Query for executing
-	 * a native SQL query.
-	 *
-	 * @param sqlString   a native SQL query string
-	 * @param resultClass the class of the resulting instance(s)
-	 * @return the new query instance
-	 * @throws IllegalStateException if this EntityManager has been closed
-	 */
-	public Query createNativeQuery(String sqlString, Class resultClass);
-
-	/**
-	 * Create an instance of Query for executing
-	 * a native SQL query.
-	 *
-	 * @param sqlString		a native SQL query string
-	 * @param resultSetMapping the name of the result set mapping
-	 * @return the new query instance
-	 * @throws IllegalStateException if this EntityManager has been closed
-	 */
-	public Query createNativeQuery(String sqlString, String resultSetMapping);
-
-	/**
-	 * Indicate to the EntityManager that a JTA transaction is
-	 * active. This method should be called on a JTA application
-	 * managed EntityManager that was created outside the scope
-	 * of the active transaction to associate it with the current
-	 * JTA transaction.
-	 *
-	 * @throws IllegalStateException if this EntityManager has been closed
-	 * @throws TransactionRequiredException if there is
-	 *                                      no transaction.
-	 */
-	public void joinTransaction();
-
-   /**
-    * Return the underlying provider object for the EntityManager, if available.
-    * The result of this method is implementation specific
-    *
-    * @throws IllegalStateException if this EntityManager has been closed
-    */
-   public Object getDelegate();
-
-   /**
-	 * Close an application-managed EntityManager.
-	 * After the close method has been invoked, all methods
-	 * on the EntityManager instance and any Query objects obtained
-	 * from it will throw the IllegalStateException except
-	 * for getTransaction and isOpen (which will return false).
-	 * If this method is called when the EntityManager is
-	 * associated with an active transaction, the persistence
-	 * context remains managed until the transaction completes.
-	 *
-	 * @throws IllegalStateException if the EntityManager is container-managed or has been already closed
-	 */
-	public void close();
-
-	/**
-	 * Determine whether the EntityManager is open.
-	 *
-	 * @return true until the EntityManager has been closed.
-	 */
-	public boolean isOpen();
-
-	/**
-	 * Return the resource-level transaction object.
-	 * The EntityTransaction instance may be used serially to
-	 * begin and commit multiple transactions.
-	 *
-	 * @return EntityTransaction instance
-	 * @throws IllegalStateException if invoked on a JTA
-	 *                               EntityManager.
-	 */
-	public EntityTransaction getTransaction();
-}
\ No newline at end of file

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/EntityManager.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/EntityManager.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/EntityManager.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/EntityManager.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,298 @@
+// $Id$
+package javax.persistence;
+
+/**
+ * Interface used to interact with the persistence context.
+ *
+ * An EntityManager instance is associated with a persistence context. A persistence context is a set of
+ * entity instances in which for any persistent entity identity there is a unique entity instance.
+ * Within the persistence context, the entity instances and their lifecycle are managed. This interface
+ * defines the methods that are used to interact with the persistence context. The EntityManager API is
+ * used to create and remove persistent entity instances, to find entities by their primary key, and to
+ * query over entities.
+ *
+ * The set of entities that can be managed by a given EntityManager instance is defined by a persistence unit.
+ * A persistence unit defines the set of all classes that are related or grouped by the application, and
+ * which must be colocated in their mapping to a single database.
+ *
+ * @author Emmanuel Bernard
+ */
+public interface EntityManager {
+	/**
+	 * Make an entity instance managed and persistent.
+	 *
+	 * @param entity
+	 * @throws EntityExistsException		if the entity already exists.
+	 *                                      (The EntityExistsException may be thrown when the persist
+	 *                                      operation is invoked, or the EntityExistsException or
+	 *                                      another PersistenceException may be thrown at commit
+	 *                                      time.)
+	 * @throws IllegalStateException if this EntityManager has been closed.
+	 * @throws IllegalArgumentException	 if not an entity
+	 * @throws TransactionRequiredException if invoked on a
+	 *                                      container-managed entity manager of type
+	 *                                      PersistenceContextType.TRANSACTION and there is
+	 *                                      no transaction.
+	 */
+	public void persist(Object entity);
+
+	/**
+	 * Merge the state of the given entity into the
+	 * current persistence context.
+	 *
+	 * @param entity
+	 * @return the instance that the state was merged to
+	 * @throws IllegalStateException if this EntityManager has been closed
+	 * @throws IllegalArgumentException	 if instance is not an
+	 *                                      entity or is a removed entity
+	 * @throws TransactionRequiredException if invoked on a
+	 *                                      container-managed entity manager of type
+	 *                                      PersistenceContextType.TRANSACTION and there is
+	 *                                      no transaction.
+	 */
+	public <T> T merge(T entity);
+
+	/**
+	 * Remove the entity instance.
+	 *
+	 * @param entity
+	 * @throws IllegalStateException if this EntityManager has been closed
+	 * @throws IllegalArgumentException	 if not an entity
+	 *                                      or if a detached entity
+	 * @throws TransactionRequiredException if invoked on a
+	 *                                      container-managed entity manager of type
+	 *                                      PersistenceContextType.TRANSACTION and there is
+	 *                                      no transaction.
+	 */
+	public void remove(Object entity);
+
+	/**
+	 * Find by primary key.
+	 *
+	 * @param entityClass
+	 * @param primaryKey
+	 * @return the found entity instance or null
+	 *         if the entity does not exist
+	 * @throws IllegalStateException if this EntityManager has been closed
+	 * @throws IllegalArgumentException if the first argument does
+	 *                                  not denote an entity type or the second
+	 *                                  argument is not a valid type for that
+	 *                                  entity’s primary key
+	 */
+	public <T> T find(Class<T> entityClass, Object primaryKey);
+
+	/**
+	 * Get an instance, whose state may be lazily fetched.
+	 * If the requested instance does not exist in the database,
+	 * the EntityNotFoundException is thrown when the instance
+	 * state is first accessed. (The persistence provider runtime is
+	 * permitted to throw the EntityNotFoundException when
+	 * getReference is called.)
+	 * The application should not expect that the instance state will
+	 * be available upon detachment, unless it was accessed by the
+	 * application while the entity manager was open.
+	 *
+	 * @param entityClass
+	 * @param primaryKey
+	 * @return the found entity instance
+	 * @throws IllegalStateException if this EntityManager has been closed
+	 * @throws IllegalArgumentException if the first argument does
+	 *                                  not denote an entity type or the second
+	 *                                  argument is not a valid type for that
+	 *                                  entity’s primary key
+	 * @throws EntityNotFoundException  if the entity state
+	 *                                  cannot be accessed
+	 */
+	public <T> T getReference(Class<T> entityClass, Object primaryKey);
+
+	/**
+	 * Synchronize the persistence context to the
+	 * underlying database.
+	 *
+	 * @throws IllegalStateException if this EntityManager has been closed
+	 * @throws TransactionRequiredException if there is
+	 *                                      no transaction
+	 * @throws PersistenceException		 if the flush fails
+	 */
+	public void flush();
+
+	/**
+	 * Set the flush mode that applies to all objects contained
+	 * in the persistence context.
+	 *
+	 * @param flushMode
+	 * @throws IllegalStateException if this EntityManager has been closed
+	 */
+	public void setFlushMode(FlushModeType flushMode);
+
+	/**
+	 * Get the flush mode that applies to all objects contained
+	 * in the persistence context.
+	 *
+	 * @return flushMode
+	 * @throws IllegalStateException if this EntityManager has been closed
+	 */
+	public FlushModeType getFlushMode();
+
+	/**
+	 * Set the lock mode for an entity object contained
+	 * in the persistence context.
+	 *
+	 * @param entity
+	 * @param lockMode
+	 * @throws IllegalStateException if this EntityManager has been closed
+	 * @throws PersistenceException		 if an unsupported lock call
+	 *                                      is made
+	 * @throws IllegalArgumentException	 if the instance is not
+	 *                                      an entity or is a detached entity
+	 * @throws TransactionRequiredException if there is no
+	 *                                      transaction
+	 */
+	public void lock(Object entity, LockModeType lockMode);
+
+	/**
+	 * Refresh the state of the instance from the database,
+	 * overwriting changes made to the entity, if any.
+	 *
+	 * @param entity
+	 * @throws IllegalStateException if this EntityManager has been closed
+	 * @throws IllegalArgumentException	 if not an entity
+	 *                                      or entity is not managed
+	 * @throws TransactionRequiredException if invoked on a
+	 *                                      container-managed entity manager of type
+	 *                                      PersistenceContextType.TRANSACTION and there is
+	 *                                      no transaction.
+	 * @throws EntityNotFoundException	  if the entity no longer
+	 *                                      exists in the database
+	 */
+	public void refresh(Object entity);
+
+	/**
+	 * Clear the persistence context, causing all managed
+	 * entities to become detached. Changes made to entities that
+	 * have not been flushed to the database will not be
+	 * persisted.
+	 *
+	 * @throws IllegalStateException if this EntityManager has been closed
+	 */
+	public void clear();
+
+	/**
+	 * Check if the instance belongs to the current persistence
+	 * context.
+	 *
+	 * @param entity
+	 * @return <code>true</code> if the instance belongs to the current persistence context.
+	 * @throws IllegalStateException if this EntityManager has been closed
+	 * @throws IllegalArgumentException if not an entity
+	 */
+	public boolean contains(Object entity);
+
+	/**
+	 * Create an instance of Query for executing an
+	 * EJB QL statement.
+	 *
+	 * @param ejbqlString an EJB QL query string
+	 * @return the new query instance
+	 * @throws IllegalStateException if this EntityManager has been closed
+	 * @throws IllegalArgumentException if query string is not valid
+	 */
+	public Query createQuery(String ejbqlString);
+
+	/**
+	 * Create an instance of Query for executing a
+	 * named query (in EJB QL or native SQL).
+	 *
+	 * @param name the name of a query defined in metadata
+	 * @return the new query instance
+	 * @throws IllegalStateException if this EntityManager has been closed
+	 * @throws IllegalArgumentException if a query has not been
+	 *                                  defined with the given name
+	 */
+	public Query createNamedQuery(String name);
+
+	/**
+	 * Create an instance of Query for executing
+	 * a native SQL statement, e.g., for update or delete.
+	 *
+	 * @param sqlString a native SQL query string
+	 * @return the new query instance
+	 * @throws IllegalStateException if this EntityManager has been closed
+	 */
+	public Query createNativeQuery(String sqlString);
+
+	/**
+	 * Create an instance of Query for executing
+	 * a native SQL query.
+	 *
+	 * @param sqlString   a native SQL query string
+	 * @param resultClass the class of the resulting instance(s)
+	 * @return the new query instance
+	 * @throws IllegalStateException if this EntityManager has been closed
+	 */
+	public Query createNativeQuery(String sqlString, Class resultClass);
+
+	/**
+	 * Create an instance of Query for executing
+	 * a native SQL query.
+	 *
+	 * @param sqlString		a native SQL query string
+	 * @param resultSetMapping the name of the result set mapping
+	 * @return the new query instance
+	 * @throws IllegalStateException if this EntityManager has been closed
+	 */
+	public Query createNativeQuery(String sqlString, String resultSetMapping);
+
+	/**
+	 * Indicate to the EntityManager that a JTA transaction is
+	 * active. This method should be called on a JTA application
+	 * managed EntityManager that was created outside the scope
+	 * of the active transaction to associate it with the current
+	 * JTA transaction.
+	 *
+	 * @throws IllegalStateException if this EntityManager has been closed
+	 * @throws TransactionRequiredException if there is
+	 *                                      no transaction.
+	 */
+	public void joinTransaction();
+
+   /**
+    * Return the underlying provider object for the EntityManager, if available.
+    * The result of this method is implementation specific
+    *
+    * @throws IllegalStateException if this EntityManager has been closed
+    */
+   public Object getDelegate();
+
+   /**
+	 * Close an application-managed EntityManager.
+	 * After the close method has been invoked, all methods
+	 * on the EntityManager instance and any Query objects obtained
+	 * from it will throw the IllegalStateException except
+	 * for getTransaction and isOpen (which will return false).
+	 * If this method is called when the EntityManager is
+	 * associated with an active transaction, the persistence
+	 * context remains managed until the transaction completes.
+	 *
+	 * @throws IllegalStateException if the EntityManager is container-managed or has been already closed
+	 */
+	public void close();
+
+	/**
+	 * Determine whether the EntityManager is open.
+	 *
+	 * @return true until the EntityManager has been closed.
+	 */
+	public boolean isOpen();
+
+	/**
+	 * Return the resource-level transaction object.
+	 * The EntityTransaction instance may be used serially to
+	 * begin and commit multiple transactions.
+	 *
+	 * @return EntityTransaction instance
+	 * @throws IllegalStateException if invoked on a JTA
+	 *                               EntityManager.
+	 */
+	public EntityTransaction getTransaction();
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/EntityManagerFactory.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/EntityManagerFactory.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/EntityManagerFactory.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,49 +0,0 @@
-//$Id$
-package javax.persistence;
-
-import java.util.Map;
-
-/**
- * The EntityManagerFactory interface is used by the application to obtain an
- * application-managed entity manager. When the application has finished using
- * the entity manager factory, and/or at application shutdown, the application
- * should close the entity manager factory. Once an EntityManagerFactory has been
- * closed, all its entity managers are considered to be in the closed state.
- *
- * @author Emmanuel Bernard
- */
-public interface EntityManagerFactory {
-
-	/**
-	 * Create a new EntityManager.
-	 * This method returns a new EntityManager instance each time
-	 * it is invoked.
-	 * The isOpen method will return true on the returned instance.
-	 */
-	EntityManager createEntityManager();
-
-	/**
-	 * Create a new EntityManager with the specified Map of
-	 * properties.
-	 * This method returns a new EntityManager instance each time
-	 * it is invoked.
-	 * The isOpen method will return true on the returned instance.
-	 */
-	EntityManager createEntityManager(Map map);
-
-	/**
-	 * Close the factory, releasing any resources that it holds.
-	 * After a factory instance is closed, all methods invoked on
-	 * it will throw an IllegalStateException, except for isOpen,
-	 * which will return false. Once an EntityManagerFactory has
-	 * been closed, all its entity managers are considered to be
-	 * in the closed state.
-	 */
-	void close();
-
-	/**
-	 * Indicates whether or not this factory is open. Returns
-	 * true until a call to close has been made.
-	 */
-	public boolean isOpen();
-}
\ No newline at end of file

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/EntityManagerFactory.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/EntityManagerFactory.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/EntityManagerFactory.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/EntityManagerFactory.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,49 @@
+//$Id$
+package javax.persistence;
+
+import java.util.Map;
+
+/**
+ * The EntityManagerFactory interface is used by the application to obtain an
+ * application-managed entity manager. When the application has finished using
+ * the entity manager factory, and/or at application shutdown, the application
+ * should close the entity manager factory. Once an EntityManagerFactory has been
+ * closed, all its entity managers are considered to be in the closed state.
+ *
+ * @author Emmanuel Bernard
+ */
+public interface EntityManagerFactory {
+
+	/**
+	 * Create a new EntityManager.
+	 * This method returns a new EntityManager instance each time
+	 * it is invoked.
+	 * The isOpen method will return true on the returned instance.
+	 */
+	EntityManager createEntityManager();
+
+	/**
+	 * Create a new EntityManager with the specified Map of
+	 * properties.
+	 * This method returns a new EntityManager instance each time
+	 * it is invoked.
+	 * The isOpen method will return true on the returned instance.
+	 */
+	EntityManager createEntityManager(Map map);
+
+	/**
+	 * Close the factory, releasing any resources that it holds.
+	 * After a factory instance is closed, all methods invoked on
+	 * it will throw an IllegalStateException, except for isOpen,
+	 * which will return false. Once an EntityManagerFactory has
+	 * been closed, all its entity managers are considered to be
+	 * in the closed state.
+	 */
+	void close();
+
+	/**
+	 * Indicates whether or not this factory is open. Returns
+	 * true until a call to close has been made.
+	 */
+	public boolean isOpen();
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/EntityNotFoundException.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/EntityNotFoundException.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/EntityNotFoundException.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,29 +0,0 @@
-//$Id$
-package javax.persistence;
-
-/**
- * Thrown by the persistence provider when an entity reference obtained by
- * EntityManager.getReference(Class,Object)  is accessed but the entity does not exist.
- * Also thrown when EntityManager.refresh(Object) is called and the object no longer exists
- * in the database. The current transaction, if one is active, will be marked for rollback.
- *
- * @author Gavin King
- */
-public class EntityNotFoundException extends PersistenceException {
-	/**
-	 * Constructs a new EntityNotFoundException exception with null as its detail message.
-	 */
-	public EntityNotFoundException() {
-		super();
-	}
-
-	/**
-	 * Constructs a new EntityNotFoundException exception with the specified detail message.
-	 *
-	 * @param message the detail message
-	 */
-	public EntityNotFoundException(String message) {
-		super( message );
-	}
-
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/EntityNotFoundException.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/EntityNotFoundException.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/EntityNotFoundException.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/EntityNotFoundException.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,29 @@
+//$Id$
+package javax.persistence;
+
+/**
+ * Thrown by the persistence provider when an entity reference obtained by
+ * EntityManager.getReference(Class,Object)  is accessed but the entity does not exist.
+ * Also thrown when EntityManager.refresh(Object) is called and the object no longer exists
+ * in the database. The current transaction, if one is active, will be marked for rollback.
+ *
+ * @author Gavin King
+ */
+public class EntityNotFoundException extends PersistenceException {
+	/**
+	 * Constructs a new EntityNotFoundException exception with null as its detail message.
+	 */
+	public EntityNotFoundException() {
+		super();
+	}
+
+	/**
+	 * Constructs a new EntityNotFoundException exception with the specified detail message.
+	 *
+	 * @param message the detail message
+	 */
+	public EntityNotFoundException(String message) {
+		super( message );
+	}
+
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/EntityResult.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/EntityResult.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/EntityResult.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,33 +0,0 @@
-//$Id$
-//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
-package javax.persistence;
-
-import java.lang.annotation.Target;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * References an entity in the SELECT clause of a SQL query. If this annotation is used,
- * the SQL statement should select all of the columns that are mapped to the entity object.
- * This should include foreign key columns to related entities. The results obtained when
- * insufficient data is available are undefined.
- *
- * @author Emmanuel Bernard
- */
- at Target({}) @Retention(RetentionPolicy.RUNTIME)
-public @interface EntityResult {
-	/**
-	 * The class of the result
-	 */
-	Class entityClass();
-	/**
-	 * Maps the columns specified in the SELECT list of the query to the properties or
-	 * fields of the entity class.
-	 */
-	FieldResult[] fields() default {};
-	/**
-	 * Specifies the column name (or alias) of the column in the SELECT list that is used to
-	 * determine the type of the entity instance.
-	 */
-	String discriminatorColumn() default "";
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/EntityResult.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/EntityResult.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/EntityResult.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/EntityResult.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,33 @@
+//$Id$
+//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
+package javax.persistence;
+
+import java.lang.annotation.Target;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * References an entity in the SELECT clause of a SQL query. If this annotation is used,
+ * the SQL statement should select all of the columns that are mapped to the entity object.
+ * This should include foreign key columns to related entities. The results obtained when
+ * insufficient data is available are undefined.
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({}) @Retention(RetentionPolicy.RUNTIME)
+public @interface EntityResult {
+	/**
+	 * The class of the result
+	 */
+	Class entityClass();
+	/**
+	 * Maps the columns specified in the SELECT list of the query to the properties or
+	 * fields of the entity class.
+	 */
+	FieldResult[] fields() default {};
+	/**
+	 * Specifies the column name (or alias) of the column in the SELECT list that is used to
+	 * determine the type of the entity instance.
+	 */
+	String discriminatorColumn() default "";
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/EntityTransaction.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/EntityTransaction.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/EntityTransaction.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,60 +0,0 @@
-//$Id$
-package javax.persistence;
-
-/**
- * The EntityTransaction interface is used to control resource transactions
- * on resource-local entity managers. The EntityManager.getTransaction()
- * method returns the EntityTransaction interface.
- *
- * @author Emmanuel Bernard
- */
-public interface EntityTransaction {
-	/**
-	 * Start a resource transaction.
-	 *
-	 * @throws IllegalStateException if isActive() is true.
-	 */
-	public void begin();
-
-	/**
-	 * Commit the current transaction, writing any unflushed
-	 * changes to the database.
-	 *
-	 * @throws IllegalStateException if isActive() is false.
-	 * @throws RollbackException	 if the commit fails.
-	 */
-	public void commit();
-
-	/**
-	 * Roll back the current transaction.
-	 *
-	 * @throws IllegalStateException if isActive() is false.
-	 * @throws PersistenceException  if an unexpected error
-	 *                               condition is encountered.
-	 */
-	public void rollback();
-
-	/**
-	 * Mark the current transaction so that the only possible
-	 * outcome of the transaction is for the transaction to be
-	 * rolled back.
-	 *
-	 * @throws IllegalStateException if isActive() is false.
-	 */
-	public void setRollbackOnly();
-
-	/**
-	 * Determine whether the current transaction has been marked
-	 * for rollback.
-	 *
-	 * @throws IllegalStateException if isActive() is false.
-	 */
-	public boolean getRollbackOnly();
-
-	/**
-	 * Indicate whether a transaction is in progress.
-	 * @throws PersistenceException if an unexpected error
-	 * condition is encountered.
-	 */
-	public boolean isActive();
-}
\ No newline at end of file

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/EntityTransaction.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/EntityTransaction.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/EntityTransaction.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/EntityTransaction.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,60 @@
+//$Id$
+package javax.persistence;
+
+/**
+ * The EntityTransaction interface is used to control resource transactions
+ * on resource-local entity managers. The EntityManager.getTransaction()
+ * method returns the EntityTransaction interface.
+ *
+ * @author Emmanuel Bernard
+ */
+public interface EntityTransaction {
+	/**
+	 * Start a resource transaction.
+	 *
+	 * @throws IllegalStateException if isActive() is true.
+	 */
+	public void begin();
+
+	/**
+	 * Commit the current transaction, writing any unflushed
+	 * changes to the database.
+	 *
+	 * @throws IllegalStateException if isActive() is false.
+	 * @throws RollbackException	 if the commit fails.
+	 */
+	public void commit();
+
+	/**
+	 * Roll back the current transaction.
+	 *
+	 * @throws IllegalStateException if isActive() is false.
+	 * @throws PersistenceException  if an unexpected error
+	 *                               condition is encountered.
+	 */
+	public void rollback();
+
+	/**
+	 * Mark the current transaction so that the only possible
+	 * outcome of the transaction is for the transaction to be
+	 * rolled back.
+	 *
+	 * @throws IllegalStateException if isActive() is false.
+	 */
+	public void setRollbackOnly();
+
+	/**
+	 * Determine whether the current transaction has been marked
+	 * for rollback.
+	 *
+	 * @throws IllegalStateException if isActive() is false.
+	 */
+	public boolean getRollbackOnly();
+
+	/**
+	 * Indicate whether a transaction is in progress.
+	 * @throws PersistenceException if an unexpected error
+	 * condition is encountered.
+	 */
+	public boolean isActive();
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/EnumType.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/EnumType.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/EnumType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,19 +0,0 @@
-//$Id$
-package javax.persistence;
-
-/**
- * Defines mapping for the enumerated types. The constants of this enumerated type specify how persistent
- * property or field should be persisted as a enumerated type.
- *
- * @author Emmanuel Bernard
- */
-public enum EnumType {
-	/**
-	 * Persist enumerated type property or field as an integer
-	 */
-	ORDINAL,
-	/**
-	 * Persist enumerated type property or field as a string
-	 */
-	STRING
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/EnumType.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/EnumType.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/EnumType.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/EnumType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,19 @@
+//$Id$
+package javax.persistence;
+
+/**
+ * Defines mapping for the enumerated types. The constants of this enumerated type specify how persistent
+ * property or field should be persisted as a enumerated type.
+ *
+ * @author Emmanuel Bernard
+ */
+public enum EnumType {
+	/**
+	 * Persist enumerated type property or field as an integer
+	 */
+	ORDINAL,
+	/**
+	 * Persist enumerated type property or field as a string
+	 */
+	STRING
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/Enumerated.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/Enumerated.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/Enumerated.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,24 +0,0 @@
-//$Id$
-package javax.persistence;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-
-import static java.lang.annotation.RetentionPolicy.*;
-import static java.lang.annotation.ElementType.*;
-import static javax.persistence.EnumType.*;
-
-/**
- * Specifies that a persistent property or field should be persisted as a enumerated type.
- * It may be used in conjunction with the Basic annotation.
- *
- * @author Emmanuel Bernard
- */
- at Target({METHOD, FIELD})
- at Retention(RUNTIME)
-public @interface Enumerated {
-	/**
-	 * The type used in mapping an enum type
-	 */
-	EnumType value() default ORDINAL;
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/Enumerated.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/Enumerated.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/Enumerated.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/Enumerated.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,24 @@
+//$Id$
+package javax.persistence;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.RetentionPolicy.*;
+import static java.lang.annotation.ElementType.*;
+import static javax.persistence.EnumType.*;
+
+/**
+ * Specifies that a persistent property or field should be persisted as a enumerated type.
+ * It may be used in conjunction with the Basic annotation.
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({METHOD, FIELD})
+ at Retention(RUNTIME)
+public @interface Enumerated {
+	/**
+	 * The type used in mapping an enum type
+	 */
+	EnumType value() default ORDINAL;
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/ExcludeDefaultListeners.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/ExcludeDefaultListeners.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/ExcludeDefaultListeners.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,17 +0,0 @@
-//$Id$
-package javax.persistence;
-
-import static java.lang.annotation.ElementType.TYPE;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * Specifies that the invocation of default listeners is to be excluded for the entity class
- * (or mapped superclass) and its subclasses.
- *
- * @author Emmanuel Bernard
- */
- at Target(TYPE) @Retention(RUNTIME)
-public @interface ExcludeDefaultListeners {
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/ExcludeDefaultListeners.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/ExcludeDefaultListeners.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/ExcludeDefaultListeners.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/ExcludeDefaultListeners.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,17 @@
+//$Id$
+package javax.persistence;
+
+import static java.lang.annotation.ElementType.TYPE;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * Specifies that the invocation of default listeners is to be excluded for the entity class
+ * (or mapped superclass) and its subclasses.
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target(TYPE) @Retention(RUNTIME)
+public @interface ExcludeDefaultListeners {
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/ExcludeSuperclassListeners.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/ExcludeSuperclassListeners.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/ExcludeSuperclassListeners.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,17 +0,0 @@
-//$Id$
-package javax.persistence;
-
-import java.lang.annotation.Target;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import static java.lang.annotation.ElementType.TYPE;
-
-/**
- * Specifies that the invocation of superclass listeners is to be excluded for the
- * entity class (or mapped superclass) and its subclasses.
- *
- * @author Emmanuel Bernard
- */
- at Target(TYPE) @Retention(RUNTIME)
-public @interface ExcludeSuperclassListeners {
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/ExcludeSuperclassListeners.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/ExcludeSuperclassListeners.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/ExcludeSuperclassListeners.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/ExcludeSuperclassListeners.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,17 @@
+//$Id$
+package javax.persistence;
+
+import java.lang.annotation.Target;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import static java.lang.annotation.ElementType.TYPE;
+
+/**
+ * Specifies that the invocation of superclass listeners is to be excluded for the
+ * entity class (or mapped superclass) and its subclasses.
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target(TYPE) @Retention(RUNTIME)
+public @interface ExcludeSuperclassListeners {
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/FetchType.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/FetchType.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/FetchType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,24 +0,0 @@
-//$Id$
-//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
-package javax.persistence;
-
-/**
- * Defines strategies for fetching data from the database.
- * The EAGER strategy is a requirement on the persistence provider runtime that data must
- * be eagerly fetched. The LAZY strategy is a hint to the persistence provider runtime that
- * data should be fetched lazily when it is first accessed. The implementation is permitted to
- * eagerly fetch data for which the LAZY strategy hint has been specified. In particular, lazy
- * fetching might only be available for Basic mappings for which property-based access is used.
- *
- * @author Emmanuel Bernard
- */
-public enum FetchType {
-	/**
-	 * Defines that data must be lazily fetched
-	 */
-	LAZY,
-	/**
-	 * Defines that data must be eagerly fetched
-	 */
-	EAGER
-};

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/FetchType.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/FetchType.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/FetchType.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/FetchType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,24 @@
+//$Id$
+//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
+package javax.persistence;
+
+/**
+ * Defines strategies for fetching data from the database.
+ * The EAGER strategy is a requirement on the persistence provider runtime that data must
+ * be eagerly fetched. The LAZY strategy is a hint to the persistence provider runtime that
+ * data should be fetched lazily when it is first accessed. The implementation is permitted to
+ * eagerly fetch data for which the LAZY strategy hint has been specified. In particular, lazy
+ * fetching might only be available for Basic mappings for which property-based access is used.
+ *
+ * @author Emmanuel Bernard
+ */
+public enum FetchType {
+	/**
+	 * Defines that data must be lazily fetched
+	 */
+	LAZY,
+	/**
+	 * Defines that data must be eagerly fetched
+	 */
+	EAGER
+};

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/FieldResult.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/FieldResult.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/FieldResult.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,25 +0,0 @@
-//$Id$
-//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
-package javax.persistence;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * Is used to map the columns specified in the SELECT list of the query to the properties
- * or fields of the entity class.
- *
- * @author Emmanuel Bernard
- */
- at Target({}) @Retention(RetentionPolicy.RUNTIME)
-public @interface FieldResult {
-	/**
-	 * Name of the persistent field or property of the class.
-	 */
-	String name();
-	/**
-	 * Name of the column in the SELECT clause - i.e., column aliases, if applicable.
-	 */
-	String column();
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/FieldResult.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/FieldResult.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/FieldResult.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/FieldResult.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,25 @@
+//$Id$
+//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
+package javax.persistence;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * Is used to map the columns specified in the SELECT list of the query to the properties
+ * or fields of the entity class.
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({}) @Retention(RetentionPolicy.RUNTIME)
+public @interface FieldResult {
+	/**
+	 * Name of the persistent field or property of the class.
+	 */
+	String name();
+	/**
+	 * Name of the column in the SELECT clause - i.e., column aliases, if applicable.
+	 */
+	String column();
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/FlushModeType.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/FlushModeType.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/FlushModeType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,29 +0,0 @@
-//$Id$
-package javax.persistence;
-
-/**
- * Flush mode setting.
- *
- * When queries are executed within a transaction, if FlushModeType.AUTO is set on the Query object,
- * or if the flush mode setting for the persistence context is AUTO (the default) and a flush mode
- * setting has not been specified for the Query object, the persistence provider is responsible for
- * ensuring that all updates to the state of all entities in the persistence context which could
- * potentially affect the result of the query are visible to the processing of the query.
- * The persistence provider implementation may achieve this by flushing those entities to the database
- * or by some other means. If FlushModeType.COMMIT is set, the effect of updates made to entities in the
- * persistence context upon queries is unspecified.
- *
- * If there is no transaction active, the persistence provider must not flush to the database.
- *
- * @author Gavin King
- */
-public enum FlushModeType {
-	/**
-	 * Flushing must occur only at transaction commit
-	 */
-	COMMIT,
-	/**
-	 * (Default) Flushing to occur at query execution
-	 */
-	AUTO
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/FlushModeType.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/FlushModeType.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/FlushModeType.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/FlushModeType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,29 @@
+//$Id$
+package javax.persistence;
+
+/**
+ * Flush mode setting.
+ *
+ * When queries are executed within a transaction, if FlushModeType.AUTO is set on the Query object,
+ * or if the flush mode setting for the persistence context is AUTO (the default) and a flush mode
+ * setting has not been specified for the Query object, the persistence provider is responsible for
+ * ensuring that all updates to the state of all entities in the persistence context which could
+ * potentially affect the result of the query are visible to the processing of the query.
+ * The persistence provider implementation may achieve this by flushing those entities to the database
+ * or by some other means. If FlushModeType.COMMIT is set, the effect of updates made to entities in the
+ * persistence context upon queries is unspecified.
+ *
+ * If there is no transaction active, the persistence provider must not flush to the database.
+ *
+ * @author Gavin King
+ */
+public enum FlushModeType {
+	/**
+	 * Flushing must occur only at transaction commit
+	 */
+	COMMIT,
+	/**
+	 * (Default) Flushing to occur at query execution
+	 */
+	AUTO
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/GeneratedValue.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/GeneratedValue.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/GeneratedValue.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,32 +0,0 @@
-//$Id$
-package javax.persistence;
-
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.ElementType.METHOD;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * Provides for the specification of generation strategies for the values of primary keys.
- * The GeneratedValue annotation may be applied to a primary key property or field of an entity
- * or mapped superclass in conjunction with the Id annotation.
- *
- * @author Emmanuel Bernard
- */
- at Target({METHOD, FIELD})
- at Retention(RUNTIME)
-public @interface GeneratedValue {
-	/**
-	 * The primary key generation strategy that the persistence provider must use
-	 * to generate the annotated entity primary key.
-	 */
-	GenerationType strategy() default GenerationType.AUTO;
-	/**
-	 * The name of the primary key generator to use as specified in the SequenceGenerator or
-	 * TableGenerator annotation.
-	 *
-	 * Defaults to the id generator supplied by persistence provider. 
-	 */
-	String generator() default "";
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/GeneratedValue.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/GeneratedValue.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/GeneratedValue.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/GeneratedValue.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,32 @@
+//$Id$
+package javax.persistence;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * Provides for the specification of generation strategies for the values of primary keys.
+ * The GeneratedValue annotation may be applied to a primary key property or field of an entity
+ * or mapped superclass in conjunction with the Id annotation.
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({METHOD, FIELD})
+ at Retention(RUNTIME)
+public @interface GeneratedValue {
+	/**
+	 * The primary key generation strategy that the persistence provider must use
+	 * to generate the annotated entity primary key.
+	 */
+	GenerationType strategy() default GenerationType.AUTO;
+	/**
+	 * The name of the primary key generator to use as specified in the SequenceGenerator or
+	 * TableGenerator annotation.
+	 *
+	 * Defaults to the id generator supplied by persistence provider. 
+	 */
+	String generator() default "";
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/GenerationType.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/GenerationType.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/GenerationType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,34 +0,0 @@
-//$Id$
-//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
-package javax.persistence;
-
-/**
- * Defines the types of primary key generation.
- *
- * @author Emmanuel Bernard
- */
-public enum GenerationType {
-	/**
-	 * Indicates that the persistence provider must assign primary keys for the entity using an underlying
-	 * database table to ensure uniqueness.
-	 */
-	TABLE,
-	/**
-	 * Indicates that the persistence provider must assign primary keys for the entity using database
-	 * sequence column.
-	 */
-	SEQUENCE,
-	/**
-	 * Indicates that the persistence provider must assign primary keys for the entity using
-	 * database identity column.
-	 */
-	IDENTITY,
-	/**
-	 * Indicates that the persistence provider should pick an appropriate strategy for the
-	 * particular database. The AUTO generation strategy may expect a database resource
-	 * to exist, or it may attempt to create one. A vendor may provide documentation on how
-	 * to create such resources in the event that it does not support schema generation or cannot
-	 * create the schema resource at runtime.
-	 */
-	AUTO
-};

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/GenerationType.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/GenerationType.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/GenerationType.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/GenerationType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,34 @@
+//$Id$
+//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
+package javax.persistence;
+
+/**
+ * Defines the types of primary key generation.
+ *
+ * @author Emmanuel Bernard
+ */
+public enum GenerationType {
+	/**
+	 * Indicates that the persistence provider must assign primary keys for the entity using an underlying
+	 * database table to ensure uniqueness.
+	 */
+	TABLE,
+	/**
+	 * Indicates that the persistence provider must assign primary keys for the entity using database
+	 * sequence column.
+	 */
+	SEQUENCE,
+	/**
+	 * Indicates that the persistence provider must assign primary keys for the entity using
+	 * database identity column.
+	 */
+	IDENTITY,
+	/**
+	 * Indicates that the persistence provider should pick an appropriate strategy for the
+	 * particular database. The AUTO generation strategy may expect a database resource
+	 * to exist, or it may attempt to create one. A vendor may provide documentation on how
+	 * to create such resources in the event that it does not support schema generation or cannot
+	 * create the schema resource at runtime.
+	 */
+	AUTO
+};

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/Id.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/Id.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/Id.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,18 +0,0 @@
-//$Id$
-//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
-package javax.persistence;
-
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.ElementType.METHOD;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-
-/**
- * Specifies the primary key property or field of an entity.
- * 
- * @author Emmanuel Bernard
- */
- at Target({METHOD, FIELD}) @Retention(RUNTIME)
-public @interface Id {}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/Id.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/Id.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/Id.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/Id.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,18 @@
+//$Id$
+//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
+package javax.persistence;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+
+/**
+ * Specifies the primary key property or field of an entity.
+ * 
+ * @author Emmanuel Bernard
+ */
+ at Target({METHOD, FIELD}) @Retention(RUNTIME)
+public @interface Id {}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/IdClass.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/IdClass.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/IdClass.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,26 +0,0 @@
-//$Id$
-//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
-package javax.persistence;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-
-import static java.lang.annotation.ElementType.TYPE;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-
-/**
- * Specifies a composite primary key class that is mapped to multiple fields or properties
- * of the entity.
- *
- * The names of the fields or properties in the primary key class and the primary key fields
- * or properties of the entity must correspond and their types must be the same.
- *
- * @author Emmanuel Bernard
- */
- at Target({TYPE}) @Retention(RUNTIME)
-public @interface IdClass {
-	/**
-	 * Primary key class
-	 */
-	Class value();
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/IdClass.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/IdClass.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/IdClass.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/IdClass.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,26 @@
+//$Id$
+//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
+package javax.persistence;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+/**
+ * Specifies a composite primary key class that is mapped to multiple fields or properties
+ * of the entity.
+ *
+ * The names of the fields or properties in the primary key class and the primary key fields
+ * or properties of the entity must correspond and their types must be the same.
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({TYPE}) @Retention(RUNTIME)
+public @interface IdClass {
+	/**
+	 * Primary key class
+	 */
+	Class value();
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/Inheritance.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/Inheritance.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/Inheritance.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,23 +0,0 @@
-//$Id$
-//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
-package javax.persistence;
-
-import static java.lang.annotation.ElementType.TYPE;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-import static javax.persistence.InheritanceType.SINGLE_TABLE;
-
-/**
- * Defines the inheritance strategy to be used for an entity class hierarchy. It is specified
- * on the entity class that is the root of the entity class hierarchy.
- *
- * @author Emmanuel Bernard
- */
- at Target({TYPE}) @Retention(RUNTIME)
-public @interface Inheritance {
-	/**
-	 * The strategy to be used
-	 */
-	InheritanceType strategy() default SINGLE_TABLE;
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/Inheritance.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/Inheritance.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/Inheritance.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/Inheritance.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,23 @@
+//$Id$
+//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
+package javax.persistence;
+
+import static java.lang.annotation.ElementType.TYPE;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+import static javax.persistence.InheritanceType.SINGLE_TABLE;
+
+/**
+ * Defines the inheritance strategy to be used for an entity class hierarchy. It is specified
+ * on the entity class that is the root of the entity class hierarchy.
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({TYPE}) @Retention(RUNTIME)
+public @interface Inheritance {
+	/**
+	 * The strategy to be used
+	 */
+	InheritanceType strategy() default SINGLE_TABLE;
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/InheritanceType.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/InheritanceType.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/InheritanceType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,25 +0,0 @@
-//$Id$
-//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
-package javax.persistence;
-
-/**
- * Defines inheritance strategy options.
- *
- * @author Emmanuel Bernard
- */
-public enum InheritanceType
-{
-	/**
-	 * A single table per class hierarchy
-	 */
-	SINGLE_TABLE,
-	/**
-	 * A table per concrete entity class
-	 */
-	TABLE_PER_CLASS,
-	/**
-	 * A strategy in which fields that are specific to a subclass are mapped to a separate
-	 * table than the fields that are common to the parent class, and a join is performed
-	 * to instantiate the subclass.
-	 */
-	JOINED };

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/InheritanceType.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/InheritanceType.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/InheritanceType.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/InheritanceType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,25 @@
+//$Id$
+//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
+package javax.persistence;
+
+/**
+ * Defines inheritance strategy options.
+ *
+ * @author Emmanuel Bernard
+ */
+public enum InheritanceType
+{
+	/**
+	 * A single table per class hierarchy
+	 */
+	SINGLE_TABLE,
+	/**
+	 * A table per concrete entity class
+	 */
+	TABLE_PER_CLASS,
+	/**
+	 * A strategy in which fields that are specific to a subclass are mapped to a separate
+	 * table than the fields that are common to the parent class, and a join is performed
+	 * to instantiate the subclass.
+	 */
+	JOINED };

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/JoinColumn.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/JoinColumn.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/JoinColumn.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,67 +0,0 @@
-//$Id$
-//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
-package javax.persistence;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-
-import static java.lang.annotation.ElementType.*;
-import static java.lang.annotation.RetentionPolicy.*;
-
-/**
- * Is used to specify a mapped column for joining an entity association.
- *
- * @author Emmanuel Bernard
- */
- at Target({METHOD, FIELD}) @Retention(RUNTIME)
-public @interface JoinColumn {
-	/**
-	 * The name of the foreign key column.
-	 * The table in which it is found depends upon the context. If the join is for a OneToOne
-	 * or Many- ToOne mapping, the foreign key column is in the table of the source entity.
-	 * If the join is for a ManyToMany, the foreign key is in a join table. Default (only applies
-	 * if a single join column is used): The concatenation of the following: the name of the referencing
-	 * relationship property or field of the referencing entity; "_"; the name of the referenced primary
-	 * key column. If there is no such referencing relationship property or field in the entity, the join
-	 * column name is formed as the concatenation of the following: the name of the entity; "_"; the name
-	 * of the referenced primary key column.
-	 */
-	String name() default "";
-	/**
-	 * The name of the column referenced by this foreign key column. When used with relationship mappings,
-	 * the referenced column is in the table of the target entity. When used inside a JoinTable annotation,
-	 * the referenced key column is in the entity table of the owning entity, or inverse entity if the join
-	 * is part of the inverse join definition. Default (only applies if single join column is being used):
-	 * The same name as the primary key column of the referenced table.
-	 */
-	String referencedColumnName() default "";
-	/**
-	 * Whether the property is a unique key. This is a shortcut for the UniqueConstraint annotation at the
-	 * table level and is useful for when the unique key constraint is only a single field. It is not
-	 * necessary to explicitly specify this for a join column that corresponds to a primary key that is part
-	 * of a foreign key.
-	 */
-	boolean unique() default false;
-	/**
-	 * Whether the foreign key column is nullable
-	 */
-	boolean nullable() default true;
-	/**
-	 * Whether the column is included in SQL INSERT statements generated by the persistence provider
-	 */
-	boolean insertable() default true;
-	/**
-	 * Whether the column is included in SQL UPDATE statements generated by the persistence provider
-	 */
-	boolean updatable() default true;
-	/**
-	 * The SQL fragment that is used when generating the DDL for the column.
-	 * Defaults to the generated SQL for the column.
-	 */
-	String columnDefinition() default "";
-	/**
-	 * The name of the table that contains the column. If a table is not specified, the column is
-	 * assumed to be in the primary table of the applicable entity
-	 */
-	String table() default "";
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/JoinColumn.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/JoinColumn.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/JoinColumn.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/JoinColumn.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,67 @@
+//$Id$
+//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
+package javax.persistence;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+/**
+ * Is used to specify a mapped column for joining an entity association.
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({METHOD, FIELD}) @Retention(RUNTIME)
+public @interface JoinColumn {
+	/**
+	 * The name of the foreign key column.
+	 * The table in which it is found depends upon the context. If the join is for a OneToOne
+	 * or Many- ToOne mapping, the foreign key column is in the table of the source entity.
+	 * If the join is for a ManyToMany, the foreign key is in a join table. Default (only applies
+	 * if a single join column is used): The concatenation of the following: the name of the referencing
+	 * relationship property or field of the referencing entity; "_"; the name of the referenced primary
+	 * key column. If there is no such referencing relationship property or field in the entity, the join
+	 * column name is formed as the concatenation of the following: the name of the entity; "_"; the name
+	 * of the referenced primary key column.
+	 */
+	String name() default "";
+	/**
+	 * The name of the column referenced by this foreign key column. When used with relationship mappings,
+	 * the referenced column is in the table of the target entity. When used inside a JoinTable annotation,
+	 * the referenced key column is in the entity table of the owning entity, or inverse entity if the join
+	 * is part of the inverse join definition. Default (only applies if single join column is being used):
+	 * The same name as the primary key column of the referenced table.
+	 */
+	String referencedColumnName() default "";
+	/**
+	 * Whether the property is a unique key. This is a shortcut for the UniqueConstraint annotation at the
+	 * table level and is useful for when the unique key constraint is only a single field. It is not
+	 * necessary to explicitly specify this for a join column that corresponds to a primary key that is part
+	 * of a foreign key.
+	 */
+	boolean unique() default false;
+	/**
+	 * Whether the foreign key column is nullable
+	 */
+	boolean nullable() default true;
+	/**
+	 * Whether the column is included in SQL INSERT statements generated by the persistence provider
+	 */
+	boolean insertable() default true;
+	/**
+	 * Whether the column is included in SQL UPDATE statements generated by the persistence provider
+	 */
+	boolean updatable() default true;
+	/**
+	 * The SQL fragment that is used when generating the DDL for the column.
+	 * Defaults to the generated SQL for the column.
+	 */
+	String columnDefinition() default "";
+	/**
+	 * The name of the table that contains the column. If a table is not specified, the column is
+	 * assumed to be in the primary table of the applicable entity
+	 */
+	String table() default "";
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/JoinColumns.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/JoinColumns.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/JoinColumns.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,23 +0,0 @@
-//$Id$
-//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
-package javax.persistence;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-
-import static java.lang.annotation.ElementType.*;
-import static java.lang.annotation.RetentionPolicy.*;
-
-/**
- * Defines mapping for the composite foreign keys.
- * This annotation groups JoinColumn annotations for the same relationship.
- *
- * When the JoinColumns annotation is used, both the name and the referencedColumnName
- * elements must be specified in each such JoinColumn annotation.
-
- * @author Emmanuel Bernard
- */
- at Target({METHOD, FIELD}) @Retention(RUNTIME)
-public @interface JoinColumns {
-    JoinColumn[] value();
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/JoinColumns.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/JoinColumns.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/JoinColumns.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/JoinColumns.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,23 @@
+//$Id$
+//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
+package javax.persistence;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+/**
+ * Defines mapping for the composite foreign keys.
+ * This annotation groups JoinColumn annotations for the same relationship.
+ *
+ * When the JoinColumns annotation is used, both the name and the referencedColumnName
+ * elements must be specified in each such JoinColumn annotation.
+
+ * @author Emmanuel Bernard
+ */
+ at Target({METHOD, FIELD}) @Retention(RUNTIME)
+public @interface JoinColumns {
+    JoinColumn[] value();
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/JoinTable.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/JoinTable.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/JoinTable.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,63 +0,0 @@
-//$Id$
-//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
-package javax.persistence;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-
-import static java.lang.annotation.ElementType.*;
-import static java.lang.annotation.RetentionPolicy.*;
-
-/**
- * This annotation is used in the mapping of associations. It is specified on the owning
- * side of a many-to-many association, or in a unidirectional one-to-many association.
- *
- * If the JoinTable annotation is missing, the default values of the annotation elements apply.
- * The name of the join table is assumed to be the table names of the associated primary tables
- * concatenated together (owning side first) using an underscore.
- *
- * @author Emmanuel Bernard
- */
- at Target({METHOD, FIELD})  @Retention(RUNTIME)
-public @interface JoinTable {
-	/**
-	 * The name of the join table.
-	 *
-	 * Defaults to the concatenated names of the two associated primary entity tables,
-	 * separated by an underscore
-	 */
-	String name() default "";
-	/**
-	 * The catalog of the table.
-	 *
-	 * Defaults to the default catalog.
-	 */
-	String catalog() default "";
-	/**
-	 * The schema of the table.
-	 *
-	 * Defaults to the default schema for user.
-	 */
-	String schema() default "";
-	/**
-	 * The foreign key columns of the join table which reference the primary table of the
-	 * entity owning the association (i.e. the owning side of the association).
-	 *
-	 * Uses the same defaults as for JoinColumn.
-	 */
-	JoinColumn[] joinColumns() default {};
-	/**
-	 * The foreign key columns of the join table which reference the primary table of the entity
-	 * that does not own the association (i.e. the inverse side of the association).
-	 *
-	 * Uses the same defaults as for JoinColumn
-	 */
-	JoinColumn[] inverseJoinColumns() default {};
-	/**
-	 * Unique constraints that are to be placed on the table. These are only used if table
-	 * generation is in effect.
-	 *
-	 * Defaults to no additional constraints
-	 */
-	UniqueConstraint[] uniqueConstraints() default {};
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/JoinTable.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/JoinTable.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/JoinTable.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/JoinTable.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,63 @@
+//$Id$
+//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
+package javax.persistence;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+/**
+ * This annotation is used in the mapping of associations. It is specified on the owning
+ * side of a many-to-many association, or in a unidirectional one-to-many association.
+ *
+ * If the JoinTable annotation is missing, the default values of the annotation elements apply.
+ * The name of the join table is assumed to be the table names of the associated primary tables
+ * concatenated together (owning side first) using an underscore.
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({METHOD, FIELD})  @Retention(RUNTIME)
+public @interface JoinTable {
+	/**
+	 * The name of the join table.
+	 *
+	 * Defaults to the concatenated names of the two associated primary entity tables,
+	 * separated by an underscore
+	 */
+	String name() default "";
+	/**
+	 * The catalog of the table.
+	 *
+	 * Defaults to the default catalog.
+	 */
+	String catalog() default "";
+	/**
+	 * The schema of the table.
+	 *
+	 * Defaults to the default schema for user.
+	 */
+	String schema() default "";
+	/**
+	 * The foreign key columns of the join table which reference the primary table of the
+	 * entity owning the association (i.e. the owning side of the association).
+	 *
+	 * Uses the same defaults as for JoinColumn.
+	 */
+	JoinColumn[] joinColumns() default {};
+	/**
+	 * The foreign key columns of the join table which reference the primary table of the entity
+	 * that does not own the association (i.e. the inverse side of the association).
+	 *
+	 * Uses the same defaults as for JoinColumn
+	 */
+	JoinColumn[] inverseJoinColumns() default {};
+	/**
+	 * Unique constraints that are to be placed on the table. These are only used if table
+	 * generation is in effect.
+	 *
+	 * Defaults to no additional constraints
+	 */
+	UniqueConstraint[] uniqueConstraints() default {};
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/Lob.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/Lob.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/Lob.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,25 +0,0 @@
-//$Id$
-//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
-package javax.persistence;
-
-import static java.lang.annotation.ElementType.METHOD;
-
-import static java.lang.annotation.ElementType.FIELD;
-
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-
-import java.lang.annotation.Target;
-import java.lang.annotation.Retention;
-
-/**
- * Specifies that a persistent property or field should be persisted as a large object to a
- * database-supported large object type. The Lob annotation may be used in conjunction with
- * the Basic annotation. A Lob may be either a binary or character type.
- *
- * The Lob type is inferred from the type of the persistent field or property, and except
- * for string and character-based types defaults to Blob.
- *  
- * @author Emmanuel Bernard
- */
- at Target({METHOD, FIELD}) @Retention(RUNTIME)
-public @interface Lob {}
\ No newline at end of file

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/Lob.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/Lob.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/Lob.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/Lob.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,25 @@
+//$Id$
+//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
+package javax.persistence;
+
+import static java.lang.annotation.ElementType.METHOD;
+
+import static java.lang.annotation.ElementType.FIELD;
+
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Target;
+import java.lang.annotation.Retention;
+
+/**
+ * Specifies that a persistent property or field should be persisted as a large object to a
+ * database-supported large object type. The Lob annotation may be used in conjunction with
+ * the Basic annotation. A Lob may be either a binary or character type.
+ *
+ * The Lob type is inferred from the type of the persistent field or property, and except
+ * for string and character-based types defaults to Blob.
+ *  
+ * @author Emmanuel Bernard
+ */
+ at Target({METHOD, FIELD}) @Retention(RUNTIME)
+public @interface Lob {}
\ No newline at end of file

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/LockModeType.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/LockModeType.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/LockModeType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,40 +0,0 @@
-//$Id$
-package javax.persistence;
-
-/**
- * Lock modes that can be specified by means of the EntityManager.lock() method.
- *
- * The semantics of requesting locks of type LockModeType.READ and LockModeType.WRITE are t
- * he following.
- *
- * If transaction T1 calls lock(entity, LockModeType.READ) on a versioned object, the entity
- * manager must ensure that neither of the following phenomena can occur:
- *
- * * P1 (Dirty read): Transaction T1 modifies a row. Another transaction T2 then reads
- * that row and obtains the modified value, before T1 has committed or rolled back.
- * Transaction T2 eventually commits successfully; it does not matter whether T1 commits or rolls
- * back and whether it does so before or after T2 commits.
- *
- * * P2 (Non-repeatable read): Transaction T1 reads a row. Another transaction T2 then modifies
- * or deletes that row, before T1 has committed. Both transactions eventually commit successfully.
- *
- * Lock modes must always prevent the phenomena P1 and P2.
- * In addition, calling lock(entity, LockModeType.WRITE) on a versioned object,
- * will also force an update (increment) to the entity's version column.
- *
- * The persistence implementation is not required to support calling EntityManager.lock()
- * on a non-versioned object. When it cannot support a such lock call, it must
- * throw the PersistenceException.
- *
- * @author Emmanuel Bernard
- */
-public enum LockModeType {
-	/**
-	 * Read lock
-	 */
-	READ,
-	/**
-	 * Write lock
-	 */
-	WRITE
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/LockModeType.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/LockModeType.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/LockModeType.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/LockModeType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,40 @@
+//$Id$
+package javax.persistence;
+
+/**
+ * Lock modes that can be specified by means of the EntityManager.lock() method.
+ *
+ * The semantics of requesting locks of type LockModeType.READ and LockModeType.WRITE are t
+ * he following.
+ *
+ * If transaction T1 calls lock(entity, LockModeType.READ) on a versioned object, the entity
+ * manager must ensure that neither of the following phenomena can occur:
+ *
+ * * P1 (Dirty read): Transaction T1 modifies a row. Another transaction T2 then reads
+ * that row and obtains the modified value, before T1 has committed or rolled back.
+ * Transaction T2 eventually commits successfully; it does not matter whether T1 commits or rolls
+ * back and whether it does so before or after T2 commits.
+ *
+ * * P2 (Non-repeatable read): Transaction T1 reads a row. Another transaction T2 then modifies
+ * or deletes that row, before T1 has committed. Both transactions eventually commit successfully.
+ *
+ * Lock modes must always prevent the phenomena P1 and P2.
+ * In addition, calling lock(entity, LockModeType.WRITE) on a versioned object,
+ * will also force an update (increment) to the entity's version column.
+ *
+ * The persistence implementation is not required to support calling EntityManager.lock()
+ * on a non-versioned object. When it cannot support a such lock call, it must
+ * throw the PersistenceException.
+ *
+ * @author Emmanuel Bernard
+ */
+public enum LockModeType {
+	/**
+	 * Read lock
+	 */
+	READ,
+	/**
+	 * Write lock
+	 */
+	WRITE
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/ManyToMany.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/ManyToMany.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/ManyToMany.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,51 +0,0 @@
-//$Id$
-//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
-package javax.persistence;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-
-import static java.lang.annotation.ElementType.*;
-import static java.lang.annotation.RetentionPolicy.*;
-import static javax.persistence.FetchType.*;
-
-/**
- * Defines a many-valued association with many-to-many multiplicity. If the Collection is
- * defined using generics to specify the element type, the associated target entity class
- * does not need to be specified; otherwise it must be specified.
- *
- * Every many-to-many association has two sides, the owning side and the non-owning, or inverse,
- * side. The join table is specified on the owning side. If the association is bidirectional,
- * either side may be designated as the owning side.
- *
- * The same annotation elements for the OneToMany annotation apply to the ManyToMany annotation.
- *
- * @author Emmanuel Bernard
- */
- at Target({METHOD, FIELD}) @Retention(RUNTIME)
-public @interface ManyToMany {
-	/**
-	 * The entity class that is the target of the association. Optional only if the
-	 * collection property is defined using Java generics. Must be specified otherwise.
-	 *
-	 * Defaults to the parameterized type of the collection when defined using generics.
-	 */
-	Class targetEntity() default void.class;
-	/**
-	 * The operations that must be cascaded to the target of the association.
-	 *
-	 * Defaults to no operations being cascaded.
-	 */
-	CascadeType[] cascade() default {};
-	/**
-	 * Whether the association should be lazily loaded or must be eagerly fetched.
-	 * The EAGER strategy is a requirement on the persistenceprovider runtime that
-	 * the associatedentities must be eagerly fetched. The LAZY strategy is a hint
-	 * to the persistence provider runtime.
-	 */
-	FetchType fetch() default LAZY;
-	/**
-	 * The field that owns the relationship. Required unless the relationship is unidirectional.
-	 */
-	String mappedBy() default "";
-}
\ No newline at end of file

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/ManyToMany.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/ManyToMany.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/ManyToMany.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/ManyToMany.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,51 @@
+//$Id$
+//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
+package javax.persistence;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+import static javax.persistence.FetchType.*;
+
+/**
+ * Defines a many-valued association with many-to-many multiplicity. If the Collection is
+ * defined using generics to specify the element type, the associated target entity class
+ * does not need to be specified; otherwise it must be specified.
+ *
+ * Every many-to-many association has two sides, the owning side and the non-owning, or inverse,
+ * side. The join table is specified on the owning side. If the association is bidirectional,
+ * either side may be designated as the owning side.
+ *
+ * The same annotation elements for the OneToMany annotation apply to the ManyToMany annotation.
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({METHOD, FIELD}) @Retention(RUNTIME)
+public @interface ManyToMany {
+	/**
+	 * The entity class that is the target of the association. Optional only if the
+	 * collection property is defined using Java generics. Must be specified otherwise.
+	 *
+	 * Defaults to the parameterized type of the collection when defined using generics.
+	 */
+	Class targetEntity() default void.class;
+	/**
+	 * The operations that must be cascaded to the target of the association.
+	 *
+	 * Defaults to no operations being cascaded.
+	 */
+	CascadeType[] cascade() default {};
+	/**
+	 * Whether the association should be lazily loaded or must be eagerly fetched.
+	 * The EAGER strategy is a requirement on the persistenceprovider runtime that
+	 * the associatedentities must be eagerly fetched. The LAZY strategy is a hint
+	 * to the persistence provider runtime.
+	 */
+	FetchType fetch() default LAZY;
+	/**
+	 * The field that owns the relationship. Required unless the relationship is unidirectional.
+	 */
+	String mappedBy() default "";
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/ManyToOne.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/ManyToOne.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/ManyToOne.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,44 +0,0 @@
-//$Id$
-//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
-package javax.persistence;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-
-import static java.lang.annotation.ElementType.*;
-import static java.lang.annotation.RetentionPolicy.*;
-import static javax.persistence.FetchType.*;
-
-/**
- * This annotation defines a single-valued association to another entity class that has
- * many-to-one multiplicity. It is not normally necessary to specify the target entity
- * explicitly since it can usually be inferred from the type of the object being referenced.
- *
- * @author Emmanuel Bernard
- */
- at Target({METHOD, FIELD}) @Retention(RUNTIME)
-public @interface ManyToOne {
-	/**
-	 * The entity class that is the target of the association.
-	 *
-	 * Defaults to the type of the field or property that stores the association
-	 */
-	Class targetEntity() default void.class;
-	/**
-	 * The operations that must be cascaded to the target of the association.
-	 *
-	 * By default no operations are cascaded.
-	 */
-	CascadeType[] cascade() default {};
-	/**
-	 * Whether the association should be lazily loaded or must be eagerly fetched.
-	 * The EAGER strategy is a requirement on the persistence provider runtime that
-	 * the associated entity must be eagerly fetched. The LAZY strategy is a hint to
-	 * the persistence provider runtime.
-	 */
-	FetchType fetch() default EAGER;
-	/**
-	 * Whether the association is optional. If set to false then a non-null relationship must always exist.
-	 */
-	boolean optional() default true;
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/ManyToOne.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/ManyToOne.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/ManyToOne.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/ManyToOne.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,44 @@
+//$Id$
+//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
+package javax.persistence;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+import static javax.persistence.FetchType.*;
+
+/**
+ * This annotation defines a single-valued association to another entity class that has
+ * many-to-one multiplicity. It is not normally necessary to specify the target entity
+ * explicitly since it can usually be inferred from the type of the object being referenced.
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({METHOD, FIELD}) @Retention(RUNTIME)
+public @interface ManyToOne {
+	/**
+	 * The entity class that is the target of the association.
+	 *
+	 * Defaults to the type of the field or property that stores the association
+	 */
+	Class targetEntity() default void.class;
+	/**
+	 * The operations that must be cascaded to the target of the association.
+	 *
+	 * By default no operations are cascaded.
+	 */
+	CascadeType[] cascade() default {};
+	/**
+	 * Whether the association should be lazily loaded or must be eagerly fetched.
+	 * The EAGER strategy is a requirement on the persistence provider runtime that
+	 * the associated entity must be eagerly fetched. The LAZY strategy is a hint to
+	 * the persistence provider runtime.
+	 */
+	FetchType fetch() default EAGER;
+	/**
+	 * Whether the association is optional. If set to false then a non-null relationship must always exist.
+	 */
+	boolean optional() default true;
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/MapKey.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/MapKey.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/MapKey.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,25 +0,0 @@
-package javax.persistence;
-
-import static java.lang.annotation.ElementType.METHOD;
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-import java.lang.annotation.Retention;
-
-/**
- * Is used to specify the map key for associations of type Map.
- * If a persistent field or property other than the primary key is used as a map key then it
- * is expected to have a uniqueness constraint associated with it.
- *
- * @author Emmanuel Bernard
- */
- at Target({METHOD, FIELD}) @Retention(RUNTIME)
-public @interface MapKey {
-	/**
-	 * The name of the persistent field or property of the associated entity that is used as the map key.
-	 * If the name element is not specified, the primary key of the associated entity is used as the map key.
-	 * If the primary key is a composite primary key and is mapped as IdClass, an instance of the primary key
-	 * class is used as the key.
-	 */
-	String name() default "";
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/MapKey.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/MapKey.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/MapKey.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/MapKey.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,25 @@
+package javax.persistence;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+import java.lang.annotation.Retention;
+
+/**
+ * Is used to specify the map key for associations of type Map.
+ * If a persistent field or property other than the primary key is used as a map key then it
+ * is expected to have a uniqueness constraint associated with it.
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({METHOD, FIELD}) @Retention(RUNTIME)
+public @interface MapKey {
+	/**
+	 * The name of the persistent field or property of the associated entity that is used as the map key.
+	 * If the name element is not specified, the primary key of the associated entity is used as the map key.
+	 * If the primary key is a composite primary key and is mapped as IdClass, an instance of the primary key
+	 * class is used as the key.
+	 */
+	String name() default "";
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/MappedSuperclass.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/MappedSuperclass.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/MappedSuperclass.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,25 +0,0 @@
-//$Id$
-//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
-package javax.persistence;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-
-import static java.lang.annotation.ElementType.*;
-import static java.lang.annotation.RetentionPolicy.*;
-
-/**
- * Designates a class whose mapping information is applied to the entities that inherit
- * from it. A mapped superclass has no separate table defined for it.
- *
- * A class designated with the MappedSuperclass annotation can be mapped in the same way as
- * an entity except that the mappings will apply only to its subclasses since no table exists
- * for the mapped superclass itself. When applied to the subclasses the inherited mappings will
- * apply in the context of the subclass tables. Mapping information may be overridden in such
- * subclasses by using the AttributeOverride and AssociationOverride annotations or corresponding *
- * XML elements.
- *  
- * @author Emmanuel Bernard
- */
- at Target(TYPE) @Retention(RUNTIME)
-public @interface MappedSuperclass {}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/MappedSuperclass.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/MappedSuperclass.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/MappedSuperclass.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/MappedSuperclass.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,25 @@
+//$Id$
+//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
+package javax.persistence;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+/**
+ * Designates a class whose mapping information is applied to the entities that inherit
+ * from it. A mapped superclass has no separate table defined for it.
+ *
+ * A class designated with the MappedSuperclass annotation can be mapped in the same way as
+ * an entity except that the mappings will apply only to its subclasses since no table exists
+ * for the mapped superclass itself. When applied to the subclasses the inherited mappings will
+ * apply in the context of the subclass tables. Mapping information may be overridden in such
+ * subclasses by using the AttributeOverride and AssociationOverride annotations or corresponding *
+ * XML elements.
+ *  
+ * @author Emmanuel Bernard
+ */
+ at Target(TYPE) @Retention(RUNTIME)
+public @interface MappedSuperclass {}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/NamedNativeQueries.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/NamedNativeQueries.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/NamedNativeQueries.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,21 +0,0 @@
-//$Id$
-//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
-package javax.persistence;
-
-import static java.lang.annotation.ElementType.TYPE;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * Is used to specify an array of native SQL named queries. Query names are scoped to the persistence unit
- *
- * @author Emmanuel Bernard
- */
- at Target({TYPE}) @Retention(RUNTIME)
-public @interface NamedNativeQueries {
-	/**
-	 * Array of native SQL named queries
-	 */
-	NamedNativeQuery [] value ();
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/NamedNativeQueries.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/NamedNativeQueries.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/NamedNativeQueries.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/NamedNativeQueries.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,21 @@
+//$Id$
+//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
+package javax.persistence;
+
+import static java.lang.annotation.ElementType.TYPE;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * Is used to specify an array of native SQL named queries. Query names are scoped to the persistence unit
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({TYPE}) @Retention(RUNTIME)
+public @interface NamedNativeQueries {
+	/**
+	 * Array of native SQL named queries
+	 */
+	NamedNativeQuery [] value ();
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/NamedNativeQuery.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/NamedNativeQuery.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/NamedNativeQuery.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,39 +0,0 @@
-//$Id$
-//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
-package javax.persistence;
-
-import static java.lang.annotation.ElementType.*;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * Is used to specify a native SQL named query. Query names are scoped to the persistence unit.
- *
- * @author Emmanuel Bernard
- */
- at Target({TYPE})
- at Retention(RUNTIME)
-public @interface NamedNativeQuery {
-	/**
-	 * Is used to refer to the query when using the EntityManager methods that create query objects
-	 */
-	String name();
-	/**
-	 * The SQL query string
-	 */
-	String query();
-
-	/**
-	 * Vendor-specific query hints
-	 */
-	QueryHint[] hints() default {};
-	/**
-	 * The class of the result
-	 */
-	Class resultClass() default void.class;
-	/**
-	 * The name of a SqlResultSetMapping, as defined in metadata
-	 */
-	String resultSetMapping() default ""; // name of SQLResultSetMapping
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/NamedNativeQuery.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/NamedNativeQuery.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/NamedNativeQuery.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/NamedNativeQuery.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,39 @@
+//$Id$
+//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
+package javax.persistence;
+
+import static java.lang.annotation.ElementType.*;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * Is used to specify a native SQL named query. Query names are scoped to the persistence unit.
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({TYPE})
+ at Retention(RUNTIME)
+public @interface NamedNativeQuery {
+	/**
+	 * Is used to refer to the query when using the EntityManager methods that create query objects
+	 */
+	String name();
+	/**
+	 * The SQL query string
+	 */
+	String query();
+
+	/**
+	 * Vendor-specific query hints
+	 */
+	QueryHint[] hints() default {};
+	/**
+	 * The class of the result
+	 */
+	Class resultClass() default void.class;
+	/**
+	 * The name of a SqlResultSetMapping, as defined in metadata
+	 */
+	String resultSetMapping() default ""; // name of SQLResultSetMapping
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/NamedQueries.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/NamedQueries.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/NamedQueries.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,21 +0,0 @@
-//$Id$
-//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
-package javax.persistence;
-
-import static java.lang.annotation.ElementType.TYPE;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * Specifies an array of named Java Persistence query language queries. Query names are scoped to the persistence unit.
- *
- * @author Emmanuel Bernard
- */
- at Target({TYPE}) @Retention(RUNTIME)
-public @interface NamedQueries {
-	/**
-	 * An array of named Java Persistence query language queries.
-	 */
-	NamedQuery [] value ();
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/NamedQueries.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/NamedQueries.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/NamedQueries.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/NamedQueries.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,21 @@
+//$Id$
+//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
+package javax.persistence;
+
+import static java.lang.annotation.ElementType.TYPE;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * Specifies an array of named Java Persistence query language queries. Query names are scoped to the persistence unit.
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({TYPE}) @Retention(RUNTIME)
+public @interface NamedQueries {
+	/**
+	 * An array of named Java Persistence query language queries.
+	 */
+	NamedQuery [] value ();
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/NamedQuery.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/NamedQuery.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/NamedQuery.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,31 +0,0 @@
-//$Id$
-//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
-package javax.persistence;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-import static java.lang.annotation.RetentionPolicy.*;
-import static java.lang.annotation.ElementType.*;
-
-/**
- * Is used to specify a named query in the Java Persistence query language, which is a static
- * query expressed in metadata. Query names are scoped to the persistence unit.
- *
- * @author Emmanuel Bernard
- */
-//TODO remove the mackage target
- at Target({TYPE}) @Retention(RUNTIME)
-public @interface NamedQuery {
-	/**
-	 * Refers to the query when using the EntityManager methods that create query objects.
-	 */
-	String name();
-	/**
-	 * The query string in the Java Persistence query language
-	 */
-	String query();
-	/**
-	 * Vendor-specific query hints
-	 */
-	QueryHint[] hints() default {};
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/NamedQuery.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/NamedQuery.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/NamedQuery.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/NamedQuery.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,31 @@
+//$Id$
+//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
+package javax.persistence;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+import static java.lang.annotation.RetentionPolicy.*;
+import static java.lang.annotation.ElementType.*;
+
+/**
+ * Is used to specify a named query in the Java Persistence query language, which is a static
+ * query expressed in metadata. Query names are scoped to the persistence unit.
+ *
+ * @author Emmanuel Bernard
+ */
+//TODO remove the mackage target
+ at Target({TYPE}) @Retention(RUNTIME)
+public @interface NamedQuery {
+	/**
+	 * Refers to the query when using the EntityManager methods that create query objects.
+	 */
+	String name();
+	/**
+	 * The query string in the Java Persistence query language
+	 */
+	String query();
+	/**
+	 * Vendor-specific query hints
+	 */
+	QueryHint[] hints() default {};
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/NoResultException.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/NoResultException.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/NoResultException.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,27 +0,0 @@
-//$Id$
-package javax.persistence;
-
-/**
- * Thrown by the persistence provider when getSingleResult() is executed on a query and there is no result to return.
- * This exception will not cause the current transaction, if one is active, to be marked for roll back.
- * 
- * @author Emmanuel Bernard
- */
-public class NoResultException extends PersistenceException {
-
-	/**
-	 * Constructs a new NoResultException exception with null as its detail message
-	 */
-	public NoResultException() {
-		super();
-	}
-
-	/**
-	 * Constructs a new NoResultException exception with the specified detail message.
-	 * 
-	 * @param message
-	 */
-	public NoResultException(String message) {
-		super( message );
-	}
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/NoResultException.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/NoResultException.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/NoResultException.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/NoResultException.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,27 @@
+//$Id$
+package javax.persistence;
+
+/**
+ * Thrown by the persistence provider when getSingleResult() is executed on a query and there is no result to return.
+ * This exception will not cause the current transaction, if one is active, to be marked for roll back.
+ * 
+ * @author Emmanuel Bernard
+ */
+public class NoResultException extends PersistenceException {
+
+	/**
+	 * Constructs a new NoResultException exception with null as its detail message
+	 */
+	public NoResultException() {
+		super();
+	}
+
+	/**
+	 * Constructs a new NoResultException exception with the specified detail message.
+	 * 
+	 * @param message
+	 */
+	public NoResultException(String message) {
+		super( message );
+	}
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/NonUniqueResultException.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/NonUniqueResultException.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/NonUniqueResultException.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,29 +0,0 @@
-//$Id$
-package javax.persistence;
-
-/**
- * Thrown by the persistence provider when getSingleResult() is executed on a query and there is more than
- * one result from the query. This exception will not cause the current transaction, if one is active, to be
- * marked for roll back.
- *
- * @author Gavin King
- */
-public class NonUniqueResultException extends PersistenceException {
-
-	/**
-	 * Constructs a new NonUniqueResultException exception with null as its detail message
-	 */
-	public NonUniqueResultException() {
-		super();
-	}
-
-	/**
-	 * Constructs a new NonUniqueResultException exception with the specified detail message
-	 * 
-	 * @param message
-	 */
-	public NonUniqueResultException(String message) {
-		super( message );
-	}
-
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/NonUniqueResultException.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/NonUniqueResultException.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/NonUniqueResultException.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/NonUniqueResultException.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,29 @@
+//$Id$
+package javax.persistence;
+
+/**
+ * Thrown by the persistence provider when getSingleResult() is executed on a query and there is more than
+ * one result from the query. This exception will not cause the current transaction, if one is active, to be
+ * marked for roll back.
+ *
+ * @author Gavin King
+ */
+public class NonUniqueResultException extends PersistenceException {
+
+	/**
+	 * Constructs a new NonUniqueResultException exception with null as its detail message
+	 */
+	public NonUniqueResultException() {
+		super();
+	}
+
+	/**
+	 * Constructs a new NonUniqueResultException exception with the specified detail message
+	 * 
+	 * @param message
+	 */
+	public NonUniqueResultException(String message) {
+		super( message );
+	}
+
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/OneToMany.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/OneToMany.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/OneToMany.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,47 +0,0 @@
-//$Id$
-//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
-package javax.persistence;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-
-import static java.lang.annotation.ElementType.*;
-import static java.lang.annotation.RetentionPolicy.*;
-import static javax.persistence.FetchType.*;
-
-/**
- * Defines a many-valued association with one-to-many multiplicity.
- *
- * If the collection is defined using generics to specify the element type,
- * the associated target entity type need not be specified; otherwise the target
- * entity class must be specified.
- *
- * @author Emmanuel Bernard
- */
- at Target({METHOD, FIELD}) @Retention(RUNTIME)
-public @interface OneToMany {
-	/**
-	 * The entity class that is the target of the association. Optional only if the collection
-	 * property is defined using Java generics. Must be specified otherwise.
-	 *
-	 * Defaults to the parameterized type of the collection when defined using generics.
-	 */
-	Class targetEntity() default void.class;
-	/**
-	 * The operations that must be cascaded to the target of the association.
-	 *
-	 * Defaults to no operations being cascaded.
-	 */
-	CascadeType[] cascade() default {};
-	/**
-	 * Whether the association should be lazily loaded or must be eagerly fetched.
-	 * The EAGER strategy is a requirement on the persistenceprovider runtime that the
-	 * associatedentities must be eagerly fetched. The LAZY strategy is a hint to the
-	 * persistence provider runtime.
-	 */
-	FetchType fetch() default LAZY;
-	/**
-	 * The field that owns the relationship. Required unless the relationship is unidirectional.
-	 */
-	String mappedBy() default "";
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/OneToMany.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/OneToMany.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/OneToMany.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/OneToMany.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,47 @@
+//$Id$
+//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
+package javax.persistence;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+import static javax.persistence.FetchType.*;
+
+/**
+ * Defines a many-valued association with one-to-many multiplicity.
+ *
+ * If the collection is defined using generics to specify the element type,
+ * the associated target entity type need not be specified; otherwise the target
+ * entity class must be specified.
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({METHOD, FIELD}) @Retention(RUNTIME)
+public @interface OneToMany {
+	/**
+	 * The entity class that is the target of the association. Optional only if the collection
+	 * property is defined using Java generics. Must be specified otherwise.
+	 *
+	 * Defaults to the parameterized type of the collection when defined using generics.
+	 */
+	Class targetEntity() default void.class;
+	/**
+	 * The operations that must be cascaded to the target of the association.
+	 *
+	 * Defaults to no operations being cascaded.
+	 */
+	CascadeType[] cascade() default {};
+	/**
+	 * Whether the association should be lazily loaded or must be eagerly fetched.
+	 * The EAGER strategy is a requirement on the persistenceprovider runtime that the
+	 * associatedentities must be eagerly fetched. The LAZY strategy is a hint to the
+	 * persistence provider runtime.
+	 */
+	FetchType fetch() default LAZY;
+	/**
+	 * The field that owns the relationship. Required unless the relationship is unidirectional.
+	 */
+	String mappedBy() default "";
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/OneToOne.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/OneToOne.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/OneToOne.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,51 +0,0 @@
-//$Id$
-//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
-package javax.persistence;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-
-import static java.lang.annotation.ElementType.*;
-import static java.lang.annotation.RetentionPolicy.*;
-import static javax.persistence.FetchType.*;
-
-/**
- * This annotation defines a single-valued association to another entity that has
- * one-to-one multiplicity. It is not normally necessary to specify the associated
- * target entity explicitly since it can usually be inferred from the type of the object
- * being referenced.
- *
- * @author Emmanuel Bernard
- */
- at Target({METHOD, FIELD}) @Retention(RUNTIME)
-public @interface OneToOne {
-	/**
-	 * The entity class that is the target of the association.
-	 *
-	 * Defaults to the type of the field or property that stores the association.
-	 */
-	Class targetEntity() default void.class;
-	/**
-	 * The operations that must be cascaded to the target of the association.
-	 *
-	 * By default no operations are cascaded.
-	 */
-	CascadeType[] cascade() default {};
-	/**
-	 * Whether the association should be lazily loaded or must be eagerly fetched.
-	 * The EAGER strategy is a requirement on the persistence provider runtime that
-	 * the associated entity must be eagerly fetched. The LAZY strategy is a hint to
-	 * the persistence provider runtime.
-	 */
-	FetchType fetch() default EAGER;
-	/**
-	 * Whether the association is optional. If set to false then a non-null relationship must
-	 * always exist.
-	 */
-	boolean optional() default true;
-	/**
-	 * The field that owns the relationship. This element is only specified on the
-	 * inverse (non-owning) side of the association.
-	 */
-	String mappedBy() default "";
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/OneToOne.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/OneToOne.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/OneToOne.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/OneToOne.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,51 @@
+//$Id$
+//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
+package javax.persistence;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+import static javax.persistence.FetchType.*;
+
+/**
+ * This annotation defines a single-valued association to another entity that has
+ * one-to-one multiplicity. It is not normally necessary to specify the associated
+ * target entity explicitly since it can usually be inferred from the type of the object
+ * being referenced.
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({METHOD, FIELD}) @Retention(RUNTIME)
+public @interface OneToOne {
+	/**
+	 * The entity class that is the target of the association.
+	 *
+	 * Defaults to the type of the field or property that stores the association.
+	 */
+	Class targetEntity() default void.class;
+	/**
+	 * The operations that must be cascaded to the target of the association.
+	 *
+	 * By default no operations are cascaded.
+	 */
+	CascadeType[] cascade() default {};
+	/**
+	 * Whether the association should be lazily loaded or must be eagerly fetched.
+	 * The EAGER strategy is a requirement on the persistence provider runtime that
+	 * the associated entity must be eagerly fetched. The LAZY strategy is a hint to
+	 * the persistence provider runtime.
+	 */
+	FetchType fetch() default EAGER;
+	/**
+	 * Whether the association is optional. If set to false then a non-null relationship must
+	 * always exist.
+	 */
+	boolean optional() default true;
+	/**
+	 * The field that owns the relationship. This element is only specified on the
+	 * inverse (non-owning) side of the association.
+	 */
+	String mappedBy() default "";
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/OptimisticLockException.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/OptimisticLockException.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/OptimisticLockException.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,42 +0,0 @@
-//$Id: $
-package javax.persistence;
-
-/**
- * Thrown by the persistence provider when an optimistic locking conflict occurs.
- * This exception may be thrown as part of an API call, a flush or at commit time.
- * The current transaction, if one is active, will be marked for rollback.
- *
- * @author Emmanuel Bernard
- */
-public class OptimisticLockException extends PersistenceException {
-	private Object entity;
-
-	public OptimisticLockException() {
-		super();
-	}
-
-	public OptimisticLockException(Object entity) {
-		this.entity = entity;
-	}
-
-	public OptimisticLockException(Throwable cause) {
-		super( cause );
-	}
-
-	public OptimisticLockException(String message) {
-		super( message );
-	}
-
-	public OptimisticLockException(String message, Throwable cause) {
-		super( message, cause );
-	}
-
-	public OptimisticLockException(String message, Throwable cause, Object entity) {
-		super( message, cause );
-		this.entity = entity;
-	}
-
-	public Object getEntity() {
-		return entity;
-	}
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/OptimisticLockException.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/OptimisticLockException.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/OptimisticLockException.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/OptimisticLockException.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,42 @@
+//$Id: $
+package javax.persistence;
+
+/**
+ * Thrown by the persistence provider when an optimistic locking conflict occurs.
+ * This exception may be thrown as part of an API call, a flush or at commit time.
+ * The current transaction, if one is active, will be marked for rollback.
+ *
+ * @author Emmanuel Bernard
+ */
+public class OptimisticLockException extends PersistenceException {
+	private Object entity;
+
+	public OptimisticLockException() {
+		super();
+	}
+
+	public OptimisticLockException(Object entity) {
+		this.entity = entity;
+	}
+
+	public OptimisticLockException(Throwable cause) {
+		super( cause );
+	}
+
+	public OptimisticLockException(String message) {
+		super( message );
+	}
+
+	public OptimisticLockException(String message, Throwable cause) {
+		super( message, cause );
+	}
+
+	public OptimisticLockException(String message, Throwable cause, Object entity) {
+		super( message, cause );
+		this.entity = entity;
+	}
+
+	public Object getEntity() {
+		return entity;
+	}
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/OrderBy.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/OrderBy.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/OrderBy.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,39 +0,0 @@
-//$Id$
-//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
-package javax.persistence;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-import static java.lang.annotation.ElementType.*;
-import static java.lang.annotation.RetentionPolicy.*;
-
-/**
- * This annotation specifies the ordering of the elements of a collection valued association at the
- * point when the association is retrieved.
- *
- * The syntax of the value ordering element is an orderby_list, as follows:
- *   <code>orderby_list::= orderby_item [,orderby_item]*
- *  orderby_item::= property_or_field_name [ASC | DESC]</code>
- *
- * If ASC or DESC is not specified, ASC (ascending order) is assumed.
- *
- * If the ordering element is not specified, ordering by the primary key of the associated
- * entity is assumed.
- *
- * The property or field name must correspond to that of a persistent property or field of the
- * associated class. The properties or fields used in the ordering must correspond to columns
- * for which comparison operators are supported.
- *
- * @author Emmanuel Bernard
- */
- at Target({METHOD, FIELD}) @Retention(RUNTIME)
-public @interface OrderBy {
-	/**
-	 * An orderby_list, specified as follows:
-	 * orderby_list::= orderby_item [,orderby_item]* orderby_item::= property_or_field_name [ASC | DESC]
-	 *
-	 * If ASC or DESC is not specified, ASC (ascending order) is assumed.
-	 *
-	 */
-	String value() default "";
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/OrderBy.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/OrderBy.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/OrderBy.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/OrderBy.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,39 @@
+//$Id$
+//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
+package javax.persistence;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+/**
+ * This annotation specifies the ordering of the elements of a collection valued association at the
+ * point when the association is retrieved.
+ *
+ * The syntax of the value ordering element is an orderby_list, as follows:
+ *   <code>orderby_list::= orderby_item [,orderby_item]*
+ *  orderby_item::= property_or_field_name [ASC | DESC]</code>
+ *
+ * If ASC or DESC is not specified, ASC (ascending order) is assumed.
+ *
+ * If the ordering element is not specified, ordering by the primary key of the associated
+ * entity is assumed.
+ *
+ * The property or field name must correspond to that of a persistent property or field of the
+ * associated class. The properties or fields used in the ordering must correspond to columns
+ * for which comparison operators are supported.
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({METHOD, FIELD}) @Retention(RUNTIME)
+public @interface OrderBy {
+	/**
+	 * An orderby_list, specified as follows:
+	 * orderby_list::= orderby_item [,orderby_item]* orderby_item::= property_or_field_name [ASC | DESC]
+	 *
+	 * If ASC or DESC is not specified, ASC (ascending order) is assumed.
+	 *
+	 */
+	String value() default "";
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/Persistence.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/Persistence.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/Persistence.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,110 +0,0 @@
-// $Id$
-package javax.persistence;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.net.URL;
-import java.util.Enumeration;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import javax.persistence.spi.PersistenceProvider;
-
-/**
- * Bootstrap class that provides access to an EntityManagerFactory.
- */
-public class Persistence {
-
-	public static String PERSISTENCE_PROVIDER = PersistenceProvider.class.getName();
-
-	protected static final Set<PersistenceProvider> providers = new HashSet<PersistenceProvider>();
-
-	/**
-	 * Create and return an EntityManagerFactory for the named persistence unit.
-	 *
-	 * @param persistenceUnitName The name of the persistence unit
-	 * @return The factory that creates EntityManagers configured according to the specified persistence unit
-	 */
-	public static EntityManagerFactory createEntityManagerFactory(String persistenceUnitName) {
-		return createEntityManagerFactory( persistenceUnitName, null );
-	}
-
-	/**
-	 * Create and return an EntityManagerFactory for the named persistence unit using the given properties.
-	 *
-	 * @param persistenceUnitName The name of the persistence unit
-	 * @param properties Additional properties to use when creating the factory. The values of these properties override
-	 * any values that may have been configured elsewhere
-	 * @return The factory that creates EntityManagers configured according to the specified persistence unit
-	 */
-	public static EntityManagerFactory createEntityManagerFactory(String persistenceUnitName, Map properties) {
-		EntityManagerFactory emf = null;
-
-		if ( providers.size() == 0 ) {
-			findAllProviders();
-		}
-		for ( PersistenceProvider provider : providers ) {
-			emf = provider.createEntityManagerFactory( persistenceUnitName, properties );
-			if ( emf != null ) break;
-		}
-		if ( emf == null ) {
-			throw new PersistenceException( "No Persistence provider for EntityManager named " + persistenceUnitName );
-		}
-		return emf;
-	}
-
-	// Helper methods
-
-	private static void findAllProviders() {
-		try {
-			ClassLoader loader = Thread.currentThread().getContextClassLoader();
-			Enumeration<URL> resources = loader.getResources( "META-INF/services/" + PersistenceProvider.class.getName() );
-			Set<String> names = new HashSet<String>();
-			while ( resources.hasMoreElements() ) {
-				URL url = resources.nextElement();
-				InputStream is = url.openStream();
-				try {
-					names.addAll( providerNamesFromReader( new BufferedReader( new InputStreamReader( is ) ) ) );
-				}
-				finally {
-					is.close();
-				}
-			}
-			for ( String s : names ) {
-				Class providerClass = loader.loadClass( s );
-				providers.add( (PersistenceProvider) providerClass.newInstance() );
-			}
-		}
-		catch (IOException e) {
-			throw new PersistenceException( e );
-		}
-		catch (InstantiationException e) {
-			throw new PersistenceException( e );
-		}
-		catch (IllegalAccessException e) {
-			throw new PersistenceException( e );
-		}
-		catch (ClassNotFoundException e) {
-			throw new PersistenceException( e );
-		}
-	}
-
-	private static final Pattern nonCommentPattern = Pattern.compile( "^([^#]+)" );
-
-	private static Set<String> providerNamesFromReader(BufferedReader reader) throws IOException {
-		Set<String> names = new HashSet<String>();
-		String line;
-		while ( ( line = reader.readLine() ) != null ) {
-			line = line.trim();
-			Matcher m = nonCommentPattern.matcher( line );
-			if ( m.find() ) {
-				names.add( m.group().trim() );
-			}
-		}
-		return names;
-	}
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/Persistence.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/Persistence.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/Persistence.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/Persistence.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,110 @@
+// $Id$
+package javax.persistence;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.util.Enumeration;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import javax.persistence.spi.PersistenceProvider;
+
+/**
+ * Bootstrap class that provides access to an EntityManagerFactory.
+ */
+public class Persistence {
+
+	public static String PERSISTENCE_PROVIDER = PersistenceProvider.class.getName();
+
+	protected static final Set<PersistenceProvider> providers = new HashSet<PersistenceProvider>();
+
+	/**
+	 * Create and return an EntityManagerFactory for the named persistence unit.
+	 *
+	 * @param persistenceUnitName The name of the persistence unit
+	 * @return The factory that creates EntityManagers configured according to the specified persistence unit
+	 */
+	public static EntityManagerFactory createEntityManagerFactory(String persistenceUnitName) {
+		return createEntityManagerFactory( persistenceUnitName, null );
+	}
+
+	/**
+	 * Create and return an EntityManagerFactory for the named persistence unit using the given properties.
+	 *
+	 * @param persistenceUnitName The name of the persistence unit
+	 * @param properties Additional properties to use when creating the factory. The values of these properties override
+	 * any values that may have been configured elsewhere
+	 * @return The factory that creates EntityManagers configured according to the specified persistence unit
+	 */
+	public static EntityManagerFactory createEntityManagerFactory(String persistenceUnitName, Map properties) {
+		EntityManagerFactory emf = null;
+
+		if ( providers.size() == 0 ) {
+			findAllProviders();
+		}
+		for ( PersistenceProvider provider : providers ) {
+			emf = provider.createEntityManagerFactory( persistenceUnitName, properties );
+			if ( emf != null ) break;
+		}
+		if ( emf == null ) {
+			throw new PersistenceException( "No Persistence provider for EntityManager named " + persistenceUnitName );
+		}
+		return emf;
+	}
+
+	// Helper methods
+
+	private static void findAllProviders() {
+		try {
+			ClassLoader loader = Thread.currentThread().getContextClassLoader();
+			Enumeration<URL> resources = loader.getResources( "META-INF/services/" + PersistenceProvider.class.getName() );
+			Set<String> names = new HashSet<String>();
+			while ( resources.hasMoreElements() ) {
+				URL url = resources.nextElement();
+				InputStream is = url.openStream();
+				try {
+					names.addAll( providerNamesFromReader( new BufferedReader( new InputStreamReader( is ) ) ) );
+				}
+				finally {
+					is.close();
+				}
+			}
+			for ( String s : names ) {
+				Class providerClass = loader.loadClass( s );
+				providers.add( (PersistenceProvider) providerClass.newInstance() );
+			}
+		}
+		catch (IOException e) {
+			throw new PersistenceException( e );
+		}
+		catch (InstantiationException e) {
+			throw new PersistenceException( e );
+		}
+		catch (IllegalAccessException e) {
+			throw new PersistenceException( e );
+		}
+		catch (ClassNotFoundException e) {
+			throw new PersistenceException( e );
+		}
+	}
+
+	private static final Pattern nonCommentPattern = Pattern.compile( "^([^#]+)" );
+
+	private static Set<String> providerNamesFromReader(BufferedReader reader) throws IOException {
+		Set<String> names = new HashSet<String>();
+		String line;
+		while ( ( line = reader.readLine() ) != null ) {
+			line = line.trim();
+			Matcher m = nonCommentPattern.matcher( line );
+			if ( m.find() ) {
+				names.add( m.group().trim() );
+			}
+		}
+		return names;
+	}
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/PersistenceContext.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/PersistenceContext.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/PersistenceContext.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,43 +0,0 @@
-/* $Id$
- * JBoss Inc
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package javax.persistence;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Expresses a dependency on an EntityManager persistence context.
- *
- * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
- */
- at Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
- at Retention(RetentionPolicy.RUNTIME)
-public @interface PersistenceContext {
-	/**
-	 * The name by which the entity manager is to be accessed in the environment referencing context,
-	 * and is not needed when dependency injection is used.
-	 */
-	String name() default "";
-	/**
-	 * The name of the persistence unit. If the unitName element is specified, the persistence unit
-	 * for the entity manager that is accessible in JNDI must have the same name.
-	 */
-	String unitName() default "";
-	/**
-	 * Used to specify properties for the container or persistence provider. Vendor specific
-	 * properties may be included in this set of properties. Properties that are not
-	 * recognized by a vendor are ignored.
-	 */
-	PersistenceProperty[] properties() default {};
-	/**
-	 * Specifies whether this is a transaction-scoped persistence context or
-	 * an extended persistence context.
-	 */
-	PersistenceContextType type() default PersistenceContextType.TRANSACTION;
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/PersistenceContext.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/PersistenceContext.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/PersistenceContext.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/PersistenceContext.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,43 @@
+/* $Id$
+ * JBoss Inc
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package javax.persistence;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Expresses a dependency on an EntityManager persistence context.
+ *
+ * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
+ */
+ at Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
+ at Retention(RetentionPolicy.RUNTIME)
+public @interface PersistenceContext {
+	/**
+	 * The name by which the entity manager is to be accessed in the environment referencing context,
+	 * and is not needed when dependency injection is used.
+	 */
+	String name() default "";
+	/**
+	 * The name of the persistence unit. If the unitName element is specified, the persistence unit
+	 * for the entity manager that is accessible in JNDI must have the same name.
+	 */
+	String unitName() default "";
+	/**
+	 * Used to specify properties for the container or persistence provider. Vendor specific
+	 * properties may be included in this set of properties. Properties that are not
+	 * recognized by a vendor are ignored.
+	 */
+	PersistenceProperty[] properties() default {};
+	/**
+	 * Specifies whether this is a transaction-scoped persistence context or
+	 * an extended persistence context.
+	 */
+	PersistenceContextType type() default PersistenceContextType.TRANSACTION;
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/PersistenceContextType.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/PersistenceContextType.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/PersistenceContextType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,18 +0,0 @@
-//$Id$
-package javax.persistence;
-
-/**
- * Specifies whether a transaction-scoped or extended persistence context is to be used in
- * PersistenceContext. If the type element is not specified, a transaction-scoped persistence
- * context is used.
- */
-public enum PersistenceContextType {
-	/**
-	 * Transaction-scoped persistence context
-	 */
-	TRANSACTION,
-	/**
-	 * Extended persistence context
-	 */
-	EXTENDED
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/PersistenceContextType.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/PersistenceContextType.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/PersistenceContextType.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/PersistenceContextType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,18 @@
+//$Id$
+package javax.persistence;
+
+/**
+ * Specifies whether a transaction-scoped or extended persistence context is to be used in
+ * PersistenceContext. If the type element is not specified, a transaction-scoped persistence
+ * context is used.
+ */
+public enum PersistenceContextType {
+	/**
+	 * Transaction-scoped persistence context
+	 */
+	TRANSACTION,
+	/**
+	 * Extended persistence context
+	 */
+	EXTENDED
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/PersistenceContexts.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/PersistenceContexts.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/PersistenceContexts.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,27 +0,0 @@
-/* $Id$
- * JBoss Inc
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package javax.persistence;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Declares one or more PersistenceContext annotations. It is used to express a dependency on
- * container-managed entity manager persistence contexts.
- *
- * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
- */
- at Target({ElementType.TYPE})
- at Retention(RetentionPolicy.RUNTIME)
-public @interface PersistenceContexts {
-	/**
-	 * One or more persistence context
-	 */
-	PersistenceContext[] value();
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/PersistenceContexts.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/PersistenceContexts.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/PersistenceContexts.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/PersistenceContexts.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,27 @@
+/* $Id$
+ * JBoss Inc
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package javax.persistence;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Declares one or more PersistenceContext annotations. It is used to express a dependency on
+ * container-managed entity manager persistence contexts.
+ *
+ * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
+ */
+ at Target({ElementType.TYPE})
+ at Retention(RetentionPolicy.RUNTIME)
+public @interface PersistenceContexts {
+	/**
+	 * One or more persistence context
+	 */
+	PersistenceContext[] value();
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/PersistenceException.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/PersistenceException.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/PersistenceException.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,50 +0,0 @@
-/* $Id$
- * JBoss, Inc
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package javax.persistence;
-
-/**
- * Thrown by the persistence provider when a problem occurs. All instances of PersistenceException
- * except for instances of NoResultException and NonUniqueResultException will cause the current
- * transaction, if one is active, to be marked for rollback.
- *
- * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
- */
-public class PersistenceException extends RuntimeException {
-	/**
-	 * Constructs a new PersistenceException exception with null as its detail message.
-	 */
-	public PersistenceException() {
-	}
-
-	/**
-	 * Constructs a new PersistenceException exception with the specified detail message.
-	 *
-	 * @param message the detail message
-	 */
-	public PersistenceException(String message) {
-		super( message );
-	}
-
-	/**
-	 * Constructs a new PersistenceException exception with the specified detail message and cause
-	 *
-	 * @param message the detail message
-	 * @param cause the cause
-	 */
-	public PersistenceException(String message, Throwable cause) {
-		super( message, cause );
-	}
-
-	/**
-	 * Constructs a new PersistenceException exception with the specified cause
-	 *
-	 * @param cause the cause
-	 */
-	public PersistenceException(Throwable cause) {
-		super( cause );
-	}
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/PersistenceException.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/PersistenceException.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/PersistenceException.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/PersistenceException.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,50 @@
+/* $Id$
+ * JBoss, Inc
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package javax.persistence;
+
+/**
+ * Thrown by the persistence provider when a problem occurs. All instances of PersistenceException
+ * except for instances of NoResultException and NonUniqueResultException will cause the current
+ * transaction, if one is active, to be marked for rollback.
+ *
+ * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
+ */
+public class PersistenceException extends RuntimeException {
+	/**
+	 * Constructs a new PersistenceException exception with null as its detail message.
+	 */
+	public PersistenceException() {
+	}
+
+	/**
+	 * Constructs a new PersistenceException exception with the specified detail message.
+	 *
+	 * @param message the detail message
+	 */
+	public PersistenceException(String message) {
+		super( message );
+	}
+
+	/**
+	 * Constructs a new PersistenceException exception with the specified detail message and cause
+	 *
+	 * @param message the detail message
+	 * @param cause the cause
+	 */
+	public PersistenceException(String message, Throwable cause) {
+		super( message, cause );
+	}
+
+	/**
+	 * Constructs a new PersistenceException exception with the specified cause
+	 *
+	 * @param cause the cause
+	 */
+	public PersistenceException(Throwable cause) {
+		super( cause );
+	}
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/PersistenceProperty.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/PersistenceProperty.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/PersistenceProperty.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,27 +0,0 @@
-//$Id: $
-package javax.persistence;
-
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * Describes a single container or persistence provider property.
- * Vendor specific properties may be included in the set of properties, and are passed to the persistence
- * provider by the container when the entity manager is created.
- * Properties that are not recognized by a vendor will be ignored.
- *  
- * @author Emmanuel Bernard
- */
- at Target({})
- at Retention(RUNTIME)
-public @interface PersistenceProperty {
-	/**
-	 * The name of the property
-	 */
-	String name();
-	/**
-	 * The value of the property
-	 */
-	String value();
-}
\ No newline at end of file

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/PersistenceProperty.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/PersistenceProperty.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/PersistenceProperty.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/PersistenceProperty.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,27 @@
+//$Id: $
+package javax.persistence;
+
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * Describes a single container or persistence provider property.
+ * Vendor specific properties may be included in the set of properties, and are passed to the persistence
+ * provider by the container when the entity manager is created.
+ * Properties that are not recognized by a vendor will be ignored.
+ *  
+ * @author Emmanuel Bernard
+ */
+ at Target({})
+ at Retention(RUNTIME)
+public @interface PersistenceProperty {
+	/**
+	 * The name of the property
+	 */
+	String name();
+	/**
+	 * The value of the property
+	 */
+	String value();
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/PersistenceUnit.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/PersistenceUnit.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/PersistenceUnit.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,33 +0,0 @@
-/* $Id$
- * JBoss Inc
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package javax.persistence;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Expresses a dependency on an EntityManagerFactory.
- *
- * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
- */
- at Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
- at Retention(RetentionPolicy.RUNTIME)
-public @interface PersistenceUnit {
-	/**
-	 * The name by which the entity manager factory is to be accessed in the environment
-	 * referencing context, and is not needed when dependency injection is used.
-	 */
-	String name() default "";
-	/**
-	 * The name of the persistence unit as defined in the persistence.xml file. If specified, the
-	 * persistence unit for the entity manager factory that is accessible in JNDI must have the
-	 * same name.
-	 */
-	String unitName() default "";
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/PersistenceUnit.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/PersistenceUnit.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/PersistenceUnit.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/PersistenceUnit.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,33 @@
+/* $Id$
+ * JBoss Inc
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package javax.persistence;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Expresses a dependency on an EntityManagerFactory.
+ *
+ * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
+ */
+ at Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
+ at Retention(RetentionPolicy.RUNTIME)
+public @interface PersistenceUnit {
+	/**
+	 * The name by which the entity manager factory is to be accessed in the environment
+	 * referencing context, and is not needed when dependency injection is used.
+	 */
+	String name() default "";
+	/**
+	 * The name of the persistence unit as defined in the persistence.xml file. If specified, the
+	 * persistence unit for the entity manager factory that is accessible in JNDI must have the
+	 * same name.
+	 */
+	String unitName() default "";
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/PersistenceUnits.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/PersistenceUnits.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/PersistenceUnits.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,26 +0,0 @@
-/* $Id$
- * JBoss Inc
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package javax.persistence;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Declares one or more PersistenceUnit annotations
- *
- * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
- */
- at Target({ElementType.TYPE})
- at Retention(RetentionPolicy.RUNTIME)
-public @interface PersistenceUnits {
-	/**
-	 * One or more PersistenceUnit annotations
-	 */
-	PersistenceUnit[] value();
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/PersistenceUnits.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/PersistenceUnits.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/PersistenceUnits.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/PersistenceUnits.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,26 @@
+/* $Id$
+ * JBoss Inc
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package javax.persistence;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Declares one or more PersistenceUnit annotations
+ *
+ * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
+ */
+ at Target({ElementType.TYPE})
+ at Retention(RetentionPolicy.RUNTIME)
+public @interface PersistenceUnits {
+	/**
+	 * One or more PersistenceUnit annotations
+	 */
+	PersistenceUnit[] value();
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/PostLoad.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/PostLoad.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/PostLoad.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,24 +0,0 @@
-/* $Id$
- * JBoss Inc
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package javax.persistence;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-
-/**
- * Is used to specify callback methods for the corresponding lifecycle event. This annotation may be applied to
- * methods of an entity class, a mapped superclass, or a callback listener class.
- *
- * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
- */
- at Target({ElementType.METHOD})
- at Retention(RetentionPolicy.RUNTIME)
-public @interface PostLoad {
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/PostLoad.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/PostLoad.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/PostLoad.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/PostLoad.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,24 @@
+/* $Id$
+ * JBoss Inc
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package javax.persistence;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+
+/**
+ * Is used to specify callback methods for the corresponding lifecycle event. This annotation may be applied to
+ * methods of an entity class, a mapped superclass, or a callback listener class.
+ *
+ * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
+ */
+ at Target({ElementType.METHOD})
+ at Retention(RetentionPolicy.RUNTIME)
+public @interface PostLoad {
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/PostPersist.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/PostPersist.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/PostPersist.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,25 +0,0 @@
-/* $Id$
- * JBoss Inc
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-
-package javax.persistence;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-
-/**
- * Is used to specify callback methods for the corresponding lifecycle event. This annotation may be
- * applied to methods of an entity class, a mapped superclass, or a callback listener class.
- *
- * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
- */
- at Target({ElementType.METHOD})
- at Retention(RetentionPolicy.RUNTIME)
-public @interface PostPersist {
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/PostPersist.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/PostPersist.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/PostPersist.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/PostPersist.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,25 @@
+/* $Id$
+ * JBoss Inc
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+
+package javax.persistence;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+
+/**
+ * Is used to specify callback methods for the corresponding lifecycle event. This annotation may be
+ * applied to methods of an entity class, a mapped superclass, or a callback listener class.
+ *
+ * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
+ */
+ at Target({ElementType.METHOD})
+ at Retention(RetentionPolicy.RUNTIME)
+public @interface PostPersist {
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/PostRemove.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/PostRemove.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/PostRemove.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,25 +0,0 @@
-/* $Id$
- * JBoss Inc
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-
-package javax.persistence;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-
-/**
- * Is used to specify callback methods for the corresponding lifecycle event. This annotation may be applied
- * to methods of an entity class, a mapped superclass, or a callback listener class.
- *
- * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
- */
- at Target({ElementType.METHOD})
- at Retention(RetentionPolicy.RUNTIME)
-public @interface PostRemove {
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/PostRemove.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/PostRemove.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/PostRemove.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/PostRemove.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,25 @@
+/* $Id$
+ * JBoss Inc
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+
+package javax.persistence;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+
+/**
+ * Is used to specify callback methods for the corresponding lifecycle event. This annotation may be applied
+ * to methods of an entity class, a mapped superclass, or a callback listener class.
+ *
+ * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
+ */
+ at Target({ElementType.METHOD})
+ at Retention(RetentionPolicy.RUNTIME)
+public @interface PostRemove {
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/PostUpdate.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/PostUpdate.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/PostUpdate.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,25 +0,0 @@
-/* $Id$
- * JBoss Inc
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-
-package javax.persistence;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-
-/**
- * Is used to specify callback methods for the corresponding lifecycle event. This annotation may be applied to
- * methods of an entity class, a mapped superclass, or a callback listener class.
- *
- * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
- */
- at Target({ElementType.METHOD})
- at Retention(RetentionPolicy.RUNTIME)
-public @interface PostUpdate {
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/PostUpdate.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/PostUpdate.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/PostUpdate.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/PostUpdate.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,25 @@
+/* $Id$
+ * JBoss Inc
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+
+package javax.persistence;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+
+/**
+ * Is used to specify callback methods for the corresponding lifecycle event. This annotation may be applied to
+ * methods of an entity class, a mapped superclass, or a callback listener class.
+ *
+ * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
+ */
+ at Target({ElementType.METHOD})
+ at Retention(RetentionPolicy.RUNTIME)
+public @interface PostUpdate {
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/PrePersist.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/PrePersist.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/PrePersist.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,25 +0,0 @@
-/* $Id$
- * JBoss Inc
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-
-package javax.persistence;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-
-/**
- * Is used to specify callback methods for the corresponding lifecycle event. This annotation may be applied
- * to methods of an entity class, a mapped superclass, or a callback listener class.
- *
- * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
- */
- at Target({ElementType.METHOD})
- at Retention(RetentionPolicy.RUNTIME)
-public @interface PrePersist {
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/PrePersist.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/PrePersist.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/PrePersist.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/PrePersist.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,25 @@
+/* $Id$
+ * JBoss Inc
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+
+package javax.persistence;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+
+/**
+ * Is used to specify callback methods for the corresponding lifecycle event. This annotation may be applied
+ * to methods of an entity class, a mapped superclass, or a callback listener class.
+ *
+ * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
+ */
+ at Target({ElementType.METHOD})
+ at Retention(RetentionPolicy.RUNTIME)
+public @interface PrePersist {
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/PreRemove.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/PreRemove.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/PreRemove.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,25 +0,0 @@
-/* $Id$
- * JBoss Inc
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-
-package javax.persistence;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-
-/**
- * Is used to specify callback methods for the corresponding lifecycle event. This annotation may be applied
- * to methods of an entity class, a mapped superclass, or a callback listener class.
- *
- * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
- */
- at Target({ElementType.METHOD})
- at Retention(RetentionPolicy.RUNTIME)
-public @interface PreRemove {
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/PreRemove.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/PreRemove.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/PreRemove.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/PreRemove.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,25 @@
+/* $Id$
+ * JBoss Inc
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+
+package javax.persistence;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+
+/**
+ * Is used to specify callback methods for the corresponding lifecycle event. This annotation may be applied
+ * to methods of an entity class, a mapped superclass, or a callback listener class.
+ *
+ * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
+ */
+ at Target({ElementType.METHOD})
+ at Retention(RetentionPolicy.RUNTIME)
+public @interface PreRemove {
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/PreUpdate.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/PreUpdate.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/PreUpdate.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,25 +0,0 @@
-/* $Id$
- * JBoss Inc
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-
-package javax.persistence;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-
-/**
- * Is used to specify callback methods for the corresponding lifecycle event. This annotation may be
- * applied to methods of an entity class, a mapped superclass, or a callback listener class.
- *
- * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
- */
- at Target({ElementType.METHOD})
- at Retention(RetentionPolicy.RUNTIME)
-public @interface PreUpdate {
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/PreUpdate.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/PreUpdate.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/PreUpdate.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/PreUpdate.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,25 @@
+/* $Id$
+ * JBoss Inc
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+
+package javax.persistence;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+
+/**
+ * Is used to specify callback methods for the corresponding lifecycle event. This annotation may be
+ * applied to methods of an entity class, a mapped superclass, or a callback listener class.
+ *
+ * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
+ */
+ at Target({ElementType.METHOD})
+ at Retention(RetentionPolicy.RUNTIME)
+public @interface PreUpdate {
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/PrimaryKeyJoinColumn.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/PrimaryKeyJoinColumn.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/PrimaryKeyJoinColumn.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,53 +0,0 @@
-//$Id$
-//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
-package javax.persistence;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-
-import static java.lang.annotation.ElementType.*;
-import static java.lang.annotation.RetentionPolicy.*;
-
-/**
- * This annotation specifies a primary key column that is used as a foreign key to join to another
- * table.
- *
- * It is used to join the primary table of an entity subclass in the JOINED mapping strategy to
- * the primary table of its superclass; it is used within a SecondaryTable annotation to join a
- * secondary table to a primary table; and it may be used in a OneToOne mapping in which the
- * primary key of the referencing entity is used as a foreign key to the referenced entity.
- *
- * If no PrimaryKeyJoinColumn annotation is specified for a subclass in the JOINED mapping
- * strategy, the foreign key columns are assumed to have the same names as the primary key
- * columns of the primary table of the superclass
- *
- * @author Emmanuel Bernard
- */
- at Target({TYPE, METHOD, FIELD}) @Retention(RUNTIME)
-public @interface PrimaryKeyJoinColumn {
-	/**
-	 * The name of the primary key column of the current table.
-	 *
-	 * Defaults to the same name as the primary key column of the primary table of the
-	 * superclass (JOINED mapping strategy); the same name as the primary key column of
-	 * the primary table (SecondaryTable mapping); or the same name as the primary key
-	 * column for the table for the referencing entity (OneToOne mapping)
-	 */
-	String name() default "";
-	/**
-	 * The name of the primary key column of the table being joined to.
-	 *
-	 * Defaults to the same name as the primary key column of the primary table of the
-	 * superclass (JOINED mapping strategy); the same name as the primary key column of the
-	 * primary table (SecondaryTable mapping); or the same name as the primary key column for
-	 * the table for the referencing entity (OneToOne mapping)
-	 */
-	String referencedColumnName() default "";
-	/**
-	 * The SQL fragment that is used when generating the DDL for the column. This should not be
-	 * specified for a OneToOne primary key association.
-	 *
-	 * Defaults to the generated SQL to create a column of the inferred type.
-	 */
-	String columnDefinition() default "";
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/PrimaryKeyJoinColumn.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/PrimaryKeyJoinColumn.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/PrimaryKeyJoinColumn.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/PrimaryKeyJoinColumn.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,53 @@
+//$Id$
+//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
+package javax.persistence;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+/**
+ * This annotation specifies a primary key column that is used as a foreign key to join to another
+ * table.
+ *
+ * It is used to join the primary table of an entity subclass in the JOINED mapping strategy to
+ * the primary table of its superclass; it is used within a SecondaryTable annotation to join a
+ * secondary table to a primary table; and it may be used in a OneToOne mapping in which the
+ * primary key of the referencing entity is used as a foreign key to the referenced entity.
+ *
+ * If no PrimaryKeyJoinColumn annotation is specified for a subclass in the JOINED mapping
+ * strategy, the foreign key columns are assumed to have the same names as the primary key
+ * columns of the primary table of the superclass
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({TYPE, METHOD, FIELD}) @Retention(RUNTIME)
+public @interface PrimaryKeyJoinColumn {
+	/**
+	 * The name of the primary key column of the current table.
+	 *
+	 * Defaults to the same name as the primary key column of the primary table of the
+	 * superclass (JOINED mapping strategy); the same name as the primary key column of
+	 * the primary table (SecondaryTable mapping); or the same name as the primary key
+	 * column for the table for the referencing entity (OneToOne mapping)
+	 */
+	String name() default "";
+	/**
+	 * The name of the primary key column of the table being joined to.
+	 *
+	 * Defaults to the same name as the primary key column of the primary table of the
+	 * superclass (JOINED mapping strategy); the same name as the primary key column of the
+	 * primary table (SecondaryTable mapping); or the same name as the primary key column for
+	 * the table for the referencing entity (OneToOne mapping)
+	 */
+	String referencedColumnName() default "";
+	/**
+	 * The SQL fragment that is used when generating the DDL for the column. This should not be
+	 * specified for a OneToOne primary key association.
+	 *
+	 * Defaults to the generated SQL to create a column of the inferred type.
+	 */
+	String columnDefinition() default "";
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/PrimaryKeyJoinColumns.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/PrimaryKeyJoinColumns.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/PrimaryKeyJoinColumns.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,22 +0,0 @@
-//$Id$
-//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
-package javax.persistence;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-
-import static java.lang.annotation.ElementType.*;
-import static java.lang.annotation.RetentionPolicy.*;
-
-/**
- * This annotation groups PrimaryKeyJoinColumn annotations. It is used to map composite foreign keys.
- *
- * @author Emmanuel Bernard
- */
- at Target({TYPE, METHOD, FIELD}) @Retention(RUNTIME)
-public @interface PrimaryKeyJoinColumns {
-	/**
-	 * One or more PrimaryKeyJoinColumn annotations
-	 */
-	PrimaryKeyJoinColumn[] value();
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/PrimaryKeyJoinColumns.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/PrimaryKeyJoinColumns.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/PrimaryKeyJoinColumns.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/PrimaryKeyJoinColumns.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,22 @@
+//$Id$
+//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
+package javax.persistence;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+/**
+ * This annotation groups PrimaryKeyJoinColumn annotations. It is used to map composite foreign keys.
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({TYPE, METHOD, FIELD}) @Retention(RUNTIME)
+public @interface PrimaryKeyJoinColumns {
+	/**
+	 * One or more PrimaryKeyJoinColumn annotations
+	 */
+	PrimaryKeyJoinColumn[] value();
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/Query.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/Query.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/Query.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,148 +0,0 @@
-// $Id$
-package javax.persistence;
-
-import java.util.Calendar;
-import java.util.Date;
-import java.util.List;
-
-
-/**
- * Interface used to control query execution.
- */
-public interface Query
-{
-   /**
-    * Execute the query and return the query results as a List.
-    *
-    * @return a list of the results
-    * @throws IllegalStateException f called for a Java Persistence query language UPDATE or DELETE statement
-    */
-   public List getResultList();
-
-   /**
-    * Execute a SELECT query that returns a single result.
-    *
-    * @return the result
-    * @throws NoResultException        if there is no result
-    * @throws NonUniqueResultException if more than one result
-    * @throws IllegalStateException    if called for a Java
-    *                                  Persistence query language UPDATE or DELETE statement
-    */
-   public Object getSingleResult();
-
-   /**
-    * Execute an update or delete statement.
-    *
-    * @return the number of entities updated or deleted
-    * @throws IllegalStateException        if called for a Java Persistence query language SELECT statement
-    * @throws TransactionRequiredException if there is no transaction
-    */
-   public int executeUpdate();
-
-   /**
-    * Set the maximum number of results to retrieve.
-    *
-    * @param maxResult
-    * @return the same query instance
-    * @throws IllegalArgumentException if argument is negative
-    */
-   public Query setMaxResults(int maxResult);
-
-   /**
-    * Set the position of the first result to retrieve.
-    *
-    * @param startPosition position of the first result, numbered from 0
-    * @return the same query instance
-    * @throws IllegalArgumentException if argument is negative
-    */
-   public Query setFirstResult(int startPosition);
-
-   /**
-    * Set an implementation-specific hint. If the hint name is not recognized, it is silently
-    * ignored.
-    *
-    * @param hintName
-    * @param value
-    * @return the same query instance
-    * @throws IllegalArgumentException if the second argument is not valid for the implementation
-    */
-   public Query setHint(String hintName, Object value);
-
-   /**
-    * Bind an argument to a named parameter.
-    *
-    * @param name  the parameter name
-    * @param value
-    * @return the same query instance
-    * @throws IllegalArgumentException if parameter name does not correspond to parameter in query
-    *                                  string or argument is of incorrect type
-    */
-   public Query setParameter(String name, Object value);
-
-   /**
-    * Bind an instance of java.util.Date to a named parameter.
-    *
-    * @param name
-    * @param value
-    * @param temporalType
-    * @return the same query instance
-    * @throws IllegalArgumentException if parameter name does not correspond to parameter in query
-    *                                  string
-    */
-   public Query setParameter(String name, Date value, TemporalType temporalType);
-
-   /**
-    * Bind an instance of java.util.Calendar to a named parameter.
-    *
-    * @param name
-    * @param value
-    * @param temporalType
-    * @return the same query instance
-    * @throws IllegalArgumentException if parameter name does not correspond to parameter in query
-    *                                  string
-    */
-   public Query setParameter(String name, Calendar value, TemporalType temporalType);
-
-   /**
-    * Bind an argument to a positional parameter.
-    *
-    * @param position
-    * @param value
-    * @return the same query instance
-    * @throws IllegalArgumentException if position does not correspond to positional parameter of
-    *                                  query or argument is of incorrect type
-    */
-   public Query setParameter(int position, Object value);
-
-   /**
-    * Bind an instance of java.util.Date to a positional parameter.
-    *
-    * @param position
-    * @param value
-    * @param temporalType
-    * @return the same query instance
-    * @throws IllegalArgumentException if position does not correspond to positional parameter of
-    *                                  query
-    */
-   public Query setParameter(int position, Date value, TemporalType temporalType);
-
-   /**
-    * Bind an instance of java.util.Calendar to a positional parameter.
-    *
-    * @param position
-    * @param value
-    * @param temporalType
-    * @return the same query instance } correspond to positional parameter of query
-    */
-   public Query setParameter(int position, Calendar value, TemporalType temporalType);
-
-   /**
-    * Set the flush mode type to be used for the query execution.
-    * The flush mode type applies to the query regardless of the
-    * flush mode type in use for the entity manager.
-    *
-    * @param flushMode
-    */
-   public Query setFlushMode(FlushModeType flushMode);
-
-}
\ No newline at end of file

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/Query.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/Query.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/Query.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/Query.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,148 @@
+// $Id$
+package javax.persistence;
+
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+
+/**
+ * Interface used to control query execution.
+ */
+public interface Query
+{
+   /**
+    * Execute the query and return the query results as a List.
+    *
+    * @return a list of the results
+    * @throws IllegalStateException f called for a Java Persistence query language UPDATE or DELETE statement
+    */
+   public List getResultList();
+
+   /**
+    * Execute a SELECT query that returns a single result.
+    *
+    * @return the result
+    * @throws NoResultException        if there is no result
+    * @throws NonUniqueResultException if more than one result
+    * @throws IllegalStateException    if called for a Java
+    *                                  Persistence query language UPDATE or DELETE statement
+    */
+   public Object getSingleResult();
+
+   /**
+    * Execute an update or delete statement.
+    *
+    * @return the number of entities updated or deleted
+    * @throws IllegalStateException        if called for a Java Persistence query language SELECT statement
+    * @throws TransactionRequiredException if there is no transaction
+    */
+   public int executeUpdate();
+
+   /**
+    * Set the maximum number of results to retrieve.
+    *
+    * @param maxResult
+    * @return the same query instance
+    * @throws IllegalArgumentException if argument is negative
+    */
+   public Query setMaxResults(int maxResult);
+
+   /**
+    * Set the position of the first result to retrieve.
+    *
+    * @param startPosition position of the first result, numbered from 0
+    * @return the same query instance
+    * @throws IllegalArgumentException if argument is negative
+    */
+   public Query setFirstResult(int startPosition);
+
+   /**
+    * Set an implementation-specific hint. If the hint name is not recognized, it is silently
+    * ignored.
+    *
+    * @param hintName
+    * @param value
+    * @return the same query instance
+    * @throws IllegalArgumentException if the second argument is not valid for the implementation
+    */
+   public Query setHint(String hintName, Object value);
+
+   /**
+    * Bind an argument to a named parameter.
+    *
+    * @param name  the parameter name
+    * @param value
+    * @return the same query instance
+    * @throws IllegalArgumentException if parameter name does not correspond to parameter in query
+    *                                  string or argument is of incorrect type
+    */
+   public Query setParameter(String name, Object value);
+
+   /**
+    * Bind an instance of java.util.Date to a named parameter.
+    *
+    * @param name
+    * @param value
+    * @param temporalType
+    * @return the same query instance
+    * @throws IllegalArgumentException if parameter name does not correspond to parameter in query
+    *                                  string
+    */
+   public Query setParameter(String name, Date value, TemporalType temporalType);
+
+   /**
+    * Bind an instance of java.util.Calendar to a named parameter.
+    *
+    * @param name
+    * @param value
+    * @param temporalType
+    * @return the same query instance
+    * @throws IllegalArgumentException if parameter name does not correspond to parameter in query
+    *                                  string
+    */
+   public Query setParameter(String name, Calendar value, TemporalType temporalType);
+
+   /**
+    * Bind an argument to a positional parameter.
+    *
+    * @param position
+    * @param value
+    * @return the same query instance
+    * @throws IllegalArgumentException if position does not correspond to positional parameter of
+    *                                  query or argument is of incorrect type
+    */
+   public Query setParameter(int position, Object value);
+
+   /**
+    * Bind an instance of java.util.Date to a positional parameter.
+    *
+    * @param position
+    * @param value
+    * @param temporalType
+    * @return the same query instance
+    * @throws IllegalArgumentException if position does not correspond to positional parameter of
+    *                                  query
+    */
+   public Query setParameter(int position, Date value, TemporalType temporalType);
+
+   /**
+    * Bind an instance of java.util.Calendar to a positional parameter.
+    *
+    * @param position
+    * @param value
+    * @param temporalType
+    * @return the same query instance } correspond to positional parameter of query
+    */
+   public Query setParameter(int position, Calendar value, TemporalType temporalType);
+
+   /**
+    * Set the flush mode type to be used for the query execution.
+    * The flush mode type applies to the query regardless of the
+    * flush mode type in use for the entity manager.
+    *
+    * @param flushMode
+    */
+   public Query setFlushMode(FlushModeType flushMode);
+
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/QueryHint.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/QueryHint.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/QueryHint.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,25 +0,0 @@
-//$Id$
-package javax.persistence;
-
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * An implementation-specific Query hint
- *
- * @author Emmanuel Bernard
- */
- at Target({})
- at Retention(RUNTIME)
-public @interface QueryHint {
-	/**
-	 * Name of the hint
-	 */
-	String name();
-
-	/**
-	 * Value of the hint
-	 */
-	String value();
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/QueryHint.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/QueryHint.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/QueryHint.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/QueryHint.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,25 @@
+//$Id$
+package javax.persistence;
+
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * An implementation-specific Query hint
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({})
+ at Retention(RUNTIME)
+public @interface QueryHint {
+	/**
+	 * Name of the hint
+	 */
+	String name();
+
+	/**
+	 * Value of the hint
+	 */
+	String value();
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/RollbackException.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/RollbackException.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/RollbackException.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,44 +0,0 @@
-//$Id: $
-package javax.persistence;
-
-/**
- * Thrown by the persistence provider when the EntityTransaction.commit() fails
- *
- * @author Emmanuel Bernard
- */
-public class RollbackException extends PersistenceException {
-	/**
-	 * Constructs a new RollbackException exception with null as its detail message
-	 */
-	public RollbackException() {
-		super();
-	}
-
-	/**
-	 * Constructs a new RollbackException exception with the specified cause
-	 *
-	 * @param cause The detail cause
-	 */
-	public RollbackException(Throwable cause) {
-		super( cause );
-	}
-
-	/**
-	 * Constructs a new RollbackException exception with the specified detail message
-	 *
-	 * @param message The detail message
-	 */
-	public RollbackException(String message) {
-		super( message );
-	}
-
-	/**
-	 * Constructs a new RollbackException exception with the specified detail message and cause
-	 *
-	 * @param message The detail message
-	 * @param cause The detail cause
-	 */
-	public RollbackException(String message, Throwable cause) {
-		super( message, cause );
-	}
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/RollbackException.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/RollbackException.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/RollbackException.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/RollbackException.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,44 @@
+//$Id: $
+package javax.persistence;
+
+/**
+ * Thrown by the persistence provider when the EntityTransaction.commit() fails
+ *
+ * @author Emmanuel Bernard
+ */
+public class RollbackException extends PersistenceException {
+	/**
+	 * Constructs a new RollbackException exception with null as its detail message
+	 */
+	public RollbackException() {
+		super();
+	}
+
+	/**
+	 * Constructs a new RollbackException exception with the specified cause
+	 *
+	 * @param cause The detail cause
+	 */
+	public RollbackException(Throwable cause) {
+		super( cause );
+	}
+
+	/**
+	 * Constructs a new RollbackException exception with the specified detail message
+	 *
+	 * @param message The detail message
+	 */
+	public RollbackException(String message) {
+		super( message );
+	}
+
+	/**
+	 * Constructs a new RollbackException exception with the specified detail message and cause
+	 *
+	 * @param message The detail message
+	 * @param cause The detail cause
+	 */
+	public RollbackException(String message, Throwable cause) {
+		super( message, cause );
+	}
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/SecondaryTable.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/SecondaryTable.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/SecondaryTable.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,53 +0,0 @@
-//$Id$
-//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
-package javax.persistence;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-
-import static java.lang.annotation.ElementType.*;
-import static java.lang.annotation.RetentionPolicy.*;
-
-/**
- * This annotation is used to specify a secondary table for the annotated entity class. Specifying
- * one or more secondary tables indicates that the data for the entity class is stored across multiple
- * tables.
- *
- * If no SecondaryTable annotation is specified, it is assumed that all persistent fields or properties
- * of the entity are mapped to the primary table. If no primary key join columns are specified, the
- * join columns are assumed to reference the primary key columns of the primary table, and have the
- * same names and types as the referenced primary key columns of the primary table.
- *
- * @author Emmanuel Bernard
- */
- at Target({TYPE}) @Retention(RUNTIME)
-public @interface SecondaryTable {
-	/**
-	 * The name of the table
-	 */
-	String name();
-	/**
-	 * The catalog of the table
-	 */
-	String catalog() default "";
-	/**
-	 * The schema of the table
-	 */
-	String schema() default "";
-	/**
-	 * The columns that are used to join with the primary table.
-	 *
-	 * Defaults to the column(s) of the same name(s) as the primary key column(s)
-	 * in the primary table
-	 */
-	PrimaryKeyJoinColumn[] pkJoinColumns() default {};
-	/**
-	 * Unique constraints that are to be placed on the table. These are typically only used if
-	 * table generation is in effect. These constraints apply in addition to any constraints
-	 * specified by the Column and JoinColumn annotations and constraints entailed by primary
-	 * key mappings.
-	 *
-	 * Defaults to no additional constraints.
-	 */
-	UniqueConstraint[] uniqueConstraints() default {};
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/SecondaryTable.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/SecondaryTable.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/SecondaryTable.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/SecondaryTable.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,53 @@
+//$Id$
+//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
+package javax.persistence;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+/**
+ * This annotation is used to specify a secondary table for the annotated entity class. Specifying
+ * one or more secondary tables indicates that the data for the entity class is stored across multiple
+ * tables.
+ *
+ * If no SecondaryTable annotation is specified, it is assumed that all persistent fields or properties
+ * of the entity are mapped to the primary table. If no primary key join columns are specified, the
+ * join columns are assumed to reference the primary key columns of the primary table, and have the
+ * same names and types as the referenced primary key columns of the primary table.
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({TYPE}) @Retention(RUNTIME)
+public @interface SecondaryTable {
+	/**
+	 * The name of the table
+	 */
+	String name();
+	/**
+	 * The catalog of the table
+	 */
+	String catalog() default "";
+	/**
+	 * The schema of the table
+	 */
+	String schema() default "";
+	/**
+	 * The columns that are used to join with the primary table.
+	 *
+	 * Defaults to the column(s) of the same name(s) as the primary key column(s)
+	 * in the primary table
+	 */
+	PrimaryKeyJoinColumn[] pkJoinColumns() default {};
+	/**
+	 * Unique constraints that are to be placed on the table. These are typically only used if
+	 * table generation is in effect. These constraints apply in addition to any constraints
+	 * specified by the Column and JoinColumn annotations and constraints entailed by primary
+	 * key mappings.
+	 *
+	 * Defaults to no additional constraints.
+	 */
+	UniqueConstraint[] uniqueConstraints() default {};
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/SecondaryTables.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/SecondaryTables.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/SecondaryTables.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,21 +0,0 @@
-//$Id$
-//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
-package javax.persistence;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-
-import static java.lang.annotation.ElementType.*;
-import static java.lang.annotation.RetentionPolicy.*;
-/**
- * This annotation is used to specify multiple secondary tables for an entity.
- *
- * @author Emmanuel Bernard
- */
- at Target({TYPE}) @Retention(RUNTIME)
-public @interface SecondaryTables {
-	/**
-	 * The secondary tables for an entity.
-	 */
-	SecondaryTable[] value();
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/SecondaryTables.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/SecondaryTables.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/SecondaryTables.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/SecondaryTables.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,21 @@
+//$Id$
+//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
+package javax.persistence;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+/**
+ * This annotation is used to specify multiple secondary tables for an entity.
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({TYPE}) @Retention(RUNTIME)
+public @interface SecondaryTables {
+	/**
+	 * The secondary tables for an entity.
+	 */
+	SecondaryTable[] value();
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/SequenceGenerator.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/SequenceGenerator.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/SequenceGenerator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,38 +0,0 @@
-//$Id$
-//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
-package javax.persistence;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-
-import static java.lang.annotation.ElementType.*;
-import static java.lang.annotation.RetentionPolicy.*;
-
-/**
- * This annotation defines a primary key generator that may be referenced by name when a generator
- * element is specified for the GeneratedValue annotation. A sequence generator may be specified on
- * the entity class or on the primary key field or property. The scope of the generator name is global
- * to the persistence unit (across all generator types).
- *
- * @author Emmanuel Bernard
- */
- at Target({TYPE, METHOD, FIELD}) @Retention(RUNTIME)
-public @interface SequenceGenerator {
-	/**
-	 * A unique generator name that can be referenced by one or more classes to be the generator for primary key values
-	 */
-	String name();
-	/**
-	 * The name of the database sequence object from which to obtain primary key values
-	 * Defaults to a provider-chosen value
-	 */
-	String sequenceName() default "";
-	/**
-	 * The value from which the sequence object is to start generating
-	 */
-	int initialValue() default 1;
-	/**
-	 * The amount to increment by when allocating sequence numbers from the sequence
-	 */
-	int allocationSize() default 50;
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/SequenceGenerator.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/SequenceGenerator.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/SequenceGenerator.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/SequenceGenerator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,38 @@
+//$Id$
+//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
+package javax.persistence;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+/**
+ * This annotation defines a primary key generator that may be referenced by name when a generator
+ * element is specified for the GeneratedValue annotation. A sequence generator may be specified on
+ * the entity class or on the primary key field or property. The scope of the generator name is global
+ * to the persistence unit (across all generator types).
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({TYPE, METHOD, FIELD}) @Retention(RUNTIME)
+public @interface SequenceGenerator {
+	/**
+	 * A unique generator name that can be referenced by one or more classes to be the generator for primary key values
+	 */
+	String name();
+	/**
+	 * The name of the database sequence object from which to obtain primary key values
+	 * Defaults to a provider-chosen value
+	 */
+	String sequenceName() default "";
+	/**
+	 * The value from which the sequence object is to start generating
+	 */
+	int initialValue() default 1;
+	/**
+	 * The amount to increment by when allocating sequence numbers from the sequence
+	 */
+	int allocationSize() default 50;
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/SqlResultSetMapping.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/SqlResultSetMapping.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/SqlResultSetMapping.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,29 +0,0 @@
-//$Id$
-//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
-package javax.persistence;
-
-import java.lang.annotation.Target;
-import java.lang.annotation.Retention;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * This annotation is used to specify the mapping of the result of a native SQL query
- *
- * @author Emmanuel Bernard
- */
- at Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME)
-public @interface SqlResultSetMapping {
-	/**
-	 * The name given to the result set mapping, and used to refer to it in the methods of the Query API
-	 */
-	String name();
-	/**
-	 * Specifies the result set mapping to entities
-	 */
-	EntityResult[] entities() default {};
-	/**
-	 * Specifies the result set mapping to scalar values
-	 */
-	ColumnResult[] columns() default {};
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/SqlResultSetMapping.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/SqlResultSetMapping.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/SqlResultSetMapping.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/SqlResultSetMapping.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,29 @@
+//$Id$
+//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
+package javax.persistence;
+
+import java.lang.annotation.Target;
+import java.lang.annotation.Retention;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * This annotation is used to specify the mapping of the result of a native SQL query
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME)
+public @interface SqlResultSetMapping {
+	/**
+	 * The name given to the result set mapping, and used to refer to it in the methods of the Query API
+	 */
+	String name();
+	/**
+	 * Specifies the result set mapping to entities
+	 */
+	EntityResult[] entities() default {};
+	/**
+	 * Specifies the result set mapping to scalar values
+	 */
+	ColumnResult[] columns() default {};
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/SqlResultSetMappings.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/SqlResultSetMappings.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/SqlResultSetMappings.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,19 +0,0 @@
-//$Id: SqlResultSetMapping.java 9044 2006-01-12 20:58:41 -0500 (jeu., 12 janv. 2006) epbernard $
-//EJB3 Specification Copyright 2004 - 2006 Sun Microsystems, Inc.
-
-package javax.persistence;
-
-import java.lang.annotation.Target;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * This annotation is used to define one or more SqlResultSetMapping
- *
- * @author Emmanuel Bernard
- */
- at Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME)
-public @interface SqlResultSetMappings {
-	SqlResultSetMapping[] value();
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/SqlResultSetMappings.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/SqlResultSetMappings.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/SqlResultSetMappings.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/SqlResultSetMappings.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,19 @@
+//$Id: SqlResultSetMapping.java 9044 2006-01-12 20:58:41 -0500 (jeu., 12 janv. 2006) epbernard $
+//EJB3 Specification Copyright 2004 - 2006 Sun Microsystems, Inc.
+
+package javax.persistence;
+
+import java.lang.annotation.Target;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * This annotation is used to define one or more SqlResultSetMapping
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME)
+public @interface SqlResultSetMappings {
+	SqlResultSetMapping[] value();
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/Table.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/Table.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/Table.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,48 +0,0 @@
-//$Id$
-//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
-package javax.persistence;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-
-import static java.lang.annotation.ElementType.*;
-import static java.lang.annotation.RetentionPolicy.*;
-
-/**
- * This annotation specifies the primary table for the annotated entity. Additional
- * tables may be specified using SecondaryTable  or SecondaryTables annotation.
- *
- * If no Table annotation is specified for an entity class, the default values apply.
- *
- * @author Emmanuel Bernard
- */
- at Target({TYPE}) @Retention(RUNTIME)
-public @interface Table {
-	/**
-	 * The name of the table.
-	 *
-	 * Defaults to the entity name.
-	 */
-	String name() default "";
-	/**
-	 * The catalog of the table.
-	 *
-	 * Defaults to the default catalog.
-	 */
-	String catalog() default "";
-	/**
-	 * The schema of the table.
-	 *
-	 * Defaults to the default schema for user.
-	 */
-	String schema() default "";
-	/**
-	 * Unique constraints that are to be placed on the table. These are only used if table
-	 * generation is in effect. These constraints apply in addition to any constraints
-	 * specified by the Column and JoinColumn annotations and constraints entailed by
-	 * primary key mappings.
-	 *
-	 * Defaults to no additional constraints.
-	 */
-	UniqueConstraint[] uniqueConstraints() default {};
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/Table.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/Table.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/Table.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/Table.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,48 @@
+//$Id$
+//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
+package javax.persistence;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+/**
+ * This annotation specifies the primary table for the annotated entity. Additional
+ * tables may be specified using SecondaryTable  or SecondaryTables annotation.
+ *
+ * If no Table annotation is specified for an entity class, the default values apply.
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({TYPE}) @Retention(RUNTIME)
+public @interface Table {
+	/**
+	 * The name of the table.
+	 *
+	 * Defaults to the entity name.
+	 */
+	String name() default "";
+	/**
+	 * The catalog of the table.
+	 *
+	 * Defaults to the default catalog.
+	 */
+	String catalog() default "";
+	/**
+	 * The schema of the table.
+	 *
+	 * Defaults to the default schema for user.
+	 */
+	String schema() default "";
+	/**
+	 * Unique constraints that are to be placed on the table. These are only used if table
+	 * generation is in effect. These constraints apply in addition to any constraints
+	 * specified by the Column and JoinColumn annotations and constraints entailed by
+	 * primary key mappings.
+	 *
+	 * Defaults to no additional constraints.
+	 */
+	UniqueConstraint[] uniqueConstraints() default {};
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/TableGenerator.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/TableGenerator.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/TableGenerator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,67 +0,0 @@
-//$Id$
-//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
-package javax.persistence;
-
-import static java.lang.annotation.ElementType.*;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * This annotation defines a primary key generator that may be referenced by name when a generator
- * element is specified for the GeneratedValue annotation. A table generator may be specified on the
- * entity class or on the primary key field or property. The scope of the generator name is global to
- * the persistence unit (across all generator types).
- *
- * @author Emmanuel Bernard
- */
- at Target({TYPE, METHOD, FIELD})
- at Retention(RUNTIME)
-public @interface TableGenerator {
-	/**
-	 * A unique generator name that can be referenced by one or more classes to be the generator for id values
-	 */
-	String name();
-	/**
-	 * Name of table that stores the generated id values. Defaults to a name chosen by persistence provider.
-	 */
-	String table() default "";
-	/**
-	 * The catalog of the table
-	 * Defaults to the default catalog
-	 */
-	String catalog() default "";
-	/**
-	 * The schema of the table
-	 * Defaults to the default schema for user
-	 */
-	String schema() default "";
-	/**
-	 * Name of the primary key column in the table
-	 * Defaults to a provider-chosen name
-	 */
-	String pkColumnName() default "";
-	/**
-	 * Name of the column that stores the last value generated
-	 * Defaults to a provider-chosen name
-	 */
-	String valueColumnName() default "";
-	/**
-	 * The primary key value in the generator table that distinguishes this set of generated values from others that may be stored in the table
-	 * Defaults to a provider-chosen value to store in the primary key column of the generator table
-	 */
-	String pkColumnValue() default "";
-	/**
-	 * The initial value to be used when allocating id numbers from the generator
-	 */
-	int initialValue() default 0;
-	/**
-	 * The amount to increment by when allocating id numbers from the generator
-	 */
-	int allocationSize() default 50;
-	/**
-	 * Unique constraints that are to be placed on the table. These are only used if table generation is in effect. These constraints apply in addition to primary key constraints
-	 * Defaults to no additional constraints
-	 */
-	UniqueConstraint[] uniqueConstraints() default {};
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/TableGenerator.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/TableGenerator.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/TableGenerator.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/TableGenerator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,67 @@
+//$Id$
+//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
+package javax.persistence;
+
+import static java.lang.annotation.ElementType.*;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * This annotation defines a primary key generator that may be referenced by name when a generator
+ * element is specified for the GeneratedValue annotation. A table generator may be specified on the
+ * entity class or on the primary key field or property. The scope of the generator name is global to
+ * the persistence unit (across all generator types).
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({TYPE, METHOD, FIELD})
+ at Retention(RUNTIME)
+public @interface TableGenerator {
+	/**
+	 * A unique generator name that can be referenced by one or more classes to be the generator for id values
+	 */
+	String name();
+	/**
+	 * Name of table that stores the generated id values. Defaults to a name chosen by persistence provider.
+	 */
+	String table() default "";
+	/**
+	 * The catalog of the table
+	 * Defaults to the default catalog
+	 */
+	String catalog() default "";
+	/**
+	 * The schema of the table
+	 * Defaults to the default schema for user
+	 */
+	String schema() default "";
+	/**
+	 * Name of the primary key column in the table
+	 * Defaults to a provider-chosen name
+	 */
+	String pkColumnName() default "";
+	/**
+	 * Name of the column that stores the last value generated
+	 * Defaults to a provider-chosen name
+	 */
+	String valueColumnName() default "";
+	/**
+	 * The primary key value in the generator table that distinguishes this set of generated values from others that may be stored in the table
+	 * Defaults to a provider-chosen value to store in the primary key column of the generator table
+	 */
+	String pkColumnValue() default "";
+	/**
+	 * The initial value to be used when allocating id numbers from the generator
+	 */
+	int initialValue() default 0;
+	/**
+	 * The amount to increment by when allocating id numbers from the generator
+	 */
+	int allocationSize() default 50;
+	/**
+	 * Unique constraints that are to be placed on the table. These are only used if table generation is in effect. These constraints apply in addition to primary key constraints
+	 * Defaults to no additional constraints
+	 */
+	UniqueConstraint[] uniqueConstraints() default {};
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/Temporal.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/Temporal.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/Temporal.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,26 +0,0 @@
-//$Id$
-//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
-package javax.persistence;
-
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.ElementType.METHOD;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * This annotation must be specified for persistent fields or properties of type Date and Calendar.
- * It may only be specified for fields or properties of these types.
- *
- * The Temporal annotation may be used in conjunction with the Basic annotation.
- *
- * @author Emmanuel Bernard
- */
- at Target({METHOD, FIELD})
- at Retention(RUNTIME)
-public @interface Temporal {
-	/**
-	 * The type used in mapping java.util.Date or java.util.Calendar
-	 */
-	TemporalType value();
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/Temporal.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/Temporal.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/Temporal.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/Temporal.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,26 @@
+//$Id$
+//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
+package javax.persistence;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * This annotation must be specified for persistent fields or properties of type Date and Calendar.
+ * It may only be specified for fields or properties of these types.
+ *
+ * The Temporal annotation may be used in conjunction with the Basic annotation.
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({METHOD, FIELD})
+ at Retention(RUNTIME)
+public @interface Temporal {
+	/**
+	 * The type used in mapping java.util.Date or java.util.Calendar
+	 */
+	TemporalType value();
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/TemporalType.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/TemporalType.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/TemporalType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,21 +0,0 @@
-//$Id$
-//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
-package javax.persistence;
-
-/**
- * Type used to indicate a specific mapping of Date or Calendar.
- */
-public enum TemporalType {
-	/**
-	 * Map as java.sql.Date
-	 */
-	DATE,
-	/**
-	 * Map as java.sql.Time
-	 */
-	TIME,
-	/**
-	 * Map as java.sql.Timestamp
-	 */
-	TIMESTAMP
-}
\ No newline at end of file

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/TemporalType.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/TemporalType.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/TemporalType.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/TemporalType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,21 @@
+//$Id$
+//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
+package javax.persistence;
+
+/**
+ * Type used to indicate a specific mapping of Date or Calendar.
+ */
+public enum TemporalType {
+	/**
+	 * Map as java.sql.Date
+	 */
+	DATE,
+	/**
+	 * Map as java.sql.Time
+	 */
+	TIME,
+	/**
+	 * Map as java.sql.Timestamp
+	 */
+	TIMESTAMP
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/TransactionRequiredException.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/TransactionRequiredException.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/TransactionRequiredException.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,26 +0,0 @@
-//$Id$
-package javax.persistence;
-
-/**
- * Thrown by the persistence provider when a transaction is required but is not active.
- * @author Gavin King
- */
-public class TransactionRequiredException extends PersistenceException {
-
-	/**
-	 * Constructs a new TransactionRequiredException exception with null as its detail message
-	 */
-	public TransactionRequiredException() {
-		super();
-	}
-
-	/**
-	 * Constructs a new TransactionRequiredException exception with the specified detail message
-	 * 
-	 * @param message
-	 */
-	public TransactionRequiredException(String message) {
-		super( message );
-	}
-
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/TransactionRequiredException.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/TransactionRequiredException.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/TransactionRequiredException.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/TransactionRequiredException.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,26 @@
+//$Id$
+package javax.persistence;
+
+/**
+ * Thrown by the persistence provider when a transaction is required but is not active.
+ * @author Gavin King
+ */
+public class TransactionRequiredException extends PersistenceException {
+
+	/**
+	 * Constructs a new TransactionRequiredException exception with null as its detail message
+	 */
+	public TransactionRequiredException() {
+		super();
+	}
+
+	/**
+	 * Constructs a new TransactionRequiredException exception with the specified detail message
+	 * 
+	 * @param message
+	 */
+	public TransactionRequiredException(String message) {
+		super( message );
+	}
+
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/Transient.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/Transient.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/Transient.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,18 +0,0 @@
-//$Id$
-//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
-package javax.persistence;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-
-import static java.lang.annotation.ElementType.*;
-import static java.lang.annotation.RetentionPolicy.*;
-
-/**
- * This annotation specifies that the property or field is not persistent. It is used to annotate
- * a property or field of an entity class, mapped superclass, or embeddable class.
- * 
- * @author Emmanuel Bernard
- */
- at Target({METHOD, FIELD}) @Retention(RUNTIME)
-public @interface Transient {}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/Transient.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/Transient.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/Transient.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/Transient.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,18 @@
+//$Id$
+//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
+package javax.persistence;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+/**
+ * This annotation specifies that the property or field is not persistent. It is used to annotate
+ * a property or field of an entity class, mapped superclass, or embeddable class.
+ * 
+ * @author Emmanuel Bernard
+ */
+ at Target({METHOD, FIELD}) @Retention(RUNTIME)
+public @interface Transient {}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/UniqueConstraint.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/UniqueConstraint.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/UniqueConstraint.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,21 +0,0 @@
-//$Id$
-//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
-package javax.persistence;
-
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * This annotation is used to specify that a unique constraint is to be included in the generated DDL
- * for a primary or secondary table
- *
- * @author Emmanuel Bernard
- */
- at Target({}) @Retention(RUNTIME)
-public @interface UniqueConstraint {
-	/**
-	 * An array of the column names that make up the constraint
-	 */
-	String[] columnNames();
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/UniqueConstraint.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/UniqueConstraint.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/UniqueConstraint.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/UniqueConstraint.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,21 @@
+//$Id$
+//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
+package javax.persistence;
+
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * This annotation is used to specify that a unique constraint is to be included in the generated DDL
+ * for a primary or secondary table
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({}) @Retention(RUNTIME)
+public @interface UniqueConstraint {
+	/**
+	 * An array of the column names that make up the constraint
+	 */
+	String[] columnNames();
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/Version.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/Version.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/Version.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,28 +0,0 @@
-//$Id$
-//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
-package javax.persistence;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-
-import static java.lang.annotation.ElementType.*;
-import static java.lang.annotation.RetentionPolicy.*;
-
-/**
- * This annotation specifies the version field or property of an entity class that serves as its
- * optimistic lock value. The version is used to ensure integrity when performing the merge
- * operation and for optimistic concurrency control.
- *
- * Only a single Version property or field should be used per class; applications that use more
- * than one Version property or field will not be portable.
- *
- * The Version property should be mapped to the primary table for the entity class; applications
- * that map the Version property to a table other than the primary table will not be portable.
- *
- * The following types are supported for version properties: int, Integer, short, Short, long,
- * Long, Timestamp.
- *  
- * @author Emmanuel Bernard
- */
- at Target({METHOD, FIELD}) @Retention(RUNTIME)
-public @interface Version {}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/Version.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/Version.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/Version.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/Version.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,28 @@
+//$Id$
+//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
+package javax.persistence;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+/**
+ * This annotation specifies the version field or property of an entity class that serves as its
+ * optimistic lock value. The version is used to ensure integrity when performing the merge
+ * operation and for optimistic concurrency control.
+ *
+ * Only a single Version property or field should be used per class; applications that use more
+ * than one Version property or field will not be portable.
+ *
+ * The Version property should be mapped to the primary table for the entity class; applications
+ * that map the Version property to a table other than the primary table will not be portable.
+ *
+ * The following types are supported for version properties: int, Integer, short, Short, long,
+ * Long, Timestamp.
+ *  
+ * @author Emmanuel Bernard
+ */
+ at Target({METHOD, FIELD}) @Retention(RUNTIME)
+public @interface Version {}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/package-info.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/package-info.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/package-info.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,9 +0,0 @@
-//$Id:$
-//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
-
-/**
- * The javax.persistence package contains the classes and interfaces that define the contracts
- * between a persistence provider and the managed classes and the clients of the Java Persistence API.
- */
-package javax.persistence;
-

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/package-info.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/package-info.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/package-info.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/package-info.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,9 @@
+//$Id:$
+//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
+
+/**
+ * The javax.persistence package contains the classes and interfaces that define the contracts
+ * between a persistence provider and the managed classes and the clients of the Java Persistence API.
+ */
+package javax.persistence;
+

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/spi (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/spi)

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/spi/ClassTransformer.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/spi/ClassTransformer.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/spi/ClassTransformer.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,39 +0,0 @@
-//$Id$
-//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
-package javax.persistence.spi;
-
-import java.security.ProtectionDomain;
-import java.lang.instrument.IllegalClassFormatException;
-
-/**
- * A persistence provider provides an instance of this interface
- * to the PersistenceUnitInfo.addTransformer method.
- * The supplied transformer instance will get called to transform
- * entity class files when they are loaded and redefined.  The transformation
- * occurs before the class is defined by the JVM
- *
- *
- * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
- * @version $Revision$
- */
-public interface ClassTransformer
-{
-   /**
-    * Invoked when a class is being loaded or redefined to add hooks for persistence bytecode manipulation
-    *
-    * @param loader the defining class loaderof the class being transformed.  It may be null if using bootstrap loader
-    * @param classname The name of the class being transformed
-    * @param classBeingRedefined If an already loaded class is being redefined, then pass this as a parameter
-    * @param protectionDomain ProtectionDomain of the class being (re)-defined
-    * @param classfileBuffer The input byte buffer in class file format
-    * @return A well-formed class file that can be loaded
-    *
-    * @throws IllegalClassFormatException
-    */
-   byte[] transform(ClassLoader loader,
-                    String classname,
-                    Class<?> classBeingRedefined,
-                    ProtectionDomain protectionDomain,
-                    byte[] classfileBuffer)
-   throws IllegalClassFormatException;
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/spi/ClassTransformer.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/spi/ClassTransformer.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/spi/ClassTransformer.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/spi/ClassTransformer.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,39 @@
+//$Id$
+//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
+package javax.persistence.spi;
+
+import java.security.ProtectionDomain;
+import java.lang.instrument.IllegalClassFormatException;
+
+/**
+ * A persistence provider provides an instance of this interface
+ * to the PersistenceUnitInfo.addTransformer method.
+ * The supplied transformer instance will get called to transform
+ * entity class files when they are loaded and redefined.  The transformation
+ * occurs before the class is defined by the JVM
+ *
+ *
+ * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
+ * @version $Revision$
+ */
+public interface ClassTransformer
+{
+   /**
+    * Invoked when a class is being loaded or redefined to add hooks for persistence bytecode manipulation
+    *
+    * @param loader the defining class loaderof the class being transformed.  It may be null if using bootstrap loader
+    * @param classname The name of the class being transformed
+    * @param classBeingRedefined If an already loaded class is being redefined, then pass this as a parameter
+    * @param protectionDomain ProtectionDomain of the class being (re)-defined
+    * @param classfileBuffer The input byte buffer in class file format
+    * @return A well-formed class file that can be loaded
+    *
+    * @throws IllegalClassFormatException
+    */
+   byte[] transform(ClassLoader loader,
+                    String classname,
+                    Class<?> classBeingRedefined,
+                    ProtectionDomain protectionDomain,
+                    byte[] classfileBuffer)
+   throws IllegalClassFormatException;
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/spi/PersistenceProvider.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/spi/PersistenceProvider.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/spi/PersistenceProvider.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,43 +0,0 @@
-//$Id$
-//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
-package javax.persistence.spi;
-
-import java.util.Map;
-import javax.persistence.EntityManagerFactory;
-
-/**
- * Interface implemented by the persistence provider.
- * This interface is used to create an EntityManagerFactory.
- * It is invoked by the container in Java EE environments and
- * by the Persistence class in Java SE environments.
- */
-public interface PersistenceProvider {
-	/**
-	 * Called by Persistence class when an EntityManagerFactory
-	 * is to be created.
-	 *
-	 * @param emName The name of the persistence unit
-	 * @param map	A Map of properties for use by the
-	 *               persistence provider. These properties may be used to
-	 *               override the values of the corresponding elements in
-	 *               the persistence.xml file or specify values for
-	 *               properties not specified in the persistence.xml
-	 *               (and may be null if no properties are specified).
-	 * @return EntityManagerFactory for the persistence unit,
-	 *         or null if the provider is not the right provider
-	 */
-	public EntityManagerFactory createEntityManagerFactory(String emName, Map map);
-
-	/**
-	 * Called by the container when an EntityManagerFactory
-	 * is to be created.
-	 *
-	 * @param info Metadata for use by the persistence provider
-	 * @param map  A Map of integration-level properties for use
-	 *             by the persistence provider (may be null if no properties
-	 *             are specified).
-	 * @return EntityManagerFactory for the persistence unit
-	 *         specified by the metadata
-	 */
-	public EntityManagerFactory createContainerEntityManagerFactory(PersistenceUnitInfo info, Map map);
-}
\ No newline at end of file

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/spi/PersistenceProvider.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/spi/PersistenceProvider.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/spi/PersistenceProvider.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/spi/PersistenceProvider.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,43 @@
+//$Id$
+//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
+package javax.persistence.spi;
+
+import java.util.Map;
+import javax.persistence.EntityManagerFactory;
+
+/**
+ * Interface implemented by the persistence provider.
+ * This interface is used to create an EntityManagerFactory.
+ * It is invoked by the container in Java EE environments and
+ * by the Persistence class in Java SE environments.
+ */
+public interface PersistenceProvider {
+	/**
+	 * Called by Persistence class when an EntityManagerFactory
+	 * is to be created.
+	 *
+	 * @param emName The name of the persistence unit
+	 * @param map	A Map of properties for use by the
+	 *               persistence provider. These properties may be used to
+	 *               override the values of the corresponding elements in
+	 *               the persistence.xml file or specify values for
+	 *               properties not specified in the persistence.xml
+	 *               (and may be null if no properties are specified).
+	 * @return EntityManagerFactory for the persistence unit,
+	 *         or null if the provider is not the right provider
+	 */
+	public EntityManagerFactory createEntityManagerFactory(String emName, Map map);
+
+	/**
+	 * Called by the container when an EntityManagerFactory
+	 * is to be created.
+	 *
+	 * @param info Metadata for use by the persistence provider
+	 * @param map  A Map of integration-level properties for use
+	 *             by the persistence provider (may be null if no properties
+	 *             are specified).
+	 * @return EntityManagerFactory for the persistence unit
+	 *         specified by the metadata
+	 */
+	public EntityManagerFactory createContainerEntityManagerFactory(PersistenceUnitInfo info, Map map);
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/spi/PersistenceUnitInfo.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/spi/PersistenceUnitInfo.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/spi/PersistenceUnitInfo.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,142 +0,0 @@
-//$Id$
-//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.package javax.persistence.spi;
-package javax.persistence.spi;
-
-import java.net.URL;
-import java.util.List;
-import java.util.Properties;
-import javax.sql.DataSource;
-
-/**
- * Interface implemented by the container and used by the
- * persistence provider when creating an EntityManagerFactory.
- */
-public interface PersistenceUnitInfo {
-	/**
-	 * @return The name of the persistence unit.
-	 *         Corresponds to the <name> element in the persistence.xml file.
-	 */
-	public String getPersistenceUnitName();
-
-	/**
-	 * @return The fully qualified name of the persistence provider
-	 *         implementation class.
-	 *         Corresponds to the <provider> element in the persistence.xml
-	 *         file.
-	 */
-	public String getPersistenceProviderClassName();
-
-	/**
-	 * @return The transaction type of the entity managers created
-	 *         by the EntityManagerFactory.
-	 *         The transaction type corresponds to the transaction-type
-	 *         attribute in the persistence.xml file.
-	 */
-	public PersistenceUnitTransactionType getTransactionType();
-
-	/**
-	 * @return The JTA-enabled data source to be used by the
-	 *         persistence provider.
-	 *         The data source corresponds to the <jta-data-source>
-	 *         element in the persistence.xml file or is provided at
-	 *         deployment or by the container.
-	 */
-	public DataSource getJtaDataSource();
-
-	/**
-	 * @return The non-JTA-enabled data source to be used by the
-	 *         persistence provider for accessing data outside a JTA
-	 *         transaction.
-	 *         The data source corresponds to the named <non-jta-data-source>
-	 *         element in the persistence.xml file or provided at
-	 *         deployment or by the container.
-	 */
-	public DataSource getNonJtaDataSource();
-
-	/**
-	 * @return The list of mapping file names that the persistence
-	 *         provider must load to determine the mappings for the entity
-	 *         classes. The mapping files must be in the standard XML
-	 *         mapping format, be uniquely named and be resource-loadable
-	 *         from the application classpath.
-	 *         Each mapping file name corresponds to a <mapping-file>
-	 *         element in the persistence.xml file.
-	 */
-	public List<String> getMappingFileNames();
-
-	/**
-	 * @return The list of JAR file URLs that the persistence
-	 *         provider must examine for managed classes of the persistence
-	 *         unit. Each jar file URL corresponds to a named <jar-file>
-	 *         element in the persistence.xml file.
-	 */
-	public List<URL> getJarFileUrls();
-
-	/**
-	 * @return The URL for the jar file or directory that is the
-	 *         root of the persistence unit. (If the persistence unit is
-	 *         rooted in the WEB-INF/classes directory, this will be the
-	 *         URL of that directory.)
-	 */
-	public URL getPersistenceUnitRootUrl();
-
-	/**
-	 * @return The list of the names of the classes that the
-	 *         persistence provider must add it to its set of managed
-	 *         classes. Each name corresponds to a named <class> element
-	 *         in the persistence.xml file.
-	 */
-	public List<String> getManagedClassNames();
-
-	/**
-	 * @return Whether classes in the root of the persistence
-	 *         unit that have not been explicitly listed are to be
-	 *         included in the set of managed classes.
-	 *         This value corresponds to the <exclude-unlisted-classes>
-	 *         element in the persistence.xml file.
-	 */
-	public boolean excludeUnlistedClasses();
-
-	/**
-	 * @return Properties object. Each property corresponds
-	 *         to a <property> element in the persistence.xml file
-	 */
-	public Properties getProperties();
-
-	/**
-	 * @return ClassLoader that the provider may use to load any
-	 *         classes, resources, or open URLs.
-	 */
-	public ClassLoader getClassLoader();
-
-	/**
-	 * Add a transformer supplied by the provider that will be
-	 * called for every new class definition or class redefinition
-	 * that gets loaded by the loader returned by the
-	 * PersistenceInfo.getClassLoader method. The transformer
-	 * has no effect on the result returned by the
-	 * PersistenceInfo.getTempClassLoader method.
-	 * Classes are only transformed once within the same classloading
-	 * scope, regardless of how many persistence units they may be
-	 * a part of.
-	 *
-	 * @param transformer A provider-supplied transformer that the
-	 *                    Container invokes at class-(re)definition time
-	 */
-	public void addTransformer(ClassTransformer transformer);
-
-	/**
-	 * Return a new instance of a ClassLoader that the provider
-	 * may use to temporarily load any classes, resources, or
-	 * open URLs. The scope and classpath of this loader is
-	 * exactly the same as that of the loader returned by
-	 * PersistenceInfo.getClassLoader. None of the classes loaded
-	 * by this class loader will be visible to application
-	 * components. The container does not use or maintain references
-	 * to this class loader after returning it to the provider.
-	 *
-	 * @return Temporary ClassLoader with same visibility as current
-	 * loader
-	 */
-	public ClassLoader getNewTempClassLoader();
-}
\ No newline at end of file

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/spi/PersistenceUnitInfo.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/spi/PersistenceUnitInfo.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/spi/PersistenceUnitInfo.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/spi/PersistenceUnitInfo.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,142 @@
+//$Id$
+//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.package javax.persistence.spi;
+package javax.persistence.spi;
+
+import java.net.URL;
+import java.util.List;
+import java.util.Properties;
+import javax.sql.DataSource;
+
+/**
+ * Interface implemented by the container and used by the
+ * persistence provider when creating an EntityManagerFactory.
+ */
+public interface PersistenceUnitInfo {
+	/**
+	 * @return The name of the persistence unit.
+	 *         Corresponds to the <name> element in the persistence.xml file.
+	 */
+	public String getPersistenceUnitName();
+
+	/**
+	 * @return The fully qualified name of the persistence provider
+	 *         implementation class.
+	 *         Corresponds to the <provider> element in the persistence.xml
+	 *         file.
+	 */
+	public String getPersistenceProviderClassName();
+
+	/**
+	 * @return The transaction type of the entity managers created
+	 *         by the EntityManagerFactory.
+	 *         The transaction type corresponds to the transaction-type
+	 *         attribute in the persistence.xml file.
+	 */
+	public PersistenceUnitTransactionType getTransactionType();
+
+	/**
+	 * @return The JTA-enabled data source to be used by the
+	 *         persistence provider.
+	 *         The data source corresponds to the <jta-data-source>
+	 *         element in the persistence.xml file or is provided at
+	 *         deployment or by the container.
+	 */
+	public DataSource getJtaDataSource();
+
+	/**
+	 * @return The non-JTA-enabled data source to be used by the
+	 *         persistence provider for accessing data outside a JTA
+	 *         transaction.
+	 *         The data source corresponds to the named <non-jta-data-source>
+	 *         element in the persistence.xml file or provided at
+	 *         deployment or by the container.
+	 */
+	public DataSource getNonJtaDataSource();
+
+	/**
+	 * @return The list of mapping file names that the persistence
+	 *         provider must load to determine the mappings for the entity
+	 *         classes. The mapping files must be in the standard XML
+	 *         mapping format, be uniquely named and be resource-loadable
+	 *         from the application classpath.
+	 *         Each mapping file name corresponds to a <mapping-file>
+	 *         element in the persistence.xml file.
+	 */
+	public List<String> getMappingFileNames();
+
+	/**
+	 * @return The list of JAR file URLs that the persistence
+	 *         provider must examine for managed classes of the persistence
+	 *         unit. Each jar file URL corresponds to a named <jar-file>
+	 *         element in the persistence.xml file.
+	 */
+	public List<URL> getJarFileUrls();
+
+	/**
+	 * @return The URL for the jar file or directory that is the
+	 *         root of the persistence unit. (If the persistence unit is
+	 *         rooted in the WEB-INF/classes directory, this will be the
+	 *         URL of that directory.)
+	 */
+	public URL getPersistenceUnitRootUrl();
+
+	/**
+	 * @return The list of the names of the classes that the
+	 *         persistence provider must add it to its set of managed
+	 *         classes. Each name corresponds to a named <class> element
+	 *         in the persistence.xml file.
+	 */
+	public List<String> getManagedClassNames();
+
+	/**
+	 * @return Whether classes in the root of the persistence
+	 *         unit that have not been explicitly listed are to be
+	 *         included in the set of managed classes.
+	 *         This value corresponds to the <exclude-unlisted-classes>
+	 *         element in the persistence.xml file.
+	 */
+	public boolean excludeUnlistedClasses();
+
+	/**
+	 * @return Properties object. Each property corresponds
+	 *         to a <property> element in the persistence.xml file
+	 */
+	public Properties getProperties();
+
+	/**
+	 * @return ClassLoader that the provider may use to load any
+	 *         classes, resources, or open URLs.
+	 */
+	public ClassLoader getClassLoader();
+
+	/**
+	 * Add a transformer supplied by the provider that will be
+	 * called for every new class definition or class redefinition
+	 * that gets loaded by the loader returned by the
+	 * PersistenceInfo.getClassLoader method. The transformer
+	 * has no effect on the result returned by the
+	 * PersistenceInfo.getTempClassLoader method.
+	 * Classes are only transformed once within the same classloading
+	 * scope, regardless of how many persistence units they may be
+	 * a part of.
+	 *
+	 * @param transformer A provider-supplied transformer that the
+	 *                    Container invokes at class-(re)definition time
+	 */
+	public void addTransformer(ClassTransformer transformer);
+
+	/**
+	 * Return a new instance of a ClassLoader that the provider
+	 * may use to temporarily load any classes, resources, or
+	 * open URLs. The scope and classpath of this loader is
+	 * exactly the same as that of the loader returned by
+	 * PersistenceInfo.getClassLoader. None of the classes loaded
+	 * by this class loader will be visible to application
+	 * components. The container does not use or maintain references
+	 * to this class loader after returning it to the provider.
+	 *
+	 * @return Temporary ClassLoader with same visibility as current
+	 * loader
+	 */
+	public ClassLoader getNewTempClassLoader();
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/spi/PersistenceUnitTransactionType.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/spi/PersistenceUnitTransactionType.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/spi/PersistenceUnitTransactionType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,20 +0,0 @@
-//$Id$
-//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
-package javax.persistence.spi;
-
-/**
- * This enum class defines whether the entity managers created by the EntityManagerFactory will be
- * JTA or resource-local entity managers.
- *
- * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
- */
-public enum PersistenceUnitTransactionType {
-	/**
-	 * JTA entity manager
-	 */
-	JTA,
-	/**
-	 * Resource-local entity manager
-	 */
-	RESOURCE_LOCAL
-}

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/spi/PersistenceUnitTransactionType.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/spi/PersistenceUnitTransactionType.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/spi/PersistenceUnitTransactionType.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/spi/PersistenceUnitTransactionType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,20 @@
+//$Id$
+//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
+package javax.persistence.spi;
+
+/**
+ * This enum class defines whether the entity managers created by the EntityManagerFactory will be
+ * JTA or resource-local entity managers.
+ *
+ * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
+ */
+public enum PersistenceUnitTransactionType {
+	/**
+	 * JTA entity manager
+	 */
+	JTA,
+	/**
+	 * Resource-local entity manager
+	 */
+	RESOURCE_LOCAL
+}

Deleted: trunk/HibernateExt/jpa-api/src/javax/persistence/spi/package-info.java
===================================================================
--- branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/spi/package-info.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/spi/package-info.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,10 +0,0 @@
-//$Id:$
-//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
-
-/**
- * The javax.persistence.spi package defines the classes and interfaces that are implemented by the
- * persistence provider and the Java EE container for use by the container, provider, and/or Persistence
- * bootstrap class in deployment and bootstrapping.
- */
-package javax.persistence.spi;
-

Copied: trunk/HibernateExt/jpa-api/src/javax/persistence/spi/package-info.java (from rev 11279, branches/Branch_3_2/HibernateExt/jpa-api/src/javax/persistence/spi/package-info.java)
===================================================================
--- trunk/HibernateExt/jpa-api/src/javax/persistence/spi/package-info.java	                        (rev 0)
+++ trunk/HibernateExt/jpa-api/src/javax/persistence/spi/package-info.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,10 @@
+//$Id:$
+//EJB3 Specification Copyright 2004-2006 Sun Microsystems, Inc.
+
+/**
+ * The javax.persistence.spi package defines the classes and interfaces that are implemented by the
+ * persistence provider and the Java EE container for use by the container, provider, and/or Persistence
+ * bootstrap class in deployment and bootstrapping.
+ */
+package javax.persistence.spi;
+

Copied: trunk/HibernateExt/search (from rev 11279, branches/Branch_3_2/HibernateExt/search)

Deleted: trunk/HibernateExt/search/build.properties.dist
===================================================================
--- branches/Branch_3_2/HibernateExt/search/build.properties.dist	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/build.properties.dist	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,10 +0,0 @@
-common.dir=.
-src.dir=src
-test.dir=test
-hibernate-core.home=../hibernate-3.2
-
-#locally present jars
-jpa-api.jar=./lib/ejb3-persistence.jar
-commons-annotations.jar=./lib/hibernate-commons-annotations.jar
-annotations.jar=./lib/test/hibernate-annotations.jar
-validator.jar=./lib/test/hibernate-validator.jar
\ No newline at end of file

Copied: trunk/HibernateExt/search/build.properties.dist (from rev 11279, branches/Branch_3_2/HibernateExt/search/build.properties.dist)
===================================================================
--- trunk/HibernateExt/search/build.properties.dist	                        (rev 0)
+++ trunk/HibernateExt/search/build.properties.dist	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,10 @@
+common.dir=.
+src.dir=src
+test.dir=test
+hibernate-core.home=../hibernate-3.2
+
+#locally present jars
+jpa-api.jar=./lib/ejb3-persistence.jar
+commons-annotations.jar=./lib/hibernate-commons-annotations.jar
+annotations.jar=./lib/test/hibernate-annotations.jar
+validator.jar=./lib/test/hibernate-validator.jar
\ No newline at end of file

Deleted: trunk/HibernateExt/search/build.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/search/build.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/build.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,285 +0,0 @@
-<!--
-
-  Hibernate Annotations ANT build script.
-
-  You need JDK 5.0 installed to build Hibernate Annotations.
-
--->
-
-<project name="Hibernate Search" default="dist" basedir=".">
-
-	<!-- Give user a chance to override without editing this file
-		   (and without typing -D each time it compiles it) -->
-	<property file="build.properties"/>
-	<property file="${user.home}/.ant.properties"/>
-
-	<!-- Name of project and version, used to create filenames -->
-	<property name="Name" value="Hibernate Search"/>
-	<property name="name" value="hibernate-search"/>
-	<property name="version" value="3.2.2.beta1"/>
-	<property name="javadoc.packagenames" value="org.hibernate.search.*"/>
-	<property name="copy.test" value="true"/>
-	<property name="javac.source" value="1.5"/>
-	<property name="javac.target" value="1.5"/>
-    <property name="jdbc.dir" value="jdbc"/>
-    <property name="common.dir" value="${basedir}/../common"/>
-
-    <property name="jpa-api.jar" value="${basedir}/../jpa-api/build/ejb3-persistence.jar"/>
-	<property name="annotations.jar"
-			  value="${basedir}/../annotations/target/hibernate-annotations/hibernate-annotations.jar"/>
-	<property name="commons-annotations.jar"
-			  value="${basedir}/../commons-annotations/target/hibernate-commons-annotations/hibernate-commons-annotations.jar"/>
-
-	<import file="${common.dir}/common-build.xml"/>
-
-    
-    <property name="build.testresources.dir" value="${build.dir}/testresources"/>
-    <property name="testresources.dir" value="${basedir}/src/test-resources"/>
-
-    <!-- override order for JBossXB to bootstrap properly -->
-    <path id="junit.classpath">
-           <fileset dir="${lib.dir}">
-                 <include name="*.jar"/>
-           </fileset>
-           <pathelement path="${classes.dir}"/>
-           <pathelement path="${testclasses.dir}"/>
-           <path refid="junit.moduleclasspath"/>
-           <path refid="lib.class.path"/>
-           <path location="${clover.jar}"/>
-    </path>
-    <!-- override order for JBossXB to bootstrap properly -->
-    <path id="lib.class.path">
-    	<path location="${hibernate-core.jar}"></path>
-        <fileset dir="${hibernate-core.lib.dir}">
-            <include name="*.jar"/>
-            <exclude name="xml-apis.jar"/>
-            <exclude name="xerces*.jar"/>
-        </fileset>
-        <fileset dir="${lib.dir}">
-            <include name="*.jar"/>
-        </fileset>
-		<path refid="lib.moduleclass.path"/>
-		<pathelement path="${clover.jar}"/>
-    </path>
-
-
-    <path id="lib.moduleclass.path">
-		<pathelement location="${jpa-api.jar}"/>
-		<pathelement location="${commons-annotations.jar}"/>
-	</path>
-	<path id="junit.moduleclasspath">
-        <!-- order matters for JBoss XB proper bootstrap -->
-        <fileset dir="${lib.dir}/test">
-			<include name="*.jar"/>
-			<include name="*.zip"/>
-		</fileset>
-        <pathelement location="${src.dir}"/>
-		<pathelement location="${test.dir}"/>
-		<pathelement location="${annotations.jar}"/>
-		<fileset dir="${jdbc.dir}">
-			<include name="*.jar"/>
-			<include name="*.zip"/>
-		</fileset>
-	</path>
-
-    <target name="init">
-		<antcall target="common-build.init"/>
-		<!-- check for dependency artefacts -->
-		<available file="${jpa-api.jar}" type="file" property="jpa-api.jar.available"/>
-		<available file="${commons-annotations.jar}" type="file" property="commons-annotations.jar.available"/>
-		<available file="${annotations.jar}" type="file" property="annotations.jar.available"/>
-        <mkdir dir="${lib.dir}/test"/>
-        <mkdir dir="${build.testresources.dir}"/>
-    </target>
-
-	<target name="get.jpa-api" depends="init" unless="jpa-api.jar.available">
-		<ant inheritall="false" dir="${basedir}/../jpa-api" target="clean"/>
-		<ant inheritall="false" dir="${basedir}/../jpa-api" target="jar"/>
-	</target>
-
-	<target name="get.commons-annotations" depends="init" unless="commons-annotations.jar.available">
-		<ant inheritall="false" dir="${basedir}/../commons-annotations" target="clean"/>
-		<ant inheritall="false" dir="${basedir}/../commons-annotations" target="jar"/>
-	</target>
-
-	<target name="get.annotations" depends="init" unless="annotations.jar.available">
-		<ant inheritall="false" dir="${basedir}/../annotations" target="clean"/>
-		<ant inheritall="false" dir="${basedir}/../annotations" target="jar"/>
-	</target>
-
-	<target name="compile" depends="init,get.commons-annotations" description="Compile the Java source code">
-		<available
-				classname="org.eclipse.core.launcher.Main"
-				property="build.compiler"
-				value="org.eclipse.jdt.core.JDTCompilerAdapter"
-				classpath="${java.class.path}"/>
-		<javac
-				srcdir="${src.dir}"
-				destdir="${classes.dir}"
-				classpathref="lib.class.path"
-				debug="${javac.debug}"
-				optimize="${javac.optimize}"
-				nowarn="on"
-                source="${javac.source}"
-                target="${javac.target}">
-			<src path="${src.dir}"/>
-		</javac>
-		<copy todir="${classes.dir}">
-			<fileset dir="${src.dir}">
-				<include name="**/resources/*.properties"/>
-				<include name="**/*.xsd"/>
-			</fileset>
-		</copy>
-	</target>
-
-	<target name="compiletest" depends="init,get.jpa-api,get.annotations,compile" description="Compile the tests">
-		<available
-				classname="org.eclipse.core.launcher.Main"
-				property="build.compiler"
-				value="org.eclipse.jdt.core.JDTCompilerAdapter"
-				classpath="${java.class.path}"/>
-		<javac
-				destdir="${testclasses.dir}"
-				classpathref="junit.classpath"
-				debug="${javac.debug}"
-				optimize="${javac.optimize}"
-				nowarn="on"
-                source="${javac.source}"
-                target="${javac.target}">
-			<src refid="testsrc.path"/>
-		</javac>
-	</target>
-
-    <target name="prepare-test-resources" depends="compiletest">
-        <copy todir="${build.testresources.dir}">
-            <fileset dir="${testresources.dir}">
-                <include name="**/*.*"/>
-            </fileset>
-        </copy>
-        <mkdir dir="${build.testresources.dir}/jars"/>
-        <jar filesetmanifest="merge" jarfile="${build.testresources.dir}/jars/jms-slave.jar" >
-            <fileset dir="${testclasses.dir}">
-                <include name="org/hibernate/search/test/jms/slave/**.*"/>
-            </fileset>
-        </jar>
-        <jar filesetmanifest="merge" jarfile="${build.testresources.dir}/jars/jms-master.jar" >
-            <fileset dir="${testclasses.dir}">
-                <include name="org/hibernate/search/test/jms/master/**.*"/>
-            </fileset>
-        </jar>
-    </target>
-
-    <target name="junit" depends="compiletest, prepare-test-resources">
-        <mkdir dir="test_output"/>
-        <junit forkmode="once" printsummary="yes" haltonfailure="yes">
-            <classpath>
-                <path path="${build.testresources.dir}"/>
-                <!-- dirset dir="${build.testresources.dir}">
-                    <include name="**/*.jar"/>
-                    <include name="**/*.par"/>
-                </dirset -->
-                <path refid="junit.classpath"/>
-                
-                <fileset dir="${jdbc.dir}">
-                    <include name="**/*.jar"/>
-                    <include name="**/*.zip"/>
-                </fileset>
-            </classpath>
-            <formatter type="plain"/>
-            <formatter type="xml"/>
-            <batchtest fork="yes" todir="test_output" haltonfailure="no">
-            	<fileset refid="junit.batchtestset"/>
-            </batchtest>
-        </junit>
-    </target>
-
-	<!-- Run a single unit test. -->
-	<target name="junitsingle" depends="compiletest"
-			description="Run a single test suite (requires testname and jdbc.driver properties)">
-		<mkdir dir="test_output"/>
-		<junit printsummary="yes" fork="yes" haltonfailure="yes">
-			<classpath>
-				<fileset dir="${jdbc.dir}">
-					<include name="**/*.jar"/>
-					<include name="**/*.zip"/>
-				</fileset>
-				<path refid="lib.class.path"/>
-				<pathelement path="${classes.dir}"/>
-				<pathelement path="${src.dir}"/>
-				<!-- pick up properties from here -->
-				<pathelement path="${test.dir}"/>
-				<!-- pick up mappings from here -->
-			</classpath>
-			<formatter type="plain"/>
-			<formatter type="xml"/>
-			<test fork="yes" todir="test_output" haltonfailure="no" name="${testname}"/>
-		</junit>
-	</target>
-
-	<!-- target name="report">
-			<mkdir dir="test_output"/>
-			<junitreport todir="test_output">
-			  <fileset dir="test_output">
-				<include name="TEST-*.xml"/>
-			  </fileset>
-			  <report format="frames" todir="test_output/report"/>
-			</junitreport>
-		</target -->
-
-	<target name="jar" depends="compile" description="Build the distribution .jar file">
-		<mkdir dir="${classes.dir}/META-INF"/>
-		<manifest file="${classes.dir}/META-INF/MANIFEST.MF">
-			<attribute name="Product" value="${Name}"/>
-			<attribute name="Version" value="${version}"/>
-		</manifest>
-		<antcall target="common-build.jar"/>
-	</target>
-
-	<!-- target name="javadoc" description="Compile the Javadoc API documentation to dist dir">
-				<echo>Skipping java doc since ant's javadoc task cannot handle an alternative javadoc</echo>
-		 </target -->
-
-
-	<!-- Some of this can probably be moved to common-build... -->
-	<target name="dist" depends="jar,javadoc,copysource,copytest,copylib,extras"
-			description="Build everything">
-
-		<ant inheritall="false" dir="${basedir}/doc/reference"/>
-		<copy todir="${dist.dir}/doc/reference" failonerror="false">
-			<fileset dir="${basedir}/doc/reference/build">
-				<include name="**/*.*"/>
-			</fileset>
-		</copy>
-
-		<copy todir="${dist.dir}" failonerror="false">
-			<fileset dir="${common.dir}">
-				<include name="common-build.xml"/>
-			</fileset>
-		</copy>
-
-        <!-- copy dependencies -->
-        <copy todir="${dist.lib.dir}" failonerror="false">
-			<fileset file="${jpa-api.jar}"/>
-            <fileset file="${commons-annotations.jar}"/>
-        </copy>
-        <mkdir dir="${dist.lib.dir}/test"/>
-        <copy todir="${dist.lib.dir}/test" failonerror="false">
-			<fileset file="${annotations.jar}"/>
-        </copy>
-
-        <copy file="${basedir}/build.properties.dist" tofile="${dist.dir}/build.properties" failonerror="false">
-		</copy>
-		<antcall target="common-build.dist"/>
-	</target>
-
-    <target name="zip-dist" description="zip the dist">
-		<zip zipfile="${dist.dir}-${version}.zip">
-			<zipfileset prefix="${name}-${version}" dir="${dist.dir}"/>
-		</zip>
-		<tar compression="gzip" tarfile="${dist.dir}-${version}.tar.gz">
-			<tarfileset prefix="${name}-${version}" dir="${dist.dir}"/>
-		</tar>
-	</target>
-
-
-</project>

Copied: trunk/HibernateExt/search/build.xml (from rev 11279, branches/Branch_3_2/HibernateExt/search/build.xml)
===================================================================
--- trunk/HibernateExt/search/build.xml	                        (rev 0)
+++ trunk/HibernateExt/search/build.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,285 @@
+<!--
+
+  Hibernate Annotations ANT build script.
+
+  You need JDK 5.0 installed to build Hibernate Annotations.
+
+-->
+
+<project name="Hibernate Search" default="dist" basedir=".">
+
+	<!-- Give user a chance to override without editing this file
+		   (and without typing -D each time it compiles it) -->
+	<property file="build.properties"/>
+	<property file="${user.home}/.ant.properties"/>
+
+	<!-- Name of project and version, used to create filenames -->
+	<property name="Name" value="Hibernate Search"/>
+	<property name="name" value="hibernate-search"/>
+	<property name="version" value="3.2.2.beta1"/>
+	<property name="javadoc.packagenames" value="org.hibernate.search.*"/>
+	<property name="copy.test" value="true"/>
+	<property name="javac.source" value="1.5"/>
+	<property name="javac.target" value="1.5"/>
+    <property name="jdbc.dir" value="jdbc"/>
+    <property name="common.dir" value="${basedir}/../common"/>
+
+    <property name="jpa-api.jar" value="${basedir}/../jpa-api/build/ejb3-persistence.jar"/>
+	<property name="annotations.jar"
+			  value="${basedir}/../annotations/target/hibernate-annotations/hibernate-annotations.jar"/>
+	<property name="commons-annotations.jar"
+			  value="${basedir}/../commons-annotations/target/hibernate-commons-annotations/hibernate-commons-annotations.jar"/>
+
+	<import file="${common.dir}/common-build.xml"/>
+
+    
+    <property name="build.testresources.dir" value="${build.dir}/testresources"/>
+    <property name="testresources.dir" value="${basedir}/src/test-resources"/>
+
+    <!-- override order for JBossXB to bootstrap properly -->
+    <path id="junit.classpath">
+           <fileset dir="${lib.dir}">
+                 <include name="*.jar"/>
+           </fileset>
+           <pathelement path="${classes.dir}"/>
+           <pathelement path="${testclasses.dir}"/>
+           <path refid="junit.moduleclasspath"/>
+           <path refid="lib.class.path"/>
+           <path location="${clover.jar}"/>
+    </path>
+    <!-- override order for JBossXB to bootstrap properly -->
+    <path id="lib.class.path">
+    	<path location="${hibernate-core.jar}"></path>
+        <fileset dir="${hibernate-core.lib.dir}">
+            <include name="*.jar"/>
+            <exclude name="xml-apis.jar"/>
+            <exclude name="xerces*.jar"/>
+        </fileset>
+        <fileset dir="${lib.dir}">
+            <include name="*.jar"/>
+        </fileset>
+		<path refid="lib.moduleclass.path"/>
+		<pathelement path="${clover.jar}"/>
+    </path>
+
+
+    <path id="lib.moduleclass.path">
+		<pathelement location="${jpa-api.jar}"/>
+		<pathelement location="${commons-annotations.jar}"/>
+	</path>
+	<path id="junit.moduleclasspath">
+        <!-- order matters for JBoss XB proper bootstrap -->
+        <fileset dir="${lib.dir}/test">
+			<include name="*.jar"/>
+			<include name="*.zip"/>
+		</fileset>
+        <pathelement location="${src.dir}"/>
+		<pathelement location="${test.dir}"/>
+		<pathelement location="${annotations.jar}"/>
+		<fileset dir="${jdbc.dir}">
+			<include name="*.jar"/>
+			<include name="*.zip"/>
+		</fileset>
+	</path>
+
+    <target name="init">
+		<antcall target="common-build.init"/>
+		<!-- check for dependency artefacts -->
+		<available file="${jpa-api.jar}" type="file" property="jpa-api.jar.available"/>
+		<available file="${commons-annotations.jar}" type="file" property="commons-annotations.jar.available"/>
+		<available file="${annotations.jar}" type="file" property="annotations.jar.available"/>
+        <mkdir dir="${lib.dir}/test"/>
+        <mkdir dir="${build.testresources.dir}"/>
+    </target>
+
+	<target name="get.jpa-api" depends="init" unless="jpa-api.jar.available">
+		<ant inheritall="false" dir="${basedir}/../jpa-api" target="clean"/>
+		<ant inheritall="false" dir="${basedir}/../jpa-api" target="jar"/>
+	</target>
+
+	<target name="get.commons-annotations" depends="init" unless="commons-annotations.jar.available">
+		<ant inheritall="false" dir="${basedir}/../commons-annotations" target="clean"/>
+		<ant inheritall="false" dir="${basedir}/../commons-annotations" target="jar"/>
+	</target>
+
+	<target name="get.annotations" depends="init" unless="annotations.jar.available">
+		<ant inheritall="false" dir="${basedir}/../annotations" target="clean"/>
+		<ant inheritall="false" dir="${basedir}/../annotations" target="jar"/>
+	</target>
+
+	<target name="compile" depends="init,get.commons-annotations" description="Compile the Java source code">
+		<available
+				classname="org.eclipse.core.launcher.Main"
+				property="build.compiler"
+				value="org.eclipse.jdt.core.JDTCompilerAdapter"
+				classpath="${java.class.path}"/>
+		<javac
+				srcdir="${src.dir}"
+				destdir="${classes.dir}"
+				classpathref="lib.class.path"
+				debug="${javac.debug}"
+				optimize="${javac.optimize}"
+				nowarn="on"
+                source="${javac.source}"
+                target="${javac.target}">
+			<src path="${src.dir}"/>
+		</javac>
+		<copy todir="${classes.dir}">
+			<fileset dir="${src.dir}">
+				<include name="**/resources/*.properties"/>
+				<include name="**/*.xsd"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="compiletest" depends="init,get.jpa-api,get.annotations,compile" description="Compile the tests">
+		<available
+				classname="org.eclipse.core.launcher.Main"
+				property="build.compiler"
+				value="org.eclipse.jdt.core.JDTCompilerAdapter"
+				classpath="${java.class.path}"/>
+		<javac
+				destdir="${testclasses.dir}"
+				classpathref="junit.classpath"
+				debug="${javac.debug}"
+				optimize="${javac.optimize}"
+				nowarn="on"
+                source="${javac.source}"
+                target="${javac.target}">
+			<src refid="testsrc.path"/>
+		</javac>
+	</target>
+
+    <target name="prepare-test-resources" depends="compiletest">
+        <copy todir="${build.testresources.dir}">
+            <fileset dir="${testresources.dir}">
+                <include name="**/*.*"/>
+            </fileset>
+        </copy>
+        <mkdir dir="${build.testresources.dir}/jars"/>
+        <jar filesetmanifest="merge" jarfile="${build.testresources.dir}/jars/jms-slave.jar" >
+            <fileset dir="${testclasses.dir}">
+                <include name="org/hibernate/search/test/jms/slave/**.*"/>
+            </fileset>
+        </jar>
+        <jar filesetmanifest="merge" jarfile="${build.testresources.dir}/jars/jms-master.jar" >
+            <fileset dir="${testclasses.dir}">
+                <include name="org/hibernate/search/test/jms/master/**.*"/>
+            </fileset>
+        </jar>
+    </target>
+
+    <target name="junit" depends="compiletest, prepare-test-resources">
+        <mkdir dir="test_output"/>
+        <junit forkmode="once" printsummary="yes" haltonfailure="yes">
+            <classpath>
+                <path path="${build.testresources.dir}"/>
+                <!-- dirset dir="${build.testresources.dir}">
+                    <include name="**/*.jar"/>
+                    <include name="**/*.par"/>
+                </dirset -->
+                <path refid="junit.classpath"/>
+                
+                <fileset dir="${jdbc.dir}">
+                    <include name="**/*.jar"/>
+                    <include name="**/*.zip"/>
+                </fileset>
+            </classpath>
+            <formatter type="plain"/>
+            <formatter type="xml"/>
+            <batchtest fork="yes" todir="test_output" haltonfailure="no">
+            	<fileset refid="junit.batchtestset"/>
+            </batchtest>
+        </junit>
+    </target>
+
+	<!-- Run a single unit test. -->
+	<target name="junitsingle" depends="compiletest"
+			description="Run a single test suite (requires testname and jdbc.driver properties)">
+		<mkdir dir="test_output"/>
+		<junit printsummary="yes" fork="yes" haltonfailure="yes">
+			<classpath>
+				<fileset dir="${jdbc.dir}">
+					<include name="**/*.jar"/>
+					<include name="**/*.zip"/>
+				</fileset>
+				<path refid="lib.class.path"/>
+				<pathelement path="${classes.dir}"/>
+				<pathelement path="${src.dir}"/>
+				<!-- pick up properties from here -->
+				<pathelement path="${test.dir}"/>
+				<!-- pick up mappings from here -->
+			</classpath>
+			<formatter type="plain"/>
+			<formatter type="xml"/>
+			<test fork="yes" todir="test_output" haltonfailure="no" name="${testname}"/>
+		</junit>
+	</target>
+
+	<!-- target name="report">
+			<mkdir dir="test_output"/>
+			<junitreport todir="test_output">
+			  <fileset dir="test_output">
+				<include name="TEST-*.xml"/>
+			  </fileset>
+			  <report format="frames" todir="test_output/report"/>
+			</junitreport>
+		</target -->
+
+	<target name="jar" depends="compile" description="Build the distribution .jar file">
+		<mkdir dir="${classes.dir}/META-INF"/>
+		<manifest file="${classes.dir}/META-INF/MANIFEST.MF">
+			<attribute name="Product" value="${Name}"/>
+			<attribute name="Version" value="${version}"/>
+		</manifest>
+		<antcall target="common-build.jar"/>
+	</target>
+
+	<!-- target name="javadoc" description="Compile the Javadoc API documentation to dist dir">
+				<echo>Skipping java doc since ant's javadoc task cannot handle an alternative javadoc</echo>
+		 </target -->
+
+
+	<!-- Some of this can probably be moved to common-build... -->
+	<target name="dist" depends="jar,javadoc,copysource,copytest,copylib,extras"
+			description="Build everything">
+
+		<ant inheritall="false" dir="${basedir}/doc/reference"/>
+		<copy todir="${dist.dir}/doc/reference" failonerror="false">
+			<fileset dir="${basedir}/doc/reference/build">
+				<include name="**/*.*"/>
+			</fileset>
+		</copy>
+
+		<copy todir="${dist.dir}" failonerror="false">
+			<fileset dir="${common.dir}">
+				<include name="common-build.xml"/>
+			</fileset>
+		</copy>
+
+        <!-- copy dependencies -->
+        <copy todir="${dist.lib.dir}" failonerror="false">
+			<fileset file="${jpa-api.jar}"/>
+            <fileset file="${commons-annotations.jar}"/>
+        </copy>
+        <mkdir dir="${dist.lib.dir}/test"/>
+        <copy todir="${dist.lib.dir}/test" failonerror="false">
+			<fileset file="${annotations.jar}"/>
+        </copy>
+
+        <copy file="${basedir}/build.properties.dist" tofile="${dist.dir}/build.properties" failonerror="false">
+		</copy>
+		<antcall target="common-build.dist"/>
+	</target>
+
+    <target name="zip-dist" description="zip the dist">
+		<zip zipfile="${dist.dir}-${version}.zip">
+			<zipfileset prefix="${name}-${version}" dir="${dist.dir}"/>
+		</zip>
+		<tar compression="gzip" tarfile="${dist.dir}-${version}.tar.gz">
+			<tarfileset prefix="${name}-${version}" dir="${dist.dir}"/>
+		</tar>
+	</target>
+
+
+</project>

Deleted: trunk/HibernateExt/search/changelog.txt
===================================================================
--- branches/Branch_3_2/HibernateExt/search/changelog.txt	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/changelog.txt	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,7 +0,0 @@
-Hibernate Search Changelog
-==========================
-
-3.2.2.GA (xx-02-2007)
----------------------
-
-Initial release as a standalone product (see Hibernate Annotations changelog for previous informations)
\ No newline at end of file

Copied: trunk/HibernateExt/search/changelog.txt (from rev 11279, branches/Branch_3_2/HibernateExt/search/changelog.txt)
===================================================================
--- trunk/HibernateExt/search/changelog.txt	                        (rev 0)
+++ trunk/HibernateExt/search/changelog.txt	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,7 @@
+Hibernate Search Changelog
+==========================
+
+3.2.2.GA (xx-02-2007)
+---------------------
+
+Initial release as a standalone product (see Hibernate Annotations changelog for previous informations)
\ No newline at end of file

Copied: trunk/HibernateExt/search/doc (from rev 11279, branches/Branch_3_2/HibernateExt/search/doc)

Copied: trunk/HibernateExt/search/doc/api (from rev 11279, branches/Branch_3_2/HibernateExt/search/doc/api)

Deleted: trunk/HibernateExt/search/doc/api/package.html
===================================================================
--- branches/Branch_3_2/HibernateExt/search/doc/api/package.html	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/doc/api/package.html	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1 +0,0 @@
-<body></body>

Copied: trunk/HibernateExt/search/doc/api/package.html (from rev 11279, branches/Branch_3_2/HibernateExt/search/doc/api/package.html)
===================================================================
--- trunk/HibernateExt/search/doc/api/package.html	                        (rev 0)
+++ trunk/HibernateExt/search/doc/api/package.html	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1 @@
+<body></body>

Copied: trunk/HibernateExt/search/doc/reference (from rev 11279, branches/Branch_3_2/HibernateExt/search/doc/reference)


Property changes on: trunk/HibernateExt/search/doc/reference
___________________________________________________________________
Name: svn:ignore
   + build

Deleted: trunk/HibernateExt/search/doc/reference/.cvsignore
===================================================================
(Binary files differ)

Copied: trunk/HibernateExt/search/doc/reference/.cvsignore (from rev 11279, branches/Branch_3_2/HibernateExt/search/doc/reference/.cvsignore)
===================================================================
(Binary files differ)

Deleted: trunk/HibernateExt/search/doc/reference/build.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/search/doc/reference/build.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/doc/reference/build.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,17 +0,0 @@
-<project name="Documentation" default="all.doc" basedir=".">
-
-    <!-- Use the core Hibernate3 doc build system -->
-    <import file="../../../common/common-build.xml"/>
-    <import file="${hibernate-cvs.doc.reference}/build.xml"/>
-
-
-    <target name="all.doc" depends="clean">
-
-        <!-- TRANSLATOR: Duplicate this call for your language -->
-        <antcall target="lang.all">
-            <param name="docname" value="hibernate_search"/>
-            <param name="lang" value="en"/>
-        </antcall>
-    </target>
-
-</project>

Copied: trunk/HibernateExt/search/doc/reference/build.xml (from rev 11279, branches/Branch_3_2/HibernateExt/search/doc/reference/build.xml)
===================================================================
--- trunk/HibernateExt/search/doc/reference/build.xml	                        (rev 0)
+++ trunk/HibernateExt/search/doc/reference/build.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,17 @@
+<project name="Documentation" default="all.doc" basedir=".">
+
+    <!-- Use the core Hibernate3 doc build system -->
+    <import file="../../../common/common-build.xml"/>
+    <import file="${hibernate-cvs.doc.reference}/build.xml"/>
+
+
+    <target name="all.doc" depends="clean">
+
+        <!-- TRANSLATOR: Duplicate this call for your language -->
+        <antcall target="lang.all">
+            <param name="docname" value="hibernate_search"/>
+            <param name="lang" value="en"/>
+        </antcall>
+    </target>
+
+</project>

Copied: trunk/HibernateExt/search/doc/reference/en (from rev 11279, branches/Branch_3_2/HibernateExt/search/doc/reference/en)

Copied: trunk/HibernateExt/search/doc/reference/en/images (from rev 11279, branches/Branch_3_2/HibernateExt/search/doc/reference/en/images)

Deleted: trunk/HibernateExt/search/doc/reference/en/images/hibernate_logo_a.png
===================================================================
(Binary files differ)

Copied: trunk/HibernateExt/search/doc/reference/en/images/hibernate_logo_a.png (from rev 11279, branches/Branch_3_2/HibernateExt/search/doc/reference/en/images/hibernate_logo_a.png)
===================================================================
(Binary files differ)

Deleted: trunk/HibernateExt/search/doc/reference/en/images/jms-backend.png
===================================================================
(Binary files differ)

Copied: trunk/HibernateExt/search/doc/reference/en/images/jms-backend.png (from rev 11279, branches/Branch_3_2/HibernateExt/search/doc/reference/en/images/jms-backend.png)
===================================================================
(Binary files differ)

Deleted: trunk/HibernateExt/search/doc/reference/en/images/lucene-backend.png
===================================================================
(Binary files differ)

Copied: trunk/HibernateExt/search/doc/reference/en/images/lucene-backend.png (from rev 11279, branches/Branch_3_2/HibernateExt/search/doc/reference/en/images/lucene-backend.png)
===================================================================
(Binary files differ)

Deleted: trunk/HibernateExt/search/doc/reference/en/master.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/search/doc/reference/en/master.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/doc/reference/en/master.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3CR3//EN"
-        "../../../../../Hibernate3/doc/reference/support/docbook-dtd/docbookx.dtd" [
-        <!ENTITY architecture SYSTEM "modules/architecture.xml">
-        <!ENTITY configuration SYSTEM "modules/configuration.xml">
-        <!ENTITY mapping SYSTEM "modules/mapping.xml">
-        <!ENTITY query SYSTEM "modules/query.xml">
-        <!ENTITY batchindex SYSTEM "modules/batchindex.xml">
-        ]>
-<book lang="en">
-  <bookinfo>
-    <title>Hibernate Search</title>
-    <subtitle>Apache <trademark>Lucene</trademark>
-  Integration</subtitle>
-
-    <subtitle>Reference Guide</subtitle>
-
-    <releaseinfo>3.2.2.beta1</releaseinfo>
-
-    <mediaobject>
-      <imageobject>
-        <imagedata fileref="images/hibernate_logo_a.png" format="png"/>
-      </imageobject>
-    </mediaobject>
-  </bookinfo>
-
-  <toc></toc>
-
-  <preface id="preface" revision="2">
-    <title>Preface</title>
-
-    <para>Full text search engines like <productname>Apache Lucene</productname>
-        are a very powerful technology to
-bring free text/efficient queries to applications. If suffers several mismatches
-when dealing with a object domain model (keeping the index up to date, mismatch
-between the index structure and the domain model, querying mismatch...)
-Hibernate Search indexes your domain model thanks to a few annotations, takes
-care of the database / index synchronization and brings you back regular managed
-objects from free text queries.
-Hibernate Search is using <ulink url="http://lucene.apache.org">Apache Lucene</ulink>
-under the cover.</para>
-
-  <para>Hibernate Search is a work in progress and new features are cooking in
-  this area. So expect some compatibility changes in subsequent
-  versions.</para>
-  </preface>
-
-    &architecture;
-
-    &configuration;
-
-    &mapping;
-
-    &query;
-
-    &batchindex;
-</book>
\ No newline at end of file

Copied: trunk/HibernateExt/search/doc/reference/en/master.xml (from rev 11279, branches/Branch_3_2/HibernateExt/search/doc/reference/en/master.xml)
===================================================================
--- trunk/HibernateExt/search/doc/reference/en/master.xml	                        (rev 0)
+++ trunk/HibernateExt/search/doc/reference/en/master.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3CR3//EN"
+        "../../../../../Hibernate3/doc/reference/support/docbook-dtd/docbookx.dtd" [
+        <!ENTITY architecture SYSTEM "modules/architecture.xml">
+        <!ENTITY configuration SYSTEM "modules/configuration.xml">
+        <!ENTITY mapping SYSTEM "modules/mapping.xml">
+        <!ENTITY query SYSTEM "modules/query.xml">
+        <!ENTITY batchindex SYSTEM "modules/batchindex.xml">
+        ]>
+<book lang="en">
+  <bookinfo>
+    <title>Hibernate Search</title>
+    <subtitle>Apache <trademark>Lucene</trademark>
+  Integration</subtitle>
+
+    <subtitle>Reference Guide</subtitle>
+
+    <releaseinfo>3.2.2.beta1</releaseinfo>
+
+    <mediaobject>
+      <imageobject>
+        <imagedata fileref="images/hibernate_logo_a.png" format="png"/>
+      </imageobject>
+    </mediaobject>
+  </bookinfo>
+
+  <toc></toc>
+
+  <preface id="preface" revision="2">
+    <title>Preface</title>
+
+    <para>Full text search engines like <productname>Apache Lucene</productname>
+        are a very powerful technology to
+bring free text/efficient queries to applications. If suffers several mismatches
+when dealing with a object domain model (keeping the index up to date, mismatch
+between the index structure and the domain model, querying mismatch...)
+Hibernate Search indexes your domain model thanks to a few annotations, takes
+care of the database / index synchronization and brings you back regular managed
+objects from free text queries.
+Hibernate Search is using <ulink url="http://lucene.apache.org">Apache Lucene</ulink>
+under the cover.</para>
+
+  <para>Hibernate Search is a work in progress and new features are cooking in
+  this area. So expect some compatibility changes in subsequent
+  versions.</para>
+  </preface>
+
+    &architecture;
+
+    &configuration;
+
+    &mapping;
+
+    &query;
+
+    &batchindex;
+</book>
\ No newline at end of file

Copied: trunk/HibernateExt/search/doc/reference/en/modules (from rev 11279, branches/Branch_3_2/HibernateExt/search/doc/reference/en/modules)

Deleted: trunk/HibernateExt/search/doc/reference/en/modules/architecture.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/search/doc/reference/en/modules/architecture.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/doc/reference/en/modules/architecture.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,188 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<chapter id="search-architecture">
-  <title>Architecture</title>
-
-  <para>Hibernate Search is made of an indexing engine and an index search
-  engine. Both are backed by Apache Lucene.</para>
-
-  <para>When an entity is inserted, updated or removed to/from the database,
-  <productname>Hibernate Search</productname> keeps track of this event
-  (through the Hibernate event system) and schedule an index update. All the
-  index updates are handled for you without you having to use the Apache
-  Lucene APIs.</para>
-
-  <para>To interact with Apache Lucene indexes, Hibernate Search has the
-  notion of <classname>DirectoryProvider</classname> . A directory provider
-  will manage a given Lucene <classname>Directory</classname> type. You can
-  configure directory providers to adjust the directory target.</para>
-
-  <para><productname>Hibernate Search</productname> can also use a Lucene
-  index to search an entity and return a (list of) managed entity saving you
-  from the tedious Object / Lucene Document mapping and low level Lucene APIs.
-  The same persistence context is shared between Hibernate and Hibernate
-  Search ; as a matter of fact, the Seearch Session is built on top of the
-  Hibernate Session. The application code use the unified
-  <classname>org.hibernate.Query</classname> API exactly the way a HQL or
-  native query would be done.</para>
-
-  <section>
-    <title>Batching Scope</title>
-
-    <para>To be more efficient, Hibernate Search batch the interactions with
-    the Lucene index. There is currently two types of batching depending on
-    the expected scope.</para>
-
-    <para>When out of transaction, the index update operation is executed
-    right after the actual database operation. This scope is really a no
-    scoping, and no batching is performed.</para>
-
-    <para>It is however recommended, for both your database and Hibernate
-    Search, to execute your operation in a transaction (whether it be JDBC or
-    JTA). When in a transaction, the index update operation is schedule for
-    the transaction commit (and discarded in case of transaction rollback).
-    The batching scope is the transaction. There is 2 immediate
-    benefits:</para>
-
-    <itemizedlist>
-      <listitem>
-        <para>performance: Lucene indexing works better when operation are
-        executed in batch.</para>
-      </listitem>
-
-      <listitem>
-        <para>ACIDity: The work executed has the same scoping as the one
-        executed by the database transaction and is executed if and only if
-        the transaction is committed.</para>
-
-        <note>
-          <para>Disclamer, the work in not ACID in the strict sense of it, but
-          ACID behavior is rarely useful for full text search indexes since
-          they can be rebuilt from the source at any time.</para>
-        </note>
-      </listitem>
-    </itemizedlist>
-
-    <para>You can think of those two scopes (no scope vs transactional) as the
-    equivalent of the (infamous) autocommit vs transactional behavior. From a
-    performance perspective, the <emphasis>in transaction</emphasis> mode is
-    recommended. The scoping choice is made transparently: Hibernate Search
-    detects the presence of a transaction and adjust the scoping.</para>
-
-    <remark>Note that Hibernate Search works perfectly fine in the Hibernate /
-    EntityManager long conversation pattern aka. atomic conversation.</remark>
-
-    <para>Depending on user demand, additional scoping will be considered, the
-    pluggability mechanism being already in place.</para>
-  </section>
-
-  <section>
-    <title>Back end</title>
-
-    <para>Hibernate Search offers the ability to let the scoped work being
-    processed by different back ends. Two back ends are provided out of the
-    box for 2 different scenarii.</para>
-
-    <section>
-      <title>Lucene</title>
-
-      <para>In this mode, all index update operations applied on a given node
-      (JVM) will be executed to the Lucene directories (through the directory
-      providers) by the same node. This mode is typically used in non
-      clustered mode or in clustered mode where the directory store is
-      shared.</para>
-
-      <mediaobject>
-        <imageobject role="html">
-          <imagedata align="center"
-                     fileref="../shared/images/lucene-backend.png"
-                     format="PNG" />
-        </imageobject>
-
-        <imageobject role="fo">
-          <imagedata align="center" fileref="images/lucene-backend.png"
-                     format="PNG" />
-        </imageobject>
-      </mediaobject>
-
-      <para>This mode targets non clustered applications, or clustered
-      applications where the Directory is taking care of the locking
-      strategy.</para>
-
-      <para>The main advantage is simplicity and immediate visibility of the
-      changes in Lucene queries (a requirement is some applications).</para>
-    </section>
-
-    <section>
-      <title>JMS</title>
-
-      <para>All index update operations applied on a given node are sent to a
-      JMS queue. A unique reader will then process the queue and update the
-      master Lucene index. The master index is then replicated on a regular
-      basis to the slave copies. This is known as the master / slaves pattern.
-      The master is the sole responsible for updating the Lucene index, the
-      slaves can accept read/write operations, process the read operation on
-      their local index copy, and delegate the update operations to the
-      master.</para>
-
-      <mediaobject>
-        <imageobject role="html">
-          <imagedata align="center" fileref="../shared/images/jms-backend.png"
-                     format="PNG" />
-        </imageobject>
-
-        <imageobject role="fo">
-          <imagedata align="center" fileref="images/jms-backend.png"
-                     format="PNG" />
-        </imageobject>
-      </mediaobject>
-
-      <para>This mode targets clustered environments where throughput is
-      critical, and index update delays are affordable. Reliability is ensured
-      by the JMS provider and by having the slaves working on a local copy of
-      the index.</para>
-    </section>
-
-    <section>
-      <title>Custom</title>
-
-      <para>Hibernate Search is an extensible architecture. While not yet part
-      of the public API, pluging a third party back end is possible. Feel free
-      to drop ideas to
-      <literal>hibernate-dev at lists.jboss.org</literal>.</para>
-    </section>
-  </section>
-
-  <section>
-    <title>Work execution</title>
-
-    <para>The indexing work (done by the back end) can be executed
-    synchronously with the transaction commit (or update operation if out of
-    transaction), or asynchronously.</para>
-
-    <section>
-      <title>Synchronous</title>
-
-      <para>This is the safe mode where the back end work is executed in
-      concert with the transaction commit. Under highly concurrent
-      environment, this can lead to throughput limitation (due to the Apache
-      Lucene lock mechanism). It can increase the system response time too if
-      the backend is significantly slower than the transactional process and
-      if a lot of IO operations are involved.</para>
-    </section>
-
-    <section>
-      <title>Asynchronous</title>
-
-      <para>This mode delegates the work done by the back end to a different
-      thread. That way, throughput and response time are (to a certain extend)
-      decorrelated from the back end performance. The drawback is that a small
-      delay appears between the transaction commit and the index update and a
-      small overhead is introduced to deal with thread management.</para>
-
-      <para>It is recommended to use synchronous execution first and evaluate
-      asynchronous if performance problems occur and after having set up a
-      proper benchmark (ie not a lonely cowboy hitting the system in a
-      completely unrealistic way).</para>
-    </section>
-  </section>
-</chapter>
\ No newline at end of file

Copied: trunk/HibernateExt/search/doc/reference/en/modules/architecture.xml (from rev 11279, branches/Branch_3_2/HibernateExt/search/doc/reference/en/modules/architecture.xml)
===================================================================
--- trunk/HibernateExt/search/doc/reference/en/modules/architecture.xml	                        (rev 0)
+++ trunk/HibernateExt/search/doc/reference/en/modules/architecture.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,188 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<chapter id="search-architecture">
+  <title>Architecture</title>
+
+  <para>Hibernate Search is made of an indexing engine and an index search
+  engine. Both are backed by Apache Lucene.</para>
+
+  <para>When an entity is inserted, updated or removed to/from the database,
+  <productname>Hibernate Search</productname> keeps track of this event
+  (through the Hibernate event system) and schedule an index update. All the
+  index updates are handled for you without you having to use the Apache
+  Lucene APIs.</para>
+
+  <para>To interact with Apache Lucene indexes, Hibernate Search has the
+  notion of <classname>DirectoryProvider</classname> . A directory provider
+  will manage a given Lucene <classname>Directory</classname> type. You can
+  configure directory providers to adjust the directory target.</para>
+
+  <para><productname>Hibernate Search</productname> can also use a Lucene
+  index to search an entity and return a (list of) managed entity saving you
+  from the tedious Object / Lucene Document mapping and low level Lucene APIs.
+  The same persistence context is shared between Hibernate and Hibernate
+  Search ; as a matter of fact, the Seearch Session is built on top of the
+  Hibernate Session. The application code use the unified
+  <classname>org.hibernate.Query</classname> API exactly the way a HQL or
+  native query would be done.</para>
+
+  <section>
+    <title>Batching Scope</title>
+
+    <para>To be more efficient, Hibernate Search batch the interactions with
+    the Lucene index. There is currently two types of batching depending on
+    the expected scope.</para>
+
+    <para>When out of transaction, the index update operation is executed
+    right after the actual database operation. This scope is really a no
+    scoping, and no batching is performed.</para>
+
+    <para>It is however recommended, for both your database and Hibernate
+    Search, to execute your operation in a transaction (whether it be JDBC or
+    JTA). When in a transaction, the index update operation is schedule for
+    the transaction commit (and discarded in case of transaction rollback).
+    The batching scope is the transaction. There is 2 immediate
+    benefits:</para>
+
+    <itemizedlist>
+      <listitem>
+        <para>performance: Lucene indexing works better when operation are
+        executed in batch.</para>
+      </listitem>
+
+      <listitem>
+        <para>ACIDity: The work executed has the same scoping as the one
+        executed by the database transaction and is executed if and only if
+        the transaction is committed.</para>
+
+        <note>
+          <para>Disclamer, the work in not ACID in the strict sense of it, but
+          ACID behavior is rarely useful for full text search indexes since
+          they can be rebuilt from the source at any time.</para>
+        </note>
+      </listitem>
+    </itemizedlist>
+
+    <para>You can think of those two scopes (no scope vs transactional) as the
+    equivalent of the (infamous) autocommit vs transactional behavior. From a
+    performance perspective, the <emphasis>in transaction</emphasis> mode is
+    recommended. The scoping choice is made transparently: Hibernate Search
+    detects the presence of a transaction and adjust the scoping.</para>
+
+    <remark>Note that Hibernate Search works perfectly fine in the Hibernate /
+    EntityManager long conversation pattern aka. atomic conversation.</remark>
+
+    <para>Depending on user demand, additional scoping will be considered, the
+    pluggability mechanism being already in place.</para>
+  </section>
+
+  <section>
+    <title>Back end</title>
+
+    <para>Hibernate Search offers the ability to let the scoped work being
+    processed by different back ends. Two back ends are provided out of the
+    box for 2 different scenarii.</para>
+
+    <section>
+      <title>Lucene</title>
+
+      <para>In this mode, all index update operations applied on a given node
+      (JVM) will be executed to the Lucene directories (through the directory
+      providers) by the same node. This mode is typically used in non
+      clustered mode or in clustered mode where the directory store is
+      shared.</para>
+
+      <mediaobject>
+        <imageobject role="html">
+          <imagedata align="center"
+                     fileref="../shared/images/lucene-backend.png"
+                     format="PNG" />
+        </imageobject>
+
+        <imageobject role="fo">
+          <imagedata align="center" fileref="images/lucene-backend.png"
+                     format="PNG" />
+        </imageobject>
+      </mediaobject>
+
+      <para>This mode targets non clustered applications, or clustered
+      applications where the Directory is taking care of the locking
+      strategy.</para>
+
+      <para>The main advantage is simplicity and immediate visibility of the
+      changes in Lucene queries (a requirement is some applications).</para>
+    </section>
+
+    <section>
+      <title>JMS</title>
+
+      <para>All index update operations applied on a given node are sent to a
+      JMS queue. A unique reader will then process the queue and update the
+      master Lucene index. The master index is then replicated on a regular
+      basis to the slave copies. This is known as the master / slaves pattern.
+      The master is the sole responsible for updating the Lucene index, the
+      slaves can accept read/write operations, process the read operation on
+      their local index copy, and delegate the update operations to the
+      master.</para>
+
+      <mediaobject>
+        <imageobject role="html">
+          <imagedata align="center" fileref="../shared/images/jms-backend.png"
+                     format="PNG" />
+        </imageobject>
+
+        <imageobject role="fo">
+          <imagedata align="center" fileref="images/jms-backend.png"
+                     format="PNG" />
+        </imageobject>
+      </mediaobject>
+
+      <para>This mode targets clustered environments where throughput is
+      critical, and index update delays are affordable. Reliability is ensured
+      by the JMS provider and by having the slaves working on a local copy of
+      the index.</para>
+    </section>
+
+    <section>
+      <title>Custom</title>
+
+      <para>Hibernate Search is an extensible architecture. While not yet part
+      of the public API, pluging a third party back end is possible. Feel free
+      to drop ideas to
+      <literal>hibernate-dev at lists.jboss.org</literal>.</para>
+    </section>
+  </section>
+
+  <section>
+    <title>Work execution</title>
+
+    <para>The indexing work (done by the back end) can be executed
+    synchronously with the transaction commit (or update operation if out of
+    transaction), or asynchronously.</para>
+
+    <section>
+      <title>Synchronous</title>
+
+      <para>This is the safe mode where the back end work is executed in
+      concert with the transaction commit. Under highly concurrent
+      environment, this can lead to throughput limitation (due to the Apache
+      Lucene lock mechanism). It can increase the system response time too if
+      the backend is significantly slower than the transactional process and
+      if a lot of IO operations are involved.</para>
+    </section>
+
+    <section>
+      <title>Asynchronous</title>
+
+      <para>This mode delegates the work done by the back end to a different
+      thread. That way, throughput and response time are (to a certain extend)
+      decorrelated from the back end performance. The drawback is that a small
+      delay appears between the transaction commit and the index update and a
+      small overhead is introduced to deal with thread management.</para>
+
+      <para>It is recommended to use synchronous execution first and evaluate
+      asynchronous if performance problems occur and after having set up a
+      proper benchmark (ie not a lonely cowboy hitting the system in a
+      completely unrealistic way).</para>
+    </section>
+  </section>
+</chapter>
\ No newline at end of file

Deleted: trunk/HibernateExt/search/doc/reference/en/modules/batchindex.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/search/doc/reference/en/modules/batchindex.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/doc/reference/en/modules/batchindex.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<chapter id="search-batchindex">
-  <title>Indexing</title>
-
-  <para>It is sometimes useful to index an object event if this object is not
-  inserted nor updated to the database. This is especially true when you want
-  to build your index the first time. You can achieve that goal using the
-  <classname>FullTextSession</classname> .</para>
-
-  <programlisting>FullTextSession fullTextSession = Search.createFullTextSession(session);
-Transaction tx = fullTextSession.beginTransaction();
-for (Customer customer : customers) {
-    <emphasis role="bold">fullTextSession.index(customer);</emphasis>
-}
-tx.commit(); //index are written at commit time    </programlisting>
-
-  <para>For maximum efficiency, Hibernate Search batch index operations which
-  and execute them at commit time (Note: you don't need to use
-  <classname>org.hibernate.Transaction</classname> in a JTA
-  environment).</para>
-</chapter>
\ No newline at end of file

Copied: trunk/HibernateExt/search/doc/reference/en/modules/batchindex.xml (from rev 11279, branches/Branch_3_2/HibernateExt/search/doc/reference/en/modules/batchindex.xml)
===================================================================
--- trunk/HibernateExt/search/doc/reference/en/modules/batchindex.xml	                        (rev 0)
+++ trunk/HibernateExt/search/doc/reference/en/modules/batchindex.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<chapter id="search-batchindex">
+  <title>Indexing</title>
+
+  <para>It is sometimes useful to index an object event if this object is not
+  inserted nor updated to the database. This is especially true when you want
+  to build your index the first time. You can achieve that goal using the
+  <classname>FullTextSession</classname> .</para>
+
+  <programlisting>FullTextSession fullTextSession = Search.createFullTextSession(session);
+Transaction tx = fullTextSession.beginTransaction();
+for (Customer customer : customers) {
+    <emphasis role="bold">fullTextSession.index(customer);</emphasis>
+}
+tx.commit(); //index are written at commit time    </programlisting>
+
+  <para>For maximum efficiency, Hibernate Search batch index operations which
+  and execute them at commit time (Note: you don't need to use
+  <classname>org.hibernate.Transaction</classname> in a JTA
+  environment).</para>
+</chapter>
\ No newline at end of file

Deleted: trunk/HibernateExt/search/doc/reference/en/modules/configuration.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/search/doc/reference/en/modules/configuration.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/doc/reference/en/modules/configuration.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,384 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<chapter id="search-configuration">
-  <title>Configuration</title>
-
-  <section id="search-configuration-directory" revision="1">
-    <title>Directory configuration</title>
-
-    <para>Apache Lucene has a notion of Directory where the index is stored.
-    The Directory implementation can be customized but Lucene comes bundled
-    with a file system and a full memory implementation.
-    <productname>Hibernate Search</productname> has the notion of
-    <literal>DirectoryProvider</literal> that handle the configuration and the
-    initialization of the Lucene Directory.</para>
-
-    <table>
-      <title>List of built-in Directory Providers</title>
-
-      <tgroup cols="3">
-        <thead>
-          <row>
-            <entry align="center">Class</entry>
-
-            <entry align="center">description</entry>
-
-            <entry align="center">Properties</entry>
-          </row>
-        </thead>
-
-        <tbody>
-          <row>
-            <entry>org.hibernate.search.store.FSDirectoryProvider</entry>
-
-            <entry>File system based directory. The directory used will be
-            &lt;indexBase&gt;/&lt; <literal>@Indexed.name</literal>
-            &gt;</entry>
-
-            <entry><literal>indexBase</literal> : Base directory</entry>
-          </row>
-
-          <row>
-            <entry>org.hibernate.search.store.RAMDirectoryProvider</entry>
-
-            <entry>Memory based directory, the directory will be uniquely
-            indentified by the <literal>@Indexed.name</literal>
-            element</entry>
-
-            <entry>none</entry>
-          </row>
-
-          <row>
-            <entry>org.hibernate.search.store.FSMasterDirectoryProvider</entry>
-
-            <entry><para>File system based directory. Like
-            FSDirectoryProvider. It also copy the index to a source directory
-            (aka copy directory) on a regular basis. </para><para>The
-            recommended value for the refresh period is (at least) 50% higher
-            that the time to copy the information (default 3600 seconds - 60
-            minutes).</para><para>Note that the copy is based on an
-            incremental copy mechanism reducing the average copy
-            time.</para><para>DirectoryProvider typically used on the master
-            node in a JMS back end cluster.</para>DirectoryProvider typically
-            used on slave nodes using a JMS back end.</entry>
-
-            <entry><para><literal>indexBase</literal>: Base
-            directory</para><para><literal>sourceBase</literal>: Source (copy)
-            base directory.</para><para><literal>source</literal>: Source
-            directory suffix (default to <literal>@Indexed.name</literal>).
-            The actual source directory name being
-            <filename>&lt;sourceBase&gt;/&lt;source&gt;</filename>
-            </para><para>refresh: refresh period in second (the copy will take
-            place every refresh seconds).</para></entry>
-          </row>
-
-          <row>
-            <entry>org.hibernate.search.store.FSSlaveDirectoryProvider</entry>
-
-            <entry><para>File system based directory. Like
-            FSDirectoryProvider. But retrieve a master version (source) on a
-            regular basis. To avoid locking and inconsistent search results, 2
-            local copies are kept. </para><para>The recommended value for the
-            refresh period is (at least) 50% higher that the time to copy the
-            information (default 3600 seconds - 60 minutes).</para><para>Note
-            that the copy is based on an incremental copy mechanism reducing
-            the average copy time.</para><para>DirectoryProvider typically
-            used on slave nodes using a JMS back end.</para></entry>
-
-            <entry><para><literal>indexBase</literal>: Base
-            directory</para><para><literal>sourceBase</literal>: Source (copy)
-            base directory.</para><para><literal>source</literal>: Source
-            directory suffix (default to <literal>@Indexed.name</literal>).
-            The actual source directory name being
-            <filename>&lt;sourceBase&gt;/&lt;source&gt;</filename>
-            </para><para>refresh: refresh period in second (the copy will take
-            place every refresh seconds).</para></entry>
-          </row>
-
-          <row>
-            <entry>org.hibernate.search.store.RAMDirectoryProvider</entry>
-
-            <entry>Memory based directory, the directory will be uniquely
-            identified (in the same deployment unit) by the
-            <literal>@Indexed.name</literal> element</entry>
-
-            <entry>none</entry>
-          </row>
-        </tbody>
-      </tgroup>
-    </table>
-
-    <para>If the built-in directory providers does not fit your needs, you can
-    write your own directory provider by implementing the
-    <classname>org.hibernate.store.DirectoryProvider</classname>
-    interface</para>
-
-    <para>Each indexed entity is associated to a Lucene index (an index can be
-    shared by several entities but this is not usually the case). You can
-    configure the index through properties prefixed by
-    <constant>hibernate.search.</constant>
-    <replaceable>indexname</replaceable> . Default properties inherited to all
-    indexes can be defined using the prefix
-    <constant>hibernate.search.default.</constant></para>
-
-    <para>To define the directory provider of a given index, you use the
-    <constant>hibernate.search. <replaceable>indexname</replaceable>
-    .directory_provider </constant></para>
-
-    <programlisting>hibernate.search.default.directory_provider org.hibernate.search.store.FSDirectoryProvider
-hibernate.search.default.indexBase=/usr/lucene/indexes
-
-hibernate.search.Rules.directory_provider org.hibernate.search.store.RAMDirectoryProvider        </programlisting>
-
-    <para>applied on</para>
-
-    <programlisting>@Indexed(name="Status")
-public class Status { ... }
-
- at Indexed(name="Rules")
-public class Rule { ... }</programlisting>
-
-    <para>will create a file system directory in
-    <filename>/usr/lucene/indexes/Status</filename> where the Status entities
-    will be indexed, and use an in memory directory named
-    <literal>Rules</literal> where Rule entities will be indexed.</para>
-
-    <para>So you can easily defined common rules like the directory provider
-    and base directory, and overide those default later on on a per index
-    basis.</para>
-
-    <para>Writing your own <classname>DirectoryProvider</classname> , you can
-    benefit this configuration mechanism too.</para>
-  </section>
-
-  <section>
-    <title>Worker and Back ends configuration</title>
-
-    <para>Hibernate Search works done by a worker you can configure. The
-    default (and only) worker today use transactional scoping.</para>
-
-    <section>
-      <title>Generic configuration</title>
-
-      <para>You can define the worker configuration using the following
-      properties</para>
-
-      <para></para>
-
-      <table>
-        <title>worker configuration</title>
-
-        <tgroup cols="2">
-          <colspec align="center" />
-
-          <tbody>
-            <row>
-              <entry>property</entry>
-
-              <entry>description</entry>
-            </row>
-
-            <row>
-              <entry><literal>org.hibernate.worker.backend</literal></entry>
-
-              <entry>Out of the box support for the Apache Lucene back end and
-              the JMS back end. Default to <literal>lucene</literal>. Supports
-              also <literal>jms</literal>.</entry>
-            </row>
-
-            <row>
-              <entry><literal>org.hibernate.worker.execution</literal></entry>
-
-              <entry>Supports synchronous and asynchrounous execution. Default
-              to <literal><literal>sync</literal></literal>. Supports also
-              <literal>async</literal>.</entry>
-            </row>
-
-            <row>
-              <entry><literal>org.hibernate.worker.thread_pool.size</literal></entry>
-
-              <entry>Defines the number of threads in the pool. useful only
-              for asynchrounous execution. Default to 1.</entry>
-            </row>
-
-            <row>
-              <entry><literal>org.hibernate.worker.buffer_queue.max</literal></entry>
-
-              <entry>Defines the maximal number of work queue if the thread
-              poll is starved. Useful only for asynchrounous execution.
-              Default to infinite. If the limit is reached, the work is done
-              by the main thread.</entry>
-            </row>
-
-            <row>
-              <entry><literal>org.hibernate.worker.jndi.*</literal></entry>
-
-              <entry>Defines the JNDI properties to initiate the
-              InitialContext (if needed). JNDI is only used by the JMS back
-              end.</entry>
-            </row>
-
-            <row>
-              <entry><literal>
-              org.hibernate.worker.jms.connection_factory</literal></entry>
-
-              <entry>Mandatory for the JMS back end. Defines the JNDI name to
-              lookup the JMS connection factory from
-              (<literal>java:/ConnectionFactory</literal> by default in JBoss
-              AS)</entry>
-            </row>
-
-            <row>
-              <entry><literal>
-              org.hibernate.worker.jms.queue</literal></entry>
-
-              <entry>Mandatory for the JMS back end. Defines the JNDI name to
-              lookup the JMS queue from. The queue will be used to post work
-              messages.</entry>
-            </row>
-          </tbody>
-        </tgroup>
-      </table>
-    </section>
-
-    <section>
-      <title>JMS Back end</title>
-
-      <para>This chapter describes in greater detail how to configure the
-      Master / Slaves Hibernate Search architecture.</para>
-
-      <section>
-        <title>Slave nodes</title>
-
-        <para>Every index update operation is sent to a JMS queue. Index
-        quering operations are executed on a local index copy.</para>
-
-        <programlisting>### slave configuration
-
-## DirectoryProvider
-# (remote) master location
-hibernate.search.default.sourceBase = /mnt/mastervolume/lucenedirs/mastercopy
-
-# local copy location
-hibernate.search.default.indexBase = /Users/prod/lucenedirs
-
-# refresh every half hour
-hibernate.search.default.refresh = 1800
-
-# appropriate directory provider
-hibernate.search.default.directory_provider = org.hibernate.search.store.FSSlaveDirectoryProvider
-
-## Backend configuration
-hibernate.search.worker.backend = jms
-hibernate.search.worker.jms.connection_factory = java:/ConnectionFactory
-hibernate.search.worker.jms.queue = queue/hibernatesearch
-#optional jndi configuration (check your JMS provider for more information)
-
-## Optional asynchronous execution strategy
-# org.hibernate.worker.execution = async
-# org.hibernate.worker.thread_pool.size = 2
-# org.hibernate.worker.buffer_queue.max = 50</programlisting>
-
-        <para>A file system local copy is recommended for faster search
-        results.</para>
-
-        <para>The refresh period should be higher that the expected time
-        copy.</para>
-      </section>
-
-      <section>
-        <title>Master node</title>
-
-        <para>Every index update operation is taken fron a JMS queue and
-        executed. The master index(es) is(are) copied on a regular
-        basis.</para>
-
-        <programlisting>### master configuration
-
-## DirectoryProvider
-# (remote) master location where information is copied to
-hibernate.search.default.sourceBase = /mnt/mastervolume/lucenedirs/mastercopy
-
-# local master location
-hibernate.search.default.indexBase = /Users/prod/lucenedirs
-
-# refresh every half hour
-hibernate.search.default.refresh = 1800
-
-# appropriate directory provider
-hibernate.search.default.directory_provider = org.hibernate.search.store.FSMasterDirectoryProvider
-
-## Backend configuration
-#Backend is the default lucene one</programlisting>
-
-        <para>The refresh period should be higher that the expected time
-        copy.</para>
-
-        <para>In addition to the Hibernate Search framework configuration, a
-        Message Driven Bean should be written and set up to process index
-        works queue through JMS.</para>
-
-        <programlisting>@MessageDriven(activationConfig = {
-      @ActivationConfigProperty(propertyName="destinationType", propertyValue="javax.jms.Queue"),
-      @ActivationConfigProperty(propertyName="destination", propertyValue="queue/hiebrnatesearch"),
-      @ActivationConfigProperty(propertyName="DLQMaxResent", propertyValue="1")
-   } )
-public class MDBSearchController extends AbstractJMSHibernateSearchController implements MessageListener {
-    @PersistenceContext EntityManager em;
-    
-    //method retrieving the appropriate session
-    protected Session getSession() {
-        return (Session) em.getDelegate();
-    }
-
-    //potentially close the session opened in #getSession(), not needed here
-    protected void cleanSessionIfNeeded(Session session) 
-    }
-}</programlisting>
-
-        <para>This example inherit the abstract JMS controller class available
-        and implements a JavaEE 5 MDB. This implementation is given as an
-        example and, while most likely ;ore complex, can be adjusted to make
-        use of non Java EE Message Driven Beans. For more information about
-        the <methodname>getSession()</methodname> and
-        <methodname>cleanSessionIfNeeded()</methodname>, please check
-        <classname>AbstractJMSHibernateSearchController</classname>'s
-        javadoc.</para>
-
-        <remark>Hibernate Search test suite makes use of JBoss Embedded to
-        test the JMS integration. It allows the unit test to run both the MDB
-        container and JBoss Messaging (JMS provider) in a standalone way
-        (marketed by some as "lightweight"). </remark>
-      </section>
-    </section>
-  </section>
-
-  <section id="search-configuration-event" revision="1">
-    <title>Enabling automatic indexing</title>
-
-    <para>Automatic indexing is enable out of the box when using Hibernate
-    Annotations or Hibernate EntityManager. If, for some reason you need to
-    disable that, set
-    <literal>hibernate.search.autoregister_listeners</literal> to false. Note
-    that there is no performance runtime when the listeners are enabled while
-    no entity is indexable.</para>
-
-    <para>To enable automatic indexing in Hibernate Core, add the
-    <literal>SearchEventListener</literal> for the three Hibernate events that
-    occur after changes are executed to the database. Once again, such a
-    configuration is not useful with Hibernate Annotations or Hibernate
-    EntityManager.</para>
-
-    <programlisting>&lt;hibernate-configuration&gt;
-    ...
-    &lt;event type="post-update"
-        &lt;listener class="org.hibernate.search.event.FullTextIndexEventListener"/&gt;
-    &lt;/event&gt;
-    &lt;event type="post-insert"
-        &lt;listener class="org.hibernate.search.event.FullTextIndexEventListener"/&gt;
-    &lt;/event&gt;
-    &lt;event type="post-delete"
-        &lt;listener class="org.hibernate.search.event.FullTextIndexEventListener"/&gt;
-    &lt;/event&gt;
-&lt;/hibernate-configuration&gt;</programlisting>
-  </section>
-</chapter>
\ No newline at end of file

Copied: trunk/HibernateExt/search/doc/reference/en/modules/configuration.xml (from rev 11279, branches/Branch_3_2/HibernateExt/search/doc/reference/en/modules/configuration.xml)
===================================================================
--- trunk/HibernateExt/search/doc/reference/en/modules/configuration.xml	                        (rev 0)
+++ trunk/HibernateExt/search/doc/reference/en/modules/configuration.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,384 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<chapter id="search-configuration">
+  <title>Configuration</title>
+
+  <section id="search-configuration-directory" revision="1">
+    <title>Directory configuration</title>
+
+    <para>Apache Lucene has a notion of Directory where the index is stored.
+    The Directory implementation can be customized but Lucene comes bundled
+    with a file system and a full memory implementation.
+    <productname>Hibernate Search</productname> has the notion of
+    <literal>DirectoryProvider</literal> that handle the configuration and the
+    initialization of the Lucene Directory.</para>
+
+    <table>
+      <title>List of built-in Directory Providers</title>
+
+      <tgroup cols="3">
+        <thead>
+          <row>
+            <entry align="center">Class</entry>
+
+            <entry align="center">description</entry>
+
+            <entry align="center">Properties</entry>
+          </row>
+        </thead>
+
+        <tbody>
+          <row>
+            <entry>org.hibernate.search.store.FSDirectoryProvider</entry>
+
+            <entry>File system based directory. The directory used will be
+            &lt;indexBase&gt;/&lt; <literal>@Indexed.name</literal>
+            &gt;</entry>
+
+            <entry><literal>indexBase</literal> : Base directory</entry>
+          </row>
+
+          <row>
+            <entry>org.hibernate.search.store.RAMDirectoryProvider</entry>
+
+            <entry>Memory based directory, the directory will be uniquely
+            indentified by the <literal>@Indexed.name</literal>
+            element</entry>
+
+            <entry>none</entry>
+          </row>
+
+          <row>
+            <entry>org.hibernate.search.store.FSMasterDirectoryProvider</entry>
+
+            <entry><para>File system based directory. Like
+            FSDirectoryProvider. It also copy the index to a source directory
+            (aka copy directory) on a regular basis. </para><para>The
+            recommended value for the refresh period is (at least) 50% higher
+            that the time to copy the information (default 3600 seconds - 60
+            minutes).</para><para>Note that the copy is based on an
+            incremental copy mechanism reducing the average copy
+            time.</para><para>DirectoryProvider typically used on the master
+            node in a JMS back end cluster.</para>DirectoryProvider typically
+            used on slave nodes using a JMS back end.</entry>
+
+            <entry><para><literal>indexBase</literal>: Base
+            directory</para><para><literal>sourceBase</literal>: Source (copy)
+            base directory.</para><para><literal>source</literal>: Source
+            directory suffix (default to <literal>@Indexed.name</literal>).
+            The actual source directory name being
+            <filename>&lt;sourceBase&gt;/&lt;source&gt;</filename>
+            </para><para>refresh: refresh period in second (the copy will take
+            place every refresh seconds).</para></entry>
+          </row>
+
+          <row>
+            <entry>org.hibernate.search.store.FSSlaveDirectoryProvider</entry>
+
+            <entry><para>File system based directory. Like
+            FSDirectoryProvider. But retrieve a master version (source) on a
+            regular basis. To avoid locking and inconsistent search results, 2
+            local copies are kept. </para><para>The recommended value for the
+            refresh period is (at least) 50% higher that the time to copy the
+            information (default 3600 seconds - 60 minutes).</para><para>Note
+            that the copy is based on an incremental copy mechanism reducing
+            the average copy time.</para><para>DirectoryProvider typically
+            used on slave nodes using a JMS back end.</para></entry>
+
+            <entry><para><literal>indexBase</literal>: Base
+            directory</para><para><literal>sourceBase</literal>: Source (copy)
+            base directory.</para><para><literal>source</literal>: Source
+            directory suffix (default to <literal>@Indexed.name</literal>).
+            The actual source directory name being
+            <filename>&lt;sourceBase&gt;/&lt;source&gt;</filename>
+            </para><para>refresh: refresh period in second (the copy will take
+            place every refresh seconds).</para></entry>
+          </row>
+
+          <row>
+            <entry>org.hibernate.search.store.RAMDirectoryProvider</entry>
+
+            <entry>Memory based directory, the directory will be uniquely
+            identified (in the same deployment unit) by the
+            <literal>@Indexed.name</literal> element</entry>
+
+            <entry>none</entry>
+          </row>
+        </tbody>
+      </tgroup>
+    </table>
+
+    <para>If the built-in directory providers does not fit your needs, you can
+    write your own directory provider by implementing the
+    <classname>org.hibernate.store.DirectoryProvider</classname>
+    interface</para>
+
+    <para>Each indexed entity is associated to a Lucene index (an index can be
+    shared by several entities but this is not usually the case). You can
+    configure the index through properties prefixed by
+    <constant>hibernate.search.</constant>
+    <replaceable>indexname</replaceable> . Default properties inherited to all
+    indexes can be defined using the prefix
+    <constant>hibernate.search.default.</constant></para>
+
+    <para>To define the directory provider of a given index, you use the
+    <constant>hibernate.search. <replaceable>indexname</replaceable>
+    .directory_provider </constant></para>
+
+    <programlisting>hibernate.search.default.directory_provider org.hibernate.search.store.FSDirectoryProvider
+hibernate.search.default.indexBase=/usr/lucene/indexes
+
+hibernate.search.Rules.directory_provider org.hibernate.search.store.RAMDirectoryProvider        </programlisting>
+
+    <para>applied on</para>
+
+    <programlisting>@Indexed(name="Status")
+public class Status { ... }
+
+ at Indexed(name="Rules")
+public class Rule { ... }</programlisting>
+
+    <para>will create a file system directory in
+    <filename>/usr/lucene/indexes/Status</filename> where the Status entities
+    will be indexed, and use an in memory directory named
+    <literal>Rules</literal> where Rule entities will be indexed.</para>
+
+    <para>So you can easily defined common rules like the directory provider
+    and base directory, and overide those default later on on a per index
+    basis.</para>
+
+    <para>Writing your own <classname>DirectoryProvider</classname> , you can
+    benefit this configuration mechanism too.</para>
+  </section>
+
+  <section>
+    <title>Worker and Back ends configuration</title>
+
+    <para>Hibernate Search works done by a worker you can configure. The
+    default (and only) worker today use transactional scoping.</para>
+
+    <section>
+      <title>Generic configuration</title>
+
+      <para>You can define the worker configuration using the following
+      properties</para>
+
+      <para></para>
+
+      <table>
+        <title>worker configuration</title>
+
+        <tgroup cols="2">
+          <colspec align="center" />
+
+          <tbody>
+            <row>
+              <entry>property</entry>
+
+              <entry>description</entry>
+            </row>
+
+            <row>
+              <entry><literal>org.hibernate.worker.backend</literal></entry>
+
+              <entry>Out of the box support for the Apache Lucene back end and
+              the JMS back end. Default to <literal>lucene</literal>. Supports
+              also <literal>jms</literal>.</entry>
+            </row>
+
+            <row>
+              <entry><literal>org.hibernate.worker.execution</literal></entry>
+
+              <entry>Supports synchronous and asynchrounous execution. Default
+              to <literal><literal>sync</literal></literal>. Supports also
+              <literal>async</literal>.</entry>
+            </row>
+
+            <row>
+              <entry><literal>org.hibernate.worker.thread_pool.size</literal></entry>
+
+              <entry>Defines the number of threads in the pool. useful only
+              for asynchrounous execution. Default to 1.</entry>
+            </row>
+
+            <row>
+              <entry><literal>org.hibernate.worker.buffer_queue.max</literal></entry>
+
+              <entry>Defines the maximal number of work queue if the thread
+              poll is starved. Useful only for asynchrounous execution.
+              Default to infinite. If the limit is reached, the work is done
+              by the main thread.</entry>
+            </row>
+
+            <row>
+              <entry><literal>org.hibernate.worker.jndi.*</literal></entry>
+
+              <entry>Defines the JNDI properties to initiate the
+              InitialContext (if needed). JNDI is only used by the JMS back
+              end.</entry>
+            </row>
+
+            <row>
+              <entry><literal>
+              org.hibernate.worker.jms.connection_factory</literal></entry>
+
+              <entry>Mandatory for the JMS back end. Defines the JNDI name to
+              lookup the JMS connection factory from
+              (<literal>java:/ConnectionFactory</literal> by default in JBoss
+              AS)</entry>
+            </row>
+
+            <row>
+              <entry><literal>
+              org.hibernate.worker.jms.queue</literal></entry>
+
+              <entry>Mandatory for the JMS back end. Defines the JNDI name to
+              lookup the JMS queue from. The queue will be used to post work
+              messages.</entry>
+            </row>
+          </tbody>
+        </tgroup>
+      </table>
+    </section>
+
+    <section>
+      <title>JMS Back end</title>
+
+      <para>This chapter describes in greater detail how to configure the
+      Master / Slaves Hibernate Search architecture.</para>
+
+      <section>
+        <title>Slave nodes</title>
+
+        <para>Every index update operation is sent to a JMS queue. Index
+        quering operations are executed on a local index copy.</para>
+
+        <programlisting>### slave configuration
+
+## DirectoryProvider
+# (remote) master location
+hibernate.search.default.sourceBase = /mnt/mastervolume/lucenedirs/mastercopy
+
+# local copy location
+hibernate.search.default.indexBase = /Users/prod/lucenedirs
+
+# refresh every half hour
+hibernate.search.default.refresh = 1800
+
+# appropriate directory provider
+hibernate.search.default.directory_provider = org.hibernate.search.store.FSSlaveDirectoryProvider
+
+## Backend configuration
+hibernate.search.worker.backend = jms
+hibernate.search.worker.jms.connection_factory = java:/ConnectionFactory
+hibernate.search.worker.jms.queue = queue/hibernatesearch
+#optional jndi configuration (check your JMS provider for more information)
+
+## Optional asynchronous execution strategy
+# org.hibernate.worker.execution = async
+# org.hibernate.worker.thread_pool.size = 2
+# org.hibernate.worker.buffer_queue.max = 50</programlisting>
+
+        <para>A file system local copy is recommended for faster search
+        results.</para>
+
+        <para>The refresh period should be higher that the expected time
+        copy.</para>
+      </section>
+
+      <section>
+        <title>Master node</title>
+
+        <para>Every index update operation is taken fron a JMS queue and
+        executed. The master index(es) is(are) copied on a regular
+        basis.</para>
+
+        <programlisting>### master configuration
+
+## DirectoryProvider
+# (remote) master location where information is copied to
+hibernate.search.default.sourceBase = /mnt/mastervolume/lucenedirs/mastercopy
+
+# local master location
+hibernate.search.default.indexBase = /Users/prod/lucenedirs
+
+# refresh every half hour
+hibernate.search.default.refresh = 1800
+
+# appropriate directory provider
+hibernate.search.default.directory_provider = org.hibernate.search.store.FSMasterDirectoryProvider
+
+## Backend configuration
+#Backend is the default lucene one</programlisting>
+
+        <para>The refresh period should be higher that the expected time
+        copy.</para>
+
+        <para>In addition to the Hibernate Search framework configuration, a
+        Message Driven Bean should be written and set up to process index
+        works queue through JMS.</para>
+
+        <programlisting>@MessageDriven(activationConfig = {
+      @ActivationConfigProperty(propertyName="destinationType", propertyValue="javax.jms.Queue"),
+      @ActivationConfigProperty(propertyName="destination", propertyValue="queue/hiebrnatesearch"),
+      @ActivationConfigProperty(propertyName="DLQMaxResent", propertyValue="1")
+   } )
+public class MDBSearchController extends AbstractJMSHibernateSearchController implements MessageListener {
+    @PersistenceContext EntityManager em;
+    
+    //method retrieving the appropriate session
+    protected Session getSession() {
+        return (Session) em.getDelegate();
+    }
+
+    //potentially close the session opened in #getSession(), not needed here
+    protected void cleanSessionIfNeeded(Session session) 
+    }
+}</programlisting>
+
+        <para>This example inherit the abstract JMS controller class available
+        and implements a JavaEE 5 MDB. This implementation is given as an
+        example and, while most likely ;ore complex, can be adjusted to make
+        use of non Java EE Message Driven Beans. For more information about
+        the <methodname>getSession()</methodname> and
+        <methodname>cleanSessionIfNeeded()</methodname>, please check
+        <classname>AbstractJMSHibernateSearchController</classname>'s
+        javadoc.</para>
+
+        <remark>Hibernate Search test suite makes use of JBoss Embedded to
+        test the JMS integration. It allows the unit test to run both the MDB
+        container and JBoss Messaging (JMS provider) in a standalone way
+        (marketed by some as "lightweight"). </remark>
+      </section>
+    </section>
+  </section>
+
+  <section id="search-configuration-event" revision="1">
+    <title>Enabling automatic indexing</title>
+
+    <para>Automatic indexing is enable out of the box when using Hibernate
+    Annotations or Hibernate EntityManager. If, for some reason you need to
+    disable that, set
+    <literal>hibernate.search.autoregister_listeners</literal> to false. Note
+    that there is no performance runtime when the listeners are enabled while
+    no entity is indexable.</para>
+
+    <para>To enable automatic indexing in Hibernate Core, add the
+    <literal>SearchEventListener</literal> for the three Hibernate events that
+    occur after changes are executed to the database. Once again, such a
+    configuration is not useful with Hibernate Annotations or Hibernate
+    EntityManager.</para>
+
+    <programlisting>&lt;hibernate-configuration&gt;
+    ...
+    &lt;event type="post-update"
+        &lt;listener class="org.hibernate.search.event.FullTextIndexEventListener"/&gt;
+    &lt;/event&gt;
+    &lt;event type="post-insert"
+        &lt;listener class="org.hibernate.search.event.FullTextIndexEventListener"/&gt;
+    &lt;/event&gt;
+    &lt;event type="post-delete"
+        &lt;listener class="org.hibernate.search.event.FullTextIndexEventListener"/&gt;
+    &lt;/event&gt;
+&lt;/hibernate-configuration&gt;</programlisting>
+  </section>
+</chapter>
\ No newline at end of file

Deleted: trunk/HibernateExt/search/doc/reference/en/modules/mapping.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/search/doc/reference/en/modules/mapping.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/doc/reference/en/modules/mapping.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,574 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<chapter id="search-mapping" revision="3">
-  <title>Mapping entities to the index structure</title>
-
-  <para>All the metadata information related to indexed entities is described
-  through some Java annotations. There is no need for xml mapping files nor a
-  list of indexed entities. The list is discovered at startup time scanning
-  the Hibernate mapped entities.</para>
-
-  <section id="search-mapping-entity" revision="3">
-    <title>Mapping an entity</title>
-
-    <section>
-      <title>Basic mapping</title>
-
-      <para>First, we must declare a persistent class as indexable. This is
-      done by annotating the class with <literal>@Indexed</literal> (all
-      entities not annotated with <literal>@Indexed</literal> will be ignored
-      by the indexing process):</para>
-
-      <programlisting>@Entity
-<emphasis role="bold">@Indexed(index="indexes/essays")</emphasis>
-public class Essay {
-    ...
-}</programlisting>
-
-      <para>The <literal>index</literal> attribute tells Hibernate what the
-      Lucene directory name is (usually a directory on your file system). If
-      you wish to define a base directory for all Lucene indexes, you can use
-      the <literal>hibernate.search.default.indexBase</literal> property in
-      your configuration file. Each entity instance will be represented by a
-      Lucene <classname>Document</classname> inside the given index (aka
-      Directory).</para>
-
-      <para>For each property (or attribute) of your entity, you have the
-      ability to describe how it will be indexed. The default (ie no
-      annotation) means that the property is completly ignored by the indexing
-      process. <literal>@Field</literal> does declare a property as indexed.
-      When indexing an element to a Lucene document you can specify how it is
-      indexed:</para>
-
-      <itemizedlist>
-        <listitem>
-          <para><literal>name</literal> : describe under which name, the
-          property should be stored in the Lucene Document. The default value
-          is the property name (following the JavaBeans convention)</para>
-        </listitem>
-
-        <listitem>
-          <para><literal>store</literal> : describe whether or not the
-          property is stored in the Lucene index. You can store the value
-          <literal>Store.YES</literal> (comsuming more space in the index),
-          store it in a compressed way <literal>Store.COMPRESS</literal> (this
-          does consume more CPU), or avoid any storage
-          <literal>Store.NO</literal> (this is the default value). When a
-          property is stored, you can retrieve it from the Lucene Document
-          (note that this is not related to whether the element is indexed or
-          not).</para>
-        </listitem>
-
-        <listitem>
-          <para>index: describe how the element is indexed (ie the process
-          used to index the property and the type of information store). The
-          different values are <literal>Index.NO</literal> (no indexing, ie
-          cannot be found by a query), <literal>Index.TOKENIZED</literal> (use
-          an analyzer to process the property),
-          <literal>Index.UN_TOKENISED</literal> (no analyzer pre processing),
-          <literal>Index.NO_NORM</literal> (do not store the normalization
-          data).</para>
-        </listitem>
-      </itemizedlist>
-
-      <para>These attributes are part of the <literal>@Field</literal>
-      annotation.</para>
-
-      <para>Whether or not you want to store the data depends on how you wish
-      to use the index query result. As of today, for a pure
-      <productname>Hibernate Search </productname> usage, storing is not
-      necessary. Whether or not you want to tokenize a property or not depends
-      on whether you wish to search the element as is, or only normalized part
-      of it. It make sense to tokenize a text field, but it does not to do it
-      for a date field (or an id field).</para>
-
-      <para>Finally, the id property of an entity is a special property used
-      by <productname>Hibernate Search</productname> to ensure index unicity
-      of a given entity. By design, an id has to be stored and must not be
-      tokenized. To mark a property as index id, use the
-      <literal>@DocumentId</literal> annotation.</para>
-
-      <programlisting>@Entity
- at Indexed(index="indexes/essays")
-public class Essay {
-    ...
-
-    @Id
-    <emphasis role="bold">@DocumentId</emphasis>
-    public Long getId() { return id; }
-
-    <emphasis role="bold">@Field(name="Abstract", index=Index.TOKENIZED, store=Store.YES)</emphasis>
-    public String getSummary() { return summary; }
-
-    @Lob
-    <emphasis role="bold">@Field(index=Index.TOKENIZED)</emphasis>
-    public String getText() { return text; }
-}</programlisting>
-
-      <para>These annotations define an index with three fields:
-      <literal>id</literal> , <literal>Abstract</literal> and
-      <literal>text</literal> . Note that by default the field name is
-      decapitalized, following the JavaBean specification.</para>
-
-      <note>
-        <para>You <emphasis>must</emphasis> specify
-        <literal>@DocumentId</literal> on the identifier property of your
-        entity class.</para>
-      </note>
-    </section>
-
-    <section>
-      <title>Embedded and associated objects</title>
-
-      <para>Associated objects as well as embedded objects can be indexed as
-      well as part of the root entity index.</para>
-
-      <programlisting>@Entity
- at Indexed
-public class Place {
-    @Id
-    @GeneratedValue
-    @DocumentId
-    private Long id;
-
-    @Field( index = Index.TOKENIZED )
-    private String name;
-
-    @OneToOne( cascade = { CascadeType.PERSIST, CascadeType.REMOVE } )
-    <emphasis role="bold">@IndexedEmbedded</emphasis>
-    private Address address;
-    ....
-}
-
- at Entity
- at Indexed
-public class Address {
-    @Id
-    @GeneratedValue
-    @DocumentId
-    private Long id;
-
-    @Field(index=Index.TOKENIZED)
-    private String street;
-
-    @Field(index=Index.TOKENIZED)
-    private String city;
-
-    <emphasis role="bold">@IndexedEmbedded(depth = 1, prefix = "ownedBy_")</emphasis>
-    private Owner ownedBy;
-    ...
-}
-
- at Embeddable
-public class Owner {
-    @Field(index = Index.TOKENIZED)
-    private String name;
-   ...
-}</programlisting>
-
-      <para>Any <literal>@*ToOne</literal> and <literal>@Embedded</literal>
-      attribute can be annotated with <literal>@IndexedEmbedded</literal>. The
-      attributes of the associated class will then be added to the main entity
-      index. In the previous example, the index will contain the following
-      fields</para>
-
-      <itemizedlist>
-        <listitem>
-          <para>id</para>
-        </listitem>
-
-        <listitem>
-          <para>name</para>
-        </listitem>
-
-        <listitem>
-          <para>address.street</para>
-        </listitem>
-
-        <listitem>
-          <para>address.city</para>
-        </listitem>
-
-        <listitem>
-          <para>addess.ownedBy_name</para>
-        </listitem>
-      </itemizedlist>
-
-      <para>The default prefix is <literal>propertyName.</literal>, following
-      the traditional object navigation convention. You can override it using
-      the <literal>prefix</literal> attribute.</para>
-
-      <para><literal>depth</literal> is necessary when the object graph
-      contains a cyclic dependency of classes (not instance). For example, if
-      <classname>Owner</classname> points to <classname>Place</classname>.
-      Hibernate Search will stop including Indexed embedded atttributes after
-      reaching the expected depth (or is the object graph boundaries are
-      reached). A class having a self reference is an example of cyclic
-      dependency. In our example, because <literal>depth</literal> is set to
-      1, any <literal>@IndexedEmbedded</literal> attribute in Owner (if any)
-      will be ignored.</para>
-
-      <para>Such a mapping is very useful to express queries refering to
-      associated objects, such as:</para>
-
-      <itemizedlist>
-        <listitem>
-          <para>Return places where name contains JBoss and where address city
-          is Atlanta. In Lucene query this would be</para>
-
-          <programlisting>+name:jboss +address.city:atlanta  </programlisting>
-        </listitem>
-
-        <listitem>
-          <para>Return places where name contains JBoss and where owner's name
-          contain Joe. In Lucene query this would be</para>
-
-          <programlisting>+name:jboss +address.orderBy_name:joe  </programlisting>
-        </listitem>
-      </itemizedlist>
-
-      <para>In a way it mimics the relational join operation in a more
-      efficient way (at the cost of data duplication). Remember that, out of
-      the box, Lucene indexes have no notion of association, the join
-      operation is simply non-existent. It might help to keep the relational
-      model normalzed while benefiting from the full text index speed and
-      feature richness.</para>
-
-      <para><note>
-          <para>An associated object can itself be (but don't have to)
-          <literal>@Indexed</literal> </para>
-        </note></para>
-    </section>
-
-    <section>
-      <title>Boost factor</title>
-
-      <para>Lucene has the notion of <emphasis>boost factor</emphasis> . It's
-      a way to give more weigth to a field or to an indexed element over an
-      other during the indexation process. You can use
-      <literal>@Boost</literal> at the field or the class level.</para>
-
-      <programlisting>@Entity
- at Indexed(index="indexes/essays")
-<emphasis role="bold">@Boost(2)</emphasis>
-public class Essay {
-    ...
-
-    @Id
-    @DocumentId
-    public Long getId() { return id; }
-
-    @Field(name="Abstract", index=Index.TOKENIZED, store=Store.YES)
-    <emphasis role="bold">@Boost(2.5f)</emphasis>
-    public String getSummary() { return summary; }
-
-    @Lob
-    @Field(index=Index.TOKENIZED)
-    public String getText() { return text; }
-}        </programlisting>
-
-      <para>In our example, Essay's probability to reach the top of the search
-      list will be multiplied by 2 and the summary field will be 2.5 more
-      important than the test field. Note that this explaination is actually
-      wrong, but it is simple and close enought to the reality. Please check
-      the Lucene documentation or the excellent <citetitle>Lucene In Action
-      </citetitle> from Otis Gospodnetic and Erik Hatcher.</para>
-    </section>
-
-    <section>
-      <title>Analyser</title>
-
-      <para>The analyzer class used to index the elements is configurable
-      through the <literal>hibernate.search.analyzer</literal> property. If
-      none defined,
-      <classname>org.apache.lucene.analysis.standard.StandardAnalyzer</classname>
-      is used as the default.</para>
-    </section>
-  </section>
-
-  <section id="search-mapping-bridge">
-    <title>Property/Field Bridge</title>
-
-    <para>All field of a full text index in Lucene have to be represented as
-    Strings. Ones Java properties have to be indexed in a String form. For
-    most of your properties, <productname>Hibernate Search</productname> does
-    the translation job for you thanks to a built-in set of bridges. In some
-    cases, though you need a fine grain control over the translation
-    process.</para>
-
-    <section>
-      <title>Built-in bridges</title>
-
-      <para><literal>Hibernate Search</literal> comes bundled with a set of
-      built-in bridges between a Java property type and its full text
-      representation.</para>
-
-      <para><literal>Null</literal> elements are not indexed (Lucene does not
-      support null elements and it does not make much sense either)</para>
-
-      <variablelist>
-        <varlistentry>
-          <term>null</term>
-
-          <listitem>
-            <para>null elements are not indexed. Lucene does not support null
-            elements and this does not make much sense either.</para>
-          </listitem>
-        </varlistentry>
-
-        <varlistentry>
-          <term>java.lang.String</term>
-
-          <listitem>
-            <para>String are indexed as is</para>
-          </listitem>
-        </varlistentry>
-
-        <varlistentry>
-          <term>short, Short, integer, Integer, long, Long, float, Float,
-          double, Double, BigInteger, BigDecimal</term>
-
-          <listitem>
-            <para>Numbers are converted in their String representation. Note
-            that numbers cannot be compared by Lucene (ie used in ranged
-            queries) out of the box: they have to be padded <footnote>
-                <para>Using a Range query is debattable and has drawbacks, an
-                alternative approach is to use a Filter query which will
-                filter the result query to the appropriate range.</para>
-
-                <para><productname>Hibernate Search</productname> will support
-                a padding mechanism</para>
-              </footnote></para>
-          </listitem>
-        </varlistentry>
-
-        <varlistentry>
-          <term>java.util.Date</term>
-
-          <listitem>
-            <para>Dates are stored as yyyyMMddHHmmssSSS in GMT time
-            (200611072203012 for Nov 7th of 2006 4:03PM and 12ms EST). You
-            shouldn't really bother with the internal format. What is
-            important is that when using a DateRange Query, you should know
-            that the dates have to be expressed in GMT time.</para>
-
-            <para>Usually, storing the date up to the milisecond is not
-            necessary. <literal>@DateBridge</literal> defines the appropriate
-            resolution you are willing to store in the index ( <literal>
-            <literal>@DateBridge(resolution=Resolution.DAY)</literal>
-            </literal> ). The date pattern will then be truncated
-            accordingly.</para>
-
-            <programlisting>@Entity 
- at Indexed
-public class Meeting {
-    @Field(index=Index.UN_TOKENIZED)
-    <emphasis role="bold">@DateBridge(resolution=Resolution.MINUTE)</emphasis>
-    private Date date;
-    ...                 </programlisting>
-
-            <warning>
-              <para>A Date whose resolution is lower than
-              <literal>MILLISECOND</literal> cannot be a
-              <literal>@DocumentId</literal></para>
-            </warning>
-          </listitem>
-        </varlistentry>
-      </variablelist>
-
-      <para></para>
-    </section>
-
-    <section>
-      <title>Custom Bridge</title>
-
-      <para>It can happen that the built-in bridges of Hibernate Search does
-      not cover some of your property types, or that the String representation
-      used is not what you expect.</para>
-
-      <section>
-        <title>StringBridge</title>
-
-        <para>The simpliest custom solution is to give <productname>Hibernate
-        Search </productname> an implementation of your expected
-        <emphasis>object to String</emphasis> bridge. To do so you need to
-        implements the
-        <literal>org.hibernate.search.bridge.StringBridge</literal>
-        interface</para>
-
-        <programlisting>/**
- * Padding Integer bridge.
- * All numbers will be padded with 0 to match 5 digits
- *
- * @author Emmanuel Bernard
- */
-public class PaddedIntegerBridge implements <emphasis role="bold">StringBridge</emphasis> {
-
-    private int PADDING = 5;
-
-    <emphasis role="bold">public String objectToString(Object object)</emphasis> {
-        String rawInteger = ( (Integer) object ).toString();
-        if (rawInteger.length() &gt; PADDING) 
-            throw new IllegalArgumentException( "Try to pad on a number too big" );
-        StringBuilder paddedInteger = new StringBuilder( );
-        for ( int padIndex = rawInteger.length() ; padIndex &lt; PADDING ; padIndex++ ) {
-            paddedInteger.append('0');
-        }
-        return paddedInteger.append( rawInteger ).toString();
-    }
-}                </programlisting>
-
-        <para>Then any property or field can use this bridge thanks to the
-        <literal>@FieldBridge</literal> annotation</para>
-
-        <programlisting><emphasis role="bold">@FieldBridge(impl = PaddedIntegerBridge.class)</emphasis>
-private Integer length;                </programlisting>
-
-        <para>Parameters can be passed to the Bridge implementation making it
-        more flexible. The Bridge implementation implements a
-        <classname>ParameterizedBridge</classname> interface, and the
-        parameters are passed through the <literal>@FieldBridge</literal>
-        annotation.</para>
-
-        <programlisting>public class PaddedIntegerBridge implements StringBridge, <emphasis
-            role="bold">ParameterizedBridge</emphasis> {
-
-    public static String PADDING_PROPERTY = "padding";
-    private int padding = 5; //default
-
-    <emphasis role="bold">public void setParameterValues(Map parameters)</emphasis> {
-        Object padding = parameters.get( PADDING_PROPERTY );
-        if (padding != null) this.padding = (Integer) padding;
-    }
-
-    public String objectToString(Object object) {
-        String rawInteger = ( (Integer) object ).toString();
-        if (rawInteger.length() &gt; padding) 
-            throw new IllegalArgumentException( "Try to pad on a number too big" );
-        StringBuilder paddedInteger = new StringBuilder( );
-        for ( int padIndex = rawInteger.length() ; padIndex &lt; padding ; padIndex++ ) {
-            paddedInteger.append('0');
-        }
-        return paddedInteger.append( rawInteger ).toString();
-    }
-}
-
-
-//property
- at FieldBridge(impl = PaddedIntegerBridge.class,
-             <emphasis role="bold">params = @Parameter(name="padding", value="10")</emphasis>
-            )
-private Integer length;                </programlisting>
-
-        <para>The <classname>ParameterizedBridge</classname> interface can be
-        implemented by <classname>StringBridge</classname> ,
-        <classname>TwoWayStringBridge</classname> ,
-        <classname>FieldBridge</classname> implementations (see
-        bellow).</para>
-
-        <para>If you expect to use your bridge implementation on for an id
-        property (ie annotated with <literal>@DocumentId</literal> ), you need
-        to use a slightly extended version of <literal>StringBridge</literal>
-        named <classname>TwoWayStringBridge</classname> . <literal>Hibernate
-        Search </literal> needs to read the string representation of the
-        identifier and generate the object out of it. There is not difference
-        in the way the <literal>@FieldBridge</literal> annotation is
-        used.</para>
-
-        <programlisting>public class PaddedIntegerBridge implements TwoWayStringBridge, ParameterizedBridge {
-
-    public static String PADDING_PROPERTY = "padding";
-    private int padding = 5; //default
-
-    public void setParameterValues(Map parameters) {
-        Object padding = parameters.get( PADDING_PROPERTY );
-        if (padding != null) this.padding = (Integer) padding;
-    }
-
-    public String objectToString(Object object) {
-        String rawInteger = ( (Integer) object ).toString();
-        if (rawInteger.length() &gt; padding) 
-            throw new IllegalArgumentException( "Try to pad on a number too big" );
-        StringBuilder paddedInteger = new StringBuilder( );
-        for ( int padIndex = rawInteger.length() ; padIndex &lt; padding ; padIndex++ ) {
-            paddedInteger.append('0');
-        }
-        return paddedInteger.append( rawInteger ).toString();
-    }
-
-    <emphasis role="bold">public Object stringToObject(String stringValue)</emphasis> {
-        return new Integer(stringValue);
-    }
-}
-
-
-//id property
- at DocumentId
- at FieldBridge(impl = PaddedIntegerBridge.class,
-             params = @Parameter(name="padding", value="10") 
-private Integer id;
-                </programlisting>
-
-        <para>It is critically important for the two-way process to be
-        idempotent (ie object = stringToObject( objectToString( object ) )
-        ).</para>
-      </section>
-
-      <section>
-        <title>FieldBridge</title>
-
-        <para>Some usecase requires more than a simple object to string
-        translation when mapping a property to a Lucene index. To give you
-        most of the flexibility you can also implement a bridge as a
-        <classname>FieldBridge</classname> . This interface give you a
-        property value and let you map it the way you want in your Lucene
-        <classname>Document</classname> .This interface is very similar in its
-        concept to the <productname>Hibernate</productname>
-        <classname>UserType</classname> .</para>
-
-        <para>You can for example store a given property in two different
-        document fields</para>
-
-        <programlisting>/**
- * Store the date in 3 different field year, month, day
- * to ease Range Query per year, month or day
- * (eg get all the elements of december for the last 5 years)
- *
- * @author Emmanuel Bernard
- */
-public class DateSplitBridge implements FieldBridge {
-    private final static TimeZone GMT = TimeZone.getTimeZone("GMT");
-
-    <emphasis role="bold">public void set(String name, Object value, Document document, Field.Store
-            store, Field.Index index, Float boost) {
-                    </emphasis>
-        Date date = (Date) value;
-        Calendar cal = GregorianCalendar.getInstance( GMT );
-        cal.setTime( date );
-        int year = cal.get( Calendar.YEAR );
-        int month = cal.get( Calendar.MONTH ) + 1;
-        int day = cal.get( Calendar.DAY_OF_MONTH );
-        //set year
-        Field field = new Field( name + ".year", String.valueOf(year), store, index );
-        if ( boost != null ) field.setBoost( boost );
-        document.add( field );
-        //set month and pad it if needed
-        field = new Field( name + ".month", month &lt; 10 ? "0" : "" + String.valueOf(month), store, index);
-        if ( boost != null ) field.setBoost( boost );
-        document.add( field );
-        //set day and pad it if needed
-        field = new Field( name + ".day", day &lt; 10 ? "0" : "" + String.valueOf(day), store, index );
-        if ( boost != null ) field.setBoost( boost );
-        document.add( field );
-    }
-}
-
-
-//property
-<emphasis role="bold">@FieldBridge(impl = DateSplitBridge.class)</emphasis>
-private Integer length;                </programlisting>
-
-        <para></para>
-      </section>
-    </section>
-  </section>
-</chapter>
\ No newline at end of file

Copied: trunk/HibernateExt/search/doc/reference/en/modules/mapping.xml (from rev 11279, branches/Branch_3_2/HibernateExt/search/doc/reference/en/modules/mapping.xml)
===================================================================
--- trunk/HibernateExt/search/doc/reference/en/modules/mapping.xml	                        (rev 0)
+++ trunk/HibernateExt/search/doc/reference/en/modules/mapping.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,574 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<chapter id="search-mapping" revision="3">
+  <title>Mapping entities to the index structure</title>
+
+  <para>All the metadata information related to indexed entities is described
+  through some Java annotations. There is no need for xml mapping files nor a
+  list of indexed entities. The list is discovered at startup time scanning
+  the Hibernate mapped entities.</para>
+
+  <section id="search-mapping-entity" revision="3">
+    <title>Mapping an entity</title>
+
+    <section>
+      <title>Basic mapping</title>
+
+      <para>First, we must declare a persistent class as indexable. This is
+      done by annotating the class with <literal>@Indexed</literal> (all
+      entities not annotated with <literal>@Indexed</literal> will be ignored
+      by the indexing process):</para>
+
+      <programlisting>@Entity
+<emphasis role="bold">@Indexed(index="indexes/essays")</emphasis>
+public class Essay {
+    ...
+}</programlisting>
+
+      <para>The <literal>index</literal> attribute tells Hibernate what the
+      Lucene directory name is (usually a directory on your file system). If
+      you wish to define a base directory for all Lucene indexes, you can use
+      the <literal>hibernate.search.default.indexBase</literal> property in
+      your configuration file. Each entity instance will be represented by a
+      Lucene <classname>Document</classname> inside the given index (aka
+      Directory).</para>
+
+      <para>For each property (or attribute) of your entity, you have the
+      ability to describe how it will be indexed. The default (ie no
+      annotation) means that the property is completly ignored by the indexing
+      process. <literal>@Field</literal> does declare a property as indexed.
+      When indexing an element to a Lucene document you can specify how it is
+      indexed:</para>
+
+      <itemizedlist>
+        <listitem>
+          <para><literal>name</literal> : describe under which name, the
+          property should be stored in the Lucene Document. The default value
+          is the property name (following the JavaBeans convention)</para>
+        </listitem>
+
+        <listitem>
+          <para><literal>store</literal> : describe whether or not the
+          property is stored in the Lucene index. You can store the value
+          <literal>Store.YES</literal> (comsuming more space in the index),
+          store it in a compressed way <literal>Store.COMPRESS</literal> (this
+          does consume more CPU), or avoid any storage
+          <literal>Store.NO</literal> (this is the default value). When a
+          property is stored, you can retrieve it from the Lucene Document
+          (note that this is not related to whether the element is indexed or
+          not).</para>
+        </listitem>
+
+        <listitem>
+          <para>index: describe how the element is indexed (ie the process
+          used to index the property and the type of information store). The
+          different values are <literal>Index.NO</literal> (no indexing, ie
+          cannot be found by a query), <literal>Index.TOKENIZED</literal> (use
+          an analyzer to process the property),
+          <literal>Index.UN_TOKENISED</literal> (no analyzer pre processing),
+          <literal>Index.NO_NORM</literal> (do not store the normalization
+          data).</para>
+        </listitem>
+      </itemizedlist>
+
+      <para>These attributes are part of the <literal>@Field</literal>
+      annotation.</para>
+
+      <para>Whether or not you want to store the data depends on how you wish
+      to use the index query result. As of today, for a pure
+      <productname>Hibernate Search </productname> usage, storing is not
+      necessary. Whether or not you want to tokenize a property or not depends
+      on whether you wish to search the element as is, or only normalized part
+      of it. It make sense to tokenize a text field, but it does not to do it
+      for a date field (or an id field).</para>
+
+      <para>Finally, the id property of an entity is a special property used
+      by <productname>Hibernate Search</productname> to ensure index unicity
+      of a given entity. By design, an id has to be stored and must not be
+      tokenized. To mark a property as index id, use the
+      <literal>@DocumentId</literal> annotation.</para>
+
+      <programlisting>@Entity
+ at Indexed(index="indexes/essays")
+public class Essay {
+    ...
+
+    @Id
+    <emphasis role="bold">@DocumentId</emphasis>
+    public Long getId() { return id; }
+
+    <emphasis role="bold">@Field(name="Abstract", index=Index.TOKENIZED, store=Store.YES)</emphasis>
+    public String getSummary() { return summary; }
+
+    @Lob
+    <emphasis role="bold">@Field(index=Index.TOKENIZED)</emphasis>
+    public String getText() { return text; }
+}</programlisting>
+
+      <para>These annotations define an index with three fields:
+      <literal>id</literal> , <literal>Abstract</literal> and
+      <literal>text</literal> . Note that by default the field name is
+      decapitalized, following the JavaBean specification.</para>
+
+      <note>
+        <para>You <emphasis>must</emphasis> specify
+        <literal>@DocumentId</literal> on the identifier property of your
+        entity class.</para>
+      </note>
+    </section>
+
+    <section>
+      <title>Embedded and associated objects</title>
+
+      <para>Associated objects as well as embedded objects can be indexed as
+      well as part of the root entity index.</para>
+
+      <programlisting>@Entity
+ at Indexed
+public class Place {
+    @Id
+    @GeneratedValue
+    @DocumentId
+    private Long id;
+
+    @Field( index = Index.TOKENIZED )
+    private String name;
+
+    @OneToOne( cascade = { CascadeType.PERSIST, CascadeType.REMOVE } )
+    <emphasis role="bold">@IndexedEmbedded</emphasis>
+    private Address address;
+    ....
+}
+
+ at Entity
+ at Indexed
+public class Address {
+    @Id
+    @GeneratedValue
+    @DocumentId
+    private Long id;
+
+    @Field(index=Index.TOKENIZED)
+    private String street;
+
+    @Field(index=Index.TOKENIZED)
+    private String city;
+
+    <emphasis role="bold">@IndexedEmbedded(depth = 1, prefix = "ownedBy_")</emphasis>
+    private Owner ownedBy;
+    ...
+}
+
+ at Embeddable
+public class Owner {
+    @Field(index = Index.TOKENIZED)
+    private String name;
+   ...
+}</programlisting>
+
+      <para>Any <literal>@*ToOne</literal> and <literal>@Embedded</literal>
+      attribute can be annotated with <literal>@IndexedEmbedded</literal>. The
+      attributes of the associated class will then be added to the main entity
+      index. In the previous example, the index will contain the following
+      fields</para>
+
+      <itemizedlist>
+        <listitem>
+          <para>id</para>
+        </listitem>
+
+        <listitem>
+          <para>name</para>
+        </listitem>
+
+        <listitem>
+          <para>address.street</para>
+        </listitem>
+
+        <listitem>
+          <para>address.city</para>
+        </listitem>
+
+        <listitem>
+          <para>addess.ownedBy_name</para>
+        </listitem>
+      </itemizedlist>
+
+      <para>The default prefix is <literal>propertyName.</literal>, following
+      the traditional object navigation convention. You can override it using
+      the <literal>prefix</literal> attribute.</para>
+
+      <para><literal>depth</literal> is necessary when the object graph
+      contains a cyclic dependency of classes (not instance). For example, if
+      <classname>Owner</classname> points to <classname>Place</classname>.
+      Hibernate Search will stop including Indexed embedded atttributes after
+      reaching the expected depth (or is the object graph boundaries are
+      reached). A class having a self reference is an example of cyclic
+      dependency. In our example, because <literal>depth</literal> is set to
+      1, any <literal>@IndexedEmbedded</literal> attribute in Owner (if any)
+      will be ignored.</para>
+
+      <para>Such a mapping is very useful to express queries refering to
+      associated objects, such as:</para>
+
+      <itemizedlist>
+        <listitem>
+          <para>Return places where name contains JBoss and where address city
+          is Atlanta. In Lucene query this would be</para>
+
+          <programlisting>+name:jboss +address.city:atlanta  </programlisting>
+        </listitem>
+
+        <listitem>
+          <para>Return places where name contains JBoss and where owner's name
+          contain Joe. In Lucene query this would be</para>
+
+          <programlisting>+name:jboss +address.orderBy_name:joe  </programlisting>
+        </listitem>
+      </itemizedlist>
+
+      <para>In a way it mimics the relational join operation in a more
+      efficient way (at the cost of data duplication). Remember that, out of
+      the box, Lucene indexes have no notion of association, the join
+      operation is simply non-existent. It might help to keep the relational
+      model normalzed while benefiting from the full text index speed and
+      feature richness.</para>
+
+      <para><note>
+          <para>An associated object can itself be (but don't have to)
+          <literal>@Indexed</literal> </para>
+        </note></para>
+    </section>
+
+    <section>
+      <title>Boost factor</title>
+
+      <para>Lucene has the notion of <emphasis>boost factor</emphasis> . It's
+      a way to give more weigth to a field or to an indexed element over an
+      other during the indexation process. You can use
+      <literal>@Boost</literal> at the field or the class level.</para>
+
+      <programlisting>@Entity
+ at Indexed(index="indexes/essays")
+<emphasis role="bold">@Boost(2)</emphasis>
+public class Essay {
+    ...
+
+    @Id
+    @DocumentId
+    public Long getId() { return id; }
+
+    @Field(name="Abstract", index=Index.TOKENIZED, store=Store.YES)
+    <emphasis role="bold">@Boost(2.5f)</emphasis>
+    public String getSummary() { return summary; }
+
+    @Lob
+    @Field(index=Index.TOKENIZED)
+    public String getText() { return text; }
+}        </programlisting>
+
+      <para>In our example, Essay's probability to reach the top of the search
+      list will be multiplied by 2 and the summary field will be 2.5 more
+      important than the test field. Note that this explaination is actually
+      wrong, but it is simple and close enought to the reality. Please check
+      the Lucene documentation or the excellent <citetitle>Lucene In Action
+      </citetitle> from Otis Gospodnetic and Erik Hatcher.</para>
+    </section>
+
+    <section>
+      <title>Analyser</title>
+
+      <para>The analyzer class used to index the elements is configurable
+      through the <literal>hibernate.search.analyzer</literal> property. If
+      none defined,
+      <classname>org.apache.lucene.analysis.standard.StandardAnalyzer</classname>
+      is used as the default.</para>
+    </section>
+  </section>
+
+  <section id="search-mapping-bridge">
+    <title>Property/Field Bridge</title>
+
+    <para>All field of a full text index in Lucene have to be represented as
+    Strings. Ones Java properties have to be indexed in a String form. For
+    most of your properties, <productname>Hibernate Search</productname> does
+    the translation job for you thanks to a built-in set of bridges. In some
+    cases, though you need a fine grain control over the translation
+    process.</para>
+
+    <section>
+      <title>Built-in bridges</title>
+
+      <para><literal>Hibernate Search</literal> comes bundled with a set of
+      built-in bridges between a Java property type and its full text
+      representation.</para>
+
+      <para><literal>Null</literal> elements are not indexed (Lucene does not
+      support null elements and it does not make much sense either)</para>
+
+      <variablelist>
+        <varlistentry>
+          <term>null</term>
+
+          <listitem>
+            <para>null elements are not indexed. Lucene does not support null
+            elements and this does not make much sense either.</para>
+          </listitem>
+        </varlistentry>
+
+        <varlistentry>
+          <term>java.lang.String</term>
+
+          <listitem>
+            <para>String are indexed as is</para>
+          </listitem>
+        </varlistentry>
+
+        <varlistentry>
+          <term>short, Short, integer, Integer, long, Long, float, Float,
+          double, Double, BigInteger, BigDecimal</term>
+
+          <listitem>
+            <para>Numbers are converted in their String representation. Note
+            that numbers cannot be compared by Lucene (ie used in ranged
+            queries) out of the box: they have to be padded <footnote>
+                <para>Using a Range query is debattable and has drawbacks, an
+                alternative approach is to use a Filter query which will
+                filter the result query to the appropriate range.</para>
+
+                <para><productname>Hibernate Search</productname> will support
+                a padding mechanism</para>
+              </footnote></para>
+          </listitem>
+        </varlistentry>
+
+        <varlistentry>
+          <term>java.util.Date</term>
+
+          <listitem>
+            <para>Dates are stored as yyyyMMddHHmmssSSS in GMT time
+            (200611072203012 for Nov 7th of 2006 4:03PM and 12ms EST). You
+            shouldn't really bother with the internal format. What is
+            important is that when using a DateRange Query, you should know
+            that the dates have to be expressed in GMT time.</para>
+
+            <para>Usually, storing the date up to the milisecond is not
+            necessary. <literal>@DateBridge</literal> defines the appropriate
+            resolution you are willing to store in the index ( <literal>
+            <literal>@DateBridge(resolution=Resolution.DAY)</literal>
+            </literal> ). The date pattern will then be truncated
+            accordingly.</para>
+
+            <programlisting>@Entity 
+ at Indexed
+public class Meeting {
+    @Field(index=Index.UN_TOKENIZED)
+    <emphasis role="bold">@DateBridge(resolution=Resolution.MINUTE)</emphasis>
+    private Date date;
+    ...                 </programlisting>
+
+            <warning>
+              <para>A Date whose resolution is lower than
+              <literal>MILLISECOND</literal> cannot be a
+              <literal>@DocumentId</literal></para>
+            </warning>
+          </listitem>
+        </varlistentry>
+      </variablelist>
+
+      <para></para>
+    </section>
+
+    <section>
+      <title>Custom Bridge</title>
+
+      <para>It can happen that the built-in bridges of Hibernate Search does
+      not cover some of your property types, or that the String representation
+      used is not what you expect.</para>
+
+      <section>
+        <title>StringBridge</title>
+
+        <para>The simpliest custom solution is to give <productname>Hibernate
+        Search </productname> an implementation of your expected
+        <emphasis>object to String</emphasis> bridge. To do so you need to
+        implements the
+        <literal>org.hibernate.search.bridge.StringBridge</literal>
+        interface</para>
+
+        <programlisting>/**
+ * Padding Integer bridge.
+ * All numbers will be padded with 0 to match 5 digits
+ *
+ * @author Emmanuel Bernard
+ */
+public class PaddedIntegerBridge implements <emphasis role="bold">StringBridge</emphasis> {
+
+    private int PADDING = 5;
+
+    <emphasis role="bold">public String objectToString(Object object)</emphasis> {
+        String rawInteger = ( (Integer) object ).toString();
+        if (rawInteger.length() &gt; PADDING) 
+            throw new IllegalArgumentException( "Try to pad on a number too big" );
+        StringBuilder paddedInteger = new StringBuilder( );
+        for ( int padIndex = rawInteger.length() ; padIndex &lt; PADDING ; padIndex++ ) {
+            paddedInteger.append('0');
+        }
+        return paddedInteger.append( rawInteger ).toString();
+    }
+}                </programlisting>
+
+        <para>Then any property or field can use this bridge thanks to the
+        <literal>@FieldBridge</literal> annotation</para>
+
+        <programlisting><emphasis role="bold">@FieldBridge(impl = PaddedIntegerBridge.class)</emphasis>
+private Integer length;                </programlisting>
+
+        <para>Parameters can be passed to the Bridge implementation making it
+        more flexible. The Bridge implementation implements a
+        <classname>ParameterizedBridge</classname> interface, and the
+        parameters are passed through the <literal>@FieldBridge</literal>
+        annotation.</para>
+
+        <programlisting>public class PaddedIntegerBridge implements StringBridge, <emphasis
+            role="bold">ParameterizedBridge</emphasis> {
+
+    public static String PADDING_PROPERTY = "padding";
+    private int padding = 5; //default
+
+    <emphasis role="bold">public void setParameterValues(Map parameters)</emphasis> {
+        Object padding = parameters.get( PADDING_PROPERTY );
+        if (padding != null) this.padding = (Integer) padding;
+    }
+
+    public String objectToString(Object object) {
+        String rawInteger = ( (Integer) object ).toString();
+        if (rawInteger.length() &gt; padding) 
+            throw new IllegalArgumentException( "Try to pad on a number too big" );
+        StringBuilder paddedInteger = new StringBuilder( );
+        for ( int padIndex = rawInteger.length() ; padIndex &lt; padding ; padIndex++ ) {
+            paddedInteger.append('0');
+        }
+        return paddedInteger.append( rawInteger ).toString();
+    }
+}
+
+
+//property
+ at FieldBridge(impl = PaddedIntegerBridge.class,
+             <emphasis role="bold">params = @Parameter(name="padding", value="10")</emphasis>
+            )
+private Integer length;                </programlisting>
+
+        <para>The <classname>ParameterizedBridge</classname> interface can be
+        implemented by <classname>StringBridge</classname> ,
+        <classname>TwoWayStringBridge</classname> ,
+        <classname>FieldBridge</classname> implementations (see
+        bellow).</para>
+
+        <para>If you expect to use your bridge implementation on for an id
+        property (ie annotated with <literal>@DocumentId</literal> ), you need
+        to use a slightly extended version of <literal>StringBridge</literal>
+        named <classname>TwoWayStringBridge</classname> . <literal>Hibernate
+        Search </literal> needs to read the string representation of the
+        identifier and generate the object out of it. There is not difference
+        in the way the <literal>@FieldBridge</literal> annotation is
+        used.</para>
+
+        <programlisting>public class PaddedIntegerBridge implements TwoWayStringBridge, ParameterizedBridge {
+
+    public static String PADDING_PROPERTY = "padding";
+    private int padding = 5; //default
+
+    public void setParameterValues(Map parameters) {
+        Object padding = parameters.get( PADDING_PROPERTY );
+        if (padding != null) this.padding = (Integer) padding;
+    }
+
+    public String objectToString(Object object) {
+        String rawInteger = ( (Integer) object ).toString();
+        if (rawInteger.length() &gt; padding) 
+            throw new IllegalArgumentException( "Try to pad on a number too big" );
+        StringBuilder paddedInteger = new StringBuilder( );
+        for ( int padIndex = rawInteger.length() ; padIndex &lt; padding ; padIndex++ ) {
+            paddedInteger.append('0');
+        }
+        return paddedInteger.append( rawInteger ).toString();
+    }
+
+    <emphasis role="bold">public Object stringToObject(String stringValue)</emphasis> {
+        return new Integer(stringValue);
+    }
+}
+
+
+//id property
+ at DocumentId
+ at FieldBridge(impl = PaddedIntegerBridge.class,
+             params = @Parameter(name="padding", value="10") 
+private Integer id;
+                </programlisting>
+
+        <para>It is critically important for the two-way process to be
+        idempotent (ie object = stringToObject( objectToString( object ) )
+        ).</para>
+      </section>
+
+      <section>
+        <title>FieldBridge</title>
+
+        <para>Some usecase requires more than a simple object to string
+        translation when mapping a property to a Lucene index. To give you
+        most of the flexibility you can also implement a bridge as a
+        <classname>FieldBridge</classname> . This interface give you a
+        property value and let you map it the way you want in your Lucene
+        <classname>Document</classname> .This interface is very similar in its
+        concept to the <productname>Hibernate</productname>
+        <classname>UserType</classname> .</para>
+
+        <para>You can for example store a given property in two different
+        document fields</para>
+
+        <programlisting>/**
+ * Store the date in 3 different field year, month, day
+ * to ease Range Query per year, month or day
+ * (eg get all the elements of december for the last 5 years)
+ *
+ * @author Emmanuel Bernard
+ */
+public class DateSplitBridge implements FieldBridge {
+    private final static TimeZone GMT = TimeZone.getTimeZone("GMT");
+
+    <emphasis role="bold">public void set(String name, Object value, Document document, Field.Store
+            store, Field.Index index, Float boost) {
+                    </emphasis>
+        Date date = (Date) value;
+        Calendar cal = GregorianCalendar.getInstance( GMT );
+        cal.setTime( date );
+        int year = cal.get( Calendar.YEAR );
+        int month = cal.get( Calendar.MONTH ) + 1;
+        int day = cal.get( Calendar.DAY_OF_MONTH );
+        //set year
+        Field field = new Field( name + ".year", String.valueOf(year), store, index );
+        if ( boost != null ) field.setBoost( boost );
+        document.add( field );
+        //set month and pad it if needed
+        field = new Field( name + ".month", month &lt; 10 ? "0" : "" + String.valueOf(month), store, index);
+        if ( boost != null ) field.setBoost( boost );
+        document.add( field );
+        //set day and pad it if needed
+        field = new Field( name + ".day", day &lt; 10 ? "0" : "" + String.valueOf(day), store, index );
+        if ( boost != null ) field.setBoost( boost );
+        document.add( field );
+    }
+}
+
+
+//property
+<emphasis role="bold">@FieldBridge(impl = DateSplitBridge.class)</emphasis>
+private Integer length;                </programlisting>
+
+        <para></para>
+      </section>
+    </section>
+  </section>
+</chapter>
\ No newline at end of file

Deleted: trunk/HibernateExt/search/doc/reference/en/modules/query.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/search/doc/reference/en/modules/query.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/doc/reference/en/modules/query.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<chapter id="search-query">
-  <title>Querying</title>
-
-  <para>The second most important capability of <productname>Hibernate Search
-  </productname> is the ability to execute a Lucene query and retrieve
-  entities managed by an Hibernate session, providing the power of Lucene
-  without living the Hibernate paradygm, and giving another dimension to the
-  Hibernate classic search mechanisms (HQL, Criteria query, native SQL
-  query).</para>
-
-  <para>To access the <productname>Hibernate Search</productname> querying
-  facilities, you have to use an Hibernate
-  <classname>FullTextSession</classname> . A SearchSession wrap an regular
-  <classname>org.hibernate.Session</classname> to provide query and indexing
-  capabilities.</para>
-
-  <programlisting>Session session = sessionFactory.openSession();
-...
-FullTextSession fullTextSession = Search.createFullTextSession(session);    </programlisting>
-
-  <para>The search facility is built on native Lucene queries.</para>
-
-  <programlisting>org.apache.lucene.queryParser.QueryParser parser = new QueryParser("title", new StopAnalyzer() );
-
-org.apache.lucene.search.Query luceneQuery = parser.parse( "summary:Festina Or brand:Seiko" );
-<emphasis role="bold">org.hibernate.Query fullTextQuery = fullTextSession.createFullTextQuery( luceneQuery );
-        </emphasis>
-
-List result = fullTextQuery.list(); //return a list of managed objects    </programlisting>
-
-  <para>The Hibernate query built on top of the Lucene query is a regular
-  <literal>org.hibernate.Query</literal> , you are is the same paradygm as the
-  other Hibernate query facilities (HQL, Native or Criteria). The regular
-  <literal>list()</literal> , <literal>uniqueResult()</literal> ,
-  <literal>iterate()</literal> and <literal>scroll()</literal> can be
-  used.</para>
-
-  <para>If you expect a reasonnable result number and expect to work on all of
-  them, <methodname>list()</methodname> or
-  <methodname>uniqueResult()</methodname> are recommanded.
-  <methodname>list()</methodname> work best if the entity
-  <literal>batch-size</literal> is set up properly. Note that Hibernate Seach
-  has to process all Lucene Hits elements when using
-  <methodname>list()</methodname> , <methodname>uniqueResult()</methodname>
-  and <methodname>iterate()</methodname> . If you wish to minimize Lucene
-  document loading, <methodname>scroll()</methodname> is more appropriate,
-  Don't forget to close the <classname>ScrollableResults</classname> object
-  when you're done, since it keeps Lucene resources.</para>
-
-  <para>An efficient way to work with queries is to use pagination. The
-  pagination API is exactly the one available in
-  <classname>org.hibernate.Query</classname> :</para>
-
-  <programlisting><emphasis role="bold">org.hibernate.Query fullTextQuery = fullTextSession.createFullTextQuery( luceneQuery );
-        </emphasis>
-fullTextQuery.setFirstResult(30);
-fullTextQuery.setMaxResult(20);
-fullTextQuery.list(); //will return a list of 20 elements starting from the 30th    </programlisting>
-
-  <para>Only the relevant Lucene Documents are accessed.</para>
-</chapter>
\ No newline at end of file

Copied: trunk/HibernateExt/search/doc/reference/en/modules/query.xml (from rev 11279, branches/Branch_3_2/HibernateExt/search/doc/reference/en/modules/query.xml)
===================================================================
--- trunk/HibernateExt/search/doc/reference/en/modules/query.xml	                        (rev 0)
+++ trunk/HibernateExt/search/doc/reference/en/modules/query.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<chapter id="search-query">
+  <title>Querying</title>
+
+  <para>The second most important capability of <productname>Hibernate Search
+  </productname> is the ability to execute a Lucene query and retrieve
+  entities managed by an Hibernate session, providing the power of Lucene
+  without living the Hibernate paradygm, and giving another dimension to the
+  Hibernate classic search mechanisms (HQL, Criteria query, native SQL
+  query).</para>
+
+  <para>To access the <productname>Hibernate Search</productname> querying
+  facilities, you have to use an Hibernate
+  <classname>FullTextSession</classname> . A SearchSession wrap an regular
+  <classname>org.hibernate.Session</classname> to provide query and indexing
+  capabilities.</para>
+
+  <programlisting>Session session = sessionFactory.openSession();
+...
+FullTextSession fullTextSession = Search.createFullTextSession(session);    </programlisting>
+
+  <para>The search facility is built on native Lucene queries.</para>
+
+  <programlisting>org.apache.lucene.queryParser.QueryParser parser = new QueryParser("title", new StopAnalyzer() );
+
+org.apache.lucene.search.Query luceneQuery = parser.parse( "summary:Festina Or brand:Seiko" );
+<emphasis role="bold">org.hibernate.Query fullTextQuery = fullTextSession.createFullTextQuery( luceneQuery );
+        </emphasis>
+
+List result = fullTextQuery.list(); //return a list of managed objects    </programlisting>
+
+  <para>The Hibernate query built on top of the Lucene query is a regular
+  <literal>org.hibernate.Query</literal> , you are is the same paradygm as the
+  other Hibernate query facilities (HQL, Native or Criteria). The regular
+  <literal>list()</literal> , <literal>uniqueResult()</literal> ,
+  <literal>iterate()</literal> and <literal>scroll()</literal> can be
+  used.</para>
+
+  <para>If you expect a reasonnable result number and expect to work on all of
+  them, <methodname>list()</methodname> or
+  <methodname>uniqueResult()</methodname> are recommanded.
+  <methodname>list()</methodname> work best if the entity
+  <literal>batch-size</literal> is set up properly. Note that Hibernate Seach
+  has to process all Lucene Hits elements when using
+  <methodname>list()</methodname> , <methodname>uniqueResult()</methodname>
+  and <methodname>iterate()</methodname> . If you wish to minimize Lucene
+  document loading, <methodname>scroll()</methodname> is more appropriate,
+  Don't forget to close the <classname>ScrollableResults</classname> object
+  when you're done, since it keeps Lucene resources.</para>
+
+  <para>An efficient way to work with queries is to use pagination. The
+  pagination API is exactly the one available in
+  <classname>org.hibernate.Query</classname> :</para>
+
+  <programlisting><emphasis role="bold">org.hibernate.Query fullTextQuery = fullTextSession.createFullTextQuery( luceneQuery );
+        </emphasis>
+fullTextQuery.setFirstResult(30);
+fullTextQuery.setMaxResult(20);
+fullTextQuery.list(); //will return a list of 20 elements starting from the 30th    </programlisting>
+
+  <para>Only the relevant Lucene Documents are accessed.</para>
+</chapter>
\ No newline at end of file

Copied: trunk/HibernateExt/search/doc/reference/en/styles (from rev 11279, branches/Branch_3_2/HibernateExt/search/doc/reference/en/styles)

Deleted: trunk/HibernateExt/search/doc/reference/en/styles/fopdf.xsl
===================================================================
--- branches/Branch_3_2/HibernateExt/search/doc/reference/en/styles/fopdf.xsl	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/doc/reference/en/styles/fopdf.xsl	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,519 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
-
-    This is the XSL FO configuration file for the Hibernate
-    Reference Documentation. It defines a custom titlepage and
-    the parameters for the A4 sized PDF printable output.
-
-    It took me days to figure out this stuff and fix most of
-    the obvious bugs in the DocBook XSL distribution. Some of
-    the workarounds might not be appropriate with a newer version
-    of DocBook XSL. This file is released as part of Hibernate,
-    hence LGPL licensed.
-
-    christian at hibernate.org
-
--->
-
-<!DOCTYPE xsl:stylesheet [
-    <!ENTITY db_xsl_path        "../../../../../../Hibernate3/doc/reference/support/docbook-xsl/">
-]>
-
-<xsl:stylesheet
-    version="1.0"
-    xmlns="http://www.w3.org/TR/xhtml1/transitional"
-    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-    xmlns:fo="http://www.w3.org/1999/XSL/Format"
-    exclude-result-prefixes="#default">
-
-    <xsl:import href="&db_xsl_path;/fo/docbook.xsl"/>
-
-    <!--###################################################
-                       Custom Title Page
-        ################################################### -->
-
-    <xsl:template name="book.titlepage.recto">
-        <fo:block>
-            <fo:table table-layout="fixed" width="175mm">
-                <fo:table-column column-width="175mm"/>
-                <fo:table-body>
-                    <fo:table-row>
-                        <fo:table-cell text-align="center">
-                            <fo:block>
-                                <fo:external-graphic src="file:images/hibernate_logo_a.png"/>
-                            </fo:block>
-                            <fo:block font-family="Helvetica" font-size="22pt" padding-before="10mm">
-                                <xsl:value-of select="bookinfo/title"/>
-                            </fo:block>
-                            <fo:block font-family="Helvetica" font-size="18pt" padding-before="10mm">
-                                <xsl:value-of select="bookinfo/subtitle"/>
-                            </fo:block>
-                            <fo:block font-family="Helvetica" font-size="12pt" padding="10mm">
-                                Version:
-                                <xsl:value-of select="bookinfo/releaseinfo"/>
-                            </fo:block>
-                        </fo:table-cell>
-                    </fo:table-row>
-                </fo:table-body>
-            </fo:table>
-        </fo:block>
-    </xsl:template>
-
-    <!-- Prevent blank pages in output -->
-    <xsl:template name="book.titlepage.before.verso">
-    </xsl:template>
-    <xsl:template name="book.titlepage.verso">
-    </xsl:template>
-    <xsl:template name="book.titlepage.separator">
-    </xsl:template>
-
-    <!--###################################################
-                          Header
-        ################################################### -->
-
-    <!-- More space in the center header for long text -->
-    <xsl:attribute-set name="header.content.properties">
-        <xsl:attribute name="font-family">
-            <xsl:value-of select="$body.font.family"/>
-        </xsl:attribute>
-        <xsl:attribute name="margin-left">-5em</xsl:attribute>
-        <xsl:attribute name="margin-right">-5em</xsl:attribute>
-    </xsl:attribute-set>
-
-    <!--###################################################
-                          Custom Footer
-        ################################################### -->
-
-    <!-- This footer prints the Hibernate version number on the left side -->
-    <xsl:template name="footer.content">
-        <xsl:param name="pageclass" select="''"/>
-        <xsl:param name="sequence" select="''"/>
-        <xsl:param name="position" select="''"/>
-        <xsl:param name="gentext-key" select="''"/>
-
-        <xsl:variable name="Version">
-            <xsl:choose>
-                <xsl:when test="//releaseinfo">
-                    <xsl:text>Hibernate </xsl:text>
-                    <xsl:value-of select="//releaseinfo"/>
-                </xsl:when>
-                <xsl:otherwise>
-                    <!-- nop -->
-                </xsl:otherwise>
-            </xsl:choose>
-        </xsl:variable>
-
-        <xsl:choose>
-            <xsl:when test="$sequence='blank'">
-                <xsl:choose>
-                    <xsl:when test="$double.sided != 0 and $position = 'left'">
-                        <xsl:value-of select="$Version"/>
-                    </xsl:when>
-
-                    <xsl:when test="$double.sided = 0 and $position = 'center'">
-                        <!-- nop -->
-                    </xsl:when>
-
-                    <xsl:otherwise>
-                        <fo:page-number/>
-                    </xsl:otherwise>
-                </xsl:choose>
-            </xsl:when>
-
-            <xsl:when test="$pageclass='titlepage'">
-                <!-- nop: other titlepage sequences have no footer -->
-            </xsl:when>
-
-            <xsl:when test="$double.sided != 0 and $sequence = 'even' and $position='left'">
-                <fo:page-number/>
-            </xsl:when>
-
-            <xsl:when test="$double.sided != 0 and $sequence = 'odd' and $position='right'">
-                <fo:page-number/>
-            </xsl:when>
-
-            <xsl:when test="$double.sided = 0 and $position='right'">
-                <fo:page-number/>
-            </xsl:when>
-
-            <xsl:when test="$double.sided != 0 and $sequence = 'odd' and $position='left'">
-                <xsl:value-of select="$Version"/>
-            </xsl:when>
-
-            <xsl:when test="$double.sided != 0 and $sequence = 'even' and $position='right'">
-                <xsl:value-of select="$Version"/>
-            </xsl:when>
-
-            <xsl:when test="$double.sided = 0 and $position='left'">
-                <xsl:value-of select="$Version"/>
-            </xsl:when>
-
-            <xsl:otherwise>
-                <!-- nop -->
-            </xsl:otherwise>
-        </xsl:choose>
-    </xsl:template>
-
-    <!--###################################################
-                       Custom Toc Line
-        ################################################### -->
-    
-    <!-- Improve the TOC. -->
-    <xsl:template name="toc.line">
-        <xsl:variable name="id">
-            <xsl:call-template name="object.id"/>
-        </xsl:variable>
-
-        <xsl:variable name="label">
-            <xsl:apply-templates select="." mode="label.markup"/>
-        </xsl:variable>
-
-        <fo:block text-align-last="justify"
-            end-indent="{$toc.indent.width}pt"
-            last-line-end-indent="-{$toc.indent.width}pt">
-            <fo:inline keep-with-next.within-line="always">
-                <fo:basic-link internal-destination="{$id}">
-
-                    <!-- Chapter titles should be bold. -->
-                    <xsl:choose>
-                        <xsl:when test="local-name(.) = 'chapter'">
-                            <xsl:attribute name="font-weight">bold</xsl:attribute>
-                        </xsl:when>
-                    </xsl:choose>
-
-                    <xsl:if test="$label != ''">
-                        <xsl:copy-of select="$label"/>
-                        <xsl:value-of select="$autotoc.label.separator"/>
-                    </xsl:if>
-                    <xsl:apply-templates select="." mode="titleabbrev.markup"/>
-                </fo:basic-link>
-            </fo:inline>
-            <fo:inline keep-together.within-line="always">
-                <xsl:text> </xsl:text>
-                <fo:leader leader-pattern="dots"
-                    leader-pattern-width="3pt"
-                    leader-alignment="reference-area"
-                    keep-with-next.within-line="always"/>
-                <xsl:text> </xsl:text>
-                <fo:basic-link internal-destination="{$id}">
-                    <fo:page-number-citation ref-id="{$id}"/>
-                </fo:basic-link>
-            </fo:inline>
-        </fo:block>
-    </xsl:template>
-
-    <!--###################################################
-                          Extensions
-        ################################################### -->
-
-    <!-- These extensions are required for table printing and other stuff -->
-    <xsl:param name="use.extensions">1</xsl:param>
-    <xsl:param name="tablecolumns.extension">0</xsl:param>
-    <!-- FOP provide only PDF Bookmarks at the moment -->
-    <xsl:param name="fop.extensions">1</xsl:param>
-
-    <!--###################################################
-                          Table Of Contents
-        ################################################### -->
-
-    <!-- Generate the TOCs for named components only -->
-    <xsl:param name="generate.toc">
-        book   toc
-    </xsl:param>
-    
-    <!-- Show only Sections up to level 3 in the TOCs -->
-    <xsl:param name="toc.section.depth">3</xsl:param>
-    
-    <!-- Dot and Whitespace as separator in TOC between Label and Title-->
-    <xsl:param name="autotoc.label.separator" select="'.  '"/>
-
-
-    <!--###################################################
-                       Paper & Page Size
-        ################################################### -->
-    
-    <!-- Paper type, no headers on blank pages, no double sided printing -->
-    <xsl:param name="paper.type" select="'A4'"/>
-    <xsl:param name="double.sided">0</xsl:param>
-    <xsl:param name="headers.on.blank.pages">0</xsl:param>
-    <xsl:param name="footers.on.blank.pages">0</xsl:param>
-
-    <!-- Space between paper border and content (chaotic stuff, don't touch) -->
-    <xsl:param name="page.margin.top">5mm</xsl:param>
-    <xsl:param name="region.before.extent">10mm</xsl:param>
-    <xsl:param name="body.margin.top">10mm</xsl:param>
-
-    <xsl:param name="body.margin.bottom">15mm</xsl:param>
-    <xsl:param name="region.after.extent">10mm</xsl:param>
-    <xsl:param name="page.margin.bottom">0mm</xsl:param>
-
-    <xsl:param name="page.margin.outer">18mm</xsl:param>
-    <xsl:param name="page.margin.inner">18mm</xsl:param>
-
-    <!-- No intendation of Titles -->
-    <xsl:param name="title.margin.left">0pc</xsl:param>
-
-    <!--###################################################
-                       Fonts & Styles
-        ################################################### -->
-
-    <!-- Default Font size -->
-    <xsl:param name="body.font.master">11</xsl:param>
-
-    <!-- Line height in body text -->
-    <xsl:param name="line-height">1.4</xsl:param>
-
-    <!-- Monospaced fonts are smaller than regular text -->
-    <xsl:attribute-set name="monospace.properties">
-        <xsl:attribute name="font-family">
-            <xsl:value-of select="$monospace.font.family"/>
-        </xsl:attribute>
-        <xsl:attribute name="font-size">0.8em</xsl:attribute>
-    </xsl:attribute-set>
-
-    <!--###################################################
-                       Tables
-        ################################################### -->
-
-    <!-- The table width should be adapted to the paper size -->
-    <xsl:param name="default.table.width">17.4cm</xsl:param>
-
-    <!-- Some padding inside tables -->
-    <xsl:attribute-set name="table.cell.padding">
-        <xsl:attribute name="padding-left">4pt</xsl:attribute>
-        <xsl:attribute name="padding-right">4pt</xsl:attribute>
-        <xsl:attribute name="padding-top">4pt</xsl:attribute>
-        <xsl:attribute name="padding-bottom">4pt</xsl:attribute>
-    </xsl:attribute-set>
-    
-    <!-- Only hairlines as frame and cell borders in tables -->
-    <xsl:param name="table.frame.border.thickness">0.1pt</xsl:param>
-    <xsl:param name="table.cell.border.thickness">0.1pt</xsl:param>
-
-    <!--###################################################
-                             Labels
-        ################################################### -->
-
-    <!-- Label Chapters and Sections (numbering) -->
-    <xsl:param name="chapter.autolabel">1</xsl:param>
-    <xsl:param name="section.autolabel" select="1"/>
-    <xsl:param name="section.label.includes.component.label" select="1"/>
-
-    <!-- Label only Sections up to level 2 -->
-    <xsl:param name="local.l10n.xml" select="document('')"/>
-    <l:i18n xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0">
-        <l:l10n language="en">
-            <l:context name="title-numbered">
-                <l:template name="sect3" text="%t"/>
-                <l:template name="sect4" text="%t"/>
-                <l:template name="sect5" text="%t"/>
-            </l:context>
-            <l:context name="section-xref-numbered">
-                <l:template name="sect3" text="the section called %t"/>
-                <l:template name="sect4" text="the section called %t"/>
-                <l:template name="sect5" text="the section called %t"/>
-            </l:context>
-        </l:l10n>
-    </l:i18n>
-    
-    <!--###################################################
-                             Titles
-        ################################################### -->
-    
-    <!-- Chapter title size -->
-    <xsl:attribute-set name="chapter.titlepage.recto.style">
-        <xsl:attribute name="text-align">left</xsl:attribute>
-        <xsl:attribute name="font-weight">bold</xsl:attribute>
-        <xsl:attribute name="font-size">
-            <xsl:value-of select="$body.font.master * 1.8"/>
-            <xsl:text>pt</xsl:text>
-        </xsl:attribute>
-    </xsl:attribute-set>
-
-    <!-- Why is the font-size for chapters hardcoded in the XSL FO templates? 
-        Let's remove it, so this sucker can use our attribute-set only... -->
-    <xsl:template match="title" mode="chapter.titlepage.recto.auto.mode">
-        <fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format"
-            xsl:use-attribute-sets="chapter.titlepage.recto.style">
-            <xsl:call-template name="component.title">
-                <xsl:with-param name="node" select="ancestor-or-self::chapter[1]"/>
-            </xsl:call-template>
-        </fo:block>
-    </xsl:template>
-    
-    <!-- Sections 1, 2 and 3 titles have a small bump factor and padding -->
-    <xsl:attribute-set name="section.title.level1.properties">
-        <xsl:attribute name="space-before.optimum">0.8em</xsl:attribute>
-        <xsl:attribute name="space-before.minimum">0.8em</xsl:attribute>
-        <xsl:attribute name="space-before.maximum">0.8em</xsl:attribute>
-        <xsl:attribute name="font-size">
-            <xsl:value-of select="$body.font.master * 1.5"/>
-            <xsl:text>pt</xsl:text>
-        </xsl:attribute>
-        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
-    </xsl:attribute-set>
-    <xsl:attribute-set name="section.title.level2.properties">
-        <xsl:attribute name="space-before.optimum">0.6em</xsl:attribute>
-        <xsl:attribute name="space-before.minimum">0.6em</xsl:attribute>
-        <xsl:attribute name="space-before.maximum">0.6em</xsl:attribute>
-        <xsl:attribute name="font-size">
-            <xsl:value-of select="$body.font.master * 1.25"/>
-            <xsl:text>pt</xsl:text>
-        </xsl:attribute>
-        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
-    </xsl:attribute-set>
-    <xsl:attribute-set name="section.title.level3.properties">
-        <xsl:attribute name="space-before.optimum">0.4em</xsl:attribute>
-        <xsl:attribute name="space-before.minimum">0.4em</xsl:attribute>
-        <xsl:attribute name="space-before.maximum">0.4em</xsl:attribute>
-        <xsl:attribute name="font-size">
-            <xsl:value-of select="$body.font.master * 1.0"/>
-            <xsl:text>pt</xsl:text>
-        </xsl:attribute>
-        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
-    </xsl:attribute-set>
-
-    <!-- Titles of formal objects (tables, examples, ...) -->
-    <xsl:attribute-set name="formal.title.properties" use-attribute-sets="normal.para.spacing">
-        <xsl:attribute name="font-weight">bold</xsl:attribute>
-        <xsl:attribute name="font-size">
-            <xsl:value-of select="$body.font.master"/>
-            <xsl:text>pt</xsl:text>
-        </xsl:attribute>
-        <xsl:attribute name="hyphenate">false</xsl:attribute>
-        <xsl:attribute name="space-after.minimum">0.4em</xsl:attribute>
-        <xsl:attribute name="space-after.optimum">0.6em</xsl:attribute>
-        <xsl:attribute name="space-after.maximum">0.8em</xsl:attribute>
-    </xsl:attribute-set>
-
-    <!--###################################################
-                          Programlistings
-        ################################################### -->
-    
-    <!-- Verbatim text formatting (programlistings) -->
-    <xsl:attribute-set name="verbatim.properties">
-        <xsl:attribute name="space-before.minimum">1em</xsl:attribute>
-        <xsl:attribute name="space-before.optimum">1em</xsl:attribute>
-        <xsl:attribute name="space-before.maximum">1em</xsl:attribute>
-        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
-        <xsl:attribute name="border-color">#444444</xsl:attribute>
-        <xsl:attribute name="border-style">solid</xsl:attribute>
-        <xsl:attribute name="border-width">0.1pt</xsl:attribute>
-        <xsl:attribute name="padding-top">0.5em</xsl:attribute>
-        <xsl:attribute name="padding-left">0.5em</xsl:attribute>
-        <xsl:attribute name="padding-right">0.5em</xsl:attribute>
-        <xsl:attribute name="padding-bottom">0.5em</xsl:attribute>
-        <xsl:attribute name="margin-left">0.5em</xsl:attribute>
-        <xsl:attribute name="margin-right">0.5em</xsl:attribute>
-    </xsl:attribute-set>
-
-    <!-- Shade (background) programlistings -->
-    <xsl:param name="shade.verbatim">1</xsl:param>
-    <xsl:attribute-set name="shade.verbatim.style">
-        <xsl:attribute name="background-color">#F0F0F0</xsl:attribute>
-    </xsl:attribute-set>
-
-    <!--###################################################
-                             Callouts
-        ################################################### -->
-
-    <!-- We want to use callouts... -->
-    <xsl:param name="callout.extensions">1</xsl:param>
-
-    <!-- Place callout bullets at this column in programmlisting.-->
-    <xsl:param name="callout.defaultcolumn">90</xsl:param>
-
-    <!--
-        No, don't use crappy graphics for the callout bullets. This setting
-        enables some weird Unicode rendering for some fancy bullet points
-        in callouts. By default, this can only count to 10 and produces
-        strange results if you ever have more than 10 callouts for one
-        programlisting. We will fix that next.
-    -->
-    <xsl:param name="callout.graphics">0</xsl:param>
-
-    <!--
-        Again, fun with DocBook XSL: The callout bullets are rendered in
-        two places: In the programlisting itself and in the list below
-        the listing, with the actual callout text. The rendering in the
-        programlisting is some XSL transformer extension (e.g. a Saxon
-        extension), so we can't change that without messing with the
-        extensions. We only can turn it off by setting this limit to
-        zero, then, a simple bracket style like "(3)" and "(4)" will
-        be used in the programlisting.
-    -->
-    <xsl:param name="callout.unicode.number.limit" select="'0'"></xsl:param>
-
-    <!--
-        The callout bullets in the actual callout list will be rendered
-        with an XSL FO template. The default template is broken: limited to 10
-        nice looking Unicode bullet points and then it doesn't print anything,
-        the fallback doesn't work. We implement our own template, which is not
-        as complicated, more ugly, but works. As always, function is more
-        important than form.
-    -->
-    <xsl:template name="callout-bug">
-        <xsl:param name="conum" select='1'/>
-        <fo:inline
-            color="black"
-            padding-top="0.1em"
-            padding-bottom="0.1em"
-            padding-start="0.2em"
-            padding-end="0.2em"
-            baseline-shift="0.1em"
-            font-family="{$monospace.font.family}"
-            font-weight="bold"
-            font-size="75%">
-            <xsl:text>(</xsl:text>
-            <xsl:value-of select="$conum"/>
-            <xsl:text>)</xsl:text>
-        </fo:inline>
-
-    </xsl:template>
-
-    <!--###################################################
-                              Misc
-        ################################################### -->
-
-    <!-- Correct placement of titles for figures and examples. -->
-    <xsl:param name="formal.title.placement">
-        figure after
-        example before
-        equation before
-        table before
-        procedure before
-    </xsl:param>
-    
-    <!-- Format Variable Lists as Blocks (prevents horizontal overflow). -->
-    <xsl:param name="variablelist.as.blocks">1</xsl:param>
-
-    <!-- The horrible list spacing problems, this is much better. -->
-    <xsl:attribute-set name="list.block.spacing">
-        <xsl:attribute name="space-before.optimum">0.8em</xsl:attribute>
-        <xsl:attribute name="space-before.minimum">0.8em</xsl:attribute>
-        <xsl:attribute name="space-before.maximum">0.8em</xsl:attribute>
-        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
-    </xsl:attribute-set>
-
-    <!-- Newer DocBook XSL apparently thinks that some sections are by
-         default "draft" status, and this idiotic thing is by default
-         also set to "maybe", so it spits out a lot of errors with the
-         latest FOP as the XSL/FO styles have references to some draft
-         watermarks, which you actually don't want in the first place.
-         Turn this crap off. If you have to work with the "status"
-         attribute, don't.
-    -->
-    <xsl:param name="draft.mode" select="'no'"/>
-
-</xsl:stylesheet>

Copied: trunk/HibernateExt/search/doc/reference/en/styles/fopdf.xsl (from rev 11279, branches/Branch_3_2/HibernateExt/search/doc/reference/en/styles/fopdf.xsl)
===================================================================
--- trunk/HibernateExt/search/doc/reference/en/styles/fopdf.xsl	                        (rev 0)
+++ trunk/HibernateExt/search/doc/reference/en/styles/fopdf.xsl	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,519 @@
+<?xml version="1.0"?>
+
+<!--
+
+    This is the XSL FO configuration file for the Hibernate
+    Reference Documentation. It defines a custom titlepage and
+    the parameters for the A4 sized PDF printable output.
+
+    It took me days to figure out this stuff and fix most of
+    the obvious bugs in the DocBook XSL distribution. Some of
+    the workarounds might not be appropriate with a newer version
+    of DocBook XSL. This file is released as part of Hibernate,
+    hence LGPL licensed.
+
+    christian at hibernate.org
+
+-->
+
+<!DOCTYPE xsl:stylesheet [
+    <!ENTITY db_xsl_path        "../../../../../../Hibernate3/doc/reference/support/docbook-xsl/">
+]>
+
+<xsl:stylesheet
+    version="1.0"
+    xmlns="http://www.w3.org/TR/xhtml1/transitional"
+    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+    xmlns:fo="http://www.w3.org/1999/XSL/Format"
+    exclude-result-prefixes="#default">
+
+    <xsl:import href="&db_xsl_path;/fo/docbook.xsl"/>
+
+    <!--###################################################
+                       Custom Title Page
+        ################################################### -->
+
+    <xsl:template name="book.titlepage.recto">
+        <fo:block>
+            <fo:table table-layout="fixed" width="175mm">
+                <fo:table-column column-width="175mm"/>
+                <fo:table-body>
+                    <fo:table-row>
+                        <fo:table-cell text-align="center">
+                            <fo:block>
+                                <fo:external-graphic src="file:images/hibernate_logo_a.png"/>
+                            </fo:block>
+                            <fo:block font-family="Helvetica" font-size="22pt" padding-before="10mm">
+                                <xsl:value-of select="bookinfo/title"/>
+                            </fo:block>
+                            <fo:block font-family="Helvetica" font-size="18pt" padding-before="10mm">
+                                <xsl:value-of select="bookinfo/subtitle"/>
+                            </fo:block>
+                            <fo:block font-family="Helvetica" font-size="12pt" padding="10mm">
+                                Version:
+                                <xsl:value-of select="bookinfo/releaseinfo"/>
+                            </fo:block>
+                        </fo:table-cell>
+                    </fo:table-row>
+                </fo:table-body>
+            </fo:table>
+        </fo:block>
+    </xsl:template>
+
+    <!-- Prevent blank pages in output -->
+    <xsl:template name="book.titlepage.before.verso">
+    </xsl:template>
+    <xsl:template name="book.titlepage.verso">
+    </xsl:template>
+    <xsl:template name="book.titlepage.separator">
+    </xsl:template>
+
+    <!--###################################################
+                          Header
+        ################################################### -->
+
+    <!-- More space in the center header for long text -->
+    <xsl:attribute-set name="header.content.properties">
+        <xsl:attribute name="font-family">
+            <xsl:value-of select="$body.font.family"/>
+        </xsl:attribute>
+        <xsl:attribute name="margin-left">-5em</xsl:attribute>
+        <xsl:attribute name="margin-right">-5em</xsl:attribute>
+    </xsl:attribute-set>
+
+    <!--###################################################
+                          Custom Footer
+        ################################################### -->
+
+    <!-- This footer prints the Hibernate version number on the left side -->
+    <xsl:template name="footer.content">
+        <xsl:param name="pageclass" select="''"/>
+        <xsl:param name="sequence" select="''"/>
+        <xsl:param name="position" select="''"/>
+        <xsl:param name="gentext-key" select="''"/>
+
+        <xsl:variable name="Version">
+            <xsl:choose>
+                <xsl:when test="//releaseinfo">
+                    <xsl:text>Hibernate </xsl:text>
+                    <xsl:value-of select="//releaseinfo"/>
+                </xsl:when>
+                <xsl:otherwise>
+                    <!-- nop -->
+                </xsl:otherwise>
+            </xsl:choose>
+        </xsl:variable>
+
+        <xsl:choose>
+            <xsl:when test="$sequence='blank'">
+                <xsl:choose>
+                    <xsl:when test="$double.sided != 0 and $position = 'left'">
+                        <xsl:value-of select="$Version"/>
+                    </xsl:when>
+
+                    <xsl:when test="$double.sided = 0 and $position = 'center'">
+                        <!-- nop -->
+                    </xsl:when>
+
+                    <xsl:otherwise>
+                        <fo:page-number/>
+                    </xsl:otherwise>
+                </xsl:choose>
+            </xsl:when>
+
+            <xsl:when test="$pageclass='titlepage'">
+                <!-- nop: other titlepage sequences have no footer -->
+            </xsl:when>
+
+            <xsl:when test="$double.sided != 0 and $sequence = 'even' and $position='left'">
+                <fo:page-number/>
+            </xsl:when>
+
+            <xsl:when test="$double.sided != 0 and $sequence = 'odd' and $position='right'">
+                <fo:page-number/>
+            </xsl:when>
+
+            <xsl:when test="$double.sided = 0 and $position='right'">
+                <fo:page-number/>
+            </xsl:when>
+
+            <xsl:when test="$double.sided != 0 and $sequence = 'odd' and $position='left'">
+                <xsl:value-of select="$Version"/>
+            </xsl:when>
+
+            <xsl:when test="$double.sided != 0 and $sequence = 'even' and $position='right'">
+                <xsl:value-of select="$Version"/>
+            </xsl:when>
+
+            <xsl:when test="$double.sided = 0 and $position='left'">
+                <xsl:value-of select="$Version"/>
+            </xsl:when>
+
+            <xsl:otherwise>
+                <!-- nop -->
+            </xsl:otherwise>
+        </xsl:choose>
+    </xsl:template>
+
+    <!--###################################################
+                       Custom Toc Line
+        ################################################### -->
+    
+    <!-- Improve the TOC. -->
+    <xsl:template name="toc.line">
+        <xsl:variable name="id">
+            <xsl:call-template name="object.id"/>
+        </xsl:variable>
+
+        <xsl:variable name="label">
+            <xsl:apply-templates select="." mode="label.markup"/>
+        </xsl:variable>
+
+        <fo:block text-align-last="justify"
+            end-indent="{$toc.indent.width}pt"
+            last-line-end-indent="-{$toc.indent.width}pt">
+            <fo:inline keep-with-next.within-line="always">
+                <fo:basic-link internal-destination="{$id}">
+
+                    <!-- Chapter titles should be bold. -->
+                    <xsl:choose>
+                        <xsl:when test="local-name(.) = 'chapter'">
+                            <xsl:attribute name="font-weight">bold</xsl:attribute>
+                        </xsl:when>
+                    </xsl:choose>
+
+                    <xsl:if test="$label != ''">
+                        <xsl:copy-of select="$label"/>
+                        <xsl:value-of select="$autotoc.label.separator"/>
+                    </xsl:if>
+                    <xsl:apply-templates select="." mode="titleabbrev.markup"/>
+                </fo:basic-link>
+            </fo:inline>
+            <fo:inline keep-together.within-line="always">
+                <xsl:text> </xsl:text>
+                <fo:leader leader-pattern="dots"
+                    leader-pattern-width="3pt"
+                    leader-alignment="reference-area"
+                    keep-with-next.within-line="always"/>
+                <xsl:text> </xsl:text>
+                <fo:basic-link internal-destination="{$id}">
+                    <fo:page-number-citation ref-id="{$id}"/>
+                </fo:basic-link>
+            </fo:inline>
+        </fo:block>
+    </xsl:template>
+
+    <!--###################################################
+                          Extensions
+        ################################################### -->
+
+    <!-- These extensions are required for table printing and other stuff -->
+    <xsl:param name="use.extensions">1</xsl:param>
+    <xsl:param name="tablecolumns.extension">0</xsl:param>
+    <!-- FOP provide only PDF Bookmarks at the moment -->
+    <xsl:param name="fop.extensions">1</xsl:param>
+
+    <!--###################################################
+                          Table Of Contents
+        ################################################### -->
+
+    <!-- Generate the TOCs for named components only -->
+    <xsl:param name="generate.toc">
+        book   toc
+    </xsl:param>
+    
+    <!-- Show only Sections up to level 3 in the TOCs -->
+    <xsl:param name="toc.section.depth">3</xsl:param>
+    
+    <!-- Dot and Whitespace as separator in TOC between Label and Title-->
+    <xsl:param name="autotoc.label.separator" select="'.  '"/>
+
+
+    <!--###################################################
+                       Paper & Page Size
+        ################################################### -->
+    
+    <!-- Paper type, no headers on blank pages, no double sided printing -->
+    <xsl:param name="paper.type" select="'A4'"/>
+    <xsl:param name="double.sided">0</xsl:param>
+    <xsl:param name="headers.on.blank.pages">0</xsl:param>
+    <xsl:param name="footers.on.blank.pages">0</xsl:param>
+
+    <!-- Space between paper border and content (chaotic stuff, don't touch) -->
+    <xsl:param name="page.margin.top">5mm</xsl:param>
+    <xsl:param name="region.before.extent">10mm</xsl:param>
+    <xsl:param name="body.margin.top">10mm</xsl:param>
+
+    <xsl:param name="body.margin.bottom">15mm</xsl:param>
+    <xsl:param name="region.after.extent">10mm</xsl:param>
+    <xsl:param name="page.margin.bottom">0mm</xsl:param>
+
+    <xsl:param name="page.margin.outer">18mm</xsl:param>
+    <xsl:param name="page.margin.inner">18mm</xsl:param>
+
+    <!-- No intendation of Titles -->
+    <xsl:param name="title.margin.left">0pc</xsl:param>
+
+    <!--###################################################
+                       Fonts & Styles
+        ################################################### -->
+
+    <!-- Default Font size -->
+    <xsl:param name="body.font.master">11</xsl:param>
+
+    <!-- Line height in body text -->
+    <xsl:param name="line-height">1.4</xsl:param>
+
+    <!-- Monospaced fonts are smaller than regular text -->
+    <xsl:attribute-set name="monospace.properties">
+        <xsl:attribute name="font-family">
+            <xsl:value-of select="$monospace.font.family"/>
+        </xsl:attribute>
+        <xsl:attribute name="font-size">0.8em</xsl:attribute>
+    </xsl:attribute-set>
+
+    <!--###################################################
+                       Tables
+        ################################################### -->
+
+    <!-- The table width should be adapted to the paper size -->
+    <xsl:param name="default.table.width">17.4cm</xsl:param>
+
+    <!-- Some padding inside tables -->
+    <xsl:attribute-set name="table.cell.padding">
+        <xsl:attribute name="padding-left">4pt</xsl:attribute>
+        <xsl:attribute name="padding-right">4pt</xsl:attribute>
+        <xsl:attribute name="padding-top">4pt</xsl:attribute>
+        <xsl:attribute name="padding-bottom">4pt</xsl:attribute>
+    </xsl:attribute-set>
+    
+    <!-- Only hairlines as frame and cell borders in tables -->
+    <xsl:param name="table.frame.border.thickness">0.1pt</xsl:param>
+    <xsl:param name="table.cell.border.thickness">0.1pt</xsl:param>
+
+    <!--###################################################
+                             Labels
+        ################################################### -->
+
+    <!-- Label Chapters and Sections (numbering) -->
+    <xsl:param name="chapter.autolabel">1</xsl:param>
+    <xsl:param name="section.autolabel" select="1"/>
+    <xsl:param name="section.label.includes.component.label" select="1"/>
+
+    <!-- Label only Sections up to level 2 -->
+    <xsl:param name="local.l10n.xml" select="document('')"/>
+    <l:i18n xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0">
+        <l:l10n language="en">
+            <l:context name="title-numbered">
+                <l:template name="sect3" text="%t"/>
+                <l:template name="sect4" text="%t"/>
+                <l:template name="sect5" text="%t"/>
+            </l:context>
+            <l:context name="section-xref-numbered">
+                <l:template name="sect3" text="the section called %t"/>
+                <l:template name="sect4" text="the section called %t"/>
+                <l:template name="sect5" text="the section called %t"/>
+            </l:context>
+        </l:l10n>
+    </l:i18n>
+    
+    <!--###################################################
+                             Titles
+        ################################################### -->
+    
+    <!-- Chapter title size -->
+    <xsl:attribute-set name="chapter.titlepage.recto.style">
+        <xsl:attribute name="text-align">left</xsl:attribute>
+        <xsl:attribute name="font-weight">bold</xsl:attribute>
+        <xsl:attribute name="font-size">
+            <xsl:value-of select="$body.font.master * 1.8"/>
+            <xsl:text>pt</xsl:text>
+        </xsl:attribute>
+    </xsl:attribute-set>
+
+    <!-- Why is the font-size for chapters hardcoded in the XSL FO templates? 
+        Let's remove it, so this sucker can use our attribute-set only... -->
+    <xsl:template match="title" mode="chapter.titlepage.recto.auto.mode">
+        <fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format"
+            xsl:use-attribute-sets="chapter.titlepage.recto.style">
+            <xsl:call-template name="component.title">
+                <xsl:with-param name="node" select="ancestor-or-self::chapter[1]"/>
+            </xsl:call-template>
+        </fo:block>
+    </xsl:template>
+    
+    <!-- Sections 1, 2 and 3 titles have a small bump factor and padding -->
+    <xsl:attribute-set name="section.title.level1.properties">
+        <xsl:attribute name="space-before.optimum">0.8em</xsl:attribute>
+        <xsl:attribute name="space-before.minimum">0.8em</xsl:attribute>
+        <xsl:attribute name="space-before.maximum">0.8em</xsl:attribute>
+        <xsl:attribute name="font-size">
+            <xsl:value-of select="$body.font.master * 1.5"/>
+            <xsl:text>pt</xsl:text>
+        </xsl:attribute>
+        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
+    </xsl:attribute-set>
+    <xsl:attribute-set name="section.title.level2.properties">
+        <xsl:attribute name="space-before.optimum">0.6em</xsl:attribute>
+        <xsl:attribute name="space-before.minimum">0.6em</xsl:attribute>
+        <xsl:attribute name="space-before.maximum">0.6em</xsl:attribute>
+        <xsl:attribute name="font-size">
+            <xsl:value-of select="$body.font.master * 1.25"/>
+            <xsl:text>pt</xsl:text>
+        </xsl:attribute>
+        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
+    </xsl:attribute-set>
+    <xsl:attribute-set name="section.title.level3.properties">
+        <xsl:attribute name="space-before.optimum">0.4em</xsl:attribute>
+        <xsl:attribute name="space-before.minimum">0.4em</xsl:attribute>
+        <xsl:attribute name="space-before.maximum">0.4em</xsl:attribute>
+        <xsl:attribute name="font-size">
+            <xsl:value-of select="$body.font.master * 1.0"/>
+            <xsl:text>pt</xsl:text>
+        </xsl:attribute>
+        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
+    </xsl:attribute-set>
+
+    <!-- Titles of formal objects (tables, examples, ...) -->
+    <xsl:attribute-set name="formal.title.properties" use-attribute-sets="normal.para.spacing">
+        <xsl:attribute name="font-weight">bold</xsl:attribute>
+        <xsl:attribute name="font-size">
+            <xsl:value-of select="$body.font.master"/>
+            <xsl:text>pt</xsl:text>
+        </xsl:attribute>
+        <xsl:attribute name="hyphenate">false</xsl:attribute>
+        <xsl:attribute name="space-after.minimum">0.4em</xsl:attribute>
+        <xsl:attribute name="space-after.optimum">0.6em</xsl:attribute>
+        <xsl:attribute name="space-after.maximum">0.8em</xsl:attribute>
+    </xsl:attribute-set>
+
+    <!--###################################################
+                          Programlistings
+        ################################################### -->
+    
+    <!-- Verbatim text formatting (programlistings) -->
+    <xsl:attribute-set name="verbatim.properties">
+        <xsl:attribute name="space-before.minimum">1em</xsl:attribute>
+        <xsl:attribute name="space-before.optimum">1em</xsl:attribute>
+        <xsl:attribute name="space-before.maximum">1em</xsl:attribute>
+        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
+        <xsl:attribute name="border-color">#444444</xsl:attribute>
+        <xsl:attribute name="border-style">solid</xsl:attribute>
+        <xsl:attribute name="border-width">0.1pt</xsl:attribute>
+        <xsl:attribute name="padding-top">0.5em</xsl:attribute>
+        <xsl:attribute name="padding-left">0.5em</xsl:attribute>
+        <xsl:attribute name="padding-right">0.5em</xsl:attribute>
+        <xsl:attribute name="padding-bottom">0.5em</xsl:attribute>
+        <xsl:attribute name="margin-left">0.5em</xsl:attribute>
+        <xsl:attribute name="margin-right">0.5em</xsl:attribute>
+    </xsl:attribute-set>
+
+    <!-- Shade (background) programlistings -->
+    <xsl:param name="shade.verbatim">1</xsl:param>
+    <xsl:attribute-set name="shade.verbatim.style">
+        <xsl:attribute name="background-color">#F0F0F0</xsl:attribute>
+    </xsl:attribute-set>
+
+    <!--###################################################
+                             Callouts
+        ################################################### -->
+
+    <!-- We want to use callouts... -->
+    <xsl:param name="callout.extensions">1</xsl:param>
+
+    <!-- Place callout bullets at this column in programmlisting.-->
+    <xsl:param name="callout.defaultcolumn">90</xsl:param>
+
+    <!--
+        No, don't use crappy graphics for the callout bullets. This setting
+        enables some weird Unicode rendering for some fancy bullet points
+        in callouts. By default, this can only count to 10 and produces
+        strange results if you ever have more than 10 callouts for one
+        programlisting. We will fix that next.
+    -->
+    <xsl:param name="callout.graphics">0</xsl:param>
+
+    <!--
+        Again, fun with DocBook XSL: The callout bullets are rendered in
+        two places: In the programlisting itself and in the list below
+        the listing, with the actual callout text. The rendering in the
+        programlisting is some XSL transformer extension (e.g. a Saxon
+        extension), so we can't change that without messing with the
+        extensions. We only can turn it off by setting this limit to
+        zero, then, a simple bracket style like "(3)" and "(4)" will
+        be used in the programlisting.
+    -->
+    <xsl:param name="callout.unicode.number.limit" select="'0'"></xsl:param>
+
+    <!--
+        The callout bullets in the actual callout list will be rendered
+        with an XSL FO template. The default template is broken: limited to 10
+        nice looking Unicode bullet points and then it doesn't print anything,
+        the fallback doesn't work. We implement our own template, which is not
+        as complicated, more ugly, but works. As always, function is more
+        important than form.
+    -->
+    <xsl:template name="callout-bug">
+        <xsl:param name="conum" select='1'/>
+        <fo:inline
+            color="black"
+            padding-top="0.1em"
+            padding-bottom="0.1em"
+            padding-start="0.2em"
+            padding-end="0.2em"
+            baseline-shift="0.1em"
+            font-family="{$monospace.font.family}"
+            font-weight="bold"
+            font-size="75%">
+            <xsl:text>(</xsl:text>
+            <xsl:value-of select="$conum"/>
+            <xsl:text>)</xsl:text>
+        </fo:inline>
+
+    </xsl:template>
+
+    <!--###################################################
+                              Misc
+        ################################################### -->
+
+    <!-- Correct placement of titles for figures and examples. -->
+    <xsl:param name="formal.title.placement">
+        figure after
+        example before
+        equation before
+        table before
+        procedure before
+    </xsl:param>
+    
+    <!-- Format Variable Lists as Blocks (prevents horizontal overflow). -->
+    <xsl:param name="variablelist.as.blocks">1</xsl:param>
+
+    <!-- The horrible list spacing problems, this is much better. -->
+    <xsl:attribute-set name="list.block.spacing">
+        <xsl:attribute name="space-before.optimum">0.8em</xsl:attribute>
+        <xsl:attribute name="space-before.minimum">0.8em</xsl:attribute>
+        <xsl:attribute name="space-before.maximum">0.8em</xsl:attribute>
+        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
+    </xsl:attribute-set>
+
+    <!-- Newer DocBook XSL apparently thinks that some sections are by
+         default "draft" status, and this idiotic thing is by default
+         also set to "maybe", so it spits out a lot of errors with the
+         latest FOP as the XSL/FO styles have references to some draft
+         watermarks, which you actually don't want in the first place.
+         Turn this crap off. If you have to work with the "status"
+         attribute, don't.
+    -->
+    <xsl:param name="draft.mode" select="'no'"/>
+
+</xsl:stylesheet>

Deleted: trunk/HibernateExt/search/doc/reference/en/styles/html.css
===================================================================
--- branches/Branch_3_2/HibernateExt/search/doc/reference/en/styles/html.css	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/doc/reference/en/styles/html.css	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,97 +0,0 @@
-A {
-    color: #003399;
-}
-
-A:active {
-    color: #003399;
-}
-
-A:visited {
-    color: #888888;
-}
-
-P, OL, UL, LI, DL, DT, DD, BLOCKQUOTE {
-    color: #000000;
-}
-
-TD, TH, SPAN {
-    color: #000000;
-}
-
-BLOCKQUOTE {
-    margin-right: 0px;
-}
-
-
-H1, H2, H3, H4, H5, H6    {
-    color: #000000;
-    font-weight:500;
-    margin-top:10px;
-    padding-top:15px;
-}
-
-TABLE  {
-    border-collapse: collapse;
-    border-spacing:0;
-    border: 1px thin black;
-    empty-cells: hide;
-}
-
-TD  {
-    padding: 4pt;
-}
-
-H1 { font-size: 150%; }
-H2 { font-size: 140%; }
-H3 { font-size: 110%; font-weight: bold; }
-H4 { font-size: 110%; font-weight: bold;}
-H5 { font-size: 100%; font-style: italic; }
-H6 { font-size: 100%; font-style: italic; }
-
-TT {
-font-size: 90%;
-    font-family: "Courier New", Courier, monospace;
-    color: #000000;
-}
-
-PRE {
-font-size: 100%;
-    padding: 5px;
-    border-style: solid;
-    border-width: 1px;
-    border-color: #CCCCCC;
-    background-color: #F4F4F4;
-}
-
-UL, OL, LI {
-    list-style: disc;
-}
-
-HR  {
-    width: 100%;
-    height: 1px;
-    background-color: #CCCCCC;
-    border-width: 0px;
-    padding: 0px;
-    color: #CCCCCC;
-}
-
-.variablelist { 
-    padding-top: 10; 
-    padding-bottom:10; 
-    margin:0;
-}
-
-.itemizedlist, UL { 
-    padding-top: 0; 
-    padding-bottom:0; 
-    margin:0; 
-}
-
-.term { 
-    font-weight:bold;
-}
-
-
-
-    

Copied: trunk/HibernateExt/search/doc/reference/en/styles/html.css (from rev 11279, branches/Branch_3_2/HibernateExt/search/doc/reference/en/styles/html.css)
===================================================================
--- trunk/HibernateExt/search/doc/reference/en/styles/html.css	                        (rev 0)
+++ trunk/HibernateExt/search/doc/reference/en/styles/html.css	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,97 @@
+A {
+    color: #003399;
+}
+
+A:active {
+    color: #003399;
+}
+
+A:visited {
+    color: #888888;
+}
+
+P, OL, UL, LI, DL, DT, DD, BLOCKQUOTE {
+    color: #000000;
+}
+
+TD, TH, SPAN {
+    color: #000000;
+}
+
+BLOCKQUOTE {
+    margin-right: 0px;
+}
+
+
+H1, H2, H3, H4, H5, H6    {
+    color: #000000;
+    font-weight:500;
+    margin-top:10px;
+    padding-top:15px;
+}
+
+TABLE  {
+    border-collapse: collapse;
+    border-spacing:0;
+    border: 1px thin black;
+    empty-cells: hide;
+}
+
+TD  {
+    padding: 4pt;
+}
+
+H1 { font-size: 150%; }
+H2 { font-size: 140%; }
+H3 { font-size: 110%; font-weight: bold; }
+H4 { font-size: 110%; font-weight: bold;}
+H5 { font-size: 100%; font-style: italic; }
+H6 { font-size: 100%; font-style: italic; }
+
+TT {
+font-size: 90%;
+    font-family: "Courier New", Courier, monospace;
+    color: #000000;
+}
+
+PRE {
+font-size: 100%;
+    padding: 5px;
+    border-style: solid;
+    border-width: 1px;
+    border-color: #CCCCCC;
+    background-color: #F4F4F4;
+}
+
+UL, OL, LI {
+    list-style: disc;
+}
+
+HR  {
+    width: 100%;
+    height: 1px;
+    background-color: #CCCCCC;
+    border-width: 0px;
+    padding: 0px;
+    color: #CCCCCC;
+}
+
+.variablelist { 
+    padding-top: 10; 
+    padding-bottom:10; 
+    margin:0;
+}
+
+.itemizedlist, UL { 
+    padding-top: 0; 
+    padding-bottom:0; 
+    margin:0; 
+}
+
+.term { 
+    font-weight:bold;
+}
+
+
+
+    

Deleted: trunk/HibernateExt/search/doc/reference/en/styles/html.xsl
===================================================================
--- branches/Branch_3_2/HibernateExt/search/doc/reference/en/styles/html.xsl	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/doc/reference/en/styles/html.xsl	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,84 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
-
-    This is the XSL HTML configuration file for the Hibernate
-    Reference Documentation.
-
-    It took me days to figure out this stuff and fix most of
-    the obvious bugs in the DocBook XSL distribution. Some of
-    the workarounds might not be appropriate with a newer version
-    of DocBook XSL. This file is released as part of Hibernate,
-    hence LGPL licensed.
-
-    christian at hibernate.org
--->
-
-<!DOCTYPE xsl:stylesheet [
-    <!ENTITY db_xsl_path        "../../../../../../Hibernate3/doc/reference/support/docbook-xsl/">
-]>
-
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                version="1.0"
-                xmlns="http://www.w3.org/TR/xhtml1/transitional"
-                exclude-result-prefixes="#default">
-                
-<xsl:import href="&db_xsl_path;/html/docbook.xsl"/>
-
-<!--###################################################
-                     HTML Settings
-    ################################################### -->   
-
-    <xsl:param name="html.stylesheet">../shared/css/html.css</xsl:param>
-
-    <!-- These extensions are required for table printing and other stuff -->
-    <xsl:param name="use.extensions">1</xsl:param>
-    <xsl:param name="tablecolumns.extension">0</xsl:param>
-    <xsl:param name="callout.extensions">1</xsl:param>
-    <xsl:param name="graphicsize.extension">0</xsl:param>
-
-<!--###################################################
-                      Table Of Contents
-    ################################################### -->   
-
-    <!-- Generate the TOCs for named components only -->
-    <xsl:param name="generate.toc">
-        book   toc
-    </xsl:param>
-    
-    <!-- Show only Sections up to level 3 in the TOCs -->
-    <xsl:param name="toc.section.depth">3</xsl:param>
-    
-<!--###################################################
-                         Labels
-    ################################################### -->   
-
-    <!-- Label Chapters and Sections (numbering) -->
-    <xsl:param name="chapter.autolabel">1</xsl:param>
-    <xsl:param name="section.autolabel" select="1"/>
-    <xsl:param name="section.label.includes.component.label" select="1"/>
-
-<!--###################################################
-                         Callouts
-    ################################################### -->
-
-    <!-- Don't use graphics, use a simple number style -->
-    <xsl:param name="callout.graphics">0</xsl:param>
-
-    <!-- Place callout marks at this column in annotated areas -->
-    <xsl:param name="callout.defaultcolumn">90</xsl:param>
-
-<!--###################################################
-                          Misc
-    ################################################### -->   
-
-    <!-- Placement of titles -->
-    <xsl:param name="formal.title.placement">
-        figure after
-        example before
-        equation before
-        table before
-        procedure before
-    </xsl:param>    
-    
-</xsl:stylesheet>

Copied: trunk/HibernateExt/search/doc/reference/en/styles/html.xsl (from rev 11279, branches/Branch_3_2/HibernateExt/search/doc/reference/en/styles/html.xsl)
===================================================================
--- trunk/HibernateExt/search/doc/reference/en/styles/html.xsl	                        (rev 0)
+++ trunk/HibernateExt/search/doc/reference/en/styles/html.xsl	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,84 @@
+<?xml version="1.0"?>
+
+<!--
+
+    This is the XSL HTML configuration file for the Hibernate
+    Reference Documentation.
+
+    It took me days to figure out this stuff and fix most of
+    the obvious bugs in the DocBook XSL distribution. Some of
+    the workarounds might not be appropriate with a newer version
+    of DocBook XSL. This file is released as part of Hibernate,
+    hence LGPL licensed.
+
+    christian at hibernate.org
+-->
+
+<!DOCTYPE xsl:stylesheet [
+    <!ENTITY db_xsl_path        "../../../../../../Hibernate3/doc/reference/support/docbook-xsl/">
+]>
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+                version="1.0"
+                xmlns="http://www.w3.org/TR/xhtml1/transitional"
+                exclude-result-prefixes="#default">
+                
+<xsl:import href="&db_xsl_path;/html/docbook.xsl"/>
+
+<!--###################################################
+                     HTML Settings
+    ################################################### -->   
+
+    <xsl:param name="html.stylesheet">../shared/css/html.css</xsl:param>
+
+    <!-- These extensions are required for table printing and other stuff -->
+    <xsl:param name="use.extensions">1</xsl:param>
+    <xsl:param name="tablecolumns.extension">0</xsl:param>
+    <xsl:param name="callout.extensions">1</xsl:param>
+    <xsl:param name="graphicsize.extension">0</xsl:param>
+
+<!--###################################################
+                      Table Of Contents
+    ################################################### -->   
+
+    <!-- Generate the TOCs for named components only -->
+    <xsl:param name="generate.toc">
+        book   toc
+    </xsl:param>
+    
+    <!-- Show only Sections up to level 3 in the TOCs -->
+    <xsl:param name="toc.section.depth">3</xsl:param>
+    
+<!--###################################################
+                         Labels
+    ################################################### -->   
+
+    <!-- Label Chapters and Sections (numbering) -->
+    <xsl:param name="chapter.autolabel">1</xsl:param>
+    <xsl:param name="section.autolabel" select="1"/>
+    <xsl:param name="section.label.includes.component.label" select="1"/>
+
+<!--###################################################
+                         Callouts
+    ################################################### -->
+
+    <!-- Don't use graphics, use a simple number style -->
+    <xsl:param name="callout.graphics">0</xsl:param>
+
+    <!-- Place callout marks at this column in annotated areas -->
+    <xsl:param name="callout.defaultcolumn">90</xsl:param>
+
+<!--###################################################
+                          Misc
+    ################################################### -->   
+
+    <!-- Placement of titles -->
+    <xsl:param name="formal.title.placement">
+        figure after
+        example before
+        equation before
+        table before
+        procedure before
+    </xsl:param>    
+    
+</xsl:stylesheet>

Deleted: trunk/HibernateExt/search/doc/reference/en/styles/html_chunk.xsl
===================================================================
--- branches/Branch_3_2/HibernateExt/search/doc/reference/en/styles/html_chunk.xsl	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/doc/reference/en/styles/html_chunk.xsl	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,86 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
-
-    This is the XSL HTML configuration file for the Hibernate
-    Reference Documentation.
-
-    It took me days to figure out this stuff and fix most of
-    the obvious bugs in the DocBook XSL distribution. Some of
-    the workarounds might not be appropriate with a newer version
-    of DocBook XSL. This file is released as part of Hibernate,
-    hence LGPL licensed.
-
-    christian at hibernate.org
--->
-
-<!DOCTYPE xsl:stylesheet [
-    <!ENTITY db_xsl_path        "../../../../../../Hibernate3/doc/reference/support/docbook-xsl/">
-]>
-
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                version="1.0"
-                xmlns="http://www.w3.org/TR/xhtml1/transitional"
-                exclude-result-prefixes="#default">
-                
-<xsl:import href="&db_xsl_path;/html/chunk.xsl"/>
-
-<!--###################################################
-                     HTML Settings
-    ################################################### -->   
-
-    <xsl:param name="chunk.section.depth">'5'</xsl:param>
-    <xsl:param name="use.id.as.filename">'1'</xsl:param>
-    <xsl:param name="html.stylesheet">../shared/css/html.css</xsl:param>
-
-    <!-- These extensions are required for table printing and other stuff -->
-    <xsl:param name="use.extensions">1</xsl:param>
-    <xsl:param name="tablecolumns.extension">0</xsl:param>
-    <xsl:param name="callout.extensions">1</xsl:param>
-    <xsl:param name="graphicsize.extension">0</xsl:param>
-    
-<!--###################################################
-                      Table Of Contents
-    ################################################### -->   
-
-    <!-- Generate the TOCs for named components only -->
-    <xsl:param name="generate.toc">
-        book   toc
-    </xsl:param>
-    
-    <!-- Show only Sections up to level 3 in the TOCs -->
-    <xsl:param name="toc.section.depth">3</xsl:param>
-
-<!--###################################################
-                         Labels
-    ################################################### -->   
-
-    <!-- Label Chapters and Sections (numbering) -->
-    <xsl:param name="chapter.autolabel">1</xsl:param>
-    <xsl:param name="section.autolabel" select="1"/>
-    <xsl:param name="section.label.includes.component.label" select="1"/>
-                
-<!--###################################################
-                         Callouts
-    ################################################### -->   
-
-    <!-- Don't use graphics, use a simple number style -->
-    <xsl:param name="callout.graphics">0</xsl:param>
-
-    <!-- Place callout marks at this column in annotated areas -->
-    <xsl:param name="callout.defaultcolumn">90</xsl:param>
-
-<!--###################################################
-                          Misc
-    ################################################### -->   
-
-    <!-- Placement of titles -->
-    <xsl:param name="formal.title.placement">
-        figure after
-        example before
-        equation before
-        table before
-        procedure before
-    </xsl:param>    
-    
-</xsl:stylesheet>

Copied: trunk/HibernateExt/search/doc/reference/en/styles/html_chunk.xsl (from rev 11279, branches/Branch_3_2/HibernateExt/search/doc/reference/en/styles/html_chunk.xsl)
===================================================================
--- trunk/HibernateExt/search/doc/reference/en/styles/html_chunk.xsl	                        (rev 0)
+++ trunk/HibernateExt/search/doc/reference/en/styles/html_chunk.xsl	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,86 @@
+<?xml version="1.0"?>
+
+<!--
+
+    This is the XSL HTML configuration file for the Hibernate
+    Reference Documentation.
+
+    It took me days to figure out this stuff and fix most of
+    the obvious bugs in the DocBook XSL distribution. Some of
+    the workarounds might not be appropriate with a newer version
+    of DocBook XSL. This file is released as part of Hibernate,
+    hence LGPL licensed.
+
+    christian at hibernate.org
+-->
+
+<!DOCTYPE xsl:stylesheet [
+    <!ENTITY db_xsl_path        "../../../../../../Hibernate3/doc/reference/support/docbook-xsl/">
+]>
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+                version="1.0"
+                xmlns="http://www.w3.org/TR/xhtml1/transitional"
+                exclude-result-prefixes="#default">
+                
+<xsl:import href="&db_xsl_path;/html/chunk.xsl"/>
+
+<!--###################################################
+                     HTML Settings
+    ################################################### -->   
+
+    <xsl:param name="chunk.section.depth">'5'</xsl:param>
+    <xsl:param name="use.id.as.filename">'1'</xsl:param>
+    <xsl:param name="html.stylesheet">../shared/css/html.css</xsl:param>
+
+    <!-- These extensions are required for table printing and other stuff -->
+    <xsl:param name="use.extensions">1</xsl:param>
+    <xsl:param name="tablecolumns.extension">0</xsl:param>
+    <xsl:param name="callout.extensions">1</xsl:param>
+    <xsl:param name="graphicsize.extension">0</xsl:param>
+    
+<!--###################################################
+                      Table Of Contents
+    ################################################### -->   
+
+    <!-- Generate the TOCs for named components only -->
+    <xsl:param name="generate.toc">
+        book   toc
+    </xsl:param>
+    
+    <!-- Show only Sections up to level 3 in the TOCs -->
+    <xsl:param name="toc.section.depth">3</xsl:param>
+
+<!--###################################################
+                         Labels
+    ################################################### -->   
+
+    <!-- Label Chapters and Sections (numbering) -->
+    <xsl:param name="chapter.autolabel">1</xsl:param>
+    <xsl:param name="section.autolabel" select="1"/>
+    <xsl:param name="section.label.includes.component.label" select="1"/>
+                
+<!--###################################################
+                         Callouts
+    ################################################### -->   
+
+    <!-- Don't use graphics, use a simple number style -->
+    <xsl:param name="callout.graphics">0</xsl:param>
+
+    <!-- Place callout marks at this column in annotated areas -->
+    <xsl:param name="callout.defaultcolumn">90</xsl:param>
+
+<!--###################################################
+                          Misc
+    ################################################### -->   
+
+    <!-- Placement of titles -->
+    <xsl:param name="formal.title.placement">
+        figure after
+        example before
+        equation before
+        table before
+        procedure before
+    </xsl:param>    
+    
+</xsl:stylesheet>

Copied: trunk/HibernateExt/search/jdbc (from rev 11279, branches/Branch_3_2/HibernateExt/search/jdbc)

Deleted: trunk/HibernateExt/search/jdbc/hsqldb.jar
===================================================================
(Binary files differ)

Copied: trunk/HibernateExt/search/jdbc/hsqldb.jar (from rev 11279, branches/Branch_3_2/HibernateExt/search/jdbc/hsqldb.jar)
===================================================================
(Binary files differ)

Deleted: trunk/HibernateExt/search/lgpl.txt
===================================================================
--- branches/Branch_3_2/HibernateExt/search/lgpl.txt	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/lgpl.txt	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,504 +0,0 @@
-		  GNU LESSER GENERAL PUBLIC LICENSE
-		       Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
-     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL.  It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
-			    Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
-  This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it.  You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
-  When we speak of free software, we are referring to freedom of use,
-not price.  Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
-  To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights.  These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
-  For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you.  You must make sure that they, too, receive or can get the source
-code.  If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it.  And you must show them these terms so they know their rights.
-
-  We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
-  To protect each distributor, we want to make it very clear that
-there is no warranty for the free library.  Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-
-  Finally, software patents pose a constant threat to the existence of
-any free program.  We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder.  Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
-  Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License.  This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License.  We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
-  When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library.  The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom.  The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
-  We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License.  It also provides other free software developers Less
-of an advantage over competing non-free programs.  These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries.  However, the Lesser license provides advantages in certain
-special circumstances.
-
-  For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard.  To achieve this, non-free programs must be
-allowed to use the library.  A more frequent case is that a free
-library does the same job as widely used non-free libraries.  In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
-  In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software.  For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
-  Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.  Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library".  The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-
-		  GNU LESSER GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
-  A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
-  The "Library", below, refers to any such software library or work
-which has been distributed under these terms.  A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language.  (Hereinafter, translation is
-included without limitation in the term "modification".)
-
-  "Source code" for a work means the preferred form of the work for
-making modifications to it.  For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
-  Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it).  Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-  
-  1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
-  You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
-  2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) The modified work must itself be a software library.
-
-    b) You must cause the files modified to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    c) You must cause the whole of the work to be licensed at no
-    charge to all third parties under the terms of this License.
-
-    d) If a facility in the modified Library refers to a function or a
-    table of data to be supplied by an application program that uses
-    the facility, other than as an argument passed when the facility
-    is invoked, then you must make a good faith effort to ensure that,
-    in the event an application does not supply such function or
-    table, the facility still operates, and performs whatever part of
-    its purpose remains meaningful.
-
-    (For example, a function in a library to compute square roots has
-    a purpose that is entirely well-defined independent of the
-    application.  Therefore, Subsection 2d requires that any
-    application-supplied function or table used by this function must
-    be optional: if the application does not supply it, the square
-    root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library.  To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License.  (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.)  Do not make any other change in
-these notices.
-
-  Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
-  This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
-  4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
-  If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library".  Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
-  However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library".  The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
-  When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library.  The
-threshold for this to be true is not precisely defined by law.
-
-  If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work.  (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
-  Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
-  6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
-  You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License.  You must supply a copy of this License.  If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License.  Also, you must do one
-of these things:
-
-    a) Accompany the work with the complete corresponding
-    machine-readable source code for the Library including whatever
-    changes were used in the work (which must be distributed under
-    Sections 1 and 2 above); and, if the work is an executable linked
-    with the Library, with the complete machine-readable "work that
-    uses the Library", as object code and/or source code, so that the
-    user can modify the Library and then relink to produce a modified
-    executable containing the modified Library.  (It is understood
-    that the user who changes the contents of definitions files in the
-    Library will not necessarily be able to recompile the application
-    to use the modified definitions.)
-
-    b) Use a suitable shared library mechanism for linking with the
-    Library.  A suitable mechanism is one that (1) uses at run time a
-    copy of the library already present on the user's computer system,
-    rather than copying library functions into the executable, and (2)
-    will operate properly with a modified version of the library, if
-    the user installs one, as long as the modified version is
-    interface-compatible with the version that the work was made with.
-
-    c) Accompany the work with a written offer, valid for at
-    least three years, to give the same user the materials
-    specified in Subsection 6a, above, for a charge no more
-    than the cost of performing this distribution.
-
-    d) If distribution of the work is made by offering access to copy
-    from a designated place, offer equivalent access to copy the above
-    specified materials from the same place.
-
-    e) Verify that the user has already received a copy of these
-    materials or that you have already sent this user a copy.
-
-  For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it.  However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
-  It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system.  Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
-  7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
-    a) Accompany the combined library with a copy of the same work
-    based on the Library, uncombined with any other library
-    facilities.  This must be distributed under the terms of the
-    Sections above.
-
-    b) Give prominent notice with the combined library of the fact
-    that part of it is a work based on the Library, and explaining
-    where to find the accompanying uncombined form of the same work.
-
-  8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License.  Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License.  However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
-  9. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Library or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
-  10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-
-  11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded.  In such case, this License incorporates the limitation as if
-written in the body of this License.
-
-  13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation.  If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
-  14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission.  For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this.  Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
-			    NO WARRANTY
-
-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
-		     END OF TERMS AND CONDITIONS
-		     
-           How to Apply These Terms to Your New Libraries
-
-  If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change.  You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
-  To apply these terms, attach the following notices to the library.  It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the library's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the
-  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
-  <signature of Ty Coon>, 1 April 1990
-  Ty Coon, President of Vice
-
-That's all there is to it!
-
-

Copied: trunk/HibernateExt/search/lgpl.txt (from rev 11279, branches/Branch_3_2/HibernateExt/search/lgpl.txt)
===================================================================
--- trunk/HibernateExt/search/lgpl.txt	                        (rev 0)
+++ trunk/HibernateExt/search/lgpl.txt	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,504 @@
+		  GNU LESSER GENERAL PUBLIC LICENSE
+		       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+		  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+  
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+			    NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+		     
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+

Copied: trunk/HibernateExt/search/lib (from rev 11279, branches/Branch_3_2/HibernateExt/search/lib)

Deleted: trunk/HibernateExt/search/lib/README.txt
===================================================================
--- branches/Branch_3_2/HibernateExt/search/lib/README.txt	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/lib/README.txt	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,15 +0,0 @@
-Hibernate Search dependencies
-=============================
-
-Core
-====
-hibernate-commons-annotations.jar: required
-hibernate3.jar: required
-hibernate core dependencies: required (see Hibernate Core for more information)
-lucene-core-*.jar: required
-jms.jar: optional (needed for JMS based clustering strategy)
-
-Test
-====
-hibernate-annotations.jar: required
-hibernate-entitymanager.jar: required
\ No newline at end of file

Copied: trunk/HibernateExt/search/lib/README.txt (from rev 11279, branches/Branch_3_2/HibernateExt/search/lib/README.txt)
===================================================================
--- trunk/HibernateExt/search/lib/README.txt	                        (rev 0)
+++ trunk/HibernateExt/search/lib/README.txt	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,15 @@
+Hibernate Search dependencies
+=============================
+
+Core
+====
+hibernate-commons-annotations.jar: required
+hibernate3.jar: required
+hibernate core dependencies: required (see Hibernate Core for more information)
+lucene-core-*.jar: required
+jms.jar: optional (needed for JMS based clustering strategy)
+
+Test
+====
+hibernate-annotations.jar: required
+hibernate-entitymanager.jar: required
\ No newline at end of file

Deleted: trunk/HibernateExt/search/lib/jms.jar
===================================================================
(Binary files differ)

Copied: trunk/HibernateExt/search/lib/jms.jar (from rev 11279, branches/Branch_3_2/HibernateExt/search/lib/jms.jar)
===================================================================
(Binary files differ)

Deleted: trunk/HibernateExt/search/lib/lucene-core-2.1.0.jar
===================================================================
(Binary files differ)

Copied: trunk/HibernateExt/search/lib/lucene-core-2.1.0.jar (from rev 11279, branches/Branch_3_2/HibernateExt/search/lib/lucene-core-2.1.0.jar)
===================================================================
(Binary files differ)

Deleted: trunk/HibernateExt/search/readme.txt
===================================================================
--- branches/Branch_3_2/HibernateExt/search/readme.txt	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/readme.txt	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,47 +0,0 @@
-Hibernate Search
-==================================================
-Version: 3.2.2.beta, xx.02.2007
-
-Description
------------
-
-Full text search engines like Apache Lucene(tm) are a very powerful technology to
-bring free text/efficient queries to applications. If suffers several mismatches
-when dealing with a object domain model (keeping the index up to date, mismatch
-between the index structure and the domain model, ...)
-Hibernate Search indexes your domain model thanks to a few annotations, takes
-care of the index synchronization, brings you back managed objects from free text
-queries.
-Hibernate Search is using Apache Lucene(tm) under the cover.
-
-
-Instructions
-------------
-
-Unzip to installation directory, read doc/reference
-
-
-Contact
-------------
-
-Latest Documentation:
-
-   http://hibernate.org
-
-Bug Reports:
-
-   Hibernate JIRA (preferred)
-   hibernate-devel at lists.sourceforge.net
-
-Free Technical Support:
-
-   http://forum.hibernate.org (http://forum.hibernate.org/viewforum.php?f=9)
-
-
-Notes
------------
-
-If you want to contribute, go to http://www.hibernate.org/
-
-This software and its documentation are distributed under the terms of the
-FSF Lesser Gnu Public License (see lgpl.txt).
\ No newline at end of file

Copied: trunk/HibernateExt/search/readme.txt (from rev 11279, branches/Branch_3_2/HibernateExt/search/readme.txt)
===================================================================
--- trunk/HibernateExt/search/readme.txt	                        (rev 0)
+++ trunk/HibernateExt/search/readme.txt	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,47 @@
+Hibernate Search
+==================================================
+Version: 3.2.2.beta, xx.02.2007
+
+Description
+-----------
+
+Full text search engines like Apache Lucene(tm) are a very powerful technology to
+bring free text/efficient queries to applications. If suffers several mismatches
+when dealing with a object domain model (keeping the index up to date, mismatch
+between the index structure and the domain model, ...)
+Hibernate Search indexes your domain model thanks to a few annotations, takes
+care of the index synchronization, brings you back managed objects from free text
+queries.
+Hibernate Search is using Apache Lucene(tm) under the cover.
+
+
+Instructions
+------------
+
+Unzip to installation directory, read doc/reference
+
+
+Contact
+------------
+
+Latest Documentation:
+
+   http://hibernate.org
+
+Bug Reports:
+
+   Hibernate JIRA (preferred)
+   hibernate-devel at lists.sourceforge.net
+
+Free Technical Support:
+
+   http://forum.hibernate.org (http://forum.hibernate.org/viewforum.php?f=9)
+
+
+Notes
+-----------
+
+If you want to contribute, go to http://www.hibernate.org/
+
+This software and its documentation are distributed under the terms of the
+FSF Lesser Gnu Public License (see lgpl.txt).
\ No newline at end of file

Copied: trunk/HibernateExt/search/src (from rev 11279, branches/Branch_3_2/HibernateExt/search/src)

Copied: trunk/HibernateExt/search/src/java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java)

Copied: trunk/HibernateExt/search/src/java/org (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org)

Copied: trunk/HibernateExt/search/src/java/org/hibernate (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate)

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search)

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/Environment.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/Environment.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/Environment.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,38 +0,0 @@
-//$Id: Environment.java 10742 2006-11-07 01:03:16Z epbernard $
-package org.hibernate.search;
-
-/**
- * @author Emmanuel Bernard
- */
-public final class Environment {
-	/**
-	 * Enable listeners auto registration in Hibernate Annotations and EntityManager. Default to true.
-	 */
-	public static final String AUTOREGISTER_LISTENERS = "hibernate.search.autoregister_listeners";
-	/**
-	 * Indexes base directory
-	 */
-	public static final String INDEX_BASE_DIR = "hibernate.search.index_dir";
-
-	/**
-	 * Lucene analyser
-	 */
-	public static final String ANALYZER_CLASS = "hibernate.search.analyzer";
-
-	public static final String WORKER_PREFIX = "hibernate.search.worker.";
-	public static final String WORKER_SCOPE = WORKER_PREFIX + "scope";
-	public static final String WORKER_BACKEND = WORKER_PREFIX + "backend";
-	public static final String WORKER_EXECUTION = WORKER_PREFIX + "execution";
-	/**
-	 * only used then execution is async
-	 * Thread pool size
-	 * default 1
-	 */
-	public static final String WORKER_THREADPOOL_SIZE = Environment.WORKER_PREFIX + "thread_pool.size";
-	/**
-	 * only used then execution is async
-	 * Size of the buffer queue (besides the thread pool size)
-	 * default infinite
-	 */
-	public static final String WORKER_WORKQUEUE_SIZE = Environment.WORKER_PREFIX + "buffer_queue.max";
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/Environment.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/Environment.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/Environment.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/Environment.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,38 @@
+//$Id: Environment.java 10742 2006-11-07 01:03:16Z epbernard $
+package org.hibernate.search;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public final class Environment {
+	/**
+	 * Enable listeners auto registration in Hibernate Annotations and EntityManager. Default to true.
+	 */
+	public static final String AUTOREGISTER_LISTENERS = "hibernate.search.autoregister_listeners";
+	/**
+	 * Indexes base directory
+	 */
+	public static final String INDEX_BASE_DIR = "hibernate.search.index_dir";
+
+	/**
+	 * Lucene analyser
+	 */
+	public static final String ANALYZER_CLASS = "hibernate.search.analyzer";
+
+	public static final String WORKER_PREFIX = "hibernate.search.worker.";
+	public static final String WORKER_SCOPE = WORKER_PREFIX + "scope";
+	public static final String WORKER_BACKEND = WORKER_PREFIX + "backend";
+	public static final String WORKER_EXECUTION = WORKER_PREFIX + "execution";
+	/**
+	 * only used then execution is async
+	 * Thread pool size
+	 * default 1
+	 */
+	public static final String WORKER_THREADPOOL_SIZE = Environment.WORKER_PREFIX + "thread_pool.size";
+	/**
+	 * only used then execution is async
+	 * Size of the buffer queue (besides the thread pool size)
+	 * default infinite
+	 */
+	public static final String WORKER_WORKQUEUE_SIZE = Environment.WORKER_PREFIX + "buffer_queue.max";
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/FullTextSession.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/FullTextSession.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/FullTextSession.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,25 +0,0 @@
-//$Id: $
-package org.hibernate.search;
-
-import org.hibernate.classic.Session;
-import org.hibernate.Query;
-
-/**
- * Extends the Hibernate {@link Session} with Full text search and indexing capabilities
- *
- * @author Emmanuel Bernard
- */
-public interface FullTextSession extends Session {
-	/**
-	 * Create a Query on top of a native Lucene Query returning the matching objects
-	 * of type <code>entities</code> and their respective subclasses.
-	 * If no entity is provided, no type filtering is done.
-	 */
-	Query createFullTextQuery(org.apache.lucene.search.Query luceneQuery, Class... entities);
-
-	/**
-	 * Force the (re)indexing of a given <b>managed</b> object.
-	 * Indexation is batched per transaction
-	 */
-	void index(Object entity);
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/FullTextSession.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/FullTextSession.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/FullTextSession.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/FullTextSession.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,25 @@
+//$Id: $
+package org.hibernate.search;
+
+import org.hibernate.classic.Session;
+import org.hibernate.Query;
+
+/**
+ * Extends the Hibernate {@link Session} with Full text search and indexing capabilities
+ *
+ * @author Emmanuel Bernard
+ */
+public interface FullTextSession extends Session {
+	/**
+	 * Create a Query on top of a native Lucene Query returning the matching objects
+	 * of type <code>entities</code> and their respective subclasses.
+	 * If no entity is provided, no type filtering is done.
+	 */
+	Query createFullTextQuery(org.apache.lucene.search.Query luceneQuery, Class... entities);
+
+	/**
+	 * Force the (re)indexing of a given <b>managed</b> object.
+	 * Indexation is batched per transaction
+	 */
+	void index(Object entity);
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/Search.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/Search.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/Search.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,19 +0,0 @@
-//$Id: $
-package org.hibernate.search;
-
-import org.hibernate.Session;
-import org.hibernate.search.impl.FullTextSessionImpl;
-
-/**
- * Helper class to get a FullTextSession out of a regular session
- * @author Emmanuel Bernard
- */
-public final class Search {
-
-	private Search() {
-	}
-
-	public static FullTextSession createFullTextSession(Session session) {
-		return new FullTextSessionImpl(session);
-	}
-}
\ No newline at end of file

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/Search.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/Search.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/Search.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/Search.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,19 @@
+//$Id: $
+package org.hibernate.search;
+
+import org.hibernate.Session;
+import org.hibernate.search.impl.FullTextSessionImpl;
+
+/**
+ * Helper class to get a FullTextSession out of a regular session
+ * @author Emmanuel Bernard
+ */
+public final class Search {
+
+	private Search() {
+	}
+
+	public static FullTextSession createFullTextSession(Session session) {
+		return new FullTextSessionImpl(session);
+	}
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/SearchException.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/SearchException.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/SearchException.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,26 +0,0 @@
-//$Id: $
-package org.hibernate.search;
-
-/**
- * Root of all search specific exceptions
- *
- * @author Emmanuel Bernard
- */
-public class SearchException extends RuntimeException {
-
-	public SearchException() {
-		super();
-	}
-
-	public SearchException(String message) {
-		super( message );
-	}
-
-	public SearchException(String message, Throwable cause) {
-		super( message, cause );
-	}
-
-	public SearchException(Throwable cause) {
-		super( cause );
-	}
-}
\ No newline at end of file

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/SearchException.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/SearchException.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/SearchException.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/SearchException.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,26 @@
+//$Id: $
+package org.hibernate.search;
+
+/**
+ * Root of all search specific exceptions
+ *
+ * @author Emmanuel Bernard
+ */
+public class SearchException extends RuntimeException {
+
+	public SearchException() {
+		super();
+	}
+
+	public SearchException(String message) {
+		super( message );
+	}
+
+	public SearchException(String message, Throwable cause) {
+		super( message, cause );
+	}
+
+	public SearchException(Throwable cause) {
+		super( cause );
+	}
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/SearchFactory.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/SearchFactory.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/SearchFactory.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,167 +0,0 @@
-//$Id: $
-package org.hibernate.search;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-import java.util.WeakHashMap;
-import java.util.concurrent.locks.ReentrantLock;
-
-import org.apache.lucene.analysis.Analyzer;
-import org.apache.lucene.analysis.standard.StandardAnalyzer;
-import org.hibernate.annotations.common.reflection.ReflectionManager;
-import org.hibernate.annotations.common.reflection.XClass;
-import org.hibernate.annotations.common.reflection.java.JavaReflectionManager;
-import org.hibernate.cfg.Configuration;
-import org.hibernate.mapping.PersistentClass;
-import org.hibernate.search.annotations.Indexed;
-import org.hibernate.search.backend.Worker;
-import org.hibernate.search.backend.WorkerFactory;
-import org.hibernate.search.backend.BackendQueueProcessorFactory;
-import org.hibernate.search.engine.DocumentBuilder;
-import org.hibernate.search.store.DirectoryProvider;
-import org.hibernate.search.store.DirectoryProviderFactory;
-import org.hibernate.util.ReflectHelper;
-
-/**
- * @author Emmanuel Bernard
- */
-public class SearchFactory {
-	private static ThreadLocal<WeakHashMap<Configuration, SearchFactory>> contexts =
-			new ThreadLocal<WeakHashMap<Configuration, SearchFactory>>();
-	static {
-		Version.touch();
-	}
-	private Map<Class, DocumentBuilder<Object>> documentBuilders = new HashMap<Class, DocumentBuilder<Object>>();
-	//keep track of the index modifiers per DirectoryProvider since multiple entity can use the same directory provider
-	private Map<DirectoryProvider, ReentrantLock> lockableDirectoryProviders =
-			new HashMap<DirectoryProvider, ReentrantLock>();
-	private Worker worker;
-	private BackendQueueProcessorFactory backendQueueProcessorFactory;
-
-
-	public BackendQueueProcessorFactory getBackendQueueProcessorFactory() {
-		return backendQueueProcessorFactory;
-	}
-
-	public void setBackendQueueProcessorFactory(BackendQueueProcessorFactory backendQueueProcessorFactory) {
-		this.backendQueueProcessorFactory = backendQueueProcessorFactory;
-	}
-
-	public SearchFactory(Configuration cfg) {
-		//yuk
-		ReflectionManager reflectionManager = getReflectionManager( cfg );
-
-		Class analyzerClass;
-		String analyzerClassName = cfg.getProperty( Environment.ANALYZER_CLASS );
-		if ( analyzerClassName != null ) {
-			try {
-				analyzerClass = ReflectHelper.classForName( analyzerClassName );
-			}
-			catch (Exception e) {
-				throw new SearchException(
-						"Lucene analyzer class '" + analyzerClassName + "' defined in property '" + Environment.ANALYZER_CLASS + "' could not be found.",
-						e
-				);
-			}
-		}
-		else {
-			analyzerClass = StandardAnalyzer.class;
-		}
-		// Initialize analyzer
-		Analyzer analyzer;
-		try {
-			analyzer = (Analyzer) analyzerClass.newInstance();
-		}
-		catch (ClassCastException e) {
-			throw new SearchException(
-					"Lucene analyzer does not implement " + Analyzer.class.getName() + ": " + analyzerClassName
-			);
-		}
-		catch (Exception e) {
-			throw new SearchException( "Failed to instantiate lucene analyzer with type " + analyzerClassName );
-		}
-
-		Iterator iter = cfg.getClassMappings();
-		DirectoryProviderFactory factory = new DirectoryProviderFactory();
-		while ( iter.hasNext() ) {
-			PersistentClass clazz = (PersistentClass) iter.next();
-			Class<?> mappedClass = clazz.getMappedClass();
-			if ( mappedClass != null ) {
-				XClass mappedXClass = reflectionManager.toXClass( mappedClass );
-				if ( mappedXClass != null && mappedXClass.isAnnotationPresent( Indexed.class ) ) {
-					DirectoryProvider provider = factory.createDirectoryProvider( mappedXClass, cfg, this );
-					if ( !lockableDirectoryProviders.containsKey( provider ) ) {
-						lockableDirectoryProviders.put( provider, new ReentrantLock() );
-					}
-					final DocumentBuilder<Object> documentBuilder = new DocumentBuilder<Object>(
-							mappedXClass, analyzer, provider, reflectionManager
-					);
-
-					documentBuilders.put( mappedClass, documentBuilder );
-				}
-			}
-		}
-		Set<Class> indexedClasses = documentBuilders.keySet();
-		for ( DocumentBuilder builder : documentBuilders.values() ) {
-			builder.postInitialize( indexedClasses );
-		}
-		WorkerFactory workerFactory = new WorkerFactory();
-		workerFactory.configure( cfg, this );
-		worker = workerFactory.createWorker();
-
-	}
-
-	//code doesn't have to be multithreaded because SF creation is not.
-	//this is not a public API, should really only be used during the SessionFActory building
-	public static SearchFactory getSearchFactory(Configuration cfg) {
-		WeakHashMap<Configuration, SearchFactory> contextMap = contexts.get();
-		if (contextMap == null) {
-			contextMap = new WeakHashMap<Configuration, SearchFactory>( 2 );
-			contexts.set( contextMap );
-		}
-		SearchFactory searchFactory = contextMap.get( cfg );
-		if ( searchFactory == null) {
-			searchFactory = new SearchFactory(cfg);
-
-			contextMap.put( cfg, searchFactory );
-		}
-		return searchFactory;
-	}
-
-
-	public Map<Class, DocumentBuilder<Object>> getDocumentBuilders() {
-		return documentBuilders;
-	}
-
-	public Map<DirectoryProvider, ReentrantLock> getLockableDirectoryProviders() {
-		return lockableDirectoryProviders;
-	}
-
-	public Worker getWorker() {
-		return worker;
-	}
-
-	//not happy about having it as a helper class but I don't want cfg to be associated with the SearchFactory
-	public static ReflectionManager getReflectionManager(Configuration cfg) {
-		ReflectionManager reflectionManager;
-		try {
-			//TODO introduce a ReflectionManagerHolder interface to avoid reflection
-			//I want to avoid hard link between HAN and Validator for usch a simple need
-			//reuse the existing reflectionManager one when possible
-			reflectionManager =
-					(ReflectionManager) cfg.getClass().getMethod( "getReflectionManager" ).invoke( cfg );
-
-		}
-		catch (Exception e) {
-			reflectionManager = new JavaReflectionManager();
-		}
-		return reflectionManager;
-	}
-
-	public DirectoryProvider getDirectoryProvider(Class entity) {
-		DocumentBuilder<Object> documentBuilder = getDocumentBuilders().get( entity );
-		return documentBuilder == null ? null : documentBuilder.getDirectoryProvider();
-	}
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/SearchFactory.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/SearchFactory.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/SearchFactory.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/SearchFactory.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,167 @@
+//$Id: $
+package org.hibernate.search;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+import java.util.WeakHashMap;
+import java.util.concurrent.locks.ReentrantLock;
+
+import org.apache.lucene.analysis.Analyzer;
+import org.apache.lucene.analysis.standard.StandardAnalyzer;
+import org.hibernate.annotations.common.reflection.ReflectionManager;
+import org.hibernate.annotations.common.reflection.XClass;
+import org.hibernate.annotations.common.reflection.java.JavaReflectionManager;
+import org.hibernate.cfg.Configuration;
+import org.hibernate.mapping.PersistentClass;
+import org.hibernate.search.annotations.Indexed;
+import org.hibernate.search.backend.Worker;
+import org.hibernate.search.backend.WorkerFactory;
+import org.hibernate.search.backend.BackendQueueProcessorFactory;
+import org.hibernate.search.engine.DocumentBuilder;
+import org.hibernate.search.store.DirectoryProvider;
+import org.hibernate.search.store.DirectoryProviderFactory;
+import org.hibernate.util.ReflectHelper;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class SearchFactory {
+	private static ThreadLocal<WeakHashMap<Configuration, SearchFactory>> contexts =
+			new ThreadLocal<WeakHashMap<Configuration, SearchFactory>>();
+	static {
+		Version.touch();
+	}
+	private Map<Class, DocumentBuilder<Object>> documentBuilders = new HashMap<Class, DocumentBuilder<Object>>();
+	//keep track of the index modifiers per DirectoryProvider since multiple entity can use the same directory provider
+	private Map<DirectoryProvider, ReentrantLock> lockableDirectoryProviders =
+			new HashMap<DirectoryProvider, ReentrantLock>();
+	private Worker worker;
+	private BackendQueueProcessorFactory backendQueueProcessorFactory;
+
+
+	public BackendQueueProcessorFactory getBackendQueueProcessorFactory() {
+		return backendQueueProcessorFactory;
+	}
+
+	public void setBackendQueueProcessorFactory(BackendQueueProcessorFactory backendQueueProcessorFactory) {
+		this.backendQueueProcessorFactory = backendQueueProcessorFactory;
+	}
+
+	public SearchFactory(Configuration cfg) {
+		//yuk
+		ReflectionManager reflectionManager = getReflectionManager( cfg );
+
+		Class analyzerClass;
+		String analyzerClassName = cfg.getProperty( Environment.ANALYZER_CLASS );
+		if ( analyzerClassName != null ) {
+			try {
+				analyzerClass = ReflectHelper.classForName( analyzerClassName );
+			}
+			catch (Exception e) {
+				throw new SearchException(
+						"Lucene analyzer class '" + analyzerClassName + "' defined in property '" + Environment.ANALYZER_CLASS + "' could not be found.",
+						e
+				);
+			}
+		}
+		else {
+			analyzerClass = StandardAnalyzer.class;
+		}
+		// Initialize analyzer
+		Analyzer analyzer;
+		try {
+			analyzer = (Analyzer) analyzerClass.newInstance();
+		}
+		catch (ClassCastException e) {
+			throw new SearchException(
+					"Lucene analyzer does not implement " + Analyzer.class.getName() + ": " + analyzerClassName
+			);
+		}
+		catch (Exception e) {
+			throw new SearchException( "Failed to instantiate lucene analyzer with type " + analyzerClassName );
+		}
+
+		Iterator iter = cfg.getClassMappings();
+		DirectoryProviderFactory factory = new DirectoryProviderFactory();
+		while ( iter.hasNext() ) {
+			PersistentClass clazz = (PersistentClass) iter.next();
+			Class<?> mappedClass = clazz.getMappedClass();
+			if ( mappedClass != null ) {
+				XClass mappedXClass = reflectionManager.toXClass( mappedClass );
+				if ( mappedXClass != null && mappedXClass.isAnnotationPresent( Indexed.class ) ) {
+					DirectoryProvider provider = factory.createDirectoryProvider( mappedXClass, cfg, this );
+					if ( !lockableDirectoryProviders.containsKey( provider ) ) {
+						lockableDirectoryProviders.put( provider, new ReentrantLock() );
+					}
+					final DocumentBuilder<Object> documentBuilder = new DocumentBuilder<Object>(
+							mappedXClass, analyzer, provider, reflectionManager
+					);
+
+					documentBuilders.put( mappedClass, documentBuilder );
+				}
+			}
+		}
+		Set<Class> indexedClasses = documentBuilders.keySet();
+		for ( DocumentBuilder builder : documentBuilders.values() ) {
+			builder.postInitialize( indexedClasses );
+		}
+		WorkerFactory workerFactory = new WorkerFactory();
+		workerFactory.configure( cfg, this );
+		worker = workerFactory.createWorker();
+
+	}
+
+	//code doesn't have to be multithreaded because SF creation is not.
+	//this is not a public API, should really only be used during the SessionFActory building
+	public static SearchFactory getSearchFactory(Configuration cfg) {
+		WeakHashMap<Configuration, SearchFactory> contextMap = contexts.get();
+		if (contextMap == null) {
+			contextMap = new WeakHashMap<Configuration, SearchFactory>( 2 );
+			contexts.set( contextMap );
+		}
+		SearchFactory searchFactory = contextMap.get( cfg );
+		if ( searchFactory == null) {
+			searchFactory = new SearchFactory(cfg);
+
+			contextMap.put( cfg, searchFactory );
+		}
+		return searchFactory;
+	}
+
+
+	public Map<Class, DocumentBuilder<Object>> getDocumentBuilders() {
+		return documentBuilders;
+	}
+
+	public Map<DirectoryProvider, ReentrantLock> getLockableDirectoryProviders() {
+		return lockableDirectoryProviders;
+	}
+
+	public Worker getWorker() {
+		return worker;
+	}
+
+	//not happy about having it as a helper class but I don't want cfg to be associated with the SearchFactory
+	public static ReflectionManager getReflectionManager(Configuration cfg) {
+		ReflectionManager reflectionManager;
+		try {
+			//TODO introduce a ReflectionManagerHolder interface to avoid reflection
+			//I want to avoid hard link between HAN and Validator for usch a simple need
+			//reuse the existing reflectionManager one when possible
+			reflectionManager =
+					(ReflectionManager) cfg.getClass().getMethod( "getReflectionManager" ).invoke( cfg );
+
+		}
+		catch (Exception e) {
+			reflectionManager = new JavaReflectionManager();
+		}
+		return reflectionManager;
+	}
+
+	public DirectoryProvider getDirectoryProvider(Class entity) {
+		DocumentBuilder<Object> documentBuilder = getDocumentBuilders().get( entity );
+		return documentBuilder == null ? null : documentBuilder.getDirectoryProvider();
+	}
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/Version.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/Version.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/Version.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,20 +0,0 @@
-//$Id: $
-package org.hibernate.search;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * @author Emmanuel Bernard
- */
-public class Version {
-	public static final String VERSION = "3.2.2.beta1";
-	private static Log log = LogFactory.getLog( Version.class );
-
-	static {
-		log.info( "Hibernate Search " + VERSION );
-	}
-
-	public static void touch() {
-	}
-}
\ No newline at end of file

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/Version.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/Version.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/Version.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/Version.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,20 @@
+//$Id: $
+package org.hibernate.search;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Version {
+	public static final String VERSION = "3.2.2.beta1";
+	private static Log log = LogFactory.getLog( Version.class );
+
+	static {
+		log.info( "Hibernate Search " + VERSION );
+	}
+
+	public static void touch() {
+	}
+}
\ No newline at end of file

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/annotations (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/annotations)

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Boost.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/annotations/Boost.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Boost.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,20 +0,0 @@
-//$Id: $
-package org.hibernate.search.annotations;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Apply a boost factor on a field or a whole entity
- *
- * @author Emmanuel Bernard
- */
- at Retention( RetentionPolicy.RUNTIME )
- at Target( {ElementType.TYPE, ElementType.METHOD, ElementType.FIELD} )
- at Documented
-public @interface Boost {
-	float value();
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Boost.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/annotations/Boost.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Boost.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Boost.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,20 @@
+//$Id: $
+package org.hibernate.search.annotations;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Apply a boost factor on a field or a whole entity
+ *
+ * @author Emmanuel Bernard
+ */
+ at Retention( RetentionPolicy.RUNTIME )
+ at Target( {ElementType.TYPE, ElementType.METHOD, ElementType.FIELD} )
+ at Documented
+public @interface Boost {
+	float value();
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/ContainedIn.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/annotations/ContainedIn.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/ContainedIn.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,40 +0,0 @@
-//$Id: $
-package org.hibernate.search.annotations;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Documented;
-
-/**
- * Describe the owning entity as being part of the target entity's
- * index (to be more accurate, being part of the indexed object graph)
- *
- * Only necessary when an @Indexed class is used as a @IndexedEmbedded
- * target class. @ContainedIn must mark the property pointing back
- * to the @IndexedEmbedded owning Entity
- *
- * Not necessary if the class is an @Embeddable class.
- *
- * <code>
- * @Indexed
- * public class OrderLine {
- *     @IndexedEmbedded
- *     private Order order;
- * }
- *
- * @Indexed
- * public class Order {
- *     @ContainedBy
- *     Set<OrderLine> lines;
- * }
- * </code>
- *
- * @author Emmanuel Bernard
- */
- at Retention( RetentionPolicy.RUNTIME )
- at Target( {ElementType.FIELD, ElementType.METHOD} )
- at Documented
-public @interface ContainedIn {
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/ContainedIn.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/annotations/ContainedIn.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/ContainedIn.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/ContainedIn.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,40 @@
+//$Id: $
+package org.hibernate.search.annotations;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Documented;
+
+/**
+ * Describe the owning entity as being part of the target entity's
+ * index (to be more accurate, being part of the indexed object graph)
+ *
+ * Only necessary when an @Indexed class is used as a @IndexedEmbedded
+ * target class. @ContainedIn must mark the property pointing back
+ * to the @IndexedEmbedded owning Entity
+ *
+ * Not necessary if the class is an @Embeddable class.
+ *
+ * <code>
+ * @Indexed
+ * public class OrderLine {
+ *     @IndexedEmbedded
+ *     private Order order;
+ * }
+ *
+ * @Indexed
+ * public class Order {
+ *     @ContainedBy
+ *     Set<OrderLine> lines;
+ * }
+ * </code>
+ *
+ * @author Emmanuel Bernard
+ */
+ at Retention( RetentionPolicy.RUNTIME )
+ at Target( {ElementType.FIELD, ElementType.METHOD} )
+ at Documented
+public @interface ContainedIn {
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/DateBridge.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/annotations/DateBridge.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/DateBridge.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,25 +0,0 @@
-//$Id: $
-package org.hibernate.search.annotations;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-import org.hibernate.search.annotations.Resolution;
-
-/**
- * Defines the temporal resolution of a given field
- * Date are stored as String in GMT
- *
- * @author Emmanuel Bernard
- */
- at Retention( RetentionPolicy.RUNTIME )
- at Target( {ElementType.FIELD, ElementType.METHOD} )
- at Documented
-//TODO allow pattern like yyyyMMdd?
-//TODO allow base timezone?
-public @interface DateBridge {
-	Resolution resolution();
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/DateBridge.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/annotations/DateBridge.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/DateBridge.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/DateBridge.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,25 @@
+//$Id: $
+package org.hibernate.search.annotations;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import org.hibernate.search.annotations.Resolution;
+
+/**
+ * Defines the temporal resolution of a given field
+ * Date are stored as String in GMT
+ *
+ * @author Emmanuel Bernard
+ */
+ at Retention( RetentionPolicy.RUNTIME )
+ at Target( {ElementType.FIELD, ElementType.METHOD} )
+ at Documented
+//TODO allow pattern like yyyyMMdd?
+//TODO allow base timezone?
+public @interface DateBridge {
+	Resolution resolution();
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/DocumentId.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/annotations/DocumentId.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/DocumentId.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,22 +0,0 @@
-//$Id: $
-package org.hibernate.search.annotations;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Declare a field as the document id. If set to a property, the property will be used
- * TODO: If set to a class, the class itself will be passed to the FieldBridge
- * Note that @{link org.hibernate.search.bridge.FieldBridge#get} must return the Entity id
- *
- * @author Emmanuel Bernard
- */
- at Retention( RetentionPolicy.RUNTIME )
- at Target( {ElementType.METHOD, ElementType.FIELD} )
- at Documented
-public @interface DocumentId {
-	String name() default "";
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/DocumentId.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/annotations/DocumentId.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/DocumentId.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/DocumentId.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,22 @@
+//$Id: $
+package org.hibernate.search.annotations;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Declare a field as the document id. If set to a property, the property will be used
+ * TODO: If set to a class, the class itself will be passed to the FieldBridge
+ * Note that @{link org.hibernate.search.bridge.FieldBridge#get} must return the Entity id
+ *
+ * @author Emmanuel Bernard
+ */
+ at Retention( RetentionPolicy.RUNTIME )
+ at Target( {ElementType.METHOD, ElementType.FIELD} )
+ at Documented
+public @interface DocumentId {
+	String name() default "";
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Field.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/annotations/Field.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Field.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,38 +0,0 @@
-//$Id: $
-/**
- * JavaDoc copy/pastle from the Apache Lucene project
- * Available under the ASL 2.0 http://www.apache.org/licenses/LICENSE-2.0
- */
-package org.hibernate.search.annotations;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Mark a property as indexable
- *
- * @author Emmanuel Bernard
- */
- at Retention( RetentionPolicy.RUNTIME )
- at Target( {ElementType.METHOD, ElementType.FIELD} )
- at Documented
-public @interface Field {
-	/**
-	 * Field name, default to the JavaBean property name
-	 */
-	String name() default "";
-
-	/**
-	 * Should the value be stored in the document
-	 */
-	Store store() default Store.NO;
-
-	/**
-	 * Defines how the Field should be indexed
-	 */
-	Index index();
-
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Field.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/annotations/Field.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Field.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Field.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,38 @@
+//$Id: $
+/**
+ * JavaDoc copy/pastle from the Apache Lucene project
+ * Available under the ASL 2.0 http://www.apache.org/licenses/LICENSE-2.0
+ */
+package org.hibernate.search.annotations;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Mark a property as indexable
+ *
+ * @author Emmanuel Bernard
+ */
+ at Retention( RetentionPolicy.RUNTIME )
+ at Target( {ElementType.METHOD, ElementType.FIELD} )
+ at Documented
+public @interface Field {
+	/**
+	 * Field name, default to the JavaBean property name
+	 */
+	String name() default "";
+
+	/**
+	 * Should the value be stored in the document
+	 */
+	Store store() default Store.NO;
+
+	/**
+	 * Defines how the Field should be indexed
+	 */
+	Index index();
+
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/FieldBridge.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/annotations/FieldBridge.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/FieldBridge.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,22 +0,0 @@
-//$Id: $
-package org.hibernate.search.annotations;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * specifies a given field bridge implementation
- *
- * @author Emmanuel Bernard
- */
- at Retention( RetentionPolicy.RUNTIME )
- at Target( {ElementType.FIELD, ElementType.METHOD} )
- at Documented
-public @interface FieldBridge {
-	public Class impl() default void.class;
-
-	public Parameter[] params() default {};
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/FieldBridge.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/annotations/FieldBridge.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/FieldBridge.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/FieldBridge.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,22 @@
+//$Id: $
+package org.hibernate.search.annotations;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * specifies a given field bridge implementation
+ *
+ * @author Emmanuel Bernard
+ */
+ at Retention( RetentionPolicy.RUNTIME )
+ at Target( {ElementType.FIELD, ElementType.METHOD} )
+ at Documented
+public @interface FieldBridge {
+	public Class impl() default void.class;
+
+	public Parameter[] params() default {};
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Index.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/annotations/Index.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Index.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,34 +0,0 @@
-//$Id: $
-package org.hibernate.search.annotations;
-
-/**
- * Defines how an Field should be indexed
- */
-public enum Index {
-	/**
-	 * Do not index the field value. This field can thus not be searched,
-	 * but one can still access its contents provided it is
-	 * {@link Store stored}.
-	 */
-	NO,
-	/**
-	 * Index the field's value so it can be searched. An Analyzer will be used
-	 * to tokenize and possibly further normalize the text before its
-	 * terms will be stored in the index. This is useful for common text.
-	 */
-	TOKENIZED,
-	/**
-	 * Index the field's value without using an Analyzer, so it can be searched.
-	 * As no analyzer is used the value will be stored as a single term. This is
-	 * useful for unique Ids like product numbers.
-	 */
-	UN_TOKENIZED,
-	/**
-	 * Index the field's value without an Analyzer, and disable
-	 * the storing of norms.  No norms means that index-time boosting
-	 * and field length normalization will be disabled.  The benefit is
-	 * less memory usage as norms take up one byte per indexed field
-	 * for every document in the index.
-	 */
-	NO_NORMS
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Index.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/annotations/Index.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Index.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Index.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,34 @@
+//$Id: $
+package org.hibernate.search.annotations;
+
+/**
+ * Defines how an Field should be indexed
+ */
+public enum Index {
+	/**
+	 * Do not index the field value. This field can thus not be searched,
+	 * but one can still access its contents provided it is
+	 * {@link Store stored}.
+	 */
+	NO,
+	/**
+	 * Index the field's value so it can be searched. An Analyzer will be used
+	 * to tokenize and possibly further normalize the text before its
+	 * terms will be stored in the index. This is useful for common text.
+	 */
+	TOKENIZED,
+	/**
+	 * Index the field's value without using an Analyzer, so it can be searched.
+	 * As no analyzer is used the value will be stored as a single term. This is
+	 * useful for unique Ids like product numbers.
+	 */
+	UN_TOKENIZED,
+	/**
+	 * Index the field's value without an Analyzer, and disable
+	 * the storing of norms.  No norms means that index-time boosting
+	 * and field length normalization will be disabled.  The benefit is
+	 * less memory usage as norms take up one byte per indexed field
+	 * for every document in the index.
+	 */
+	NO_NORMS
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Indexed.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/annotations/Indexed.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Indexed.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,21 +0,0 @@
-//$Id: Indexed.java 10742 2006-11-07 01:03:16Z epbernard $
-package org.hibernate.search.annotations;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
- at Retention( RetentionPolicy.RUNTIME )
- at Target( ElementType.TYPE )
- at Documented
-/**
- * Specifies that an entity is to be indexed by Lucene
- */
-public @interface Indexed {
-	/**
-	 * The filename of the index
-	 */
-	String index() default "";
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Indexed.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/annotations/Indexed.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Indexed.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Indexed.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,21 @@
+//$Id: Indexed.java 10742 2006-11-07 01:03:16Z epbernard $
+package org.hibernate.search.annotations;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+ at Retention( RetentionPolicy.RUNTIME )
+ at Target( ElementType.TYPE )
+ at Documented
+/**
+ * Specifies that an entity is to be indexed by Lucene
+ */
+public @interface Indexed {
+	/**
+	 * The filename of the index
+	 */
+	String index() default "";
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/IndexedEmbedded.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/annotations/IndexedEmbedded.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/IndexedEmbedded.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,31 +0,0 @@
-//$Id: $
-package org.hibernate.search.annotations;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Documented;
-
- at Retention( RetentionPolicy.RUNTIME )
- at Target( { ElementType.FIELD, ElementType.METHOD } )
- at Documented
-/**
- * Specifies that an association (@*ToOne or @Embedded) is to be indexed
- * in the root entity index
- * It allows queries involving associated objects restrictions
- */
-public @interface IndexedEmbedded {
-	/**
-	 * Field name prefix
-	 * Default to 'propertyname.'
-	 */
-	String prefix() default ".";
-
-	/**
-	 * Stop indexing embedded elements when depth is reached
-	 * depth=1 means the associated element is index, but not its embedded elements
-	 * Default: infinite (an exception will be raised in case of class circular reference when infinite is chosen)
-	 */
-	int depth() default Integer.MAX_VALUE;
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/IndexedEmbedded.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/annotations/IndexedEmbedded.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/IndexedEmbedded.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/IndexedEmbedded.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,31 @@
+//$Id: $
+package org.hibernate.search.annotations;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Documented;
+
+ at Retention( RetentionPolicy.RUNTIME )
+ at Target( { ElementType.FIELD, ElementType.METHOD } )
+ at Documented
+/**
+ * Specifies that an association (@*ToOne or @Embedded) is to be indexed
+ * in the root entity index
+ * It allows queries involving associated objects restrictions
+ */
+public @interface IndexedEmbedded {
+	/**
+	 * Field name prefix
+	 * Default to 'propertyname.'
+	 */
+	String prefix() default ".";
+
+	/**
+	 * Stop indexing embedded elements when depth is reached
+	 * depth=1 means the associated element is index, but not its embedded elements
+	 * Default: infinite (an exception will be raised in case of class circular reference when infinite is chosen)
+	 */
+	int depth() default Integer.MAX_VALUE;
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Keyword.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/annotations/Keyword.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Keyword.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,29 +0,0 @@
-//$Id: Keyword.java 10742 2006-11-07 01:03:16Z epbernard $
-package org.hibernate.search.annotations;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
- at Retention( RetentionPolicy.RUNTIME )
- at Target( {ElementType.METHOD, ElementType.FIELD} )
- at Documented
-/**
- * Specifies that a property of an entity is a Lucene
- * keyword field
- * @deprecated use @Field(index=Index.UN_TOKENIZED, store=Store.YES) or @DocumentId when id=true was used
- */
- at Deprecated
-public @interface Keyword {
-	/**
-	 * The field name
-	 */
-	String name() default "";
-
-	/**
-	 * Specifies that this is the "identifier" keyword
-	 */
-	boolean id() default false;
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Keyword.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/annotations/Keyword.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Keyword.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Keyword.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,29 @@
+//$Id: Keyword.java 10742 2006-11-07 01:03:16Z epbernard $
+package org.hibernate.search.annotations;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+ at Retention( RetentionPolicy.RUNTIME )
+ at Target( {ElementType.METHOD, ElementType.FIELD} )
+ at Documented
+/**
+ * Specifies that a property of an entity is a Lucene
+ * keyword field
+ * @deprecated use @Field(index=Index.UN_TOKENIZED, store=Store.YES) or @DocumentId when id=true was used
+ */
+ at Deprecated
+public @interface Keyword {
+	/**
+	 * The field name
+	 */
+	String name() default "";
+
+	/**
+	 * Specifies that this is the "identifier" keyword
+	 */
+	boolean id() default false;
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Parameter.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/annotations/Parameter.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Parameter.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,19 +0,0 @@
-//$Id: $
-package org.hibernate.search.annotations;
-
-import java.lang.annotation.Target;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-
-/**
- * Parameter (basically key/value pattern)
- *
- * @author Emmanuel Bernard
- */
- at Target({})
- at Retention(RUNTIME)
-public @interface Parameter {
-	String name();
-
-	String value();
-}
\ No newline at end of file

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Parameter.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/annotations/Parameter.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Parameter.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Parameter.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,19 @@
+//$Id: $
+package org.hibernate.search.annotations;
+
+import java.lang.annotation.Target;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+/**
+ * Parameter (basically key/value pattern)
+ *
+ * @author Emmanuel Bernard
+ */
+ at Target({})
+ at Retention(RUNTIME)
+public @interface Parameter {
+	String name();
+
+	String value();
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Resolution.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/annotations/Resolution.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Resolution.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,17 +0,0 @@
-//$Id: $
-package org.hibernate.search.annotations;
-
-/**
- * Date indexing resolution
- *
- * @author Emmanuel Bernard
- */
-public enum Resolution {
-	YEAR,
-	MONTH,
-	DAY,
-	HOUR,
-	MINUTE,
-	SECOND,
-	MILLISECOND
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Resolution.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/annotations/Resolution.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Resolution.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Resolution.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,17 @@
+//$Id: $
+package org.hibernate.search.annotations;
+
+/**
+ * Date indexing resolution
+ *
+ * @author Emmanuel Bernard
+ */
+public enum Resolution {
+	YEAR,
+	MONTH,
+	DAY,
+	HOUR,
+	MINUTE,
+	SECOND,
+	MILLISECOND
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Store.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/annotations/Store.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Store.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,13 +0,0 @@
-//$Id: $
-package org.hibernate.search.annotations;
-
-/**
- * Whether or not the value is stored in the document
- *
- * @author Emmanuel Bernard
- */
-public enum Store {
-	NO,
-	YES,
-	COMPRESS
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Store.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/annotations/Store.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Store.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Store.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,13 @@
+//$Id: $
+package org.hibernate.search.annotations;
+
+/**
+ * Whether or not the value is stored in the document
+ *
+ * @author Emmanuel Bernard
+ */
+public enum Store {
+	NO,
+	YES,
+	COMPRESS
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Text.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/annotations/Text.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Text.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,24 +0,0 @@
-//$Id: Text.java 10742 2006-11-07 01:03:16Z epbernard $
-package org.hibernate.search.annotations;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
- at Retention( RetentionPolicy.RUNTIME )
- at Target( {ElementType.METHOD, ElementType.FIELD} )
- at Documented
-/**
- * Specifies that a property of an entity is a Lucene
- * text field
- * @deprecated use @Field(index=Index.TOKENIZED, store=Store.YES)
- */
- at Deprecated
-public @interface Text {
-	/**
-	 * The field name
-	 */
-	String name() default "";
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Text.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/annotations/Text.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Text.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Text.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,24 @@
+//$Id: Text.java 10742 2006-11-07 01:03:16Z epbernard $
+package org.hibernate.search.annotations;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+ at Retention( RetentionPolicy.RUNTIME )
+ at Target( {ElementType.METHOD, ElementType.FIELD} )
+ at Documented
+/**
+ * Specifies that a property of an entity is a Lucene
+ * text field
+ * @deprecated use @Field(index=Index.TOKENIZED, store=Store.YES)
+ */
+ at Deprecated
+public @interface Text {
+	/**
+	 * The field name
+	 */
+	String name() default "";
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Unstored.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/annotations/Unstored.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Unstored.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,24 +0,0 @@
-//$Id: Unstored.java 10742 2006-11-07 01:03:16Z epbernard $
-package org.hibernate.search.annotations;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
- at Retention( RetentionPolicy.RUNTIME )
- at Target( {ElementType.METHOD, ElementType.FIELD} )
- at Documented
-/**
- * Specifies that a property of an entity is a Lucene
- * unstored field
- * @deprecated use @Field(index=Index.TOKENIZED, store=Store.NO)
- */
- at Deprecated
-public @interface Unstored {
-	/**
-	 * The field name
-	 */
-	String name() default "";
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Unstored.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/annotations/Unstored.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Unstored.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/annotations/Unstored.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,24 @@
+//$Id: Unstored.java 10742 2006-11-07 01:03:16Z epbernard $
+package org.hibernate.search.annotations;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+ at Retention( RetentionPolicy.RUNTIME )
+ at Target( {ElementType.METHOD, ElementType.FIELD} )
+ at Documented
+/**
+ * Specifies that a property of an entity is a Lucene
+ * unstored field
+ * @deprecated use @Field(index=Index.TOKENIZED, store=Store.NO)
+ */
+ at Deprecated
+public @interface Unstored {
+	/**
+	 * The field name
+	 */
+	String name() default "";
+}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/backend (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/backend)

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/backend/AddLuceneWork.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/backend/AddLuceneWork.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/backend/AddLuceneWork.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,15 +0,0 @@
-//$Id: $
-package org.hibernate.search.backend;
-
-import java.io.Serializable;
-
-import org.apache.lucene.document.Document;
-
-/**
- * @author Emmanuel Bernard
- */
-public class AddLuceneWork extends LuceneWork {
-	public AddLuceneWork(Serializable id, Class entity, Document document) {
-		super( id, entity, document );
-	}
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/backend/AddLuceneWork.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/backend/AddLuceneWork.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/backend/AddLuceneWork.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/backend/AddLuceneWork.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,15 @@
+//$Id: $
+package org.hibernate.search.backend;
+
+import java.io.Serializable;
+
+import org.apache.lucene.document.Document;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class AddLuceneWork extends LuceneWork {
+	public AddLuceneWork(Serializable id, Class entity, Document document) {
+		super( id, entity, document );
+	}
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/backend/BackendQueueProcessorFactory.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/backend/BackendQueueProcessorFactory.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/backend/BackendQueueProcessorFactory.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,24 +0,0 @@
-//$Id: $
-package org.hibernate.search.backend;
-
-import java.util.Properties;
-import java.util.List;
-
-import org.hibernate.search.SearchFactory;
-
-/**
- * Build stateful backend processor
- * Must have a no arg constructor
- * The factory typically prepare or pool the resources needed by the queue processor
- *
- * @author Emmanuel Bernard
- */
-public interface BackendQueueProcessorFactory {
-	void initialize(Properties props, SearchFactory searchFactory);
-
-	/**
-	 * Return a runnable implementation responsible for processing the queue to a given backend
-	 */
-
-	Runnable getProcessor(List<LuceneWork> queue);
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/backend/BackendQueueProcessorFactory.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/backend/BackendQueueProcessorFactory.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/backend/BackendQueueProcessorFactory.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/backend/BackendQueueProcessorFactory.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,24 @@
+//$Id: $
+package org.hibernate.search.backend;
+
+import java.util.Properties;
+import java.util.List;
+
+import org.hibernate.search.SearchFactory;
+
+/**
+ * Build stateful backend processor
+ * Must have a no arg constructor
+ * The factory typically prepare or pool the resources needed by the queue processor
+ *
+ * @author Emmanuel Bernard
+ */
+public interface BackendQueueProcessorFactory {
+	void initialize(Properties props, SearchFactory searchFactory);
+
+	/**
+	 * Return a runnable implementation responsible for processing the queue to a given backend
+	 */
+
+	Runnable getProcessor(List<LuceneWork> queue);
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/backend/DeleteLuceneWork.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/backend/DeleteLuceneWork.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/backend/DeleteLuceneWork.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,13 +0,0 @@
-//$Id: $
-package org.hibernate.search.backend;
-
-import java.io.Serializable;
-
-/**
- * @author Emmanuel Bernard
- */
-public class DeleteLuceneWork extends LuceneWork {
-	public DeleteLuceneWork(Serializable id, Class entity) {
-		super( id, entity );
-	}
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/backend/DeleteLuceneWork.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/backend/DeleteLuceneWork.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/backend/DeleteLuceneWork.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/backend/DeleteLuceneWork.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,13 @@
+//$Id: $
+package org.hibernate.search.backend;
+
+import java.io.Serializable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class DeleteLuceneWork extends LuceneWork {
+	public DeleteLuceneWork(Serializable id, Class entity) {
+		super( id, entity );
+	}
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/backend/LuceneWork.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/backend/LuceneWork.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/backend/LuceneWork.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,40 +0,0 @@
-//$Id: $
-package org.hibernate.search.backend;
-
-import java.io.Serializable;
-
-import org.apache.lucene.document.Document;
-
-/**
- * Represent a Serializable Lucene unit work
- *
- * @author Emmanuel Bernard
- */
-public abstract class LuceneWork implements Serializable {
-	private Document document;
-	private Class entityClass;
-	private Serializable id;
-
-	public LuceneWork(Serializable id, Class entity) {
-		this( id, entity, null );
-	}
-
-	public LuceneWork(Serializable id, Class entity, Document document) {
-		this.id = id;
-		this.entityClass = entity;
-		this.document = document;
-	}
-
-
-	public Document getDocument() {
-		return document;
-	}
-
-	public Class getEntityClass() {
-		return entityClass;
-	}
-
-	public Serializable getId() {
-		return id;
-	}
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/backend/LuceneWork.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/backend/LuceneWork.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/backend/LuceneWork.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/backend/LuceneWork.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,40 @@
+//$Id: $
+package org.hibernate.search.backend;
+
+import java.io.Serializable;
+
+import org.apache.lucene.document.Document;
+
+/**
+ * Represent a Serializable Lucene unit work
+ *
+ * @author Emmanuel Bernard
+ */
+public abstract class LuceneWork implements Serializable {
+	private Document document;
+	private Class entityClass;
+	private Serializable id;
+
+	public LuceneWork(Serializable id, Class entity) {
+		this( id, entity, null );
+	}
+
+	public LuceneWork(Serializable id, Class entity, Document document) {
+		this.id = id;
+		this.entityClass = entity;
+		this.document = document;
+	}
+
+
+	public Document getDocument() {
+		return document;
+	}
+
+	public Class getEntityClass() {
+		return entityClass;
+	}
+
+	public Serializable getId() {
+		return id;
+	}
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/backend/QueueingProcessor.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/backend/QueueingProcessor.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/backend/QueueingProcessor.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,34 +0,0 @@
-//$Id: $
-package org.hibernate.search.backend;
-
-import java.util.List;
-import java.io.Serializable;
-
-import org.hibernate.search.backend.LuceneWork;
-
-/**
- * Pile work operations
- * No thread safety has to be implemented, the queue being scoped already
- * The implementation must be "stateless" wrt the queue through (ie not store the queue state)
- *
- * @author Emmanuel Bernard
- */
-public interface QueueingProcessor {
-	/**
-	 * Add a work
-	 * TODO move that womewhere else, it does not really fit here
-	 */
-	void add(Object entity, Serializable id, WorkType workType, List<Work> queue);
-
-	/**
-	 * Execute works
-	 * @param queue
-	 */
-	void performWork(List<Work> queue);
-
-	/**
-	 * Rollback works
-	 * @param queue
-	 */
-	void cancelWork(List<Work> queue);
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/backend/QueueingProcessor.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/backend/QueueingProcessor.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/backend/QueueingProcessor.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/backend/QueueingProcessor.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,34 @@
+//$Id: $
+package org.hibernate.search.backend;
+
+import java.util.List;
+import java.io.Serializable;
+
+import org.hibernate.search.backend.LuceneWork;
+
+/**
+ * Pile work operations
+ * No thread safety has to be implemented, the queue being scoped already
+ * The implementation must be "stateless" wrt the queue through (ie not store the queue state)
+ *
+ * @author Emmanuel Bernard
+ */
+public interface QueueingProcessor {
+	/**
+	 * Add a work
+	 * TODO move that womewhere else, it does not really fit here
+	 */
+	void add(Object entity, Serializable id, WorkType workType, List<Work> queue);
+
+	/**
+	 * Execute works
+	 * @param queue
+	 */
+	void performWork(List<Work> queue);
+
+	/**
+	 * Rollback works
+	 * @param queue
+	 */
+	void cancelWork(List<Work> queue);
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/backend/Work.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/backend/Work.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/backend/Work.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,48 +0,0 @@
-//$Id: $
-package org.hibernate.search.backend;
-
-import java.io.Serializable;
-
-import org.hibernate.annotations.common.reflection.XMember;
-
-/**
- * work unit. Only make sense inside the same session since it uses the scope principle
- *
- * @author Emmanuel Bernard
- */
-public class Work {
-	private Object entity;
-	private Serializable id;
-	private XMember idGetter;
-	private WorkType type;
-
-
-	public Work(Object entity, Serializable id, WorkType type) {
-		this.entity = entity;
-		this.id = id;
-		this.type = type;
-	}
-
-
-	public Work(Object entity, XMember idGetter, WorkType type) {
-		this.entity = entity;
-		this.idGetter = idGetter;
-		this.type = type;
-	}
-
-	public Object getEntity() {
-		return entity;
-	}
-
-	public Serializable getId() {
-		return id;
-	}
-
-	public XMember getIdGetter() {
-		return idGetter;
-	}
-
-	public WorkType getType() {
-		return type;
-	}
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/backend/Work.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/backend/Work.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/backend/Work.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/backend/Work.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,48 @@
+//$Id: $
+package org.hibernate.search.backend;
+
+import java.io.Serializable;
+
+import org.hibernate.annotations.common.reflection.XMember;
+
+/**
+ * work unit. Only make sense inside the same session since it uses the scope principle
+ *
+ * @author Emmanuel Bernard
+ */
+public class Work {
+	private Object entity;
+	private Serializable id;
+	private XMember idGetter;
+	private WorkType type;
+
+
+	public Work(Object entity, Serializable id, WorkType type) {
+		this.entity = entity;
+		this.id = id;
+		this.type = type;
+	}
+
+
+	public Work(Object entity, XMember idGetter, WorkType type) {
+		this.entity = entity;
+		this.idGetter = idGetter;
+		this.type = type;
+	}
+
+	public Object getEntity() {
+		return entity;
+	}
+
+	public Serializable getId() {
+		return id;
+	}
+
+	public XMember getIdGetter() {
+		return idGetter;
+	}
+
+	public WorkType getType() {
+		return type;
+	}
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/backend/WorkType.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/backend/WorkType.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/backend/WorkType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,12 +0,0 @@
-//$Id: $
-package org.hibernate.search.backend;
-
-/**
- * @author Emmanuel Bernard
- */
-public enum WorkType {
-	ADD,
-	UPDATE,
-	DELETE
-	//add INDEX at some point to behave differently during the queue process?
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/backend/WorkType.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/backend/WorkType.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/backend/WorkType.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/backend/WorkType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,12 @@
+//$Id: $
+package org.hibernate.search.backend;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public enum WorkType {
+	ADD,
+	UPDATE,
+	DELETE
+	//add INDEX at some point to behave differently during the queue process?
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/backend/Worker.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/backend/Worker.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/backend/Worker.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,18 +0,0 @@
-//$Id: $
-package org.hibernate.search.backend;
-
-import java.util.Properties;
-import java.io.Serializable;
-
-import org.hibernate.event.EventSource;
-import org.hibernate.search.SearchFactory;
-
-/**
- * Perform work for a given session. This implementation has to be multi threaded
- * @author Emmanuel Bernard
- */
-public interface Worker {
-	void performWork(Object entity, Serializable id, WorkType workType, EventSource session);
-
-	void initialize(Properties props, SearchFactory searchFactory);
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/backend/Worker.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/backend/Worker.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/backend/Worker.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/backend/Worker.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,18 @@
+//$Id: $
+package org.hibernate.search.backend;
+
+import java.util.Properties;
+import java.io.Serializable;
+
+import org.hibernate.event.EventSource;
+import org.hibernate.search.SearchFactory;
+
+/**
+ * Perform work for a given session. This implementation has to be multi threaded
+ * @author Emmanuel Bernard
+ */
+public interface Worker {
+	void performWork(Object entity, Serializable id, WorkType workType, EventSource session);
+
+	void initialize(Properties props, SearchFactory searchFactory);
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/backend/WorkerFactory.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/backend/WorkerFactory.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/backend/WorkerFactory.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,74 +0,0 @@
-//$Id: $
-package org.hibernate.search.backend;
-
-import java.util.Map;
-import java.util.Properties;
-import java.util.concurrent.locks.ReentrantLock;
-
-import org.hibernate.cfg.Configuration;
-import org.hibernate.search.backend.impl.TransactionalWorker;
-import org.hibernate.search.engine.DocumentBuilder;
-import org.hibernate.search.SearchFactory;
-import org.hibernate.search.store.DirectoryProvider;
-import org.hibernate.search.Environment;
-import org.hibernate.search.SearchException;
-import org.hibernate.util.StringHelper;
-import org.hibernate.util.ReflectHelper;
-
-/**
- * @author Emmanuel Bernard
- */
-public class WorkerFactory {
-	private Map<Class, DocumentBuilder<Object>> documentBuilders;
-	private Map<DirectoryProvider, ReentrantLock> lockableDirectoryProviders;
-	private Configuration cfg;
-	private SearchFactory searchFactory;
-
-	public void configure(Configuration cfg,
-			SearchFactory searchFactory) {
-		this.searchFactory = searchFactory;
-		this.cfg = cfg;
-	}
-
-	private static Properties getProperties(Configuration cfg) {
-		Properties props = cfg.getProperties();
-		Properties workerProperties = new Properties();
-		for ( Map.Entry entry : props.entrySet() ) {
-			String key = (String) entry.getKey();
-			if ( key.startsWith( Environment.WORKER_PREFIX ) ) {
-				//key.substring( Environment.WORKER_PREFIX.length() )
-				workerProperties.setProperty( key, (String) entry.getValue() );
-			}
-		}
-		return workerProperties;
-	}
-
-	public Worker createWorker() {
-		Properties props = getProperties( cfg );
-		String impl = props.getProperty( Environment.WORKER_SCOPE );
-		Worker worker;
-		if ( StringHelper.isEmpty( impl ) ) {
-			worker = new TransactionalWorker();
-		}
-		else if ( "transaction".equalsIgnoreCase( impl ) ) {
-			worker = new TransactionalWorker();
-		}
-		else {
-			try {
-				Class workerClass = ReflectHelper.classForName( impl, WorkerFactory.class );
-				worker = (Worker) workerClass.newInstance();
-			}
-			catch (ClassNotFoundException e) {
-				throw new SearchException("Unable to find worker class: " + impl, e );
-			}
-			catch (IllegalAccessException e) {
-				throw new SearchException("Unable to instanciate worker class: " + impl, e );
-			}
-			catch (InstantiationException e) {
-				throw new SearchException("Unable to instanciate worker class: " + impl, e );
-			}
-		}
-		worker.initialize( props, searchFactory );
-		return worker;
-	}
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/backend/WorkerFactory.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/backend/WorkerFactory.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/backend/WorkerFactory.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/backend/WorkerFactory.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,74 @@
+//$Id: $
+package org.hibernate.search.backend;
+
+import java.util.Map;
+import java.util.Properties;
+import java.util.concurrent.locks.ReentrantLock;
+
+import org.hibernate.cfg.Configuration;
+import org.hibernate.search.backend.impl.TransactionalWorker;
+import org.hibernate.search.engine.DocumentBuilder;
+import org.hibernate.search.SearchFactory;
+import org.hibernate.search.store.DirectoryProvider;
+import org.hibernate.search.Environment;
+import org.hibernate.search.SearchException;
+import org.hibernate.util.StringHelper;
+import org.hibernate.util.ReflectHelper;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class WorkerFactory {
+	private Map<Class, DocumentBuilder<Object>> documentBuilders;
+	private Map<DirectoryProvider, ReentrantLock> lockableDirectoryProviders;
+	private Configuration cfg;
+	private SearchFactory searchFactory;
+
+	public void configure(Configuration cfg,
+			SearchFactory searchFactory) {
+		this.searchFactory = searchFactory;
+		this.cfg = cfg;
+	}
+
+	private static Properties getProperties(Configuration cfg) {
+		Properties props = cfg.getProperties();
+		Properties workerProperties = new Properties();
+		for ( Map.Entry entry : props.entrySet() ) {
+			String key = (String) entry.getKey();
+			if ( key.startsWith( Environment.WORKER_PREFIX ) ) {
+				//key.substring( Environment.WORKER_PREFIX.length() )
+				workerProperties.setProperty( key, (String) entry.getValue() );
+			}
+		}
+		return workerProperties;
+	}
+
+	public Worker createWorker() {
+		Properties props = getProperties( cfg );
+		String impl = props.getProperty( Environment.WORKER_SCOPE );
+		Worker worker;
+		if ( StringHelper.isEmpty( impl ) ) {
+			worker = new TransactionalWorker();
+		}
+		else if ( "transaction".equalsIgnoreCase( impl ) ) {
+			worker = new TransactionalWorker();
+		}
+		else {
+			try {
+				Class workerClass = ReflectHelper.classForName( impl, WorkerFactory.class );
+				worker = (Worker) workerClass.newInstance();
+			}
+			catch (ClassNotFoundException e) {
+				throw new SearchException("Unable to find worker class: " + impl, e );
+			}
+			catch (IllegalAccessException e) {
+				throw new SearchException("Unable to instanciate worker class: " + impl, e );
+			}
+			catch (InstantiationException e) {
+				throw new SearchException("Unable to instanciate worker class: " + impl, e );
+			}
+		}
+		worker.initialize( props, searchFactory );
+		return worker;
+	}
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/backend/Workspace.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/backend/Workspace.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/backend/Workspace.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,150 +0,0 @@
-//$Id: $
-package org.hibernate.search.backend;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.locks.ReentrantLock;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.lucene.index.IndexReader;
-import org.apache.lucene.index.IndexWriter;
-import org.hibernate.search.engine.DocumentBuilder;
-import org.hibernate.search.SearchFactory;
-import org.hibernate.search.SearchException;
-import org.hibernate.search.store.DirectoryProvider;
-import org.hibernate.annotations.common.AssertionFailure;
-
-/**
- * Lucene workspace
- * This is not intended to be used in a multithreaded environment
- * <p/>
- * One cannot execute modification through an IndexReader when an IndexWriter has been acquired on the same underlying directory
- * One cannot get an IndexWriter when an IndexReader have been acquired and modificed on the same underlying directory
- * The recommended approach is to execute all the modifications on the IndexReaders, {@link #clean()} }, and acquire the
- * index writers
- *
- * @author Emmanuel Bernard
- */
-//TODO introduce the notion of read only IndexReader? We cannot enforce it because Lucene use abstract classes, not interfaces
-public class Workspace {
-	private static Log log = LogFactory.getLog( Workspace.class );
-	private Map<DirectoryProvider, IndexReader> readers = new HashMap<DirectoryProvider, IndexReader>();
-	private Map<DirectoryProvider, IndexWriter> writers = new HashMap<DirectoryProvider, IndexWriter>();
-	private List<DirectoryProvider> lockedProviders = new ArrayList<DirectoryProvider>();
-	private SearchFactory searchFactory;
-
-	public Workspace(SearchFactory searchFactory) {
-		this.searchFactory = searchFactory;
-	}
-
-
-	public DocumentBuilder getDocumentBuilder(Class entity) {
-		return searchFactory.getDocumentBuilders().get( entity );
-	}
-
-	public IndexReader getIndexReader(Class entity) {
-		//TODO NPEs
-		DirectoryProvider provider = searchFactory.getDirectoryProvider( entity );
-		//one cannot access a reader for update after a writer has been accessed
-		if ( writers.containsKey( provider ) )
-			throw new AssertionFailure("Tries to read for update a index while a writer is accessed" + entity);
-		IndexReader reader = readers.get( provider );
-		if ( reader != null ) return reader;
-		lockProvider( provider );
-		try {
-			reader = IndexReader.open( provider.getDirectory() );
-			readers.put( provider, reader );
-		}
-		catch (IOException e) {
-			cleanUp( new SearchException( "Unable to open IndexReader for " + entity, e ) );
-		}
-		return reader;
-	}
-
-	public IndexWriter getIndexWriter(Class entity) {
-		DirectoryProvider provider = searchFactory.getDirectoryProvider( entity );
-		//one has to close a reader for update before a writer is accessed
-		IndexReader reader = readers.get( provider );
-		if ( reader != null ) {
-			try {
-				reader.close();
-			}
-			catch (IOException e) {
-				throw new SearchException( "Exception while closing IndexReader", e );
-			}
-			readers.remove( provider );
-		}
-		IndexWriter writer = writers.get( provider );
-		if ( writer != null ) return writer;
-		lockProvider( provider );
-		try {
-			writer = new IndexWriter(
-					provider.getDirectory(), searchFactory.getDocumentBuilders().get( entity ).getAnalyzer(), false
-			); //have been created at init time
-			writers.put( provider, writer );
-		}
-		catch (IOException e) {
-			cleanUp( new SearchException( "Unable to open IndexWriter for " + entity, e ) );
-		}
-		return writer;
-	}
-
-	private void lockProvider(DirectoryProvider provider) {
-		//make sure to use a semaphore
-		ReentrantLock lock = searchFactory.getLockableDirectoryProviders().get( provider );
-		//of course a given thread cannot have a race cond with itself
-		if ( !lock.isHeldByCurrentThread() ) {
-			lock.lock();
-			lockedProviders.add( provider );
-		}
-	}
-
-	private void cleanUp(SearchException originalException) {
-		//release all readers and writers, then release locks
-		SearchException raisedException = originalException;
-		for ( IndexReader reader : readers.values() ) {
-			try {
-				reader.close();
-			}
-			catch (IOException e) {
-				if ( raisedException != null ) {
-					log.error( "Subsequent Exception while closing IndexReader", e );
-				}
-				else {
-					raisedException = new SearchException( "Exception while closing IndexReader", e );
-				}
-			}
-		}
-		for ( IndexWriter writer : writers.values() ) {
-			try {
-				writer.close();
-			}
-			catch (IOException e) {
-				if ( raisedException != null ) {
-					log.error( "Subsequent Exception while closing IndexWriter", e );
-				}
-				else {
-					raisedException = new SearchException( "Exception while closing IndexWriter", e );
-				}
-			}
-		}
-		for ( DirectoryProvider provider : lockedProviders ) {
-			searchFactory.getLockableDirectoryProviders().get( provider ).unlock();
-		}
-		readers.clear();
-		writers.clear();
-		lockedProviders.clear();
-		if ( raisedException != null ) throw raisedException;
-	}
-
-	/**
-	 * release resources consumed in the workspace if any
-	 */
-	public void clean() {
-		cleanUp( null );
-	}
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/backend/Workspace.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/backend/Workspace.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/backend/Workspace.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/backend/Workspace.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,150 @@
+//$Id: $
+package org.hibernate.search.backend;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.locks.ReentrantLock;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexWriter;
+import org.hibernate.search.engine.DocumentBuilder;
+import org.hibernate.search.SearchFactory;
+import org.hibernate.search.SearchException;
+import org.hibernate.search.store.DirectoryProvider;
+import org.hibernate.annotations.common.AssertionFailure;
+
+/**
+ * Lucene workspace
+ * This is not intended to be used in a multithreaded environment
+ * <p/>
+ * One cannot execute modification through an IndexReader when an IndexWriter has been acquired on the same underlying directory
+ * One cannot get an IndexWriter when an IndexReader have been acquired and modificed on the same underlying directory
+ * The recommended approach is to execute all the modifications on the IndexReaders, {@link #clean()} }, and acquire the
+ * index writers
+ *
+ * @author Emmanuel Bernard
+ */
+//TODO introduce the notion of read only IndexReader? We cannot enforce it because Lucene use abstract classes, not interfaces
+public class Workspace {
+	private static Log log = LogFactory.getLog( Workspace.class );
+	private Map<DirectoryProvider, IndexReader> readers = new HashMap<DirectoryProvider, IndexReader>();
+	private Map<DirectoryProvider, IndexWriter> writers = new HashMap<DirectoryProvider, IndexWriter>();
+	private List<DirectoryProvider> lockedProviders = new ArrayList<DirectoryProvider>();
+	private SearchFactory searchFactory;
+
+	public Workspace(SearchFactory searchFactory) {
+		this.searchFactory = searchFactory;
+	}
+
+
+	public DocumentBuilder getDocumentBuilder(Class entity) {
+		return searchFactory.getDocumentBuilders().get( entity );
+	}
+
+	public IndexReader getIndexReader(Class entity) {
+		//TODO NPEs
+		DirectoryProvider provider = searchFactory.getDirectoryProvider( entity );
+		//one cannot access a reader for update after a writer has been accessed
+		if ( writers.containsKey( provider ) )
+			throw new AssertionFailure("Tries to read for update a index while a writer is accessed" + entity);
+		IndexReader reader = readers.get( provider );
+		if ( reader != null ) return reader;
+		lockProvider( provider );
+		try {
+			reader = IndexReader.open( provider.getDirectory() );
+			readers.put( provider, reader );
+		}
+		catch (IOException e) {
+			cleanUp( new SearchException( "Unable to open IndexReader for " + entity, e ) );
+		}
+		return reader;
+	}
+
+	public IndexWriter getIndexWriter(Class entity) {
+		DirectoryProvider provider = searchFactory.getDirectoryProvider( entity );
+		//one has to close a reader for update before a writer is accessed
+		IndexReader reader = readers.get( provider );
+		if ( reader != null ) {
+			try {
+				reader.close();
+			}
+			catch (IOException e) {
+				throw new SearchException( "Exception while closing IndexReader", e );
+			}
+			readers.remove( provider );
+		}
+		IndexWriter writer = writers.get( provider );
+		if ( writer != null ) return writer;
+		lockProvider( provider );
+		try {
+			writer = new IndexWriter(
+					provider.getDirectory(), searchFactory.getDocumentBuilders().get( entity ).getAnalyzer(), false
+			); //have been created at init time
+			writers.put( provider, writer );
+		}
+		catch (IOException e) {
+			cleanUp( new SearchException( "Unable to open IndexWriter for " + entity, e ) );
+		}
+		return writer;
+	}
+
+	private void lockProvider(DirectoryProvider provider) {
+		//make sure to use a semaphore
+		ReentrantLock lock = searchFactory.getLockableDirectoryProviders().get( provider );
+		//of course a given thread cannot have a race cond with itself
+		if ( !lock.isHeldByCurrentThread() ) {
+			lock.lock();
+			lockedProviders.add( provider );
+		}
+	}
+
+	private void cleanUp(SearchException originalException) {
+		//release all readers and writers, then release locks
+		SearchException raisedException = originalException;
+		for ( IndexReader reader : readers.values() ) {
+			try {
+				reader.close();
+			}
+			catch (IOException e) {
+				if ( raisedException != null ) {
+					log.error( "Subsequent Exception while closing IndexReader", e );
+				}
+				else {
+					raisedException = new SearchException( "Exception while closing IndexReader", e );
+				}
+			}
+		}
+		for ( IndexWriter writer : writers.values() ) {
+			try {
+				writer.close();
+			}
+			catch (IOException e) {
+				if ( raisedException != null ) {
+					log.error( "Subsequent Exception while closing IndexWriter", e );
+				}
+				else {
+					raisedException = new SearchException( "Exception while closing IndexWriter", e );
+				}
+			}
+		}
+		for ( DirectoryProvider provider : lockedProviders ) {
+			searchFactory.getLockableDirectoryProviders().get( provider ).unlock();
+		}
+		readers.clear();
+		writers.clear();
+		lockedProviders.clear();
+		if ( raisedException != null ) throw raisedException;
+	}
+
+	/**
+	 * release resources consumed in the workspace if any
+	 */
+	public void clean() {
+		cleanUp( null );
+	}
+}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/backend/impl)

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/BatchedQueueingProcessor.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/backend/impl/BatchedQueueingProcessor.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/BatchedQueueingProcessor.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,135 +0,0 @@
-//$Id: $
-package org.hibernate.search.backend.impl;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Properties;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
-
-import org.hibernate.Hibernate;
-import org.hibernate.annotations.common.util.StringHelper;
-import org.hibernate.search.Environment;
-import org.hibernate.search.SearchException;
-import org.hibernate.search.SearchFactory;
-import org.hibernate.search.backend.BackendQueueProcessorFactory;
-import org.hibernate.search.backend.LuceneWork;
-import org.hibernate.search.backend.QueueingProcessor;
-import org.hibernate.search.backend.Work;
-import org.hibernate.search.backend.WorkType;
-import org.hibernate.search.backend.impl.jms.JMSBackendQueueProcessorFactory;
-import org.hibernate.search.backend.impl.lucene.LuceneBackendQueueProcessorFactory;
-import org.hibernate.search.engine.DocumentBuilder;
-import org.hibernate.util.ReflectHelper;
-
-/**
- * Batch work until #performWork is called.
- * The work is then executed synchronously or asynchronously
- *
- * @author Emmanuel Bernard
- */
-public class BatchedQueueingProcessor implements QueueingProcessor {
-	private boolean sync;
-	private ExecutorService executorService;
-	private BackendQueueProcessorFactory backendQueueProcessorFactory;
-	private SearchFactory searchFactory;
-
-	public BatchedQueueingProcessor(SearchFactory searchFactory,
-									Properties properties) {
-		this.searchFactory = searchFactory;
-		//default to sync if none defined
-		this.sync = !"async".equalsIgnoreCase( properties.getProperty( Environment.WORKER_EXECUTION ) );
-
-		//default to a simple asynchronous operation
-		int min = Integer.parseInt(
-				properties.getProperty( Environment.WORKER_THREADPOOL_SIZE, "1" ).trim()
-		);
-		//no queue limit
-		int queueSize = Integer.parseInt(
-				properties.getProperty( Environment.WORKER_WORKQUEUE_SIZE, Integer.toString( Integer.MAX_VALUE ) ).trim()
-		);
-		if ( !sync ) {
-			/**
-			 * choose min = max with a sizable queue to be able to
-			 * actually queue operations
-			 * The locking mechanism preventing much of the scalability
-			 * anyway, the idea is really to have a buffer
-			 * If the queue limit is reached, the operation is executed by the main thread
-			 */
-			executorService = new ThreadPoolExecutor(
-					min, min, 60, TimeUnit.SECONDS,
-					new LinkedBlockingQueue<Runnable>(queueSize),
-					new ThreadPoolExecutor.CallerRunsPolicy()
-			);
-		}
-		String backend = properties.getProperty( Environment.WORKER_BACKEND );
-		if ( StringHelper.isEmpty( backend ) || "lucene".equalsIgnoreCase( backend ) ) {
-			backendQueueProcessorFactory = new LuceneBackendQueueProcessorFactory();
-		}
-		else if ( "jms".equalsIgnoreCase( backend ) ) {
-			backendQueueProcessorFactory = new JMSBackendQueueProcessorFactory();
-		}
-		else {
-			try {
-				Class processorFactoryClass = ReflectHelper.classForName( backend, BatchedQueueingProcessor.class );
-				backendQueueProcessorFactory = (BackendQueueProcessorFactory) processorFactoryClass.newInstance();
-			}
-			catch (ClassNotFoundException e) {
-				throw new SearchException( "Unable to find processor class: " + backend, e );
-			}
-			catch (IllegalAccessException e) {
-				throw new SearchException( "Unable to instanciate processor class: " + backend, e );
-			}
-			catch (InstantiationException e) {
-				throw new SearchException( "Unable to instanciate processor class: " + backend, e );
-			}
-		}
-		backendQueueProcessorFactory.initialize( properties, searchFactory );
-		searchFactory.setBackendQueueProcessorFactory( backendQueueProcessorFactory );
-	}
-
-	public void add(Object entity, Serializable id, WorkType workType, List<Work> queue) {
-		//don't check for builder it's done in performWork
-		Work work = new Work(entity, id, workType);
-		queue.add( work );
-	}
-
-	//TODO implements parallel batchWorkers (one per Directory)
-	public void performWork(List<Work> queue) {
-		int initialSize = queue.size();
-		List<LuceneWork> luceneQueue = new ArrayList<LuceneWork>( initialSize ); //TODO load factor for containedIn
-
-		for ( int i = 0 ; i < initialSize ; i++ ) {
-			Work work = queue.get( i );
-			queue.set( i, null ); // help GC and avoid 2 loaded queues in memory
-			Class entityClass = Hibernate.getClass( work.getEntity() );
-			DocumentBuilder<Object> builder = searchFactory.getDocumentBuilders().get( entityClass );
-			if ( builder == null ) return; //or exception?
-			builder.addWorkToQueue(work.getEntity(), work.getId(), work.getType(), luceneQueue, searchFactory);
-		}
-
-		Runnable processor = backendQueueProcessorFactory.getProcessor( luceneQueue );
-		if ( sync ) {
-			processor.run();
-		}
-		else {
-			executorService.execute( processor );
-		}
-	}
-
-	public void cancelWork(List<Work> queue) {
-		queue.clear();
-	}
-
-	@Override
-	public void finalize() throws Throwable {
-		super.finalize();
-		//gracefully stop
-		//TODO move to the SF close lifecycle
-		if ( executorService != null && !executorService.isShutdown() ) executorService.shutdown();
-	}
-
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/BatchedQueueingProcessor.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/backend/impl/BatchedQueueingProcessor.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/BatchedQueueingProcessor.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/BatchedQueueingProcessor.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,135 @@
+//$Id: $
+package org.hibernate.search.backend.impl;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+
+import org.hibernate.Hibernate;
+import org.hibernate.annotations.common.util.StringHelper;
+import org.hibernate.search.Environment;
+import org.hibernate.search.SearchException;
+import org.hibernate.search.SearchFactory;
+import org.hibernate.search.backend.BackendQueueProcessorFactory;
+import org.hibernate.search.backend.LuceneWork;
+import org.hibernate.search.backend.QueueingProcessor;
+import org.hibernate.search.backend.Work;
+import org.hibernate.search.backend.WorkType;
+import org.hibernate.search.backend.impl.jms.JMSBackendQueueProcessorFactory;
+import org.hibernate.search.backend.impl.lucene.LuceneBackendQueueProcessorFactory;
+import org.hibernate.search.engine.DocumentBuilder;
+import org.hibernate.util.ReflectHelper;
+
+/**
+ * Batch work until #performWork is called.
+ * The work is then executed synchronously or asynchronously
+ *
+ * @author Emmanuel Bernard
+ */
+public class BatchedQueueingProcessor implements QueueingProcessor {
+	private boolean sync;
+	private ExecutorService executorService;
+	private BackendQueueProcessorFactory backendQueueProcessorFactory;
+	private SearchFactory searchFactory;
+
+	public BatchedQueueingProcessor(SearchFactory searchFactory,
+									Properties properties) {
+		this.searchFactory = searchFactory;
+		//default to sync if none defined
+		this.sync = !"async".equalsIgnoreCase( properties.getProperty( Environment.WORKER_EXECUTION ) );
+
+		//default to a simple asynchronous operation
+		int min = Integer.parseInt(
+				properties.getProperty( Environment.WORKER_THREADPOOL_SIZE, "1" ).trim()
+		);
+		//no queue limit
+		int queueSize = Integer.parseInt(
+				properties.getProperty( Environment.WORKER_WORKQUEUE_SIZE, Integer.toString( Integer.MAX_VALUE ) ).trim()
+		);
+		if ( !sync ) {
+			/**
+			 * choose min = max with a sizable queue to be able to
+			 * actually queue operations
+			 * The locking mechanism preventing much of the scalability
+			 * anyway, the idea is really to have a buffer
+			 * If the queue limit is reached, the operation is executed by the main thread
+			 */
+			executorService = new ThreadPoolExecutor(
+					min, min, 60, TimeUnit.SECONDS,
+					new LinkedBlockingQueue<Runnable>(queueSize),
+					new ThreadPoolExecutor.CallerRunsPolicy()
+			);
+		}
+		String backend = properties.getProperty( Environment.WORKER_BACKEND );
+		if ( StringHelper.isEmpty( backend ) || "lucene".equalsIgnoreCase( backend ) ) {
+			backendQueueProcessorFactory = new LuceneBackendQueueProcessorFactory();
+		}
+		else if ( "jms".equalsIgnoreCase( backend ) ) {
+			backendQueueProcessorFactory = new JMSBackendQueueProcessorFactory();
+		}
+		else {
+			try {
+				Class processorFactoryClass = ReflectHelper.classForName( backend, BatchedQueueingProcessor.class );
+				backendQueueProcessorFactory = (BackendQueueProcessorFactory) processorFactoryClass.newInstance();
+			}
+			catch (ClassNotFoundException e) {
+				throw new SearchException( "Unable to find processor class: " + backend, e );
+			}
+			catch (IllegalAccessException e) {
+				throw new SearchException( "Unable to instanciate processor class: " + backend, e );
+			}
+			catch (InstantiationException e) {
+				throw new SearchException( "Unable to instanciate processor class: " + backend, e );
+			}
+		}
+		backendQueueProcessorFactory.initialize( properties, searchFactory );
+		searchFactory.setBackendQueueProcessorFactory( backendQueueProcessorFactory );
+	}
+
+	public void add(Object entity, Serializable id, WorkType workType, List<Work> queue) {
+		//don't check for builder it's done in performWork
+		Work work = new Work(entity, id, workType);
+		queue.add( work );
+	}
+
+	//TODO implements parallel batchWorkers (one per Directory)
+	public void performWork(List<Work> queue) {
+		int initialSize = queue.size();
+		List<LuceneWork> luceneQueue = new ArrayList<LuceneWork>( initialSize ); //TODO load factor for containedIn
+
+		for ( int i = 0 ; i < initialSize ; i++ ) {
+			Work work = queue.get( i );
+			queue.set( i, null ); // help GC and avoid 2 loaded queues in memory
+			Class entityClass = Hibernate.getClass( work.getEntity() );
+			DocumentBuilder<Object> builder = searchFactory.getDocumentBuilders().get( entityClass );
+			if ( builder == null ) return; //or exception?
+			builder.addWorkToQueue(work.getEntity(), work.getId(), work.getType(), luceneQueue, searchFactory);
+		}
+
+		Runnable processor = backendQueueProcessorFactory.getProcessor( luceneQueue );
+		if ( sync ) {
+			processor.run();
+		}
+		else {
+			executorService.execute( processor );
+		}
+	}
+
+	public void cancelWork(List<Work> queue) {
+		queue.clear();
+	}
+
+	@Override
+	public void finalize() throws Throwable {
+		super.finalize();
+		//gracefully stop
+		//TODO move to the SF close lifecycle
+		if ( executorService != null && !executorService.isShutdown() ) executorService.shutdown();
+	}
+
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/PostTransactionWorkQueueSynchronization.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/backend/impl/PostTransactionWorkQueueSynchronization.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/PostTransactionWorkQueueSynchronization.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,62 +0,0 @@
-//$Id: $
-package org.hibernate.search.backend.impl;
-
-import java.util.List;
-import java.util.ArrayList;
-import java.io.Serializable;
-import javax.transaction.Status;
-import javax.transaction.Synchronization;
-
-import org.hibernate.search.backend.QueueingProcessor;
-import org.hibernate.search.backend.LuceneWork;
-import org.hibernate.search.backend.WorkType;
-import org.hibernate.search.backend.Work;
-import org.hibernate.search.util.WeakIdentityHashMap;
-
-/**
- * Execute some work inside a transaction sychronization
- *
- * @author Emmanuel Bernard
- */
-public class PostTransactionWorkQueueSynchronization implements Synchronization {
-	private QueueingProcessor queueingProcessor;
-	private boolean consumed;
-	private WeakIdentityHashMap queuePerTransaction;
-	private List<Work> queue = new ArrayList<Work>();
-
-	/**
-	 * in transaction work
-	 */
-	public PostTransactionWorkQueueSynchronization(QueueingProcessor queueingProcessor, WeakIdentityHashMap queuePerTransaction) {
-		this.queueingProcessor = queueingProcessor;
-		this.queuePerTransaction = queuePerTransaction;
-	}
-
-	public void add(Object entity, Serializable id, WorkType workType) {
-		queueingProcessor.add( entity, id, workType, queue );
-	}
-
-	public boolean isConsumed() {
-		return consumed;
-	}
-
-	public void beforeCompletion() {
-	}
-
-	public void afterCompletion(int i) {
-		try {
-			if ( Status.STATUS_COMMITTED == i ) {
-				queueingProcessor.performWork(queue);
-			}
-			else {
-				queueingProcessor.cancelWork(queue);
-			}
-		}
-		finally {
-			consumed = true;
-			//clean the Synchronization per Transaction
-			//not needed stricto sensus but a cleaner approach and faster than the GC
-			if (queuePerTransaction != null) queuePerTransaction.removeValue( this ); 
-		}
-	}
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/PostTransactionWorkQueueSynchronization.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/backend/impl/PostTransactionWorkQueueSynchronization.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/PostTransactionWorkQueueSynchronization.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/PostTransactionWorkQueueSynchronization.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,62 @@
+//$Id: $
+package org.hibernate.search.backend.impl;
+
+import java.util.List;
+import java.util.ArrayList;
+import java.io.Serializable;
+import javax.transaction.Status;
+import javax.transaction.Synchronization;
+
+import org.hibernate.search.backend.QueueingProcessor;
+import org.hibernate.search.backend.LuceneWork;
+import org.hibernate.search.backend.WorkType;
+import org.hibernate.search.backend.Work;
+import org.hibernate.search.util.WeakIdentityHashMap;
+
+/**
+ * Execute some work inside a transaction sychronization
+ *
+ * @author Emmanuel Bernard
+ */
+public class PostTransactionWorkQueueSynchronization implements Synchronization {
+	private QueueingProcessor queueingProcessor;
+	private boolean consumed;
+	private WeakIdentityHashMap queuePerTransaction;
+	private List<Work> queue = new ArrayList<Work>();
+
+	/**
+	 * in transaction work
+	 */
+	public PostTransactionWorkQueueSynchronization(QueueingProcessor queueingProcessor, WeakIdentityHashMap queuePerTransaction) {
+		this.queueingProcessor = queueingProcessor;
+		this.queuePerTransaction = queuePerTransaction;
+	}
+
+	public void add(Object entity, Serializable id, WorkType workType) {
+		queueingProcessor.add( entity, id, workType, queue );
+	}
+
+	public boolean isConsumed() {
+		return consumed;
+	}
+
+	public void beforeCompletion() {
+	}
+
+	public void afterCompletion(int i) {
+		try {
+			if ( Status.STATUS_COMMITTED == i ) {
+				queueingProcessor.performWork(queue);
+			}
+			else {
+				queueingProcessor.cancelWork(queue);
+			}
+		}
+		finally {
+			consumed = true;
+			//clean the Synchronization per Transaction
+			//not needed stricto sensus but a cleaner approach and faster than the GC
+			if (queuePerTransaction != null) queuePerTransaction.removeValue( this ); 
+		}
+	}
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/TransactionalWorker.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/backend/impl/TransactionalWorker.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/TransactionalWorker.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,56 +0,0 @@
-//$Id: $
-package org.hibernate.search.backend.impl;
-
-import java.util.Properties;
-import java.util.List;
-import java.util.ArrayList;
-import java.io.Serializable;
-
-import org.hibernate.search.backend.Worker;
-import org.hibernate.search.backend.LuceneWork;
-import org.hibernate.search.backend.QueueingProcessor;
-import org.hibernate.search.backend.WorkType;
-import org.hibernate.search.backend.Work;
-import org.hibernate.search.backend.impl.BatchedQueueingProcessor;
-import org.hibernate.search.util.WeakIdentityHashMap;
-import org.hibernate.search.SearchFactory;
-import org.hibernate.event.EventSource;
-import org.hibernate.Transaction;
-
-/**
- * Queue works per transaction.
- * If out of transaction, the work is executed right away
- *
- * When <code>hibernate.search.worker.type</code> is set to <code>async</code>
- * the work is done in a  
- *
- * @author Emmanuel Bernard
- */
-public class TransactionalWorker implements Worker {
-	//not a synchronized map since for a given transaction, we have not concurrent access
-	protected WeakIdentityHashMap synchronizationPerTransaction = new WeakIdentityHashMap();
-	private QueueingProcessor queueingProcessor;
-
-	public void performWork(Object entity, Serializable id, WorkType workType, EventSource session) {
-		if ( session.isTransactionInProgress() ) {
-			Transaction transaction = session.getTransaction();
-			PostTransactionWorkQueueSynchronization txSync = (PostTransactionWorkQueueSynchronization)
-					synchronizationPerTransaction.get( transaction );
-			if ( txSync == null || txSync.isConsumed() ) {
-				txSync = new PostTransactionWorkQueueSynchronization( queueingProcessor, synchronizationPerTransaction );
-				transaction.registerSynchronization( txSync );
-				synchronizationPerTransaction.put(transaction, txSync);
-			}
-			txSync.add( entity, id, workType );
-		}
-		else {
-			List<Work> queue = new ArrayList<Work>(2); //one work can be split
-			queueingProcessor.add( entity, id, workType, queue );
-			queueingProcessor.performWork( queue );
-		}
-	}
-
-	public void initialize(Properties props, SearchFactory searchFactory) {
-		this.queueingProcessor = new BatchedQueueingProcessor( searchFactory, props );
-	}
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/TransactionalWorker.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/backend/impl/TransactionalWorker.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/TransactionalWorker.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/TransactionalWorker.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,56 @@
+//$Id: $
+package org.hibernate.search.backend.impl;
+
+import java.util.Properties;
+import java.util.List;
+import java.util.ArrayList;
+import java.io.Serializable;
+
+import org.hibernate.search.backend.Worker;
+import org.hibernate.search.backend.LuceneWork;
+import org.hibernate.search.backend.QueueingProcessor;
+import org.hibernate.search.backend.WorkType;
+import org.hibernate.search.backend.Work;
+import org.hibernate.search.backend.impl.BatchedQueueingProcessor;
+import org.hibernate.search.util.WeakIdentityHashMap;
+import org.hibernate.search.SearchFactory;
+import org.hibernate.event.EventSource;
+import org.hibernate.Transaction;
+
+/**
+ * Queue works per transaction.
+ * If out of transaction, the work is executed right away
+ *
+ * When <code>hibernate.search.worker.type</code> is set to <code>async</code>
+ * the work is done in a  
+ *
+ * @author Emmanuel Bernard
+ */
+public class TransactionalWorker implements Worker {
+	//not a synchronized map since for a given transaction, we have not concurrent access
+	protected WeakIdentityHashMap synchronizationPerTransaction = new WeakIdentityHashMap();
+	private QueueingProcessor queueingProcessor;
+
+	public void performWork(Object entity, Serializable id, WorkType workType, EventSource session) {
+		if ( session.isTransactionInProgress() ) {
+			Transaction transaction = session.getTransaction();
+			PostTransactionWorkQueueSynchronization txSync = (PostTransactionWorkQueueSynchronization)
+					synchronizationPerTransaction.get( transaction );
+			if ( txSync == null || txSync.isConsumed() ) {
+				txSync = new PostTransactionWorkQueueSynchronization( queueingProcessor, synchronizationPerTransaction );
+				transaction.registerSynchronization( txSync );
+				synchronizationPerTransaction.put(transaction, txSync);
+			}
+			txSync.add( entity, id, workType );
+		}
+		else {
+			List<Work> queue = new ArrayList<Work>(2); //one work can be split
+			queueingProcessor.add( entity, id, workType, queue );
+			queueingProcessor.performWork( queue );
+		}
+	}
+
+	public void initialize(Properties props, SearchFactory searchFactory) {
+		this.queueingProcessor = new BatchedQueueingProcessor( searchFactory, props );
+	}
+}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/jms (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/backend/impl/jms)

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/jms/AbstractJMSHibernateSearchController.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/backend/impl/jms/AbstractJMSHibernateSearchController.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/jms/AbstractJMSHibernateSearchController.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,111 +0,0 @@
-//$Id: $
-package org.hibernate.search.backend.impl.jms;
-
-import java.util.List;
-import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
-import javax.jms.JMSException;
-import javax.jms.Message;
-import javax.jms.MessageListener;
-import javax.jms.ObjectMessage;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.hibernate.Session;
-import org.hibernate.search.SearchFactory;
-import org.hibernate.search.backend.LuceneWork;
-import org.hibernate.search.util.ContextHelper;
-
-/**
- * Implement the Hibernate Search controller responsible for processing the
- * work send through JMS by the slave nodes.
- *
- * Note the subclass implementation has to implements javax.jms.MessageListener
- * //TODO Ask Bill why it is required
- *
- * @author Emmanuel Bernard
- */
-public abstract class AbstractJMSHibernateSearchController implements MessageListener {
-	private static Log log = LogFactory.getLog( AbstractJMSHibernateSearchController.class );
-
-	/**
-	 * return the current or give a new session
-	 * This session is not used per se, but is the link to access the Search configuration
-	 *
-	 * A typical EJB 3.0 usecase would be to get the session from the container (injected)
-	 * eg in JBoss EJB 3.0
-	 * <code>
-	 * @PersistenceContext private Session session;
-	 *
-	 * protected Session getSession() {
-	 *     return session
-	 * }
-	 *
-	 * eg in any container
-	 * <code>
-	 * @PersistenceContext private EntityManager entityManager;
-	 *
-	 * protected Session getSession() {
-	 *     return (Session) entityManager.getdelegate();
-	 * }
-	 */
-	protected abstract Session getSession();
-
-	/**
-	 * Ensure to clean the resources after use.
-	 * If the session has been directly or indirectly injected, this method is empty
-	 */
-	protected abstract void cleanSessionIfNeeded(Session session);
-
-	/**
-	 * Process the Hibernate Search work queues received
-	 */
-	public void onMessage(Message message) {
-		if ( !( message instanceof ObjectMessage ) ) {
-			log.error( "Incorrect message type: " + message.getClass() );
-			return;
-		}
-		ObjectMessage objectMessage = (ObjectMessage) message;
-		List<LuceneWork> queue;
-		try {
-			queue = (List<LuceneWork>) objectMessage.getObject();
-		}
-		catch (JMSException e) {
-			log.error( "Unable to retrieve object from message: " + message.getClass(), e );
-			return;
-		}
-		catch (ClassCastException e) {
-			log.error( "Illegal object retrieved from message", e );
-			return;
-		}
-		Runnable worker = getWorker( queue );
-		worker.run();
-	}
-
-	private Runnable getWorker(List<LuceneWork> queue) {
-		//FIXME casting sucks becasue we do not control what get session from
-		Session session = getSession();
-		Runnable processor = null;
-
-		try {
-			SearchFactory factory = ContextHelper.getSearchFactory( session );
-			processor = factory.getBackendQueueProcessorFactory().getProcessor( queue );
-		}
-		finally {
-			cleanSessionIfNeeded(session);
-		}
-		return processor;
-	}
-
-	@PostConstruct
-	public void initialize() {
-		//init the source copy process
-		//TODO actually this is probably wrong since this is now part of the DP
-	}
-
-	@PreDestroy
-	public void shutdown() {
-		//stop the source copy process
-		//TODO actually this is probably wrong since this is now part of the DP
-	}
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/jms/AbstractJMSHibernateSearchController.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/backend/impl/jms/AbstractJMSHibernateSearchController.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/jms/AbstractJMSHibernateSearchController.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/jms/AbstractJMSHibernateSearchController.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,111 @@
+//$Id: $
+package org.hibernate.search.backend.impl.jms;
+
+import java.util.List;
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+import javax.jms.JMSException;
+import javax.jms.Message;
+import javax.jms.MessageListener;
+import javax.jms.ObjectMessage;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.hibernate.Session;
+import org.hibernate.search.SearchFactory;
+import org.hibernate.search.backend.LuceneWork;
+import org.hibernate.search.util.ContextHelper;
+
+/**
+ * Implement the Hibernate Search controller responsible for processing the
+ * work send through JMS by the slave nodes.
+ *
+ * Note the subclass implementation has to implements javax.jms.MessageListener
+ * //TODO Ask Bill why it is required
+ *
+ * @author Emmanuel Bernard
+ */
+public abstract class AbstractJMSHibernateSearchController implements MessageListener {
+	private static Log log = LogFactory.getLog( AbstractJMSHibernateSearchController.class );
+
+	/**
+	 * return the current or give a new session
+	 * This session is not used per se, but is the link to access the Search configuration
+	 *
+	 * A typical EJB 3.0 usecase would be to get the session from the container (injected)
+	 * eg in JBoss EJB 3.0
+	 * <code>
+	 * @PersistenceContext private Session session;
+	 *
+	 * protected Session getSession() {
+	 *     return session
+	 * }
+	 *
+	 * eg in any container
+	 * <code>
+	 * @PersistenceContext private EntityManager entityManager;
+	 *
+	 * protected Session getSession() {
+	 *     return (Session) entityManager.getdelegate();
+	 * }
+	 */
+	protected abstract Session getSession();
+
+	/**
+	 * Ensure to clean the resources after use.
+	 * If the session has been directly or indirectly injected, this method is empty
+	 */
+	protected abstract void cleanSessionIfNeeded(Session session);
+
+	/**
+	 * Process the Hibernate Search work queues received
+	 */
+	public void onMessage(Message message) {
+		if ( !( message instanceof ObjectMessage ) ) {
+			log.error( "Incorrect message type: " + message.getClass() );
+			return;
+		}
+		ObjectMessage objectMessage = (ObjectMessage) message;
+		List<LuceneWork> queue;
+		try {
+			queue = (List<LuceneWork>) objectMessage.getObject();
+		}
+		catch (JMSException e) {
+			log.error( "Unable to retrieve object from message: " + message.getClass(), e );
+			return;
+		}
+		catch (ClassCastException e) {
+			log.error( "Illegal object retrieved from message", e );
+			return;
+		}
+		Runnable worker = getWorker( queue );
+		worker.run();
+	}
+
+	private Runnable getWorker(List<LuceneWork> queue) {
+		//FIXME casting sucks becasue we do not control what get session from
+		Session session = getSession();
+		Runnable processor = null;
+
+		try {
+			SearchFactory factory = ContextHelper.getSearchFactory( session );
+			processor = factory.getBackendQueueProcessorFactory().getProcessor( queue );
+		}
+		finally {
+			cleanSessionIfNeeded(session);
+		}
+		return processor;
+	}
+
+	@PostConstruct
+	public void initialize() {
+		//init the source copy process
+		//TODO actually this is probably wrong since this is now part of the DP
+	}
+
+	@PreDestroy
+	public void shutdown() {
+		//stop the source copy process
+		//TODO actually this is probably wrong since this is now part of the DP
+	}
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/jms/JMSBackendQueueProcessor.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/backend/impl/jms/JMSBackendQueueProcessor.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/jms/JMSBackendQueueProcessor.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,51 +0,0 @@
-//$Id: $
-package org.hibernate.search.backend.impl.jms;
-
-import java.io.Serializable;
-import java.util.List;
-import javax.jms.JMSException;
-import javax.jms.ObjectMessage;
-import javax.jms.QueueConnection;
-import javax.jms.QueueSender;
-import javax.jms.QueueSession;
-
-import org.hibernate.HibernateException;
-import org.hibernate.search.backend.LuceneWork;
-
-/**
- * @author Emmanuel Bernard
- */
-public class JMSBackendQueueProcessor implements Runnable {
-	private List<LuceneWork> queue;
-	private JMSBackendQueueProcessorFactory factory;
-
-	public JMSBackendQueueProcessor(List<LuceneWork> queue,
-									JMSBackendQueueProcessorFactory jmsBackendQueueProcessorFactory) {
-		this.queue = queue;
-		this.factory = jmsBackendQueueProcessorFactory;
-	}
-
-	public void run() {
-		factory.prepareJMSTools();
-		QueueConnection cnn;
-		QueueSender sender;
-		QueueSession session;
-		try {
-			cnn = factory.getJMSFactory().createQueueConnection();
-			//TODO make transacted parameterized
-			session = cnn.createQueueSession( false, QueueSession.AUTO_ACKNOWLEDGE );
-
-			ObjectMessage message = session.createObjectMessage();
-			message.setObject( (Serializable) this.queue );
-
-			sender = session.createSender( factory.getJmsQueue() );
-			sender.send( message );
-
-			session.close();
-			cnn.close();
-		}
-		catch (JMSException e) {
-			throw new HibernateException( "Unable to send Search work to JMS queue: " + factory.getJmsQueueName(), e );
-		}
-	}
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/jms/JMSBackendQueueProcessor.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/backend/impl/jms/JMSBackendQueueProcessor.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/jms/JMSBackendQueueProcessor.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/jms/JMSBackendQueueProcessor.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,51 @@
+//$Id: $
+package org.hibernate.search.backend.impl.jms;
+
+import java.io.Serializable;
+import java.util.List;
+import javax.jms.JMSException;
+import javax.jms.ObjectMessage;
+import javax.jms.QueueConnection;
+import javax.jms.QueueSender;
+import javax.jms.QueueSession;
+
+import org.hibernate.HibernateException;
+import org.hibernate.search.backend.LuceneWork;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class JMSBackendQueueProcessor implements Runnable {
+	private List<LuceneWork> queue;
+	private JMSBackendQueueProcessorFactory factory;
+
+	public JMSBackendQueueProcessor(List<LuceneWork> queue,
+									JMSBackendQueueProcessorFactory jmsBackendQueueProcessorFactory) {
+		this.queue = queue;
+		this.factory = jmsBackendQueueProcessorFactory;
+	}
+
+	public void run() {
+		factory.prepareJMSTools();
+		QueueConnection cnn;
+		QueueSender sender;
+		QueueSession session;
+		try {
+			cnn = factory.getJMSFactory().createQueueConnection();
+			//TODO make transacted parameterized
+			session = cnn.createQueueSession( false, QueueSession.AUTO_ACKNOWLEDGE );
+
+			ObjectMessage message = session.createObjectMessage();
+			message.setObject( (Serializable) this.queue );
+
+			sender = session.createSender( factory.getJmsQueue() );
+			sender.send( message );
+
+			session.close();
+			cnn.close();
+		}
+		catch (JMSException e) {
+			throw new HibernateException( "Unable to send Search work to JMS queue: " + factory.getJmsQueueName(), e );
+		}
+	}
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/jms/JMSBackendQueueProcessorFactory.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/backend/impl/jms/JMSBackendQueueProcessorFactory.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/jms/JMSBackendQueueProcessorFactory.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,119 +0,0 @@
-//$Id: $
-package org.hibernate.search.backend.impl.jms;
-
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Properties;
-import javax.jms.Queue;
-import javax.jms.QueueConnectionFactory;
-import javax.naming.Context;
-import javax.naming.InitialContext;
-import javax.naming.NamingException;
-
-import org.hibernate.search.Environment;
-import org.hibernate.search.SearchException;
-import org.hibernate.search.SearchFactory;
-import org.hibernate.search.backend.BackendQueueProcessorFactory;
-import org.hibernate.search.backend.LuceneWork;
-
-/**
- * @author Emmanuel Bernard
- */
-public class JMSBackendQueueProcessorFactory implements BackendQueueProcessorFactory {
-	private String jmsQueueName;
-	private String jmsConnectionFactoryName;
-	private static final String JNDI_PREFIX = Environment.WORKER_PREFIX + "jndi.";
-	private Properties properties;
-	private Queue jmsQueue;
-	private QueueConnectionFactory factory;
-	public static final String JMS_CONNECTION_FACTORY = Environment.WORKER_PREFIX + "jms.connection_factory";
-	public static final String JMS_QUEUE = Environment.WORKER_PREFIX + "jms.queue";
-
-	public void initialize(Properties props, SearchFactory searchFactory) {
-		//TODO proper exception if jms queues and connecitons are not there
-		this.properties = props;
-		this.jmsConnectionFactoryName = props.getProperty( JMS_CONNECTION_FACTORY );
-		this.jmsQueueName = props.getProperty( JMS_QUEUE );
-		prepareJMSTools();
-	}
-
-	public Runnable getProcessor(List<LuceneWork> queue) {
-		return new JMSBackendQueueProcessor( queue, this );
-	}
-
-
-	public QueueConnectionFactory getJMSFactory() {
-		return factory;
-	}
-
-	public Queue getJmsQueue() {
-		return jmsQueue;
-	}
-
-
-	public String getJmsQueueName() {
-		return jmsQueueName;
-	}
-
-	public void prepareJMSTools() {
-		if ( jmsQueue != null && factory != null ) return;
-		try {
-			InitialContext initialContext = getInitialContext( properties );
-			factory = (QueueConnectionFactory) initialContext.lookup( jmsConnectionFactoryName );
-			jmsQueue = (Queue) initialContext.lookup( jmsQueueName );
-
-		}
-		catch (NamingException e) {
-			throw new SearchException( "Unable to lookup Search queue ("
-					+ ( jmsQueueName != null ?
-					jmsQueueName :
-					"null" ) + ") and connection factory ("
-					+ ( jmsConnectionFactoryName != null ?
-					jmsConnectionFactoryName :
-					"null" ) + ")",
-					e
-			);
-		}
-	}
-
-	private InitialContext getInitialContext(Properties properties) throws NamingException {
-		Properties jndiProps = getJndiProperties( properties );
-		if ( jndiProps.size() == 0 ) {
-			return new InitialContext();
-		}
-		else {
-			return new InitialContext( jndiProps );
-		}
-	}
-
-	public static Properties getJndiProperties(Properties properties) {
-
-		HashSet specialProps = new HashSet();
-		specialProps.add( JNDI_PREFIX + "class" );
-		specialProps.add( JNDI_PREFIX + "url" );
-
-		Iterator iter = properties.keySet().iterator();
-		Properties result = new Properties();
-		while ( iter.hasNext() ) {
-			String prop = (String) iter.next();
-			if ( prop.indexOf( JNDI_PREFIX ) > -1 && !specialProps.contains( prop ) ) {
-				result.setProperty(
-						prop.substring( JNDI_PREFIX.length() + 1 ),
-						properties.getProperty( prop )
-				);
-			}
-		}
-
-		String jndiClass = properties.getProperty( JNDI_PREFIX + "class" );
-		String jndiURL = properties.getProperty( JNDI_PREFIX + "url" );
-		// we want to be able to just use the defaults,
-		// if JNDI environment properties are not supplied
-		// so don't put null in anywhere
-		if ( jndiClass != null ) result.put( Context.INITIAL_CONTEXT_FACTORY, jndiClass );
-		if ( jndiURL != null ) result.put( Context.PROVIDER_URL, jndiURL );
-
-		return result;
-	}
-
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/jms/JMSBackendQueueProcessorFactory.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/backend/impl/jms/JMSBackendQueueProcessorFactory.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/jms/JMSBackendQueueProcessorFactory.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/jms/JMSBackendQueueProcessorFactory.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,119 @@
+//$Id: $
+package org.hibernate.search.backend.impl.jms;
+
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Properties;
+import javax.jms.Queue;
+import javax.jms.QueueConnectionFactory;
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+
+import org.hibernate.search.Environment;
+import org.hibernate.search.SearchException;
+import org.hibernate.search.SearchFactory;
+import org.hibernate.search.backend.BackendQueueProcessorFactory;
+import org.hibernate.search.backend.LuceneWork;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class JMSBackendQueueProcessorFactory implements BackendQueueProcessorFactory {
+	private String jmsQueueName;
+	private String jmsConnectionFactoryName;
+	private static final String JNDI_PREFIX = Environment.WORKER_PREFIX + "jndi.";
+	private Properties properties;
+	private Queue jmsQueue;
+	private QueueConnectionFactory factory;
+	public static final String JMS_CONNECTION_FACTORY = Environment.WORKER_PREFIX + "jms.connection_factory";
+	public static final String JMS_QUEUE = Environment.WORKER_PREFIX + "jms.queue";
+
+	public void initialize(Properties props, SearchFactory searchFactory) {
+		//TODO proper exception if jms queues and connecitons are not there
+		this.properties = props;
+		this.jmsConnectionFactoryName = props.getProperty( JMS_CONNECTION_FACTORY );
+		this.jmsQueueName = props.getProperty( JMS_QUEUE );
+		prepareJMSTools();
+	}
+
+	public Runnable getProcessor(List<LuceneWork> queue) {
+		return new JMSBackendQueueProcessor( queue, this );
+	}
+
+
+	public QueueConnectionFactory getJMSFactory() {
+		return factory;
+	}
+
+	public Queue getJmsQueue() {
+		return jmsQueue;
+	}
+
+
+	public String getJmsQueueName() {
+		return jmsQueueName;
+	}
+
+	public void prepareJMSTools() {
+		if ( jmsQueue != null && factory != null ) return;
+		try {
+			InitialContext initialContext = getInitialContext( properties );
+			factory = (QueueConnectionFactory) initialContext.lookup( jmsConnectionFactoryName );
+			jmsQueue = (Queue) initialContext.lookup( jmsQueueName );
+
+		}
+		catch (NamingException e) {
+			throw new SearchException( "Unable to lookup Search queue ("
+					+ ( jmsQueueName != null ?
+					jmsQueueName :
+					"null" ) + ") and connection factory ("
+					+ ( jmsConnectionFactoryName != null ?
+					jmsConnectionFactoryName :
+					"null" ) + ")",
+					e
+			);
+		}
+	}
+
+	private InitialContext getInitialContext(Properties properties) throws NamingException {
+		Properties jndiProps = getJndiProperties( properties );
+		if ( jndiProps.size() == 0 ) {
+			return new InitialContext();
+		}
+		else {
+			return new InitialContext( jndiProps );
+		}
+	}
+
+	public static Properties getJndiProperties(Properties properties) {
+
+		HashSet specialProps = new HashSet();
+		specialProps.add( JNDI_PREFIX + "class" );
+		specialProps.add( JNDI_PREFIX + "url" );
+
+		Iterator iter = properties.keySet().iterator();
+		Properties result = new Properties();
+		while ( iter.hasNext() ) {
+			String prop = (String) iter.next();
+			if ( prop.indexOf( JNDI_PREFIX ) > -1 && !specialProps.contains( prop ) ) {
+				result.setProperty(
+						prop.substring( JNDI_PREFIX.length() + 1 ),
+						properties.getProperty( prop )
+				);
+			}
+		}
+
+		String jndiClass = properties.getProperty( JNDI_PREFIX + "class" );
+		String jndiURL = properties.getProperty( JNDI_PREFIX + "url" );
+		// we want to be able to just use the defaults,
+		// if JNDI environment properties are not supplied
+		// so don't put null in anywhere
+		if ( jndiClass != null ) result.put( Context.INITIAL_CONTEXT_FACTORY, jndiClass );
+		if ( jndiURL != null ) result.put( Context.PROVIDER_URL, jndiURL );
+
+		return result;
+	}
+
+}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/lucene (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/backend/impl/lucene)

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/lucene/LuceneBackendQueueProcessor.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/backend/impl/lucene/LuceneBackendQueueProcessor.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/lucene/LuceneBackendQueueProcessor.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,69 +0,0 @@
-//$Id: $
-package org.hibernate.search.backend.impl.lucene;
-
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-
-import org.hibernate.search.SearchFactory;
-import org.hibernate.search.backend.AddLuceneWork;
-import org.hibernate.search.backend.LuceneWork;
-import org.hibernate.search.backend.Workspace;
-
-/**
- * Apply the operations to Lucene directories
- * avoiding deadlocks
- *
- * @author Emmanuel Bernard
- */
-public class LuceneBackendQueueProcessor implements Runnable {
-	private List<LuceneWork> queue;
-	private SearchFactory searchFactory;
-
-	public LuceneBackendQueueProcessor(List<LuceneWork> queue, SearchFactory searchFactory) {
-		this.queue = queue;
-		this.searchFactory = searchFactory;
-	}
-
-	public void run() {
-		Workspace workspace;
-		LuceneWorker worker;
-		workspace = new Workspace( searchFactory );
-		worker = new LuceneWorker( workspace );
-		try {
-			deadlockFreeQueue(queue, workspace);
-			for ( LuceneWork luceneWork : queue ) {
-				worker.performWork( luceneWork );
-			}
-		}
-		finally {
-			workspace.clean();
-			queue.clear();
-		}
-	}
-
-	/**
-	 * one must lock the directory providers in the exact same order to avoid
-	 * dead lock between concurrent threads or processes
-	 * To achieve that, the work will be done per directory provider
-	 */
-	private void deadlockFreeQueue(List<LuceneWork> queue, final Workspace workspace) {
-		Collections.sort( queue, new Comparator<LuceneWork>() {
-			public int compare(LuceneWork o1, LuceneWork o2) {
-				long h1 = getWorkHashCode( o1, workspace );
-				long h2 = getWorkHashCode( o2, workspace );
-				return h1 < h2 ?
-						-1 :
-						h1 == h2 ?
-							0 :
-							1;
-			}
-		} );
-	}
-
-	private long getWorkHashCode(LuceneWork luceneWork, Workspace workspace) {
-		long h = workspace.getDocumentBuilder( luceneWork.getEntityClass() ).hashCode() * 2;
-		if ( luceneWork instanceof AddLuceneWork ) h+=1; //addwork after deleteWork
-		return h;
-	}
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/lucene/LuceneBackendQueueProcessor.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/backend/impl/lucene/LuceneBackendQueueProcessor.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/lucene/LuceneBackendQueueProcessor.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/lucene/LuceneBackendQueueProcessor.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,69 @@
+//$Id: $
+package org.hibernate.search.backend.impl.lucene;
+
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+import org.hibernate.search.SearchFactory;
+import org.hibernate.search.backend.AddLuceneWork;
+import org.hibernate.search.backend.LuceneWork;
+import org.hibernate.search.backend.Workspace;
+
+/**
+ * Apply the operations to Lucene directories
+ * avoiding deadlocks
+ *
+ * @author Emmanuel Bernard
+ */
+public class LuceneBackendQueueProcessor implements Runnable {
+	private List<LuceneWork> queue;
+	private SearchFactory searchFactory;
+
+	public LuceneBackendQueueProcessor(List<LuceneWork> queue, SearchFactory searchFactory) {
+		this.queue = queue;
+		this.searchFactory = searchFactory;
+	}
+
+	public void run() {
+		Workspace workspace;
+		LuceneWorker worker;
+		workspace = new Workspace( searchFactory );
+		worker = new LuceneWorker( workspace );
+		try {
+			deadlockFreeQueue(queue, workspace);
+			for ( LuceneWork luceneWork : queue ) {
+				worker.performWork( luceneWork );
+			}
+		}
+		finally {
+			workspace.clean();
+			queue.clear();
+		}
+	}
+
+	/**
+	 * one must lock the directory providers in the exact same order to avoid
+	 * dead lock between concurrent threads or processes
+	 * To achieve that, the work will be done per directory provider
+	 */
+	private void deadlockFreeQueue(List<LuceneWork> queue, final Workspace workspace) {
+		Collections.sort( queue, new Comparator<LuceneWork>() {
+			public int compare(LuceneWork o1, LuceneWork o2) {
+				long h1 = getWorkHashCode( o1, workspace );
+				long h2 = getWorkHashCode( o2, workspace );
+				return h1 < h2 ?
+						-1 :
+						h1 == h2 ?
+							0 :
+							1;
+			}
+		} );
+	}
+
+	private long getWorkHashCode(LuceneWork luceneWork, Workspace workspace) {
+		long h = workspace.getDocumentBuilder( luceneWork.getEntityClass() ).hashCode() * 2;
+		if ( luceneWork instanceof AddLuceneWork ) h+=1; //addwork after deleteWork
+		return h;
+	}
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/lucene/LuceneBackendQueueProcessorFactory.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/backend/impl/lucene/LuceneBackendQueueProcessorFactory.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/lucene/LuceneBackendQueueProcessorFactory.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,24 +0,0 @@
-//$Id: $
-package org.hibernate.search.backend.impl.lucene;
-
-import java.util.Properties;
-import java.util.List;
-
-import org.hibernate.search.SearchFactory;
-import org.hibernate.search.backend.BackendQueueProcessorFactory;
-import org.hibernate.search.backend.LuceneWork;
-
-/**
- * @author Emmanuel Bernard
- */
-public class LuceneBackendQueueProcessorFactory implements BackendQueueProcessorFactory {
-	private SearchFactory searchFactory;
-
-	public void initialize(Properties props, SearchFactory searchFactory) {
-		this.searchFactory = searchFactory;
-	}
-
-	public Runnable getProcessor(List<LuceneWork> queue) {
-		return new LuceneBackendQueueProcessor( queue, searchFactory );
-	}
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/lucene/LuceneBackendQueueProcessorFactory.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/backend/impl/lucene/LuceneBackendQueueProcessorFactory.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/lucene/LuceneBackendQueueProcessorFactory.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/lucene/LuceneBackendQueueProcessorFactory.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,24 @@
+//$Id: $
+package org.hibernate.search.backend.impl.lucene;
+
+import java.util.Properties;
+import java.util.List;
+
+import org.hibernate.search.SearchFactory;
+import org.hibernate.search.backend.BackendQueueProcessorFactory;
+import org.hibernate.search.backend.LuceneWork;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class LuceneBackendQueueProcessorFactory implements BackendQueueProcessorFactory {
+	private SearchFactory searchFactory;
+
+	public void initialize(Properties props, SearchFactory searchFactory) {
+		this.searchFactory = searchFactory;
+	}
+
+	public Runnable getProcessor(List<LuceneWork> queue) {
+		return new LuceneBackendQueueProcessor( queue, searchFactory );
+	}
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/lucene/LuceneWorker.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/backend/impl/lucene/LuceneWorker.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/lucene/LuceneWorker.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,109 +0,0 @@
-//$Id: $
-package org.hibernate.search.backend.impl.lucene;
-
-import java.io.IOException;
-import java.io.Serializable;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.lucene.document.Document;
-import org.apache.lucene.index.IndexReader;
-import org.apache.lucene.index.IndexWriter;
-import org.apache.lucene.index.Term;
-import org.apache.lucene.index.TermDocs;
-import org.hibernate.annotations.common.AssertionFailure;
-import org.hibernate.search.SearchException;
-import org.hibernate.search.backend.AddLuceneWork;
-import org.hibernate.search.backend.DeleteLuceneWork;
-import org.hibernate.search.backend.LuceneWork;
-import org.hibernate.search.backend.Workspace;
-import org.hibernate.search.engine.DocumentBuilder;
-
-/**
- * Stateless implementation that perform a work
- *
- * @author Emmanuel Bernard
- */
-public class LuceneWorker {
-	private Workspace workspace;
-	private static Log log = LogFactory.getLog( LuceneWorker.class );
-
-	public LuceneWorker(Workspace workspace) {
-		this.workspace = workspace;
-	}
-
-	public void performWork(LuceneWork luceneWork) {
-		if ( AddLuceneWork.class.isAssignableFrom( luceneWork.getClass() ) ) {
-			performWork( (AddLuceneWork) luceneWork );
-		}
-		else if ( DeleteLuceneWork.class.isAssignableFrom( luceneWork.getClass() ) ) {
-			performWork( (DeleteLuceneWork) luceneWork );
-		}
-		else {
-			throw new AssertionFailure( "Unknown work type: " + luceneWork.getClass() );
-		}
-	}
-
-	public void performWork(AddLuceneWork work) {
-		Class entity = work.getEntityClass();
-		Serializable id = work.getId();
-		Document document = work.getDocument();
-		add( entity, id, document );
-	}
-
-	private void add(Class entity, Serializable id, Document document) {
-		if ( log.isTraceEnabled() )
-			log.trace( "add to Lucene index: " + entity + "#" + id + ": " + document );
-		IndexWriter writer = workspace.getIndexWriter( entity );
-		try {
-			writer.addDocument( document );
-		}
-		catch (IOException e) {
-			throw new SearchException( "Unable to add to Lucene index: " + entity + "#" + id, e );
-		}
-	}
-
-	public void performWork(DeleteLuceneWork work) {
-		Class entity = work.getEntityClass();
-		Serializable id = work.getId();
-		remove( entity, id );
-	}
-
-	private void remove(Class entity, Serializable id) {
-		/**
-		 * even with Lucene 2.1, use of indexWriter to delte is not an option
-		 * We can only delete by term, and the index doesn't have a termt that
-		 * uniquely identify the entry. See logic below
-		 */
-		log.trace( "remove from Lucene index: " + entity + "#" + id );
-		DocumentBuilder builder = workspace.getDocumentBuilder( entity );
-		Term term = builder.getTerm( id );
-		IndexReader reader = workspace.getIndexReader( entity );
-		TermDocs termDocs = null;
-		try {
-			//TODO is there a faster way?
-			//TODO include TermDocs into the workspace?
-			termDocs = reader.termDocs( term );
-			String entityName = entity.getName();
-			while ( termDocs.next() ) {
-				int docIndex = termDocs.doc();
-				if ( entityName.equals( reader.document( docIndex ).get( DocumentBuilder.CLASS_FIELDNAME ) ) ) {
-					//remove only the one of the right class
-					//loop all to remove all the matches (defensive code)
-					reader.deleteDocument( docIndex );
-				}
-			}
-		}
-		catch (Exception e) {
-			throw new SearchException( "Unable to remove from Lucene index: " + entity + "#" + id, e );
-		}
-		finally {
-			if (termDocs != null) try {
-				termDocs.close();
-			}
-			catch (IOException e) {
-				log.warn( "Unable to close termDocs properly", e);
-			}
-		}
-	}
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/lucene/LuceneWorker.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/backend/impl/lucene/LuceneWorker.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/lucene/LuceneWorker.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/lucene/LuceneWorker.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,109 @@
+//$Id: $
+package org.hibernate.search.backend.impl.lucene;
+
+import java.io.IOException;
+import java.io.Serializable;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.lucene.document.Document;
+import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexWriter;
+import org.apache.lucene.index.Term;
+import org.apache.lucene.index.TermDocs;
+import org.hibernate.annotations.common.AssertionFailure;
+import org.hibernate.search.SearchException;
+import org.hibernate.search.backend.AddLuceneWork;
+import org.hibernate.search.backend.DeleteLuceneWork;
+import org.hibernate.search.backend.LuceneWork;
+import org.hibernate.search.backend.Workspace;
+import org.hibernate.search.engine.DocumentBuilder;
+
+/**
+ * Stateless implementation that perform a work
+ *
+ * @author Emmanuel Bernard
+ */
+public class LuceneWorker {
+	private Workspace workspace;
+	private static Log log = LogFactory.getLog( LuceneWorker.class );
+
+	public LuceneWorker(Workspace workspace) {
+		this.workspace = workspace;
+	}
+
+	public void performWork(LuceneWork luceneWork) {
+		if ( AddLuceneWork.class.isAssignableFrom( luceneWork.getClass() ) ) {
+			performWork( (AddLuceneWork) luceneWork );
+		}
+		else if ( DeleteLuceneWork.class.isAssignableFrom( luceneWork.getClass() ) ) {
+			performWork( (DeleteLuceneWork) luceneWork );
+		}
+		else {
+			throw new AssertionFailure( "Unknown work type: " + luceneWork.getClass() );
+		}
+	}
+
+	public void performWork(AddLuceneWork work) {
+		Class entity = work.getEntityClass();
+		Serializable id = work.getId();
+		Document document = work.getDocument();
+		add( entity, id, document );
+	}
+
+	private void add(Class entity, Serializable id, Document document) {
+		if ( log.isTraceEnabled() )
+			log.trace( "add to Lucene index: " + entity + "#" + id + ": " + document );
+		IndexWriter writer = workspace.getIndexWriter( entity );
+		try {
+			writer.addDocument( document );
+		}
+		catch (IOException e) {
+			throw new SearchException( "Unable to add to Lucene index: " + entity + "#" + id, e );
+		}
+	}
+
+	public void performWork(DeleteLuceneWork work) {
+		Class entity = work.getEntityClass();
+		Serializable id = work.getId();
+		remove( entity, id );
+	}
+
+	private void remove(Class entity, Serializable id) {
+		/**
+		 * even with Lucene 2.1, use of indexWriter to delte is not an option
+		 * We can only delete by term, and the index doesn't have a termt that
+		 * uniquely identify the entry. See logic below
+		 */
+		log.trace( "remove from Lucene index: " + entity + "#" + id );
+		DocumentBuilder builder = workspace.getDocumentBuilder( entity );
+		Term term = builder.getTerm( id );
+		IndexReader reader = workspace.getIndexReader( entity );
+		TermDocs termDocs = null;
+		try {
+			//TODO is there a faster way?
+			//TODO include TermDocs into the workspace?
+			termDocs = reader.termDocs( term );
+			String entityName = entity.getName();
+			while ( termDocs.next() ) {
+				int docIndex = termDocs.doc();
+				if ( entityName.equals( reader.document( docIndex ).get( DocumentBuilder.CLASS_FIELDNAME ) ) ) {
+					//remove only the one of the right class
+					//loop all to remove all the matches (defensive code)
+					reader.deleteDocument( docIndex );
+				}
+			}
+		}
+		catch (Exception e) {
+			throw new SearchException( "Unable to remove from Lucene index: " + entity + "#" + id, e );
+		}
+		finally {
+			if (termDocs != null) try {
+				termDocs.close();
+			}
+			catch (IOException e) {
+				log.warn( "Unable to close termDocs properly", e);
+			}
+		}
+	}
+}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/bridge (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/bridge)

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/BridgeFactory.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/bridge/BridgeFactory.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/BridgeFactory.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,155 +0,0 @@
-//$Id: $
-package org.hibernate.search.bridge;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.hibernate.HibernateException;
-import org.hibernate.AssertionFailure;
-import org.hibernate.search.bridge.builtin.DateBridge;
-import org.hibernate.search.bridge.builtin.FloatBridge;
-import org.hibernate.search.bridge.builtin.LongBridge;
-import org.hibernate.search.bridge.builtin.BigIntegerBridge;
-import org.hibernate.search.bridge.builtin.StringBridge;
-import org.hibernate.search.bridge.builtin.IntegerBridge;
-import org.hibernate.search.bridge.builtin.BigDecimalBridge;
-import org.hibernate.search.bridge.builtin.DoubleBridge;
-import org.hibernate.search.bridge.builtin.ShortBridge;
-import org.hibernate.search.bridge.builtin.EnumBridge;
-import org.hibernate.search.bridge.builtin.BooleanBridge;
-import org.hibernate.search.annotations.Resolution;
-import org.hibernate.search.annotations.Parameter;
-import org.hibernate.annotations.common.reflection.XClass;
-import org.hibernate.annotations.common.reflection.XMember;
-
-/**
- * @author Emmanuel Bernard
- */
-public class BridgeFactory {
-	private static Map<String, FieldBridge> builtInBridges = new HashMap<String, FieldBridge>();
-
-	private BridgeFactory() {
-	}
-
-	public static final TwoWayFieldBridge DOUBLE = new TwoWayString2FieldBridgeAdaptor( new DoubleBridge() );
-
-	public static final TwoWayFieldBridge FLOAT = new TwoWayString2FieldBridgeAdaptor( new FloatBridge() );
-
-	public static final TwoWayFieldBridge SHORT = new TwoWayString2FieldBridgeAdaptor( new ShortBridge() );
-
-	public static final TwoWayFieldBridge INTEGER = new TwoWayString2FieldBridgeAdaptor( new IntegerBridge() );
-
-	public static final TwoWayFieldBridge LONG = new TwoWayString2FieldBridgeAdaptor( new LongBridge() );
-
-	public static final TwoWayFieldBridge BIG_INTEGER = new TwoWayString2FieldBridgeAdaptor( new BigIntegerBridge() );
-
-	public static final TwoWayFieldBridge BIG_DECIMAL = new TwoWayString2FieldBridgeAdaptor( new BigDecimalBridge() );
-
-	public static final TwoWayFieldBridge STRING = new TwoWayString2FieldBridgeAdaptor( new StringBridge() );
-
-	public static final TwoWayFieldBridge BOOLEAN = new TwoWayString2FieldBridgeAdaptor( new BooleanBridge() );
-
-	public static final FieldBridge DATE_YEAR = new String2FieldBridgeAdaptor( DateBridge.DATE_YEAR );
-	public static final FieldBridge DATE_MONTH = new String2FieldBridgeAdaptor( DateBridge.DATE_MONTH );
-	public static final FieldBridge DATE_DAY = new String2FieldBridgeAdaptor( DateBridge.DATE_DAY );
-	public static final FieldBridge DATE_HOUR = new String2FieldBridgeAdaptor( DateBridge.DATE_HOUR );
-	public static final FieldBridge DATE_MINUTE = new String2FieldBridgeAdaptor( DateBridge.DATE_MINUTE );
-	public static final FieldBridge DATE_SECOND = new String2FieldBridgeAdaptor( DateBridge.DATE_SECOND );
-	public static final TwoWayFieldBridge DATE_MILLISECOND =
-			new TwoWayString2FieldBridgeAdaptor( DateBridge.DATE_MILLISECOND );
-
-	static {
-		builtInBridges.put( Double.class.getName(), DOUBLE );
-		builtInBridges.put( double.class.getName(), DOUBLE );
-		builtInBridges.put( Float.class.getName(), FLOAT );
-		builtInBridges.put( float.class.getName(), FLOAT );
-		builtInBridges.put( Short.class.getName(), SHORT );
-		builtInBridges.put( short.class.getName(), SHORT );
-		builtInBridges.put( Integer.class.getName(), INTEGER );
-		builtInBridges.put( int.class.getName(), INTEGER );
-		builtInBridges.put( Long.class.getName(), LONG );
-		builtInBridges.put( long.class.getName(), LONG );
-		builtInBridges.put( BigInteger.class.getName(), BIG_INTEGER );
-		builtInBridges.put( BigDecimal.class.getName(), BIG_DECIMAL );
-		builtInBridges.put( String.class.getName(), STRING );
-		builtInBridges.put( Boolean.class.getName(), BOOLEAN );
-		builtInBridges.put( boolean.class.getName(), BOOLEAN );
-
-		builtInBridges.put( Date.class.getName(), DATE_MILLISECOND );
-	}
-
-	public static FieldBridge guessType(XMember member) {
-		FieldBridge bridge = null;
-		org.hibernate.search.annotations.FieldBridge bridgeAnn =
-				member.getAnnotation( org.hibernate.search.annotations.FieldBridge.class );
-		if ( bridgeAnn != null ) {
-			Class impl = bridgeAnn.impl();
-			try {
-				Object instance = impl.newInstance();
-				if ( FieldBridge.class.isAssignableFrom( impl ) ) {
-					bridge = (FieldBridge) instance;
-				}
-				else if ( org.hibernate.search.bridge.TwoWayStringBridge.class.isAssignableFrom( impl ) ) {
-					bridge = new TwoWayString2FieldBridgeAdaptor(
-							(org.hibernate.search.bridge.TwoWayStringBridge) instance );
-				}
-				else if ( org.hibernate.search.bridge.StringBridge.class.isAssignableFrom( impl ) ) {
-					bridge = new String2FieldBridgeAdaptor( (org.hibernate.search.bridge.StringBridge) instance );
-				}
-				if ( bridgeAnn.params().length > 0 && ParameterizedBridge.class.isAssignableFrom( impl ) ) {
-					Map params = new HashMap( bridgeAnn.params().length );
-					for ( Parameter param : bridgeAnn.params() ) {
-						params.put( param.name(), param.value() );
-					}
-					( (ParameterizedBridge) instance ).setParameterValues( params );
-				}
-			}
-			catch (Exception e) {
-				//TODO add classname
-				throw new HibernateException( "Unable to instanciate FieldBridge for " + member.getName(), e );
-			}
-		}
-		else if ( member.isAnnotationPresent( org.hibernate.search.annotations.DateBridge.class ) ) {
-			Resolution resolution =
-					member.getAnnotation( org.hibernate.search.annotations.DateBridge.class ).resolution();
-			bridge = getDateField( resolution );
-		}
-		else {
-			//find in built-ins
-			XClass returnType = member.getType();
-			bridge = builtInBridges.get( returnType.getName() );
-			if ( bridge == null && returnType.isEnum() ) {
-				bridge = new TwoWayString2FieldBridgeAdaptor(
-						new EnumBridge( (Class<? extends Enum>) returnType.getClass() )
-				);
-			}
-		}
-		//TODO add classname
-		if ( bridge == null ) throw new HibernateException( "Unable to guess FieldBridge for " + member.getName() );
-		return bridge;
-	}
-
-	public static FieldBridge getDateField(Resolution resolution) {
-		switch (resolution) {
-			case YEAR:
-				return DATE_YEAR;
-			case MONTH:
-				return DATE_MONTH;
-			case DAY:
-				return DATE_DAY;
-			case HOUR:
-				return DATE_HOUR;
-			case MINUTE:
-				return DATE_MINUTE;
-			case SECOND:
-				return DATE_SECOND;
-			case MILLISECOND:
-				return DATE_MILLISECOND;
-			default:
-				throw new AssertionFailure( "Unknown Resolution: " + resolution );
-		}
-	}
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/BridgeFactory.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/bridge/BridgeFactory.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/BridgeFactory.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/BridgeFactory.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,155 @@
+//$Id: $
+package org.hibernate.search.bridge;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.hibernate.HibernateException;
+import org.hibernate.AssertionFailure;
+import org.hibernate.search.bridge.builtin.DateBridge;
+import org.hibernate.search.bridge.builtin.FloatBridge;
+import org.hibernate.search.bridge.builtin.LongBridge;
+import org.hibernate.search.bridge.builtin.BigIntegerBridge;
+import org.hibernate.search.bridge.builtin.StringBridge;
+import org.hibernate.search.bridge.builtin.IntegerBridge;
+import org.hibernate.search.bridge.builtin.BigDecimalBridge;
+import org.hibernate.search.bridge.builtin.DoubleBridge;
+import org.hibernate.search.bridge.builtin.ShortBridge;
+import org.hibernate.search.bridge.builtin.EnumBridge;
+import org.hibernate.search.bridge.builtin.BooleanBridge;
+import org.hibernate.search.annotations.Resolution;
+import org.hibernate.search.annotations.Parameter;
+import org.hibernate.annotations.common.reflection.XClass;
+import org.hibernate.annotations.common.reflection.XMember;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class BridgeFactory {
+	private static Map<String, FieldBridge> builtInBridges = new HashMap<String, FieldBridge>();
+
+	private BridgeFactory() {
+	}
+
+	public static final TwoWayFieldBridge DOUBLE = new TwoWayString2FieldBridgeAdaptor( new DoubleBridge() );
+
+	public static final TwoWayFieldBridge FLOAT = new TwoWayString2FieldBridgeAdaptor( new FloatBridge() );
+
+	public static final TwoWayFieldBridge SHORT = new TwoWayString2FieldBridgeAdaptor( new ShortBridge() );
+
+	public static final TwoWayFieldBridge INTEGER = new TwoWayString2FieldBridgeAdaptor( new IntegerBridge() );
+
+	public static final TwoWayFieldBridge LONG = new TwoWayString2FieldBridgeAdaptor( new LongBridge() );
+
+	public static final TwoWayFieldBridge BIG_INTEGER = new TwoWayString2FieldBridgeAdaptor( new BigIntegerBridge() );
+
+	public static final TwoWayFieldBridge BIG_DECIMAL = new TwoWayString2FieldBridgeAdaptor( new BigDecimalBridge() );
+
+	public static final TwoWayFieldBridge STRING = new TwoWayString2FieldBridgeAdaptor( new StringBridge() );
+
+	public static final TwoWayFieldBridge BOOLEAN = new TwoWayString2FieldBridgeAdaptor( new BooleanBridge() );
+
+	public static final FieldBridge DATE_YEAR = new String2FieldBridgeAdaptor( DateBridge.DATE_YEAR );
+	public static final FieldBridge DATE_MONTH = new String2FieldBridgeAdaptor( DateBridge.DATE_MONTH );
+	public static final FieldBridge DATE_DAY = new String2FieldBridgeAdaptor( DateBridge.DATE_DAY );
+	public static final FieldBridge DATE_HOUR = new String2FieldBridgeAdaptor( DateBridge.DATE_HOUR );
+	public static final FieldBridge DATE_MINUTE = new String2FieldBridgeAdaptor( DateBridge.DATE_MINUTE );
+	public static final FieldBridge DATE_SECOND = new String2FieldBridgeAdaptor( DateBridge.DATE_SECOND );
+	public static final TwoWayFieldBridge DATE_MILLISECOND =
+			new TwoWayString2FieldBridgeAdaptor( DateBridge.DATE_MILLISECOND );
+
+	static {
+		builtInBridges.put( Double.class.getName(), DOUBLE );
+		builtInBridges.put( double.class.getName(), DOUBLE );
+		builtInBridges.put( Float.class.getName(), FLOAT );
+		builtInBridges.put( float.class.getName(), FLOAT );
+		builtInBridges.put( Short.class.getName(), SHORT );
+		builtInBridges.put( short.class.getName(), SHORT );
+		builtInBridges.put( Integer.class.getName(), INTEGER );
+		builtInBridges.put( int.class.getName(), INTEGER );
+		builtInBridges.put( Long.class.getName(), LONG );
+		builtInBridges.put( long.class.getName(), LONG );
+		builtInBridges.put( BigInteger.class.getName(), BIG_INTEGER );
+		builtInBridges.put( BigDecimal.class.getName(), BIG_DECIMAL );
+		builtInBridges.put( String.class.getName(), STRING );
+		builtInBridges.put( Boolean.class.getName(), BOOLEAN );
+		builtInBridges.put( boolean.class.getName(), BOOLEAN );
+
+		builtInBridges.put( Date.class.getName(), DATE_MILLISECOND );
+	}
+
+	public static FieldBridge guessType(XMember member) {
+		FieldBridge bridge = null;
+		org.hibernate.search.annotations.FieldBridge bridgeAnn =
+				member.getAnnotation( org.hibernate.search.annotations.FieldBridge.class );
+		if ( bridgeAnn != null ) {
+			Class impl = bridgeAnn.impl();
+			try {
+				Object instance = impl.newInstance();
+				if ( FieldBridge.class.isAssignableFrom( impl ) ) {
+					bridge = (FieldBridge) instance;
+				}
+				else if ( org.hibernate.search.bridge.TwoWayStringBridge.class.isAssignableFrom( impl ) ) {
+					bridge = new TwoWayString2FieldBridgeAdaptor(
+							(org.hibernate.search.bridge.TwoWayStringBridge) instance );
+				}
+				else if ( org.hibernate.search.bridge.StringBridge.class.isAssignableFrom( impl ) ) {
+					bridge = new String2FieldBridgeAdaptor( (org.hibernate.search.bridge.StringBridge) instance );
+				}
+				if ( bridgeAnn.params().length > 0 && ParameterizedBridge.class.isAssignableFrom( impl ) ) {
+					Map params = new HashMap( bridgeAnn.params().length );
+					for ( Parameter param : bridgeAnn.params() ) {
+						params.put( param.name(), param.value() );
+					}
+					( (ParameterizedBridge) instance ).setParameterValues( params );
+				}
+			}
+			catch (Exception e) {
+				//TODO add classname
+				throw new HibernateException( "Unable to instanciate FieldBridge for " + member.getName(), e );
+			}
+		}
+		else if ( member.isAnnotationPresent( org.hibernate.search.annotations.DateBridge.class ) ) {
+			Resolution resolution =
+					member.getAnnotation( org.hibernate.search.annotations.DateBridge.class ).resolution();
+			bridge = getDateField( resolution );
+		}
+		else {
+			//find in built-ins
+			XClass returnType = member.getType();
+			bridge = builtInBridges.get( returnType.getName() );
+			if ( bridge == null && returnType.isEnum() ) {
+				bridge = new TwoWayString2FieldBridgeAdaptor(
+						new EnumBridge( (Class<? extends Enum>) returnType.getClass() )
+				);
+			}
+		}
+		//TODO add classname
+		if ( bridge == null ) throw new HibernateException( "Unable to guess FieldBridge for " + member.getName() );
+		return bridge;
+	}
+
+	public static FieldBridge getDateField(Resolution resolution) {
+		switch (resolution) {
+			case YEAR:
+				return DATE_YEAR;
+			case MONTH:
+				return DATE_MONTH;
+			case DAY:
+				return DATE_DAY;
+			case HOUR:
+				return DATE_HOUR;
+			case MINUTE:
+				return DATE_MINUTE;
+			case SECOND:
+				return DATE_SECOND;
+			case MILLISECOND:
+				return DATE_MILLISECOND;
+			default:
+				throw new AssertionFailure( "Unknown Resolution: " + resolution );
+		}
+	}
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/FieldBridge.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/bridge/FieldBridge.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/FieldBridge.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,23 +0,0 @@
-//$Id: $
-package org.hibernate.search.bridge;
-
-import org.apache.lucene.document.Document;
-import org.apache.lucene.document.Field;
-
-/**
- * Link between a java property and a Lucene Document
- * Usually a Java property will be linked to a Document Field
- *
- * @author Emmanuel Bernard
- */
-//TODO should show Field or document?
-//document is nice since I can save an object into several fields
-public interface FieldBridge {
-	/**
-	 * Manipulate the document to index the given value.
-	 * A common implementation is to add a Field <code>name</code> to the given document following
-	 * the parameters (<code>store</code>, <code>index</code>, <code>boost</code>) if the
-	 * <code>value</code> is not null
-	 */
-	void set(String name, Object value, Document document, Field.Store store, Field.Index index, Float boost);
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/FieldBridge.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/bridge/FieldBridge.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/FieldBridge.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/FieldBridge.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,23 @@
+//$Id: $
+package org.hibernate.search.bridge;
+
+import org.apache.lucene.document.Document;
+import org.apache.lucene.document.Field;
+
+/**
+ * Link between a java property and a Lucene Document
+ * Usually a Java property will be linked to a Document Field
+ *
+ * @author Emmanuel Bernard
+ */
+//TODO should show Field or document?
+//document is nice since I can save an object into several fields
+public interface FieldBridge {
+	/**
+	 * Manipulate the document to index the given value.
+	 * A common implementation is to add a Field <code>name</code> to the given document following
+	 * the parameters (<code>store</code>, <code>index</code>, <code>boost</code>) if the
+	 * <code>value</code> is not null
+	 */
+	void set(String name, Object value, Document document, Field.Store store, Field.Index index, Float boost);
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/ParameterizedBridge.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/bridge/ParameterizedBridge.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/ParameterizedBridge.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,14 +0,0 @@
-//$Id: $
-package org.hibernate.search.bridge;
-
-import java.util.Map;
-
-/**
- * Allow parameter injection to a given bridge
- *
- * @author Emmanuel Bernard
- */
-public interface ParameterizedBridge {
-	//TODO inject Properties? since the annotations cannot support Object attribute?
-	void setParameterValues(Map parameters);
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/ParameterizedBridge.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/bridge/ParameterizedBridge.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/ParameterizedBridge.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/ParameterizedBridge.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,14 @@
+//$Id: $
+package org.hibernate.search.bridge;
+
+import java.util.Map;
+
+/**
+ * Allow parameter injection to a given bridge
+ *
+ * @author Emmanuel Bernard
+ */
+public interface ParameterizedBridge {
+	//TODO inject Properties? since the annotations cannot support Object attribute?
+	void setParameterValues(Map parameters);
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/String2FieldBridgeAdaptor.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/bridge/String2FieldBridgeAdaptor.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/String2FieldBridgeAdaptor.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,30 +0,0 @@
-//$Id: $
-package org.hibernate.search.bridge;
-
-import org.apache.lucene.document.Document;
-import org.apache.lucene.document.Field;
-import org.hibernate.util.StringHelper;
-
-/**
- * Bridge to use a StringBridge as a FieldBridge
- *
- * @author Emmanuel Bernard
- */
-public class String2FieldBridgeAdaptor implements FieldBridge {
-	private StringBridge stringBridge;
-
-	public String2FieldBridgeAdaptor(StringBridge stringBridge) {
-		this.stringBridge = stringBridge;
-	}
-
-	public void set(String name, Object value, Document document, Field.Store store, Field.Index index, Float boost) {
-		String indexedString = stringBridge.objectToString( value );
-		//Do not add fields on empty strings, seems a sensible default in most situations
-		if ( StringHelper.isNotEmpty( indexedString ) ) {
-			Field field = new Field( name, indexedString, store, index );
-			if ( boost != null ) field.setBoost( boost );
-			document.add( field );
-		}
-	}
-
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/String2FieldBridgeAdaptor.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/bridge/String2FieldBridgeAdaptor.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/String2FieldBridgeAdaptor.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/String2FieldBridgeAdaptor.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,30 @@
+//$Id: $
+package org.hibernate.search.bridge;
+
+import org.apache.lucene.document.Document;
+import org.apache.lucene.document.Field;
+import org.hibernate.util.StringHelper;
+
+/**
+ * Bridge to use a StringBridge as a FieldBridge
+ *
+ * @author Emmanuel Bernard
+ */
+public class String2FieldBridgeAdaptor implements FieldBridge {
+	private StringBridge stringBridge;
+
+	public String2FieldBridgeAdaptor(StringBridge stringBridge) {
+		this.stringBridge = stringBridge;
+	}
+
+	public void set(String name, Object value, Document document, Field.Store store, Field.Index index, Float boost) {
+		String indexedString = stringBridge.objectToString( value );
+		//Do not add fields on empty strings, seems a sensible default in most situations
+		if ( StringHelper.isNotEmpty( indexedString ) ) {
+			Field field = new Field( name, indexedString, store, index );
+			if ( boost != null ) field.setBoost( boost );
+			document.add( field );
+		}
+	}
+
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/StringBridge.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/bridge/StringBridge.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/StringBridge.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,16 +0,0 @@
-//$Id: $
-package org.hibernate.search.bridge;
-
-/**
- * Transform an object into a string representation
- *
- * @author Emmanuel Bernard
- */
-public interface StringBridge {
-	
-	/**
-	 * convert the object representation to a String
-	 * The return String must not be null, it can be empty though
-	 */
-	String objectToString(Object object);
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/StringBridge.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/bridge/StringBridge.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/StringBridge.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/StringBridge.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,16 @@
+//$Id: $
+package org.hibernate.search.bridge;
+
+/**
+ * Transform an object into a string representation
+ *
+ * @author Emmanuel Bernard
+ */
+public interface StringBridge {
+	
+	/**
+	 * convert the object representation to a String
+	 * The return String must not be null, it can be empty though
+	 */
+	String objectToString(Object object);
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/TwoWayFieldBridge.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/bridge/TwoWayFieldBridge.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/TwoWayFieldBridge.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,32 +0,0 @@
-//$Id: $
-package org.hibernate.search.bridge;
-
-import org.apache.lucene.document.Document;
-
-/**
- * A FieldBrige able to convert the index representation back into an object without losing information
- *
- * Any bridge expected to process a document id should implement this interface
- * EXPERIMENTAL Consider this interface as private
- *
- * @author Emmanuel Bernard
- */
-//FIXME rework the interface inheritance there are some common concepts with StringBridge
-public interface TwoWayFieldBridge extends FieldBridge {
-	/**
-	 * build the element object from the Document
-	 *
-	 * The return value is the Entity id
-	 *
-	 * @param name	 field name
-	 * @param document document
-	 */
-	Object get(String name, Document document);
-
-	/**
-	 * convert the object representation to a String
-	 * The return String must not be null, it can be empty though
-	 * EXPERIMENTAL API subject to change in the future
-	 */
-	String objectToString(Object object);
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/TwoWayFieldBridge.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/bridge/TwoWayFieldBridge.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/TwoWayFieldBridge.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/TwoWayFieldBridge.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,32 @@
+//$Id: $
+package org.hibernate.search.bridge;
+
+import org.apache.lucene.document.Document;
+
+/**
+ * A FieldBrige able to convert the index representation back into an object without losing information
+ *
+ * Any bridge expected to process a document id should implement this interface
+ * EXPERIMENTAL Consider this interface as private
+ *
+ * @author Emmanuel Bernard
+ */
+//FIXME rework the interface inheritance there are some common concepts with StringBridge
+public interface TwoWayFieldBridge extends FieldBridge {
+	/**
+	 * build the element object from the Document
+	 *
+	 * The return value is the Entity id
+	 *
+	 * @param name	 field name
+	 * @param document document
+	 */
+	Object get(String name, Document document);
+
+	/**
+	 * convert the object representation to a String
+	 * The return String must not be null, it can be empty though
+	 * EXPERIMENTAL API subject to change in the future
+	 */
+	String objectToString(Object object);
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/TwoWayString2FieldBridgeAdaptor.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/bridge/TwoWayString2FieldBridgeAdaptor.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/TwoWayString2FieldBridgeAdaptor.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,30 +0,0 @@
-//$Id: $
-package org.hibernate.search.bridge;
-
-import org.apache.lucene.document.Document;
-import org.apache.lucene.document.Field;
-
-/**
- * Bridge to use a TwoWayStringBridge as a TwoWayFieldBridge
- *
- * @author Emmanuel Bernard
- */
-//TODO use Generics to avoid double declaration of stringBridge 
-public class TwoWayString2FieldBridgeAdaptor extends String2FieldBridgeAdaptor implements TwoWayFieldBridge {
-
-	private TwoWayStringBridge stringBridge;
-
-	public TwoWayString2FieldBridgeAdaptor(TwoWayStringBridge stringBridge) {
-		super( stringBridge );
-		this.stringBridge = stringBridge;
-	}
-
-	public String objectToString(Object object) {
-		return stringBridge.objectToString( object );
-	}
-
-	public Object get(String name, Document document) {
-		Field field = document.getField( name );
-		return stringBridge.stringToObject( field.stringValue() );
-	}
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/TwoWayString2FieldBridgeAdaptor.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/bridge/TwoWayString2FieldBridgeAdaptor.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/TwoWayString2FieldBridgeAdaptor.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/TwoWayString2FieldBridgeAdaptor.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,30 @@
+//$Id: $
+package org.hibernate.search.bridge;
+
+import org.apache.lucene.document.Document;
+import org.apache.lucene.document.Field;
+
+/**
+ * Bridge to use a TwoWayStringBridge as a TwoWayFieldBridge
+ *
+ * @author Emmanuel Bernard
+ */
+//TODO use Generics to avoid double declaration of stringBridge 
+public class TwoWayString2FieldBridgeAdaptor extends String2FieldBridgeAdaptor implements TwoWayFieldBridge {
+
+	private TwoWayStringBridge stringBridge;
+
+	public TwoWayString2FieldBridgeAdaptor(TwoWayStringBridge stringBridge) {
+		super( stringBridge );
+		this.stringBridge = stringBridge;
+	}
+
+	public String objectToString(Object object) {
+		return stringBridge.objectToString( object );
+	}
+
+	public Object get(String name, Document document) {
+		Field field = document.getField( name );
+		return stringBridge.stringToObject( field.stringValue() );
+	}
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/TwoWayStringBridge.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/bridge/TwoWayStringBridge.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/TwoWayStringBridge.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,18 +0,0 @@
-//$Id: $
-package org.hibernate.search.bridge;
-
-/**
- * StringBridge allowing a translation from the String back to the Object
- * objectToString( stringToObject( string ) ) and stringToObject( objectToString( object ) )
- * should be "idempotent". More precisely,
- *
- * objectToString( stringToObject( string ) ).equals(string) for string not null
- * stringToObject( objectToString( object ) ).equals(object) for object not null 
- * @author Emmanuel Bernard
- */
-public interface TwoWayStringBridge extends StringBridge {
-	/**
-	 * Convert the string representation to an object
-	 */
-	Object stringToObject(String stringValue);
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/TwoWayStringBridge.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/bridge/TwoWayStringBridge.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/TwoWayStringBridge.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/TwoWayStringBridge.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,18 @@
+//$Id: $
+package org.hibernate.search.bridge;
+
+/**
+ * StringBridge allowing a translation from the String back to the Object
+ * objectToString( stringToObject( string ) ) and stringToObject( objectToString( object ) )
+ * should be "idempotent". More precisely,
+ *
+ * objectToString( stringToObject( string ) ).equals(string) for string not null
+ * stringToObject( objectToString( object ) ).equals(object) for object not null 
+ * @author Emmanuel Bernard
+ */
+public interface TwoWayStringBridge extends StringBridge {
+	/**
+	 * Convert the string representation to an object
+	 */
+	Object stringToObject(String stringValue);
+}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin)

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/BigDecimalBridge.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/BigDecimalBridge.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/BigDecimalBridge.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,18 +0,0 @@
-//$Id: $
-package org.hibernate.search.bridge.builtin;
-
-import java.math.BigDecimal;
-
-import org.hibernate.util.StringHelper;
-
-/**
- * Map a BigDecimal element
- *
- * @author Emmanuel Bernard
- */
-public class BigDecimalBridge extends NumberBridge {
-	public Object stringToObject(String stringValue) {
-		if ( StringHelper.isEmpty( stringValue ) ) return null;
-		return new BigDecimal( stringValue );
-	}
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/BigDecimalBridge.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/BigDecimalBridge.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/BigDecimalBridge.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/BigDecimalBridge.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,18 @@
+//$Id: $
+package org.hibernate.search.bridge.builtin;
+
+import java.math.BigDecimal;
+
+import org.hibernate.util.StringHelper;
+
+/**
+ * Map a BigDecimal element
+ *
+ * @author Emmanuel Bernard
+ */
+public class BigDecimalBridge extends NumberBridge {
+	public Object stringToObject(String stringValue) {
+		if ( StringHelper.isEmpty( stringValue ) ) return null;
+		return new BigDecimal( stringValue );
+	}
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/BigIntegerBridge.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/BigIntegerBridge.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/BigIntegerBridge.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,18 +0,0 @@
-//$Id: $
-package org.hibernate.search.bridge.builtin;
-
-import java.math.BigInteger;
-
-import org.hibernate.util.StringHelper;
-
-/**
- * Map a BigInteger element
- *
- * @author Emmanuel Bernard
- */
-public class BigIntegerBridge extends NumberBridge {
-	public Object stringToObject(String stringValue) {
-		if ( StringHelper.isEmpty( stringValue ) ) return null;
-		return new BigInteger( stringValue );
-	}
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/BigIntegerBridge.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/BigIntegerBridge.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/BigIntegerBridge.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/BigIntegerBridge.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,18 @@
+//$Id: $
+package org.hibernate.search.bridge.builtin;
+
+import java.math.BigInteger;
+
+import org.hibernate.util.StringHelper;
+
+/**
+ * Map a BigInteger element
+ *
+ * @author Emmanuel Bernard
+ */
+public class BigIntegerBridge extends NumberBridge {
+	public Object stringToObject(String stringValue) {
+		if ( StringHelper.isEmpty( stringValue ) ) return null;
+		return new BigInteger( stringValue );
+	}
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/BooleanBridge.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/BooleanBridge.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/BooleanBridge.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,23 +0,0 @@
-//$Id: $
-package org.hibernate.search.bridge.builtin;
-
-import org.hibernate.search.bridge.TwoWayStringBridge;
-
-
-/**
- * Map a boolean field
- *
- * @author Sylvain Vieujot
- */
-public class BooleanBridge implements TwoWayStringBridge {
-
-	public Boolean stringToObject(String stringValue) {
-		return Boolean.valueOf( stringValue );
-	}
-
-	public String objectToString(Object object) {
-		Boolean b = (Boolean) object;
-		return b.toString();
-	}
-}
-

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/BooleanBridge.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/BooleanBridge.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/BooleanBridge.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/BooleanBridge.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,23 @@
+//$Id: $
+package org.hibernate.search.bridge.builtin;
+
+import org.hibernate.search.bridge.TwoWayStringBridge;
+
+
+/**
+ * Map a boolean field
+ *
+ * @author Sylvain Vieujot
+ */
+public class BooleanBridge implements TwoWayStringBridge {
+
+	public Boolean stringToObject(String stringValue) {
+		return Boolean.valueOf( stringValue );
+	}
+
+	public String objectToString(Object object) {
+		Boolean b = (Boolean) object;
+		return b.toString();
+	}
+}
+

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/DateBridge.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/DateBridge.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/DateBridge.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,111 +0,0 @@
-//$Id: $
-package org.hibernate.search.bridge.builtin;
-
-import java.text.ParseException;
-import java.util.Date;
-import java.util.Locale;
-import java.util.Map;
-
-import org.apache.lucene.document.DateTools;
-import org.hibernate.AssertionFailure;
-import org.hibernate.HibernateException;
-import org.hibernate.search.bridge.StringBridge;
-import org.hibernate.search.bridge.ParameterizedBridge;
-import org.hibernate.search.bridge.String2FieldBridgeAdaptor;
-import org.hibernate.search.annotations.Resolution;
-import org.hibernate.search.bridge.TwoWayString2FieldBridgeAdaptor;
-import org.hibernate.search.bridge.TwoWayStringBridge;
-import org.hibernate.util.StringHelper;
-
-/**
- * Bridge a java.util.Date to a String, truncated to the resolution
- * Date are stored GMT based
- * <p/>
- * ie
- * Resolution.YEAR: yyyy
- * Resolution.MONTH: yyyyMM
- * Resolution.DAY: yyyyMMdd
- * Resolution.HOUR: yyyyMMddHH
- * Resolution.MINUTE: yyyyMMddHHmm
- * Resolution.SECOND: yyyyMMddHHmmss
- * Resolution.MILLISECOND: yyyyMMddHHmmssSSS
- *
- * @author Emmanuel Bernard
- */
-//TODO split into StringBridge and TwoWayStringBridge?
-public class DateBridge implements TwoWayStringBridge, ParameterizedBridge {
-
-	public static final TwoWayStringBridge DATE_YEAR = new DateBridge( Resolution.YEAR );
-	public static final TwoWayStringBridge DATE_MONTH = new DateBridge( Resolution.MONTH );
-	public static final TwoWayStringBridge DATE_DAY = new DateBridge( Resolution.DAY );
-	public static final TwoWayStringBridge DATE_HOUR = new DateBridge( Resolution.HOUR );
-	public static final TwoWayStringBridge DATE_MINUTE = new DateBridge( Resolution.MINUTE );
-	public static final TwoWayStringBridge DATE_SECOND = new DateBridge( Resolution.SECOND );
-	public static final TwoWayStringBridge DATE_MILLISECOND = new DateBridge( Resolution.MILLISECOND );
-
-	DateTools.Resolution resolution;
-
-	public DateBridge() {
-	}
-
-	public DateBridge(Resolution resolution) {
-		setResolution( resolution );
-	}
-
-	public Object stringToObject(String stringValue) {
-		if ( StringHelper.isEmpty( stringValue ) ) return null;
-		try {
-			return DateTools.stringToDate( stringValue );
-		}
-		catch (ParseException e) {
-			throw new HibernateException( "Unable to parse into date: " + stringValue, e );
-		}
-	}
-
-	public String objectToString(Object object) {
-		return object != null ?
-				DateTools.dateToString( (Date) object, resolution ) :
-				null;
-	}
-
-	public void setParameterValues(Map parameters) {
-		Object resolution = parameters.get( "resolution" );
-		Resolution hibResolution;
-		if ( resolution instanceof String ) {
-			hibResolution = Resolution.valueOf( ( (String) resolution ).toUpperCase( Locale.ENGLISH ) );
-		}
-		else {
-			hibResolution = (Resolution) resolution;
-		}
-		setResolution( hibResolution );
-	}
-
-	private void setResolution(Resolution hibResolution) {
-		switch (hibResolution) {
-			case YEAR:
-				this.resolution = DateTools.Resolution.YEAR;
-				break;
-			case MONTH:
-				this.resolution = DateTools.Resolution.MONTH;
-				break;
-			case DAY:
-				this.resolution = DateTools.Resolution.DAY;
-				break;
-			case HOUR:
-				this.resolution = DateTools.Resolution.HOUR;
-				break;
-			case MINUTE:
-				this.resolution = DateTools.Resolution.MINUTE;
-				break;
-			case SECOND:
-				this.resolution = DateTools.Resolution.SECOND;
-				break;
-			case MILLISECOND:
-				this.resolution = DateTools.Resolution.MILLISECOND;
-				break;
-			default:
-				throw new AssertionFailure( "Unknown Resolution: " + hibResolution );
-
-		}
-	}
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/DateBridge.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/DateBridge.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/DateBridge.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/DateBridge.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,111 @@
+//$Id: $
+package org.hibernate.search.bridge.builtin;
+
+import java.text.ParseException;
+import java.util.Date;
+import java.util.Locale;
+import java.util.Map;
+
+import org.apache.lucene.document.DateTools;
+import org.hibernate.AssertionFailure;
+import org.hibernate.HibernateException;
+import org.hibernate.search.bridge.StringBridge;
+import org.hibernate.search.bridge.ParameterizedBridge;
+import org.hibernate.search.bridge.String2FieldBridgeAdaptor;
+import org.hibernate.search.annotations.Resolution;
+import org.hibernate.search.bridge.TwoWayString2FieldBridgeAdaptor;
+import org.hibernate.search.bridge.TwoWayStringBridge;
+import org.hibernate.util.StringHelper;
+
+/**
+ * Bridge a java.util.Date to a String, truncated to the resolution
+ * Date are stored GMT based
+ * <p/>
+ * ie
+ * Resolution.YEAR: yyyy
+ * Resolution.MONTH: yyyyMM
+ * Resolution.DAY: yyyyMMdd
+ * Resolution.HOUR: yyyyMMddHH
+ * Resolution.MINUTE: yyyyMMddHHmm
+ * Resolution.SECOND: yyyyMMddHHmmss
+ * Resolution.MILLISECOND: yyyyMMddHHmmssSSS
+ *
+ * @author Emmanuel Bernard
+ */
+//TODO split into StringBridge and TwoWayStringBridge?
+public class DateBridge implements TwoWayStringBridge, ParameterizedBridge {
+
+	public static final TwoWayStringBridge DATE_YEAR = new DateBridge( Resolution.YEAR );
+	public static final TwoWayStringBridge DATE_MONTH = new DateBridge( Resolution.MONTH );
+	public static final TwoWayStringBridge DATE_DAY = new DateBridge( Resolution.DAY );
+	public static final TwoWayStringBridge DATE_HOUR = new DateBridge( Resolution.HOUR );
+	public static final TwoWayStringBridge DATE_MINUTE = new DateBridge( Resolution.MINUTE );
+	public static final TwoWayStringBridge DATE_SECOND = new DateBridge( Resolution.SECOND );
+	public static final TwoWayStringBridge DATE_MILLISECOND = new DateBridge( Resolution.MILLISECOND );
+
+	DateTools.Resolution resolution;
+
+	public DateBridge() {
+	}
+
+	public DateBridge(Resolution resolution) {
+		setResolution( resolution );
+	}
+
+	public Object stringToObject(String stringValue) {
+		if ( StringHelper.isEmpty( stringValue ) ) return null;
+		try {
+			return DateTools.stringToDate( stringValue );
+		}
+		catch (ParseException e) {
+			throw new HibernateException( "Unable to parse into date: " + stringValue, e );
+		}
+	}
+
+	public String objectToString(Object object) {
+		return object != null ?
+				DateTools.dateToString( (Date) object, resolution ) :
+				null;
+	}
+
+	public void setParameterValues(Map parameters) {
+		Object resolution = parameters.get( "resolution" );
+		Resolution hibResolution;
+		if ( resolution instanceof String ) {
+			hibResolution = Resolution.valueOf( ( (String) resolution ).toUpperCase( Locale.ENGLISH ) );
+		}
+		else {
+			hibResolution = (Resolution) resolution;
+		}
+		setResolution( hibResolution );
+	}
+
+	private void setResolution(Resolution hibResolution) {
+		switch (hibResolution) {
+			case YEAR:
+				this.resolution = DateTools.Resolution.YEAR;
+				break;
+			case MONTH:
+				this.resolution = DateTools.Resolution.MONTH;
+				break;
+			case DAY:
+				this.resolution = DateTools.Resolution.DAY;
+				break;
+			case HOUR:
+				this.resolution = DateTools.Resolution.HOUR;
+				break;
+			case MINUTE:
+				this.resolution = DateTools.Resolution.MINUTE;
+				break;
+			case SECOND:
+				this.resolution = DateTools.Resolution.SECOND;
+				break;
+			case MILLISECOND:
+				this.resolution = DateTools.Resolution.MILLISECOND;
+				break;
+			default:
+				throw new AssertionFailure( "Unknown Resolution: " + hibResolution );
+
+		}
+	}
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/DoubleBridge.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/DoubleBridge.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/DoubleBridge.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,16 +0,0 @@
-//$Id: $
-package org.hibernate.search.bridge.builtin;
-
-import org.hibernate.util.StringHelper;
-
-/**
- * Map a double element
- *
- * @author Emmanuel Bernard
- */
-public class DoubleBridge extends NumberBridge {
-	public Object stringToObject(String stringValue) {
-		if ( StringHelper.isEmpty( stringValue ) ) return null;
-		return new Double( stringValue );
-	}
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/DoubleBridge.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/DoubleBridge.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/DoubleBridge.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/DoubleBridge.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,16 @@
+//$Id: $
+package org.hibernate.search.bridge.builtin;
+
+import org.hibernate.util.StringHelper;
+
+/**
+ * Map a double element
+ *
+ * @author Emmanuel Bernard
+ */
+public class DoubleBridge extends NumberBridge {
+	public Object stringToObject(String stringValue) {
+		if ( StringHelper.isEmpty( stringValue ) ) return null;
+		return new Double( stringValue );
+	}
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/EnumBridge.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/EnumBridge.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/EnumBridge.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,32 +0,0 @@
-//$Id: $
-package org.hibernate.search.bridge.builtin;
-
-import org.hibernate.search.bridge.TwoWayStringBridge;
-
-
-/**
- * Map an Enum field
- *
- * @author Sylvain Vieujot
- */
-public class EnumBridge implements TwoWayStringBridge {
-
-	private Class<? extends Enum> clazz = null;
-
-    /**
-     * @param clazz the class of the enum.
-     */
-    public EnumBridge(Class<? extends Enum> clazz) {
-        this.clazz = clazz;
-    }
-
-	public Enum<? extends Enum> stringToObject(String stringValue) {
-		return Enum.valueOf( clazz, stringValue );
-	}
-
-	public String objectToString(Object object) {
-		Enum e = (Enum) object;
-		return e != null ? e.name() : null;
-	}
-}
-

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/EnumBridge.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/EnumBridge.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/EnumBridge.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/EnumBridge.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,32 @@
+//$Id: $
+package org.hibernate.search.bridge.builtin;
+
+import org.hibernate.search.bridge.TwoWayStringBridge;
+
+
+/**
+ * Map an Enum field
+ *
+ * @author Sylvain Vieujot
+ */
+public class EnumBridge implements TwoWayStringBridge {
+
+	private Class<? extends Enum> clazz = null;
+
+    /**
+     * @param clazz the class of the enum.
+     */
+    public EnumBridge(Class<? extends Enum> clazz) {
+        this.clazz = clazz;
+    }
+
+	public Enum<? extends Enum> stringToObject(String stringValue) {
+		return Enum.valueOf( clazz, stringValue );
+	}
+
+	public String objectToString(Object object) {
+		Enum e = (Enum) object;
+		return e != null ? e.name() : null;
+	}
+}
+

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/FloatBridge.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/FloatBridge.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/FloatBridge.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,16 +0,0 @@
-//$Id: $
-package org.hibernate.search.bridge.builtin;
-
-import org.hibernate.util.StringHelper;
-
-/**
- * Map a float element
- *
- * @author Emmanuel Bernard
- */
-public class FloatBridge extends NumberBridge {
-	public Object stringToObject(String stringValue) {
-		if ( StringHelper.isEmpty( stringValue ) ) return null;
-		return new Float( stringValue );
-	}
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/FloatBridge.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/FloatBridge.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/FloatBridge.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/FloatBridge.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,16 @@
+//$Id: $
+package org.hibernate.search.bridge.builtin;
+
+import org.hibernate.util.StringHelper;
+
+/**
+ * Map a float element
+ *
+ * @author Emmanuel Bernard
+ */
+public class FloatBridge extends NumberBridge {
+	public Object stringToObject(String stringValue) {
+		if ( StringHelper.isEmpty( stringValue ) ) return null;
+		return new Float( stringValue );
+	}
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/IntegerBridge.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/IntegerBridge.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/IntegerBridge.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,16 +0,0 @@
-//$Id: $
-package org.hibernate.search.bridge.builtin;
-
-import org.hibernate.util.StringHelper;
-
-/**
- * Map an integer element
- *
- * @author Emmanuel Bernard
- */
-public class IntegerBridge extends NumberBridge {
-	public Object stringToObject(String stringValue) {
-		if ( StringHelper.isEmpty( stringValue ) ) return null;
-		return new Integer( stringValue );
-	}
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/IntegerBridge.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/IntegerBridge.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/IntegerBridge.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/IntegerBridge.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,16 @@
+//$Id: $
+package org.hibernate.search.bridge.builtin;
+
+import org.hibernate.util.StringHelper;
+
+/**
+ * Map an integer element
+ *
+ * @author Emmanuel Bernard
+ */
+public class IntegerBridge extends NumberBridge {
+	public Object stringToObject(String stringValue) {
+		if ( StringHelper.isEmpty( stringValue ) ) return null;
+		return new Integer( stringValue );
+	}
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/LongBridge.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/LongBridge.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/LongBridge.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,16 +0,0 @@
-//$Id: $
-package org.hibernate.search.bridge.builtin;
-
-import org.hibernate.util.StringHelper;
-
-/**
- * Map a long element
- *
- * @author Emmanuel Bernard
- */
-public class LongBridge extends NumberBridge {
-	public Object stringToObject(String stringValue) {
-		if ( StringHelper.isEmpty( stringValue ) ) return null;
-		return new Long( stringValue );
-	}
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/LongBridge.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/LongBridge.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/LongBridge.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/LongBridge.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,16 @@
+//$Id: $
+package org.hibernate.search.bridge.builtin;
+
+import org.hibernate.util.StringHelper;
+
+/**
+ * Map a long element
+ *
+ * @author Emmanuel Bernard
+ */
+public class LongBridge extends NumberBridge {
+	public Object stringToObject(String stringValue) {
+		if ( StringHelper.isEmpty( stringValue ) ) return null;
+		return new Long( stringValue );
+	}
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/NumberBridge.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/NumberBridge.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/NumberBridge.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,16 +0,0 @@
-//$Id: $
-package org.hibernate.search.bridge.builtin;
-
-import org.hibernate.search.bridge.StringBridge;
-import org.hibernate.search.bridge.TwoWayStringBridge;
-
-/**
- * @author Emmanuel Bernard
- */
-public abstract class NumberBridge implements TwoWayStringBridge {
-	public String objectToString(Object object) {
-		return object != null ?
-				object.toString() :
-				null;
-	}
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/NumberBridge.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/NumberBridge.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/NumberBridge.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/NumberBridge.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,16 @@
+//$Id: $
+package org.hibernate.search.bridge.builtin;
+
+import org.hibernate.search.bridge.StringBridge;
+import org.hibernate.search.bridge.TwoWayStringBridge;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public abstract class NumberBridge implements TwoWayStringBridge {
+	public String objectToString(Object object) {
+		return object != null ?
+				object.toString() :
+				null;
+	}
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/ShortBridge.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/ShortBridge.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/ShortBridge.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,16 +0,0 @@
-//$Id: $
-package org.hibernate.search.bridge.builtin;
-
-import org.hibernate.util.StringHelper;
-
-/**
- * Map a short element
- *
- * @author Emmanuel Bernard
- */
-public class ShortBridge extends NumberBridge {
-	public Object stringToObject(String stringValue) {
-		if ( StringHelper.isEmpty( stringValue ) ) return null;
-		return new Short( stringValue );
-	}
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/ShortBridge.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/ShortBridge.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/ShortBridge.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/ShortBridge.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,16 @@
+//$Id: $
+package org.hibernate.search.bridge.builtin;
+
+import org.hibernate.util.StringHelper;
+
+/**
+ * Map a short element
+ *
+ * @author Emmanuel Bernard
+ */
+public class ShortBridge extends NumberBridge {
+	public Object stringToObject(String stringValue) {
+		if ( StringHelper.isEmpty( stringValue ) ) return null;
+		return new Short( stringValue );
+	}
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/StringBridge.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/StringBridge.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/StringBridge.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,18 +0,0 @@
-//$Id: $
-package org.hibernate.search.bridge.builtin;
-
-
-/**
- * Map a string element
- *
- * @author Emmanuel Bernard
- */
-public class StringBridge implements org.hibernate.search.bridge.TwoWayStringBridge {
-	public Object stringToObject(String stringValue) {
-		return stringValue;
-	}
-
-	public String objectToString(Object object) {
-		return (String) object;
-	}
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/StringBridge.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/StringBridge.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/StringBridge.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/bridge/builtin/StringBridge.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,18 @@
+//$Id: $
+package org.hibernate.search.bridge.builtin;
+
+
+/**
+ * Map a string element
+ *
+ * @author Emmanuel Bernard
+ */
+public class StringBridge implements org.hibernate.search.bridge.TwoWayStringBridge {
+	public Object stringToObject(String stringValue) {
+		return stringValue;
+	}
+
+	public String objectToString(Object object) {
+		return (String) object;
+	}
+}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/engine (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/engine)

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/engine/DocumentBuilder.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/engine/DocumentBuilder.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/engine/DocumentBuilder.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,514 +0,0 @@
-//$Id: DocumentBuilder.java 10865 2006-11-23 23:30:01 +0100 (jeu., 23 nov. 2006) epbernard $
-package org.hibernate.search.engine;
-
-import java.io.Serializable;
-import java.lang.reflect.Modifier;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.lucene.analysis.Analyzer;
-import org.apache.lucene.document.Document;
-import org.apache.lucene.document.Field;
-import org.apache.lucene.index.Term;
-import org.hibernate.Hibernate;
-import org.hibernate.annotations.common.AssertionFailure;
-import org.hibernate.annotations.common.reflection.ReflectionManager;
-import org.hibernate.annotations.common.reflection.XAnnotatedElement;
-import org.hibernate.annotations.common.reflection.XClass;
-import org.hibernate.annotations.common.reflection.XMember;
-import org.hibernate.annotations.common.reflection.XProperty;
-import org.hibernate.search.SearchException;
-import org.hibernate.search.SearchFactory;
-import org.hibernate.search.annotations.Boost;
-import org.hibernate.search.annotations.ContainedIn;
-import org.hibernate.search.annotations.DocumentId;
-import org.hibernate.search.annotations.Index;
-import org.hibernate.search.annotations.IndexedEmbedded;
-import org.hibernate.search.annotations.Keyword;
-import org.hibernate.search.annotations.Store;
-import org.hibernate.search.annotations.Text;
-import org.hibernate.search.annotations.Unstored;
-import org.hibernate.search.backend.AddLuceneWork;
-import org.hibernate.search.backend.DeleteLuceneWork;
-import org.hibernate.search.backend.LuceneWork;
-import org.hibernate.search.backend.WorkType;
-import org.hibernate.search.bridge.BridgeFactory;
-import org.hibernate.search.bridge.FieldBridge;
-import org.hibernate.search.bridge.TwoWayFieldBridge;
-import org.hibernate.search.store.DirectoryProvider;
-import org.hibernate.search.util.BinderHelper;
-import org.hibernate.util.ReflectHelper;
-
-/**
- * Set up and provide a manager for indexes classes
- *
- * @author Gavin King
- * @author Emmanuel Bernard
- * @author Sylvain Vieujot
- * @author Richard Hallier
- */
-public class DocumentBuilder<T> {
-	private static final Log log = LogFactory.getLog( DocumentBuilder.class );
-
-	private final PropertiesMetadata rootPropertiesMetadata = new PropertiesMetadata();
-	private final XClass beanClass;
-	private final DirectoryProvider directoryProvider;
-	private String idKeywordName;
-	private XMember idGetter;
-	private final Analyzer analyzer;
-	private Float idBoost;
-	public static final String CLASS_FIELDNAME = "_hibernate_class";
-	private TwoWayFieldBridge idBridge;
-	private Set<Class> mappedSubclasses = new HashSet<Class>();
-	private ReflectionManager reflectionManager;
-	private int level = 0;
-	private int maxLevel = Integer.MAX_VALUE;
-
-
-	public DocumentBuilder(XClass clazz, Analyzer analyzer, DirectoryProvider directory,
-						   ReflectionManager reflectionManager) {
-		this.beanClass = clazz;
-		this.analyzer = analyzer;
-		this.directoryProvider = directory;
-		//FIXME get rid of it when boost is stored?
-		this.reflectionManager = reflectionManager;
-
-		if ( clazz == null ) throw new AssertionFailure( "Unable to build a DocumemntBuilder with a null class" );
-
-		rootPropertiesMetadata.boost = getBoost( clazz );
-		Set<XClass> processedClasses = new HashSet<XClass>();
-		processedClasses.add( clazz );
-		initializeMembers(clazz, rootPropertiesMetadata, true, "", processedClasses );
-		//processedClasses.remove( clazz ); for the sake of completness
-
-		if ( idKeywordName == null ) {
-			throw new SearchException( "No document id for: " + clazz.getName() );
-		}
-	}
-
-	private void initializeMembers(XClass clazz, PropertiesMetadata propertiesMetadata, boolean isRoot, String prefix,
-								   Set<XClass> processedClasses) {
-		for ( XClass currClass = clazz; currClass != null; currClass = currClass.getSuperclass() ) {
-			//rejecting non properties because the object is loaded from Hibernate, so indexing a non property does not make sense
-			List<XProperty> methods = currClass.getDeclaredProperties( XClass.ACCESS_PROPERTY );
-			for ( XProperty method : methods ) {
-				initializeMember( method, propertiesMetadata, isRoot, prefix, processedClasses );
-			}
-
-			List<XProperty> fields = currClass.getDeclaredProperties( XClass.ACCESS_FIELD );
-			for ( XProperty field : fields ) {
-				initializeMember( field, propertiesMetadata, isRoot, prefix, processedClasses );
-			}
-		}
-	}
-
-	private void initializeMember(XProperty member, PropertiesMetadata propertiesMetadata, boolean isRoot,
-								  String prefix, Set<XClass> processedClasses) {
-		Keyword keywordAnn = member.getAnnotation( Keyword.class );
-		if ( keywordAnn != null ) {
-			String name = prefix + BinderHelper.getAttributeName( member, keywordAnn.name() );
-			if ( isRoot && keywordAnn.id() ) {
-				idKeywordName = name;
-				idBoost = getBoost( member );
-				FieldBridge fieldBridge = BridgeFactory.guessType( member );
-				if ( fieldBridge instanceof TwoWayFieldBridge ) {
-					idBridge = (TwoWayFieldBridge) fieldBridge;
-				}
-				else {
-					throw new SearchException(
-							"Bridge for document id does not implement IdFieldBridge: " + member.getName() );
-				}
-				setAccessible( member );
-				idGetter = member;
-			}
-			else {
-				setAccessible( member );
-				propertiesMetadata.keywordGetters.add( member );
-				propertiesMetadata.keywordNames.add( name );
-				propertiesMetadata.keywordBridges.add( BridgeFactory.guessType( member ) );
-			}
-		}
-
-		Unstored unstoredAnn = member.getAnnotation( Unstored.class );
-		if ( unstoredAnn != null ) {
-			setAccessible( member );
-			propertiesMetadata.unstoredGetters.add( member );
-			propertiesMetadata.unstoredNames.add( prefix + BinderHelper.getAttributeName( member, unstoredAnn.name() ) );
-			propertiesMetadata.unstoredBridges.add( BridgeFactory.guessType( member ) );
-		}
-
-		Text textAnn = member.getAnnotation( Text.class );
-		if ( textAnn != null ) {
-			setAccessible( member );
-			propertiesMetadata.textGetters.add( member );
-			propertiesMetadata.textNames.add( prefix + BinderHelper.getAttributeName( member, textAnn.name() ) );
-			propertiesMetadata.textBridges.add( BridgeFactory.guessType( member ) );
-		}
-
-		DocumentId documentIdAnn = member.getAnnotation( DocumentId.class );
-		if ( isRoot && documentIdAnn != null ) {
-			if ( idKeywordName != null ) {
-				throw new AssertionFailure( "Two document id assigned: "
-						+ idKeywordName + " and " + BinderHelper.getAttributeName( member, documentIdAnn.name() ) );
-			}
-			idKeywordName = prefix + BinderHelper.getAttributeName( member, documentIdAnn.name() );
-			FieldBridge fieldBridge = BridgeFactory.guessType( member );
-			if ( fieldBridge instanceof TwoWayFieldBridge ) {
-				idBridge = (TwoWayFieldBridge) fieldBridge;
-			}
-			else {
-				throw new SearchException(
-						"Bridge for document id does not implement IdFieldBridge: " + member.getName() );
-			}
-			idBoost = getBoost( member );
-			setAccessible( member );
-			idGetter = member;
-		}
-
-		org.hibernate.search.annotations.Field fieldAnn =
-				member.getAnnotation( org.hibernate.search.annotations.Field.class );
-		if ( fieldAnn != null ) {
-			setAccessible( member );
-			propertiesMetadata.fieldGetters.add( member );
-			propertiesMetadata.fieldNames.add( prefix + BinderHelper.getAttributeName( member, fieldAnn.name() ) );
-			propertiesMetadata.fieldStore.add( getStore( fieldAnn.store() ) );
-			propertiesMetadata.fieldIndex.add( getIndex( fieldAnn.index() ) );
-			propertiesMetadata.fieldBridges.add( BridgeFactory.guessType( member ) );
-		}
-
-		IndexedEmbedded embeddedAnn = member.getAnnotation( IndexedEmbedded.class );
-		if ( embeddedAnn != null ) {
-			int oldMaxLevel = maxLevel;
-			maxLevel = embeddedAnn.depth() + level > maxLevel ? maxLevel : embeddedAnn.depth() + level;
-			level++;
-
-			if ( maxLevel == Integer.MAX_VALUE //infinite
-					&& processedClasses.contains( member.getClassOrElementClass() ) ) {
-				throw new SearchException(
-						"Circular reference. Duplicate use of "
-						+ member.getClassOrElementClass().getName()
-						+ " in root entity " + beanClass.getName()
-						+ "#" + buildEmbeddedPrefix( prefix, embeddedAnn, member )
-				);
-			}
-			if (level <= maxLevel) {
-				processedClasses.add( member.getClassOrElementClass() ); //push
-
-				setAccessible( member );
-				propertiesMetadata.embeddedGetters.add( member );
-				PropertiesMetadata metadata = new PropertiesMetadata();
-				propertiesMetadata.embeddedPropertiesMetadata.add(metadata);
-				metadata.boost = getBoost( member );
-				String localPrefix = buildEmbeddedPrefix( prefix, embeddedAnn, member );
-				initializeMembers( member.getClassOrElementClass(), metadata, false, localPrefix, processedClasses);
-
-				processedClasses.remove( member.getClassOrElementClass() ); //pop
-			}
-			else if ( log.isTraceEnabled() ) {
-				String localPrefix = buildEmbeddedPrefix( prefix, embeddedAnn, member );
-				log.trace( "depth reached, ignoring " + localPrefix );
-			}
-
-			level--;
-			maxLevel = oldMaxLevel; //set back the the old max level
-		}
-
-		ContainedIn containedAnn = member.getAnnotation( ContainedIn.class );
-		if ( containedAnn != null ) {
-			setAccessible( member );
-			propertiesMetadata.containedInGetters.add( member );
-		}
-	}
-
-	private String buildEmbeddedPrefix(String prefix, IndexedEmbedded embeddedAnn, XProperty member) {
-		String localPrefix = prefix;
-		if ( ".".equals( embeddedAnn.prefix() ) ) {
-			//default to property name
-			localPrefix += member.getName() + '.';
-		}
-		else {
-			localPrefix += embeddedAnn.prefix();
-		}
-		return localPrefix;
-	}
-
-	private Field.Store getStore(Store store) {
-		switch (store) {
-			case NO:
-				return Field.Store.NO;
-			case YES:
-				return Field.Store.YES;
-			case COMPRESS:
-				return Field.Store.COMPRESS;
-			default:
-				throw new AssertionFailure( "Unexpected Store: " + store );
-		}
-	}
-
-	private Field.Index getIndex(Index index) {
-		switch (index) {
-			case NO:
-				return Field.Index.NO;
-			case NO_NORMS:
-				return Field.Index.NO_NORMS;
-			case TOKENIZED:
-				return Field.Index.TOKENIZED;
-			case UN_TOKENIZED:
-				return Field.Index.UN_TOKENIZED;
-			default:
-				throw new AssertionFailure( "Unexpected Index: " + index );
-		}
-	}
-
-	private Float getBoost(XAnnotatedElement element) {
-		if ( element == null ) return null;
-		Boost boost = element.getAnnotation( Boost.class );
-		return boost != null ?
-				boost.value() :
-				null;
-	}
-
-	private Object getMemberValue(Object bean, XMember getter) {
-		Object value;
-		try {
-			value = getter.invoke( bean );
-		}
-		catch (Exception e) {
-			throw new IllegalStateException( "Could not get property value", e );
-		}
-		return value;
-	}
-
-	public void addWorkToQueue(T entity, Serializable id, WorkType workType, List<LuceneWork> queue, SearchFactory searchFactory) {
-		Class entityClass = Hibernate.getClass( entity );
-		//TODO with the caller loop we are in a n^2: optimize it using a HashMap for work recognition 
-		for ( LuceneWork luceneWork : queue) {
-			//whatever the actual work, we should ignore
-			if ( luceneWork.getEntityClass() == entityClass
-					&& luceneWork.getId().equals( id ) ) {//find a way to use Type.equals(x,y)
-				return;
-			}
-
-		}
-		boolean searchForContainers = false;
-		if ( workType == WorkType.ADD ) {
-			Document doc = getDocument( entity, id );
-			queue.add( new AddLuceneWork( id, entityClass, doc ) );
-			searchForContainers = true;
-		}
-		else if ( workType == WorkType.DELETE ) {
-			queue.add( new DeleteLuceneWork(id, entityClass) );
-		}
-		else if ( workType == WorkType.UPDATE ) {
-			Document doc = getDocument( entity, id );
-			/**
-			 * even with Lucene 2.1, use of indexWriter to update is not an option
-			 * We can only delete by term, and the index doesn't have a term that
-			 * uniquely identify the entry.
-			 * But essentially the optimization we are doing is the same Lucene is doing, the only extra cost is the
-			 * double file opening.
-			 */
-			queue.add( new DeleteLuceneWork(id, entityClass) );
-			queue.add( new AddLuceneWork( id, entityClass, doc ) );
-			searchForContainers = true;
-		}
-		else {
-			throw new AssertionFailure("Unknown WorkType: " + workType);
-		}
-
-		/**
-		 * When references are changed, either null or another one, we expect dirty checking to be triggered (both sides
-		 * have to be updated)
-		 * When the internal object is changed, we apply the {Add|Update}Work on containedIns
-		 */
-		if (searchForContainers) {
-			processContainedIn(entity, queue, rootPropertiesMetadata, searchFactory);
-		}
-	}
-
-	private void processContainedIn(Object instance, List<LuceneWork> queue, PropertiesMetadata metadata, SearchFactory searchFactory) {
-		for ( int i = 0; i < metadata.containedInGetters.size(); i++ ) {
-			XMember member = metadata.containedInGetters.get( i );
-			Object value = getMemberValue( instance, member );
-			if (value == null) continue;
-			Class valueClass = Hibernate.getClass( value );
-			DocumentBuilder builder = searchFactory.getDocumentBuilders().get( valueClass );
-			if (builder == null) continue;
-			if ( member.isArray() ) {
-				for ( Object arrayValue : (Object[]) value ) {
-					processContainedInValue( arrayValue, member, queue, valueClass, builder, searchFactory );
-				}
-			}
-			else if ( member.isCollection() ) {
-				Collection collection;
-				if ( Map.class.equals( member.getCollectionClass() ) ) {
-					//hum
-					collection = ( (Map) value ).values();
-				}
-				else {
-					collection = (Collection) value;
-				}
-				for ( Object collectionValue : collection ) {
-					processContainedInValue( collectionValue, member, queue, valueClass, builder, searchFactory );
-				}
-			}
-			else {
-				processContainedInValue( value, member, queue, valueClass, builder, searchFactory );
-			}
-		}
-		//an embedded cannot have a useful @ContainedIn (no shared reference)
-		//do not walk through them
-	}
-
-	private void processContainedInValue(Object value, XMember member, List<LuceneWork> queue, Class valueClass,
-										 DocumentBuilder builder, SearchFactory searchFactory) {
-		Serializable id = (Serializable) builder.getMemberValue( value, builder.idGetter );
-		builder.addWorkToQueue( value, id, WorkType.UPDATE, queue, searchFactory );
-	}
-
-	public Document getDocument(T instance, Serializable id) {
-		Document doc = new Document();
-		XClass instanceClass = reflectionManager.toXClass( instance.getClass() );
-		if ( rootPropertiesMetadata.boost != null ) {
-			doc.setBoost( rootPropertiesMetadata.boost );
-		}
-		{
-			Field classField =
-					new Field( CLASS_FIELDNAME, instanceClass.getName(), Field.Store.YES, Field.Index.UN_TOKENIZED );
-			doc.add( classField );
-			idBridge.set( idKeywordName, id, doc, Field.Store.YES, Field.Index.UN_TOKENIZED, idBoost );
-		}
-		buildDocumentFields( instance, doc, rootPropertiesMetadata );
-		return doc;
-	}
-
-	private void buildDocumentFields(Object instance, Document doc, PropertiesMetadata propertiesMetadata) {
-		if (instance == null) return;
-
-		for ( int i = 0; i < propertiesMetadata.keywordNames.size(); i++ ) {
-			XMember member = propertiesMetadata.keywordGetters.get( i );
-			Object value = getMemberValue( instance, member );
-			propertiesMetadata.keywordBridges.get( i ).set(
-					propertiesMetadata.keywordNames.get( i ), value, doc, Field.Store.YES,
-					Field.Index.UN_TOKENIZED, getBoost( member )
-			);
-		}
-		for ( int i = 0; i < propertiesMetadata.textNames.size(); i++ ) {
-			XMember member = propertiesMetadata.textGetters.get( i );
-			Object value = getMemberValue( instance, member );
-			propertiesMetadata.textBridges.get( i ).set(
-					propertiesMetadata.textNames.get( i ), value, doc, Field.Store.YES,
-					Field.Index.TOKENIZED, getBoost( member )
-			);
-		}
-		for ( int i = 0; i < propertiesMetadata.unstoredNames.size(); i++ ) {
-			XMember member = propertiesMetadata.unstoredGetters.get( i );
-			Object value = getMemberValue( instance, member );
-			propertiesMetadata.unstoredBridges.get( i ).set(
-					propertiesMetadata.unstoredNames.get( i ), value, doc, Field.Store.NO,
-					Field.Index.TOKENIZED, getBoost( member )
-			);
-		}
-		for ( int i = 0; i < propertiesMetadata.fieldNames.size(); i++ ) {
-			XMember member = propertiesMetadata.fieldGetters.get( i );
-			Object value = getMemberValue( instance, member );
-			propertiesMetadata.fieldBridges.get( i ).set(
-					propertiesMetadata.fieldNames.get( i ), value, doc, propertiesMetadata.fieldStore.get( i ),
-					propertiesMetadata.fieldIndex.get( i ), getBoost( member )
-			);
-		}
-		for ( int i = 0; i < propertiesMetadata.embeddedGetters.size(); i++ ) {
-			XMember member = propertiesMetadata.embeddedGetters.get( i );
-			Object value = getMemberValue( instance, member );
-			//if ( ! Hibernate.isInitialized( value ) ) continue; //this sounds like a bad idea 
-			//TODO handle boost at embedded level: already stored in propertiesMedatada.boost
-			buildDocumentFields( value, doc, propertiesMetadata.embeddedPropertiesMetadata.get( i ) );
-		}
-	}
-
-	public Term getTerm(Serializable id) {
-		return new Term( idKeywordName, idBridge.objectToString( id ) );
-	}
-
-	public DirectoryProvider getDirectoryProvider() {
-		return directoryProvider;
-	}
-
-	public Analyzer getAnalyzer() {
-		return analyzer;
-	}
-
-	private static void setAccessible(XMember member) {
-		if ( !Modifier.isPublic( member.getModifiers() ) ) {
-			member.setAccessible( true );
-		}
-	}
-
-	public TwoWayFieldBridge getIdBridge() {
-		return idBridge;
-	}
-
-	public String getIdKeywordName() {
-		return idKeywordName;
-	}
-
-	public static Class getDocumentClass(Document document) {
-		String className = document.get( DocumentBuilder.CLASS_FIELDNAME );
-		try {
-			return ReflectHelper.classForName( className );
-		}
-		catch (ClassNotFoundException e) {
-			throw new SearchException( "Unable to load indexed class: " + className, e );
-		}
-	}
-
-	public static Serializable getDocumentId(SearchFactory searchFactory, Class clazz, Document document) {
-		DocumentBuilder builder = searchFactory.getDocumentBuilders().get( clazz );
-		if ( builder == null ) throw new SearchException( "No Lucene configuration set up for: " + clazz.getName() );
-		return (Serializable) builder.getIdBridge().get( builder.getIdKeywordName(), document );
-	}
-
-	public void postInitialize(Set<Class> indexedClasses) {
-		//this method does not requires synchronization
-		Class plainClass = reflectionManager.toClass( beanClass );
-		Set<Class> tempMappedSubclasses = new HashSet<Class>();
-		//together with the caller this creates a o(2), but I think it's still faster than create the up hierarchy for each class
-		for ( Class currentClass : indexedClasses ) {
-			if ( plainClass.isAssignableFrom( currentClass ) ) tempMappedSubclasses.add( currentClass );
-		}
-		mappedSubclasses = Collections.unmodifiableSet( tempMappedSubclasses );
-	}
-
-
-	public Set<Class> getMappedSubclasses() {
-		return mappedSubclasses;
-	}
-
-	private static class PropertiesMetadata {
-		public Float boost = null;
-		public final List<XMember> keywordGetters = new ArrayList<XMember>();
-		public final List<String> keywordNames = new ArrayList<String>();
-		public final List<FieldBridge> keywordBridges = new ArrayList<FieldBridge>();
-		public final List<XMember> unstoredGetters = new ArrayList<XMember>();
-		public final List<String> unstoredNames = new ArrayList<String>();
-		public final List<FieldBridge> unstoredBridges = new ArrayList<FieldBridge>();
-		public final List<XMember> textGetters = new ArrayList<XMember>();
-		public final List<String> textNames = new ArrayList<String>();
-		public final List<FieldBridge> textBridges = new ArrayList<FieldBridge>();
-		public final List<String> fieldNames = new ArrayList<String>();
-		public final List<XMember> fieldGetters = new ArrayList<XMember>();
-		public final List<FieldBridge> fieldBridges = new ArrayList<FieldBridge>();
-		public final List<Field.Store> fieldStore = new ArrayList<Field.Store>();
-		public final List<Field.Index> fieldIndex = new ArrayList<Field.Index>();
-		public final List<XMember> embeddedGetters = new ArrayList<XMember>();
-		public final List<PropertiesMetadata> embeddedPropertiesMetadata = new ArrayList<PropertiesMetadata>();
-		public final List<XMember> containedInGetters = new ArrayList<XMember>();
-	}
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/engine/DocumentBuilder.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/engine/DocumentBuilder.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/engine/DocumentBuilder.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/engine/DocumentBuilder.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,514 @@
+//$Id: DocumentBuilder.java 10865 2006-11-23 23:30:01 +0100 (jeu., 23 nov. 2006) epbernard $
+package org.hibernate.search.engine;
+
+import java.io.Serializable;
+import java.lang.reflect.Modifier;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.lucene.analysis.Analyzer;
+import org.apache.lucene.document.Document;
+import org.apache.lucene.document.Field;
+import org.apache.lucene.index.Term;
+import org.hibernate.Hibernate;
+import org.hibernate.annotations.common.AssertionFailure;
+import org.hibernate.annotations.common.reflection.ReflectionManager;
+import org.hibernate.annotations.common.reflection.XAnnotatedElement;
+import org.hibernate.annotations.common.reflection.XClass;
+import org.hibernate.annotations.common.reflection.XMember;
+import org.hibernate.annotations.common.reflection.XProperty;
+import org.hibernate.search.SearchException;
+import org.hibernate.search.SearchFactory;
+import org.hibernate.search.annotations.Boost;
+import org.hibernate.search.annotations.ContainedIn;
+import org.hibernate.search.annotations.DocumentId;
+import org.hibernate.search.annotations.Index;
+import org.hibernate.search.annotations.IndexedEmbedded;
+import org.hibernate.search.annotations.Keyword;
+import org.hibernate.search.annotations.Store;
+import org.hibernate.search.annotations.Text;
+import org.hibernate.search.annotations.Unstored;
+import org.hibernate.search.backend.AddLuceneWork;
+import org.hibernate.search.backend.DeleteLuceneWork;
+import org.hibernate.search.backend.LuceneWork;
+import org.hibernate.search.backend.WorkType;
+import org.hibernate.search.bridge.BridgeFactory;
+import org.hibernate.search.bridge.FieldBridge;
+import org.hibernate.search.bridge.TwoWayFieldBridge;
+import org.hibernate.search.store.DirectoryProvider;
+import org.hibernate.search.util.BinderHelper;
+import org.hibernate.util.ReflectHelper;
+
+/**
+ * Set up and provide a manager for indexes classes
+ *
+ * @author Gavin King
+ * @author Emmanuel Bernard
+ * @author Sylvain Vieujot
+ * @author Richard Hallier
+ */
+public class DocumentBuilder<T> {
+	private static final Log log = LogFactory.getLog( DocumentBuilder.class );
+
+	private final PropertiesMetadata rootPropertiesMetadata = new PropertiesMetadata();
+	private final XClass beanClass;
+	private final DirectoryProvider directoryProvider;
+	private String idKeywordName;
+	private XMember idGetter;
+	private final Analyzer analyzer;
+	private Float idBoost;
+	public static final String CLASS_FIELDNAME = "_hibernate_class";
+	private TwoWayFieldBridge idBridge;
+	private Set<Class> mappedSubclasses = new HashSet<Class>();
+	private ReflectionManager reflectionManager;
+	private int level = 0;
+	private int maxLevel = Integer.MAX_VALUE;
+
+
+	public DocumentBuilder(XClass clazz, Analyzer analyzer, DirectoryProvider directory,
+						   ReflectionManager reflectionManager) {
+		this.beanClass = clazz;
+		this.analyzer = analyzer;
+		this.directoryProvider = directory;
+		//FIXME get rid of it when boost is stored?
+		this.reflectionManager = reflectionManager;
+
+		if ( clazz == null ) throw new AssertionFailure( "Unable to build a DocumemntBuilder with a null class" );
+
+		rootPropertiesMetadata.boost = getBoost( clazz );
+		Set<XClass> processedClasses = new HashSet<XClass>();
+		processedClasses.add( clazz );
+		initializeMembers(clazz, rootPropertiesMetadata, true, "", processedClasses );
+		//processedClasses.remove( clazz ); for the sake of completness
+
+		if ( idKeywordName == null ) {
+			throw new SearchException( "No document id for: " + clazz.getName() );
+		}
+	}
+
+	private void initializeMembers(XClass clazz, PropertiesMetadata propertiesMetadata, boolean isRoot, String prefix,
+								   Set<XClass> processedClasses) {
+		for ( XClass currClass = clazz; currClass != null; currClass = currClass.getSuperclass() ) {
+			//rejecting non properties because the object is loaded from Hibernate, so indexing a non property does not make sense
+			List<XProperty> methods = currClass.getDeclaredProperties( XClass.ACCESS_PROPERTY );
+			for ( XProperty method : methods ) {
+				initializeMember( method, propertiesMetadata, isRoot, prefix, processedClasses );
+			}
+
+			List<XProperty> fields = currClass.getDeclaredProperties( XClass.ACCESS_FIELD );
+			for ( XProperty field : fields ) {
+				initializeMember( field, propertiesMetadata, isRoot, prefix, processedClasses );
+			}
+		}
+	}
+
+	private void initializeMember(XProperty member, PropertiesMetadata propertiesMetadata, boolean isRoot,
+								  String prefix, Set<XClass> processedClasses) {
+		Keyword keywordAnn = member.getAnnotation( Keyword.class );
+		if ( keywordAnn != null ) {
+			String name = prefix + BinderHelper.getAttributeName( member, keywordAnn.name() );
+			if ( isRoot && keywordAnn.id() ) {
+				idKeywordName = name;
+				idBoost = getBoost( member );
+				FieldBridge fieldBridge = BridgeFactory.guessType( member );
+				if ( fieldBridge instanceof TwoWayFieldBridge ) {
+					idBridge = (TwoWayFieldBridge) fieldBridge;
+				}
+				else {
+					throw new SearchException(
+							"Bridge for document id does not implement IdFieldBridge: " + member.getName() );
+				}
+				setAccessible( member );
+				idGetter = member;
+			}
+			else {
+				setAccessible( member );
+				propertiesMetadata.keywordGetters.add( member );
+				propertiesMetadata.keywordNames.add( name );
+				propertiesMetadata.keywordBridges.add( BridgeFactory.guessType( member ) );
+			}
+		}
+
+		Unstored unstoredAnn = member.getAnnotation( Unstored.class );
+		if ( unstoredAnn != null ) {
+			setAccessible( member );
+			propertiesMetadata.unstoredGetters.add( member );
+			propertiesMetadata.unstoredNames.add( prefix + BinderHelper.getAttributeName( member, unstoredAnn.name() ) );
+			propertiesMetadata.unstoredBridges.add( BridgeFactory.guessType( member ) );
+		}
+
+		Text textAnn = member.getAnnotation( Text.class );
+		if ( textAnn != null ) {
+			setAccessible( member );
+			propertiesMetadata.textGetters.add( member );
+			propertiesMetadata.textNames.add( prefix + BinderHelper.getAttributeName( member, textAnn.name() ) );
+			propertiesMetadata.textBridges.add( BridgeFactory.guessType( member ) );
+		}
+
+		DocumentId documentIdAnn = member.getAnnotation( DocumentId.class );
+		if ( isRoot && documentIdAnn != null ) {
+			if ( idKeywordName != null ) {
+				throw new AssertionFailure( "Two document id assigned: "
+						+ idKeywordName + " and " + BinderHelper.getAttributeName( member, documentIdAnn.name() ) );
+			}
+			idKeywordName = prefix + BinderHelper.getAttributeName( member, documentIdAnn.name() );
+			FieldBridge fieldBridge = BridgeFactory.guessType( member );
+			if ( fieldBridge instanceof TwoWayFieldBridge ) {
+				idBridge = (TwoWayFieldBridge) fieldBridge;
+			}
+			else {
+				throw new SearchException(
+						"Bridge for document id does not implement IdFieldBridge: " + member.getName() );
+			}
+			idBoost = getBoost( member );
+			setAccessible( member );
+			idGetter = member;
+		}
+
+		org.hibernate.search.annotations.Field fieldAnn =
+				member.getAnnotation( org.hibernate.search.annotations.Field.class );
+		if ( fieldAnn != null ) {
+			setAccessible( member );
+			propertiesMetadata.fieldGetters.add( member );
+			propertiesMetadata.fieldNames.add( prefix + BinderHelper.getAttributeName( member, fieldAnn.name() ) );
+			propertiesMetadata.fieldStore.add( getStore( fieldAnn.store() ) );
+			propertiesMetadata.fieldIndex.add( getIndex( fieldAnn.index() ) );
+			propertiesMetadata.fieldBridges.add( BridgeFactory.guessType( member ) );
+		}
+
+		IndexedEmbedded embeddedAnn = member.getAnnotation( IndexedEmbedded.class );
+		if ( embeddedAnn != null ) {
+			int oldMaxLevel = maxLevel;
+			maxLevel = embeddedAnn.depth() + level > maxLevel ? maxLevel : embeddedAnn.depth() + level;
+			level++;
+
+			if ( maxLevel == Integer.MAX_VALUE //infinite
+					&& processedClasses.contains( member.getClassOrElementClass() ) ) {
+				throw new SearchException(
+						"Circular reference. Duplicate use of "
+						+ member.getClassOrElementClass().getName()
+						+ " in root entity " + beanClass.getName()
+						+ "#" + buildEmbeddedPrefix( prefix, embeddedAnn, member )
+				);
+			}
+			if (level <= maxLevel) {
+				processedClasses.add( member.getClassOrElementClass() ); //push
+
+				setAccessible( member );
+				propertiesMetadata.embeddedGetters.add( member );
+				PropertiesMetadata metadata = new PropertiesMetadata();
+				propertiesMetadata.embeddedPropertiesMetadata.add(metadata);
+				metadata.boost = getBoost( member );
+				String localPrefix = buildEmbeddedPrefix( prefix, embeddedAnn, member );
+				initializeMembers( member.getClassOrElementClass(), metadata, false, localPrefix, processedClasses);
+
+				processedClasses.remove( member.getClassOrElementClass() ); //pop
+			}
+			else if ( log.isTraceEnabled() ) {
+				String localPrefix = buildEmbeddedPrefix( prefix, embeddedAnn, member );
+				log.trace( "depth reached, ignoring " + localPrefix );
+			}
+
+			level--;
+			maxLevel = oldMaxLevel; //set back the the old max level
+		}
+
+		ContainedIn containedAnn = member.getAnnotation( ContainedIn.class );
+		if ( containedAnn != null ) {
+			setAccessible( member );
+			propertiesMetadata.containedInGetters.add( member );
+		}
+	}
+
+	private String buildEmbeddedPrefix(String prefix, IndexedEmbedded embeddedAnn, XProperty member) {
+		String localPrefix = prefix;
+		if ( ".".equals( embeddedAnn.prefix() ) ) {
+			//default to property name
+			localPrefix += member.getName() + '.';
+		}
+		else {
+			localPrefix += embeddedAnn.prefix();
+		}
+		return localPrefix;
+	}
+
+	private Field.Store getStore(Store store) {
+		switch (store) {
+			case NO:
+				return Field.Store.NO;
+			case YES:
+				return Field.Store.YES;
+			case COMPRESS:
+				return Field.Store.COMPRESS;
+			default:
+				throw new AssertionFailure( "Unexpected Store: " + store );
+		}
+	}
+
+	private Field.Index getIndex(Index index) {
+		switch (index) {
+			case NO:
+				return Field.Index.NO;
+			case NO_NORMS:
+				return Field.Index.NO_NORMS;
+			case TOKENIZED:
+				return Field.Index.TOKENIZED;
+			case UN_TOKENIZED:
+				return Field.Index.UN_TOKENIZED;
+			default:
+				throw new AssertionFailure( "Unexpected Index: " + index );
+		}
+	}
+
+	private Float getBoost(XAnnotatedElement element) {
+		if ( element == null ) return null;
+		Boost boost = element.getAnnotation( Boost.class );
+		return boost != null ?
+				boost.value() :
+				null;
+	}
+
+	private Object getMemberValue(Object bean, XMember getter) {
+		Object value;
+		try {
+			value = getter.invoke( bean );
+		}
+		catch (Exception e) {
+			throw new IllegalStateException( "Could not get property value", e );
+		}
+		return value;
+	}
+
+	public void addWorkToQueue(T entity, Serializable id, WorkType workType, List<LuceneWork> queue, SearchFactory searchFactory) {
+		Class entityClass = Hibernate.getClass( entity );
+		//TODO with the caller loop we are in a n^2: optimize it using a HashMap for work recognition 
+		for ( LuceneWork luceneWork : queue) {
+			//whatever the actual work, we should ignore
+			if ( luceneWork.getEntityClass() == entityClass
+					&& luceneWork.getId().equals( id ) ) {//find a way to use Type.equals(x,y)
+				return;
+			}
+
+		}
+		boolean searchForContainers = false;
+		if ( workType == WorkType.ADD ) {
+			Document doc = getDocument( entity, id );
+			queue.add( new AddLuceneWork( id, entityClass, doc ) );
+			searchForContainers = true;
+		}
+		else if ( workType == WorkType.DELETE ) {
+			queue.add( new DeleteLuceneWork(id, entityClass) );
+		}
+		else if ( workType == WorkType.UPDATE ) {
+			Document doc = getDocument( entity, id );
+			/**
+			 * even with Lucene 2.1, use of indexWriter to update is not an option
+			 * We can only delete by term, and the index doesn't have a term that
+			 * uniquely identify the entry.
+			 * But essentially the optimization we are doing is the same Lucene is doing, the only extra cost is the
+			 * double file opening.
+			 */
+			queue.add( new DeleteLuceneWork(id, entityClass) );
+			queue.add( new AddLuceneWork( id, entityClass, doc ) );
+			searchForContainers = true;
+		}
+		else {
+			throw new AssertionFailure("Unknown WorkType: " + workType);
+		}
+
+		/**
+		 * When references are changed, either null or another one, we expect dirty checking to be triggered (both sides
+		 * have to be updated)
+		 * When the internal object is changed, we apply the {Add|Update}Work on containedIns
+		 */
+		if (searchForContainers) {
+			processContainedIn(entity, queue, rootPropertiesMetadata, searchFactory);
+		}
+	}
+
+	private void processContainedIn(Object instance, List<LuceneWork> queue, PropertiesMetadata metadata, SearchFactory searchFactory) {
+		for ( int i = 0; i < metadata.containedInGetters.size(); i++ ) {
+			XMember member = metadata.containedInGetters.get( i );
+			Object value = getMemberValue( instance, member );
+			if (value == null) continue;
+			Class valueClass = Hibernate.getClass( value );
+			DocumentBuilder builder = searchFactory.getDocumentBuilders().get( valueClass );
+			if (builder == null) continue;
+			if ( member.isArray() ) {
+				for ( Object arrayValue : (Object[]) value ) {
+					processContainedInValue( arrayValue, member, queue, valueClass, builder, searchFactory );
+				}
+			}
+			else if ( member.isCollection() ) {
+				Collection collection;
+				if ( Map.class.equals( member.getCollectionClass() ) ) {
+					//hum
+					collection = ( (Map) value ).values();
+				}
+				else {
+					collection = (Collection) value;
+				}
+				for ( Object collectionValue : collection ) {
+					processContainedInValue( collectionValue, member, queue, valueClass, builder, searchFactory );
+				}
+			}
+			else {
+				processContainedInValue( value, member, queue, valueClass, builder, searchFactory );
+			}
+		}
+		//an embedded cannot have a useful @ContainedIn (no shared reference)
+		//do not walk through them
+	}
+
+	private void processContainedInValue(Object value, XMember member, List<LuceneWork> queue, Class valueClass,
+										 DocumentBuilder builder, SearchFactory searchFactory) {
+		Serializable id = (Serializable) builder.getMemberValue( value, builder.idGetter );
+		builder.addWorkToQueue( value, id, WorkType.UPDATE, queue, searchFactory );
+	}
+
+	public Document getDocument(T instance, Serializable id) {
+		Document doc = new Document();
+		XClass instanceClass = reflectionManager.toXClass( instance.getClass() );
+		if ( rootPropertiesMetadata.boost != null ) {
+			doc.setBoost( rootPropertiesMetadata.boost );
+		}
+		{
+			Field classField =
+					new Field( CLASS_FIELDNAME, instanceClass.getName(), Field.Store.YES, Field.Index.UN_TOKENIZED );
+			doc.add( classField );
+			idBridge.set( idKeywordName, id, doc, Field.Store.YES, Field.Index.UN_TOKENIZED, idBoost );
+		}
+		buildDocumentFields( instance, doc, rootPropertiesMetadata );
+		return doc;
+	}
+
+	private void buildDocumentFields(Object instance, Document doc, PropertiesMetadata propertiesMetadata) {
+		if (instance == null) return;
+
+		for ( int i = 0; i < propertiesMetadata.keywordNames.size(); i++ ) {
+			XMember member = propertiesMetadata.keywordGetters.get( i );
+			Object value = getMemberValue( instance, member );
+			propertiesMetadata.keywordBridges.get( i ).set(
+					propertiesMetadata.keywordNames.get( i ), value, doc, Field.Store.YES,
+					Field.Index.UN_TOKENIZED, getBoost( member )
+			);
+		}
+		for ( int i = 0; i < propertiesMetadata.textNames.size(); i++ ) {
+			XMember member = propertiesMetadata.textGetters.get( i );
+			Object value = getMemberValue( instance, member );
+			propertiesMetadata.textBridges.get( i ).set(
+					propertiesMetadata.textNames.get( i ), value, doc, Field.Store.YES,
+					Field.Index.TOKENIZED, getBoost( member )
+			);
+		}
+		for ( int i = 0; i < propertiesMetadata.unstoredNames.size(); i++ ) {
+			XMember member = propertiesMetadata.unstoredGetters.get( i );
+			Object value = getMemberValue( instance, member );
+			propertiesMetadata.unstoredBridges.get( i ).set(
+					propertiesMetadata.unstoredNames.get( i ), value, doc, Field.Store.NO,
+					Field.Index.TOKENIZED, getBoost( member )
+			);
+		}
+		for ( int i = 0; i < propertiesMetadata.fieldNames.size(); i++ ) {
+			XMember member = propertiesMetadata.fieldGetters.get( i );
+			Object value = getMemberValue( instance, member );
+			propertiesMetadata.fieldBridges.get( i ).set(
+					propertiesMetadata.fieldNames.get( i ), value, doc, propertiesMetadata.fieldStore.get( i ),
+					propertiesMetadata.fieldIndex.get( i ), getBoost( member )
+			);
+		}
+		for ( int i = 0; i < propertiesMetadata.embeddedGetters.size(); i++ ) {
+			XMember member = propertiesMetadata.embeddedGetters.get( i );
+			Object value = getMemberValue( instance, member );
+			//if ( ! Hibernate.isInitialized( value ) ) continue; //this sounds like a bad idea 
+			//TODO handle boost at embedded level: already stored in propertiesMedatada.boost
+			buildDocumentFields( value, doc, propertiesMetadata.embeddedPropertiesMetadata.get( i ) );
+		}
+	}
+
+	public Term getTerm(Serializable id) {
+		return new Term( idKeywordName, idBridge.objectToString( id ) );
+	}
+
+	public DirectoryProvider getDirectoryProvider() {
+		return directoryProvider;
+	}
+
+	public Analyzer getAnalyzer() {
+		return analyzer;
+	}
+
+	private static void setAccessible(XMember member) {
+		if ( !Modifier.isPublic( member.getModifiers() ) ) {
+			member.setAccessible( true );
+		}
+	}
+
+	public TwoWayFieldBridge getIdBridge() {
+		return idBridge;
+	}
+
+	public String getIdKeywordName() {
+		return idKeywordName;
+	}
+
+	public static Class getDocumentClass(Document document) {
+		String className = document.get( DocumentBuilder.CLASS_FIELDNAME );
+		try {
+			return ReflectHelper.classForName( className );
+		}
+		catch (ClassNotFoundException e) {
+			throw new SearchException( "Unable to load indexed class: " + className, e );
+		}
+	}
+
+	public static Serializable getDocumentId(SearchFactory searchFactory, Class clazz, Document document) {
+		DocumentBuilder builder = searchFactory.getDocumentBuilders().get( clazz );
+		if ( builder == null ) throw new SearchException( "No Lucene configuration set up for: " + clazz.getName() );
+		return (Serializable) builder.getIdBridge().get( builder.getIdKeywordName(), document );
+	}
+
+	public void postInitialize(Set<Class> indexedClasses) {
+		//this method does not requires synchronization
+		Class plainClass = reflectionManager.toClass( beanClass );
+		Set<Class> tempMappedSubclasses = new HashSet<Class>();
+		//together with the caller this creates a o(2), but I think it's still faster than create the up hierarchy for each class
+		for ( Class currentClass : indexedClasses ) {
+			if ( plainClass.isAssignableFrom( currentClass ) ) tempMappedSubclasses.add( currentClass );
+		}
+		mappedSubclasses = Collections.unmodifiableSet( tempMappedSubclasses );
+	}
+
+
+	public Set<Class> getMappedSubclasses() {
+		return mappedSubclasses;
+	}
+
+	private static class PropertiesMetadata {
+		public Float boost = null;
+		public final List<XMember> keywordGetters = new ArrayList<XMember>();
+		public final List<String> keywordNames = new ArrayList<String>();
+		public final List<FieldBridge> keywordBridges = new ArrayList<FieldBridge>();
+		public final List<XMember> unstoredGetters = new ArrayList<XMember>();
+		public final List<String> unstoredNames = new ArrayList<String>();
+		public final List<FieldBridge> unstoredBridges = new ArrayList<FieldBridge>();
+		public final List<XMember> textGetters = new ArrayList<XMember>();
+		public final List<String> textNames = new ArrayList<String>();
+		public final List<FieldBridge> textBridges = new ArrayList<FieldBridge>();
+		public final List<String> fieldNames = new ArrayList<String>();
+		public final List<XMember> fieldGetters = new ArrayList<XMember>();
+		public final List<FieldBridge> fieldBridges = new ArrayList<FieldBridge>();
+		public final List<Field.Store> fieldStore = new ArrayList<Field.Store>();
+		public final List<Field.Index> fieldIndex = new ArrayList<Field.Index>();
+		public final List<XMember> embeddedGetters = new ArrayList<XMember>();
+		public final List<PropertiesMetadata> embeddedPropertiesMetadata = new ArrayList<PropertiesMetadata>();
+		public final List<XMember> containedInGetters = new ArrayList<XMember>();
+	}
+}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/event (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/event)

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/event/FullTextIndexEventListener.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/event/FullTextIndexEventListener.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/event/FullTextIndexEventListener.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,81 +0,0 @@
-//$Id: FullTextIndexEventListener.java 10865 2006-11-23 23:30:01 +0100 (jeu., 23 nov. 2006) epbernard $
-package org.hibernate.search.event;
-
-import java.io.Serializable;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.hibernate.cfg.Configuration;
-import org.hibernate.event.AbstractEvent;
-import org.hibernate.event.Initializable;
-import org.hibernate.event.PostDeleteEvent;
-import org.hibernate.event.PostDeleteEventListener;
-import org.hibernate.event.PostInsertEvent;
-import org.hibernate.event.PostInsertEventListener;
-import org.hibernate.event.PostUpdateEvent;
-import org.hibernate.event.PostUpdateEventListener;
-import org.hibernate.search.backend.WorkType;
-import org.hibernate.search.engine.DocumentBuilder;
-import org.hibernate.search.SearchFactory;
-
-/**
- * This listener supports setting a parent directory for all generated index files.
- * It also supports setting the analyzer class to be used.
- *
- * @author Gavin King
- * @author Emmanuel Bernard
- * @author Mattias Arbin
- */
-//TODO work on sharing the same indexWriters and readers across a single post operation...
-//TODO implement and use a LockableDirectoryProvider that wraps a DP to handle the lock inside the LDP
-public class FullTextIndexEventListener implements PostDeleteEventListener, PostInsertEventListener,
-		PostUpdateEventListener, Initializable {
-
-	private static final Log log = LogFactory.getLog( FullTextIndexEventListener.class );
-	private boolean used;
-
-	private SearchFactory searchFactory;
-
-	public void initialize(Configuration cfg) {
-		searchFactory = SearchFactory.getSearchFactory( cfg );
-		used = searchFactory.getDocumentBuilders().size() != 0;
-	}
-
-	public SearchFactory getSearchFactory() {
-		return searchFactory;
-	}
-
-	public void onPostDelete(PostDeleteEvent event) {
-		if ( used && searchFactory.getDocumentBuilders().containsKey( event.getEntity().getClass() ) ) {
-			processWork( event.getEntity(), event.getId(), WorkType.DELETE, event );
-		}
-	}
-
-	public void onPostInsert(PostInsertEvent event) {
-		if (used) {
-			final Object entity = event.getEntity();
-			DocumentBuilder<Object> builder = searchFactory.getDocumentBuilders().get( entity.getClass() );
-			//not strictly necessary but a smal optimization
-			if ( builder != null ) {
-				Serializable id = event.getId();
-				processWork( entity, id, WorkType.ADD, event );
-			}
-		}
-	}
-
-	public void onPostUpdate(PostUpdateEvent event) {
-		if (used) {
-			final Object entity = event.getEntity();
-			//not strictly necessary but a smal optimization
-			DocumentBuilder<Object> builder = searchFactory.getDocumentBuilders().get( entity.getClass() );
-			if ( builder != null ) {
-				Serializable id = event.getId();
-				processWork( entity, id, WorkType.UPDATE, event );
-			}
-		}
-	}
-
-	private void processWork(Object entity, Serializable id, WorkType workType, AbstractEvent event) {
-		searchFactory.getWorker().performWork( entity, id, workType, event.getSession() );
-	}
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/event/FullTextIndexEventListener.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/event/FullTextIndexEventListener.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/event/FullTextIndexEventListener.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/event/FullTextIndexEventListener.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,81 @@
+//$Id: FullTextIndexEventListener.java 10865 2006-11-23 23:30:01 +0100 (jeu., 23 nov. 2006) epbernard $
+package org.hibernate.search.event;
+
+import java.io.Serializable;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.hibernate.cfg.Configuration;
+import org.hibernate.event.AbstractEvent;
+import org.hibernate.event.Initializable;
+import org.hibernate.event.PostDeleteEvent;
+import org.hibernate.event.PostDeleteEventListener;
+import org.hibernate.event.PostInsertEvent;
+import org.hibernate.event.PostInsertEventListener;
+import org.hibernate.event.PostUpdateEvent;
+import org.hibernate.event.PostUpdateEventListener;
+import org.hibernate.search.backend.WorkType;
+import org.hibernate.search.engine.DocumentBuilder;
+import org.hibernate.search.SearchFactory;
+
+/**
+ * This listener supports setting a parent directory for all generated index files.
+ * It also supports setting the analyzer class to be used.
+ *
+ * @author Gavin King
+ * @author Emmanuel Bernard
+ * @author Mattias Arbin
+ */
+//TODO work on sharing the same indexWriters and readers across a single post operation...
+//TODO implement and use a LockableDirectoryProvider that wraps a DP to handle the lock inside the LDP
+public class FullTextIndexEventListener implements PostDeleteEventListener, PostInsertEventListener,
+		PostUpdateEventListener, Initializable {
+
+	private static final Log log = LogFactory.getLog( FullTextIndexEventListener.class );
+	private boolean used;
+
+	private SearchFactory searchFactory;
+
+	public void initialize(Configuration cfg) {
+		searchFactory = SearchFactory.getSearchFactory( cfg );
+		used = searchFactory.getDocumentBuilders().size() != 0;
+	}
+
+	public SearchFactory getSearchFactory() {
+		return searchFactory;
+	}
+
+	public void onPostDelete(PostDeleteEvent event) {
+		if ( used && searchFactory.getDocumentBuilders().containsKey( event.getEntity().getClass() ) ) {
+			processWork( event.getEntity(), event.getId(), WorkType.DELETE, event );
+		}
+	}
+
+	public void onPostInsert(PostInsertEvent event) {
+		if (used) {
+			final Object entity = event.getEntity();
+			DocumentBuilder<Object> builder = searchFactory.getDocumentBuilders().get( entity.getClass() );
+			//not strictly necessary but a smal optimization
+			if ( builder != null ) {
+				Serializable id = event.getId();
+				processWork( entity, id, WorkType.ADD, event );
+			}
+		}
+	}
+
+	public void onPostUpdate(PostUpdateEvent event) {
+		if (used) {
+			final Object entity = event.getEntity();
+			//not strictly necessary but a smal optimization
+			DocumentBuilder<Object> builder = searchFactory.getDocumentBuilders().get( entity.getClass() );
+			if ( builder != null ) {
+				Serializable id = event.getId();
+				processWork( entity, id, WorkType.UPDATE, event );
+			}
+		}
+	}
+
+	private void processWork(Object entity, Serializable id, WorkType workType, AbstractEvent event) {
+		searchFactory.getWorker().performWork( entity, id, workType, event.getSession() );
+	}
+}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/impl (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/impl)

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/impl/FullTextSessionImpl.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/impl/FullTextSessionImpl.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/impl/FullTextSessionImpl.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,631 +0,0 @@
-//$Id: $
-package org.hibernate.search.impl;
-
-import java.io.Serializable;
-import java.sql.Connection;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.hibernate.CacheMode;
-import org.hibernate.Criteria;
-import org.hibernate.EntityMode;
-import org.hibernate.Filter;
-import org.hibernate.FlushMode;
-import org.hibernate.Hibernate;
-import org.hibernate.HibernateException;
-import org.hibernate.Interceptor;
-import org.hibernate.LockMode;
-import org.hibernate.Query;
-import org.hibernate.ReplicationMode;
-import org.hibernate.SQLQuery;
-import org.hibernate.ScrollMode;
-import org.hibernate.ScrollableResults;
-import org.hibernate.classic.Session;
-import org.hibernate.SessionFactory;
-import org.hibernate.Transaction;
-import org.hibernate.collection.PersistentCollection;
-import org.hibernate.engine.EntityKey;
-import org.hibernate.engine.PersistenceContext;
-import org.hibernate.engine.QueryParameters;
-import org.hibernate.engine.SessionFactoryImplementor;
-import org.hibernate.engine.SessionImplementor;
-import org.hibernate.engine.query.ParameterMetadata;
-import org.hibernate.engine.query.sql.NativeSQLQuerySpecification;
-import org.hibernate.event.EventListeners;
-import org.hibernate.event.EventSource;
-import org.hibernate.impl.CriteriaImpl;
-import org.hibernate.jdbc.Batcher;
-import org.hibernate.jdbc.JDBCContext;
-import org.hibernate.loader.custom.CustomQuery;
-import org.hibernate.persister.entity.EntityPersister;
-import org.hibernate.search.FullTextSession;
-import org.hibernate.search.SearchFactory;
-import org.hibernate.search.backend.WorkType;
-import org.hibernate.search.engine.DocumentBuilder;
-import org.hibernate.search.query.FullTextQueryImpl;
-import org.hibernate.search.util.ContextHelper;
-import org.hibernate.stat.SessionStatistics;
-import org.hibernate.type.Type;
-
-/**
- * Lucene Full text search aware session
- *
- * @author Emmanuel Bernard
- */
-public class FullTextSessionImpl implements FullTextSession, SessionImplementor {
-	private final Session session;
-	private final EventSource eventSource;
-	private final SessionImplementor sessionImplementor;
-
-	public FullTextSessionImpl(org.hibernate.Session session) {
-		this.session = (Session) session;
-		this.eventSource = (EventSource) session;
-		this.sessionImplementor = (SessionImplementor) session;
-	}
-
-	/**
-	 * Execute a Lucene query and retrieve managed objects of type entities (or their indexed subclasses)
-     * If entities is empty, include all indexed entities
-     * 
-	 * @param entities must be immutable for the lifetime of the query object
-	 */
-	public Query createFullTextQuery(org.apache.lucene.search.Query luceneQuery, Class... entities) {
-		return new FullTextQueryImpl( luceneQuery, entities, sessionImplementor, new ParameterMetadata(null, null) );
-	}
-
-	/**
-	 * (re)index an entity.
-	 * Non indexable entities are ignored
-	 * The entity must be associated with the session
-	 *
-	 * @param entity must not be null
-	 */
-	public void index(Object entity) {
-		if (entity == null) return;
-		Class clazz = Hibernate.getClass( entity );
-		//TODO cache that at the FTSession level
-		SearchFactory searchFactory = ContextHelper.getSearchFactory( session );
-		//not strictly necessary but a small optimization
-		DocumentBuilder<Object> builder = searchFactory.getDocumentBuilders().get( clazz );
-		if ( builder != null ) {
-			Serializable id = session.getIdentifier( entity );
-			searchFactory.getWorker().performWork( entity, id, WorkType.UPDATE, eventSource );
-		}
-		//TODO
-		//need to add elements in a queue kept at the Session level
-		//the queue will be processed by a Lucene(Auto)FlushEventListener
-		//note that we could keep this queue somewhere in the event listener in the mean time but that requires
-		// a synchronized hashmap holding this queue on a per session basis plus some session house keeping (yuk)
-		//an other solution would be to subclass SessionImpl instead of having this LuceneSession delecation model
-		// this is an open discussion
-	}
-
-	public Query createSQLQuery(String sql, String returnAlias, Class returnClass) {
-		return session.createSQLQuery( sql, returnAlias, returnClass );
-	}
-
-	public Query createSQLQuery(String sql, String[] returnAliases, Class[] returnClasses) {
-		return session.createSQLQuery( sql, returnAliases, returnClasses );
-	}
-
-	public int delete(String query) throws HibernateException {
-		return session.delete( query );
-	}
-
-	public int delete(String query, Object value, Type type) throws HibernateException {
-		return session.delete( query, value, type );
-	}
-
-	public int delete(String query, Object[] values, Type[] types) throws HibernateException {
-		return session.delete( query, values, types );
-	}
-
-	public Collection filter(Object collection, String filter) throws HibernateException {
-		return session.filter( collection, filter );
-	}
-
-	public Collection filter(Object collection, String filter, Object value, Type type) throws HibernateException {
-		return session.filter( collection, filter, value, type );
-	}
-
-	public Collection filter(Object collection, String filter, Object[] values, Type[] types) throws HibernateException {
-		return session.filter( collection, filter, values, types );
-	}
-
-	public List find(String query) throws HibernateException {
-		return session.find( query );
-	}
-
-	public List find(String query, Object value, Type type) throws HibernateException {
-		return session.find( query, value, type );
-	}
-
-	public List find(String query, Object[] values, Type[] types) throws HibernateException {
-		return session.find( query, values, types );
-	}
-
-	public Iterator iterate(String query) throws HibernateException {
-		return session.iterate( query );
-	}
-
-	public Iterator iterate(String query, Object value, Type type) throws HibernateException {
-		return session.iterate( query, value, type );
-	}
-
-	public Iterator iterate(String query, Object[] values, Type[] types) throws HibernateException {
-		return session.iterate( query, values, types );
-	}
-
-	public void save(String entityName, Object object, Serializable id) throws HibernateException {
-		session.save( entityName, object, id );
-	}
-
-	public void save(Object object, Serializable id) throws HibernateException {
-		session.save( object, id );
-	}
-
-	public Object saveOrUpdateCopy(String entityName, Object object) throws HibernateException {
-		return session.saveOrUpdateCopy( entityName, object );
-	}
-
-	public Object saveOrUpdateCopy(String entityName, Object object, Serializable id) throws HibernateException {
-		return session.saveOrUpdateCopy( entityName, object, id );
-	}
-
-	public Object saveOrUpdateCopy(Object object) throws HibernateException {
-		return session.saveOrUpdateCopy( object );
-	}
-
-	public Object saveOrUpdateCopy(Object object, Serializable id) throws HibernateException {
-		return session.saveOrUpdateCopy( object, id );
-	}
-
-	public void update(String entityName, Object object, Serializable id) throws HibernateException {
-		session.update( entityName, object, id );
-	}
-
-	public void update(Object object, Serializable id) throws HibernateException {
-		session.update( object, id );
-	}
-
-	public Transaction beginTransaction() throws HibernateException {
-		return session.beginTransaction();
-	}
-
-	public void cancelQuery() throws HibernateException {
-		session.cancelQuery();
-	}
-
-	public void clear() {
-		//FIXME should session clear work with the lucene queue
-		session.clear();
-	}
-
-	public Connection close() throws HibernateException {
-		return session.close();
-	}
-
-	public Connection connection() throws HibernateException {
-		return session.connection();
-	}
-
-	public boolean contains(Object object) {
-		return session.contains( object );
-	}
-
-	public Criteria createCriteria(String entityName) {
-		return session.createCriteria( entityName );
-	}
-
-	public Criteria createCriteria(String entityName, String alias) {
-		return session.createCriteria( entityName, alias );
-	}
-
-	public Criteria createCriteria(Class persistentClass) {
-		return session.createCriteria( persistentClass );
-	}
-
-	public Criteria createCriteria(Class persistentClass, String alias) {
-		return session.createCriteria( persistentClass, alias );
-	}
-
-	public Query createFilter(Object collection, String queryString) throws HibernateException {
-		return session.createFilter( collection, queryString );
-	}
-
-	public Query createQuery(String queryString) throws HibernateException {
-		return session.createQuery( queryString );
-	}
-
-	public SQLQuery createSQLQuery(String queryString) throws HibernateException {
-		return session.createSQLQuery( queryString );
-	}
-
-	public void delete(String entityName, Object object) throws HibernateException {
-		session.delete( entityName, object );
-	}
-
-	public void delete(Object object) throws HibernateException {
-		session.delete( object );
-	}
-
-	public void disableFilter(String filterName) {
-		session.disableFilter( filterName );
-	}
-
-	public Connection disconnect() throws HibernateException {
-		return session.disconnect();
-	}
-
-	public Filter enableFilter(String filterName) {
-		return session.enableFilter( filterName );
-	}
-
-	public void evict(Object object) throws HibernateException {
-		session.evict( object );
-	}
-
-	public void flush() throws HibernateException {
-		session.flush();
-	}
-
-	public Object get(Class clazz, Serializable id) throws HibernateException {
-		return session.get( clazz, id );
-	}
-
-	public Object get(Class clazz, Serializable id, LockMode lockMode) throws HibernateException {
-		return session.get( clazz, id, lockMode );
-	}
-
-	public Object get(String entityName, Serializable id) throws HibernateException {
-		return session.get( entityName, id );
-	}
-
-	public Object get(String entityName, Serializable id, LockMode lockMode) throws HibernateException {
-		return session.get( entityName, id, lockMode );
-	}
-
-	public CacheMode getCacheMode() {
-		return session.getCacheMode();
-	}
-
-	public LockMode getCurrentLockMode(Object object) throws HibernateException {
-		return session.getCurrentLockMode( object );
-	}
-
-	public Filter getEnabledFilter(String filterName) {
-		return session.getEnabledFilter( filterName );
-	}
-
-	public Interceptor getInterceptor() {
-		return sessionImplementor.getInterceptor();
-	}
-
-	public void setAutoClear(boolean enabled) {
-		sessionImplementor.setAutoClear( enabled );
-	}
-
-	public boolean isTransactionInProgress() {
-		return sessionImplementor.isTransactionInProgress();
-	}
-
-	public void initializeCollection(PersistentCollection collection, boolean writing) throws HibernateException {
-		sessionImplementor.initializeCollection( collection, writing );
-	}
-
-	public Object internalLoad(String entityName, Serializable id, boolean eager, boolean nullable)
-			throws HibernateException {
-		return sessionImplementor.internalLoad( entityName, id, eager, nullable );
-	}
-
-	public Object immediateLoad(String entityName, Serializable id) throws HibernateException {
-		return sessionImplementor.immediateLoad( entityName, id );
-	}
-
-	public long getTimestamp() {
-		return sessionImplementor.getTimestamp();
-	}
-
-	public SessionFactoryImplementor getFactory() {
-		return sessionImplementor.getFactory();
-	}
-
-	public Batcher getBatcher() {
-		return sessionImplementor.getBatcher();
-	}
-
-	public List list(String query, QueryParameters queryParameters) throws HibernateException {
-		return sessionImplementor.list( query,  queryParameters );
-	}
-
-	public Iterator iterate(String query, QueryParameters queryParameters) throws HibernateException {
-		return sessionImplementor.iterate( query, queryParameters );
-	}
-
-	public ScrollableResults scroll(String query, QueryParameters queryParameters) throws HibernateException {
-		return sessionImplementor.scroll( query, queryParameters );
-	}
-
-	public ScrollableResults scroll(CriteriaImpl criteria, ScrollMode scrollMode) {
-		return sessionImplementor.scroll( criteria, scrollMode );
-	}
-
-	public List list(CriteriaImpl criteria) {
-		return sessionImplementor.list( criteria );
-	}
-
-	public List listFilter(Object collection, String filter, QueryParameters queryParameters)
-			throws HibernateException {
-		return sessionImplementor.listFilter( collection, filter, queryParameters );
-	}
-
-	public Iterator iterateFilter(Object collection, String filter, QueryParameters queryParameters)
-			throws HibernateException {
-		return sessionImplementor.iterateFilter( collection, filter, queryParameters );
-	}
-
-	public EntityPersister getEntityPersister(String entityName, Object object) throws HibernateException {
-		return sessionImplementor.getEntityPersister( entityName, object );
-	}
-
-	public Object getEntityUsingInterceptor(EntityKey key) throws HibernateException {
-		return sessionImplementor.getEntityUsingInterceptor( key );
-	}
-
-	public void afterTransactionCompletion(boolean successful, Transaction tx) {
-		sessionImplementor.afterTransactionCompletion( successful, tx );
-	}
-
-	public void beforeTransactionCompletion(Transaction tx) {
-		sessionImplementor.beforeTransactionCompletion( tx );
-	}
-
-	public Serializable getContextEntityIdentifier(Object object) {
-		return sessionImplementor.getContextEntityIdentifier( object );
-	}
-
-	public String bestGuessEntityName(Object object) {
-		return sessionImplementor.bestGuessEntityName( object );
-	}
-
-	public String guessEntityName(Object entity) throws HibernateException {
-		return sessionImplementor.guessEntityName( entity );
-	}
-
-	public Object instantiate(String entityName, Serializable id) throws HibernateException {
-		return sessionImplementor.instantiate( entityName, id );
-	}
-
-	public List listCustomQuery(CustomQuery customQuery, QueryParameters queryParameters) throws HibernateException {
-		return sessionImplementor.listCustomQuery( customQuery, queryParameters );
-	}
-
-	public ScrollableResults scrollCustomQuery(CustomQuery customQuery, QueryParameters queryParameters)
-			throws HibernateException {
-		return sessionImplementor.scrollCustomQuery( customQuery, queryParameters );
-	}
-
-	public List list(NativeSQLQuerySpecification spec, QueryParameters queryParameters) throws HibernateException {
-		return sessionImplementor.list( spec, queryParameters );
-	}
-
-	public ScrollableResults scroll(NativeSQLQuerySpecification spec, QueryParameters queryParameters)
-			throws HibernateException {
-		return sessionImplementor.scroll( spec, queryParameters );
-	}
-
-	public Object getFilterParameterValue(String filterParameterName) {
-		return sessionImplementor.getFilterParameterValue( filterParameterName );
-	}
-
-	public Type getFilterParameterType(String filterParameterName) {
-		return sessionImplementor.getFilterParameterType( filterParameterName );
-	}
-
-	public Map getEnabledFilters() {
-		return sessionImplementor.getEnabledFilters();
-	}
-
-	public int getDontFlushFromFind() {
-		return sessionImplementor.getDontFlushFromFind();
-	}
-
-	public EventListeners getListeners() {
-		return sessionImplementor.getListeners();
-	}
-
-	public PersistenceContext getPersistenceContext() {
-		return sessionImplementor.getPersistenceContext();
-	}
-
-	public int executeUpdate(String query, QueryParameters queryParameters) throws HibernateException {
-		return sessionImplementor.executeUpdate( query, queryParameters );
-	}
-
-	public int executeNativeUpdate(NativeSQLQuerySpecification specification, QueryParameters queryParameters)
-			throws HibernateException {
-		return sessionImplementor.executeNativeUpdate( specification, queryParameters );
-	}
-
-	public EntityMode getEntityMode() {
-		return session.getEntityMode();
-	}
-
-	public String getEntityName(Object object) throws HibernateException {
-		return session.getEntityName( object );
-	}
-
-	public FlushMode getFlushMode() {
-		return session.getFlushMode();
-	}
-
-	public Serializable getIdentifier(Object object) throws HibernateException {
-		return session.getIdentifier( object );
-	}
-
-	public Query getNamedQuery(String queryName) throws HibernateException {
-		return session.getNamedQuery( queryName );
-	}
-
-	public Query getNamedSQLQuery(String name) {
-		return sessionImplementor.getNamedSQLQuery( name );
-	}
-
-	public boolean isEventSource() {
-		return sessionImplementor.isEventSource();
-	}
-
-	public void afterScrollOperation() {
-		sessionImplementor.afterScrollOperation();
-	}
-
-	public void setFetchProfile(String name) {
-		sessionImplementor.setFetchProfile( name );
-	}
-
-	public String getFetchProfile() {
-		return sessionImplementor.getFetchProfile();
-	}
-
-	public JDBCContext getJDBCContext() {
-		return sessionImplementor.getJDBCContext();
-	}
-
-	public boolean isClosed() {
-		return sessionImplementor.isClosed();
-	}
-
-	public org.hibernate.Session getSession(EntityMode entityMode) {
-		return session.getSession( entityMode );
-	}
-
-	public SessionFactory getSessionFactory() {
-		return session.getSessionFactory();
-	}
-
-	public SessionStatistics getStatistics() {
-		return session.getStatistics();
-	}
-
-	public Transaction getTransaction() {
-		return session.getTransaction();
-	}
-
-	public boolean isConnected() {
-		return session.isConnected();
-	}
-
-	public boolean isDirty() throws HibernateException {
-		return session.isDirty();
-	}
-
-	public boolean isOpen() {
-		return session.isOpen();
-	}
-
-	public Object load(String entityName, Serializable id) throws HibernateException {
-		return session.load( entityName, id );
-	}
-
-	public Object load(String entityName, Serializable id, LockMode lockMode) throws HibernateException {
-		return session.load( entityName, id, lockMode );
-	}
-
-	public void load(Object object, Serializable id) throws HibernateException {
-		session.load( object, id );
-	}
-
-	public Object load(Class theClass, Serializable id) throws HibernateException {
-		return session.load( theClass, id );
-	}
-
-	public Object load(Class theClass, Serializable id, LockMode lockMode) throws HibernateException {
-		return session.load( theClass, id, lockMode );
-	}
-
-	public void lock(String entityName, Object object, LockMode lockMode) throws HibernateException {
-		session.lock( entityName, object, lockMode );
-	}
-
-	public void lock(Object object, LockMode lockMode) throws HibernateException {
-		session.lock( object, lockMode );
-	}
-
-	public Object merge(String entityName, Object object) throws HibernateException {
-		return session.merge( entityName, object );
-	}
-
-	public Object merge(Object object) throws HibernateException {
-		return session.merge( object );
-	}
-
-	public void persist(String entityName, Object object) throws HibernateException {
-		session.persist( entityName, object );
-	}
-
-	public void persist(Object object) throws HibernateException {
-		session.persist( object );
-	}
-
-	public void reconnect() throws HibernateException {
-		session.reconnect();
-	}
-
-	public void reconnect(Connection connection) throws HibernateException {
-		session.reconnect( connection );
-	}
-
-	public void refresh(Object object) throws HibernateException {
-		session.refresh( object );
-	}
-
-	public void refresh(Object object, LockMode lockMode) throws HibernateException {
-		session.refresh( object, lockMode );
-	}
-
-	public void replicate(String entityName, Object object, ReplicationMode replicationMode) throws HibernateException {
-		session.replicate( entityName, object, replicationMode );
-	}
-
-	public void replicate(Object object, ReplicationMode replicationMode) throws HibernateException {
-		session.replicate( object, replicationMode );
-	}
-
-	public Serializable save(String entityName, Object object) throws HibernateException {
-		return session.save( entityName, object );
-	}
-
-	public Serializable save(Object object) throws HibernateException {
-		return session.save( object );
-	}
-
-	public void saveOrUpdate(String entityName, Object object) throws HibernateException {
-		session.saveOrUpdate( entityName, object );
-	}
-
-	public void saveOrUpdate(Object object) throws HibernateException {
-		session.saveOrUpdate( object );
-	}
-
-	public void setCacheMode(CacheMode cacheMode) {
-		session.setCacheMode( cacheMode );
-	}
-
-	public void setFlushMode(FlushMode flushMode) {
-		session.setFlushMode( flushMode );
-	}
-
-	public void setReadOnly(Object entity, boolean readOnly) {
-		session.setReadOnly( entity, readOnly );
-	}
-
-	public void update(String entityName, Object object) throws HibernateException {
-		session.update( entityName, object );
-	}
-
-	public void update(Object object) throws HibernateException {
-		session.update( object );
-	}
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/impl/FullTextSessionImpl.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/impl/FullTextSessionImpl.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/impl/FullTextSessionImpl.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/impl/FullTextSessionImpl.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,631 @@
+//$Id: $
+package org.hibernate.search.impl;
+
+import java.io.Serializable;
+import java.sql.Connection;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.hibernate.CacheMode;
+import org.hibernate.Criteria;
+import org.hibernate.EntityMode;
+import org.hibernate.Filter;
+import org.hibernate.FlushMode;
+import org.hibernate.Hibernate;
+import org.hibernate.HibernateException;
+import org.hibernate.Interceptor;
+import org.hibernate.LockMode;
+import org.hibernate.Query;
+import org.hibernate.ReplicationMode;
+import org.hibernate.SQLQuery;
+import org.hibernate.ScrollMode;
+import org.hibernate.ScrollableResults;
+import org.hibernate.classic.Session;
+import org.hibernate.SessionFactory;
+import org.hibernate.Transaction;
+import org.hibernate.collection.PersistentCollection;
+import org.hibernate.engine.EntityKey;
+import org.hibernate.engine.PersistenceContext;
+import org.hibernate.engine.QueryParameters;
+import org.hibernate.engine.SessionFactoryImplementor;
+import org.hibernate.engine.SessionImplementor;
+import org.hibernate.engine.query.ParameterMetadata;
+import org.hibernate.engine.query.sql.NativeSQLQuerySpecification;
+import org.hibernate.event.EventListeners;
+import org.hibernate.event.EventSource;
+import org.hibernate.impl.CriteriaImpl;
+import org.hibernate.jdbc.Batcher;
+import org.hibernate.jdbc.JDBCContext;
+import org.hibernate.loader.custom.CustomQuery;
+import org.hibernate.persister.entity.EntityPersister;
+import org.hibernate.search.FullTextSession;
+import org.hibernate.search.SearchFactory;
+import org.hibernate.search.backend.WorkType;
+import org.hibernate.search.engine.DocumentBuilder;
+import org.hibernate.search.query.FullTextQueryImpl;
+import org.hibernate.search.util.ContextHelper;
+import org.hibernate.stat.SessionStatistics;
+import org.hibernate.type.Type;
+
+/**
+ * Lucene Full text search aware session
+ *
+ * @author Emmanuel Bernard
+ */
+public class FullTextSessionImpl implements FullTextSession, SessionImplementor {
+	private final Session session;
+	private final EventSource eventSource;
+	private final SessionImplementor sessionImplementor;
+
+	public FullTextSessionImpl(org.hibernate.Session session) {
+		this.session = (Session) session;
+		this.eventSource = (EventSource) session;
+		this.sessionImplementor = (SessionImplementor) session;
+	}
+
+	/**
+	 * Execute a Lucene query and retrieve managed objects of type entities (or their indexed subclasses)
+     * If entities is empty, include all indexed entities
+     * 
+	 * @param entities must be immutable for the lifetime of the query object
+	 */
+	public Query createFullTextQuery(org.apache.lucene.search.Query luceneQuery, Class... entities) {
+		return new FullTextQueryImpl( luceneQuery, entities, sessionImplementor, new ParameterMetadata(null, null) );
+	}
+
+	/**
+	 * (re)index an entity.
+	 * Non indexable entities are ignored
+	 * The entity must be associated with the session
+	 *
+	 * @param entity must not be null
+	 */
+	public void index(Object entity) {
+		if (entity == null) return;
+		Class clazz = Hibernate.getClass( entity );
+		//TODO cache that at the FTSession level
+		SearchFactory searchFactory = ContextHelper.getSearchFactory( session );
+		//not strictly necessary but a small optimization
+		DocumentBuilder<Object> builder = searchFactory.getDocumentBuilders().get( clazz );
+		if ( builder != null ) {
+			Serializable id = session.getIdentifier( entity );
+			searchFactory.getWorker().performWork( entity, id, WorkType.UPDATE, eventSource );
+		}
+		//TODO
+		//need to add elements in a queue kept at the Session level
+		//the queue will be processed by a Lucene(Auto)FlushEventListener
+		//note that we could keep this queue somewhere in the event listener in the mean time but that requires
+		// a synchronized hashmap holding this queue on a per session basis plus some session house keeping (yuk)
+		//an other solution would be to subclass SessionImpl instead of having this LuceneSession delecation model
+		// this is an open discussion
+	}
+
+	public Query createSQLQuery(String sql, String returnAlias, Class returnClass) {
+		return session.createSQLQuery( sql, returnAlias, returnClass );
+	}
+
+	public Query createSQLQuery(String sql, String[] returnAliases, Class[] returnClasses) {
+		return session.createSQLQuery( sql, returnAliases, returnClasses );
+	}
+
+	public int delete(String query) throws HibernateException {
+		return session.delete( query );
+	}
+
+	public int delete(String query, Object value, Type type) throws HibernateException {
+		return session.delete( query, value, type );
+	}
+
+	public int delete(String query, Object[] values, Type[] types) throws HibernateException {
+		return session.delete( query, values, types );
+	}
+
+	public Collection filter(Object collection, String filter) throws HibernateException {
+		return session.filter( collection, filter );
+	}
+
+	public Collection filter(Object collection, String filter, Object value, Type type) throws HibernateException {
+		return session.filter( collection, filter, value, type );
+	}
+
+	public Collection filter(Object collection, String filter, Object[] values, Type[] types) throws HibernateException {
+		return session.filter( collection, filter, values, types );
+	}
+
+	public List find(String query) throws HibernateException {
+		return session.find( query );
+	}
+
+	public List find(String query, Object value, Type type) throws HibernateException {
+		return session.find( query, value, type );
+	}
+
+	public List find(String query, Object[] values, Type[] types) throws HibernateException {
+		return session.find( query, values, types );
+	}
+
+	public Iterator iterate(String query) throws HibernateException {
+		return session.iterate( query );
+	}
+
+	public Iterator iterate(String query, Object value, Type type) throws HibernateException {
+		return session.iterate( query, value, type );
+	}
+
+	public Iterator iterate(String query, Object[] values, Type[] types) throws HibernateException {
+		return session.iterate( query, values, types );
+	}
+
+	public void save(String entityName, Object object, Serializable id) throws HibernateException {
+		session.save( entityName, object, id );
+	}
+
+	public void save(Object object, Serializable id) throws HibernateException {
+		session.save( object, id );
+	}
+
+	public Object saveOrUpdateCopy(String entityName, Object object) throws HibernateException {
+		return session.saveOrUpdateCopy( entityName, object );
+	}
+
+	public Object saveOrUpdateCopy(String entityName, Object object, Serializable id) throws HibernateException {
+		return session.saveOrUpdateCopy( entityName, object, id );
+	}
+
+	public Object saveOrUpdateCopy(Object object) throws HibernateException {
+		return session.saveOrUpdateCopy( object );
+	}
+
+	public Object saveOrUpdateCopy(Object object, Serializable id) throws HibernateException {
+		return session.saveOrUpdateCopy( object, id );
+	}
+
+	public void update(String entityName, Object object, Serializable id) throws HibernateException {
+		session.update( entityName, object, id );
+	}
+
+	public void update(Object object, Serializable id) throws HibernateException {
+		session.update( object, id );
+	}
+
+	public Transaction beginTransaction() throws HibernateException {
+		return session.beginTransaction();
+	}
+
+	public void cancelQuery() throws HibernateException {
+		session.cancelQuery();
+	}
+
+	public void clear() {
+		//FIXME should session clear work with the lucene queue
+		session.clear();
+	}
+
+	public Connection close() throws HibernateException {
+		return session.close();
+	}
+
+	public Connection connection() throws HibernateException {
+		return session.connection();
+	}
+
+	public boolean contains(Object object) {
+		return session.contains( object );
+	}
+
+	public Criteria createCriteria(String entityName) {
+		return session.createCriteria( entityName );
+	}
+
+	public Criteria createCriteria(String entityName, String alias) {
+		return session.createCriteria( entityName, alias );
+	}
+
+	public Criteria createCriteria(Class persistentClass) {
+		return session.createCriteria( persistentClass );
+	}
+
+	public Criteria createCriteria(Class persistentClass, String alias) {
+		return session.createCriteria( persistentClass, alias );
+	}
+
+	public Query createFilter(Object collection, String queryString) throws HibernateException {
+		return session.createFilter( collection, queryString );
+	}
+
+	public Query createQuery(String queryString) throws HibernateException {
+		return session.createQuery( queryString );
+	}
+
+	public SQLQuery createSQLQuery(String queryString) throws HibernateException {
+		return session.createSQLQuery( queryString );
+	}
+
+	public void delete(String entityName, Object object) throws HibernateException {
+		session.delete( entityName, object );
+	}
+
+	public void delete(Object object) throws HibernateException {
+		session.delete( object );
+	}
+
+	public void disableFilter(String filterName) {
+		session.disableFilter( filterName );
+	}
+
+	public Connection disconnect() throws HibernateException {
+		return session.disconnect();
+	}
+
+	public Filter enableFilter(String filterName) {
+		return session.enableFilter( filterName );
+	}
+
+	public void evict(Object object) throws HibernateException {
+		session.evict( object );
+	}
+
+	public void flush() throws HibernateException {
+		session.flush();
+	}
+
+	public Object get(Class clazz, Serializable id) throws HibernateException {
+		return session.get( clazz, id );
+	}
+
+	public Object get(Class clazz, Serializable id, LockMode lockMode) throws HibernateException {
+		return session.get( clazz, id, lockMode );
+	}
+
+	public Object get(String entityName, Serializable id) throws HibernateException {
+		return session.get( entityName, id );
+	}
+
+	public Object get(String entityName, Serializable id, LockMode lockMode) throws HibernateException {
+		return session.get( entityName, id, lockMode );
+	}
+
+	public CacheMode getCacheMode() {
+		return session.getCacheMode();
+	}
+
+	public LockMode getCurrentLockMode(Object object) throws HibernateException {
+		return session.getCurrentLockMode( object );
+	}
+
+	public Filter getEnabledFilter(String filterName) {
+		return session.getEnabledFilter( filterName );
+	}
+
+	public Interceptor getInterceptor() {
+		return sessionImplementor.getInterceptor();
+	}
+
+	public void setAutoClear(boolean enabled) {
+		sessionImplementor.setAutoClear( enabled );
+	}
+
+	public boolean isTransactionInProgress() {
+		return sessionImplementor.isTransactionInProgress();
+	}
+
+	public void initializeCollection(PersistentCollection collection, boolean writing) throws HibernateException {
+		sessionImplementor.initializeCollection( collection, writing );
+	}
+
+	public Object internalLoad(String entityName, Serializable id, boolean eager, boolean nullable)
+			throws HibernateException {
+		return sessionImplementor.internalLoad( entityName, id, eager, nullable );
+	}
+
+	public Object immediateLoad(String entityName, Serializable id) throws HibernateException {
+		return sessionImplementor.immediateLoad( entityName, id );
+	}
+
+	public long getTimestamp() {
+		return sessionImplementor.getTimestamp();
+	}
+
+	public SessionFactoryImplementor getFactory() {
+		return sessionImplementor.getFactory();
+	}
+
+	public Batcher getBatcher() {
+		return sessionImplementor.getBatcher();
+	}
+
+	public List list(String query, QueryParameters queryParameters) throws HibernateException {
+		return sessionImplementor.list( query,  queryParameters );
+	}
+
+	public Iterator iterate(String query, QueryParameters queryParameters) throws HibernateException {
+		return sessionImplementor.iterate( query, queryParameters );
+	}
+
+	public ScrollableResults scroll(String query, QueryParameters queryParameters) throws HibernateException {
+		return sessionImplementor.scroll( query, queryParameters );
+	}
+
+	public ScrollableResults scroll(CriteriaImpl criteria, ScrollMode scrollMode) {
+		return sessionImplementor.scroll( criteria, scrollMode );
+	}
+
+	public List list(CriteriaImpl criteria) {
+		return sessionImplementor.list( criteria );
+	}
+
+	public List listFilter(Object collection, String filter, QueryParameters queryParameters)
+			throws HibernateException {
+		return sessionImplementor.listFilter( collection, filter, queryParameters );
+	}
+
+	public Iterator iterateFilter(Object collection, String filter, QueryParameters queryParameters)
+			throws HibernateException {
+		return sessionImplementor.iterateFilter( collection, filter, queryParameters );
+	}
+
+	public EntityPersister getEntityPersister(String entityName, Object object) throws HibernateException {
+		return sessionImplementor.getEntityPersister( entityName, object );
+	}
+
+	public Object getEntityUsingInterceptor(EntityKey key) throws HibernateException {
+		return sessionImplementor.getEntityUsingInterceptor( key );
+	}
+
+	public void afterTransactionCompletion(boolean successful, Transaction tx) {
+		sessionImplementor.afterTransactionCompletion( successful, tx );
+	}
+
+	public void beforeTransactionCompletion(Transaction tx) {
+		sessionImplementor.beforeTransactionCompletion( tx );
+	}
+
+	public Serializable getContextEntityIdentifier(Object object) {
+		return sessionImplementor.getContextEntityIdentifier( object );
+	}
+
+	public String bestGuessEntityName(Object object) {
+		return sessionImplementor.bestGuessEntityName( object );
+	}
+
+	public String guessEntityName(Object entity) throws HibernateException {
+		return sessionImplementor.guessEntityName( entity );
+	}
+
+	public Object instantiate(String entityName, Serializable id) throws HibernateException {
+		return sessionImplementor.instantiate( entityName, id );
+	}
+
+	public List listCustomQuery(CustomQuery customQuery, QueryParameters queryParameters) throws HibernateException {
+		return sessionImplementor.listCustomQuery( customQuery, queryParameters );
+	}
+
+	public ScrollableResults scrollCustomQuery(CustomQuery customQuery, QueryParameters queryParameters)
+			throws HibernateException {
+		return sessionImplementor.scrollCustomQuery( customQuery, queryParameters );
+	}
+
+	public List list(NativeSQLQuerySpecification spec, QueryParameters queryParameters) throws HibernateException {
+		return sessionImplementor.list( spec, queryParameters );
+	}
+
+	public ScrollableResults scroll(NativeSQLQuerySpecification spec, QueryParameters queryParameters)
+			throws HibernateException {
+		return sessionImplementor.scroll( spec, queryParameters );
+	}
+
+	public Object getFilterParameterValue(String filterParameterName) {
+		return sessionImplementor.getFilterParameterValue( filterParameterName );
+	}
+
+	public Type getFilterParameterType(String filterParameterName) {
+		return sessionImplementor.getFilterParameterType( filterParameterName );
+	}
+
+	public Map getEnabledFilters() {
+		return sessionImplementor.getEnabledFilters();
+	}
+
+	public int getDontFlushFromFind() {
+		return sessionImplementor.getDontFlushFromFind();
+	}
+
+	public EventListeners getListeners() {
+		return sessionImplementor.getListeners();
+	}
+
+	public PersistenceContext getPersistenceContext() {
+		return sessionImplementor.getPersistenceContext();
+	}
+
+	public int executeUpdate(String query, QueryParameters queryParameters) throws HibernateException {
+		return sessionImplementor.executeUpdate( query, queryParameters );
+	}
+
+	public int executeNativeUpdate(NativeSQLQuerySpecification specification, QueryParameters queryParameters)
+			throws HibernateException {
+		return sessionImplementor.executeNativeUpdate( specification, queryParameters );
+	}
+
+	public EntityMode getEntityMode() {
+		return session.getEntityMode();
+	}
+
+	public String getEntityName(Object object) throws HibernateException {
+		return session.getEntityName( object );
+	}
+
+	public FlushMode getFlushMode() {
+		return session.getFlushMode();
+	}
+
+	public Serializable getIdentifier(Object object) throws HibernateException {
+		return session.getIdentifier( object );
+	}
+
+	public Query getNamedQuery(String queryName) throws HibernateException {
+		return session.getNamedQuery( queryName );
+	}
+
+	public Query getNamedSQLQuery(String name) {
+		return sessionImplementor.getNamedSQLQuery( name );
+	}
+
+	public boolean isEventSource() {
+		return sessionImplementor.isEventSource();
+	}
+
+	public void afterScrollOperation() {
+		sessionImplementor.afterScrollOperation();
+	}
+
+	public void setFetchProfile(String name) {
+		sessionImplementor.setFetchProfile( name );
+	}
+
+	public String getFetchProfile() {
+		return sessionImplementor.getFetchProfile();
+	}
+
+	public JDBCContext getJDBCContext() {
+		return sessionImplementor.getJDBCContext();
+	}
+
+	public boolean isClosed() {
+		return sessionImplementor.isClosed();
+	}
+
+	public org.hibernate.Session getSession(EntityMode entityMode) {
+		return session.getSession( entityMode );
+	}
+
+	public SessionFactory getSessionFactory() {
+		return session.getSessionFactory();
+	}
+
+	public SessionStatistics getStatistics() {
+		return session.getStatistics();
+	}
+
+	public Transaction getTransaction() {
+		return session.getTransaction();
+	}
+
+	public boolean isConnected() {
+		return session.isConnected();
+	}
+
+	public boolean isDirty() throws HibernateException {
+		return session.isDirty();
+	}
+
+	public boolean isOpen() {
+		return session.isOpen();
+	}
+
+	public Object load(String entityName, Serializable id) throws HibernateException {
+		return session.load( entityName, id );
+	}
+
+	public Object load(String entityName, Serializable id, LockMode lockMode) throws HibernateException {
+		return session.load( entityName, id, lockMode );
+	}
+
+	public void load(Object object, Serializable id) throws HibernateException {
+		session.load( object, id );
+	}
+
+	public Object load(Class theClass, Serializable id) throws HibernateException {
+		return session.load( theClass, id );
+	}
+
+	public Object load(Class theClass, Serializable id, LockMode lockMode) throws HibernateException {
+		return session.load( theClass, id, lockMode );
+	}
+
+	public void lock(String entityName, Object object, LockMode lockMode) throws HibernateException {
+		session.lock( entityName, object, lockMode );
+	}
+
+	public void lock(Object object, LockMode lockMode) throws HibernateException {
+		session.lock( object, lockMode );
+	}
+
+	public Object merge(String entityName, Object object) throws HibernateException {
+		return session.merge( entityName, object );
+	}
+
+	public Object merge(Object object) throws HibernateException {
+		return session.merge( object );
+	}
+
+	public void persist(String entityName, Object object) throws HibernateException {
+		session.persist( entityName, object );
+	}
+
+	public void persist(Object object) throws HibernateException {
+		session.persist( object );
+	}
+
+	public void reconnect() throws HibernateException {
+		session.reconnect();
+	}
+
+	public void reconnect(Connection connection) throws HibernateException {
+		session.reconnect( connection );
+	}
+
+	public void refresh(Object object) throws HibernateException {
+		session.refresh( object );
+	}
+
+	public void refresh(Object object, LockMode lockMode) throws HibernateException {
+		session.refresh( object, lockMode );
+	}
+
+	public void replicate(String entityName, Object object, ReplicationMode replicationMode) throws HibernateException {
+		session.replicate( entityName, object, replicationMode );
+	}
+
+	public void replicate(Object object, ReplicationMode replicationMode) throws HibernateException {
+		session.replicate( object, replicationMode );
+	}
+
+	public Serializable save(String entityName, Object object) throws HibernateException {
+		return session.save( entityName, object );
+	}
+
+	public Serializable save(Object object) throws HibernateException {
+		return session.save( object );
+	}
+
+	public void saveOrUpdate(String entityName, Object object) throws HibernateException {
+		session.saveOrUpdate( entityName, object );
+	}
+
+	public void saveOrUpdate(Object object) throws HibernateException {
+		session.saveOrUpdate( object );
+	}
+
+	public void setCacheMode(CacheMode cacheMode) {
+		session.setCacheMode( cacheMode );
+	}
+
+	public void setFlushMode(FlushMode flushMode) {
+		session.setFlushMode( flushMode );
+	}
+
+	public void setReadOnly(Object entity, boolean readOnly) {
+		session.setReadOnly( entity, readOnly );
+	}
+
+	public void update(String entityName, Object object) throws HibernateException {
+		session.update( entityName, object );
+	}
+
+	public void update(Object object) throws HibernateException {
+		session.update( object );
+	}
+}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/query (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/query)

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/query/EntityInfo.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/query/EntityInfo.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/query/EntityInfo.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,12 +0,0 @@
-//$Id: $
-package org.hibernate.search.query;
-
-import java.io.Serializable;
-
-/**
- * @author Emmanuel Bernard
- */
-class EntityInfo {
-	public Class clazz;
-	public Serializable id;
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/query/EntityInfo.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/query/EntityInfo.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/query/EntityInfo.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/query/EntityInfo.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,12 @@
+//$Id: $
+package org.hibernate.search.query;
+
+import java.io.Serializable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+class EntityInfo {
+	public Class clazz;
+	public Serializable id;
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/query/FullTextQueryImpl.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/query/FullTextQueryImpl.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/query/FullTextQueryImpl.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,319 +0,0 @@
-//$Id: $
-package org.hibernate.search.query;
-
-import java.io.IOException;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.lucene.document.Document;
-import org.apache.lucene.index.Term;
-import org.apache.lucene.search.BooleanClause;
-import org.apache.lucene.search.BooleanQuery;
-import org.apache.lucene.search.Hits;
-import org.apache.lucene.search.IndexSearcher;
-import org.apache.lucene.search.MultiSearcher;
-import org.apache.lucene.search.Searcher;
-import org.apache.lucene.search.TermQuery;
-import org.apache.lucene.store.Directory;
-import org.hibernate.Hibernate;
-import org.hibernate.HibernateException;
-import org.hibernate.LockMode;
-import org.hibernate.Query;
-import org.hibernate.ScrollMode;
-import org.hibernate.ScrollableResults;
-import org.hibernate.Session;
-import org.hibernate.ObjectNotFoundException;
-import org.hibernate.engine.SessionImplementor;
-import org.hibernate.engine.query.ParameterMetadata;
-import org.hibernate.impl.AbstractQueryImpl;
-import org.hibernate.search.engine.DocumentBuilder;
-import org.hibernate.search.SearchFactory;
-import org.hibernate.search.util.ContextHelper;
-
-/**
- * @author Emmanuel Bernard
- */
-//TODO implements setParameter()
-public class FullTextQueryImpl extends AbstractQueryImpl {
-	private static final Log log = LogFactory.getLog( FullTextQueryImpl.class );
-	private org.apache.lucene.search.Query luceneQuery;
-	private Class[] classes;
-	private Set<Class> classesAndSubclasses;
-	private Integer firstResult;
-	private Integer maxResults;
-	private int resultSize;
-
-	/**
-	 * classes must be immutable
-	 */
-	public FullTextQueryImpl(org.apache.lucene.search.Query query, Class[] classes, SessionImplementor session,
-							 ParameterMetadata parameterMetadata) {
-		//TODO handle flushMode
-		super( query.toString(), null, session, parameterMetadata );
-		this.luceneQuery = query;
-		this.classes = classes;
-	}
-
-	/**
-	 * Return an interator on the results.
-	 * Retrieve the object one by one (initialize it during the next() operation)
-	 */
-	public Iterator iterate() throws HibernateException {
-		//implement an interator which keep the id/class for each hit and get the object on demand
-		//cause I can't keep the searcher and hence the hit opened. I dont have any hook to know when the
-		//user stop using it
-		//scrollable is better in this area
-
-		SearchFactory searchFactory = ContextHelper.getSearchFactoryBySFI( session );
-		//find the directories
-		Searcher searcher = buildSearcher( searchFactory );
-		if ( searcher == null ) {
-		   	return new IteratorImpl( new ArrayList<EntityInfo>(0), (Session) this.session);
-		}
-		try {
-			org.apache.lucene.search.Query query = filterQueryByClasses( luceneQuery );
-			Hits hits = searcher.search( query );
-			setResultSize( hits );
-			int first = first();
-			int max = max( first, hits );
-			List<EntityInfo> entityInfos = new ArrayList<EntityInfo>( max - first + 1 );
-			for ( int index = first; index <= max; index++ ) {
-				Document document = hits.doc( index );
-				EntityInfo entityInfo = new EntityInfo();
-				entityInfo.clazz = DocumentBuilder.getDocumentClass( document );
-				entityInfo.id = DocumentBuilder.getDocumentId( searchFactory, entityInfo.clazz, document );
-				entityInfos.add( entityInfo );
-			}
-			return new IteratorImpl( entityInfos, (Session) this.session );
-		}
-		catch (IOException e) {
-			throw new HibernateException( "Unable to query Lucene index", e );
-		}
-		finally {
-			if ( searcher != null ) {
-				try {
-					searcher.close();
-				}
-				catch (IOException e) {
-					log.warn( "Unable to properly close searcher during lucene query: " + getQueryString(), e );
-				}
-			}
-		}
-	}
-
-	public ScrollableResults scroll() throws HibernateException {
-		//keep the searcher open until the resultset is closed
-		SearchFactory searchFactory = ContextHelper.getSearchFactoryBySFI( session );
-		;
-		//find the directories
-		Searcher searcher = buildSearcher( searchFactory );
-		//FIXME: handle null searcher
-		Hits hits;
-		try {
-			org.apache.lucene.search.Query query = filterQueryByClasses( luceneQuery );
-			hits = searcher.search( query );
-			setResultSize( hits );
-			int first = first();
-			int max = max( first, hits );
-			return new ScrollableResultsImpl( searcher, hits, first, max, (Session) this.session, searchFactory );
-		}
-		catch (IOException e) {
-			try {
-				if ( searcher != null ) searcher.close();
-			}
-			catch (IOException ee) {
-				//we have the initial issue already
-			}
-			throw new HibernateException( "Unable to query Lucene index", e );
-		}
-	}
-
-	public ScrollableResults scroll(ScrollMode scrollMode) throws HibernateException {
-		//TODO think about this scrollmode
-		return scroll();
-	}
-
-	public List list() throws HibernateException {
-		SearchFactory searchFactory = ContextHelper.getSearchFactoryBySFI( session );
-		//find the directories
-		Searcher searcher = buildSearcher( searchFactory );
-		if (searcher == null) return new ArrayList(0);
-		Hits hits;
-		try {
-			org.apache.lucene.search.Query query = filterQueryByClasses( luceneQuery );
-			hits = searcher.search( query );
-			setResultSize( hits );
-			int first = first();
-			int max = max( first, hits );
-			List result = new ArrayList( max - first + 1 );
-			Session sess = (Session) this.session;
-			for ( int index = first; index <= max; index++ ) {
-				Document document = hits.doc( index );
-				Class clazz = DocumentBuilder.getDocumentClass( document );
-				Serializable id = DocumentBuilder.getDocumentId( searchFactory, clazz, document );
-				result.add( sess.load( clazz, id ) );
-				//use load to benefit from the batch-size
-				//we don't face proxy casting issues since the exact class is extracted from the index
-			}
-			//then initialize the objects
-			List excludedObects = new ArrayList();
-			for ( Object element : result ) {
-				try {
-					Hibernate.initialize( element );
-				}
-				catch (ObjectNotFoundException e) {
-					log.debug( "Object found in Search index but not in database: "
-							+ e.getEntityName() + " wih id " + e.getIdentifier() );
-					excludedObects.add( element );
-				}
-			}
-			if ( excludedObects.size() > 0 ) {
-				result.removeAll( excludedObects );
-			}
-			return result;
-		}
-		catch (IOException e) {
-			throw new HibernateException( "Unable to query Lucene index", e );
-		}
-		finally {
-			if ( searcher != null ) try {
-				searcher.close();
-			}
-			catch (IOException e) {
-				log.warn( "Unable to properly close searcher during lucene query: " + getQueryString(), e );
-			}
-		}
-	}
-
-	private org.apache.lucene.search.Query filterQueryByClasses(org.apache.lucene.search.Query luceneQuery) {
-		//A query filter is more practical than a manual class filtering post query (esp on scrollable resultsets)
-		//it also probably minimise the memory footprint
-		if ( classesAndSubclasses == null ) {
-			return luceneQuery;
-		}
-		else {
-			BooleanQuery classFilter = new BooleanQuery();
-			//annihilate the scoring impact of DocumentBuilder.CLASS_FIELDNAME
-			classFilter.setBoost( 0 );
-			for ( Class clazz : classesAndSubclasses ) {
-				Term t = new Term( DocumentBuilder.CLASS_FIELDNAME, clazz.getName() );
-				TermQuery termQuery = new TermQuery( t );
-				classFilter.add( termQuery, BooleanClause.Occur.SHOULD );
-			}
-			BooleanQuery filteredQuery = new BooleanQuery();
-			filteredQuery.add( luceneQuery, BooleanClause.Occur.MUST );
-			filteredQuery.add( classFilter, BooleanClause.Occur.MUST );
-			return filteredQuery;
-		}
-	}
-
-	private int max(int first, Hits hits) {
-		return maxResults == null ?
-				hits.length() - 1 :
-				maxResults + first < hits.length() ?
-						first + maxResults - 1 :
-						hits.length() - 1;
-	}
-
-	private int first() {
-		return firstResult != null ?
-				firstResult :
-				0;
-	}
-
-	//TODO change classesAndSubclasses by side effect, which is a mismatch with the Searcher return, fix that.
-	private Searcher buildSearcher(SearchFactory searchFactory) {
-		Map<Class, DocumentBuilder<Object>> builders = searchFactory.getDocumentBuilders();
-		Set<Directory> directories = new HashSet<Directory>();
-		if ( classes == null || classes.length == 0 ) {
-			//no class means all classes
-			for ( DocumentBuilder builder : builders.values() ) {
-				directories.add( builder.getDirectoryProvider().getDirectory() );
-			}
-			classesAndSubclasses = null;
-		}
-		else {
-			Set<Class> involvedClasses = new HashSet<Class>( classes.length );
-			Collections.addAll( involvedClasses, classes );
-			for ( Class clazz : classes ) {
-				DocumentBuilder builder = builders.get( clazz );
-				if ( builder != null ) involvedClasses.addAll( builder.getMappedSubclasses() );
-			}
-			for ( Class clazz : involvedClasses ) {
-				DocumentBuilder builder = builders.get( clazz );
-				//TODO should we rather choose a polymorphic path and allow non mapped entities
-				if ( builder == null ) throw new HibernateException( "Not a mapped entity: " + clazz );
-				directories.add( builder.getDirectoryProvider().getDirectory() );
-			}
-			classesAndSubclasses = involvedClasses;
-		}
-
-		//set up the searcher
-		Searcher searcher;
-		int dirNbr = directories.size();
-		if ( dirNbr > 1 ) {
-			try {
-				IndexSearcher[] searchers = new IndexSearcher[dirNbr];
-				Iterator<Directory> it = directories.iterator();
-				for ( int index = 0; index < dirNbr; index++ ) {
-					searchers[index] = new IndexSearcher( it.next() );
-				}
-				searcher = new MultiSearcher( searchers );
-			}
-			catch (IOException e) {
-				throw new HibernateException( "Unable to read Lucene directory", e );
-			}
-		}
-		else if ( dirNbr == 1 ) {
-			try {
-				searcher = new IndexSearcher( directories.iterator().next() );
-			}
-			catch (IOException e) {
-				throw new HibernateException( "Unable to read Lucene directory", e );
-			}
-		}
-		else {
-			return null; //no indexed entity set up
-		}
-		return searcher;
-	}
-
-	private void setResultSize(Hits hits) {
-		resultSize = hits.length();
-	}
-
-	//FIXME does it make sense
-	public int resultSize() {
-		return this.resultSize;
-	}
-
-	public Query setFirstResult(int firstResult) {
-		this.firstResult = firstResult;
-		return this;
-	}
-
-	public Query setMaxResults(int maxResults) {
-		this.maxResults = maxResults;
-		return this;
-	}
-
-	public int executeUpdate() throws HibernateException {
-		throw new HibernateException( "Not supported operation" );
-	}
-
-	public Query setLockMode(String alias, LockMode lockMode) {
-		return null;
-	}
-
-	protected Map getLockModes() {
-		return null;
-	}
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/query/FullTextQueryImpl.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/query/FullTextQueryImpl.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/query/FullTextQueryImpl.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/query/FullTextQueryImpl.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,319 @@
+//$Id: $
+package org.hibernate.search.query;
+
+import java.io.IOException;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.lucene.document.Document;
+import org.apache.lucene.index.Term;
+import org.apache.lucene.search.BooleanClause;
+import org.apache.lucene.search.BooleanQuery;
+import org.apache.lucene.search.Hits;
+import org.apache.lucene.search.IndexSearcher;
+import org.apache.lucene.search.MultiSearcher;
+import org.apache.lucene.search.Searcher;
+import org.apache.lucene.search.TermQuery;
+import org.apache.lucene.store.Directory;
+import org.hibernate.Hibernate;
+import org.hibernate.HibernateException;
+import org.hibernate.LockMode;
+import org.hibernate.Query;
+import org.hibernate.ScrollMode;
+import org.hibernate.ScrollableResults;
+import org.hibernate.Session;
+import org.hibernate.ObjectNotFoundException;
+import org.hibernate.engine.SessionImplementor;
+import org.hibernate.engine.query.ParameterMetadata;
+import org.hibernate.impl.AbstractQueryImpl;
+import org.hibernate.search.engine.DocumentBuilder;
+import org.hibernate.search.SearchFactory;
+import org.hibernate.search.util.ContextHelper;
+
+/**
+ * @author Emmanuel Bernard
+ */
+//TODO implements setParameter()
+public class FullTextQueryImpl extends AbstractQueryImpl {
+	private static final Log log = LogFactory.getLog( FullTextQueryImpl.class );
+	private org.apache.lucene.search.Query luceneQuery;
+	private Class[] classes;
+	private Set<Class> classesAndSubclasses;
+	private Integer firstResult;
+	private Integer maxResults;
+	private int resultSize;
+
+	/**
+	 * classes must be immutable
+	 */
+	public FullTextQueryImpl(org.apache.lucene.search.Query query, Class[] classes, SessionImplementor session,
+							 ParameterMetadata parameterMetadata) {
+		//TODO handle flushMode
+		super( query.toString(), null, session, parameterMetadata );
+		this.luceneQuery = query;
+		this.classes = classes;
+	}
+
+	/**
+	 * Return an interator on the results.
+	 * Retrieve the object one by one (initialize it during the next() operation)
+	 */
+	public Iterator iterate() throws HibernateException {
+		//implement an interator which keep the id/class for each hit and get the object on demand
+		//cause I can't keep the searcher and hence the hit opened. I dont have any hook to know when the
+		//user stop using it
+		//scrollable is better in this area
+
+		SearchFactory searchFactory = ContextHelper.getSearchFactoryBySFI( session );
+		//find the directories
+		Searcher searcher = buildSearcher( searchFactory );
+		if ( searcher == null ) {
+		   	return new IteratorImpl( new ArrayList<EntityInfo>(0), (Session) this.session);
+		}
+		try {
+			org.apache.lucene.search.Query query = filterQueryByClasses( luceneQuery );
+			Hits hits = searcher.search( query );
+			setResultSize( hits );
+			int first = first();
+			int max = max( first, hits );
+			List<EntityInfo> entityInfos = new ArrayList<EntityInfo>( max - first + 1 );
+			for ( int index = first; index <= max; index++ ) {
+				Document document = hits.doc( index );
+				EntityInfo entityInfo = new EntityInfo();
+				entityInfo.clazz = DocumentBuilder.getDocumentClass( document );
+				entityInfo.id = DocumentBuilder.getDocumentId( searchFactory, entityInfo.clazz, document );
+				entityInfos.add( entityInfo );
+			}
+			return new IteratorImpl( entityInfos, (Session) this.session );
+		}
+		catch (IOException e) {
+			throw new HibernateException( "Unable to query Lucene index", e );
+		}
+		finally {
+			if ( searcher != null ) {
+				try {
+					searcher.close();
+				}
+				catch (IOException e) {
+					log.warn( "Unable to properly close searcher during lucene query: " + getQueryString(), e );
+				}
+			}
+		}
+	}
+
+	public ScrollableResults scroll() throws HibernateException {
+		//keep the searcher open until the resultset is closed
+		SearchFactory searchFactory = ContextHelper.getSearchFactoryBySFI( session );
+		;
+		//find the directories
+		Searcher searcher = buildSearcher( searchFactory );
+		//FIXME: handle null searcher
+		Hits hits;
+		try {
+			org.apache.lucene.search.Query query = filterQueryByClasses( luceneQuery );
+			hits = searcher.search( query );
+			setResultSize( hits );
+			int first = first();
+			int max = max( first, hits );
+			return new ScrollableResultsImpl( searcher, hits, first, max, (Session) this.session, searchFactory );
+		}
+		catch (IOException e) {
+			try {
+				if ( searcher != null ) searcher.close();
+			}
+			catch (IOException ee) {
+				//we have the initial issue already
+			}
+			throw new HibernateException( "Unable to query Lucene index", e );
+		}
+	}
+
+	public ScrollableResults scroll(ScrollMode scrollMode) throws HibernateException {
+		//TODO think about this scrollmode
+		return scroll();
+	}
+
+	public List list() throws HibernateException {
+		SearchFactory searchFactory = ContextHelper.getSearchFactoryBySFI( session );
+		//find the directories
+		Searcher searcher = buildSearcher( searchFactory );
+		if (searcher == null) return new ArrayList(0);
+		Hits hits;
+		try {
+			org.apache.lucene.search.Query query = filterQueryByClasses( luceneQuery );
+			hits = searcher.search( query );
+			setResultSize( hits );
+			int first = first();
+			int max = max( first, hits );
+			List result = new ArrayList( max - first + 1 );
+			Session sess = (Session) this.session;
+			for ( int index = first; index <= max; index++ ) {
+				Document document = hits.doc( index );
+				Class clazz = DocumentBuilder.getDocumentClass( document );
+				Serializable id = DocumentBuilder.getDocumentId( searchFactory, clazz, document );
+				result.add( sess.load( clazz, id ) );
+				//use load to benefit from the batch-size
+				//we don't face proxy casting issues since the exact class is extracted from the index
+			}
+			//then initialize the objects
+			List excludedObects = new ArrayList();
+			for ( Object element : result ) {
+				try {
+					Hibernate.initialize( element );
+				}
+				catch (ObjectNotFoundException e) {
+					log.debug( "Object found in Search index but not in database: "
+							+ e.getEntityName() + " wih id " + e.getIdentifier() );
+					excludedObects.add( element );
+				}
+			}
+			if ( excludedObects.size() > 0 ) {
+				result.removeAll( excludedObects );
+			}
+			return result;
+		}
+		catch (IOException e) {
+			throw new HibernateException( "Unable to query Lucene index", e );
+		}
+		finally {
+			if ( searcher != null ) try {
+				searcher.close();
+			}
+			catch (IOException e) {
+				log.warn( "Unable to properly close searcher during lucene query: " + getQueryString(), e );
+			}
+		}
+	}
+
+	private org.apache.lucene.search.Query filterQueryByClasses(org.apache.lucene.search.Query luceneQuery) {
+		//A query filter is more practical than a manual class filtering post query (esp on scrollable resultsets)
+		//it also probably minimise the memory footprint
+		if ( classesAndSubclasses == null ) {
+			return luceneQuery;
+		}
+		else {
+			BooleanQuery classFilter = new BooleanQuery();
+			//annihilate the scoring impact of DocumentBuilder.CLASS_FIELDNAME
+			classFilter.setBoost( 0 );
+			for ( Class clazz : classesAndSubclasses ) {
+				Term t = new Term( DocumentBuilder.CLASS_FIELDNAME, clazz.getName() );
+				TermQuery termQuery = new TermQuery( t );
+				classFilter.add( termQuery, BooleanClause.Occur.SHOULD );
+			}
+			BooleanQuery filteredQuery = new BooleanQuery();
+			filteredQuery.add( luceneQuery, BooleanClause.Occur.MUST );
+			filteredQuery.add( classFilter, BooleanClause.Occur.MUST );
+			return filteredQuery;
+		}
+	}
+
+	private int max(int first, Hits hits) {
+		return maxResults == null ?
+				hits.length() - 1 :
+				maxResults + first < hits.length() ?
+						first + maxResults - 1 :
+						hits.length() - 1;
+	}
+
+	private int first() {
+		return firstResult != null ?
+				firstResult :
+				0;
+	}
+
+	//TODO change classesAndSubclasses by side effect, which is a mismatch with the Searcher return, fix that.
+	private Searcher buildSearcher(SearchFactory searchFactory) {
+		Map<Class, DocumentBuilder<Object>> builders = searchFactory.getDocumentBuilders();
+		Set<Directory> directories = new HashSet<Directory>();
+		if ( classes == null || classes.length == 0 ) {
+			//no class means all classes
+			for ( DocumentBuilder builder : builders.values() ) {
+				directories.add( builder.getDirectoryProvider().getDirectory() );
+			}
+			classesAndSubclasses = null;
+		}
+		else {
+			Set<Class> involvedClasses = new HashSet<Class>( classes.length );
+			Collections.addAll( involvedClasses, classes );
+			for ( Class clazz : classes ) {
+				DocumentBuilder builder = builders.get( clazz );
+				if ( builder != null ) involvedClasses.addAll( builder.getMappedSubclasses() );
+			}
+			for ( Class clazz : involvedClasses ) {
+				DocumentBuilder builder = builders.get( clazz );
+				//TODO should we rather choose a polymorphic path and allow non mapped entities
+				if ( builder == null ) throw new HibernateException( "Not a mapped entity: " + clazz );
+				directories.add( builder.getDirectoryProvider().getDirectory() );
+			}
+			classesAndSubclasses = involvedClasses;
+		}
+
+		//set up the searcher
+		Searcher searcher;
+		int dirNbr = directories.size();
+		if ( dirNbr > 1 ) {
+			try {
+				IndexSearcher[] searchers = new IndexSearcher[dirNbr];
+				Iterator<Directory> it = directories.iterator();
+				for ( int index = 0; index < dirNbr; index++ ) {
+					searchers[index] = new IndexSearcher( it.next() );
+				}
+				searcher = new MultiSearcher( searchers );
+			}
+			catch (IOException e) {
+				throw new HibernateException( "Unable to read Lucene directory", e );
+			}
+		}
+		else if ( dirNbr == 1 ) {
+			try {
+				searcher = new IndexSearcher( directories.iterator().next() );
+			}
+			catch (IOException e) {
+				throw new HibernateException( "Unable to read Lucene directory", e );
+			}
+		}
+		else {
+			return null; //no indexed entity set up
+		}
+		return searcher;
+	}
+
+	private void setResultSize(Hits hits) {
+		resultSize = hits.length();
+	}
+
+	//FIXME does it make sense
+	public int resultSize() {
+		return this.resultSize;
+	}
+
+	public Query setFirstResult(int firstResult) {
+		this.firstResult = firstResult;
+		return this;
+	}
+
+	public Query setMaxResults(int maxResults) {
+		this.maxResults = maxResults;
+		return this;
+	}
+
+	public int executeUpdate() throws HibernateException {
+		throw new HibernateException( "Not supported operation" );
+	}
+
+	public Query setLockMode(String alias, LockMode lockMode) {
+		return null;
+	}
+
+	protected Map getLockModes() {
+		return null;
+	}
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/query/IteratorImpl.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/query/IteratorImpl.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/query/IteratorImpl.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,63 +0,0 @@
-//$Id: $
-package org.hibernate.search.query;
-
-import java.util.Iterator;
-import java.util.List;
-import java.util.NoSuchElementException;
-
-import org.hibernate.Session;
-
-/**
- * @author Emmanuel Bernard
- */
-//TODO load the next batch-size elements to benefit from batch-size 
-public class IteratorImpl implements Iterator {
-
-	private final List<EntityInfo> entityInfos;
-	private final Session session;
-	private int index = 0;
-	private final int size;
-   private Object next;
-   private int nextObjectIndex = -1;
-
-   public IteratorImpl(List<EntityInfo> entityInfos, Session session) {
-		this.entityInfos = entityInfos;
-		this.session = session;
-		this.size = entityInfos.size();
-	}
-
-   //side effect is to set up next
-   public boolean hasNext() {
-      if (nextObjectIndex == index) return next != null;
-      next = null;
-      nextObjectIndex = -1;
-      do {
-         if ( index >= size ) {
-            nextObjectIndex = index;
-            next = null;
-            return false;
-         }
-         next = session.get( entityInfos.get( index ).clazz, entityInfos.get( index ).id );
-         if (next == null) {
-            index++;
-         }
-         else {
-            nextObjectIndex = index;
-         }
-      }
-      while( next == null );
-      return true;
-   }
-
-	public Object next() {
-      //hasNext() has side effect
-      if ( ! hasNext() ) throw new NoSuchElementException("Out of boundaries");
-      index++;
-      return next;
-	}
-
-	public void remove() {
-		//TODO this is theorically doable
-		throw new UnsupportedOperationException( "Cannot remove from a lucene query iterator" );
-	}
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/query/IteratorImpl.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/query/IteratorImpl.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/query/IteratorImpl.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/query/IteratorImpl.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,63 @@
+//$Id: $
+package org.hibernate.search.query;
+
+import java.util.Iterator;
+import java.util.List;
+import java.util.NoSuchElementException;
+
+import org.hibernate.Session;
+
+/**
+ * @author Emmanuel Bernard
+ */
+//TODO load the next batch-size elements to benefit from batch-size 
+public class IteratorImpl implements Iterator {
+
+	private final List<EntityInfo> entityInfos;
+	private final Session session;
+	private int index = 0;
+	private final int size;
+   private Object next;
+   private int nextObjectIndex = -1;
+
+   public IteratorImpl(List<EntityInfo> entityInfos, Session session) {
+		this.entityInfos = entityInfos;
+		this.session = session;
+		this.size = entityInfos.size();
+	}
+
+   //side effect is to set up next
+   public boolean hasNext() {
+      if (nextObjectIndex == index) return next != null;
+      next = null;
+      nextObjectIndex = -1;
+      do {
+         if ( index >= size ) {
+            nextObjectIndex = index;
+            next = null;
+            return false;
+         }
+         next = session.get( entityInfos.get( index ).clazz, entityInfos.get( index ).id );
+         if (next == null) {
+            index++;
+         }
+         else {
+            nextObjectIndex = index;
+         }
+      }
+      while( next == null );
+      return true;
+   }
+
+	public Object next() {
+      //hasNext() has side effect
+      if ( ! hasNext() ) throw new NoSuchElementException("Out of boundaries");
+      index++;
+      return next;
+	}
+
+	public void remove() {
+		//TODO this is theorically doable
+		throw new UnsupportedOperationException( "Cannot remove from a lucene query iterator" );
+	}
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/query/ScrollableResultsImpl.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/query/ScrollableResultsImpl.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/query/ScrollableResultsImpl.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,222 +0,0 @@
-//$Id: $
-package org.hibernate.search.query;
-
-import java.io.IOException;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.sql.Blob;
-import java.sql.Clob;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.Locale;
-import java.util.TimeZone;
-
-import org.apache.lucene.document.Document;
-import org.apache.lucene.search.Hits;
-import org.apache.lucene.search.Searcher;
-import org.hibernate.HibernateException;
-import org.hibernate.ScrollableResults;
-import org.hibernate.Session;
-import org.hibernate.search.engine.DocumentBuilder;
-import org.hibernate.search.SearchFactory;
-import org.hibernate.type.Type;
-
-/**
- * Implements scollable and paginated resultsets.
- * Contrary to query#iterate() or query#list(), this implementation is
- * exposed to returned null objects (if the index is out of date).
- *
- * @author Emmanuel Bernard
- */
-public class ScrollableResultsImpl implements ScrollableResults {
-	private final Searcher searcher;
-	private final Hits hits;
-	private final int first;
-	private final int max;
-	private int current;
-	private final Session session;
-	private EntityInfo[] entityInfos;
-	private final SearchFactory searchFactory;
-
-	public ScrollableResultsImpl(
-			Searcher searcher, Hits hits, int first, int max, Session session, SearchFactory searchFactory
-	) {
-		this.searcher = searcher;
-		this.hits = hits;
-		this.first = first;
-		this.max = max;
-		this.current = first;
-		this.session = session;
-		this.searchFactory = searchFactory;
-		entityInfos = new EntityInfo[max - first + 1];
-	}
-
-	public boolean next() throws HibernateException {
-		return ++current <= max;
-	}
-
-	public boolean previous() throws HibernateException {
-		return --current >= first;
-	}
-
-	public boolean scroll(int i) throws HibernateException {
-		current = current + i;
-		return current >= first && current <= max;
-	}
-
-	public boolean last() throws HibernateException {
-		current = max;
-		return max >= first;
-	}
-
-	public boolean first() throws HibernateException {
-		current = first;
-		return max >= first;
-	}
-
-	public void beforeFirst() throws HibernateException {
-		current = first - 1;
-	}
-
-	public void afterLast() throws HibernateException {
-		current = max + 1;
-	}
-
-	public boolean isFirst() throws HibernateException {
-		return current == first;
-	}
-
-	public boolean isLast() throws HibernateException {
-		return current == max;
-	}
-
-	public void close() throws HibernateException {
-		try {
-			searcher.close();
-		}
-		catch (IOException e) {
-			throw new HibernateException( "Unable to close Lucene searcher", e );
-		}
-	}
-
-	public Object[] get() throws HibernateException {
-		if ( current < first || current > max ) return null; //or exception?
-		EntityInfo info = entityInfos[current - first];
-		if ( info == null ) {
-			info = new EntityInfo();
-			Document document = null;
-			try {
-				document = hits.doc( current );
-			}
-			catch (IOException e) {
-				throw new HibernateException( "Unable to read Lucene hits[" + current + "]", e );
-			}
-			info.clazz = DocumentBuilder.getDocumentClass( document );
-			//FIXME should check that clazz match classes but this complexify a lot the firstResult/maxResult
-			info.id = DocumentBuilder.getDocumentId( searchFactory, info.clazz, document );
-			entityInfos[current - first] = info;
-		}
-		return new Object[]{
-				session.get( info.clazz, info.id )
-		};
-	}
-
-	public Object get(int i) throws HibernateException {
-		throw new UnsupportedOperationException( "Lucene does not work on columns" );
-	}
-
-	public Type getType(int i) {
-		throw new UnsupportedOperationException( "Lucene does not work on columns" );
-	}
-
-	public Integer getInteger(int col) throws HibernateException {
-		throw new UnsupportedOperationException( "Lucene does not work on columns" );
-	}
-
-	public Long getLong(int col) throws HibernateException {
-		throw new UnsupportedOperationException( "Lucene does not work on columns" );
-	}
-
-	public Float getFloat(int col) throws HibernateException {
-		throw new UnsupportedOperationException( "Lucene does not work on columns" );
-	}
-
-	public Boolean getBoolean(int col) throws HibernateException {
-		throw new UnsupportedOperationException( "Lucene does not work on columns" );
-	}
-
-	public Double getDouble(int col) throws HibernateException {
-		throw new UnsupportedOperationException( "Lucene does not work on columns" );
-	}
-
-	public Short getShort(int col) throws HibernateException {
-		throw new UnsupportedOperationException( "Lucene does not work on columns" );
-	}
-
-	public Byte getByte(int col) throws HibernateException {
-		throw new UnsupportedOperationException( "Lucene does not work on columns" );
-	}
-
-	public Character getCharacter(int col) throws HibernateException {
-		throw new UnsupportedOperationException( "Lucene does not work on columns" );
-	}
-
-	public byte[] getBinary(int col) throws HibernateException {
-		throw new UnsupportedOperationException( "Lucene does not work on columns" );
-	}
-
-	public String getText(int col) throws HibernateException {
-		throw new UnsupportedOperationException( "Lucene does not work on columns" );
-	}
-
-	public Blob getBlob(int col) throws HibernateException {
-		throw new UnsupportedOperationException( "Lucene does not work on columns" );
-	}
-
-	public Clob getClob(int col) throws HibernateException {
-		throw new UnsupportedOperationException( "Lucene does not work on columns" );
-	}
-
-	public String getString(int col) throws HibernateException {
-		throw new UnsupportedOperationException( "Lucene does not work on columns" );
-	}
-
-	public BigDecimal getBigDecimal(int col) throws HibernateException {
-		throw new UnsupportedOperationException( "Lucene does not work on columns" );
-	}
-
-	public BigInteger getBigInteger(int col) throws HibernateException {
-		throw new UnsupportedOperationException( "Lucene does not work on columns" );
-	}
-
-	public Date getDate(int col) throws HibernateException {
-		throw new UnsupportedOperationException( "Lucene does not work on columns" );
-	}
-
-	public Locale getLocale(int col) throws HibernateException {
-		throw new UnsupportedOperationException( "Lucene does not work on columns" );
-	}
-
-	public Calendar getCalendar(int col) throws HibernateException {
-		throw new UnsupportedOperationException( "Lucene does not work on columns" );
-	}
-
-	public TimeZone getTimeZone(int col) throws HibernateException {
-		throw new UnsupportedOperationException( "Lucene does not work on columns" );
-	}
-
-	public int getRowNumber() throws HibernateException {
-		if ( max < first ) return -1;
-		return current - first;
-	}
-
-	public boolean setRowNumber(int rowNumber) throws HibernateException {
-		if ( rowNumber >= 0 ) {
-			current = first + rowNumber;
-		}
-		else {
-			current = max + rowNumber + 1; //max row start at -1
-		}
-		return current >= first && current <= max;
-	}
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/query/ScrollableResultsImpl.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/query/ScrollableResultsImpl.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/query/ScrollableResultsImpl.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/query/ScrollableResultsImpl.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,222 @@
+//$Id: $
+package org.hibernate.search.query;
+
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.sql.Blob;
+import java.sql.Clob;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Locale;
+import java.util.TimeZone;
+
+import org.apache.lucene.document.Document;
+import org.apache.lucene.search.Hits;
+import org.apache.lucene.search.Searcher;
+import org.hibernate.HibernateException;
+import org.hibernate.ScrollableResults;
+import org.hibernate.Session;
+import org.hibernate.search.engine.DocumentBuilder;
+import org.hibernate.search.SearchFactory;
+import org.hibernate.type.Type;
+
+/**
+ * Implements scollable and paginated resultsets.
+ * Contrary to query#iterate() or query#list(), this implementation is
+ * exposed to returned null objects (if the index is out of date).
+ *
+ * @author Emmanuel Bernard
+ */
+public class ScrollableResultsImpl implements ScrollableResults {
+	private final Searcher searcher;
+	private final Hits hits;
+	private final int first;
+	private final int max;
+	private int current;
+	private final Session session;
+	private EntityInfo[] entityInfos;
+	private final SearchFactory searchFactory;
+
+	public ScrollableResultsImpl(
+			Searcher searcher, Hits hits, int first, int max, Session session, SearchFactory searchFactory
+	) {
+		this.searcher = searcher;
+		this.hits = hits;
+		this.first = first;
+		this.max = max;
+		this.current = first;
+		this.session = session;
+		this.searchFactory = searchFactory;
+		entityInfos = new EntityInfo[max - first + 1];
+	}
+
+	public boolean next() throws HibernateException {
+		return ++current <= max;
+	}
+
+	public boolean previous() throws HibernateException {
+		return --current >= first;
+	}
+
+	public boolean scroll(int i) throws HibernateException {
+		current = current + i;
+		return current >= first && current <= max;
+	}
+
+	public boolean last() throws HibernateException {
+		current = max;
+		return max >= first;
+	}
+
+	public boolean first() throws HibernateException {
+		current = first;
+		return max >= first;
+	}
+
+	public void beforeFirst() throws HibernateException {
+		current = first - 1;
+	}
+
+	public void afterLast() throws HibernateException {
+		current = max + 1;
+	}
+
+	public boolean isFirst() throws HibernateException {
+		return current == first;
+	}
+
+	public boolean isLast() throws HibernateException {
+		return current == max;
+	}
+
+	public void close() throws HibernateException {
+		try {
+			searcher.close();
+		}
+		catch (IOException e) {
+			throw new HibernateException( "Unable to close Lucene searcher", e );
+		}
+	}
+
+	public Object[] get() throws HibernateException {
+		if ( current < first || current > max ) return null; //or exception?
+		EntityInfo info = entityInfos[current - first];
+		if ( info == null ) {
+			info = new EntityInfo();
+			Document document = null;
+			try {
+				document = hits.doc( current );
+			}
+			catch (IOException e) {
+				throw new HibernateException( "Unable to read Lucene hits[" + current + "]", e );
+			}
+			info.clazz = DocumentBuilder.getDocumentClass( document );
+			//FIXME should check that clazz match classes but this complexify a lot the firstResult/maxResult
+			info.id = DocumentBuilder.getDocumentId( searchFactory, info.clazz, document );
+			entityInfos[current - first] = info;
+		}
+		return new Object[]{
+				session.get( info.clazz, info.id )
+		};
+	}
+
+	public Object get(int i) throws HibernateException {
+		throw new UnsupportedOperationException( "Lucene does not work on columns" );
+	}
+
+	public Type getType(int i) {
+		throw new UnsupportedOperationException( "Lucene does not work on columns" );
+	}
+
+	public Integer getInteger(int col) throws HibernateException {
+		throw new UnsupportedOperationException( "Lucene does not work on columns" );
+	}
+
+	public Long getLong(int col) throws HibernateException {
+		throw new UnsupportedOperationException( "Lucene does not work on columns" );
+	}
+
+	public Float getFloat(int col) throws HibernateException {
+		throw new UnsupportedOperationException( "Lucene does not work on columns" );
+	}
+
+	public Boolean getBoolean(int col) throws HibernateException {
+		throw new UnsupportedOperationException( "Lucene does not work on columns" );
+	}
+
+	public Double getDouble(int col) throws HibernateException {
+		throw new UnsupportedOperationException( "Lucene does not work on columns" );
+	}
+
+	public Short getShort(int col) throws HibernateException {
+		throw new UnsupportedOperationException( "Lucene does not work on columns" );
+	}
+
+	public Byte getByte(int col) throws HibernateException {
+		throw new UnsupportedOperationException( "Lucene does not work on columns" );
+	}
+
+	public Character getCharacter(int col) throws HibernateException {
+		throw new UnsupportedOperationException( "Lucene does not work on columns" );
+	}
+
+	public byte[] getBinary(int col) throws HibernateException {
+		throw new UnsupportedOperationException( "Lucene does not work on columns" );
+	}
+
+	public String getText(int col) throws HibernateException {
+		throw new UnsupportedOperationException( "Lucene does not work on columns" );
+	}
+
+	public Blob getBlob(int col) throws HibernateException {
+		throw new UnsupportedOperationException( "Lucene does not work on columns" );
+	}
+
+	public Clob getClob(int col) throws HibernateException {
+		throw new UnsupportedOperationException( "Lucene does not work on columns" );
+	}
+
+	public String getString(int col) throws HibernateException {
+		throw new UnsupportedOperationException( "Lucene does not work on columns" );
+	}
+
+	public BigDecimal getBigDecimal(int col) throws HibernateException {
+		throw new UnsupportedOperationException( "Lucene does not work on columns" );
+	}
+
+	public BigInteger getBigInteger(int col) throws HibernateException {
+		throw new UnsupportedOperationException( "Lucene does not work on columns" );
+	}
+
+	public Date getDate(int col) throws HibernateException {
+		throw new UnsupportedOperationException( "Lucene does not work on columns" );
+	}
+
+	public Locale getLocale(int col) throws HibernateException {
+		throw new UnsupportedOperationException( "Lucene does not work on columns" );
+	}
+
+	public Calendar getCalendar(int col) throws HibernateException {
+		throw new UnsupportedOperationException( "Lucene does not work on columns" );
+	}
+
+	public TimeZone getTimeZone(int col) throws HibernateException {
+		throw new UnsupportedOperationException( "Lucene does not work on columns" );
+	}
+
+	public int getRowNumber() throws HibernateException {
+		if ( max < first ) return -1;
+		return current - first;
+	}
+
+	public boolean setRowNumber(int rowNumber) throws HibernateException {
+		if ( rowNumber >= 0 ) {
+			current = first + rowNumber;
+		}
+		else {
+			current = max + rowNumber + 1; //max row start at -1
+		}
+		return current >= first && current <= max;
+	}
+}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/store (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/store)

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/store/DirectoryProvider.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/store/DirectoryProvider.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/store/DirectoryProvider.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,32 +0,0 @@
-//$Id: $
-package org.hibernate.search.store;
-
-import java.util.Properties;
-
-import org.apache.lucene.store.Directory;
-import org.hibernate.search.SearchFactory;
-
-
-/**
- * Set up and provide a Lucene <code>Directory</code>
- * <code>equals()</code> and <code>hashCode()</code> must guaranty equality
- * between two providers pointing to the same underlying Lucene Store.
- * Besides that, hashCode ordering is used to avoid deadlock when locking a directory provider.
- * 
- * This class must be thread safe regarding <code>getDirectory()</code> calls
- *
- * @author Emmanuel Bernard
- * @author Sylvain Vieujot
- */
-public interface DirectoryProvider<TDirectory extends Directory> {
-	/**
-	 * get the information to initialize the directory and build its hashCode
-	 */
-	void initialize(String directoryProviderName, Properties properties, SearchFactory searchFactory);
-
-	/**
-	 * Returns an initialized Lucene Directory. This method call <b>must</b> be threadsafe
-	 */
-	TDirectory getDirectory();
-}
-

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/store/DirectoryProvider.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/store/DirectoryProvider.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/store/DirectoryProvider.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/store/DirectoryProvider.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,32 @@
+//$Id: $
+package org.hibernate.search.store;
+
+import java.util.Properties;
+
+import org.apache.lucene.store.Directory;
+import org.hibernate.search.SearchFactory;
+
+
+/**
+ * Set up and provide a Lucene <code>Directory</code>
+ * <code>equals()</code> and <code>hashCode()</code> must guaranty equality
+ * between two providers pointing to the same underlying Lucene Store.
+ * Besides that, hashCode ordering is used to avoid deadlock when locking a directory provider.
+ * 
+ * This class must be thread safe regarding <code>getDirectory()</code> calls
+ *
+ * @author Emmanuel Bernard
+ * @author Sylvain Vieujot
+ */
+public interface DirectoryProvider<TDirectory extends Directory> {
+	/**
+	 * get the information to initialize the directory and build its hashCode
+	 */
+	void initialize(String directoryProviderName, Properties properties, SearchFactory searchFactory);
+
+	/**
+	 * Returns an initialized Lucene Directory. This method call <b>must</b> be threadsafe
+	 */
+	TDirectory getDirectory();
+}
+

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/store/DirectoryProviderFactory.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/store/DirectoryProviderFactory.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/store/DirectoryProviderFactory.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,130 +0,0 @@
-//$Id: $
-package org.hibernate.search.store;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-
-import org.hibernate.HibernateException;
-import org.hibernate.cfg.Configuration;
-import org.hibernate.search.annotations.Indexed;
-import org.hibernate.search.SearchFactory;
-import org.hibernate.mapping.PersistentClass;
-import org.hibernate.annotations.common.reflection.ReflectionManager;
-import org.hibernate.annotations.common.reflection.XClass;
-import org.hibernate.util.ReflectHelper;
-import org.hibernate.util.StringHelper;
-
-/**
- * Create a Lucene directory provider
- * <p/>
- * Lucene directory providers are configured through properties
- * - hibernate.search.default.* and
- * - hibernate.search.<indexname>.*
- * <p/>
- * <indexname> properties have precedence over default
- * <p/>
- * The implementation is described by
- * hibernate.search.[default|indexname].directory_provider
- * <p/>
- * If none is defined the default value is FSDirectory
- *
- * @author Emmanuel Bernard
- * @author Sylvain Vieujot
- */
-public class DirectoryProviderFactory {
-	public List<DirectoryProvider<?>> providers = new ArrayList<DirectoryProvider<?>>();
-	private static String LUCENE_PREFIX = "hibernate.search.";
-	private static String LUCENE_DEFAULT = LUCENE_PREFIX + "default.";
-	private static String DEFAULT_DIRECTORY_PROVIDER = FSDirectoryProvider.class.getName();
-
-	//TODO for the public?
-	public DirectoryProvider<?> createDirectoryProvider(XClass entity, Configuration cfg, SearchFactory searchFactory) {
-		//get properties
-		String directoryProviderName = getDirectoryProviderName( entity, cfg );
-		Properties indexProps = getDirectoryProperties( cfg, directoryProviderName );
-
-		//set up the directory
-		String className = indexProps.getProperty( "directory_provider" );
-		if ( StringHelper.isEmpty( className ) ) {
-			className = DEFAULT_DIRECTORY_PROVIDER;
-		}
-		DirectoryProvider<?> provider = null;
-		try {
-			@SuppressWarnings( "unchecked" )
-			Class<DirectoryProvider> directoryClass = ReflectHelper.classForName(
-					className, DirectoryProviderFactory.class
-			);
-			provider = directoryClass.newInstance();
-		}
-		catch (Exception e) {
-			throw new HibernateException( "Unable to instanciate directory provider: " + className, e );
-		}
-		try {
-			provider.initialize( directoryProviderName, indexProps, searchFactory );
-		}
-		catch (Exception e) {
-			throw new HibernateException( "Unable to initialize: " + directoryProviderName, e);
-		}
-		int index = providers.indexOf( provider );
-		if ( index != -1 ) {
-			//share the same Directory provider for the same underlying store
-			return providers.get( index );
-		}
-		else {
-			providers.add( provider );
-			return provider;
-		}
-	}
-
-	private static Properties getDirectoryProperties(Configuration cfg, String directoryProviderName) {
-		Properties props = cfg.getProperties();
-		String indexName = LUCENE_PREFIX + directoryProviderName;
-		Properties indexProps = new Properties();
-		Properties indexSpecificProps = new Properties();
-		for ( Map.Entry entry : props.entrySet() ) {
-			String key = (String) entry.getKey();
-			if ( key.startsWith( LUCENE_DEFAULT ) ) {
-				indexProps.setProperty( key.substring( LUCENE_DEFAULT.length() ), (String) entry.getValue() );
-			}
-			else if ( key.startsWith( indexName ) ) {
-				indexSpecificProps.setProperty( key.substring( indexName.length() ), (String) entry.getValue() );
-			}
-		}
-		indexProps.putAll( indexSpecificProps );
-		return indexProps;
-	}
-
-	private static String getDirectoryProviderName(XClass clazz, Configuration cfg) {
-		//yuk
-		ReflectionManager reflectionManager = SearchFactory.getReflectionManager(cfg);
-		//get the most specialized (ie subclass > superclass) non default index name
-		//if none extract the name from the most generic (superclass > subclass) @Indexed class in the hierarchy
-		//FIXME I'm inclined to get rid of the default value
-		PersistentClass pc = cfg.getClassMapping( clazz.getName() );
-		XClass rootIndex = null;
-		do {
-			XClass currentClazz = reflectionManager.toXClass( pc.getMappedClass() );
-			Indexed indexAnn = currentClazz.getAnnotation( Indexed.class );
-			if ( indexAnn != null ) {
-				if ( indexAnn.index().length() != 0 ) {
-					return indexAnn.index();
-				}
-				else {
-					rootIndex = currentClazz;
-				}
-			}
-			pc = pc.getSuperclass();
-		}
-		while ( pc != null );
-		//there is nobody outthere with a non default @Indexed.index
-		if ( rootIndex != null ) {
-			return rootIndex.getName();
-		}
-		else {
-			throw new HibernateException(
-					"Trying to extract the index name from a non @Indexed class: " + clazz.getName() );
-		}
-	}
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/store/DirectoryProviderFactory.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/store/DirectoryProviderFactory.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/store/DirectoryProviderFactory.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/store/DirectoryProviderFactory.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,130 @@
+//$Id: $
+package org.hibernate.search.store;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
+import org.hibernate.HibernateException;
+import org.hibernate.cfg.Configuration;
+import org.hibernate.search.annotations.Indexed;
+import org.hibernate.search.SearchFactory;
+import org.hibernate.mapping.PersistentClass;
+import org.hibernate.annotations.common.reflection.ReflectionManager;
+import org.hibernate.annotations.common.reflection.XClass;
+import org.hibernate.util.ReflectHelper;
+import org.hibernate.util.StringHelper;
+
+/**
+ * Create a Lucene directory provider
+ * <p/>
+ * Lucene directory providers are configured through properties
+ * - hibernate.search.default.* and
+ * - hibernate.search.<indexname>.*
+ * <p/>
+ * <indexname> properties have precedence over default
+ * <p/>
+ * The implementation is described by
+ * hibernate.search.[default|indexname].directory_provider
+ * <p/>
+ * If none is defined the default value is FSDirectory
+ *
+ * @author Emmanuel Bernard
+ * @author Sylvain Vieujot
+ */
+public class DirectoryProviderFactory {
+	public List<DirectoryProvider<?>> providers = new ArrayList<DirectoryProvider<?>>();
+	private static String LUCENE_PREFIX = "hibernate.search.";
+	private static String LUCENE_DEFAULT = LUCENE_PREFIX + "default.";
+	private static String DEFAULT_DIRECTORY_PROVIDER = FSDirectoryProvider.class.getName();
+
+	//TODO for the public?
+	public DirectoryProvider<?> createDirectoryProvider(XClass entity, Configuration cfg, SearchFactory searchFactory) {
+		//get properties
+		String directoryProviderName = getDirectoryProviderName( entity, cfg );
+		Properties indexProps = getDirectoryProperties( cfg, directoryProviderName );
+
+		//set up the directory
+		String className = indexProps.getProperty( "directory_provider" );
+		if ( StringHelper.isEmpty( className ) ) {
+			className = DEFAULT_DIRECTORY_PROVIDER;
+		}
+		DirectoryProvider<?> provider = null;
+		try {
+			@SuppressWarnings( "unchecked" )
+			Class<DirectoryProvider> directoryClass = ReflectHelper.classForName(
+					className, DirectoryProviderFactory.class
+			);
+			provider = directoryClass.newInstance();
+		}
+		catch (Exception e) {
+			throw new HibernateException( "Unable to instanciate directory provider: " + className, e );
+		}
+		try {
+			provider.initialize( directoryProviderName, indexProps, searchFactory );
+		}
+		catch (Exception e) {
+			throw new HibernateException( "Unable to initialize: " + directoryProviderName, e);
+		}
+		int index = providers.indexOf( provider );
+		if ( index != -1 ) {
+			//share the same Directory provider for the same underlying store
+			return providers.get( index );
+		}
+		else {
+			providers.add( provider );
+			return provider;
+		}
+	}
+
+	private static Properties getDirectoryProperties(Configuration cfg, String directoryProviderName) {
+		Properties props = cfg.getProperties();
+		String indexName = LUCENE_PREFIX + directoryProviderName;
+		Properties indexProps = new Properties();
+		Properties indexSpecificProps = new Properties();
+		for ( Map.Entry entry : props.entrySet() ) {
+			String key = (String) entry.getKey();
+			if ( key.startsWith( LUCENE_DEFAULT ) ) {
+				indexProps.setProperty( key.substring( LUCENE_DEFAULT.length() ), (String) entry.getValue() );
+			}
+			else if ( key.startsWith( indexName ) ) {
+				indexSpecificProps.setProperty( key.substring( indexName.length() ), (String) entry.getValue() );
+			}
+		}
+		indexProps.putAll( indexSpecificProps );
+		return indexProps;
+	}
+
+	private static String getDirectoryProviderName(XClass clazz, Configuration cfg) {
+		//yuk
+		ReflectionManager reflectionManager = SearchFactory.getReflectionManager(cfg);
+		//get the most specialized (ie subclass > superclass) non default index name
+		//if none extract the name from the most generic (superclass > subclass) @Indexed class in the hierarchy
+		//FIXME I'm inclined to get rid of the default value
+		PersistentClass pc = cfg.getClassMapping( clazz.getName() );
+		XClass rootIndex = null;
+		do {
+			XClass currentClazz = reflectionManager.toXClass( pc.getMappedClass() );
+			Indexed indexAnn = currentClazz.getAnnotation( Indexed.class );
+			if ( indexAnn != null ) {
+				if ( indexAnn.index().length() != 0 ) {
+					return indexAnn.index();
+				}
+				else {
+					rootIndex = currentClazz;
+				}
+			}
+			pc = pc.getSuperclass();
+		}
+		while ( pc != null );
+		//there is nobody outthere with a non default @Indexed.index
+		if ( rootIndex != null ) {
+			return rootIndex.getName();
+		}
+		else {
+			throw new HibernateException(
+					"Trying to extract the index name from a non @Indexed class: " + clazz.getName() );
+		}
+	}
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/store/FSDirectoryProvider.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/store/FSDirectoryProvider.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/store/FSDirectoryProvider.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,68 +0,0 @@
-//$Id: $
-package org.hibernate.search.store;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Properties;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.lucene.analysis.standard.StandardAnalyzer;
-import org.apache.lucene.index.IndexWriter;
-import org.apache.lucene.store.FSDirectory;
-import org.hibernate.HibernateException;
-import org.hibernate.search.util.DirectoryProviderHelper;
-import org.hibernate.search.SearchFactory;
-
-/**
- * Use a Lucene FSDirectory
- * The base directory is represented by hibernate.search.<index>.indexBase
- * The index is created in <base directory>/<index name>
- *
- * @author Emmanuel Bernard
- * @author Sylvain Vieujot
- */
-public class FSDirectoryProvider implements DirectoryProvider<FSDirectory> {
-	private FSDirectory directory;
-	private static Log log = LogFactory.getLog( FSDirectoryProvider.class );
-	private String indexName;
-
-	public void initialize(String directoryProviderName, Properties properties, SearchFactory searchFactory) {
-		File indexDir = DirectoryProviderHelper.determineIndexDir( directoryProviderName, properties );
-		try {
-			boolean create = !indexDir.exists();
-			indexName = indexDir.getCanonicalPath();
-			directory = FSDirectory.getDirectory( indexName, create );
-			if ( create ) {
-				IndexWriter iw = new IndexWriter( directory, new StandardAnalyzer(), create );
-				iw.close();
-			}
-		}
-		catch (IOException e) {
-			throw new HibernateException( "Unable to initialize index: " + directoryProviderName, e );
-		}
-	}
-
-	public FSDirectory getDirectory() {
-		return directory;
-	}
-
-	@Override
-	public boolean equals(Object obj) {
-		// this code is actually broken since the value change after initialize call
-		// but from a practical POV this is fine since we only call this method
-		// after initialize call
-		if ( obj == this ) return true;
-		if ( obj == null || !( obj instanceof FSDirectoryProvider ) ) return false;
-		return indexName.equals( ( (FSDirectoryProvider) obj ).indexName );
-	}
-
-	@Override
-	public int hashCode() {
-		// this code is actually broken since the value change after initialize call
-		// but from a practical POV this is fine since we only call this method
-		// after initialize call
-		int hash = 11;
-		return 37 * hash + indexName.hashCode();
-	}
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/store/FSDirectoryProvider.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/store/FSDirectoryProvider.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/store/FSDirectoryProvider.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/store/FSDirectoryProvider.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,68 @@
+//$Id: $
+package org.hibernate.search.store;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Properties;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.lucene.analysis.standard.StandardAnalyzer;
+import org.apache.lucene.index.IndexWriter;
+import org.apache.lucene.store.FSDirectory;
+import org.hibernate.HibernateException;
+import org.hibernate.search.util.DirectoryProviderHelper;
+import org.hibernate.search.SearchFactory;
+
+/**
+ * Use a Lucene FSDirectory
+ * The base directory is represented by hibernate.search.<index>.indexBase
+ * The index is created in <base directory>/<index name>
+ *
+ * @author Emmanuel Bernard
+ * @author Sylvain Vieujot
+ */
+public class FSDirectoryProvider implements DirectoryProvider<FSDirectory> {
+	private FSDirectory directory;
+	private static Log log = LogFactory.getLog( FSDirectoryProvider.class );
+	private String indexName;
+
+	public void initialize(String directoryProviderName, Properties properties, SearchFactory searchFactory) {
+		File indexDir = DirectoryProviderHelper.determineIndexDir( directoryProviderName, properties );
+		try {
+			boolean create = !indexDir.exists();
+			indexName = indexDir.getCanonicalPath();
+			directory = FSDirectory.getDirectory( indexName, create );
+			if ( create ) {
+				IndexWriter iw = new IndexWriter( directory, new StandardAnalyzer(), create );
+				iw.close();
+			}
+		}
+		catch (IOException e) {
+			throw new HibernateException( "Unable to initialize index: " + directoryProviderName, e );
+		}
+	}
+
+	public FSDirectory getDirectory() {
+		return directory;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		// this code is actually broken since the value change after initialize call
+		// but from a practical POV this is fine since we only call this method
+		// after initialize call
+		if ( obj == this ) return true;
+		if ( obj == null || !( obj instanceof FSDirectoryProvider ) ) return false;
+		return indexName.equals( ( (FSDirectoryProvider) obj ).indexName );
+	}
+
+	@Override
+	public int hashCode() {
+		// this code is actually broken since the value change after initialize call
+		// but from a practical POV this is fine since we only call this method
+		// after initialize call
+		int hash = 11;
+		return 37 * hash + indexName.hashCode();
+	}
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/store/FSMasterDirectoryProvider.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/store/FSMasterDirectoryProvider.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/store/FSMasterDirectoryProvider.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,203 +0,0 @@
-//$Id: $
-package org.hibernate.search.store;
-
-import java.util.Timer;
-import java.util.Properties;
-import java.util.TimerTask;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.locks.Lock;
-import java.io.File;
-import java.io.IOException;
-
-import org.apache.lucene.store.FSDirectory;
-import org.apache.lucene.index.IndexWriter;
-import org.apache.lucene.analysis.standard.StandardAnalyzer;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.hibernate.search.util.DirectoryProviderHelper;
-import org.hibernate.search.util.FileHelper;
-import org.hibernate.search.SearchFactory;
-import org.hibernate.HibernateException;
-
-/**
- * File based DirectoryProvider that takes care of index copy
- * The base directory is represented by hibernate.search.<index>.indexBase
- * The index is created in <base directory>/<index name>
- * The source (aka copy) directory is built from <sourceBase>/<index name>
- *
- * A copy is triggered every refresh seconds
- *
- * @author Emmanuel Bernard
- */
-//TODO rename copy?
-public class FSMasterDirectoryProvider implements DirectoryProvider<FSDirectory> {
-	private static Log log = LogFactory.getLog( FSMasterDirectoryProvider.class );
-	private FSDirectory directory;
-	private int current;
-	private String indexName;
-	private Timer timer;
-	private SearchFactory searchFactory;
-
-	public void initialize(String directoryProviderName, Properties properties, SearchFactory searchFactory) {
-		//source guessing
-		String source = DirectoryProviderHelper.getSourceDirectory( "sourceBase", "source", directoryProviderName, properties );
-		if ( source == null)
-			throw new IllegalStateException("FSMasterDirectoryProvider requires a viable source directory");
-		log.debug( "Source directory: " + source );
-		File indexDir = DirectoryProviderHelper.determineIndexDir( directoryProviderName, properties );
-		log.debug( "Index directory: " + indexDir );
-		String refreshPeriod = properties.getProperty( "refresh", "3600" );
-		long period = Long.parseLong( refreshPeriod );
-		log.debug("Refresh period " + period + " seconds");
-		period *= 1000; //per second
-		try {
-			boolean create = !indexDir.exists();
-			indexName = indexDir.getCanonicalPath();
-			if (create) {
-				log.debug( "Index directory '" + indexName + "' will be initialized");
-				indexDir.mkdir();
-			}
-			directory = FSDirectory.getDirectory( indexName, create );
-			if ( create ) {
-				IndexWriter iw = new IndexWriter( directory, new StandardAnalyzer(), create );
-				iw.close();
-			}
-
-			//copy to source
-			if ( new File( source, "current1").exists() ) {
-				current = 2;
-			}
-			else if ( new File( source, "current2").exists() ) {
-				current = 1;
-			}
-			else {
-				log.debug( "Source directory for '" + indexName + "' will be initialized");
-				current = 1;
-			}
-			String currentString = Integer.valueOf( current ).toString();
-			File subDir = new File( source, currentString );
-			FileHelper.synchronize( indexDir, subDir, true );
-			new File( source, "current1").delete();
-			new File( source, "current2").delete();
-			//TODO small hole, no file can be found here
-			new File( source, "current" + currentString).createNewFile();
-			log.debug( "Current directory: " + current);
-		}
-		catch (IOException e) {
-			throw new HibernateException( "Unable to initialize index: " + directoryProviderName, e );
-		}
-		timer = new Timer();
-		TimerTask task = new FSMasterDirectoryProvider.TriggerTask(indexName, source, this );
-		timer.scheduleAtFixedRate( task, period, period );
-		this.searchFactory = searchFactory;
-	}
-
-	public FSDirectory getDirectory() {
-		return directory;
-	}
-
-	@Override
-	public boolean equals(Object obj) {
-		// this code is actually broken since the value change after initialize call
-		// but from a practical POV this is fine since we only call this method
-		// after initialize call
-		if ( obj == this ) return true;
-		if ( obj == null || !( obj instanceof FSMasterDirectoryProvider ) ) return false;
-		return indexName.equals( ( (FSMasterDirectoryProvider) obj ).indexName );
-	}
-
-	@Override
-	public int hashCode() {
-		// this code is actually broken since the value change after initialize call
-		// but from a practical POV this is fine since we only call this method
-		// after initialize call
-		int hash = 11;
-		return 37 * hash + indexName.hashCode();
-	}
-
-	class TriggerTask extends TimerTask {
-
-		private ExecutorService executor;
-		private FSMasterDirectoryProvider.CopyDirectory copyTask;
-
-		public TriggerTask(String source, String destination, DirectoryProvider directoryProvider) {
-			executor = Executors.newSingleThreadExecutor();
-			copyTask = new FSMasterDirectoryProvider.CopyDirectory( source, destination, directoryProvider );
-		}
-
-		public void run() {
-			if (!copyTask.inProgress) {
-				executor.execute( copyTask );
-			}
-			else {
-				log.info( "Skipping directory synchronization, previous work still in progress: " + indexName);
-			}
-		}
-	}
-
-	class CopyDirectory implements Runnable {
-		private String source;
-		private String destination;
-		private volatile boolean inProgress;
-		private Lock directoryProviderLock;
-		private DirectoryProvider directoryProvider;
-
-		public CopyDirectory(String source, String destination, DirectoryProvider directoryProvider) {
-			this.source = source;
-			this.destination = destination;
-			this.directoryProvider = directoryProvider;
-		}
-
-		public void run() {
-			//TODO get rid of current and use the marker file instead?
-			long start = System.currentTimeMillis();
-			inProgress = true;
-			if (directoryProviderLock == null) {
-				directoryProviderLock = searchFactory.getLockableDirectoryProviders().get( directoryProvider );
-				directoryProvider = null;
-				searchFactory = null; //get rid of any useless link (help hot redeployment?)
-			}
-			try {
-				directoryProviderLock.lock();
-				int oldIndex = current;
-				int index = current == 1 ? 2 : 1;
-				File sourceFile = new File(source);
-
-				File destinationFile = new File(destination, Integer.valueOf(index).toString() );
-				//TODO make smart a parameter
-				try {
-					log.trace("Copying " + sourceFile + " into " + destinationFile);
-					FileHelper.synchronize( sourceFile, destinationFile, true);
-					current = index;
-				}
-				catch (IOException e) {
-					//don't change current
-					log.error( "Unable to synchronize source of " + indexName, e);
-					inProgress = false;
-					return;
-				}
-				if ( ! new File(destination, "current" + oldIndex).delete() ) {
-					log.warn( "Unable to remove previous marker file from source of " + indexName );
-				}
-				try {
-					new File(destination, "current" + index).createNewFile();
-				}
-				catch( IOException e ) {
-					log.warn( "Unable to create current marker in source of " + indexName, e );
-				}
-			}
-			finally {
-				directoryProviderLock.unlock();
-				inProgress = false;
-			}
-			log.trace( "Copy for " + indexName + " took " + (System.currentTimeMillis() - start) + " ms");
-		}
-	}
-
-	public void finalize() throws Throwable {
-		super.finalize();
-		timer.cancel();
-		//TODO find a better cycle from Hibernate core
-	}
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/store/FSMasterDirectoryProvider.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/store/FSMasterDirectoryProvider.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/store/FSMasterDirectoryProvider.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/store/FSMasterDirectoryProvider.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,203 @@
+//$Id: $
+package org.hibernate.search.store;
+
+import java.util.Timer;
+import java.util.Properties;
+import java.util.TimerTask;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.locks.Lock;
+import java.io.File;
+import java.io.IOException;
+
+import org.apache.lucene.store.FSDirectory;
+import org.apache.lucene.index.IndexWriter;
+import org.apache.lucene.analysis.standard.StandardAnalyzer;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.hibernate.search.util.DirectoryProviderHelper;
+import org.hibernate.search.util.FileHelper;
+import org.hibernate.search.SearchFactory;
+import org.hibernate.HibernateException;
+
+/**
+ * File based DirectoryProvider that takes care of index copy
+ * The base directory is represented by hibernate.search.<index>.indexBase
+ * The index is created in <base directory>/<index name>
+ * The source (aka copy) directory is built from <sourceBase>/<index name>
+ *
+ * A copy is triggered every refresh seconds
+ *
+ * @author Emmanuel Bernard
+ */
+//TODO rename copy?
+public class FSMasterDirectoryProvider implements DirectoryProvider<FSDirectory> {
+	private static Log log = LogFactory.getLog( FSMasterDirectoryProvider.class );
+	private FSDirectory directory;
+	private int current;
+	private String indexName;
+	private Timer timer;
+	private SearchFactory searchFactory;
+
+	public void initialize(String directoryProviderName, Properties properties, SearchFactory searchFactory) {
+		//source guessing
+		String source = DirectoryProviderHelper.getSourceDirectory( "sourceBase", "source", directoryProviderName, properties );
+		if ( source == null)
+			throw new IllegalStateException("FSMasterDirectoryProvider requires a viable source directory");
+		log.debug( "Source directory: " + source );
+		File indexDir = DirectoryProviderHelper.determineIndexDir( directoryProviderName, properties );
+		log.debug( "Index directory: " + indexDir );
+		String refreshPeriod = properties.getProperty( "refresh", "3600" );
+		long period = Long.parseLong( refreshPeriod );
+		log.debug("Refresh period " + period + " seconds");
+		period *= 1000; //per second
+		try {
+			boolean create = !indexDir.exists();
+			indexName = indexDir.getCanonicalPath();
+			if (create) {
+				log.debug( "Index directory '" + indexName + "' will be initialized");
+				indexDir.mkdir();
+			}
+			directory = FSDirectory.getDirectory( indexName, create );
+			if ( create ) {
+				IndexWriter iw = new IndexWriter( directory, new StandardAnalyzer(), create );
+				iw.close();
+			}
+
+			//copy to source
+			if ( new File( source, "current1").exists() ) {
+				current = 2;
+			}
+			else if ( new File( source, "current2").exists() ) {
+				current = 1;
+			}
+			else {
+				log.debug( "Source directory for '" + indexName + "' will be initialized");
+				current = 1;
+			}
+			String currentString = Integer.valueOf( current ).toString();
+			File subDir = new File( source, currentString );
+			FileHelper.synchronize( indexDir, subDir, true );
+			new File( source, "current1").delete();
+			new File( source, "current2").delete();
+			//TODO small hole, no file can be found here
+			new File( source, "current" + currentString).createNewFile();
+			log.debug( "Current directory: " + current);
+		}
+		catch (IOException e) {
+			throw new HibernateException( "Unable to initialize index: " + directoryProviderName, e );
+		}
+		timer = new Timer();
+		TimerTask task = new FSMasterDirectoryProvider.TriggerTask(indexName, source, this );
+		timer.scheduleAtFixedRate( task, period, period );
+		this.searchFactory = searchFactory;
+	}
+
+	public FSDirectory getDirectory() {
+		return directory;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		// this code is actually broken since the value change after initialize call
+		// but from a practical POV this is fine since we only call this method
+		// after initialize call
+		if ( obj == this ) return true;
+		if ( obj == null || !( obj instanceof FSMasterDirectoryProvider ) ) return false;
+		return indexName.equals( ( (FSMasterDirectoryProvider) obj ).indexName );
+	}
+
+	@Override
+	public int hashCode() {
+		// this code is actually broken since the value change after initialize call
+		// but from a practical POV this is fine since we only call this method
+		// after initialize call
+		int hash = 11;
+		return 37 * hash + indexName.hashCode();
+	}
+
+	class TriggerTask extends TimerTask {
+
+		private ExecutorService executor;
+		private FSMasterDirectoryProvider.CopyDirectory copyTask;
+
+		public TriggerTask(String source, String destination, DirectoryProvider directoryProvider) {
+			executor = Executors.newSingleThreadExecutor();
+			copyTask = new FSMasterDirectoryProvider.CopyDirectory( source, destination, directoryProvider );
+		}
+
+		public void run() {
+			if (!copyTask.inProgress) {
+				executor.execute( copyTask );
+			}
+			else {
+				log.info( "Skipping directory synchronization, previous work still in progress: " + indexName);
+			}
+		}
+	}
+
+	class CopyDirectory implements Runnable {
+		private String source;
+		private String destination;
+		private volatile boolean inProgress;
+		private Lock directoryProviderLock;
+		private DirectoryProvider directoryProvider;
+
+		public CopyDirectory(String source, String destination, DirectoryProvider directoryProvider) {
+			this.source = source;
+			this.destination = destination;
+			this.directoryProvider = directoryProvider;
+		}
+
+		public void run() {
+			//TODO get rid of current and use the marker file instead?
+			long start = System.currentTimeMillis();
+			inProgress = true;
+			if (directoryProviderLock == null) {
+				directoryProviderLock = searchFactory.getLockableDirectoryProviders().get( directoryProvider );
+				directoryProvider = null;
+				searchFactory = null; //get rid of any useless link (help hot redeployment?)
+			}
+			try {
+				directoryProviderLock.lock();
+				int oldIndex = current;
+				int index = current == 1 ? 2 : 1;
+				File sourceFile = new File(source);
+
+				File destinationFile = new File(destination, Integer.valueOf(index).toString() );
+				//TODO make smart a parameter
+				try {
+					log.trace("Copying " + sourceFile + " into " + destinationFile);
+					FileHelper.synchronize( sourceFile, destinationFile, true);
+					current = index;
+				}
+				catch (IOException e) {
+					//don't change current
+					log.error( "Unable to synchronize source of " + indexName, e);
+					inProgress = false;
+					return;
+				}
+				if ( ! new File(destination, "current" + oldIndex).delete() ) {
+					log.warn( "Unable to remove previous marker file from source of " + indexName );
+				}
+				try {
+					new File(destination, "current" + index).createNewFile();
+				}
+				catch( IOException e ) {
+					log.warn( "Unable to create current marker in source of " + indexName, e );
+				}
+			}
+			finally {
+				directoryProviderLock.unlock();
+				inProgress = false;
+			}
+			log.trace( "Copy for " + indexName + " took " + (System.currentTimeMillis() - start) + " ms");
+		}
+	}
+
+	public void finalize() throws Throwable {
+		super.finalize();
+		timer.cancel();
+		//TODO find a better cycle from Hibernate core
+	}
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/store/FSSlaveDirectoryProvider.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/store/FSSlaveDirectoryProvider.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/store/FSSlaveDirectoryProvider.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,239 +0,0 @@
-//$Id: $
-package org.hibernate.search.store;
-
-import java.util.Properties;
-import java.util.Timer;
-import java.util.TimerTask;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.io.File;
-import java.io.IOException;
-
-import org.apache.lucene.store.FSDirectory;
-import org.apache.lucene.index.IndexWriter;
-import org.apache.lucene.analysis.standard.StandardAnalyzer;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.hibernate.HibernateException;
-import org.hibernate.AssertionFailure;
-import org.hibernate.search.util.FileHelper;
-import org.hibernate.search.util.DirectoryProviderHelper;
-import org.hibernate.search.SearchFactory;
-
-/**
- * File based directory provider that takes care of geting a version of the index
- * from a given source
- * The base directory is represented by hibernate.search.<index>.indexBase
- * The index is created in <base directory>/<index name>
- * The source (aka copy) directory is built from <sourceBase>/<index name>
- *
- * A copy is triggered every refresh seconds
- *
- * @author Emmanuel Bernard
- */
-public class FSSlaveDirectoryProvider implements DirectoryProvider<FSDirectory> {
-	private static Log log = LogFactory.getLog( FSSlaveDirectoryProvider.class );
-	private FSDirectory directory1;
-	private FSDirectory directory2;
-	private int current;
-	private String indexName;
-	private Timer timer;
-
-	public void initialize(String directoryProviderName, Properties properties, SearchFactory searchFactory) {
-		//source guessing
-		String source = DirectoryProviderHelper.getSourceDirectory( "sourceBase", "source", directoryProviderName, properties );
-		if (source == null)
-			throw new IllegalStateException("FSSlaveDirectoryProvider requires a viable source directory");
-		if ( ! new File(source, "current1").exists() && ! new File(source, "current2").exists() ) {
-			throw new IllegalStateException("No current marker in source directory");
-		}
-		log.debug( "Source directory: " + source );
-		File indexDir = DirectoryProviderHelper.determineIndexDir( directoryProviderName, properties );
-		log.debug( "Index directory: " + indexDir.getPath() );
-		String refreshPeriod = properties.getProperty( "refresh", "3600" );
-		long period = Long.parseLong( refreshPeriod );
-		log.debug("Refresh period " + period + " seconds");
-		period *= 1000; //per second
-		try {
-			boolean create = !indexDir.exists();
-			indexName = indexDir.getCanonicalPath();
-			if (create) {
-				indexDir.mkdir();
-				log.debug("Initializing index directory " + indexName);
-			}
-
-			File subDir = new File( indexName, "1" );
-			create = ! subDir.exists();
-			directory1 = FSDirectory.getDirectory( subDir.getCanonicalPath(), create );
-			if ( create ) {
-				IndexWriter iw = new IndexWriter( directory1, new StandardAnalyzer(), create );
-				iw.close();
-			}
-
-			subDir = new File( indexName, "2" );
-			create = ! subDir.exists();
-			directory2 = FSDirectory.getDirectory( subDir.getCanonicalPath(), create );
-			if ( create ) {
-				IndexWriter iw = new IndexWriter( directory2, new StandardAnalyzer(), create );
-				iw.close();
-			}
-			File currentMarker = new File(indexName, "current1");
-			File current2Marker = new File(indexName, "current2");
-			if ( currentMarker.exists() ) {
-				current = 1;
-			}
-			else if ( current2Marker.exists() ) {
-				current = 2;
-			}
-			else {
-				//no default
-				log.debug( "Setting directory 1 as current");
-				current = 1;
-				File sourceFile = new File(source);
-				File destinationFile = new File(indexName, Integer.valueOf(current).toString() );
-				int sourceCurrent;
-				if ( new File(sourceFile, "current1").exists() ) {
-					sourceCurrent = 1;
-				}
-				else if ( new File(sourceFile, "current2").exists() ) {
-					sourceCurrent = 2;
-				}
-				else {
-					throw new AssertionFailure("No current file marker found in source directory: " + source);
-				}
-				try {
-					FileHelper.synchronize( new File(sourceFile, String.valueOf(sourceCurrent) ), destinationFile, true);
-				}
-				catch (IOException e) {
-					throw new HibernateException("Umable to synchonize directory: " + indexName, e);
-				}
-				if (! currentMarker.createNewFile() ) {
-					throw new HibernateException("Unable to create the directory marker file: " + indexName);
-				}
-			}
-			log.debug( "Current directory: " + current);
-		}
-		catch (IOException e) {
-			throw new HibernateException( "Unable to initialize index: " + directoryProviderName, e );
-		}
-		timer = new Timer();
-		TimerTask task = new TriggerTask(source, indexName);
-		timer.scheduleAtFixedRate( task, period, period );
-	}
-
-	public FSDirectory getDirectory() {
-		if (current == 1) {
-			return directory1;
-		}
-		else if (current == 2) {
-			return directory2;
-		}
-		else {
-			throw new AssertionFailure("Illegal current directory: " + current);
-		}
-	}
-
-	@Override
-	public boolean equals(Object obj) {
-		// this code is actually broken since the value change after initialize call
-		// but from a practical POV this is fine since we only call this method
-		// after initialize call
-		if ( obj == this ) return true;
-		if ( obj == null || !( obj instanceof FSSlaveDirectoryProvider ) ) return false;
-		return indexName.equals( ( (FSSlaveDirectoryProvider) obj ).indexName );
-	}
-
-	@Override
-	public int hashCode() {
-		// this code is actually broken since the value change after initialize call
-		// but from a practical POV this is fine since we only call this method
-		// after initialize call
-		int hash = 11;
-		return 37 * hash + indexName.hashCode();
-	}
-
-	class TriggerTask extends TimerTask {
-
-		private ExecutorService executor;
-		private CopyDirectory copyTask;
-
-		public TriggerTask(String source, String destination) {
-			executor = Executors.newSingleThreadExecutor();
-			copyTask = new CopyDirectory( source, destination  );
-		}
-
-		public void run() {
-			if (!copyTask.inProgress) {
-				executor.execute( copyTask );
-			}
-			else {
-				log.trace( "Skipping directory synchronization, previous work still in progress: " + indexName);
-			}
-		}
-	}
-
-	class CopyDirectory implements Runnable {
-		private String source;
-		private String destination;
-		private volatile boolean inProgress;
-
-		public CopyDirectory(String source, String destination) {
-			this.source = source;
-			this.destination = destination;
-		}
-
-		public void run() {
-			long start = System.currentTimeMillis();
-			try {
-				inProgress = true;
-				int oldIndex = current;
-				int index = current == 1 ? 2 : 1;
-				File sourceFile;
-				if ( new File( source, "current1" ).exists() ) {
-					sourceFile = new File(source, "1");
-				}
-				else if ( new File( source, "current2" ).exists() ) {
-					sourceFile = new File(source, "2");
-				}
-				else {
-					log.error("Unable to determine current in source directory");
-					inProgress = false;
-					return;
-				}
-
-				File destinationFile = new File(destination, Integer.valueOf(index).toString() );
-				//TODO make smart a parameter
-				try {
-					log.trace("Copying " + sourceFile + " into " + destinationFile);
-					FileHelper.synchronize( sourceFile, destinationFile, true);
-					current = index;
-				}
-				catch (IOException e) {
-					//don't change current
-					log.error( "Unable to synchronize " + indexName, e);
-					inProgress = false;
-					return;
-				}
-				if ( ! new File(indexName, "current" + oldIndex).delete() ) {
-					log.warn( "Unable to remove previous marker file in " + indexName );
-				}
-				try {
-					new File(indexName, "current" + index).createNewFile();
-				}
-				catch( IOException e ) {
-					log.warn( "Unable to create current marker file in " + indexName, e );
-				}
-			}
-			finally {
-				inProgress = false;
-			}
-			log.trace( "Copy for " + indexName + " took " + (System.currentTimeMillis() - start) + " ms");
-		}
-	}
-
-	public void finalize() throws Throwable {
-		super.finalize();
-		timer.cancel();
-		//TODO find a better cycle from Hibernate core
-	}
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/store/FSSlaveDirectoryProvider.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/store/FSSlaveDirectoryProvider.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/store/FSSlaveDirectoryProvider.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/store/FSSlaveDirectoryProvider.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,239 @@
+//$Id: $
+package org.hibernate.search.store;
+
+import java.util.Properties;
+import java.util.Timer;
+import java.util.TimerTask;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.io.File;
+import java.io.IOException;
+
+import org.apache.lucene.store.FSDirectory;
+import org.apache.lucene.index.IndexWriter;
+import org.apache.lucene.analysis.standard.StandardAnalyzer;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.hibernate.HibernateException;
+import org.hibernate.AssertionFailure;
+import org.hibernate.search.util.FileHelper;
+import org.hibernate.search.util.DirectoryProviderHelper;
+import org.hibernate.search.SearchFactory;
+
+/**
+ * File based directory provider that takes care of geting a version of the index
+ * from a given source
+ * The base directory is represented by hibernate.search.<index>.indexBase
+ * The index is created in <base directory>/<index name>
+ * The source (aka copy) directory is built from <sourceBase>/<index name>
+ *
+ * A copy is triggered every refresh seconds
+ *
+ * @author Emmanuel Bernard
+ */
+public class FSSlaveDirectoryProvider implements DirectoryProvider<FSDirectory> {
+	private static Log log = LogFactory.getLog( FSSlaveDirectoryProvider.class );
+	private FSDirectory directory1;
+	private FSDirectory directory2;
+	private int current;
+	private String indexName;
+	private Timer timer;
+
+	public void initialize(String directoryProviderName, Properties properties, SearchFactory searchFactory) {
+		//source guessing
+		String source = DirectoryProviderHelper.getSourceDirectory( "sourceBase", "source", directoryProviderName, properties );
+		if (source == null)
+			throw new IllegalStateException("FSSlaveDirectoryProvider requires a viable source directory");
+		if ( ! new File(source, "current1").exists() && ! new File(source, "current2").exists() ) {
+			throw new IllegalStateException("No current marker in source directory");
+		}
+		log.debug( "Source directory: " + source );
+		File indexDir = DirectoryProviderHelper.determineIndexDir( directoryProviderName, properties );
+		log.debug( "Index directory: " + indexDir.getPath() );
+		String refreshPeriod = properties.getProperty( "refresh", "3600" );
+		long period = Long.parseLong( refreshPeriod );
+		log.debug("Refresh period " + period + " seconds");
+		period *= 1000; //per second
+		try {
+			boolean create = !indexDir.exists();
+			indexName = indexDir.getCanonicalPath();
+			if (create) {
+				indexDir.mkdir();
+				log.debug("Initializing index directory " + indexName);
+			}
+
+			File subDir = new File( indexName, "1" );
+			create = ! subDir.exists();
+			directory1 = FSDirectory.getDirectory( subDir.getCanonicalPath(), create );
+			if ( create ) {
+				IndexWriter iw = new IndexWriter( directory1, new StandardAnalyzer(), create );
+				iw.close();
+			}
+
+			subDir = new File( indexName, "2" );
+			create = ! subDir.exists();
+			directory2 = FSDirectory.getDirectory( subDir.getCanonicalPath(), create );
+			if ( create ) {
+				IndexWriter iw = new IndexWriter( directory2, new StandardAnalyzer(), create );
+				iw.close();
+			}
+			File currentMarker = new File(indexName, "current1");
+			File current2Marker = new File(indexName, "current2");
+			if ( currentMarker.exists() ) {
+				current = 1;
+			}
+			else if ( current2Marker.exists() ) {
+				current = 2;
+			}
+			else {
+				//no default
+				log.debug( "Setting directory 1 as current");
+				current = 1;
+				File sourceFile = new File(source);
+				File destinationFile = new File(indexName, Integer.valueOf(current).toString() );
+				int sourceCurrent;
+				if ( new File(sourceFile, "current1").exists() ) {
+					sourceCurrent = 1;
+				}
+				else if ( new File(sourceFile, "current2").exists() ) {
+					sourceCurrent = 2;
+				}
+				else {
+					throw new AssertionFailure("No current file marker found in source directory: " + source);
+				}
+				try {
+					FileHelper.synchronize( new File(sourceFile, String.valueOf(sourceCurrent) ), destinationFile, true);
+				}
+				catch (IOException e) {
+					throw new HibernateException("Umable to synchonize directory: " + indexName, e);
+				}
+				if (! currentMarker.createNewFile() ) {
+					throw new HibernateException("Unable to create the directory marker file: " + indexName);
+				}
+			}
+			log.debug( "Current directory: " + current);
+		}
+		catch (IOException e) {
+			throw new HibernateException( "Unable to initialize index: " + directoryProviderName, e );
+		}
+		timer = new Timer();
+		TimerTask task = new TriggerTask(source, indexName);
+		timer.scheduleAtFixedRate( task, period, period );
+	}
+
+	public FSDirectory getDirectory() {
+		if (current == 1) {
+			return directory1;
+		}
+		else if (current == 2) {
+			return directory2;
+		}
+		else {
+			throw new AssertionFailure("Illegal current directory: " + current);
+		}
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		// this code is actually broken since the value change after initialize call
+		// but from a practical POV this is fine since we only call this method
+		// after initialize call
+		if ( obj == this ) return true;
+		if ( obj == null || !( obj instanceof FSSlaveDirectoryProvider ) ) return false;
+		return indexName.equals( ( (FSSlaveDirectoryProvider) obj ).indexName );
+	}
+
+	@Override
+	public int hashCode() {
+		// this code is actually broken since the value change after initialize call
+		// but from a practical POV this is fine since we only call this method
+		// after initialize call
+		int hash = 11;
+		return 37 * hash + indexName.hashCode();
+	}
+
+	class TriggerTask extends TimerTask {
+
+		private ExecutorService executor;
+		private CopyDirectory copyTask;
+
+		public TriggerTask(String source, String destination) {
+			executor = Executors.newSingleThreadExecutor();
+			copyTask = new CopyDirectory( source, destination  );
+		}
+
+		public void run() {
+			if (!copyTask.inProgress) {
+				executor.execute( copyTask );
+			}
+			else {
+				log.trace( "Skipping directory synchronization, previous work still in progress: " + indexName);
+			}
+		}
+	}
+
+	class CopyDirectory implements Runnable {
+		private String source;
+		private String destination;
+		private volatile boolean inProgress;
+
+		public CopyDirectory(String source, String destination) {
+			this.source = source;
+			this.destination = destination;
+		}
+
+		public void run() {
+			long start = System.currentTimeMillis();
+			try {
+				inProgress = true;
+				int oldIndex = current;
+				int index = current == 1 ? 2 : 1;
+				File sourceFile;
+				if ( new File( source, "current1" ).exists() ) {
+					sourceFile = new File(source, "1");
+				}
+				else if ( new File( source, "current2" ).exists() ) {
+					sourceFile = new File(source, "2");
+				}
+				else {
+					log.error("Unable to determine current in source directory");
+					inProgress = false;
+					return;
+				}
+
+				File destinationFile = new File(destination, Integer.valueOf(index).toString() );
+				//TODO make smart a parameter
+				try {
+					log.trace("Copying " + sourceFile + " into " + destinationFile);
+					FileHelper.synchronize( sourceFile, destinationFile, true);
+					current = index;
+				}
+				catch (IOException e) {
+					//don't change current
+					log.error( "Unable to synchronize " + indexName, e);
+					inProgress = false;
+					return;
+				}
+				if ( ! new File(indexName, "current" + oldIndex).delete() ) {
+					log.warn( "Unable to remove previous marker file in " + indexName );
+				}
+				try {
+					new File(indexName, "current" + index).createNewFile();
+				}
+				catch( IOException e ) {
+					log.warn( "Unable to create current marker file in " + indexName, e );
+				}
+			}
+			finally {
+				inProgress = false;
+			}
+			log.trace( "Copy for " + indexName + " took " + (System.currentTimeMillis() - start) + " ms");
+		}
+	}
+
+	public void finalize() throws Throwable {
+		super.finalize();
+		timer.cancel();
+		//TODO find a better cycle from Hibernate core
+	}
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/store/RAMDirectoryProvider.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/store/RAMDirectoryProvider.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/store/RAMDirectoryProvider.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,59 +0,0 @@
-//$Id: $
-package org.hibernate.search.store;
-
-import java.io.IOException;
-import java.util.Properties;
-
-import org.apache.lucene.analysis.standard.StandardAnalyzer;
-import org.apache.lucene.index.IndexWriter;
-import org.apache.lucene.store.RAMDirectory;
-import org.hibernate.HibernateException;
-import org.hibernate.search.SearchFactory;
-
-/**
- * Use a Lucene RAMDirectory
- *
- * @author Emmanuel Bernard
- * @author Sylvain Vieujot
- */
-public class RAMDirectoryProvider implements DirectoryProvider<RAMDirectory> {
-
-	private RAMDirectory directory;
-	private String indexName;
-
-	public void initialize(String directoryProviderName, Properties properties, SearchFactory searchFactory) {
-		indexName = directoryProviderName;
-		directory = new RAMDirectory();
-		try {
-			IndexWriter iw = new IndexWriter( directory, new StandardAnalyzer(), true );
-			iw.close();
-		}
-		catch (IOException e) {
-			throw new HibernateException( "Unable to initialize index: " + indexName, e );
-		}
-	}
-
-	public RAMDirectory getDirectory() {
-		return directory;
-	}
-
-	@Override
-	public boolean equals(Object obj) {
-		// this code is actually broken since the value change after initialize call
-		// but from a practical POV this is fine since we only call this method
-		// after initialize call
-		if ( obj == this ) return true;
-		if ( obj == null || !( obj instanceof RAMDirectoryProvider ) ) return false;
-		return indexName.equals( ( (RAMDirectoryProvider) obj ).indexName );
-	}
-
-	@Override
-	public int hashCode() {
-		// this code is actually broken since the value change after initialize call
-		// but from a practical POV this is fine since we only call this method
-		// after initialize call
-		int hash = 7;
-		return 29 * hash + indexName.hashCode();
-	}
-
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/store/RAMDirectoryProvider.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/store/RAMDirectoryProvider.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/store/RAMDirectoryProvider.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/store/RAMDirectoryProvider.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,59 @@
+//$Id: $
+package org.hibernate.search.store;
+
+import java.io.IOException;
+import java.util.Properties;
+
+import org.apache.lucene.analysis.standard.StandardAnalyzer;
+import org.apache.lucene.index.IndexWriter;
+import org.apache.lucene.store.RAMDirectory;
+import org.hibernate.HibernateException;
+import org.hibernate.search.SearchFactory;
+
+/**
+ * Use a Lucene RAMDirectory
+ *
+ * @author Emmanuel Bernard
+ * @author Sylvain Vieujot
+ */
+public class RAMDirectoryProvider implements DirectoryProvider<RAMDirectory> {
+
+	private RAMDirectory directory;
+	private String indexName;
+
+	public void initialize(String directoryProviderName, Properties properties, SearchFactory searchFactory) {
+		indexName = directoryProviderName;
+		directory = new RAMDirectory();
+		try {
+			IndexWriter iw = new IndexWriter( directory, new StandardAnalyzer(), true );
+			iw.close();
+		}
+		catch (IOException e) {
+			throw new HibernateException( "Unable to initialize index: " + indexName, e );
+		}
+	}
+
+	public RAMDirectory getDirectory() {
+		return directory;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		// this code is actually broken since the value change after initialize call
+		// but from a practical POV this is fine since we only call this method
+		// after initialize call
+		if ( obj == this ) return true;
+		if ( obj == null || !( obj instanceof RAMDirectoryProvider ) ) return false;
+		return indexName.equals( ( (RAMDirectoryProvider) obj ).indexName );
+	}
+
+	@Override
+	public int hashCode() {
+		// this code is actually broken since the value change after initialize call
+		// but from a practical POV this is fine since we only call this method
+		// after initialize call
+		int hash = 7;
+		return 29 * hash + indexName.hashCode();
+	}
+
+}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/util (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/util)

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/util/BinderHelper.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/util/BinderHelper.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/util/BinderHelper.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,23 +0,0 @@
-//$Id: $
-package org.hibernate.search.util;
-
-import org.hibernate.annotations.common.reflection.XMember;
-import org.hibernate.util.StringHelper;
-
-/**
- * @author Emmanuel Bernard
- */
-public abstract class BinderHelper {
-
-	private BinderHelper() {
-	}
-
-	/**
-	 * Get attribute name out of member unless overriden by <code>name</code>
-	 */
-	public static String getAttributeName(XMember member, String name) {
-		return StringHelper.isNotEmpty( name ) ?
-				name :
-				member.getName(); //explicit field name
-	}
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/util/BinderHelper.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/util/BinderHelper.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/util/BinderHelper.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/util/BinderHelper.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,23 @@
+//$Id: $
+package org.hibernate.search.util;
+
+import org.hibernate.annotations.common.reflection.XMember;
+import org.hibernate.util.StringHelper;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public abstract class BinderHelper {
+
+	private BinderHelper() {
+	}
+
+	/**
+	 * Get attribute name out of member unless overriden by <code>name</code>
+	 */
+	public static String getAttributeName(XMember member, String name) {
+		return StringHelper.isNotEmpty( name ) ?
+				name :
+				member.getName(); //explicit field name
+	}
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/util/ContextHelper.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/util/ContextHelper.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/util/ContextHelper.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,34 +0,0 @@
-//$Id: $
-package org.hibernate.search.util;
-
-import org.hibernate.HibernateException;
-import org.hibernate.Session;
-import org.hibernate.engine.SessionImplementor;
-import org.hibernate.event.PostInsertEventListener;
-import org.hibernate.search.event.FullTextIndexEventListener;
-import org.hibernate.search.SearchFactory;
-
-/**
- * @author Emmanuel Bernard
- */
-public abstract class ContextHelper {
-
-	public static SearchFactory getSearchFactory(Session session) {
-		return getSearchFactoryBySFI( (SessionImplementor) session );
-	}
-
-	
-	public static SearchFactory getSearchFactoryBySFI(SessionImplementor session) {
-		PostInsertEventListener[] listeners = session.getListeners().getPostInsertEventListeners();
-		FullTextIndexEventListener listener = null;
-		//FIXME this sucks since we mandante the event listener use
-		for ( PostInsertEventListener candidate : listeners ) {
-			if ( candidate instanceof FullTextIndexEventListener ) {
-				listener = (FullTextIndexEventListener) candidate;
-				break;
-			}
-		}
-		if ( listener == null ) throw new HibernateException( "Lucene event listener not initialized" );
-		return listener.getSearchFactory();
-	}
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/util/ContextHelper.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/util/ContextHelper.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/util/ContextHelper.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/util/ContextHelper.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,34 @@
+//$Id: $
+package org.hibernate.search.util;
+
+import org.hibernate.HibernateException;
+import org.hibernate.Session;
+import org.hibernate.engine.SessionImplementor;
+import org.hibernate.event.PostInsertEventListener;
+import org.hibernate.search.event.FullTextIndexEventListener;
+import org.hibernate.search.SearchFactory;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public abstract class ContextHelper {
+
+	public static SearchFactory getSearchFactory(Session session) {
+		return getSearchFactoryBySFI( (SessionImplementor) session );
+	}
+
+	
+	public static SearchFactory getSearchFactoryBySFI(SessionImplementor session) {
+		PostInsertEventListener[] listeners = session.getListeners().getPostInsertEventListeners();
+		FullTextIndexEventListener listener = null;
+		//FIXME this sucks since we mandante the event listener use
+		for ( PostInsertEventListener candidate : listeners ) {
+			if ( candidate instanceof FullTextIndexEventListener ) {
+				listener = (FullTextIndexEventListener) candidate;
+				break;
+			}
+		}
+		if ( listener == null ) throw new HibernateException( "Lucene event listener not initialized" );
+		return listener.getSearchFactory();
+	}
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/util/DirectoryProviderHelper.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/util/DirectoryProviderHelper.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/util/DirectoryProviderHelper.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,80 +0,0 @@
-//$Id: $
-package org.hibernate.search.util;
-
-import java.util.Properties;
-import java.io.File;
-import java.io.IOException;
-import java.text.MessageFormat;
-
-import org.hibernate.HibernateException;
-import org.hibernate.AssertionFailure;
-import org.hibernate.search.SearchException;
-import org.hibernate.annotations.common.util.StringHelper;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * @author Emmanuel Bernard
- */
-public class DirectoryProviderHelper {
-	private static Log log = LogFactory.getLog( DirectoryProviderHelper.class );
-	/**
-	 * Build a directory name out of a root and relative path, guessing the significant part
-	 * and checking for the file availability
-	 * 
-	 */
-	public static String getSourceDirectory(String rootPropertyName, String relativePropertyName,
-											String directoryProviderName, Properties properties) {
-		//TODO check that it's a directory
-		String root = properties.getProperty( rootPropertyName );
-		String relative = properties.getProperty( relativePropertyName );
-		if ( log.isTraceEnabled() ) {
-			log.trace(
-					"Guess source directory from " + rootPropertyName + " " + root != null ? root : "<null>"
-							+ " and " + relativePropertyName + " " + relative != null ? relative : "<null>"
-			);
-		}
-		if (relative == null) relative = directoryProviderName;
-		if ( StringHelper.isEmpty( root ) ) {
-			log.debug( "No root directory, go with relative " + relative );
-			File sourceFile = new File(relative);
-			if ( ! sourceFile.exists() ) {
-				throw new HibernateException("Unable to read source directory: " + relative);
-			}
-			//else keep source as it
-		}
-		else {
-			File rootDir = new File(root);
-			if ( rootDir.exists() ) {
-				File sourceFile = new File(root, relative);
-				if (! sourceFile.exists() ) sourceFile.mkdir();
-				log.debug( "Get directory from root + relative");
-				try {
-					relative = sourceFile.getCanonicalPath();
-				}
-				catch (IOException e) {
-					throw new AssertionFailure("Unable to get canonical path: " + root + " + " + relative);
-				}
-			}
-			else {
-				throw new SearchException(rootPropertyName + " does not exist");
-			}
-		}
-		return relative;
-	}
-
-	public static File determineIndexDir(String directoryProviderName, Properties properties) {
-		String indexBase = properties.getProperty( "indexBase", "." );
-		File indexDir = new File( indexBase );
-		if ( !( indexDir.exists() && indexDir.isDirectory() ) ) {
-			//TODO create the directory?
-			throw new HibernateException( MessageFormat.format( "Index directory does not exists: {0}", indexBase ) );
-		}
-		if ( !indexDir.canWrite() ) {
-			throw new HibernateException( "Cannot write into index directory: " + indexBase );
-		}
-
-		indexDir = new File( indexDir, directoryProviderName );
-		return indexDir;
-	}
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/util/DirectoryProviderHelper.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/util/DirectoryProviderHelper.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/util/DirectoryProviderHelper.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/util/DirectoryProviderHelper.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,80 @@
+//$Id: $
+package org.hibernate.search.util;
+
+import java.util.Properties;
+import java.io.File;
+import java.io.IOException;
+import java.text.MessageFormat;
+
+import org.hibernate.HibernateException;
+import org.hibernate.AssertionFailure;
+import org.hibernate.search.SearchException;
+import org.hibernate.annotations.common.util.StringHelper;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class DirectoryProviderHelper {
+	private static Log log = LogFactory.getLog( DirectoryProviderHelper.class );
+	/**
+	 * Build a directory name out of a root and relative path, guessing the significant part
+	 * and checking for the file availability
+	 * 
+	 */
+	public static String getSourceDirectory(String rootPropertyName, String relativePropertyName,
+											String directoryProviderName, Properties properties) {
+		//TODO check that it's a directory
+		String root = properties.getProperty( rootPropertyName );
+		String relative = properties.getProperty( relativePropertyName );
+		if ( log.isTraceEnabled() ) {
+			log.trace(
+					"Guess source directory from " + rootPropertyName + " " + root != null ? root : "<null>"
+							+ " and " + relativePropertyName + " " + relative != null ? relative : "<null>"
+			);
+		}
+		if (relative == null) relative = directoryProviderName;
+		if ( StringHelper.isEmpty( root ) ) {
+			log.debug( "No root directory, go with relative " + relative );
+			File sourceFile = new File(relative);
+			if ( ! sourceFile.exists() ) {
+				throw new HibernateException("Unable to read source directory: " + relative);
+			}
+			//else keep source as it
+		}
+		else {
+			File rootDir = new File(root);
+			if ( rootDir.exists() ) {
+				File sourceFile = new File(root, relative);
+				if (! sourceFile.exists() ) sourceFile.mkdir();
+				log.debug( "Get directory from root + relative");
+				try {
+					relative = sourceFile.getCanonicalPath();
+				}
+				catch (IOException e) {
+					throw new AssertionFailure("Unable to get canonical path: " + root + " + " + relative);
+				}
+			}
+			else {
+				throw new SearchException(rootPropertyName + " does not exist");
+			}
+		}
+		return relative;
+	}
+
+	public static File determineIndexDir(String directoryProviderName, Properties properties) {
+		String indexBase = properties.getProperty( "indexBase", "." );
+		File indexDir = new File( indexBase );
+		if ( !( indexDir.exists() && indexDir.isDirectory() ) ) {
+			//TODO create the directory?
+			throw new HibernateException( MessageFormat.format( "Index directory does not exists: {0}", indexBase ) );
+		}
+		if ( !indexDir.canWrite() ) {
+			throw new HibernateException( "Cannot write into index directory: " + indexBase );
+		}
+
+		indexDir = new File( indexDir, directoryProviderName );
+		return indexDir;
+	}
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/util/FileHelper.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/util/FileHelper.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/util/FileHelper.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,86 +0,0 @@
-//$Id: $
-package org.hibernate.search.util;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.util.Set;
-import java.util.HashSet;
-import java.util.Arrays;
-import java.nio.channels.FileChannel;
-
-/**
- * @author Emmanuel Bernard
- */
-public abstract class FileHelper {
-	private static final int FAT_PRECISION = 2000;
-
-	public static void synchronize(File source, File destination, boolean smart) throws IOException {
-		if ( source.isDirectory() ) {
-			if ( ! destination.exists() ) {
-				destination.mkdirs();
-			}
-			else if ( ! destination.isDirectory() ) {
-				throw new IOException("Source and Destination not of the same type:"
-						+ source.getCanonicalPath() + " , " + destination.getCanonicalPath() );
-			}
-			String[] sources = source.list();
-			Set<String> srcNames = new HashSet<String>( Arrays.asList( sources ) );
-			String[] dests = destination.list();
-
-			//delete files not present in source
-			for (String fileName : dests) {
-				if ( ! srcNames.contains( fileName ) ) {
-					delete( new File(destination, fileName) );
-				}
-			}
-			//copy each file from source
-			for (String fileName : sources) {
-				File srcFile = new File(source, fileName);
-				File destFile = new File(destination, fileName);
-				synchronize( srcFile, destFile, smart );
-			}
-		}
-		else {
-			if ( destination.exists() && destination.isDirectory() ) {
-				delete( destination );
-			}
-			if ( destination.exists() ) {
-				long sts = source.lastModified() / FAT_PRECISION;
-				long dts = destination.lastModified() / FAT_PRECISION;
-				//do not copy if smart and same timestamp and same length
-				if ( !smart || sts == 0 || sts != dts || source.length() != destination.length() ) {
-					copyFile(source, destination);
-				}
-			}
-			else {
-				copyFile(source, destination);
-			}
-		}
-	}
-
-	private static void copyFile(File srcFile, File destFile) throws IOException {
-		FileInputStream is = null;
-		FileOutputStream os = null;
-		try {
-			is = new FileInputStream(srcFile);
-			FileChannel iChannel = is.getChannel();
-			os = new FileOutputStream( destFile, false );
-			FileChannel oChannel = os.getChannel();
-			oChannel.transferFrom( iChannel, 0, srcFile.length() );
-		}
-		finally {
-			if (is != null) is.close();
-			if (os != null) os.close();
-		}
-		destFile.setLastModified( srcFile.lastModified() );
-	}
-
-	public static void delete(File file) {
-		if ( file.isDirectory() ) {
-			for ( File subFile : file.listFiles() ) delete( subFile );
-		}
-		if ( file.exists() ) file.delete();
-	}
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/util/FileHelper.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/util/FileHelper.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/util/FileHelper.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/util/FileHelper.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,86 @@
+//$Id: $
+package org.hibernate.search.util;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.util.Set;
+import java.util.HashSet;
+import java.util.Arrays;
+import java.nio.channels.FileChannel;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public abstract class FileHelper {
+	private static final int FAT_PRECISION = 2000;
+
+	public static void synchronize(File source, File destination, boolean smart) throws IOException {
+		if ( source.isDirectory() ) {
+			if ( ! destination.exists() ) {
+				destination.mkdirs();
+			}
+			else if ( ! destination.isDirectory() ) {
+				throw new IOException("Source and Destination not of the same type:"
+						+ source.getCanonicalPath() + " , " + destination.getCanonicalPath() );
+			}
+			String[] sources = source.list();
+			Set<String> srcNames = new HashSet<String>( Arrays.asList( sources ) );
+			String[] dests = destination.list();
+
+			//delete files not present in source
+			for (String fileName : dests) {
+				if ( ! srcNames.contains( fileName ) ) {
+					delete( new File(destination, fileName) );
+				}
+			}
+			//copy each file from source
+			for (String fileName : sources) {
+				File srcFile = new File(source, fileName);
+				File destFile = new File(destination, fileName);
+				synchronize( srcFile, destFile, smart );
+			}
+		}
+		else {
+			if ( destination.exists() && destination.isDirectory() ) {
+				delete( destination );
+			}
+			if ( destination.exists() ) {
+				long sts = source.lastModified() / FAT_PRECISION;
+				long dts = destination.lastModified() / FAT_PRECISION;
+				//do not copy if smart and same timestamp and same length
+				if ( !smart || sts == 0 || sts != dts || source.length() != destination.length() ) {
+					copyFile(source, destination);
+				}
+			}
+			else {
+				copyFile(source, destination);
+			}
+		}
+	}
+
+	private static void copyFile(File srcFile, File destFile) throws IOException {
+		FileInputStream is = null;
+		FileOutputStream os = null;
+		try {
+			is = new FileInputStream(srcFile);
+			FileChannel iChannel = is.getChannel();
+			os = new FileOutputStream( destFile, false );
+			FileChannel oChannel = os.getChannel();
+			oChannel.transferFrom( iChannel, 0, srcFile.length() );
+		}
+		finally {
+			if (is != null) is.close();
+			if (os != null) os.close();
+		}
+		destFile.setLastModified( srcFile.lastModified() );
+	}
+
+	public static void delete(File file) {
+		if ( file.isDirectory() ) {
+			for ( File subFile : file.listFiles() ) delete( subFile );
+		}
+		if ( file.exists() ) file.delete();
+	}
+}

Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/util/WeakIdentityHashMap.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/util/WeakIdentityHashMap.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/util/WeakIdentityHashMap.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,1019 +0,0 @@
-//$Id: $
-/*
-  * JBoss, Home of Professional Open Source
-  * Copyright 2005, JBoss Inc., and individual contributors as indicated
-  * by the @authors tag. See the copyright.txt in the distribution for a
-  * full listing of individual contributors.
-  *
-  * This is free software; you can redistribute it and/or modify it
-  * under the terms of the GNU Lesser General Public License as
-  * published by the Free Software Foundation; either version 2.1 of
-  * the License, or (at your option) any later version.
-  *
-  * This software is distributed in the hope that it will be useful,
-  * but WITHOUT ANY WARRANTY; without even the implied warranty of
-  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-  * Lesser General Public License for more details.
-  *
-  * You should have received a copy of the GNU Lesser General Public
-  * License along with this software; if not, write to the Free
-  * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-  * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-  */
-
-package org.hibernate.search.util;
-
-
-import java.lang.ref.ReferenceQueue;
-import java.lang.ref.WeakReference;
-import java.util.AbstractCollection;
-import java.util.AbstractSet;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.ConcurrentModificationException;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.NoSuchElementException;
-import java.util.Set;
-
-/**
- * A hashtable-based <tt>Map</tt> implementation with <em>weak keys</em> and
- * using reference-equality in place of object-equality when comparing keys
- * (and values).  In an <tt>WeakIdentityHashMap</tt>, two keys <tt>k1</tt> and
- * <tt>k2</tt> are considered equal if and only if <tt>(k1==k2)</tt>.
- * An entry in a <tt>WeakIdentityHashMap</tt> will automatically be removed when
- * its key is no longer in ordinary use.  More precisely, the presence of a
- * mapping for a given key will not prevent the key from being discarded by the
- * garbage collector, that is, made finalizable, finalized, and then reclaimed.
- * When a key has been discarded its entry is effectively removed from the map.
- * <p/>
- * <p>Based on java.util.WeakHashMap</p>
- * <p>Based on org.jboss.common.collection.WeakIdentityHashMap</p>
- *
- * @author Dawid Kurzyniec
- * @author <a href="mailto:kabir.khan at jboss.org">Kabir Khan</a>
- * @author Emmanuel Bernard
-
- * @see		java.util.IdentityHashMap
- * @see		java.util.WeakHashMap
- */
-public class WeakIdentityHashMap<K,V> /*extends AbstractMap*/ implements Map<K,V> {
-
-	/**
-	 * The default initial capacity -- MUST be a power of two.
-	 */
-	private static final int DEFAULT_INITIAL_CAPACITY = 16;
-
-	/**
-	 * The maximum capacity, used if a higher value is implicitly specified
-	 * by either of the constructors with arguments.
-	 * MUST be a power of two <= 1<<30.
-	 */
-	private static final int MAXIMUM_CAPACITY = 1 << 30;
-
-	/**
-	 * The load fast used when none specified in constructor.
-	 */
-	private static final float DEFAULT_LOAD_FACTOR = 0.75f;
-
-	/**
-	 * The table, resized as necessary. Length MUST Always be a power of two.
-	 */
-	private Entry<K,V>[] table;
-
-	/**
-	 * The number of key-value mappings contained in this weak hash map.
-	 */
-	private int size;
-
-	/**
-	 * The next size value at which to resize (capacity * load factor).
-	 */
-	private int threshold;
-
-	/**
-	 * The load factor for the hash table.
-	 */
-	private final float loadFactor;
-
-	/**
-	 * Reference queue for cleared WeakEntries
-	 */
-	private final ReferenceQueue queue = new ReferenceQueue();
-
-	/**
-	 * The number of times this HashMap has been structurally modified
-	 * Structural modifications are those that change the number of mappings in
-	 * the HashMap or otherwise modify its internal structure (e.g.,
-	 * rehash).  This field is used to make iterators on Collection-views of
-	 * the HashMap fail-fast.  (See ConcurrentModificationException).
-	 */
-	private volatile int modCount;
-
-	/**
-	 * Each of these fields are initialized to contain an instance of the
-	 * appropriate view the first time this view is requested.  The views are
-	 * stateless, so there's no reason to create more than one of each.
-	 */
-	transient volatile Set keySet = null;
-	transient volatile Collection values = null;
-
-	/**
-	 * Constructs a new, empty <tt>WeakIdentityHashMap</tt> with the given
-	 * initial capacity and the given load factor.
-	 *
-	 * @param initialCapacity The initial capacity of the
-	 *                        <tt>WeakIdentityHashMap</tt>
-	 * @param loadFactor	  The load factor of the
-	 *                        <tt>WeakIdentityHashMap</tt>
-	 * @throws IllegalArgumentException If the initial capacity is negative,
-	 *                                  or if the load factor is nonpositive.
-	 */
-	public WeakIdentityHashMap(int initialCapacity, float loadFactor) {
-		if ( initialCapacity < 0 )
-			throw new IllegalArgumentException( "Illegal Initial Capacity: " +
-					initialCapacity );
-		if ( initialCapacity > MAXIMUM_CAPACITY )
-			initialCapacity = MAXIMUM_CAPACITY;
-
-		if ( loadFactor <= 0 || Float.isNaN( loadFactor ) )
-			throw new IllegalArgumentException( "Illegal Load factor: " +
-					loadFactor );
-		int capacity = 1;
-		while ( capacity < initialCapacity )
-			capacity <<= 1;
-		table = new Entry[capacity];
-		this.loadFactor = loadFactor;
-		threshold = (int) ( capacity * loadFactor );
-	}
-
-	/**
-	 * Constructs a new, empty <tt>WeakIdentityHashMap</tt> with the given
-	 * initial capacity and the default load factor, which is <tt>0.75</tt>.
-	 *
-	 * @param initialCapacity The initial capacity of the
-	 *                        <tt>WeakIdentityHashMap</tt>
-	 * @throws IllegalArgumentException If the initial capacity is negative.
-	 */
-	public WeakIdentityHashMap(int initialCapacity) {
-		this( initialCapacity, DEFAULT_LOAD_FACTOR );
-	}
-
-	/**
-	 * Constructs a new, empty <tt>WeakIdentityHashMap</tt> with the default
-	 * initial capacity (16) and the default load factor (0.75).
-	 */
-	public WeakIdentityHashMap() {
-		this.loadFactor = DEFAULT_LOAD_FACTOR;
-		threshold = (int) ( DEFAULT_INITIAL_CAPACITY );
-		table = new Entry[DEFAULT_INITIAL_CAPACITY];
-	}
-
-	/**
-	 * Constructs a new <tt>WeakIdentityHashMap</tt> with the same mappings as
-	 * the specified <tt>Map</tt>.  The <tt>WeakIdentityHashMap</tt> is created
-	 * with default load factor, which is <tt>0.75</tt> and an initial capacity
-	 * sufficient to hold the mappings in the specified <tt>Map</tt>.
-	 *
-	 * @param t the map whose mappings are to be placed in this map.
-	 * @throws NullPointerException if the specified map is null.
-	 */
-	public WeakIdentityHashMap(Map t) {
-		this( Math.max( (int) ( t.size() / DEFAULT_LOAD_FACTOR ) + 1, 16 ),
-				DEFAULT_LOAD_FACTOR );
-		putAll( t );
-	}
-
-	// internal utilities
-
-	/**
-	 * Value representing null keys inside tables.
-	 */
-	private static final Object NULL_KEY = new Object();
-
-	/**
-	 * Use NULL_KEY for key if it is null.
-	 */
-	private static <T> T maskNull(T key) {
-		return ( key == null ?
-				(T) NULL_KEY : //i don't think there is a better way
-				key );
-	}
-
-	/**
-	 * Return internal representation of null key back to caller as null
-	 */
-	private static <T> T unmaskNull(T key) {
-		return ( key == NULL_KEY ?
-				null :
-				key );
-	}
-
-	/**
-	 * Return a hash code for non-null Object x.
-	 */
-	int hash(Object x) {
-		int h = System.identityHashCode( x );
-		return h - ( h << 7 );  // that is,, -127 * h
-	}
-
-	/**
-	 * Return index for hash code h.
-	 */
-	static int indexFor(int h, int length) {
-		return h & ( length - 1 );
-	}
-
-	/**
-	 * Expunge stale entries from the table.
-	 */
-	private void expungeStaleEntries() {
-		Object r;
-		while ( ( r = queue.poll() ) != null ) {
-			Entry e = (Entry) r;
-			int h = e.hash;
-			int i = indexFor( h, table.length );
-
-			Entry prev = table[i];
-			Entry p = prev;
-			while ( p != null ) {
-				Entry next = p.next;
-				if ( p == e ) {
-					if ( prev == e )
-						table[i] = next;
-					else
-						prev.next = next;
-					e.next = null;  // Help GC
-					e.value = null; //  "   "
-					size--;
-					break;
-				}
-				prev = p;
-				p = next;
-			}
-		}
-	}
-
-	/**
-	 * Return the table after first expunging stale entries
-	 */
-	private Entry<K,V>[] getTable() {
-		expungeStaleEntries();
-		return table;
-	}
-
-	/**
-	 * Returns the number of key-value mappings in this map.
-	 * This result is a snapshot, and may not reflect unprocessed
-	 * entries that will be removed before next attempted access
-	 * because they are no longer referenced.
-	 */
-	public int size() {
-		if ( size == 0 )
-			return 0;
-		expungeStaleEntries();
-		return size;
-	}
-
-	/**
-	 * Returns <tt>true</tt> if this map contains no key-value mappings.
-	 * This result is a snapshot, and may not reflect unprocessed
-	 * entries that will be removed before next attempted access
-	 * because they are no longer referenced.
-	 */
-	public boolean isEmpty() {
-		return size() == 0;
-	}
-
-	/**
-	 * Returns the value to which the specified key is mapped in this weak
-	 * hash map, or <tt>null</tt> if the map contains no mapping for
-	 * this key.  A return value of <tt>null</tt> does not <i>necessarily</i>
-	 * indicate that the map contains no mapping for the key; it is also
-	 * possible that the map explicitly maps the key to <tt>null</tt>. The
-	 * <tt>containsKey</tt> method may be used to distinguish these two
-	 * cases.
-	 *
-	 * @param key the key whose associated value is to be returned.
-	 * @return the value to which this map maps the specified key, or
-	 *         <tt>null</tt> if the map contains no mapping for this key.
-	 * @see #put(Object,Object)
-	 */
-	public V get(Object key) {
-		Object k = maskNull( key );
-		int h = hash( k );
-		Entry<K,V>[] tab = getTable();
-		int index = indexFor( h, tab.length );
-		Entry<K,V> e = tab[index];
-		while ( e != null ) {
-			if ( e.hash == h && k == e.get() )
-				return e.value;
-			e = e.next;
-		}
-		return null;
-	}
-
-	/**
-	 * Returns <tt>true</tt> if this map contains a mapping for the
-	 * specified key.
-	 *
-	 * @param key The key whose presence in this map is to be tested
-	 * @return <tt>true</tt> if there is a mapping for <tt>key</tt>;
-	 *         <tt>false</tt> otherwise
-	 */
-	public boolean containsKey(Object key) {
-		return getEntry( key ) != null;
-	}
-
-	/**
-	 * Returns the entry associated with the specified key in the HashMap.
-	 * Returns null if the HashMap contains no mapping for this key.
-	 */
-	Entry<K,V> getEntry(Object key) {
-		Object k = maskNull( key );
-		int h = hash( k );
-		Entry<K,V>[] tab = getTable();
-		int index = indexFor( h, tab.length );
-		Entry<K,V> e = tab[index];
-		while ( e != null && !( e.hash == h && k == e.get() ) )
-			e = e.next;
-		return e;
-	}
-
-	/**
-	 * Associates the specified value with the specified key in this map.
-	 * If the map previously contained a mapping for this key, the old
-	 * value is replaced.
-	 *
-	 * @param key   key with which the specified value is to be associated.
-	 * @param value value to be associated with the specified key.
-	 * @return previous value associated with specified key, or <tt>null</tt>
-	 *         if there was no mapping for key.  A <tt>null</tt> return can
-	 *         also indicate that the HashMap previously associated
-	 *         <tt>null</tt> with the specified key.
-	 */
-	public V put(K key, V value) {
-		K k = maskNull( key );
-		int h = hash( k );
-		Entry<K,V>[] tab = getTable();
-		int i = indexFor( h, tab.length );
-
-		for ( Entry<K,V> e = tab[i]; e != null; e = e.next ) {
-			if ( h == e.hash && k == e.get() ) {
-				V oldValue = e.value;
-				if ( value != oldValue )
-					e.value = value;
-				return oldValue;
-			}
-		}
-
-		modCount++;
-		tab[i] = new Entry<K,V>( k, value, queue, h, tab[i] );
-		if ( ++size >= threshold )
-			resize( tab.length * 2 );
-		return null;
-	}
-
-	/**
-	 * Rehashes the contents of this map into a new <tt>HashMap</tt> instance
-	 * with a larger capacity. This method is called automatically when the
-	 * number of keys in this map exceeds its capacity and load factor.
-	 * <p/>
-	 * Note that this method is a no-op if it's called with newCapacity ==
-	 * 2*MAXIMUM_CAPACITY (which is Integer.MIN_VALUE).
-	 *
-	 * @param newCapacity the new capacity, MUST be a power of two.
-	 */
-	void resize(int newCapacity) {
-		// assert (newCapacity & -newCapacity) == newCapacity; // power of 2
-
-		Entry<K,V>[] oldTable = getTable();
-		int oldCapacity = oldTable.length;
-
-		// check if needed
-		if ( size < threshold || oldCapacity > newCapacity )
-			return;
-
-		Entry<K,V>[] newTable = new Entry[newCapacity];
-
-		transfer( oldTable, newTable );
-		table = newTable;
-
-		/*
-				 * If ignoring null elements and processing ref queue caused massive
-				 * shrinkage, then restore old table.  This should be rare, but avoids
-				 * unbounded expansion of garbage-filled tables.
-				 */
-		if ( size >= threshold / 2 ) {
-			threshold = (int) ( newCapacity * loadFactor );
-		}
-		else {
-			expungeStaleEntries();
-			transfer( newTable, oldTable );
-			table = oldTable;
-		}
-	}
-
-	/**
-	 * Transfer all entries from src to dest tables
-	 */
-	private void transfer(Entry<K,V>[] src, Entry<K,V>[] dest) {
-		for ( int j = 0; j < src.length; ++j ) {
-			Entry<K,V> e = src[j];
-			src[j] = null;
-			while ( e != null ) {
-				Entry<K,V> next = e.next;
-				K key = e.get();
-				if ( key == null ) {
-					e.next = null;  // Help GC
-					e.value = null; //  "   "
-					size--;
-				}
-				else {
-					int i = indexFor( e.hash, dest.length );
-					e.next = dest[i];
-					dest[i] = e;
-				}
-				e = next;
-			}
-		}
-	}
-
-	/**
-	 * Copies all of the mappings from the specified map to this map These
-	 * mappings will replace any mappings that this map had for any of the
-	 * keys currently in the specified map.<p>
-	 *
-	 * @param t mappings to be stored in this map.
-	 * @throws NullPointerException if the specified map is null.
-	 */
-	public void putAll(Map<? extends K, ? extends V> t) {
-		// Expand enough to hold t's elements without resizing.
-		int n = t.size();
-		if ( n == 0 )
-			return;
-		if ( n >= threshold ) {
-			n = (int) ( n / loadFactor + 1 );
-			if ( n > MAXIMUM_CAPACITY )
-				n = MAXIMUM_CAPACITY;
-			int capacity = table.length;
-			while ( capacity < n )
-				capacity <<= 1;
-			resize( capacity );
-		}
-
-		for ( Iterator i = t.entrySet().iterator(); i.hasNext(); ) {
-			Map.Entry<K,V> e = (Map.Entry<K,V>) i.next(); //FIXME should not have to cast
-			put( e.getKey(), e.getValue() );
-		}
-	}
-
-	/**
-	 * Removes the mapping for this key from this map if present.
-	 *
-	 * @param key key whose mapping is to be removed from the map.
-	 * @return previous value associated with specified key, or <tt>null</tt>
-	 *         if there was no mapping for key.  A <tt>null</tt> return can
-	 *         also indicate that the map previously associated <tt>null</tt>
-	 *         with the specified key.
-	 */
-	public V remove(Object key) {
-		Object k = maskNull( key );
-		int h = hash( k );
-		Entry<K,V>[] tab = getTable();
-		int i = indexFor( h, tab.length );
-		Entry<K,V> prev = tab[i];
-		Entry<K,V> e = prev;
-
-		while ( e != null ) {
-			Entry<K,V> next = e.next;
-			if ( h == e.hash && k == e.get() ) {
-				modCount++;
-				size--;
-				if ( prev == e )
-					tab[i] = next;
-				else
-					prev.next = next;
-				return e.value;
-			}
-			prev = e;
-			e = next;
-		}
-
-		return null;
-	}
-
-
-	/**
-	 * Special version of remove needed by Entry set
-	 */
-	Entry removeMapping(Object o) {
-		if ( !( o instanceof Map.Entry ) )
-			return null;
-		Entry[] tab = getTable();
-		Map.Entry entry = (Map.Entry) o;
-		Object k = maskNull( entry.getKey() );
-		int h = hash( k );
-		int i = indexFor( h, tab.length );
-		Entry prev = tab[i];
-		Entry e = prev;
-
-		while ( e != null ) {
-			Entry next = e.next;
-			if ( h == e.hash && e.equals( entry ) ) {
-				modCount++;
-				size--;
-				if ( prev == e )
-					tab[i] = next;
-				else
-					prev.next = next;
-				return e;
-			}
-			prev = e;
-			e = next;
-		}
-
-		return null;
-	}
-
-	/**
-	 * Removes all mappings from this map.
-	 */
-	public void clear() {
-		// clear out ref queue. We don't need to expunge entries
-		// since table is getting cleared.
-		while ( queue.poll() != null )
-			;
-
-		modCount++;
-		Entry tab[] = table;
-		for ( int i = 0; i < tab.length; ++i )
-			tab[i] = null;
-		size = 0;
-
-		// Allocation of array may have caused GC, which may have caused
-		// additional entries to go stale.  Removing these entries from the
-		// reference queue will make them eligible for reclamation.
-		while ( queue.poll() != null )
-			;
-	}
-
-	/**
-	 * Returns <tt>true</tt> if this map maps one or more keys to the
-	 * specified value.
-	 *
-	 * @param value value whose presence in this map is to be tested.
-	 * @return <tt>true</tt> if this map maps one or more keys to the
-	 *         specified value.
-	 */
-	public boolean containsValue(Object value) {
-		if ( value == null )
-			return containsNullValue();
-
-		Entry tab[] = getTable();
-		for ( int i = tab.length; i-- > 0; )
-			for ( Entry e = tab[i]; e != null; e = e.next )
-				if ( value.equals( e.value ) )
-					return true;
-		return false;
-	}
-
-	/**
-	 * Special-case code for containsValue with null argument
-	 */
-	private boolean containsNullValue() {
-		Entry tab[] = getTable();
-		for ( int i = tab.length; i-- > 0; )
-			for ( Entry e = tab[i]; e != null; e = e.next )
-				if ( e.value == null )
-					return true;
-		return false;
-	}
-
-	/**
-	 * Remove elements having the according value.
-	 * Intended to avoid concurrent access exceptions
-	 * It is expected that nobody add a key being removed by value
-	 *
-	 * @param value value whose presence in this map is to be removed.
-	 * @return <tt>true</tt> if this map maps one or more keys to the
-	 *         specified value.
-	 */
-	public boolean removeValue(Object value) {
-		if ( value == null )
-			return removeNullValue();
-
-		Entry tab[] = getTable();
-		Set keys = new HashSet();
-		for ( int i = tab.length; i-- > 0; )
-			for ( Entry e = tab[i]; e != null; e = e.next )
-				if ( value.equals( e.value ) )
-					keys.add( e.getKey() );
-		for ( Object key : keys ) remove( key );
-		return !keys.isEmpty();
-	}
-
-	/**
-	 * Special-case code for removeValue with null argument
-	 */
-	private boolean removeNullValue() {
-		Entry tab[] = getTable();
-		Set keys = new HashSet();
-		for ( int i = tab.length; i-- > 0; )
-			for ( Entry e = tab[i]; e != null; e = e.next )
-				if ( e.value == null )
-					keys.add( e.getKey() );
-		for ( Object key : keys ) remove( key );
-		return !keys.isEmpty();
-	}
-
-	/**
-	 * The entries in this hash table extend WeakReference, using its main ref
-	 * field as the key.
-	 */
-	private static class Entry<K,V> extends WeakReference<K> implements Map.Entry<K,V> {
-		private V value;
-		private final int hash;
-		private Entry<K,V> next;
-
-		/**
-		 * Create new entry.
-		 */
-		Entry(K key, V value, ReferenceQueue queue,
-			  int hash, Entry<K,V> next) {
-			super( key, queue );
-			this.value = value;
-			this.hash = hash;
-			this.next = next;
-		}
-
-		public K getKey() {
-			return WeakIdentityHashMap.unmaskNull( this.get() );
-		}
-
-		public V getValue() {
-			return value;
-		}
-
-		public V setValue(V newValue) {
-			V oldValue = value;
-			value = newValue;
-			return oldValue;
-		}
-
-		public boolean equals(Object o) {
-			if ( !( o instanceof Map.Entry ) )
-				return false;
-			Map.Entry e = (Map.Entry) o;
-			Object k1 = getKey();
-			Object k2 = e.getKey();
-			if ( k1 == k2 ) {
-				Object v1 = getValue();
-				Object v2 = e.getValue();
-				if ( v1 == v2 || ( v1 != null && v1.equals( v2 ) ) )
-					return true;
-			}
-			return false;
-		}
-
-		public int hashCode() {
-			Object k = getKey();
-			Object v = getValue();
-			return ( ( k == null ?
-					0 :
-					System.identityHashCode( k ) ) ^
-					( v == null ?
-							0 :
-							v.hashCode() ) );
-		}
-
-		public String toString() {
-			return getKey() + "=" + getValue();
-		}
-	}
-
-	private abstract class HashIterator<E> implements Iterator<E> {
-		int index;
-		Entry<K,V> entry = null;
-		Entry<K,V> lastReturned = null;
-		int expectedModCount = modCount;
-
-		/**
-		 * Strong reference needed to avoid disappearance of key
-		 * between hasNext and next
-		 */
-		Object nextKey = null;
-
-		/**
-		 * Strong reference needed to avoid disappearance of key
-		 * between nextEntry() and any use of the entry
-		 */
-		Object currentKey = null;
-
-		HashIterator() {
-			index = ( size() != 0 ?
-					table.length :
-					0 );
-		}
-
-		public boolean hasNext() {
-			Entry[] t = table;
-
-			while ( nextKey == null ) {
-				Entry e = entry;
-				int i = index;
-				while ( e == null && i > 0 )
-					e = t[--i];
-				entry = e;
-				index = i;
-				if ( e == null ) {
-					currentKey = null;
-					return false;
-				}
-				nextKey = e.get(); // hold on to key in strong ref
-				if ( nextKey == null )
-					entry = entry.next;
-			}
-			return true;
-		}
-
-		/**
-		 * The common parts of next() across different types of iterators
-		 */
-		protected Entry<K,V> nextEntry() {
-			if ( modCount != expectedModCount )
-				throw new ConcurrentModificationException();
-			if ( nextKey == null && !hasNext() )
-				throw new NoSuchElementException();
-
-			lastReturned = entry;
-			entry = entry.next;
-			currentKey = nextKey;
-			nextKey = null;
-			return lastReturned;
-		}
-
-		public void remove() {
-			if ( lastReturned == null )
-				throw new IllegalStateException();
-			if ( modCount != expectedModCount )
-				throw new ConcurrentModificationException();
-
-			WeakIdentityHashMap.this.remove( currentKey );
-			expectedModCount = modCount;
-			lastReturned = null;
-			currentKey = null;
-		}
-
-	}
-
-	private class ValueIterator extends HashIterator {
-		public Object next() {
-			return nextEntry().value;
-		}
-	}
-
-	private class KeyIterator extends HashIterator {
-		public Object next() {
-			return nextEntry().getKey();
-		}
-	}
-
-	private class EntryIterator extends HashIterator<Map.Entry<K,V>> {
-		public Map.Entry<K,V> next() {
-			return nextEntry();
-		}
-	}
-
-	// Views
-
-	private transient Set<Map.Entry<K,V>> entrySet = null;
-
-	/**
-	 * Returns a set view of the keys contained in this map.  The set is
-	 * backed by the map, so changes to the map are reflected in the set, and
-	 * vice-versa.  The set supports element removal, which removes the
-	 * corresponding mapping from this map, via the <tt>Iterator.remove</tt>,
-	 * <tt>Set.remove</tt>, <tt>removeAll</tt>, <tt>retainAll</tt>, and
-	 * <tt>clear</tt> operations.  It does not support the <tt>add</tt> or
-	 * <tt>addAll</tt> operations.
-	 *
-	 * @return a set view of the keys contained in this map.
-	 */
-	public Set keySet() {
-		Set ks = keySet;
-		return ( ks != null ?
-				ks :
-				( keySet = new KeySet() ) );
-	}
-
-	private class KeySet extends AbstractSet {
-		public Iterator iterator() {
-			return new KeyIterator();
-		}
-
-		public int size() {
-			return WeakIdentityHashMap.this.size();
-		}
-
-		public boolean contains(Object o) {
-			return containsKey( o );
-		}
-
-		public boolean remove(Object o) {
-			if ( containsKey( o ) ) {
-				WeakIdentityHashMap.this.remove( o );
-				return true;
-			}
-			else
-				return false;
-		}
-
-		public void clear() {
-			WeakIdentityHashMap.this.clear();
-		}
-
-		public Object[] toArray() {
-			Collection c = new ArrayList( size() );
-			for ( Iterator i = iterator(); i.hasNext(); )
-				c.add( i.next() );
-			return c.toArray();
-		}
-
-		public Object[] toArray(Object a[]) {
-			Collection c = new ArrayList( size() );
-			for ( Iterator i = iterator(); i.hasNext(); )
-				c.add( i.next() );
-			return c.toArray( a );
-		}
-	}
-
-	/**
-	 * Returns a collection view of the values contained in this map.  The
-	 * collection is backed by the map, so changes to the map are reflected in
-	 * the collection, and vice-versa.  The collection supports element
-	 * removal, which removes the corresponding mapping from this map, via the
-	 * <tt>Iterator.remove</tt>, <tt>Collection.remove</tt>,
-	 * <tt>removeAll</tt>, <tt>retainAll</tt>, and <tt>clear</tt> operations.
-	 * It does not support the <tt>add</tt> or <tt>addAll</tt> operations.
-	 *
-	 * @return a collection view of the values contained in this map.
-	 */
-	public Collection values() {
-		Collection vs = values;
-		return ( vs != null ?
-				vs :
-				( values = new Values() ) );
-	}
-
-	private class Values extends AbstractCollection {
-		public Iterator iterator() {
-			return new ValueIterator();
-		}
-
-		public int size() {
-			return WeakIdentityHashMap.this.size();
-		}
-
-		public boolean contains(Object o) {
-			return containsValue( o );
-		}
-
-		public void clear() {
-			WeakIdentityHashMap.this.clear();
-		}
-
-		public Object[] toArray() {
-			Collection c = new ArrayList( size() );
-			for ( Iterator i = iterator(); i.hasNext(); )
-				c.add( i.next() );
-			return c.toArray();
-		}
-
-		public Object[] toArray(Object a[]) {
-			Collection c = new ArrayList( size() );
-			for ( Iterator i = iterator(); i.hasNext(); )
-				c.add( i.next() );
-			return c.toArray( a );
-		}
-	}
-
-	/**
-	 * Returns a collection view of the mappings contained in this map.  Each
-	 * element in the returned collection is a <tt>Map.Entry</tt>.  The
-	 * collection is backed by the map, so changes to the map are reflected in
-	 * the collection, and vice-versa.  The collection supports element
-	 * removal, which removes the corresponding mapping from the map, via the
-	 * <tt>Iterator.remove</tt>, <tt>Collection.remove</tt>,
-	 * <tt>removeAll</tt>, <tt>retainAll</tt>, and <tt>clear</tt> operations.
-	 * It does not support the <tt>add</tt> or <tt>addAll</tt> operations.
-	 *
-	 * @return a collection view of the mappings contained in this map.
-	 * @see java.util.Map.Entry
-	 */
-	public Set<Map.Entry<K,V>> entrySet() {
-		Set<Map.Entry<K,V>> es = entrySet;
-		return ( es != null ?
-				es :
-				( entrySet = new EntrySet() ) );
-	}
-
-	private class EntrySet extends AbstractSet<Map.Entry<K,V>> {
-		public Iterator<Map.Entry<K,V>> iterator() {
-			return new EntryIterator();
-		}
-
-		public boolean contains(Object o) {
-			if ( !( o instanceof Map.Entry ) )
-				return false;
-			Map.Entry e = (Map.Entry) o;
-			Object k = e.getKey();
-			Entry candidate = getEntry( e.getKey() );
-			return candidate != null && candidate.equals( e );
-		}
-
-		public boolean remove(Object o) {
-			return removeMapping( o ) != null;
-		}
-
-		public int size() {
-			return WeakIdentityHashMap.this.size();
-		}
-
-		public void clear() {
-			WeakIdentityHashMap.this.clear();
-		}
-
-		public Object[] toArray() {
-			Collection c = new ArrayList( size() );
-			for ( Iterator i = iterator(); i.hasNext(); )
-				c.add( new SimpleEntry( (Map.Entry) i.next() ) );
-			return c.toArray();
-		}
-
-		public Object[] toArray(Object a[]) {
-			Collection c = new ArrayList( size() );
-			for ( Iterator i = iterator(); i.hasNext(); )
-				c.add( new SimpleEntry( (Map.Entry) i.next() ) );
-			return c.toArray( a );
-		}
-	}
-
-	static class SimpleEntry implements Map.Entry {
-		Object key;
-		Object value;
-
-		public SimpleEntry(Object key, Object value) {
-			this.key = key;
-			this.value = value;
-		}
-
-		public SimpleEntry(Map.Entry e) {
-			this.key = e.getKey();
-			this.value = e.getValue();
-		}
-
-		public Object getKey() {
-			return key;
-		}
-
-		public Object getValue() {
-			return value;
-		}
-
-		public Object setValue(Object value) {
-			Object oldValue = this.value;
-			this.value = value;
-			return oldValue;
-		}
-
-		public boolean equals(Object o) {
-			if ( !( o instanceof Map.Entry ) )
-				return false;
-			Map.Entry e = (Map.Entry) o;
-			return eq( key, e.getKey() ) && eq( value, e.getValue() );
-		}
-
-		public int hashCode() {
-			Object v;
-			return ( ( key == null ) ?
-					0 :
-					key.hashCode() ) ^
-					( ( value == null ) ?
-							0 :
-							value.hashCode() );
-		}
-
-		public String toString() {
-			return key + "=" + value;
-		}
-
-		private static boolean eq(Object o1, Object o2) {
-			return ( o1 == null ?
-					o2 == null :
-					o1.equals( o2 ) );
-		}
-	}
-
-}

Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/util/WeakIdentityHashMap.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/java/org/hibernate/search/util/WeakIdentityHashMap.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/util/WeakIdentityHashMap.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/util/WeakIdentityHashMap.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,1019 @@
+//$Id: $
+/*
+  * JBoss, Home of Professional Open Source
+  * Copyright 2005, JBoss Inc., and individual contributors as indicated
+  * by the @authors tag. See the copyright.txt in the distribution for a
+  * full listing of individual contributors.
+  *
+  * This is free software; you can redistribute it and/or modify it
+  * under the terms of the GNU Lesser General Public License as
+  * published by the Free Software Foundation; either version 2.1 of
+  * the License, or (at your option) any later version.
+  *
+  * This software is distributed in the hope that it will be useful,
+  * but WITHOUT ANY WARRANTY; without even the implied warranty of
+  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+  * Lesser General Public License for more details.
+  *
+  * You should have received a copy of the GNU Lesser General Public
+  * License along with this software; if not, write to the Free
+  * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+  * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+  */
+
+package org.hibernate.search.util;
+
+
+import java.lang.ref.ReferenceQueue;
+import java.lang.ref.WeakReference;
+import java.util.AbstractCollection;
+import java.util.AbstractSet;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.ConcurrentModificationException;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.NoSuchElementException;
+import java.util.Set;
+
+/**
+ * A hashtable-based <tt>Map</tt> implementation with <em>weak keys</em> and
+ * using reference-equality in place of object-equality when comparing keys
+ * (and values).  In an <tt>WeakIdentityHashMap</tt>, two keys <tt>k1</tt> and
+ * <tt>k2</tt> are considered equal if and only if <tt>(k1==k2)</tt>.
+ * An entry in a <tt>WeakIdentityHashMap</tt> will automatically be removed when
+ * its key is no longer in ordinary use.  More precisely, the presence of a
+ * mapping for a given key will not prevent the key from being discarded by the
+ * garbage collector, that is, made finalizable, finalized, and then reclaimed.
+ * When a key has been discarded its entry is effectively removed from the map.
+ * <p/>
+ * <p>Based on java.util.WeakHashMap</p>
+ * <p>Based on org.jboss.common.collection.WeakIdentityHashMap</p>
+ *
+ * @author Dawid Kurzyniec
+ * @author <a href="mailto:kabir.khan at jboss.org">Kabir Khan</a>
+ * @author Emmanuel Bernard
+
+ * @see		java.util.IdentityHashMap
+ * @see		java.util.WeakHashMap
+ */
+public class WeakIdentityHashMap<K,V> /*extends AbstractMap*/ implements Map<K,V> {
+
+	/**
+	 * The default initial capacity -- MUST be a power of two.
+	 */
+	private static final int DEFAULT_INITIAL_CAPACITY = 16;
+
+	/**
+	 * The maximum capacity, used if a higher value is implicitly specified
+	 * by either of the constructors with arguments.
+	 * MUST be a power of two <= 1<<30.
+	 */
+	private static final int MAXIMUM_CAPACITY = 1 << 30;
+
+	/**
+	 * The load fast used when none specified in constructor.
+	 */
+	private static final float DEFAULT_LOAD_FACTOR = 0.75f;
+
+	/**
+	 * The table, resized as necessary. Length MUST Always be a power of two.
+	 */
+	private Entry<K,V>[] table;
+
+	/**
+	 * The number of key-value mappings contained in this weak hash map.
+	 */
+	private int size;
+
+	/**
+	 * The next size value at which to resize (capacity * load factor).
+	 */
+	private int threshold;
+
+	/**
+	 * The load factor for the hash table.
+	 */
+	private final float loadFactor;
+
+	/**
+	 * Reference queue for cleared WeakEntries
+	 */
+	private final ReferenceQueue queue = new ReferenceQueue();
+
+	/**
+	 * The number of times this HashMap has been structurally modified
+	 * Structural modifications are those that change the number of mappings in
+	 * the HashMap or otherwise modify its internal structure (e.g.,
+	 * rehash).  This field is used to make iterators on Collection-views of
+	 * the HashMap fail-fast.  (See ConcurrentModificationException).
+	 */
+	private volatile int modCount;
+
+	/**
+	 * Each of these fields are initialized to contain an instance of the
+	 * appropriate view the first time this view is requested.  The views are
+	 * stateless, so there's no reason to create more than one of each.
+	 */
+	transient volatile Set keySet = null;
+	transient volatile Collection values = null;
+
+	/**
+	 * Constructs a new, empty <tt>WeakIdentityHashMap</tt> with the given
+	 * initial capacity and the given load factor.
+	 *
+	 * @param initialCapacity The initial capacity of the
+	 *                        <tt>WeakIdentityHashMap</tt>
+	 * @param loadFactor	  The load factor of the
+	 *                        <tt>WeakIdentityHashMap</tt>
+	 * @throws IllegalArgumentException If the initial capacity is negative,
+	 *                                  or if the load factor is nonpositive.
+	 */
+	public WeakIdentityHashMap(int initialCapacity, float loadFactor) {
+		if ( initialCapacity < 0 )
+			throw new IllegalArgumentException( "Illegal Initial Capacity: " +
+					initialCapacity );
+		if ( initialCapacity > MAXIMUM_CAPACITY )
+			initialCapacity = MAXIMUM_CAPACITY;
+
+		if ( loadFactor <= 0 || Float.isNaN( loadFactor ) )
+			throw new IllegalArgumentException( "Illegal Load factor: " +
+					loadFactor );
+		int capacity = 1;
+		while ( capacity < initialCapacity )
+			capacity <<= 1;
+		table = new Entry[capacity];
+		this.loadFactor = loadFactor;
+		threshold = (int) ( capacity * loadFactor );
+	}
+
+	/**
+	 * Constructs a new, empty <tt>WeakIdentityHashMap</tt> with the given
+	 * initial capacity and the default load factor, which is <tt>0.75</tt>.
+	 *
+	 * @param initialCapacity The initial capacity of the
+	 *                        <tt>WeakIdentityHashMap</tt>
+	 * @throws IllegalArgumentException If the initial capacity is negative.
+	 */
+	public WeakIdentityHashMap(int initialCapacity) {
+		this( initialCapacity, DEFAULT_LOAD_FACTOR );
+	}
+
+	/**
+	 * Constructs a new, empty <tt>WeakIdentityHashMap</tt> with the default
+	 * initial capacity (16) and the default load factor (0.75).
+	 */
+	public WeakIdentityHashMap() {
+		this.loadFactor = DEFAULT_LOAD_FACTOR;
+		threshold = (int) ( DEFAULT_INITIAL_CAPACITY );
+		table = new Entry[DEFAULT_INITIAL_CAPACITY];
+	}
+
+	/**
+	 * Constructs a new <tt>WeakIdentityHashMap</tt> with the same mappings as
+	 * the specified <tt>Map</tt>.  The <tt>WeakIdentityHashMap</tt> is created
+	 * with default load factor, which is <tt>0.75</tt> and an initial capacity
+	 * sufficient to hold the mappings in the specified <tt>Map</tt>.
+	 *
+	 * @param t the map whose mappings are to be placed in this map.
+	 * @throws NullPointerException if the specified map is null.
+	 */
+	public WeakIdentityHashMap(Map t) {
+		this( Math.max( (int) ( t.size() / DEFAULT_LOAD_FACTOR ) + 1, 16 ),
+				DEFAULT_LOAD_FACTOR );
+		putAll( t );
+	}
+
+	// internal utilities
+
+	/**
+	 * Value representing null keys inside tables.
+	 */
+	private static final Object NULL_KEY = new Object();
+
+	/**
+	 * Use NULL_KEY for key if it is null.
+	 */
+	private static <T> T maskNull(T key) {
+		return ( key == null ?
+				(T) NULL_KEY : //i don't think there is a better way
+				key );
+	}
+
+	/**
+	 * Return internal representation of null key back to caller as null
+	 */
+	private static <T> T unmaskNull(T key) {
+		return ( key == NULL_KEY ?
+				null :
+				key );
+	}
+
+	/**
+	 * Return a hash code for non-null Object x.
+	 */
+	int hash(Object x) {
+		int h = System.identityHashCode( x );
+		return h - ( h << 7 );  // that is,, -127 * h
+	}
+
+	/**
+	 * Return index for hash code h.
+	 */
+	static int indexFor(int h, int length) {
+		return h & ( length - 1 );
+	}
+
+	/**
+	 * Expunge stale entries from the table.
+	 */
+	private void expungeStaleEntries() {
+		Object r;
+		while ( ( r = queue.poll() ) != null ) {
+			Entry e = (Entry) r;
+			int h = e.hash;
+			int i = indexFor( h, table.length );
+
+			Entry prev = table[i];
+			Entry p = prev;
+			while ( p != null ) {
+				Entry next = p.next;
+				if ( p == e ) {
+					if ( prev == e )
+						table[i] = next;
+					else
+						prev.next = next;
+					e.next = null;  // Help GC
+					e.value = null; //  "   "
+					size--;
+					break;
+				}
+				prev = p;
+				p = next;
+			}
+		}
+	}
+
+	/**
+	 * Return the table after first expunging stale entries
+	 */
+	private Entry<K,V>[] getTable() {
+		expungeStaleEntries();
+		return table;
+	}
+
+	/**
+	 * Returns the number of key-value mappings in this map.
+	 * This result is a snapshot, and may not reflect unprocessed
+	 * entries that will be removed before next attempted access
+	 * because they are no longer referenced.
+	 */
+	public int size() {
+		if ( size == 0 )
+			return 0;
+		expungeStaleEntries();
+		return size;
+	}
+
+	/**
+	 * Returns <tt>true</tt> if this map contains no key-value mappings.
+	 * This result is a snapshot, and may not reflect unprocessed
+	 * entries that will be removed before next attempted access
+	 * because they are no longer referenced.
+	 */
+	public boolean isEmpty() {
+		return size() == 0;
+	}
+
+	/**
+	 * Returns the value to which the specified key is mapped in this weak
+	 * hash map, or <tt>null</tt> if the map contains no mapping for
+	 * this key.  A return value of <tt>null</tt> does not <i>necessarily</i>
+	 * indicate that the map contains no mapping for the key; it is also
+	 * possible that the map explicitly maps the key to <tt>null</tt>. The
+	 * <tt>containsKey</tt> method may be used to distinguish these two
+	 * cases.
+	 *
+	 * @param key the key whose associated value is to be returned.
+	 * @return the value to which this map maps the specified key, or
+	 *         <tt>null</tt> if the map contains no mapping for this key.
+	 * @see #put(Object,Object)
+	 */
+	public V get(Object key) {
+		Object k = maskNull( key );
+		int h = hash( k );
+		Entry<K,V>[] tab = getTable();
+		int index = indexFor( h, tab.length );
+		Entry<K,V> e = tab[index];
+		while ( e != null ) {
+			if ( e.hash == h && k == e.get() )
+				return e.value;
+			e = e.next;
+		}
+		return null;
+	}
+
+	/**
+	 * Returns <tt>true</tt> if this map contains a mapping for the
+	 * specified key.
+	 *
+	 * @param key The key whose presence in this map is to be tested
+	 * @return <tt>true</tt> if there is a mapping for <tt>key</tt>;
+	 *         <tt>false</tt> otherwise
+	 */
+	public boolean containsKey(Object key) {
+		return getEntry( key ) != null;
+	}
+
+	/**
+	 * Returns the entry associated with the specified key in the HashMap.
+	 * Returns null if the HashMap contains no mapping for this key.
+	 */
+	Entry<K,V> getEntry(Object key) {
+		Object k = maskNull( key );
+		int h = hash( k );
+		Entry<K,V>[] tab = getTable();
+		int index = indexFor( h, tab.length );
+		Entry<K,V> e = tab[index];
+		while ( e != null && !( e.hash == h && k == e.get() ) )
+			e = e.next;
+		return e;
+	}
+
+	/**
+	 * Associates the specified value with the specified key in this map.
+	 * If the map previously contained a mapping for this key, the old
+	 * value is replaced.
+	 *
+	 * @param key   key with which the specified value is to be associated.
+	 * @param value value to be associated with the specified key.
+	 * @return previous value associated with specified key, or <tt>null</tt>
+	 *         if there was no mapping for key.  A <tt>null</tt> return can
+	 *         also indicate that the HashMap previously associated
+	 *         <tt>null</tt> with the specified key.
+	 */
+	public V put(K key, V value) {
+		K k = maskNull( key );
+		int h = hash( k );
+		Entry<K,V>[] tab = getTable();
+		int i = indexFor( h, tab.length );
+
+		for ( Entry<K,V> e = tab[i]; e != null; e = e.next ) {
+			if ( h == e.hash && k == e.get() ) {
+				V oldValue = e.value;
+				if ( value != oldValue )
+					e.value = value;
+				return oldValue;
+			}
+		}
+
+		modCount++;
+		tab[i] = new Entry<K,V>( k, value, queue, h, tab[i] );
+		if ( ++size >= threshold )
+			resize( tab.length * 2 );
+		return null;
+	}
+
+	/**
+	 * Rehashes the contents of this map into a new <tt>HashMap</tt> instance
+	 * with a larger capacity. This method is called automatically when the
+	 * number of keys in this map exceeds its capacity and load factor.
+	 * <p/>
+	 * Note that this method is a no-op if it's called with newCapacity ==
+	 * 2*MAXIMUM_CAPACITY (which is Integer.MIN_VALUE).
+	 *
+	 * @param newCapacity the new capacity, MUST be a power of two.
+	 */
+	void resize(int newCapacity) {
+		// assert (newCapacity & -newCapacity) == newCapacity; // power of 2
+
+		Entry<K,V>[] oldTable = getTable();
+		int oldCapacity = oldTable.length;
+
+		// check if needed
+		if ( size < threshold || oldCapacity > newCapacity )
+			return;
+
+		Entry<K,V>[] newTable = new Entry[newCapacity];
+
+		transfer( oldTable, newTable );
+		table = newTable;
+
+		/*
+				 * If ignoring null elements and processing ref queue caused massive
+				 * shrinkage, then restore old table.  This should be rare, but avoids
+				 * unbounded expansion of garbage-filled tables.
+				 */
+		if ( size >= threshold / 2 ) {
+			threshold = (int) ( newCapacity * loadFactor );
+		}
+		else {
+			expungeStaleEntries();
+			transfer( newTable, oldTable );
+			table = oldTable;
+		}
+	}
+
+	/**
+	 * Transfer all entries from src to dest tables
+	 */
+	private void transfer(Entry<K,V>[] src, Entry<K,V>[] dest) {
+		for ( int j = 0; j < src.length; ++j ) {
+			Entry<K,V> e = src[j];
+			src[j] = null;
+			while ( e != null ) {
+				Entry<K,V> next = e.next;
+				K key = e.get();
+				if ( key == null ) {
+					e.next = null;  // Help GC
+					e.value = null; //  "   "
+					size--;
+				}
+				else {
+					int i = indexFor( e.hash, dest.length );
+					e.next = dest[i];
+					dest[i] = e;
+				}
+				e = next;
+			}
+		}
+	}
+
+	/**
+	 * Copies all of the mappings from the specified map to this map These
+	 * mappings will replace any mappings that this map had for any of the
+	 * keys currently in the specified map.<p>
+	 *
+	 * @param t mappings to be stored in this map.
+	 * @throws NullPointerException if the specified map is null.
+	 */
+	public void putAll(Map<? extends K, ? extends V> t) {
+		// Expand enough to hold t's elements without resizing.
+		int n = t.size();
+		if ( n == 0 )
+			return;
+		if ( n >= threshold ) {
+			n = (int) ( n / loadFactor + 1 );
+			if ( n > MAXIMUM_CAPACITY )
+				n = MAXIMUM_CAPACITY;
+			int capacity = table.length;
+			while ( capacity < n )
+				capacity <<= 1;
+			resize( capacity );
+		}
+
+		for ( Iterator i = t.entrySet().iterator(); i.hasNext(); ) {
+			Map.Entry<K,V> e = (Map.Entry<K,V>) i.next(); //FIXME should not have to cast
+			put( e.getKey(), e.getValue() );
+		}
+	}
+
+	/**
+	 * Removes the mapping for this key from this map if present.
+	 *
+	 * @param key key whose mapping is to be removed from the map.
+	 * @return previous value associated with specified key, or <tt>null</tt>
+	 *         if there was no mapping for key.  A <tt>null</tt> return can
+	 *         also indicate that the map previously associated <tt>null</tt>
+	 *         with the specified key.
+	 */
+	public V remove(Object key) {
+		Object k = maskNull( key );
+		int h = hash( k );
+		Entry<K,V>[] tab = getTable();
+		int i = indexFor( h, tab.length );
+		Entry<K,V> prev = tab[i];
+		Entry<K,V> e = prev;
+
+		while ( e != null ) {
+			Entry<K,V> next = e.next;
+			if ( h == e.hash && k == e.get() ) {
+				modCount++;
+				size--;
+				if ( prev == e )
+					tab[i] = next;
+				else
+					prev.next = next;
+				return e.value;
+			}
+			prev = e;
+			e = next;
+		}
+
+		return null;
+	}
+
+
+	/**
+	 * Special version of remove needed by Entry set
+	 */
+	Entry removeMapping(Object o) {
+		if ( !( o instanceof Map.Entry ) )
+			return null;
+		Entry[] tab = getTable();
+		Map.Entry entry = (Map.Entry) o;
+		Object k = maskNull( entry.getKey() );
+		int h = hash( k );
+		int i = indexFor( h, tab.length );
+		Entry prev = tab[i];
+		Entry e = prev;
+
+		while ( e != null ) {
+			Entry next = e.next;
+			if ( h == e.hash && e.equals( entry ) ) {
+				modCount++;
+				size--;
+				if ( prev == e )
+					tab[i] = next;
+				else
+					prev.next = next;
+				return e;
+			}
+			prev = e;
+			e = next;
+		}
+
+		return null;
+	}
+
+	/**
+	 * Removes all mappings from this map.
+	 */
+	public void clear() {
+		// clear out ref queue. We don't need to expunge entries
+		// since table is getting cleared.
+		while ( queue.poll() != null )
+			;
+
+		modCount++;
+		Entry tab[] = table;
+		for ( int i = 0; i < tab.length; ++i )
+			tab[i] = null;
+		size = 0;
+
+		// Allocation of array may have caused GC, which may have caused
+		// additional entries to go stale.  Removing these entries from the
+		// reference queue will make them eligible for reclamation.
+		while ( queue.poll() != null )
+			;
+	}
+
+	/**
+	 * Returns <tt>true</tt> if this map maps one or more keys to the
+	 * specified value.
+	 *
+	 * @param value value whose presence in this map is to be tested.
+	 * @return <tt>true</tt> if this map maps one or more keys to the
+	 *         specified value.
+	 */
+	public boolean containsValue(Object value) {
+		if ( value == null )
+			return containsNullValue();
+
+		Entry tab[] = getTable();
+		for ( int i = tab.length; i-- > 0; )
+			for ( Entry e = tab[i]; e != null; e = e.next )
+				if ( value.equals( e.value ) )
+					return true;
+		return false;
+	}
+
+	/**
+	 * Special-case code for containsValue with null argument
+	 */
+	private boolean containsNullValue() {
+		Entry tab[] = getTable();
+		for ( int i = tab.length; i-- > 0; )
+			for ( Entry e = tab[i]; e != null; e = e.next )
+				if ( e.value == null )
+					return true;
+		return false;
+	}
+
+	/**
+	 * Remove elements having the according value.
+	 * Intended to avoid concurrent access exceptions
+	 * It is expected that nobody add a key being removed by value
+	 *
+	 * @param value value whose presence in this map is to be removed.
+	 * @return <tt>true</tt> if this map maps one or more keys to the
+	 *         specified value.
+	 */
+	public boolean removeValue(Object value) {
+		if ( value == null )
+			return removeNullValue();
+
+		Entry tab[] = getTable();
+		Set keys = new HashSet();
+		for ( int i = tab.length; i-- > 0; )
+			for ( Entry e = tab[i]; e != null; e = e.next )
+				if ( value.equals( e.value ) )
+					keys.add( e.getKey() );
+		for ( Object key : keys ) remove( key );
+		return !keys.isEmpty();
+	}
+
+	/**
+	 * Special-case code for removeValue with null argument
+	 */
+	private boolean removeNullValue() {
+		Entry tab[] = getTable();
+		Set keys = new HashSet();
+		for ( int i = tab.length; i-- > 0; )
+			for ( Entry e = tab[i]; e != null; e = e.next )
+				if ( e.value == null )
+					keys.add( e.getKey() );
+		for ( Object key : keys ) remove( key );
+		return !keys.isEmpty();
+	}
+
+	/**
+	 * The entries in this hash table extend WeakReference, using its main ref
+	 * field as the key.
+	 */
+	private static class Entry<K,V> extends WeakReference<K> implements Map.Entry<K,V> {
+		private V value;
+		private final int hash;
+		private Entry<K,V> next;
+
+		/**
+		 * Create new entry.
+		 */
+		Entry(K key, V value, ReferenceQueue queue,
+			  int hash, Entry<K,V> next) {
+			super( key, queue );
+			this.value = value;
+			this.hash = hash;
+			this.next = next;
+		}
+
+		public K getKey() {
+			return WeakIdentityHashMap.unmaskNull( this.get() );
+		}
+
+		public V getValue() {
+			return value;
+		}
+
+		public V setValue(V newValue) {
+			V oldValue = value;
+			value = newValue;
+			return oldValue;
+		}
+
+		public boolean equals(Object o) {
+			if ( !( o instanceof Map.Entry ) )
+				return false;
+			Map.Entry e = (Map.Entry) o;
+			Object k1 = getKey();
+			Object k2 = e.getKey();
+			if ( k1 == k2 ) {
+				Object v1 = getValue();
+				Object v2 = e.getValue();
+				if ( v1 == v2 || ( v1 != null && v1.equals( v2 ) ) )
+					return true;
+			}
+			return false;
+		}
+
+		public int hashCode() {
+			Object k = getKey();
+			Object v = getValue();
+			return ( ( k == null ?
+					0 :
+					System.identityHashCode( k ) ) ^
+					( v == null ?
+							0 :
+							v.hashCode() ) );
+		}
+
+		public String toString() {
+			return getKey() + "=" + getValue();
+		}
+	}
+
+	private abstract class HashIterator<E> implements Iterator<E> {
+		int index;
+		Entry<K,V> entry = null;
+		Entry<K,V> lastReturned = null;
+		int expectedModCount = modCount;
+
+		/**
+		 * Strong reference needed to avoid disappearance of key
+		 * between hasNext and next
+		 */
+		Object nextKey = null;
+
+		/**
+		 * Strong reference needed to avoid disappearance of key
+		 * between nextEntry() and any use of the entry
+		 */
+		Object currentKey = null;
+
+		HashIterator() {
+			index = ( size() != 0 ?
+					table.length :
+					0 );
+		}
+
+		public boolean hasNext() {
+			Entry[] t = table;
+
+			while ( nextKey == null ) {
+				Entry e = entry;
+				int i = index;
+				while ( e == null && i > 0 )
+					e = t[--i];
+				entry = e;
+				index = i;
+				if ( e == null ) {
+					currentKey = null;
+					return false;
+				}
+				nextKey = e.get(); // hold on to key in strong ref
+				if ( nextKey == null )
+					entry = entry.next;
+			}
+			return true;
+		}
+
+		/**
+		 * The common parts of next() across different types of iterators
+		 */
+		protected Entry<K,V> nextEntry() {
+			if ( modCount != expectedModCount )
+				throw new ConcurrentModificationException();
+			if ( nextKey == null && !hasNext() )
+				throw new NoSuchElementException();
+
+			lastReturned = entry;
+			entry = entry.next;
+			currentKey = nextKey;
+			nextKey = null;
+			return lastReturned;
+		}
+
+		public void remove() {
+			if ( lastReturned == null )
+				throw new IllegalStateException();
+			if ( modCount != expectedModCount )
+				throw new ConcurrentModificationException();
+
+			WeakIdentityHashMap.this.remove( currentKey );
+			expectedModCount = modCount;
+			lastReturned = null;
+			currentKey = null;
+		}
+
+	}
+
+	private class ValueIterator extends HashIterator {
+		public Object next() {
+			return nextEntry().value;
+		}
+	}
+
+	private class KeyIterator extends HashIterator {
+		public Object next() {
+			return nextEntry().getKey();
+		}
+	}
+
+	private class EntryIterator extends HashIterator<Map.Entry<K,V>> {
+		public Map.Entry<K,V> next() {
+			return nextEntry();
+		}
+	}
+
+	// Views
+
+	private transient Set<Map.Entry<K,V>> entrySet = null;
+
+	/**
+	 * Returns a set view of the keys contained in this map.  The set is
+	 * backed by the map, so changes to the map are reflected in the set, and
+	 * vice-versa.  The set supports element removal, which removes the
+	 * corresponding mapping from this map, via the <tt>Iterator.remove</tt>,
+	 * <tt>Set.remove</tt>, <tt>removeAll</tt>, <tt>retainAll</tt>, and
+	 * <tt>clear</tt> operations.  It does not support the <tt>add</tt> or
+	 * <tt>addAll</tt> operations.
+	 *
+	 * @return a set view of the keys contained in this map.
+	 */
+	public Set keySet() {
+		Set ks = keySet;
+		return ( ks != null ?
+				ks :
+				( keySet = new KeySet() ) );
+	}
+
+	private class KeySet extends AbstractSet {
+		public Iterator iterator() {
+			return new KeyIterator();
+		}
+
+		public int size() {
+			return WeakIdentityHashMap.this.size();
+		}
+
+		public boolean contains(Object o) {
+			return containsKey( o );
+		}
+
+		public boolean remove(Object o) {
+			if ( containsKey( o ) ) {
+				WeakIdentityHashMap.this.remove( o );
+				return true;
+			}
+			else
+				return false;
+		}
+
+		public void clear() {
+			WeakIdentityHashMap.this.clear();
+		}
+
+		public Object[] toArray() {
+			Collection c = new ArrayList( size() );
+			for ( Iterator i = iterator(); i.hasNext(); )
+				c.add( i.next() );
+			return c.toArray();
+		}
+
+		public Object[] toArray(Object a[]) {
+			Collection c = new ArrayList( size() );
+			for ( Iterator i = iterator(); i.hasNext(); )
+				c.add( i.next() );
+			return c.toArray( a );
+		}
+	}
+
+	/**
+	 * Returns a collection view of the values contained in this map.  The
+	 * collection is backed by the map, so changes to the map are reflected in
+	 * the collection, and vice-versa.  The collection supports element
+	 * removal, which removes the corresponding mapping from this map, via the
+	 * <tt>Iterator.remove</tt>, <tt>Collection.remove</tt>,
+	 * <tt>removeAll</tt>, <tt>retainAll</tt>, and <tt>clear</tt> operations.
+	 * It does not support the <tt>add</tt> or <tt>addAll</tt> operations.
+	 *
+	 * @return a collection view of the values contained in this map.
+	 */
+	public Collection values() {
+		Collection vs = values;
+		return ( vs != null ?
+				vs :
+				( values = new Values() ) );
+	}
+
+	private class Values extends AbstractCollection {
+		public Iterator iterator() {
+			return new ValueIterator();
+		}
+
+		public int size() {
+			return WeakIdentityHashMap.this.size();
+		}
+
+		public boolean contains(Object o) {
+			return containsValue( o );
+		}
+
+		public void clear() {
+			WeakIdentityHashMap.this.clear();
+		}
+
+		public Object[] toArray() {
+			Collection c = new ArrayList( size() );
+			for ( Iterator i = iterator(); i.hasNext(); )
+				c.add( i.next() );
+			return c.toArray();
+		}
+
+		public Object[] toArray(Object a[]) {
+			Collection c = new ArrayList( size() );
+			for ( Iterator i = iterator(); i.hasNext(); )
+				c.add( i.next() );
+			return c.toArray( a );
+		}
+	}
+
+	/**
+	 * Returns a collection view of the mappings contained in this map.  Each
+	 * element in the returned collection is a <tt>Map.Entry</tt>.  The
+	 * collection is backed by the map, so changes to the map are reflected in
+	 * the collection, and vice-versa.  The collection supports element
+	 * removal, which removes the corresponding mapping from the map, via the
+	 * <tt>Iterator.remove</tt>, <tt>Collection.remove</tt>,
+	 * <tt>removeAll</tt>, <tt>retainAll</tt>, and <tt>clear</tt> operations.
+	 * It does not support the <tt>add</tt> or <tt>addAll</tt> operations.
+	 *
+	 * @return a collection view of the mappings contained in this map.
+	 * @see java.util.Map.Entry
+	 */
+	public Set<Map.Entry<K,V>> entrySet() {
+		Set<Map.Entry<K,V>> es = entrySet;
+		return ( es != null ?
+				es :
+				( entrySet = new EntrySet() ) );
+	}
+
+	private class EntrySet extends AbstractSet<Map.Entry<K,V>> {
+		public Iterator<Map.Entry<K,V>> iterator() {
+			return new EntryIterator();
+		}
+
+		public boolean contains(Object o) {
+			if ( !( o instanceof Map.Entry ) )
+				return false;
+			Map.Entry e = (Map.Entry) o;
+			Object k = e.getKey();
+			Entry candidate = getEntry( e.getKey() );
+			return candidate != null && candidate.equals( e );
+		}
+
+		public boolean remove(Object o) {
+			return removeMapping( o ) != null;
+		}
+
+		public int size() {
+			return WeakIdentityHashMap.this.size();
+		}
+
+		public void clear() {
+			WeakIdentityHashMap.this.clear();
+		}
+
+		public Object[] toArray() {
+			Collection c = new ArrayList( size() );
+			for ( Iterator i = iterator(); i.hasNext(); )
+				c.add( new SimpleEntry( (Map.Entry) i.next() ) );
+			return c.toArray();
+		}
+
+		public Object[] toArray(Object a[]) {
+			Collection c = new ArrayList( size() );
+			for ( Iterator i = iterator(); i.hasNext(); )
+				c.add( new SimpleEntry( (Map.Entry) i.next() ) );
+			return c.toArray( a );
+		}
+	}
+
+	static class SimpleEntry implements Map.Entry {
+		Object key;
+		Object value;
+
+		public SimpleEntry(Object key, Object value) {
+			this.key = key;
+			this.value = value;
+		}
+
+		public SimpleEntry(Map.Entry e) {
+			this.key = e.getKey();
+			this.value = e.getValue();
+		}
+
+		public Object getKey() {
+			return key;
+		}
+
+		public Object getValue() {
+			return value;
+		}
+
+		public Object setValue(Object value) {
+			Object oldValue = this.value;
+			this.value = value;
+			return oldValue;
+		}
+
+		public boolean equals(Object o) {
+			if ( !( o instanceof Map.Entry ) )
+				return false;
+			Map.Entry e = (Map.Entry) o;
+			return eq( key, e.getKey() ) && eq( value, e.getValue() );
+		}
+
+		public int hashCode() {
+			Object v;
+			return ( ( key == null ) ?
+					0 :
+					key.hashCode() ) ^
+					( ( value == null ) ?
+							0 :
+							value.hashCode() );
+		}
+
+		public String toString() {
+			return key + "=" + value;
+		}
+
+		private static boolean eq(Object o1, Object o2) {
+			return ( o1 == null ?
+					o2 == null :
+					o1.equals( o2 ) );
+		}
+	}
+
+}

Copied: trunk/HibernateExt/search/src/test (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test)

Deleted: trunk/HibernateExt/search/src/test/hibernate.properties
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/test/hibernate.properties	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/test/hibernate.properties	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,472 +0,0 @@
-######################
-### Query Language ###
-######################
-
-## define query language constants / function names
-
-hibernate.query.substitutions true 1, false 0, yes 'Y', no 'N'
-
-
-## select the classic query parser
-
-#hibernate.query.factory_class org.hibernate.hql.classic.ClassicQueryTranslatorFactory
-
-hibernate.format_sql true
-
-
-
-#################
-### Platforms ###
-#################
-
-## JNDI Datasource
-
-#hibernate.connection.datasource jdbc/test
-#hibernate.connection.username db2
-#hibernate.connection.password db2
-
-
-## HypersonicSQL
-
-hibernate.dialect org.hibernate.dialect.HSQLDialect
-hibernate.connection.driver_class org.hsqldb.jdbcDriver
-hibernate.connection.username sa
-hibernate.connection.password
-#hibernate.connection.url jdbc:hsqldb:hsql://localhost
-#hibernate.connection.url jdbc:hsqldb:test
-hibernate.connection.url jdbc:hsqldb:mem:common
-
-
-## MySQL
-
-#hibernate.dialect org.hibernate.dialect.MySQLDialect
-#hibernate.dialect org.hibernate.dialect.MySQLInnoDBDialect
-#hibernate.dialect org.hibernate.dialect.MySQLMyISAMDialect
-#hibernate.connection.driver_class com.mysql.jdbc.Driver
-#hibernate.connection.url jdbc:mysql:///test
-#hibernate.connection.username emmanuel
-#hibernate.connection.password
-
-
-## Oracle
-
-#hibernate.dialect org.hibernate.dialect.OracleDialect
-#hibernate.dialect org.hibernate.dialect.Oracle9Dialect
-#hibernate.connection.driver_class oracle.jdbc.driver.OracleDriver
-#hibernate.connection.username ora
-#hibernate.connection.password ora
-#hibernate.connection.url jdbc:oracle:thin:@localhost:1521:test
-
-
-## PostgreSQL
-
-#hibernate.dialect org.hibernate.dialect.PostgreSQLDialect
-#hibernate.connection.driver_class org.postgresql.Driver
-#hibernate.connection.url jdbc:postgresql:annotations
-#hibernate.connection.username postgres
-#hibernate.connection.password hibernate
-#hibernate.query.substitutions yes 'Y', no 'N'
-
-
-## DB2
-
-#hibernate.dialect org.hibernate.dialect.DB2Dialect
-#hibernate.connection.driver_class COM.ibm.db2.jdbc.app.DB2Driver
-#hibernate.connection.url jdbc:db2:test
-#hibernate.connection.username db2
-#hibernate.connection.password db2
-
-## TimesTen (not supported yet)
-
-#hibernate.dialect org.hibernate.dialect.TimesTenDialect
-#hibernate.connection.driver_class com.timesten.jdbc.TimesTenDriver
-#hibernate.connection.url jdbc:timesten:direct:test
-#hibernate.connection.username
-#hibernate.connection.password 
-
-## DB2/400
-
-#hibernate.dialect org.hibernate.dialect.DB2400Dialect
-#hibernate.connection.username user
-#hibernate.connection.password password
-
-## Native driver
-#hibernate.connection.driver_class COM.ibm.db2.jdbc.app.DB2Driver
-#hibernate.connection.url jdbc:db2://systemname
-
-## Toolbox driver
-#hibernate.connection.driver_class com.ibm.as400.access.AS400JDBCDriver
-#hibernate.connection.url jdbc:as400://systemname
-
-
-## Derby (Not supported!)
-
-#hibernate.dialect org.hibernate.dialect.DerbyDialect
-#hibernate.connection.driver_class org.apache.derby.jdbc.EmbeddedDriver
-#hibernate.connection.username
-#hibernate.connection.password
-#hibernate.connection.url jdbc:derby:/test;create=true
-
-
-## Sybase
-
-#hibernate.dialect org.hibernate.dialect.SybaseDialect
-#hibernate.connection.driver_class com.sybase.jdbc2.jdbc.SybDriver
-#hibernate.connection.username sa
-#hibernate.connection.password sasasa
-#hibernate.connection.url jdbc:sybase:Tds:co3061835-a:5000/tempdb
-
-
-## Mckoi SQL
-
-#hibernate.dialect org.hibernate.dialect.MckoiDialect
-#hibernate.connection.driver_class com.mckoi.JDBCDriver
-#hibernate.connection.url jdbc:mckoi:///
-#hibernate.connection.url jdbc:mckoi:local://C:/mckoi1.00/db.conf
-#hibernate.connection.username admin
-#hibernate.connection.password nimda
-
-
-## SAP DB
-
-#hibernate.dialect org.hibernate.dialect.SAPDBDialect
-#hibernate.connection.driver_class com.sap.dbtech.jdbc.DriverSapDB
-#hibernate.connection.url jdbc:sapdb://localhost/TST
-#hibernate.connection.username TEST
-#hibernate.connection.password TEST
-#hibernate.query.substitutions yes 'Y', no 'N'
-
-
-## MS SQL Server
-
-#hibernate.dialect org.hibernate.dialect.SQLServerDialect
-#hibernate.connection.username sa
-#hibernate.connection.password sa
-
-## JSQL Driver
-#hibernate.connection.driver_class com.jnetdirect.jsql.JSQLDriver
-#hibernate.connection.url jdbc:JSQLConnect://1E1/test
-
-## JTURBO Driver
-#hibernate.connection.driver_class com.newatlanta.jturbo.driver.Driver
-#hibernate.connection.url jdbc:JTurbo://1E1:1433/test
-
-## WebLogic Driver
-#hibernate.connection.driver_class weblogic.jdbc.mssqlserver4.Driver
-#hibernate.connection.url jdbc:weblogic:mssqlserver4:1E1:1433
-
-## Microsoft Driver (not recommended!)
-#hibernate.connection.driver_class com.microsoft.jdbc.sqlserver.SQLServerDriver
-#hibernate.connection.url jdbc:microsoft:sqlserver://1E1;DatabaseName=test;SelectMethod=cursor
-
-## jTDS (since version 0.9)
-#hibernate.connection.driver_class net.sourceforge.jtds.jdbc.Driver
-#hibernate.connection.url jdbc:jtds:sqlserver://1E1/test
-
-## Interbase
-
-#hibernate.dialect org.hibernate.dialect.InterbaseDialect
-#hibernate.connection.username sysdba
-#hibernate.connection.password masterkey
-
-## DO NOT specify hibernate.connection.sqlDialect
-
-## InterClient
-
-#hibernate.connection.driver_class interbase.interclient.Driver
-#hibernate.connection.url jdbc:interbase://localhost:3060/C:/firebird/test.gdb
-
-## Pure Java
-
-#hibernate.connection.driver_class org.firebirdsql.jdbc.FBDriver
-#hibernate.connection.url jdbc:firebirdsql:localhost/3050:/firebird/test.gdb
-
-
-## Pointbase
-
-#hibernate.dialect org.hibernate.dialect.PointbaseDialect
-#hibernate.connection.driver_class com.pointbase.jdbc.jdbcUniversalDriver
-#hibernate.connection.url jdbc:pointbase:embedded:sample
-#hibernate.connection.username PBPUBLIC
-#hibernate.connection.password PBPUBLIC
-
-
-
-#################################
-### Hibernate Connection Pool ###
-#################################
-
-hibernate.connection.pool_size 1
-
-
-
-###########################
-### C3P0 Connection Pool###
-###########################
-
-#hibernate.c3p0.max_size 2
-#hibernate.c3p0.min_size 2
-#hibernate.c3p0.timeout 5000
-#hibernate.c3p0.max_statements 100
-#hibernate.c3p0.idle_test_period 3000
-#hibernate.c3p0.acquire_increment 2
-#hibernate.c3p0.validate false
-
-
-
-##############################
-### Proxool Connection Pool###
-##############################
-
-## Properties for external configuration of Proxool
-
-hibernate.proxool.pool_alias pool1
-
-## Only need one of the following
-
-#hibernate.proxool.existing_pool true
-#hibernate.proxool.xml proxool.xml
-#hibernate.proxool.properties proxool.properties
-
-
-
-#################################
-### Plugin ConnectionProvider ###
-#################################
-
-## use a custom ConnectionProvider (if not set, Hibernate will choose a built-in ConnectionProvider using hueristics)
-
-#hibernate.connection.provider_class org.hibernate.connection.DriverManagerConnectionProvider
-#hibernate.connection.provider_class org.hibernate.connection.DatasourceConnectionProvider
-#hibernate.connection.provider_class org.hibernate.connection.C3P0ConnectionProvider
-#hibernate.connection.provider_class org.hibernate.connection.DBCPConnectionProvider
-#hibernate.connection.provider_class org.hibernate.connection.ProxoolConnectionProvider
-
-
-
-#######################
-### Transaction API ###
-#######################
-
-## Enable automatic flush during the JTA beforeCompletion() callback
-## (This setting is relevant with or without the Transaction API)
-
-#hibernate.transaction.flush_before_completion
-
-
-## Enable automatic session close at the end of transaction
-## (This setting is relevant with or without the Transaction API)
-
-#hibernate.transaction.auto_close_session
-
-
-## the Transaction API abstracts application code from the underlying JTA or JDBC transactions
-
-#hibernate.transaction.factory_class org.hibernate.transaction.JTATransactionFactory
-#hibernate.transaction.factory_class org.hibernate.transaction.JDBCTransactionFactory
-
-
-## to use JTATransactionFactory, Hibernate must be able to locate the UserTransaction in JNDI
-## default is java:comp/UserTransaction
-## you do NOT need this setting if you specify hibernate.transaction.manager_lookup_class
-
-#jta.UserTransaction jta/usertransaction
-#jta.UserTransaction javax.transaction.UserTransaction
-#jta.UserTransaction UserTransaction
-
-
-## to use the second-level cache with JTA, Hibernate must be able to obtain the JTA TransactionManager
-
-#hibernate.transaction.manager_lookup_class org.hibernate.transaction.JBossTransactionManagerLookup
-#hibernate.transaction.manager_lookup_class org.hibernate.transaction.WeblogicTransactionManagerLookup
-#hibernate.transaction.manager_lookup_class org.hibernate.transaction.WebSphereTransactionManagerLookup
-#hibernate.transaction.manager_lookup_class org.hibernate.transaction.OrionTransactionManagerLookup
-#hibernate.transaction.manager_lookup_class org.hibernate.transaction.ResinTransactionManagerLookup
-
-
-
-##############################
-### Miscellaneous Settings ###
-##############################
-
-## print all generated SQL to the console
-
-#hibernate.show_sql true
-
-
-## add comments to the generated SQL
-
-#hibernate.use_sql_comments true
-
-
-## generate statistics
-
-#hibernate.generate_statistics true
-
-
-## auto schema export
-
-#hibernate.hbm2ddl.auto create-drop
-#hibernate.hbm2ddl.auto create
-#hibernate.hbm2ddl.auto update
-
-
-## specify a default schema and catalog for unqualified tablenames
-
-#hibernate.default_schema test
-#hibernate.default_catalog test
-
-
-## enable ordering of SQL UPDATEs by primary key
-
-hibernate.order_updates true
-
-
-## set the maximum depth of the outer join fetch tree
-
-hibernate.max_fetch_depth 1
-
-
-## set the default batch size for batch fetching
-
-hibernate.default_batch_fetch_size 100
-
-
-## rollback generated identifier values of deleted entities to default values
-
-#hibernate.use_identifer_rollback true
-
-
-## enable CGLIB reflection optimizer (enabled by default)
-
-#hibernate.cglib.use_reflection_optimizer false
-
-
-
-#####################
-### JDBC Settings ###
-#####################
-
-## specify a JDBC isolation level
-
-#hibernate.connection.isolation 4
-
-
-## enable JDBC autocommit (not recommended!)
-
-#hibernate.connection.autocommit true
-
-
-## set the JDBC fetch size
-
-#hibernate.jdbc.fetch_size 25
-
-
-## set the maximum JDBC 2 batch size (a nonzero value enables batching)
-
-#hibernate.jdbc.batch_size 0
-
-
-## enable batch updates even for versioned data
-
-hibernate.jdbc.batch_versioned_data true
-
-
-## enable use of JDBC 2 scrollable ResultSets (specifying a Dialect will cause Hibernate to use a sensible default)
-
-#hibernate.jdbc.use_scrollable_resultset true
-
-
-## use streams when writing binary types to / from JDBC
-
-hibernate.jdbc.use_streams_for_binary true
-
-
-## use JDBC 3 PreparedStatement.getGeneratedKeys() to get the identifier of an inserted row
-
-#hibernate.jdbc.use_get_generated_keys false
-
-
-## choose a custom JDBC batcher
-
-# hibernate.jdbc.factory_class
-
-
-## enable JDBC result set column alias caching 
-## (minor performance enhancement for broken JDBC drivers)
-
-# hibernate.jdbc.wrap_result_sets
-
-
-## choose a custom SQL exception converter
-
-#hibernate.jdbc.sql_exception_converter
-
-
-
-##########################
-### Second-level Cache ###
-##########################
-
-## optimize chache for minimal "puts" instead of minimal "gets" (good for clustered cache)
-
-#hibernate.cache.use_minimal_puts true
-
-
-## set a prefix for cache region names
-
-hibernate.cache.region_prefix hibernate.test
-
-
-## disable the second-level cache
-
-#hibernate.cache.use_second_level_cache false
-
-
-## enable the query cache
-
-hibernate.cache.use_query_cache true
-
-
-## store the second-level cache entries in a more human-friendly format
-
-#hibernate.cache.use_structured_entries true
-
-
-## choose a cache implementation
-
-#hibernate.cache.provider_class org.hibernate.cache.EhCacheProvider
-#hibernate.cache.provider_class org.hibernate.cache.EmptyCacheProvider
-hibernate.cache.provider_class org.hibernate.cache.HashtableCacheProvider
-#hibernate.cache.provider_class org.hibernate.cache.TreeCacheProvider
-#hibernate.cache.provider_class org.hibernate.cache.OSCacheProvider
-#hibernate.cache.provider_class org.hibernate.cache.SwarmCacheProvider
-
-
-## choose a custom query cache implementation
-
-#hibernate.cache.query_cache_factory
-
-
-
-############
-### JNDI ###
-############
-
-## specify a JNDI name for the SessionFactory
-
-#hibernate.session_factory_name hibernate/session_factory
-
-
-## Hibernate uses JNDI to bind a name to a SessionFactory and to look up the JTA UserTransaction;
-## if hibernate.jndi.* are not specified, Hibernate will use the default InitialContext() which
-## is the best approach in an application server
-
-#file system
-#hibernate.jndi.class com.sun.jndi.fscontext.RefFSContextFactory
-#hibernate.jndi.url file:/
-
-#WebSphere
-#hibernate.jndi.class com.ibm.websphere.naming.WsnInitialContextFactory
-#hibernate.jndi.url iiop://localhost:900/
-

Copied: trunk/HibernateExt/search/src/test/hibernate.properties (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/hibernate.properties)
===================================================================
--- trunk/HibernateExt/search/src/test/hibernate.properties	                        (rev 0)
+++ trunk/HibernateExt/search/src/test/hibernate.properties	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,472 @@
+######################
+### Query Language ###
+######################
+
+## define query language constants / function names
+
+hibernate.query.substitutions true 1, false 0, yes 'Y', no 'N'
+
+
+## select the classic query parser
+
+#hibernate.query.factory_class org.hibernate.hql.classic.ClassicQueryTranslatorFactory
+
+hibernate.format_sql true
+
+
+
+#################
+### Platforms ###
+#################
+
+## JNDI Datasource
+
+#hibernate.connection.datasource jdbc/test
+#hibernate.connection.username db2
+#hibernate.connection.password db2
+
+
+## HypersonicSQL
+
+hibernate.dialect org.hibernate.dialect.HSQLDialect
+hibernate.connection.driver_class org.hsqldb.jdbcDriver
+hibernate.connection.username sa
+hibernate.connection.password
+#hibernate.connection.url jdbc:hsqldb:hsql://localhost
+#hibernate.connection.url jdbc:hsqldb:test
+hibernate.connection.url jdbc:hsqldb:mem:common
+
+
+## MySQL
+
+#hibernate.dialect org.hibernate.dialect.MySQLDialect
+#hibernate.dialect org.hibernate.dialect.MySQLInnoDBDialect
+#hibernate.dialect org.hibernate.dialect.MySQLMyISAMDialect
+#hibernate.connection.driver_class com.mysql.jdbc.Driver
+#hibernate.connection.url jdbc:mysql:///test
+#hibernate.connection.username emmanuel
+#hibernate.connection.password
+
+
+## Oracle
+
+#hibernate.dialect org.hibernate.dialect.OracleDialect
+#hibernate.dialect org.hibernate.dialect.Oracle9Dialect
+#hibernate.connection.driver_class oracle.jdbc.driver.OracleDriver
+#hibernate.connection.username ora
+#hibernate.connection.password ora
+#hibernate.connection.url jdbc:oracle:thin:@localhost:1521:test
+
+
+## PostgreSQL
+
+#hibernate.dialect org.hibernate.dialect.PostgreSQLDialect
+#hibernate.connection.driver_class org.postgresql.Driver
+#hibernate.connection.url jdbc:postgresql:annotations
+#hibernate.connection.username postgres
+#hibernate.connection.password hibernate
+#hibernate.query.substitutions yes 'Y', no 'N'
+
+
+## DB2
+
+#hibernate.dialect org.hibernate.dialect.DB2Dialect
+#hibernate.connection.driver_class COM.ibm.db2.jdbc.app.DB2Driver
+#hibernate.connection.url jdbc:db2:test
+#hibernate.connection.username db2
+#hibernate.connection.password db2
+
+## TimesTen (not supported yet)
+
+#hibernate.dialect org.hibernate.dialect.TimesTenDialect
+#hibernate.connection.driver_class com.timesten.jdbc.TimesTenDriver
+#hibernate.connection.url jdbc:timesten:direct:test
+#hibernate.connection.username
+#hibernate.connection.password 
+
+## DB2/400
+
+#hibernate.dialect org.hibernate.dialect.DB2400Dialect
+#hibernate.connection.username user
+#hibernate.connection.password password
+
+## Native driver
+#hibernate.connection.driver_class COM.ibm.db2.jdbc.app.DB2Driver
+#hibernate.connection.url jdbc:db2://systemname
+
+## Toolbox driver
+#hibernate.connection.driver_class com.ibm.as400.access.AS400JDBCDriver
+#hibernate.connection.url jdbc:as400://systemname
+
+
+## Derby (Not supported!)
+
+#hibernate.dialect org.hibernate.dialect.DerbyDialect
+#hibernate.connection.driver_class org.apache.derby.jdbc.EmbeddedDriver
+#hibernate.connection.username
+#hibernate.connection.password
+#hibernate.connection.url jdbc:derby:/test;create=true
+
+
+## Sybase
+
+#hibernate.dialect org.hibernate.dialect.SybaseDialect
+#hibernate.connection.driver_class com.sybase.jdbc2.jdbc.SybDriver
+#hibernate.connection.username sa
+#hibernate.connection.password sasasa
+#hibernate.connection.url jdbc:sybase:Tds:co3061835-a:5000/tempdb
+
+
+## Mckoi SQL
+
+#hibernate.dialect org.hibernate.dialect.MckoiDialect
+#hibernate.connection.driver_class com.mckoi.JDBCDriver
+#hibernate.connection.url jdbc:mckoi:///
+#hibernate.connection.url jdbc:mckoi:local://C:/mckoi1.00/db.conf
+#hibernate.connection.username admin
+#hibernate.connection.password nimda
+
+
+## SAP DB
+
+#hibernate.dialect org.hibernate.dialect.SAPDBDialect
+#hibernate.connection.driver_class com.sap.dbtech.jdbc.DriverSapDB
+#hibernate.connection.url jdbc:sapdb://localhost/TST
+#hibernate.connection.username TEST
+#hibernate.connection.password TEST
+#hibernate.query.substitutions yes 'Y', no 'N'
+
+
+## MS SQL Server
+
+#hibernate.dialect org.hibernate.dialect.SQLServerDialect
+#hibernate.connection.username sa
+#hibernate.connection.password sa
+
+## JSQL Driver
+#hibernate.connection.driver_class com.jnetdirect.jsql.JSQLDriver
+#hibernate.connection.url jdbc:JSQLConnect://1E1/test
+
+## JTURBO Driver
+#hibernate.connection.driver_class com.newatlanta.jturbo.driver.Driver
+#hibernate.connection.url jdbc:JTurbo://1E1:1433/test
+
+## WebLogic Driver
+#hibernate.connection.driver_class weblogic.jdbc.mssqlserver4.Driver
+#hibernate.connection.url jdbc:weblogic:mssqlserver4:1E1:1433
+
+## Microsoft Driver (not recommended!)
+#hibernate.connection.driver_class com.microsoft.jdbc.sqlserver.SQLServerDriver
+#hibernate.connection.url jdbc:microsoft:sqlserver://1E1;DatabaseName=test;SelectMethod=cursor
+
+## jTDS (since version 0.9)
+#hibernate.connection.driver_class net.sourceforge.jtds.jdbc.Driver
+#hibernate.connection.url jdbc:jtds:sqlserver://1E1/test
+
+## Interbase
+
+#hibernate.dialect org.hibernate.dialect.InterbaseDialect
+#hibernate.connection.username sysdba
+#hibernate.connection.password masterkey
+
+## DO NOT specify hibernate.connection.sqlDialect
+
+## InterClient
+
+#hibernate.connection.driver_class interbase.interclient.Driver
+#hibernate.connection.url jdbc:interbase://localhost:3060/C:/firebird/test.gdb
+
+## Pure Java
+
+#hibernate.connection.driver_class org.firebirdsql.jdbc.FBDriver
+#hibernate.connection.url jdbc:firebirdsql:localhost/3050:/firebird/test.gdb
+
+
+## Pointbase
+
+#hibernate.dialect org.hibernate.dialect.PointbaseDialect
+#hibernate.connection.driver_class com.pointbase.jdbc.jdbcUniversalDriver
+#hibernate.connection.url jdbc:pointbase:embedded:sample
+#hibernate.connection.username PBPUBLIC
+#hibernate.connection.password PBPUBLIC
+
+
+
+#################################
+### Hibernate Connection Pool ###
+#################################
+
+hibernate.connection.pool_size 1
+
+
+
+###########################
+### C3P0 Connection Pool###
+###########################
+
+#hibernate.c3p0.max_size 2
+#hibernate.c3p0.min_size 2
+#hibernate.c3p0.timeout 5000
+#hibernate.c3p0.max_statements 100
+#hibernate.c3p0.idle_test_period 3000
+#hibernate.c3p0.acquire_increment 2
+#hibernate.c3p0.validate false
+
+
+
+##############################
+### Proxool Connection Pool###
+##############################
+
+## Properties for external configuration of Proxool
+
+hibernate.proxool.pool_alias pool1
+
+## Only need one of the following
+
+#hibernate.proxool.existing_pool true
+#hibernate.proxool.xml proxool.xml
+#hibernate.proxool.properties proxool.properties
+
+
+
+#################################
+### Plugin ConnectionProvider ###
+#################################
+
+## use a custom ConnectionProvider (if not set, Hibernate will choose a built-in ConnectionProvider using hueristics)
+
+#hibernate.connection.provider_class org.hibernate.connection.DriverManagerConnectionProvider
+#hibernate.connection.provider_class org.hibernate.connection.DatasourceConnectionProvider
+#hibernate.connection.provider_class org.hibernate.connection.C3P0ConnectionProvider
+#hibernate.connection.provider_class org.hibernate.connection.DBCPConnectionProvider
+#hibernate.connection.provider_class org.hibernate.connection.ProxoolConnectionProvider
+
+
+
+#######################
+### Transaction API ###
+#######################
+
+## Enable automatic flush during the JTA beforeCompletion() callback
+## (This setting is relevant with or without the Transaction API)
+
+#hibernate.transaction.flush_before_completion
+
+
+## Enable automatic session close at the end of transaction
+## (This setting is relevant with or without the Transaction API)
+
+#hibernate.transaction.auto_close_session
+
+
+## the Transaction API abstracts application code from the underlying JTA or JDBC transactions
+
+#hibernate.transaction.factory_class org.hibernate.transaction.JTATransactionFactory
+#hibernate.transaction.factory_class org.hibernate.transaction.JDBCTransactionFactory
+
+
+## to use JTATransactionFactory, Hibernate must be able to locate the UserTransaction in JNDI
+## default is java:comp/UserTransaction
+## you do NOT need this setting if you specify hibernate.transaction.manager_lookup_class
+
+#jta.UserTransaction jta/usertransaction
+#jta.UserTransaction javax.transaction.UserTransaction
+#jta.UserTransaction UserTransaction
+
+
+## to use the second-level cache with JTA, Hibernate must be able to obtain the JTA TransactionManager
+
+#hibernate.transaction.manager_lookup_class org.hibernate.transaction.JBossTransactionManagerLookup
+#hibernate.transaction.manager_lookup_class org.hibernate.transaction.WeblogicTransactionManagerLookup
+#hibernate.transaction.manager_lookup_class org.hibernate.transaction.WebSphereTransactionManagerLookup
+#hibernate.transaction.manager_lookup_class org.hibernate.transaction.OrionTransactionManagerLookup
+#hibernate.transaction.manager_lookup_class org.hibernate.transaction.ResinTransactionManagerLookup
+
+
+
+##############################
+### Miscellaneous Settings ###
+##############################
+
+## print all generated SQL to the console
+
+#hibernate.show_sql true
+
+
+## add comments to the generated SQL
+
+#hibernate.use_sql_comments true
+
+
+## generate statistics
+
+#hibernate.generate_statistics true
+
+
+## auto schema export
+
+#hibernate.hbm2ddl.auto create-drop
+#hibernate.hbm2ddl.auto create
+#hibernate.hbm2ddl.auto update
+
+
+## specify a default schema and catalog for unqualified tablenames
+
+#hibernate.default_schema test
+#hibernate.default_catalog test
+
+
+## enable ordering of SQL UPDATEs by primary key
+
+hibernate.order_updates true
+
+
+## set the maximum depth of the outer join fetch tree
+
+hibernate.max_fetch_depth 1
+
+
+## set the default batch size for batch fetching
+
+hibernate.default_batch_fetch_size 100
+
+
+## rollback generated identifier values of deleted entities to default values
+
+#hibernate.use_identifer_rollback true
+
+
+## enable CGLIB reflection optimizer (enabled by default)
+
+#hibernate.cglib.use_reflection_optimizer false
+
+
+
+#####################
+### JDBC Settings ###
+#####################
+
+## specify a JDBC isolation level
+
+#hibernate.connection.isolation 4
+
+
+## enable JDBC autocommit (not recommended!)
+
+#hibernate.connection.autocommit true
+
+
+## set the JDBC fetch size
+
+#hibernate.jdbc.fetch_size 25
+
+
+## set the maximum JDBC 2 batch size (a nonzero value enables batching)
+
+#hibernate.jdbc.batch_size 0
+
+
+## enable batch updates even for versioned data
+
+hibernate.jdbc.batch_versioned_data true
+
+
+## enable use of JDBC 2 scrollable ResultSets (specifying a Dialect will cause Hibernate to use a sensible default)
+
+#hibernate.jdbc.use_scrollable_resultset true
+
+
+## use streams when writing binary types to / from JDBC
+
+hibernate.jdbc.use_streams_for_binary true
+
+
+## use JDBC 3 PreparedStatement.getGeneratedKeys() to get the identifier of an inserted row
+
+#hibernate.jdbc.use_get_generated_keys false
+
+
+## choose a custom JDBC batcher
+
+# hibernate.jdbc.factory_class
+
+
+## enable JDBC result set column alias caching 
+## (minor performance enhancement for broken JDBC drivers)
+
+# hibernate.jdbc.wrap_result_sets
+
+
+## choose a custom SQL exception converter
+
+#hibernate.jdbc.sql_exception_converter
+
+
+
+##########################
+### Second-level Cache ###
+##########################
+
+## optimize chache for minimal "puts" instead of minimal "gets" (good for clustered cache)
+
+#hibernate.cache.use_minimal_puts true
+
+
+## set a prefix for cache region names
+
+hibernate.cache.region_prefix hibernate.test
+
+
+## disable the second-level cache
+
+#hibernate.cache.use_second_level_cache false
+
+
+## enable the query cache
+
+hibernate.cache.use_query_cache true
+
+
+## store the second-level cache entries in a more human-friendly format
+
+#hibernate.cache.use_structured_entries true
+
+
+## choose a cache implementation
+
+#hibernate.cache.provider_class org.hibernate.cache.EhCacheProvider
+#hibernate.cache.provider_class org.hibernate.cache.EmptyCacheProvider
+hibernate.cache.provider_class org.hibernate.cache.HashtableCacheProvider
+#hibernate.cache.provider_class org.hibernate.cache.TreeCacheProvider
+#hibernate.cache.provider_class org.hibernate.cache.OSCacheProvider
+#hibernate.cache.provider_class org.hibernate.cache.SwarmCacheProvider
+
+
+## choose a custom query cache implementation
+
+#hibernate.cache.query_cache_factory
+
+
+
+############
+### JNDI ###
+############
+
+## specify a JNDI name for the SessionFactory
+
+#hibernate.session_factory_name hibernate/session_factory
+
+
+## Hibernate uses JNDI to bind a name to a SessionFactory and to look up the JTA UserTransaction;
+## if hibernate.jndi.* are not specified, Hibernate will use the default InitialContext() which
+## is the best approach in an application server
+
+#file system
+#hibernate.jndi.class com.sun.jndi.fscontext.RefFSContextFactory
+#hibernate.jndi.url file:/
+
+#WebSphere
+#hibernate.jndi.class com.ibm.websphere.naming.WsnInitialContextFactory
+#hibernate.jndi.url iiop://localhost:900/
+

Deleted: trunk/HibernateExt/search/src/test/log4j.properties
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/test/log4j.properties	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/test/log4j.properties	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,48 +0,0 @@
-### direct log messages to stdout ###
-log4j.appender.stdout=org.apache.log4j.ConsoleAppender
-log4j.appender.stdout.Target=System.out
-log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
-log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
-
-### direct messages to file hibernate.log ###
-#log4j.appender.file=org.apache.log4j.FileAppender
-#log4j.appender.file.File=hibernate.log
-#log4j.appender.file.layout=org.apache.log4j.PatternLayout
-#log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
-
-### set log levels - for more verbose logging change 'info' to 'debug' ###
-
-log4j.rootLogger=warn, stdout
-log4j.logger.org.jboss=info
-#log4j.logger.com.jboss=debug
-
-log4j.logger.org.hibernate=info
-
-log4j.logger.org.hibernate.search=debug
-
-
-### log just the SQL
-log4j.logger.org.hibernate.SQL=debug
-
-#log4j.logger.org.hibernate.engine.CascadingAction=debug
-
-### log JDBC bind parameters ###
-#log4j.logger.org.hibernate.type=debug
-
-### log schema export/update ###
-log4j.logger.org.hibernate.tool.hbm2ddl=warn
-
-### log cache activity ###
-#log4j.logger.org.hibernate.cache=debug
-
-### enable the following line if you want to track down connection ###
-### leakages when using DriverManagerConnectionProvider ###
-#log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trace
-
-### annotation logs
-#log4j.logger.org.hibernate.annotation=info
-#log4j.logger.org.hibernate.cfg=info
-#log4j.logger.org.hibernate.cfg.SettingsFactory=info
-#log4j.logger.org.hibernate.cfg.AnnotationBinder=info
-#log4j.logger.org.hibernate.cfg.AnnotationConfiguration=info
-#log4j.logger.org.hibernate.cfg.Ejb3Column=info
\ No newline at end of file

Copied: trunk/HibernateExt/search/src/test/log4j.properties (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/log4j.properties)
===================================================================
--- trunk/HibernateExt/search/src/test/log4j.properties	                        (rev 0)
+++ trunk/HibernateExt/search/src/test/log4j.properties	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,48 @@
+### direct log messages to stdout ###
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.Target=System.out
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
+
+### direct messages to file hibernate.log ###
+#log4j.appender.file=org.apache.log4j.FileAppender
+#log4j.appender.file.File=hibernate.log
+#log4j.appender.file.layout=org.apache.log4j.PatternLayout
+#log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
+
+### set log levels - for more verbose logging change 'info' to 'debug' ###
+
+log4j.rootLogger=warn, stdout
+log4j.logger.org.jboss=info
+#log4j.logger.com.jboss=debug
+
+log4j.logger.org.hibernate=info
+
+log4j.logger.org.hibernate.search=debug
+
+
+### log just the SQL
+log4j.logger.org.hibernate.SQL=debug
+
+#log4j.logger.org.hibernate.engine.CascadingAction=debug
+
+### log JDBC bind parameters ###
+#log4j.logger.org.hibernate.type=debug
+
+### log schema export/update ###
+log4j.logger.org.hibernate.tool.hbm2ddl=warn
+
+### log cache activity ###
+#log4j.logger.org.hibernate.cache=debug
+
+### enable the following line if you want to track down connection ###
+### leakages when using DriverManagerConnectionProvider ###
+#log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trace
+
+### annotation logs
+#log4j.logger.org.hibernate.annotation=info
+#log4j.logger.org.hibernate.cfg=info
+#log4j.logger.org.hibernate.cfg.SettingsFactory=info
+#log4j.logger.org.hibernate.cfg.AnnotationBinder=info
+#log4j.logger.org.hibernate.cfg.AnnotationConfiguration=info
+#log4j.logger.org.hibernate.cfg.Ejb3Column=info
\ No newline at end of file

Copied: trunk/HibernateExt/search/src/test/org (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org)

Copied: trunk/HibernateExt/search/src/test/org/hibernate (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate)

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search)

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test)

Deleted: trunk/HibernateExt/search/src/test/org/hibernate/search/test/AlternateDocument.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/AlternateDocument.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/AlternateDocument.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,81 +0,0 @@
-//$Id: $
-package org.hibernate.search.test;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Lob;
-
-import org.hibernate.search.annotations.Indexed;
-import org.hibernate.search.annotations.DocumentId;
-import org.hibernate.search.annotations.Field;
-import org.hibernate.search.annotations.Store;
-import org.hibernate.search.annotations.Index;
-import org.hibernate.search.annotations.Boost;
-
-/**
- * Example of 2 entities mapped in the same index
- * @author Emmanuel Bernard
- */
- at Entity
- at Indexed(index = "Documents")
-public class AlternateDocument {
-	private Long id;
-	private String title;
-	private String summary;
-	private String text;
-
-	AlternateDocument() {
-	}
-
-	public AlternateDocument(Long id, String title, String summary, String text) {
-		super();
-		this.id = id;
-		this.summary = summary;
-		this.text = text;
-		this.title = title;
-	}
-
-	@Id
-	//@Keyword(id = true)
-	@DocumentId()
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-
-	//@Text
-	@Field( name = "alt_title", store = Store.YES, index = Index.TOKENIZED )
-	@Boost(2)
-	public String getTitle() {
-		return title;
-	}
-
-	public void setTitle(String title) {
-		this.title = title;
-	}
-
-	//@Unstored(name = "Abstract")
-	@Field( name="Abstract", store = Store.NO, index = Index.TOKENIZED )
-	public String getSummary() {
-		return summary;
-	}
-
-	public void setSummary(String summary) {
-		this.summary = summary;
-	}
-
-	@Lob
-	//@Unstored
-	@Field( store = Store.NO, index = Index.TOKENIZED )
-	public String getText() {
-		return text;
-	}
-
-	public void setText(String text) {
-		this.text = text;
-	}
-}
-

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/AlternateDocument.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/AlternateDocument.java)
===================================================================
--- trunk/HibernateExt/search/src/test/org/hibernate/search/test/AlternateDocument.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/AlternateDocument.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,81 @@
+//$Id: $
+package org.hibernate.search.test;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Lob;
+
+import org.hibernate.search.annotations.Indexed;
+import org.hibernate.search.annotations.DocumentId;
+import org.hibernate.search.annotations.Field;
+import org.hibernate.search.annotations.Store;
+import org.hibernate.search.annotations.Index;
+import org.hibernate.search.annotations.Boost;
+
+/**
+ * Example of 2 entities mapped in the same index
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Indexed(index = "Documents")
+public class AlternateDocument {
+	private Long id;
+	private String title;
+	private String summary;
+	private String text;
+
+	AlternateDocument() {
+	}
+
+	public AlternateDocument(Long id, String title, String summary, String text) {
+		super();
+		this.id = id;
+		this.summary = summary;
+		this.text = text;
+		this.title = title;
+	}
+
+	@Id
+	//@Keyword(id = true)
+	@DocumentId()
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	//@Text
+	@Field( name = "alt_title", store = Store.YES, index = Index.TOKENIZED )
+	@Boost(2)
+	public String getTitle() {
+		return title;
+	}
+
+	public void setTitle(String title) {
+		this.title = title;
+	}
+
+	//@Unstored(name = "Abstract")
+	@Field( name="Abstract", store = Store.NO, index = Index.TOKENIZED )
+	public String getSummary() {
+		return summary;
+	}
+
+	public void setSummary(String summary) {
+		this.summary = summary;
+	}
+
+	@Lob
+	//@Unstored
+	@Field( store = Store.NO, index = Index.TOKENIZED )
+	public String getText() {
+		return text;
+	}
+
+	public void setText(String text) {
+		this.text = text;
+	}
+}
+

Deleted: trunk/HibernateExt/search/src/test/org/hibernate/search/test/Clock.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/Clock.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/Clock.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,41 +0,0 @@
-//$Id: $
-package org.hibernate.search.test;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-
-import org.hibernate.search.annotations.Indexed;
-import org.hibernate.search.annotations.Text;
-import org.hibernate.search.annotations.Keyword;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Indexed
-public class Clock {
-	private Integer id;
-	private String brand;
-
-	public Clock(Integer id, String brand) {
-		this.id = id;
-		this.brand = brand;
-	}
-
-	@Text public String getBrand() {
-		return brand;
-	}
-
-	public void setBrand(String brand) {
-		this.brand = brand;
-	}
-
-	@Id @Keyword
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-}

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/Clock.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/Clock.java)
===================================================================
--- trunk/HibernateExt/search/src/test/org/hibernate/search/test/Clock.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/Clock.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,41 @@
+//$Id: $
+package org.hibernate.search.test;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+import org.hibernate.search.annotations.Indexed;
+import org.hibernate.search.annotations.Text;
+import org.hibernate.search.annotations.Keyword;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Indexed
+public class Clock {
+	private Integer id;
+	private String brand;
+
+	public Clock(Integer id, String brand) {
+		this.id = id;
+		this.brand = brand;
+	}
+
+	@Text public String getBrand() {
+		return brand;
+	}
+
+	public void setBrand(String brand) {
+		this.brand = brand;
+	}
+
+	@Id @Keyword
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+}

Deleted: trunk/HibernateExt/search/src/test/org/hibernate/search/test/Document.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/Document.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/Document.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,77 +0,0 @@
-//$Id: Document.java 10742 2006-11-07 01:03:16Z epbernard $
-package org.hibernate.search.test;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.Lob;
-
-import org.hibernate.search.annotations.Indexed;
-import org.hibernate.search.annotations.Boost;
-import org.hibernate.search.annotations.Field;
-import org.hibernate.search.annotations.Index;
-import org.hibernate.search.annotations.DocumentId;
-import org.hibernate.search.annotations.Store;
-
- at Entity
- at Indexed(index = "Documents")
-public class Document {
-	private Long id;
-	private String title;
-	private String summary;
-	private String text;
-
-	Document() {
-	}
-
-	public Document(String title, String summary, String text) {
-		super();
-		this.summary = summary;
-		this.text = text;
-		this.title = title;
-	}
-
-	@Id
-	@GeneratedValue
-	//@Keyword(id = true)
-    @DocumentId
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-
-	//@Text
-    @Field( store = Store.YES, index = Index.TOKENIZED )
-    @Boost(2)
-	public String getTitle() {
-		return title;
-	}
-
-	public void setTitle(String title) {
-		this.title = title;
-	}
-
-	//@Unstored(name = "Abstract")
-    @Field( name="Abstract", store = Store.NO, index = Index.TOKENIZED )
-    public String getSummary() {
-		return summary;
-	}
-
-	public void setSummary(String summary) {
-		this.summary = summary;
-	}
-
-	@Lob
-	//@Unstored
-    @Field( store = Store.NO, index = Index.TOKENIZED )
-    public String getText() {
-		return text;
-	}
-
-	public void setText(String text) {
-		this.text = text;
-	}
-}

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/Document.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/Document.java)
===================================================================
--- trunk/HibernateExt/search/src/test/org/hibernate/search/test/Document.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/Document.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,77 @@
+//$Id: Document.java 10742 2006-11-07 01:03:16Z epbernard $
+package org.hibernate.search.test;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Lob;
+
+import org.hibernate.search.annotations.Indexed;
+import org.hibernate.search.annotations.Boost;
+import org.hibernate.search.annotations.Field;
+import org.hibernate.search.annotations.Index;
+import org.hibernate.search.annotations.DocumentId;
+import org.hibernate.search.annotations.Store;
+
+ at Entity
+ at Indexed(index = "Documents")
+public class Document {
+	private Long id;
+	private String title;
+	private String summary;
+	private String text;
+
+	Document() {
+	}
+
+	public Document(String title, String summary, String text) {
+		super();
+		this.summary = summary;
+		this.text = text;
+		this.title = title;
+	}
+
+	@Id
+	@GeneratedValue
+	//@Keyword(id = true)
+    @DocumentId
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	//@Text
+    @Field( store = Store.YES, index = Index.TOKENIZED )
+    @Boost(2)
+	public String getTitle() {
+		return title;
+	}
+
+	public void setTitle(String title) {
+		this.title = title;
+	}
+
+	//@Unstored(name = "Abstract")
+    @Field( name="Abstract", store = Store.NO, index = Index.TOKENIZED )
+    public String getSummary() {
+		return summary;
+	}
+
+	public void setSummary(String summary) {
+		this.summary = summary;
+	}
+
+	@Lob
+	//@Unstored
+    @Field( store = Store.NO, index = Index.TOKENIZED )
+    public String getText() {
+		return text;
+	}
+
+	public void setText(String text) {
+		this.text = text;
+	}
+}

Deleted: trunk/HibernateExt/search/src/test/org/hibernate/search/test/FSDirectoryTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/FSDirectoryTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/FSDirectoryTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,195 +0,0 @@
-//$Id: LuceneTest.java 10014 2006-06-12 09:56:27 -0700 (lun., 12 juin 2006) epbernard $
-package org.hibernate.search.test;
-
-import java.io.File;
-import java.util.List;
-
-import org.apache.lucene.analysis.StopAnalyzer;
-import org.apache.lucene.analysis.standard.StandardAnalyzer;
-import org.apache.lucene.index.IndexReader;
-import org.apache.lucene.index.Term;
-import org.apache.lucene.index.TermDocs;
-import org.apache.lucene.queryParser.QueryParser;
-import org.apache.lucene.search.Hits;
-import org.apache.lucene.search.IndexSearcher;
-import org.apache.lucene.search.Query;
-import org.hibernate.Session;
-import org.hibernate.event.PostDeleteEventListener;
-import org.hibernate.event.PostInsertEventListener;
-import org.hibernate.event.PostUpdateEventListener;
-import org.hibernate.search.Environment;
-import org.hibernate.search.event.FullTextIndexEventListener;
-import org.hibernate.search.store.FSDirectoryProvider;
-
-/**
- * @author Gavin King
- */
-public class FSDirectoryTest extends SearchTestCase {
-
-
-	protected void setUp() throws Exception {
-		File sub = getBaseIndexDir();
-		sub.mkdir();
-		File[] files = sub.listFiles();
-		for (File file : files) {
-			if ( file.isDirectory() ) {
-				delete( file );
-			}
-		}
-		//super.setUp(); //we need a fresh session factory each time for index set up
-		buildSessionFactory( getMappings(), getAnnotatedPackages(), getXmlFiles() );
-	}
-
-	private File getBaseIndexDir() {
-		File current = new File( "." );
-		File sub = new File( current, "indextemp" );
-		return sub;
-	}
-
-	protected void tearDown() throws Exception {
-		super.tearDown();
-		File sub = getBaseIndexDir();
-		delete( sub );
-	}
-
-	private void delete(File sub) {
-		if ( sub.isDirectory() ) {
-			for ( File file : sub.listFiles() ) {
-				delete( file );
-			}
-			sub.delete();
-		}
-		else {
-			sub.delete();
-		}
-	}
-
-	public void testEventIntegration() throws Exception {
-
-
-		Session s = getSessions().openSession();
-		s.getTransaction().begin();
-		s.persist(
-				new Document( "Hibernate in Action", "Object/relational mapping with Hibernate", "blah blah blah" )
-		);
-		s.getTransaction().commit();
-		s.close();
-		IndexReader reader = IndexReader.open( new File( getBaseIndexDir(), "Documents" ) );
-		try {
-			int num = reader.numDocs();
-			assertEquals( 1, num );
-			TermDocs docs = reader.termDocs( new Term( "Abstract", "Hibernate" ) );
-			org.apache.lucene.document.Document doc = reader.document( docs.doc() );
-			assertFalse( docs.next() );
-			docs = reader.termDocs( new Term( "Title", "Action" ) );
-			doc = reader.document( docs.doc() );
-			assertFalse( docs.next() );
-			assertEquals( "1", doc.getField( "id" ).stringValue() );
-		}
-		finally {
-			reader.close();
-		}
-
-		s = getSessions().openSession();
-		s.getTransaction().begin();
-		Document entity = (Document) s.get( Document.class, new Long( 1 ) );
-		entity.setSummary( "Object/relational mapping with EJB3" );
-		s.persist( new Document( "Seam in Action", "", "blah blah blah blah" ) );
-		s.getTransaction().commit();
-		s.close();
-
-		reader = IndexReader.open( new File( getBaseIndexDir(), "Documents" ) );
-		try {
-			int num = reader.numDocs();
-			assertEquals( 2, num );
-			TermDocs docs = reader.termDocs( new Term( "Abstract", "ejb" ) );
-			assertTrue( docs.next() );
-			org.apache.lucene.document.Document doc = reader.document( docs.doc() );
-			assertFalse( docs.next() );
-		}
-		finally {
-			reader.close();
-		}
-
-		s = getSessions().openSession();
-		s.getTransaction().begin();
-		s.delete( entity );
-		s.getTransaction().commit();
-		s.close();
-
-		reader = IndexReader.open( new File( getBaseIndexDir(), "Documents" ) );
-		try {
-			int num = reader.numDocs();
-			assertEquals( 1, num );
-			TermDocs docs = reader.termDocs( new Term( "title", "seam" ) );
-			assertTrue( docs.next() );
-			org.apache.lucene.document.Document doc = reader.document( docs.doc() );
-			assertFalse( docs.next() );
-			assertEquals( "2", doc.getField( "id" ).stringValue() );
-		}
-		finally {
-			reader.close();
-		}
-
-		s = getSessions().openSession();
-		s.getTransaction().begin();
-		s.delete( s.createCriteria( Document.class ).uniqueResult() );
-		s.getTransaction().commit();
-		s.close();
-	}
-
-	public void testBoost() throws Exception {
-		Session s = getSessions().openSession();
-		s.getTransaction().begin();
-		s.persist(
-				new Document( "Hibernate in Action", "Object and Relational", "blah blah blah" )
-		);
-		s.persist(
-				new Document( "Object and Relational", "Hibernate in Action", "blah blah blah" )
-		);
-		s.getTransaction().commit();
-		s.close();
-
-		IndexSearcher searcher = new IndexSearcher( new File( getBaseIndexDir(), "Documents" ).getCanonicalPath() );
-		try {
-			QueryParser qp = new QueryParser( "id", new StandardAnalyzer() );
-			Query query = qp.parse( "title:Action OR Abstract:Action" );
-			Hits hits = searcher.search( query );
-			assertEquals( 2, hits.length() );
-			assertTrue( hits.score( 0 ) == 2 * hits.score( 1 ) );
-			assertEquals( "Hibernate in Action", hits.doc( 0 ).get( "title" ) );
-		}
-		finally {
-			searcher.close();
-		}
-
-
-		s = getSessions().openSession();
-		s.getTransaction().begin();
-		List list = s.createQuery( "from Document" ).list();
-		for ( Document document : (List<Document>) list ) {
-			s.delete( document );
-		}
-		s.getTransaction().commit();
-		s.close();
-	}
-
-	protected Class[] getMappings() {
-		return new Class[]{
-				Document.class
-		};
-	}
-
-	protected void configure(org.hibernate.cfg.Configuration cfg) {
-		File sub = getBaseIndexDir();
-		cfg.setProperty( "hibernate.search.default.indexBase", sub.getAbsolutePath() );
-		cfg.setProperty( "hibernate.search.Clock.directory_provider", FSDirectoryProvider.class.getName() );
-		cfg.setProperty( Environment.ANALYZER_CLASS, StopAnalyzer.class.getName() );
-		FullTextIndexEventListener del = new FullTextIndexEventListener();
-		cfg.getEventListeners().setPostDeleteEventListeners( new PostDeleteEventListener[]{del} );
-		cfg.getEventListeners().setPostUpdateEventListeners( new PostUpdateEventListener[]{del} );
-		cfg.getEventListeners().setPostInsertEventListeners( new PostInsertEventListener[]{del} );
-	}
-
-}
-

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/FSDirectoryTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/FSDirectoryTest.java)
===================================================================
--- trunk/HibernateExt/search/src/test/org/hibernate/search/test/FSDirectoryTest.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/FSDirectoryTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,195 @@
+//$Id: LuceneTest.java 10014 2006-06-12 09:56:27 -0700 (lun., 12 juin 2006) epbernard $
+package org.hibernate.search.test;
+
+import java.io.File;
+import java.util.List;
+
+import org.apache.lucene.analysis.StopAnalyzer;
+import org.apache.lucene.analysis.standard.StandardAnalyzer;
+import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.Term;
+import org.apache.lucene.index.TermDocs;
+import org.apache.lucene.queryParser.QueryParser;
+import org.apache.lucene.search.Hits;
+import org.apache.lucene.search.IndexSearcher;
+import org.apache.lucene.search.Query;
+import org.hibernate.Session;
+import org.hibernate.event.PostDeleteEventListener;
+import org.hibernate.event.PostInsertEventListener;
+import org.hibernate.event.PostUpdateEventListener;
+import org.hibernate.search.Environment;
+import org.hibernate.search.event.FullTextIndexEventListener;
+import org.hibernate.search.store.FSDirectoryProvider;
+
+/**
+ * @author Gavin King
+ */
+public class FSDirectoryTest extends SearchTestCase {
+
+
+	protected void setUp() throws Exception {
+		File sub = getBaseIndexDir();
+		sub.mkdir();
+		File[] files = sub.listFiles();
+		for (File file : files) {
+			if ( file.isDirectory() ) {
+				delete( file );
+			}
+		}
+		//super.setUp(); //we need a fresh session factory each time for index set up
+		buildSessionFactory( getMappings(), getAnnotatedPackages(), getXmlFiles() );
+	}
+
+	private File getBaseIndexDir() {
+		File current = new File( "." );
+		File sub = new File( current, "indextemp" );
+		return sub;
+	}
+
+	protected void tearDown() throws Exception {
+		super.tearDown();
+		File sub = getBaseIndexDir();
+		delete( sub );
+	}
+
+	private void delete(File sub) {
+		if ( sub.isDirectory() ) {
+			for ( File file : sub.listFiles() ) {
+				delete( file );
+			}
+			sub.delete();
+		}
+		else {
+			sub.delete();
+		}
+	}
+
+	public void testEventIntegration() throws Exception {
+
+
+		Session s = getSessions().openSession();
+		s.getTransaction().begin();
+		s.persist(
+				new Document( "Hibernate in Action", "Object/relational mapping with Hibernate", "blah blah blah" )
+		);
+		s.getTransaction().commit();
+		s.close();
+		IndexReader reader = IndexReader.open( new File( getBaseIndexDir(), "Documents" ) );
+		try {
+			int num = reader.numDocs();
+			assertEquals( 1, num );
+			TermDocs docs = reader.termDocs( new Term( "Abstract", "Hibernate" ) );
+			org.apache.lucene.document.Document doc = reader.document( docs.doc() );
+			assertFalse( docs.next() );
+			docs = reader.termDocs( new Term( "Title", "Action" ) );
+			doc = reader.document( docs.doc() );
+			assertFalse( docs.next() );
+			assertEquals( "1", doc.getField( "id" ).stringValue() );
+		}
+		finally {
+			reader.close();
+		}
+
+		s = getSessions().openSession();
+		s.getTransaction().begin();
+		Document entity = (Document) s.get( Document.class, new Long( 1 ) );
+		entity.setSummary( "Object/relational mapping with EJB3" );
+		s.persist( new Document( "Seam in Action", "", "blah blah blah blah" ) );
+		s.getTransaction().commit();
+		s.close();
+
+		reader = IndexReader.open( new File( getBaseIndexDir(), "Documents" ) );
+		try {
+			int num = reader.numDocs();
+			assertEquals( 2, num );
+			TermDocs docs = reader.termDocs( new Term( "Abstract", "ejb" ) );
+			assertTrue( docs.next() );
+			org.apache.lucene.document.Document doc = reader.document( docs.doc() );
+			assertFalse( docs.next() );
+		}
+		finally {
+			reader.close();
+		}
+
+		s = getSessions().openSession();
+		s.getTransaction().begin();
+		s.delete( entity );
+		s.getTransaction().commit();
+		s.close();
+
+		reader = IndexReader.open( new File( getBaseIndexDir(), "Documents" ) );
+		try {
+			int num = reader.numDocs();
+			assertEquals( 1, num );
+			TermDocs docs = reader.termDocs( new Term( "title", "seam" ) );
+			assertTrue( docs.next() );
+			org.apache.lucene.document.Document doc = reader.document( docs.doc() );
+			assertFalse( docs.next() );
+			assertEquals( "2", doc.getField( "id" ).stringValue() );
+		}
+		finally {
+			reader.close();
+		}
+
+		s = getSessions().openSession();
+		s.getTransaction().begin();
+		s.delete( s.createCriteria( Document.class ).uniqueResult() );
+		s.getTransaction().commit();
+		s.close();
+	}
+
+	public void testBoost() throws Exception {
+		Session s = getSessions().openSession();
+		s.getTransaction().begin();
+		s.persist(
+				new Document( "Hibernate in Action", "Object and Relational", "blah blah blah" )
+		);
+		s.persist(
+				new Document( "Object and Relational", "Hibernate in Action", "blah blah blah" )
+		);
+		s.getTransaction().commit();
+		s.close();
+
+		IndexSearcher searcher = new IndexSearcher( new File( getBaseIndexDir(), "Documents" ).getCanonicalPath() );
+		try {
+			QueryParser qp = new QueryParser( "id", new StandardAnalyzer() );
+			Query query = qp.parse( "title:Action OR Abstract:Action" );
+			Hits hits = searcher.search( query );
+			assertEquals( 2, hits.length() );
+			assertTrue( hits.score( 0 ) == 2 * hits.score( 1 ) );
+			assertEquals( "Hibernate in Action", hits.doc( 0 ).get( "title" ) );
+		}
+		finally {
+			searcher.close();
+		}
+
+
+		s = getSessions().openSession();
+		s.getTransaction().begin();
+		List list = s.createQuery( "from Document" ).list();
+		for ( Document document : (List<Document>) list ) {
+			s.delete( document );
+		}
+		s.getTransaction().commit();
+		s.close();
+	}
+
+	protected Class[] getMappings() {
+		return new Class[]{
+				Document.class
+		};
+	}
+
+	protected void configure(org.hibernate.cfg.Configuration cfg) {
+		File sub = getBaseIndexDir();
+		cfg.setProperty( "hibernate.search.default.indexBase", sub.getAbsolutePath() );
+		cfg.setProperty( "hibernate.search.Clock.directory_provider", FSDirectoryProvider.class.getName() );
+		cfg.setProperty( Environment.ANALYZER_CLASS, StopAnalyzer.class.getName() );
+		FullTextIndexEventListener del = new FullTextIndexEventListener();
+		cfg.getEventListeners().setPostDeleteEventListeners( new PostDeleteEventListener[]{del} );
+		cfg.getEventListeners().setPostUpdateEventListeners( new PostUpdateEventListener[]{del} );
+		cfg.getEventListeners().setPostInsertEventListeners( new PostInsertEventListener[]{del} );
+	}
+
+}
+

Deleted: trunk/HibernateExt/search/src/test/org/hibernate/search/test/HANTestCase.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/HANTestCase.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/HANTestCase.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,158 +0,0 @@
-//$Id: $
-package org.hibernate.search.test;
-
-import java.io.InputStream;
-
-import org.hibernate.SessionFactory;
-import org.hibernate.Session;
-import org.hibernate.HibernateException;
-import org.hibernate.Interceptor;
-import org.hibernate.dialect.Dialect;
-import org.hibernate.cfg.AnnotationConfiguration;
-import org.hibernate.cfg.Environment;
-import org.hibernate.cfg.Configuration;
-
-/**
- * copy from HAN
- * @author Emmanuel Bernard
- */
-public abstract class HANTestCase extends junit.framework.TestCase {
-
-	private static SessionFactory sessions;
-	private static AnnotationConfiguration cfg;
-	private static Dialect dialect;
-	private static Class lastTestClass;
-	private Session session;
-
-	public HANTestCase() {
-		super();
-	}
-
-	public HANTestCase(String x) {
-		super( x );
-	}
-
-	protected void buildSessionFactory(Class[] classes, String[] packages, String[] xmlFiles) throws Exception {
-
-		if ( getSessions() != null ) getSessions().close();
-		try {
-			setCfg( new AnnotationConfiguration() );
-			configure( cfg );
-			if ( recreateSchema() ) {
-				cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
-			}
-			for ( int i = 0; i < packages.length; i++ ) {
-				getCfg().addPackage( packages[i] );
-			}
-			for ( int i = 0; i < classes.length; i++ ) {
-				getCfg().addAnnotatedClass( classes[i] );
-			}
-			for ( int i = 0; i < xmlFiles.length; i++ ) {
-				InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream( xmlFiles[i] );
-				getCfg().addInputStream( is );
-			}
-			setDialect( Dialect.getDialect() );
-			setSessions( getCfg().buildSessionFactory( /*new TestInterceptor()*/ ) );
-		}
-		catch (Exception e) {
-			e.printStackTrace();
-			throw e;
-		}
-	}
-
-	protected void setUp() throws Exception {
-		if ( getSessions() == null || lastTestClass != getClass() ) {
-			buildSessionFactory( getMappings(), getAnnotatedPackages(), getXmlFiles() );
-			lastTestClass = getClass();
-		}
-	}
-
-	protected void runTest() throws Throwable {
-		try {
-			super.runTest();
-			if ( session != null && session.isOpen() ) {
-				if ( session.isConnected() ) session.connection().rollback();
-				session.close();
-				session = null;
-				fail( "unclosed session" );
-			}
-			else {
-				session = null;
-			}
-		}
-		catch (Throwable e) {
-			try {
-				if ( session != null && session.isOpen() ) {
-					if ( session.isConnected() ) session.connection().rollback();
-					session.close();
-				}
-			}
-			catch (Exception ignore) {
-			}
-			try {
-				if ( sessions != null ) {
-					sessions.close();
-					sessions = null;
-				}
-			}
-			catch (Exception ignore) {
-			}
-			throw e;
-		}
-	}
-
-	public Session openSession() throws HibernateException {
-		session = getSessions().openSession();
-		return session;
-	}
-
-	public Session openSession(Interceptor interceptor) throws HibernateException {
-		session = getSessions().openSession( interceptor );
-		return session;
-	}
-
-	protected abstract Class[] getMappings();
-
-	protected String[] getAnnotatedPackages() {
-		return new String[]{};
-	}
-
-	protected String[] getXmlFiles() {
-		return new String[]{};
-	}
-
-	private void setSessions(SessionFactory sessions) {
-		HANTestCase.sessions = sessions;
-	}
-
-	protected SessionFactory getSessions() {
-		return sessions;
-	}
-
-	private void setDialect(Dialect dialect) {
-		HANTestCase.dialect = dialect;
-	}
-
-	protected Dialect getDialect() {
-		return dialect;
-	}
-
-	protected static void setCfg(AnnotationConfiguration cfg) {
-		HANTestCase.cfg = cfg;
-	}
-
-	protected static AnnotationConfiguration getCfg() {
-		return cfg;
-	}
-
-	protected void configure(Configuration cfg) {
-		//cfg.setNamingStrategy( AlternativeNamingStrategy.INSTANCE );
-		//cfg.getSessionEventListenerConfig().setFlushEventListener( new EJB3FlushEventListener() );
-		//cfg.getSessionEventListenerConfig().setAutoFlushEventListener( new EJB3AutoFlushEventListener() );
-	}
-
-	protected boolean recreateSchema() {
-		return true;
-	}
-
-}

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/HANTestCase.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/HANTestCase.java)
===================================================================
--- trunk/HibernateExt/search/src/test/org/hibernate/search/test/HANTestCase.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/HANTestCase.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,158 @@
+//$Id: $
+package org.hibernate.search.test;
+
+import java.io.InputStream;
+
+import org.hibernate.SessionFactory;
+import org.hibernate.Session;
+import org.hibernate.HibernateException;
+import org.hibernate.Interceptor;
+import org.hibernate.dialect.Dialect;
+import org.hibernate.cfg.AnnotationConfiguration;
+import org.hibernate.cfg.Environment;
+import org.hibernate.cfg.Configuration;
+
+/**
+ * copy from HAN
+ * @author Emmanuel Bernard
+ */
+public abstract class HANTestCase extends junit.framework.TestCase {
+
+	private static SessionFactory sessions;
+	private static AnnotationConfiguration cfg;
+	private static Dialect dialect;
+	private static Class lastTestClass;
+	private Session session;
+
+	public HANTestCase() {
+		super();
+	}
+
+	public HANTestCase(String x) {
+		super( x );
+	}
+
+	protected void buildSessionFactory(Class[] classes, String[] packages, String[] xmlFiles) throws Exception {
+
+		if ( getSessions() != null ) getSessions().close();
+		try {
+			setCfg( new AnnotationConfiguration() );
+			configure( cfg );
+			if ( recreateSchema() ) {
+				cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
+			}
+			for ( int i = 0; i < packages.length; i++ ) {
+				getCfg().addPackage( packages[i] );
+			}
+			for ( int i = 0; i < classes.length; i++ ) {
+				getCfg().addAnnotatedClass( classes[i] );
+			}
+			for ( int i = 0; i < xmlFiles.length; i++ ) {
+				InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream( xmlFiles[i] );
+				getCfg().addInputStream( is );
+			}
+			setDialect( Dialect.getDialect() );
+			setSessions( getCfg().buildSessionFactory( /*new TestInterceptor()*/ ) );
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+			throw e;
+		}
+	}
+
+	protected void setUp() throws Exception {
+		if ( getSessions() == null || lastTestClass != getClass() ) {
+			buildSessionFactory( getMappings(), getAnnotatedPackages(), getXmlFiles() );
+			lastTestClass = getClass();
+		}
+	}
+
+	protected void runTest() throws Throwable {
+		try {
+			super.runTest();
+			if ( session != null && session.isOpen() ) {
+				if ( session.isConnected() ) session.connection().rollback();
+				session.close();
+				session = null;
+				fail( "unclosed session" );
+			}
+			else {
+				session = null;
+			}
+		}
+		catch (Throwable e) {
+			try {
+				if ( session != null && session.isOpen() ) {
+					if ( session.isConnected() ) session.connection().rollback();
+					session.close();
+				}
+			}
+			catch (Exception ignore) {
+			}
+			try {
+				if ( sessions != null ) {
+					sessions.close();
+					sessions = null;
+				}
+			}
+			catch (Exception ignore) {
+			}
+			throw e;
+		}
+	}
+
+	public Session openSession() throws HibernateException {
+		session = getSessions().openSession();
+		return session;
+	}
+
+	public Session openSession(Interceptor interceptor) throws HibernateException {
+		session = getSessions().openSession( interceptor );
+		return session;
+	}
+
+	protected abstract Class[] getMappings();
+
+	protected String[] getAnnotatedPackages() {
+		return new String[]{};
+	}
+
+	protected String[] getXmlFiles() {
+		return new String[]{};
+	}
+
+	private void setSessions(SessionFactory sessions) {
+		HANTestCase.sessions = sessions;
+	}
+
+	protected SessionFactory getSessions() {
+		return sessions;
+	}
+
+	private void setDialect(Dialect dialect) {
+		HANTestCase.dialect = dialect;
+	}
+
+	protected Dialect getDialect() {
+		return dialect;
+	}
+
+	protected static void setCfg(AnnotationConfiguration cfg) {
+		HANTestCase.cfg = cfg;
+	}
+
+	protected static AnnotationConfiguration getCfg() {
+		return cfg;
+	}
+
+	protected void configure(Configuration cfg) {
+		//cfg.setNamingStrategy( AlternativeNamingStrategy.INSTANCE );
+		//cfg.getSessionEventListenerConfig().setFlushEventListener( new EJB3FlushEventListener() );
+		//cfg.getSessionEventListenerConfig().setAutoFlushEventListener( new EJB3AutoFlushEventListener() );
+	}
+
+	protected boolean recreateSchema() {
+		return true;
+	}
+
+}

Deleted: trunk/HibernateExt/search/src/test/org/hibernate/search/test/RamDirectoryTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/RamDirectoryTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/RamDirectoryTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,61 +0,0 @@
-//$Id: $
-package org.hibernate.search.test;
-
-import org.hibernate.Session;
-import org.apache.lucene.index.IndexReader;
-
-/**
- * @author Emmanuel Bernard
- */
-public class RamDirectoryTest extends SearchTestCase {
-
-	public void testMultipleEntitiesPerIndex() throws Exception {
-
-
-		Session s = getSessions().openSession();
-		s.getTransaction().begin();
-		Document document =
-				new Document( "Hibernate in Action", "Object/relational mapping with Hibernate", "blah blah blah" );
-		s.persist(document);
-		s.flush();
-		s.persist(
-				new AlternateDocument( document.getId(), "Hibernate in Action", "Object/relational mapping with Hibernate", "blah blah blah" )
-		);
-		s.getTransaction().commit();
-		s.close();
-
-		assertEquals( 2, getDocumentNbr() );
-
-		s = getSessions().openSession();
-		s.getTransaction().begin();
-		s.delete( s.get( AlternateDocument.class, document.getId() ) );
-		s.getTransaction().commit();
-		s.close();
-
-		assertEquals( 1, getDocumentNbr() );
-
-		s = getSessions().openSession();
-		s.getTransaction().begin();
-		s.delete( s.createCriteria( Document.class ).uniqueResult() );
-		s.getTransaction().commit();
-		s.close();
-	}
-
-	private int getDocumentNbr() throws Exception {
-		IndexReader reader = IndexReader.open( getDirectory( Document.class ) );
-		try {
-			return reader.numDocs();
-		}
-		finally {
-			reader.close();
-		}
-	}
-
-	protected Class[] getMappings() {
-		return new Class[]{
-				Document.class,
-				AlternateDocument.class
-		};
-	}
-
-}

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/RamDirectoryTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/RamDirectoryTest.java)
===================================================================
--- trunk/HibernateExt/search/src/test/org/hibernate/search/test/RamDirectoryTest.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/RamDirectoryTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,61 @@
+//$Id: $
+package org.hibernate.search.test;
+
+import org.hibernate.Session;
+import org.apache.lucene.index.IndexReader;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class RamDirectoryTest extends SearchTestCase {
+
+	public void testMultipleEntitiesPerIndex() throws Exception {
+
+
+		Session s = getSessions().openSession();
+		s.getTransaction().begin();
+		Document document =
+				new Document( "Hibernate in Action", "Object/relational mapping with Hibernate", "blah blah blah" );
+		s.persist(document);
+		s.flush();
+		s.persist(
+				new AlternateDocument( document.getId(), "Hibernate in Action", "Object/relational mapping with Hibernate", "blah blah blah" )
+		);
+		s.getTransaction().commit();
+		s.close();
+
+		assertEquals( 2, getDocumentNbr() );
+
+		s = getSessions().openSession();
+		s.getTransaction().begin();
+		s.delete( s.get( AlternateDocument.class, document.getId() ) );
+		s.getTransaction().commit();
+		s.close();
+
+		assertEquals( 1, getDocumentNbr() );
+
+		s = getSessions().openSession();
+		s.getTransaction().begin();
+		s.delete( s.createCriteria( Document.class ).uniqueResult() );
+		s.getTransaction().commit();
+		s.close();
+	}
+
+	private int getDocumentNbr() throws Exception {
+		IndexReader reader = IndexReader.open( getDirectory( Document.class ) );
+		try {
+			return reader.numDocs();
+		}
+		finally {
+			reader.close();
+		}
+	}
+
+	protected Class[] getMappings() {
+		return new Class[]{
+				Document.class,
+				AlternateDocument.class
+		};
+	}
+
+}

Deleted: trunk/HibernateExt/search/src/test/org/hibernate/search/test/SearchTestCase.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/SearchTestCase.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/SearchTestCase.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,44 +0,0 @@
-//$Id: $
-package org.hibernate.search.test;
-
-import org.apache.lucene.analysis.StopAnalyzer;
-import org.apache.lucene.store.Directory;
-import org.hibernate.HibernateException;
-import org.hibernate.event.PostInsertEventListener;
-import org.hibernate.impl.SessionFactoryImpl;
-import org.hibernate.search.Environment;
-import org.hibernate.search.event.FullTextIndexEventListener;
-import org.hibernate.search.store.RAMDirectoryProvider;
-
-/**
- * @author Emmanuel Bernard
- */
-public abstract class SearchTestCase extends HANTestCase {
-	protected void setUp() throws Exception {
-		//super.setUp(); //we need a fresh session factory each time for index set up
-		buildSessionFactory( getMappings(), getAnnotatedPackages(), getXmlFiles() );
-	}
-
-	protected Directory getDirectory(Class clazz) {
-		return getLuceneEventListener().getSearchFactory().getDirectoryProvider( clazz ).getDirectory();
-	}
-
-	private FullTextIndexEventListener getLuceneEventListener() {
-        PostInsertEventListener[] listeners = ( (SessionFactoryImpl) getSessions() ).getEventListeners().getPostInsertEventListeners();
-        FullTextIndexEventListener listener = null;
-        //FIXME this sucks since we mandante the event listener use
-        for (PostInsertEventListener candidate : listeners) {
-            if (candidate instanceof FullTextIndexEventListener ) {
-                listener = (FullTextIndexEventListener) candidate;
-                break;
-            }
-        }
-        if (listener == null) throw new HibernateException("Lucene event listener not initialized");
-        return listener;
-    }
-
-	protected void configure(org.hibernate.cfg.Configuration cfg) {
-		cfg.setProperty( "hibernate.search.default.directory_provider", RAMDirectoryProvider.class.getName() );
-		cfg.setProperty( Environment.ANALYZER_CLASS, StopAnalyzer.class.getName() );
-	}
-}

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/SearchTestCase.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/SearchTestCase.java)
===================================================================
--- trunk/HibernateExt/search/src/test/org/hibernate/search/test/SearchTestCase.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/SearchTestCase.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,44 @@
+//$Id: $
+package org.hibernate.search.test;
+
+import org.apache.lucene.analysis.StopAnalyzer;
+import org.apache.lucene.store.Directory;
+import org.hibernate.HibernateException;
+import org.hibernate.event.PostInsertEventListener;
+import org.hibernate.impl.SessionFactoryImpl;
+import org.hibernate.search.Environment;
+import org.hibernate.search.event.FullTextIndexEventListener;
+import org.hibernate.search.store.RAMDirectoryProvider;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public abstract class SearchTestCase extends HANTestCase {
+	protected void setUp() throws Exception {
+		//super.setUp(); //we need a fresh session factory each time for index set up
+		buildSessionFactory( getMappings(), getAnnotatedPackages(), getXmlFiles() );
+	}
+
+	protected Directory getDirectory(Class clazz) {
+		return getLuceneEventListener().getSearchFactory().getDirectoryProvider( clazz ).getDirectory();
+	}
+
+	private FullTextIndexEventListener getLuceneEventListener() {
+        PostInsertEventListener[] listeners = ( (SessionFactoryImpl) getSessions() ).getEventListeners().getPostInsertEventListeners();
+        FullTextIndexEventListener listener = null;
+        //FIXME this sucks since we mandante the event listener use
+        for (PostInsertEventListener candidate : listeners) {
+            if (candidate instanceof FullTextIndexEventListener ) {
+                listener = (FullTextIndexEventListener) candidate;
+                break;
+            }
+        }
+        if (listener == null) throw new HibernateException("Lucene event listener not initialized");
+        return listener;
+    }
+
+	protected void configure(org.hibernate.cfg.Configuration cfg) {
+		cfg.setProperty( "hibernate.search.default.directory_provider", RAMDirectoryProvider.class.getName() );
+		cfg.setProperty( Environment.ANALYZER_CLASS, StopAnalyzer.class.getName() );
+	}
+}

Deleted: trunk/HibernateExt/search/src/test/org/hibernate/search/test/TransactionTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/TransactionTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/TransactionTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,67 +0,0 @@
-//$Id: $
-package org.hibernate.search.test;
-
-import java.io.IOException;
-
-import org.hibernate.Session;
-import org.apache.lucene.index.IndexReader;
-
-/**
- * @author Emmanuel Bernard
- */
-public class TransactionTest extends SearchTestCase {
-
-	public void testTransactionCommit() throws Exception {
-		Session s = getSessions().openSession();
-		s.getTransaction().begin();
-		s.persist(
-				new Document( "Hibernate in Action", "Object/relational mapping with Hibernate", "blah blah blah" )
-		);
-		s.persist(
-				new Document( "Lucene in Action", "FullText search engine", "blah blah blah" )
-		);
-		s.persist(
-				new Document( "Hibernate Search in Action", "ORM and FullText search engine", "blah blah blah" )
-		);
-		s.getTransaction().commit();
-		s.close();
-
-		assertEquals( "transaction.commit() should index", 3, getDocumentNumber() );
-
-		s = getSessions().openSession();
-		s.getTransaction().begin();
-		s.persist(
-				new Document( "Java Persistence with Hibernate", "Object/relational mapping with Hibernate", "blah blah blah" )
-		);
-		s.flush();
-		s.getTransaction().rollback();
-		s.close();
-
-		assertEquals( "rollback() should not index", 3, getDocumentNumber() );
-
-		s = getSessions().openSession();
-		s.persist(
-				new Document( "Java Persistence with Hibernate", "Object/relational mapping with Hibernate", "blah blah blah" )
-		);
-		s.flush();
-		s.close();
-
-		assertEquals( "no transaction should index", 4, getDocumentNumber() );
-
-	}
-
-	private int getDocumentNumber() throws IOException {
-		IndexReader reader = IndexReader.open( getDirectory( Document.class ) );
-		try {
-			return reader.numDocs();
-		}
-		finally {
-			reader.close();
-		}
-	}
-
-
-	protected Class[] getMappings() {
-		return new Class[]{Document.class};
-	}
-}

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/TransactionTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/TransactionTest.java)
===================================================================
--- trunk/HibernateExt/search/src/test/org/hibernate/search/test/TransactionTest.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/TransactionTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,67 @@
+//$Id: $
+package org.hibernate.search.test;
+
+import java.io.IOException;
+
+import org.hibernate.Session;
+import org.apache.lucene.index.IndexReader;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class TransactionTest extends SearchTestCase {
+
+	public void testTransactionCommit() throws Exception {
+		Session s = getSessions().openSession();
+		s.getTransaction().begin();
+		s.persist(
+				new Document( "Hibernate in Action", "Object/relational mapping with Hibernate", "blah blah blah" )
+		);
+		s.persist(
+				new Document( "Lucene in Action", "FullText search engine", "blah blah blah" )
+		);
+		s.persist(
+				new Document( "Hibernate Search in Action", "ORM and FullText search engine", "blah blah blah" )
+		);
+		s.getTransaction().commit();
+		s.close();
+
+		assertEquals( "transaction.commit() should index", 3, getDocumentNumber() );
+
+		s = getSessions().openSession();
+		s.getTransaction().begin();
+		s.persist(
+				new Document( "Java Persistence with Hibernate", "Object/relational mapping with Hibernate", "blah blah blah" )
+		);
+		s.flush();
+		s.getTransaction().rollback();
+		s.close();
+
+		assertEquals( "rollback() should not index", 3, getDocumentNumber() );
+
+		s = getSessions().openSession();
+		s.persist(
+				new Document( "Java Persistence with Hibernate", "Object/relational mapping with Hibernate", "blah blah blah" )
+		);
+		s.flush();
+		s.close();
+
+		assertEquals( "no transaction should index", 4, getDocumentNumber() );
+
+	}
+
+	private int getDocumentNumber() throws IOException {
+		IndexReader reader = IndexReader.open( getDirectory( Document.class ) );
+		try {
+			return reader.numDocs();
+		}
+		finally {
+			reader.close();
+		}
+	}
+
+
+	protected Class[] getMappings() {
+		return new Class[]{Document.class};
+	}
+}

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/bridge (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/bridge)

Deleted: trunk/HibernateExt/search/src/test/org/hibernate/search/test/bridge/BridgeTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/bridge/BridgeTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/bridge/BridgeTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,154 +0,0 @@
-//$Id: $
-package org.hibernate.search.test.bridge;
-
-import java.util.Date;
-import java.util.List;
-import java.util.GregorianCalendar;
-import java.util.Calendar;
-import java.util.TimeZone;
-
-import org.hibernate.Transaction;
-import org.hibernate.cfg.Configuration;
-
-import org.hibernate.search.test.SearchTestCase;
-import org.hibernate.search.Environment;
-import org.hibernate.search.FullTextSession;
-import org.hibernate.search.Search;
-import org.apache.lucene.search.Query;
-import org.apache.lucene.queryParser.QueryParser;
-import org.apache.lucene.analysis.standard.StandardAnalyzer;
-import org.apache.lucene.analysis.SimpleAnalyzer;
-
-/**
- * @author Emmanuel Bernard
- */
-public class BridgeTest extends SearchTestCase {
-    public void testDefaultAndNullBridges() throws Exception {
-        Cloud cloud = new Cloud();
-        cloud.setDate( null );
-        cloud.setDouble1( null );
-        cloud.setDouble2( 2.1d );
-        cloud.setInt1( null );
-        cloud.setInt2( 2 );
-        cloud.setFloat1( null );
-        cloud.setFloat2( 2.1f );
-        cloud.setLong1( null );
-        cloud.setLong2( 2l );
-        cloud.setString(null);
-		cloud.setType( CloudType.DOG );
-		cloud.setStorm( false );
-		org.hibernate.Session s = openSession();
-        Transaction tx = s.beginTransaction();
-        s.persist(cloud);
-        s.flush();
-        tx.commit();
-
-        tx = s.beginTransaction();
-        FullTextSession session = Search.createFullTextSession(s);
-        QueryParser parser = new QueryParser("id", new StandardAnalyzer() );
-        Query query;
-        List result;
-
-        query = parser.parse("double2:[2.1 TO 2.1] AND float2:[2.1 TO 2.1] " +
-				"AND int2:[2 TO 2.1] AND long2:[2 TO 2.1] AND type:\"dog\" AND storm:false");
-
-		result = session.createFullTextQuery(query).list();
-        assertEquals( "find primitives and do not fail on null", 1, result.size() );
-
-        query = parser.parse("double1:[2.1 TO 2.1] OR float1:[2.1 TO 2.1] OR int1:[2 TO 2.1] OR long1:[2 TO 2.1]");
-        result = session.createFullTextQuery(query).list();
-        assertEquals( "null elements should not be stored", 0, result.size() ); //the query is dumb because restrictive
-
-        s.delete( s.get( Cloud.class, cloud.getId() ) );
-        tx.commit();
-        s.close();
-
-    }
-
-    public void testCustomBridges() throws Exception {
-        Cloud cloud = new Cloud();
-        cloud.setCustomFieldBridge( "This is divided by 2");
-        cloud.setCustomStringBridge( "This is div by 4");
-        org.hibernate.Session s = openSession();
-        Transaction tx = s.beginTransaction();
-        s.persist(cloud);
-        s.flush();
-        tx.commit();
-
-        tx = s.beginTransaction();
-        FullTextSession session = Search.createFullTextSession(s);
-        QueryParser parser = new QueryParser("id", new SimpleAnalyzer() );
-        Query query;
-        List result;
-
-        query = parser.parse("customFieldBridge:This AND customStringBridge:This");
-        result = session.createFullTextQuery(query).list();
-        assertEquals( "Properties not mapped", 1, result.size() );
-
-        query = parser.parse("customFieldBridge:by AND customStringBridge:is");
-        result = session.createFullTextQuery(query).list();
-        assertEquals( "Custom types not taken into account", 0, result.size() );
-
-        s.delete( s.get( Cloud.class, cloud.getId() ) );
-        tx.commit();
-        s.close();
-
-    }
-
-    public void testDateBridge() throws Exception {
-        Cloud cloud = new Cloud();
-        Calendar c = GregorianCalendar.getInstance();
-        c.setTimeZone( TimeZone.getTimeZone( "GMT" ) ); //for the sake of tests
-        c.set(2000, 11, 15, 3, 43, 2);
-        c.set( Calendar.MILLISECOND, 5 );
-
-        Date date = new Date( c.getTimeInMillis() );
-        cloud.setDate( date ); //5 millisecond
-        cloud.setDateDay( date );
-        cloud.setDateHour( date );
-        cloud.setDateMillisecond( date );
-        cloud.setDateMinute( date );
-        cloud.setDateMonth( date );
-        cloud.setDateSecond( date );
-        cloud.setDateYear( date );
-        org.hibernate.Session s = openSession();
-        Transaction tx = s.beginTransaction();
-        s.persist(cloud);
-        s.flush();
-        tx.commit();
-
-        tx = s.beginTransaction();
-        FullTextSession session = Search.createFullTextSession(s);
-        QueryParser parser = new QueryParser("id", new StandardAnalyzer() );
-        Query query;
-        List result;
-
-        query = parser.parse("date:[19900101 TO 20060101]"
-                + " AND dateDay:[20001214 TO 2000121501]"
-                + " AND dateMonth:[200012 TO 20001201]"
-                + " AND dateYear:[2000 TO 200001]"
-                + " AND dateHour:[20001214 TO 2000121503]"
-                + " AND dateMinute:[20001214 TO 200012150343]"
-                + " AND dateSecond:[20001214 TO 20001215034302]"
-                + " AND dateMillisecond:[20001214 TO 20001215034302005]"
-        );
-        result = session.createFullTextQuery(query).list();
-        assertEquals( "Date not found or not property truncated", 1, result.size() );
-
-        s.delete( s.get( Cloud.class, cloud.getId() ) );
-        tx.commit();
-        s.close();
-
-    }
-    protected Class[] getMappings() {
-        return new Class[] {
-                Cloud.class
-        };
-    }
-
-
-    protected void configure(Configuration cfg) {
-        super.configure( cfg );
-        cfg.setProperty( Environment.ANALYZER_CLASS, SimpleAnalyzer.class.getName() );
-    }
-}

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/bridge/BridgeTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/bridge/BridgeTest.java)
===================================================================
--- trunk/HibernateExt/search/src/test/org/hibernate/search/test/bridge/BridgeTest.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/bridge/BridgeTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,154 @@
+//$Id: $
+package org.hibernate.search.test.bridge;
+
+import java.util.Date;
+import java.util.List;
+import java.util.GregorianCalendar;
+import java.util.Calendar;
+import java.util.TimeZone;
+
+import org.hibernate.Transaction;
+import org.hibernate.cfg.Configuration;
+
+import org.hibernate.search.test.SearchTestCase;
+import org.hibernate.search.Environment;
+import org.hibernate.search.FullTextSession;
+import org.hibernate.search.Search;
+import org.apache.lucene.search.Query;
+import org.apache.lucene.queryParser.QueryParser;
+import org.apache.lucene.analysis.standard.StandardAnalyzer;
+import org.apache.lucene.analysis.SimpleAnalyzer;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class BridgeTest extends SearchTestCase {
+    public void testDefaultAndNullBridges() throws Exception {
+        Cloud cloud = new Cloud();
+        cloud.setDate( null );
+        cloud.setDouble1( null );
+        cloud.setDouble2( 2.1d );
+        cloud.setInt1( null );
+        cloud.setInt2( 2 );
+        cloud.setFloat1( null );
+        cloud.setFloat2( 2.1f );
+        cloud.setLong1( null );
+        cloud.setLong2( 2l );
+        cloud.setString(null);
+		cloud.setType( CloudType.DOG );
+		cloud.setStorm( false );
+		org.hibernate.Session s = openSession();
+        Transaction tx = s.beginTransaction();
+        s.persist(cloud);
+        s.flush();
+        tx.commit();
+
+        tx = s.beginTransaction();
+        FullTextSession session = Search.createFullTextSession(s);
+        QueryParser parser = new QueryParser("id", new StandardAnalyzer() );
+        Query query;
+        List result;
+
+        query = parser.parse("double2:[2.1 TO 2.1] AND float2:[2.1 TO 2.1] " +
+				"AND int2:[2 TO 2.1] AND long2:[2 TO 2.1] AND type:\"dog\" AND storm:false");
+
+		result = session.createFullTextQuery(query).list();
+        assertEquals( "find primitives and do not fail on null", 1, result.size() );
+
+        query = parser.parse("double1:[2.1 TO 2.1] OR float1:[2.1 TO 2.1] OR int1:[2 TO 2.1] OR long1:[2 TO 2.1]");
+        result = session.createFullTextQuery(query).list();
+        assertEquals( "null elements should not be stored", 0, result.size() ); //the query is dumb because restrictive
+
+        s.delete( s.get( Cloud.class, cloud.getId() ) );
+        tx.commit();
+        s.close();
+
+    }
+
+    public void testCustomBridges() throws Exception {
+        Cloud cloud = new Cloud();
+        cloud.setCustomFieldBridge( "This is divided by 2");
+        cloud.setCustomStringBridge( "This is div by 4");
+        org.hibernate.Session s = openSession();
+        Transaction tx = s.beginTransaction();
+        s.persist(cloud);
+        s.flush();
+        tx.commit();
+
+        tx = s.beginTransaction();
+        FullTextSession session = Search.createFullTextSession(s);
+        QueryParser parser = new QueryParser("id", new SimpleAnalyzer() );
+        Query query;
+        List result;
+
+        query = parser.parse("customFieldBridge:This AND customStringBridge:This");
+        result = session.createFullTextQuery(query).list();
+        assertEquals( "Properties not mapped", 1, result.size() );
+
+        query = parser.parse("customFieldBridge:by AND customStringBridge:is");
+        result = session.createFullTextQuery(query).list();
+        assertEquals( "Custom types not taken into account", 0, result.size() );
+
+        s.delete( s.get( Cloud.class, cloud.getId() ) );
+        tx.commit();
+        s.close();
+
+    }
+
+    public void testDateBridge() throws Exception {
+        Cloud cloud = new Cloud();
+        Calendar c = GregorianCalendar.getInstance();
+        c.setTimeZone( TimeZone.getTimeZone( "GMT" ) ); //for the sake of tests
+        c.set(2000, 11, 15, 3, 43, 2);
+        c.set( Calendar.MILLISECOND, 5 );
+
+        Date date = new Date( c.getTimeInMillis() );
+        cloud.setDate( date ); //5 millisecond
+        cloud.setDateDay( date );
+        cloud.setDateHour( date );
+        cloud.setDateMillisecond( date );
+        cloud.setDateMinute( date );
+        cloud.setDateMonth( date );
+        cloud.setDateSecond( date );
+        cloud.setDateYear( date );
+        org.hibernate.Session s = openSession();
+        Transaction tx = s.beginTransaction();
+        s.persist(cloud);
+        s.flush();
+        tx.commit();
+
+        tx = s.beginTransaction();
+        FullTextSession session = Search.createFullTextSession(s);
+        QueryParser parser = new QueryParser("id", new StandardAnalyzer() );
+        Query query;
+        List result;
+
+        query = parser.parse("date:[19900101 TO 20060101]"
+                + " AND dateDay:[20001214 TO 2000121501]"
+                + " AND dateMonth:[200012 TO 20001201]"
+                + " AND dateYear:[2000 TO 200001]"
+                + " AND dateHour:[20001214 TO 2000121503]"
+                + " AND dateMinute:[20001214 TO 200012150343]"
+                + " AND dateSecond:[20001214 TO 20001215034302]"
+                + " AND dateMillisecond:[20001214 TO 20001215034302005]"
+        );
+        result = session.createFullTextQuery(query).list();
+        assertEquals( "Date not found or not property truncated", 1, result.size() );
+
+        s.delete( s.get( Cloud.class, cloud.getId() ) );
+        tx.commit();
+        s.close();
+
+    }
+    protected Class[] getMappings() {
+        return new Class[] {
+                Cloud.class
+        };
+    }
+
+
+    protected void configure(Configuration cfg) {
+        super.configure( cfg );
+        cfg.setProperty( Environment.ANALYZER_CLASS, SimpleAnalyzer.class.getName() );
+    }
+}

Deleted: trunk/HibernateExt/search/src/test/org/hibernate/search/test/bridge/Cloud.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/bridge/Cloud.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/bridge/Cloud.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,256 +0,0 @@
-//$Id: $
-package org.hibernate.search.test.bridge;
-
-import java.util.Date;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.GeneratedValue;
-
-import org.hibernate.search.annotations.Keyword;
-import org.hibernate.search.annotations.Indexed;
-import org.hibernate.search.annotations.Text;
-import org.hibernate.search.annotations.DateBridge;
-import org.hibernate.search.annotations.FieldBridge;
-import org.hibernate.search.annotations.Resolution;
-import org.hibernate.search.annotations.Parameter;
-import org.hibernate.search.annotations.Field;
-import org.hibernate.search.annotations.Index;
-import org.hibernate.search.annotations.Store;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Indexed
-public class Cloud {
-    private int id;
-    private Long long1;
-    private long long2;
-    private Integer int1;
-    private int int2;
-    private Double double1;
-    private double double2;
-    private Float float1;
-    private float float2;
-    private String string;
-    private Date date;
-    private Date dateYear;
-    private Date dateMonth;
-    private Date dateDay;
-    private Date dateHour;
-    private Date dateMinute;
-    private Date dateSecond;
-    private Date dateMillisecond;
-    private String customFieldBridge;
-    private String customStringBridge;
-	private CloudType type;
-	private boolean storm;
-
-	@Text
-    @FieldBridge(impl = TruncateFieldBridge.class)
-    public String getCustomFieldBridge() {
-        return customFieldBridge;
-    }
-
-    public void setCustomFieldBridge(String customFieldBridge) {
-        this.customFieldBridge = customFieldBridge;
-    }
-
-    @Text
-    @FieldBridge(impl = TruncateStringBridge.class, params = @Parameter( name="dividedBy", value="4" ) )
-    public String getCustomStringBridge() {
-        return customStringBridge;
-    }
-
-    public void setCustomStringBridge(String customStringBridge) {
-        this.customStringBridge = customStringBridge;
-    }
-
-    @Id @GeneratedValue @Keyword(id=true)
-    public int getId() {
-        return id;
-    }
-
-    public void setId(int id) {
-        this.id = id;
-    }
-
-    @Keyword
-    public Long getLong1() {
-        return long1;
-    }
-
-    public void setLong1(Long long1) {
-        this.long1 = long1;
-    }
-
-    @Keyword
-    public long getLong2() {
-        return long2;
-    }
-
-    public void setLong2(long long2) {
-        this.long2 = long2;
-    }
-
-    @Keyword
-    public Integer getInt1() {
-        return int1;
-    }
-
-    public void setInt1(Integer int1) {
-        this.int1 = int1;
-    }
-
-    @Keyword
-    public int getInt2() {
-        return int2;
-    }
-
-    public void setInt2(int int2) {
-        this.int2 = int2;
-    }
-
-    @Keyword
-    public Double getDouble1() {
-        return double1;
-    }
-
-    public void setDouble1(Double double1) {
-        this.double1 = double1;
-    }
-
-    @Keyword
-    public double getDouble2() {
-        return double2;
-    }
-
-    public void setDouble2(double double2) {
-        this.double2 = double2;
-    }
-
-    @Keyword
-    public Float getFloat1() {
-        return float1;
-    }
-
-    public void setFloat1(Float float1) {
-        this.float1 = float1;
-    }
-
-    @Keyword
-    public float getFloat2() {
-        return float2;
-    }
-
-    public void setFloat2(float float2) {
-        this.float2 = float2;
-    }
-
-    @Text
-	public String getString() {
-        return string;
-    }
-
-    public void setString(String string) {
-        this.string = string;
-    }
-
-    @Keyword
-    public Date getDate() {
-        return date;
-    }
-
-    public void setDate(Date date) {
-        this.date = date;
-    }
-
-    @Keyword
-    @DateBridge( resolution = Resolution.YEAR )
-    public Date getDateYear() {
-        return dateYear;
-    }
-
-    public void setDateYear(Date dateYear) {
-        this.dateYear = dateYear;
-    }
-
-    @Keyword
-    @DateBridge( resolution = Resolution.MONTH )
-    public Date getDateMonth() {
-        return dateMonth;
-    }
-
-    public void setDateMonth(Date dateMonth) {
-        this.dateMonth = dateMonth;
-    }
-
-    @Keyword
-    @DateBridge( resolution = Resolution.DAY )
-    public Date getDateDay() {
-        return dateDay;
-    }
-
-    public void setDateDay(Date dateDay) {
-        this.dateDay = dateDay;
-    }
-
-    @Keyword
-    @DateBridge( resolution = Resolution.HOUR )
-    public Date getDateHour() {
-        return dateHour;
-    }
-
-    public void setDateHour(Date dateHour) {
-        this.dateHour = dateHour;
-    }
-
-
-    @Keyword
-    @DateBridge( resolution = Resolution.MINUTE )
-    public Date getDateMinute() {
-        return dateMinute;
-    }
-
-    public void setDateMinute(Date dateMinute) {
-        this.dateMinute = dateMinute;
-    }
-
-    @Keyword
-    @DateBridge( resolution = Resolution.SECOND )
-    public Date getDateSecond() {
-        return dateSecond;
-    }
-
-    public void setDateSecond(Date dateSecond) {
-        this.dateSecond = dateSecond;
-    }
-
-    @Keyword
-	@DateBridge( resolution = Resolution.MILLISECOND )
-    public Date getDateMillisecond() {
-        return dateMillisecond;
-    }
-
-    public void setDateMillisecond(Date dateMillisecond) {
-        this.dateMillisecond = dateMillisecond;
-    }
-
-	@Field(index = Index.TOKENIZED )
-	public CloudType getType() {
-		return type;
-	}
-
-	public void setType(CloudType type) {
-		this.type = type;
-	}
-
-	@Field(index = Index.TOKENIZED )
-	public boolean isStorm() {
-		return storm;
-	}
-
-	public void setStorm(boolean storm) {
-		this.storm = storm;
-	}
-}

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/bridge/Cloud.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/bridge/Cloud.java)
===================================================================
--- trunk/HibernateExt/search/src/test/org/hibernate/search/test/bridge/Cloud.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/bridge/Cloud.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,256 @@
+//$Id: $
+package org.hibernate.search.test.bridge;
+
+import java.util.Date;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+
+import org.hibernate.search.annotations.Keyword;
+import org.hibernate.search.annotations.Indexed;
+import org.hibernate.search.annotations.Text;
+import org.hibernate.search.annotations.DateBridge;
+import org.hibernate.search.annotations.FieldBridge;
+import org.hibernate.search.annotations.Resolution;
+import org.hibernate.search.annotations.Parameter;
+import org.hibernate.search.annotations.Field;
+import org.hibernate.search.annotations.Index;
+import org.hibernate.search.annotations.Store;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Indexed
+public class Cloud {
+    private int id;
+    private Long long1;
+    private long long2;
+    private Integer int1;
+    private int int2;
+    private Double double1;
+    private double double2;
+    private Float float1;
+    private float float2;
+    private String string;
+    private Date date;
+    private Date dateYear;
+    private Date dateMonth;
+    private Date dateDay;
+    private Date dateHour;
+    private Date dateMinute;
+    private Date dateSecond;
+    private Date dateMillisecond;
+    private String customFieldBridge;
+    private String customStringBridge;
+	private CloudType type;
+	private boolean storm;
+
+	@Text
+    @FieldBridge(impl = TruncateFieldBridge.class)
+    public String getCustomFieldBridge() {
+        return customFieldBridge;
+    }
+
+    public void setCustomFieldBridge(String customFieldBridge) {
+        this.customFieldBridge = customFieldBridge;
+    }
+
+    @Text
+    @FieldBridge(impl = TruncateStringBridge.class, params = @Parameter( name="dividedBy", value="4" ) )
+    public String getCustomStringBridge() {
+        return customStringBridge;
+    }
+
+    public void setCustomStringBridge(String customStringBridge) {
+        this.customStringBridge = customStringBridge;
+    }
+
+    @Id @GeneratedValue @Keyword(id=true)
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    @Keyword
+    public Long getLong1() {
+        return long1;
+    }
+
+    public void setLong1(Long long1) {
+        this.long1 = long1;
+    }
+
+    @Keyword
+    public long getLong2() {
+        return long2;
+    }
+
+    public void setLong2(long long2) {
+        this.long2 = long2;
+    }
+
+    @Keyword
+    public Integer getInt1() {
+        return int1;
+    }
+
+    public void setInt1(Integer int1) {
+        this.int1 = int1;
+    }
+
+    @Keyword
+    public int getInt2() {
+        return int2;
+    }
+
+    public void setInt2(int int2) {
+        this.int2 = int2;
+    }
+
+    @Keyword
+    public Double getDouble1() {
+        return double1;
+    }
+
+    public void setDouble1(Double double1) {
+        this.double1 = double1;
+    }
+
+    @Keyword
+    public double getDouble2() {
+        return double2;
+    }
+
+    public void setDouble2(double double2) {
+        this.double2 = double2;
+    }
+
+    @Keyword
+    public Float getFloat1() {
+        return float1;
+    }
+
+    public void setFloat1(Float float1) {
+        this.float1 = float1;
+    }
+
+    @Keyword
+    public float getFloat2() {
+        return float2;
+    }
+
+    public void setFloat2(float float2) {
+        this.float2 = float2;
+    }
+
+    @Text
+	public String getString() {
+        return string;
+    }
+
+    public void setString(String string) {
+        this.string = string;
+    }
+
+    @Keyword
+    public Date getDate() {
+        return date;
+    }
+
+    public void setDate(Date date) {
+        this.date = date;
+    }
+
+    @Keyword
+    @DateBridge( resolution = Resolution.YEAR )
+    public Date getDateYear() {
+        return dateYear;
+    }
+
+    public void setDateYear(Date dateYear) {
+        this.dateYear = dateYear;
+    }
+
+    @Keyword
+    @DateBridge( resolution = Resolution.MONTH )
+    public Date getDateMonth() {
+        return dateMonth;
+    }
+
+    public void setDateMonth(Date dateMonth) {
+        this.dateMonth = dateMonth;
+    }
+
+    @Keyword
+    @DateBridge( resolution = Resolution.DAY )
+    public Date getDateDay() {
+        return dateDay;
+    }
+
+    public void setDateDay(Date dateDay) {
+        this.dateDay = dateDay;
+    }
+
+    @Keyword
+    @DateBridge( resolution = Resolution.HOUR )
+    public Date getDateHour() {
+        return dateHour;
+    }
+
+    public void setDateHour(Date dateHour) {
+        this.dateHour = dateHour;
+    }
+
+
+    @Keyword
+    @DateBridge( resolution = Resolution.MINUTE )
+    public Date getDateMinute() {
+        return dateMinute;
+    }
+
+    public void setDateMinute(Date dateMinute) {
+        this.dateMinute = dateMinute;
+    }
+
+    @Keyword
+    @DateBridge( resolution = Resolution.SECOND )
+    public Date getDateSecond() {
+        return dateSecond;
+    }
+
+    public void setDateSecond(Date dateSecond) {
+        this.dateSecond = dateSecond;
+    }
+
+    @Keyword
+	@DateBridge( resolution = Resolution.MILLISECOND )
+    public Date getDateMillisecond() {
+        return dateMillisecond;
+    }
+
+    public void setDateMillisecond(Date dateMillisecond) {
+        this.dateMillisecond = dateMillisecond;
+    }
+
+	@Field(index = Index.TOKENIZED )
+	public CloudType getType() {
+		return type;
+	}
+
+	public void setType(CloudType type) {
+		this.type = type;
+	}
+
+	@Field(index = Index.TOKENIZED )
+	public boolean isStorm() {
+		return storm;
+	}
+
+	public void setStorm(boolean storm) {
+		this.storm = storm;
+	}
+}

Deleted: trunk/HibernateExt/search/src/test/org/hibernate/search/test/bridge/CloudType.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/bridge/CloudType.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/bridge/CloudType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,12 +0,0 @@
-//$Id: $
-package org.hibernate.search.test.bridge;
-
-/**
- * @author Emmanuel Bernard
- */
-public enum CloudType {
-	DRAGON,
-	HOUSE,
-	DOG,
-	EUROPE
-}

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/bridge/CloudType.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/bridge/CloudType.java)
===================================================================
--- trunk/HibernateExt/search/src/test/org/hibernate/search/test/bridge/CloudType.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/bridge/CloudType.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,12 @@
+//$Id: $
+package org.hibernate.search.test.bridge;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public enum CloudType {
+	DRAGON,
+	HOUSE,
+	DOG,
+	EUROPE
+}

Deleted: trunk/HibernateExt/search/src/test/org/hibernate/search/test/bridge/DateSplitBridge.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/bridge/DateSplitBridge.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/bridge/DateSplitBridge.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,43 +0,0 @@
-//$Id: $
-package org.hibernate.search.test.bridge;
-
-import java.util.Date;
-import java.util.Calendar;
-import java.util.GregorianCalendar;
-import java.util.TimeZone;
-
-import org.hibernate.search.bridge.FieldBridge;
-import org.apache.lucene.document.Document;
-import org.apache.lucene.document.Field;
-
-/**
- * Store the date in 3 different field year, month, day
- * to ease Range Query per year, month or day
- * (eg get all the elements of december for the last 5 years)
- *
- * @author Emmanuel Bernard
- */
-public class DateSplitBridge implements FieldBridge {
-	private final static TimeZone GMT = TimeZone.getTimeZone("GMT");
-
-	public void set(String name, Object value, Document document, Field.Store store, Field.Index index, Float boost) {
-		Date date = (Date) value;
-		Calendar cal = GregorianCalendar.getInstance( GMT );
-		cal.setTime( date );
-		int year = cal.get( Calendar.YEAR );
-		int month = cal.get( Calendar.MONTH ) + 1;
-		int day = cal.get( Calendar.DAY_OF_MONTH );
-		//set year
-		Field field = new Field( name + ".year", String.valueOf(year), store, index );
-		if ( boost != null ) field.setBoost( boost );
-		document.add( field );
-		//set month and pad it if needed
-		field = new Field( name + ".month", month < 10 ? "0" : "" + String.valueOf(month), store, index );
-		if ( boost != null ) field.setBoost( boost );
-		document.add( field );
-		//set day and pad it if needed
-		field = new Field( name + ".day", day < 10 ? "0" : "" + String.valueOf(day), store, index );
-		if ( boost != null ) field.setBoost( boost );
-		document.add( field );
-	}
-}

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/bridge/DateSplitBridge.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/bridge/DateSplitBridge.java)
===================================================================
--- trunk/HibernateExt/search/src/test/org/hibernate/search/test/bridge/DateSplitBridge.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/bridge/DateSplitBridge.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,43 @@
+//$Id: $
+package org.hibernate.search.test.bridge;
+
+import java.util.Date;
+import java.util.Calendar;
+import java.util.GregorianCalendar;
+import java.util.TimeZone;
+
+import org.hibernate.search.bridge.FieldBridge;
+import org.apache.lucene.document.Document;
+import org.apache.lucene.document.Field;
+
+/**
+ * Store the date in 3 different field year, month, day
+ * to ease Range Query per year, month or day
+ * (eg get all the elements of december for the last 5 years)
+ *
+ * @author Emmanuel Bernard
+ */
+public class DateSplitBridge implements FieldBridge {
+	private final static TimeZone GMT = TimeZone.getTimeZone("GMT");
+
+	public void set(String name, Object value, Document document, Field.Store store, Field.Index index, Float boost) {
+		Date date = (Date) value;
+		Calendar cal = GregorianCalendar.getInstance( GMT );
+		cal.setTime( date );
+		int year = cal.get( Calendar.YEAR );
+		int month = cal.get( Calendar.MONTH ) + 1;
+		int day = cal.get( Calendar.DAY_OF_MONTH );
+		//set year
+		Field field = new Field( name + ".year", String.valueOf(year), store, index );
+		if ( boost != null ) field.setBoost( boost );
+		document.add( field );
+		//set month and pad it if needed
+		field = new Field( name + ".month", month < 10 ? "0" : "" + String.valueOf(month), store, index );
+		if ( boost != null ) field.setBoost( boost );
+		document.add( field );
+		//set day and pad it if needed
+		field = new Field( name + ".day", day < 10 ? "0" : "" + String.valueOf(day), store, index );
+		if ( boost != null ) field.setBoost( boost );
+		document.add( field );
+	}
+}

Deleted: trunk/HibernateExt/search/src/test/org/hibernate/search/test/bridge/PaddedIntegerBridge.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/bridge/PaddedIntegerBridge.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/bridge/PaddedIntegerBridge.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,44 +0,0 @@
-//$Id: $
-package org.hibernate.search.test.bridge;
-
-import java.util.Arrays;
-import java.util.Map;
-import java.util.HashMap;
-
-import org.hibernate.search.bridge.StringBridge;
-import org.hibernate.search.bridge.ParameterizedBridge;
-import org.hibernate.search.bridge.TwoWayStringBridge;
-import org.hibernate.search.annotations.FieldBridge;
-import org.hibernate.annotations.Parameter;
-
-/**
- * Padding Integer bridge.
- * All numbers will be padded with 0 to match 5 digits
- *
- * @author Emmanuel Bernard
- */
-public class PaddedIntegerBridge implements TwoWayStringBridge, ParameterizedBridge {
-
-	public static String PADDING_PROPERTY = "padding";
-
-	private int padding = 5; //default
-
-	public void setParameterValues(Map parameters) {
-		Object padding = parameters.get( PADDING_PROPERTY );
-		if (padding != null) this.padding = (Integer) padding;
-	}
-
-	public String objectToString(Object object) {
-		String rawInteger = ( (Integer) object ).toString();
-		if (rawInteger.length() > padding) throw new IllegalArgumentException( "Try to pad on a number too big" );
-		StringBuilder paddedInteger = new StringBuilder( );
-		for ( int padIndex = rawInteger.length() ; padIndex < padding ; padIndex++ ) {
-			paddedInteger.append('0');
-		}
-		return paddedInteger.append( rawInteger ).toString();
-	}
-
-	public Object stringToObject(String stringValue) {
-		return new Integer(stringValue);
-	}
-}

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/bridge/PaddedIntegerBridge.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/bridge/PaddedIntegerBridge.java)
===================================================================
--- trunk/HibernateExt/search/src/test/org/hibernate/search/test/bridge/PaddedIntegerBridge.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/bridge/PaddedIntegerBridge.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,44 @@
+//$Id: $
+package org.hibernate.search.test.bridge;
+
+import java.util.Arrays;
+import java.util.Map;
+import java.util.HashMap;
+
+import org.hibernate.search.bridge.StringBridge;
+import org.hibernate.search.bridge.ParameterizedBridge;
+import org.hibernate.search.bridge.TwoWayStringBridge;
+import org.hibernate.search.annotations.FieldBridge;
+import org.hibernate.annotations.Parameter;
+
+/**
+ * Padding Integer bridge.
+ * All numbers will be padded with 0 to match 5 digits
+ *
+ * @author Emmanuel Bernard
+ */
+public class PaddedIntegerBridge implements TwoWayStringBridge, ParameterizedBridge {
+
+	public static String PADDING_PROPERTY = "padding";
+
+	private int padding = 5; //default
+
+	public void setParameterValues(Map parameters) {
+		Object padding = parameters.get( PADDING_PROPERTY );
+		if (padding != null) this.padding = (Integer) padding;
+	}
+
+	public String objectToString(Object object) {
+		String rawInteger = ( (Integer) object ).toString();
+		if (rawInteger.length() > padding) throw new IllegalArgumentException( "Try to pad on a number too big" );
+		StringBuilder paddedInteger = new StringBuilder( );
+		for ( int padIndex = rawInteger.length() ; padIndex < padding ; padIndex++ ) {
+			paddedInteger.append('0');
+		}
+		return paddedInteger.append( rawInteger ).toString();
+	}
+
+	public Object stringToObject(String stringValue) {
+		return new Integer(stringValue);
+	}
+}

Deleted: trunk/HibernateExt/search/src/test/org/hibernate/search/test/bridge/TruncateFieldBridge.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/bridge/TruncateFieldBridge.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/bridge/TruncateFieldBridge.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,27 +0,0 @@
-//$Id: $
-package org.hibernate.search.test.bridge;
-
-import org.hibernate.search.bridge.FieldBridge;
-import org.hibernate.util.StringHelper;
-import org.apache.lucene.document.Document;
-import org.apache.lucene.document.Field;
-
-/**
- * @author Emmanuel Bernard
- */
-public class TruncateFieldBridge implements FieldBridge {
-    public Object get(String name, Document document) {
-		Field field = document.getField( name );
-		return field.stringValue();
-	}
-
-	public void set(String name, Object value, Document document, Field.Store store, Field.Index index, Float boost) {
-        String indexedString = (String) value;
-        //Do not add fields on empty strings, seems a sensible default in most situations
-        if ( StringHelper.isNotEmpty( indexedString ) ) {
-            Field field = new Field(name, indexedString.substring(0, indexedString.length() / 2), store, index);
-            if (boost != null) field.setBoost( boost );
-            document.add( field );
-        }
-    }
-}

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/bridge/TruncateFieldBridge.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/bridge/TruncateFieldBridge.java)
===================================================================
--- trunk/HibernateExt/search/src/test/org/hibernate/search/test/bridge/TruncateFieldBridge.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/bridge/TruncateFieldBridge.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,27 @@
+//$Id: $
+package org.hibernate.search.test.bridge;
+
+import org.hibernate.search.bridge.FieldBridge;
+import org.hibernate.util.StringHelper;
+import org.apache.lucene.document.Document;
+import org.apache.lucene.document.Field;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class TruncateFieldBridge implements FieldBridge {
+    public Object get(String name, Document document) {
+		Field field = document.getField( name );
+		return field.stringValue();
+	}
+
+	public void set(String name, Object value, Document document, Field.Store store, Field.Index index, Float boost) {
+        String indexedString = (String) value;
+        //Do not add fields on empty strings, seems a sensible default in most situations
+        if ( StringHelper.isNotEmpty( indexedString ) ) {
+            Field field = new Field(name, indexedString.substring(0, indexedString.length() / 2), store, index);
+            if (boost != null) field.setBoost( boost );
+            document.add( field );
+        }
+    }
+}

Deleted: trunk/HibernateExt/search/src/test/org/hibernate/search/test/bridge/TruncateStringBridge.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/bridge/TruncateStringBridge.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/bridge/TruncateStringBridge.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,26 +0,0 @@
-//$Id: $
-package org.hibernate.search.test.bridge;
-
-import java.util.Map;
-
-import org.hibernate.search.bridge.StringBridge;
-import org.hibernate.search.bridge.ParameterizedBridge;
-
-/**
- * @author Emmanuel Bernard
- */
-public class TruncateStringBridge implements StringBridge, ParameterizedBridge {
-    private int div;
-    public Object stringToObject(String stringValue) {
-        return stringValue;
-    }
-
-    public String objectToString(Object object) {
-        String string = (String) object;
-        return object != null ? string.substring( 0, string.length() / div ) : null;
-    }
-
-    public void setParameterValues(Map parameters) {
-        div = Integer.valueOf( (String) parameters.get( "dividedBy" ) );
-    }
-}

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/bridge/TruncateStringBridge.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/bridge/TruncateStringBridge.java)
===================================================================
--- trunk/HibernateExt/search/src/test/org/hibernate/search/test/bridge/TruncateStringBridge.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/bridge/TruncateStringBridge.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,26 @@
+//$Id: $
+package org.hibernate.search.test.bridge;
+
+import java.util.Map;
+
+import org.hibernate.search.bridge.StringBridge;
+import org.hibernate.search.bridge.ParameterizedBridge;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class TruncateStringBridge implements StringBridge, ParameterizedBridge {
+    private int div;
+    public Object stringToObject(String stringValue) {
+        return stringValue;
+    }
+
+    public String objectToString(Object object) {
+        String string = (String) object;
+        return object != null ? string.substring( 0, string.length() / div ) : null;
+    }
+
+    public void setParameterValues(Map parameters) {
+        div = Integer.valueOf( (String) parameters.get( "dividedBy" ) );
+    }
+}

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/directoryProvider (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/directoryProvider)

Deleted: trunk/HibernateExt/search/src/test/org/hibernate/search/test/directoryProvider/FSSlaveAndMasterDPTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/directoryProvider/FSSlaveAndMasterDPTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/directoryProvider/FSSlaveAndMasterDPTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,138 +0,0 @@
-//$Id: $
-package org.hibernate.search.test.directoryProvider;
-
-import java.io.File;
-import java.util.Date;
-import java.util.List;
-
-import org.apache.lucene.analysis.StopAnalyzer;
-import org.apache.lucene.queryParser.QueryParser;
-import org.hibernate.Session;
-import org.hibernate.cfg.Configuration;
-import org.hibernate.event.PostDeleteEventListener;
-import org.hibernate.event.PostInsertEventListener;
-import org.hibernate.event.PostUpdateEventListener;
-import org.hibernate.search.FullTextSession;
-import org.hibernate.search.Search;
-import org.hibernate.search.event.FullTextIndexEventListener;
-import org.hibernate.search.util.FileHelper;
-
-/**
- * @author Emmanuel Bernard
- */
-public class FSSlaveAndMasterDPTest extends MultipleSFTestCase {
-
-	public void testProperCopy() throws Exception {
-		Session s1 = getSessionFactories()[0].openSession( );
-		SnowStorm sn = new SnowStorm();
-		sn.setDate( new Date() );
-		sn.setLocation( "Dallas, TX, USA");
-
-		FullTextSession fts2 = Search.createFullTextSession( getSessionFactories()[1].openSession( ) );
-		QueryParser parser = new QueryParser("id", new StopAnalyzer() );
-		List result = fts2.createFullTextQuery( parser.parse( "location:texas" ) ).list();
-		assertEquals( "No copy yet, fresh index expected", 0, result.size() );
-
-		s1.persist( sn );
-		s1.flush(); //we don' commit so we need to flush manually
-
-		fts2.close();
-		s1.close();
-
-		int waitPeroid = 2 * 1 * 1000 + 10; //wait a bit more than 2 refresh (one master / one slave)
-		Thread.sleep( waitPeroid );
-
-		//temp test original
-		fts2 = Search.createFullTextSession( getSessionFactories()[0].openSession( ) );
-		result = fts2.createFullTextQuery( parser.parse( "location:dallas" ) ).list();
-		assertEquals( "Original should get one", 1, result.size() );
-
-		fts2 = Search.createFullTextSession( getSessionFactories()[1].openSession( ) );
-		result = fts2.createFullTextQuery( parser.parse( "location:dallas" ) ).list();
-		assertEquals("First copy did not work out", 1, result.size() );
-
-		s1 = getSessionFactories()[0].openSession( );
-		sn = new SnowStorm();
-		sn.setDate( new Date() );
-		sn.setLocation( "Chennai, India");
-
-		s1.persist( sn );
-		s1.flush(); //we don' commit so we need to flush manually
-
-		fts2.close();
-		s1.close();
-
-		Thread.sleep( waitPeroid ); //wait a bit more than 2 refresh (one master / one slave)
-
-		fts2 = Search.createFullTextSession( getSessionFactories()[1].openSession( ) );
-		result = fts2.createFullTextQuery( parser.parse( "location:chennai" ) ).list();
-		assertEquals("Second copy did not work out", 1, result.size() );
-
-		s1 = getSessionFactories()[0].openSession( );
-		sn = new SnowStorm();
-		sn.setDate( new Date() );
-		sn.setLocation( "Melbourne, Australia");
-
-		s1.persist( sn );
-		s1.flush(); //we don' commit so we need to flush manually
-
-		fts2.close();
-		s1.close();
-
-		Thread.sleep( waitPeroid ); //wait a bit more than 2 refresh (one master / one slave)
-
-		fts2 = Search.createFullTextSession( getSessionFactories()[1].openSession( ) );
-		result = fts2.createFullTextQuery( parser.parse( "location:melbourne" ) ).list();
-		assertEquals("Third copy did not work out", 1, result.size() );
-
-		fts2.close();
-	}
-
-
-	protected void setUp() throws Exception {
-		File base = new File(".");
-		File root = new File(base, "lucenedirs");
-		root.mkdir();
-
-		File master = new File(root, "master/main");
-		master.mkdirs();
-		master = new File(root, "master/copy");
-		master.mkdirs();
-
-		File slave = new File(root, "slave");
-		slave.mkdir();
-
-		super.setUp();
-	}
-
-	protected void tearDown() throws Exception {
-		super.tearDown();
-		File base = new File(".");
-		File root = new File(base, "lucenedirs");
-		FileHelper.delete( root );
-	}
-
-	protected int getSFNbrs() {
-		return 2;
-	}
-
-	protected Class[] getMappings() {
-		return new Class[] {
-				SnowStorm.class
-		};
-	}
-
-	protected void configure(Configuration[] cfg) {
-		//master
-		cfg[0].setProperty( "hibernate.search.default.sourceBase", "./lucenedirs/master/copy");
-		cfg[0].setProperty( "hibernate.search.default.indexBase", "./lucenedirs/master/main");
-		cfg[0].setProperty( "hibernate.search.default.refresh", "1"); //every minute
-		cfg[0].setProperty( "hibernate.search.default.directory_provider", "org.hibernate.search.store.FSMasterDirectoryProvider");
-
-		//slave(s)
-		cfg[1].setProperty( "hibernate.search.default.sourceBase", "./lucenedirs/master/copy");
-		cfg[1].setProperty( "hibernate.search.default.indexBase", "./lucenedirs/slave");
-		cfg[1].setProperty( "hibernate.search.default.refresh", "1"); //every minute
-		cfg[1].setProperty( "hibernate.search.default.directory_provider", "org.hibernate.search.store.FSSlaveDirectoryProvider");
-	}
-}

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/directoryProvider/FSSlaveAndMasterDPTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/directoryProvider/FSSlaveAndMasterDPTest.java)
===================================================================
--- trunk/HibernateExt/search/src/test/org/hibernate/search/test/directoryProvider/FSSlaveAndMasterDPTest.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/directoryProvider/FSSlaveAndMasterDPTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,138 @@
+//$Id: $
+package org.hibernate.search.test.directoryProvider;
+
+import java.io.File;
+import java.util.Date;
+import java.util.List;
+
+import org.apache.lucene.analysis.StopAnalyzer;
+import org.apache.lucene.queryParser.QueryParser;
+import org.hibernate.Session;
+import org.hibernate.cfg.Configuration;
+import org.hibernate.event.PostDeleteEventListener;
+import org.hibernate.event.PostInsertEventListener;
+import org.hibernate.event.PostUpdateEventListener;
+import org.hibernate.search.FullTextSession;
+import org.hibernate.search.Search;
+import org.hibernate.search.event.FullTextIndexEventListener;
+import org.hibernate.search.util.FileHelper;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class FSSlaveAndMasterDPTest extends MultipleSFTestCase {
+
+	public void testProperCopy() throws Exception {
+		Session s1 = getSessionFactories()[0].openSession( );
+		SnowStorm sn = new SnowStorm();
+		sn.setDate( new Date() );
+		sn.setLocation( "Dallas, TX, USA");
+
+		FullTextSession fts2 = Search.createFullTextSession( getSessionFactories()[1].openSession( ) );
+		QueryParser parser = new QueryParser("id", new StopAnalyzer() );
+		List result = fts2.createFullTextQuery( parser.parse( "location:texas" ) ).list();
+		assertEquals( "No copy yet, fresh index expected", 0, result.size() );
+
+		s1.persist( sn );
+		s1.flush(); //we don' commit so we need to flush manually
+
+		fts2.close();
+		s1.close();
+
+		int waitPeroid = 2 * 1 * 1000 + 10; //wait a bit more than 2 refresh (one master / one slave)
+		Thread.sleep( waitPeroid );
+
+		//temp test original
+		fts2 = Search.createFullTextSession( getSessionFactories()[0].openSession( ) );
+		result = fts2.createFullTextQuery( parser.parse( "location:dallas" ) ).list();
+		assertEquals( "Original should get one", 1, result.size() );
+
+		fts2 = Search.createFullTextSession( getSessionFactories()[1].openSession( ) );
+		result = fts2.createFullTextQuery( parser.parse( "location:dallas" ) ).list();
+		assertEquals("First copy did not work out", 1, result.size() );
+
+		s1 = getSessionFactories()[0].openSession( );
+		sn = new SnowStorm();
+		sn.setDate( new Date() );
+		sn.setLocation( "Chennai, India");
+
+		s1.persist( sn );
+		s1.flush(); //we don' commit so we need to flush manually
+
+		fts2.close();
+		s1.close();
+
+		Thread.sleep( waitPeroid ); //wait a bit more than 2 refresh (one master / one slave)
+
+		fts2 = Search.createFullTextSession( getSessionFactories()[1].openSession( ) );
+		result = fts2.createFullTextQuery( parser.parse( "location:chennai" ) ).list();
+		assertEquals("Second copy did not work out", 1, result.size() );
+
+		s1 = getSessionFactories()[0].openSession( );
+		sn = new SnowStorm();
+		sn.setDate( new Date() );
+		sn.setLocation( "Melbourne, Australia");
+
+		s1.persist( sn );
+		s1.flush(); //we don' commit so we need to flush manually
+
+		fts2.close();
+		s1.close();
+
+		Thread.sleep( waitPeroid ); //wait a bit more than 2 refresh (one master / one slave)
+
+		fts2 = Search.createFullTextSession( getSessionFactories()[1].openSession( ) );
+		result = fts2.createFullTextQuery( parser.parse( "location:melbourne" ) ).list();
+		assertEquals("Third copy did not work out", 1, result.size() );
+
+		fts2.close();
+	}
+
+
+	protected void setUp() throws Exception {
+		File base = new File(".");
+		File root = new File(base, "lucenedirs");
+		root.mkdir();
+
+		File master = new File(root, "master/main");
+		master.mkdirs();
+		master = new File(root, "master/copy");
+		master.mkdirs();
+
+		File slave = new File(root, "slave");
+		slave.mkdir();
+
+		super.setUp();
+	}
+
+	protected void tearDown() throws Exception {
+		super.tearDown();
+		File base = new File(".");
+		File root = new File(base, "lucenedirs");
+		FileHelper.delete( root );
+	}
+
+	protected int getSFNbrs() {
+		return 2;
+	}
+
+	protected Class[] getMappings() {
+		return new Class[] {
+				SnowStorm.class
+		};
+	}
+
+	protected void configure(Configuration[] cfg) {
+		//master
+		cfg[0].setProperty( "hibernate.search.default.sourceBase", "./lucenedirs/master/copy");
+		cfg[0].setProperty( "hibernate.search.default.indexBase", "./lucenedirs/master/main");
+		cfg[0].setProperty( "hibernate.search.default.refresh", "1"); //every minute
+		cfg[0].setProperty( "hibernate.search.default.directory_provider", "org.hibernate.search.store.FSMasterDirectoryProvider");
+
+		//slave(s)
+		cfg[1].setProperty( "hibernate.search.default.sourceBase", "./lucenedirs/master/copy");
+		cfg[1].setProperty( "hibernate.search.default.indexBase", "./lucenedirs/slave");
+		cfg[1].setProperty( "hibernate.search.default.refresh", "1"); //every minute
+		cfg[1].setProperty( "hibernate.search.default.directory_provider", "org.hibernate.search.store.FSSlaveDirectoryProvider");
+	}
+}

Deleted: trunk/HibernateExt/search/src/test/org/hibernate/search/test/directoryProvider/MultipleSFTestCase.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/directoryProvider/MultipleSFTestCase.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/directoryProvider/MultipleSFTestCase.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,95 +0,0 @@
-//$Id: $
-package org.hibernate.search.test.directoryProvider;
-
-import java.io.InputStream;
-
-import junit.framework.TestCase;
-import org.hibernate.SessionFactory;
-import org.hibernate.cfg.AnnotationConfiguration;
-import org.hibernate.cfg.Configuration;
-import org.hibernate.cfg.Environment;
-import org.hibernate.dialect.Dialect;
-
-/**
- * Build multiple session factories from the same set of classes
- * The configuration can be altered overriding the #configure() method
- *
- * @author Emmanuel Bernard
- */
-public abstract class MultipleSFTestCase extends TestCase {
-
-	private static SessionFactory[] sessionFactories;
-	private static AnnotationConfiguration[] cfgs;
-	private static Dialect dialect;
-	private static Class lastTestClass;
-
-	protected abstract int getSFNbrs();
-
-	protected void buildSessionFactories(Class[] classes, String[] packages, String[] xmlFiles) throws Exception {
-		if (sessionFactories == null) sessionFactories = new SessionFactory[ getSFNbrs() ];
-		if (cfgs == null) cfgs = new AnnotationConfiguration[ getSFNbrs() ];
-		for (SessionFactory sf : sessionFactories ) if ( sf != null ) sf.close();
-		for (int sfIndex = 0 ; sfIndex < getSFNbrs() ; sfIndex++ ) {
-			cfgs[sfIndex] = new AnnotationConfiguration();
-		}
-		configure( cfgs );
-		for (int sfIndex = 0 ; sfIndex < getSFNbrs() ; sfIndex++ ) {
-			try {
-				if ( recreateSchema() ) {
-					cfgs[sfIndex].setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
-				}
-				for ( int i = 0; i < packages.length; i++ ) {
-					cfgs[sfIndex].addPackage( packages[i] );
-				}
-				for ( int i = 0; i < classes.length; i++ ) {
-					cfgs[sfIndex].addAnnotatedClass( classes[i] );
-				}
-				for ( int i = 0; i < xmlFiles.length; i++ ) {
-					InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream( xmlFiles[i] );
-					cfgs[sfIndex].addInputStream( is );
-				}
-				setDialect( Dialect.getDialect() );
-				sessionFactories[sfIndex] = cfgs[sfIndex].buildSessionFactory( /*new TestInterceptor()*/ );
-			}
-			catch (Exception e) {
-				e.printStackTrace();
-				throw e;
-			}
-		}
-	}
-
-	protected void setUp() throws Exception {
-		if ( sessionFactories == null || sessionFactories[0] == null || lastTestClass != getClass() ) {
-			buildSessionFactories( getMappings(), getAnnotatedPackages(), getXmlFiles() );
-			lastTestClass = getClass();
-		}
-	}
-
-	protected abstract Class[] getMappings();
-
-	protected String[] getAnnotatedPackages() {
-		return new String[]{};
-	}
-
-	protected String[] getXmlFiles() {
-		return new String[]{};
-	}
-
-	private void setDialect(Dialect dialect) {
-		MultipleSFTestCase.dialect = dialect;
-	}
-
-	protected Dialect getDialect() {
-		return dialect;
-	}
-
-	protected abstract void configure(Configuration[] cfg) ;
-
-	protected boolean recreateSchema() {
-		return true;
-	}
-
-	public static SessionFactory[] getSessionFactories() {
-		return sessionFactories;
-	}
-}

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/directoryProvider/MultipleSFTestCase.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/directoryProvider/MultipleSFTestCase.java)
===================================================================
--- trunk/HibernateExt/search/src/test/org/hibernate/search/test/directoryProvider/MultipleSFTestCase.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/directoryProvider/MultipleSFTestCase.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,95 @@
+//$Id: $
+package org.hibernate.search.test.directoryProvider;
+
+import java.io.InputStream;
+
+import junit.framework.TestCase;
+import org.hibernate.SessionFactory;
+import org.hibernate.cfg.AnnotationConfiguration;
+import org.hibernate.cfg.Configuration;
+import org.hibernate.cfg.Environment;
+import org.hibernate.dialect.Dialect;
+
+/**
+ * Build multiple session factories from the same set of classes
+ * The configuration can be altered overriding the #configure() method
+ *
+ * @author Emmanuel Bernard
+ */
+public abstract class MultipleSFTestCase extends TestCase {
+
+	private static SessionFactory[] sessionFactories;
+	private static AnnotationConfiguration[] cfgs;
+	private static Dialect dialect;
+	private static Class lastTestClass;
+
+	protected abstract int getSFNbrs();
+
+	protected void buildSessionFactories(Class[] classes, String[] packages, String[] xmlFiles) throws Exception {
+		if (sessionFactories == null) sessionFactories = new SessionFactory[ getSFNbrs() ];
+		if (cfgs == null) cfgs = new AnnotationConfiguration[ getSFNbrs() ];
+		for (SessionFactory sf : sessionFactories ) if ( sf != null ) sf.close();
+		for (int sfIndex = 0 ; sfIndex < getSFNbrs() ; sfIndex++ ) {
+			cfgs[sfIndex] = new AnnotationConfiguration();
+		}
+		configure( cfgs );
+		for (int sfIndex = 0 ; sfIndex < getSFNbrs() ; sfIndex++ ) {
+			try {
+				if ( recreateSchema() ) {
+					cfgs[sfIndex].setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
+				}
+				for ( int i = 0; i < packages.length; i++ ) {
+					cfgs[sfIndex].addPackage( packages[i] );
+				}
+				for ( int i = 0; i < classes.length; i++ ) {
+					cfgs[sfIndex].addAnnotatedClass( classes[i] );
+				}
+				for ( int i = 0; i < xmlFiles.length; i++ ) {
+					InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream( xmlFiles[i] );
+					cfgs[sfIndex].addInputStream( is );
+				}
+				setDialect( Dialect.getDialect() );
+				sessionFactories[sfIndex] = cfgs[sfIndex].buildSessionFactory( /*new TestInterceptor()*/ );
+			}
+			catch (Exception e) {
+				e.printStackTrace();
+				throw e;
+			}
+		}
+	}
+
+	protected void setUp() throws Exception {
+		if ( sessionFactories == null || sessionFactories[0] == null || lastTestClass != getClass() ) {
+			buildSessionFactories( getMappings(), getAnnotatedPackages(), getXmlFiles() );
+			lastTestClass = getClass();
+		}
+	}
+
+	protected abstract Class[] getMappings();
+
+	protected String[] getAnnotatedPackages() {
+		return new String[]{};
+	}
+
+	protected String[] getXmlFiles() {
+		return new String[]{};
+	}
+
+	private void setDialect(Dialect dialect) {
+		MultipleSFTestCase.dialect = dialect;
+	}
+
+	protected Dialect getDialect() {
+		return dialect;
+	}
+
+	protected abstract void configure(Configuration[] cfg) ;
+
+	protected boolean recreateSchema() {
+		return true;
+	}
+
+	public static SessionFactory[] getSessionFactories() {
+		return sessionFactories;
+	}
+}

Deleted: trunk/HibernateExt/search/src/test/org/hibernate/search/test/directoryProvider/SnowStorm.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/directoryProvider/SnowStorm.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/directoryProvider/SnowStorm.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,58 +0,0 @@
-//$Id: $
-package org.hibernate.search.test.directoryProvider;
-
-import java.util.Date;
-import javax.persistence.Id;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Entity;
-
-import org.hibernate.search.annotations.Indexed;
-import org.hibernate.search.annotations.DocumentId;
-import org.hibernate.search.annotations.Field;
-import org.hibernate.search.annotations.Index;
-import org.hibernate.search.annotations.DateBridge;
-import org.hibernate.search.annotations.Resolution;
-
-/**
- * @author Emmanuel Bernard
- */
- at Indexed
- at Entity
-public class SnowStorm {
-	@Id
-	@GeneratedValue
-	@DocumentId
-	private Long id;
-
-	@Field(index = Index.UN_TOKENIZED)
-	@DateBridge( resolution = Resolution.DAY )
-	private Date date;
-
-	@Field(index = Index.TOKENIZED)
-	private String location;
-
-
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-
-	public Date getDate() {
-		return date;
-	}
-
-	public void setDate(Date date) {
-		this.date = date;
-	}
-
-	public String getLocation() {
-		return location;
-	}
-
-	public void setLocation(String location) {
-		this.location = location;
-	}
-}

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/directoryProvider/SnowStorm.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/directoryProvider/SnowStorm.java)
===================================================================
--- trunk/HibernateExt/search/src/test/org/hibernate/search/test/directoryProvider/SnowStorm.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/directoryProvider/SnowStorm.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,58 @@
+//$Id: $
+package org.hibernate.search.test.directoryProvider;
+
+import java.util.Date;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Entity;
+
+import org.hibernate.search.annotations.Indexed;
+import org.hibernate.search.annotations.DocumentId;
+import org.hibernate.search.annotations.Field;
+import org.hibernate.search.annotations.Index;
+import org.hibernate.search.annotations.DateBridge;
+import org.hibernate.search.annotations.Resolution;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Indexed
+ at Entity
+public class SnowStorm {
+	@Id
+	@GeneratedValue
+	@DocumentId
+	private Long id;
+
+	@Field(index = Index.UN_TOKENIZED)
+	@DateBridge( resolution = Resolution.DAY )
+	private Date date;
+
+	@Field(index = Index.TOKENIZED)
+	private String location;
+
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public Date getDate() {
+		return date;
+	}
+
+	public void setDate(Date date) {
+		this.date = date;
+	}
+
+	public String getLocation() {
+		return location;
+	}
+
+	public void setLocation(String location) {
+		this.location = location;
+	}
+}

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/embedded (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/embedded)

Deleted: trunk/HibernateExt/search/src/test/org/hibernate/search/test/embedded/Address.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/embedded/Address.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/embedded/Address.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,71 +0,0 @@
-//$Id: $
-package org.hibernate.search.test.embedded;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.GeneratedValue;
-import javax.persistence.OneToOne;
-
-import org.hibernate.search.annotations.Indexed;
-import org.hibernate.search.annotations.DocumentId;
-import org.hibernate.search.annotations.Field;
-import org.hibernate.search.annotations.Index;
-import org.hibernate.search.annotations.IndexedEmbedded;
-import org.hibernate.search.annotations.ContainedIn;
-
-/**
- * @author Emmanuel Bernard
- */
-
- at Entity
- at Indexed
-public class Address {
-	@Id
-	@GeneratedValue
-	@DocumentId
-	private Long id;
-
-	@Field(index= Index.TOKENIZED)
-	private String street;
-
-	@IndexedEmbedded(depth = 1, prefix = "ownedBy_")
-	private Owner ownedBy;
-
-	@OneToOne(mappedBy = "address")
-	@ContainedIn
-	private Tower tower;
-
-
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-
-	public String getStreet() {
-		return street;
-	}
-
-	public void setStreet(String street) {
-		this.street = street;
-	}
-
-	public Owner getOwnedBy() {
-		return ownedBy;
-	}
-
-	public void setOwnedBy(Owner ownedBy) {
-		this.ownedBy = ownedBy;
-	}
-
-
-	public Tower getTower() {
-		return tower;
-	}
-
-	public void setTower(Tower tower) {
-		this.tower = tower;
-	}
-}

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/embedded/Address.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/embedded/Address.java)
===================================================================
--- trunk/HibernateExt/search/src/test/org/hibernate/search/test/embedded/Address.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/embedded/Address.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,71 @@
+//$Id: $
+package org.hibernate.search.test.embedded;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+import javax.persistence.OneToOne;
+
+import org.hibernate.search.annotations.Indexed;
+import org.hibernate.search.annotations.DocumentId;
+import org.hibernate.search.annotations.Field;
+import org.hibernate.search.annotations.Index;
+import org.hibernate.search.annotations.IndexedEmbedded;
+import org.hibernate.search.annotations.ContainedIn;
+
+/**
+ * @author Emmanuel Bernard
+ */
+
+ at Entity
+ at Indexed
+public class Address {
+	@Id
+	@GeneratedValue
+	@DocumentId
+	private Long id;
+
+	@Field(index= Index.TOKENIZED)
+	private String street;
+
+	@IndexedEmbedded(depth = 1, prefix = "ownedBy_")
+	private Owner ownedBy;
+
+	@OneToOne(mappedBy = "address")
+	@ContainedIn
+	private Tower tower;
+
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getStreet() {
+		return street;
+	}
+
+	public void setStreet(String street) {
+		this.street = street;
+	}
+
+	public Owner getOwnedBy() {
+		return ownedBy;
+	}
+
+	public void setOwnedBy(Owner ownedBy) {
+		this.ownedBy = ownedBy;
+	}
+
+
+	public Tower getTower() {
+		return tower;
+	}
+
+	public void setTower(Tower tower) {
+		this.tower = tower;
+	}
+}

Deleted: trunk/HibernateExt/search/src/test/org/hibernate/search/test/embedded/EmbeddedTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/embedded/EmbeddedTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/embedded/EmbeddedTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,144 +0,0 @@
-//$Id: $
-package org.hibernate.search.test.embedded;
-
-import java.util.List;
-
-import org.hibernate.search.test.SearchTestCase;
-import org.hibernate.search.FullTextSession;
-import org.hibernate.search.Search;
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-import org.apache.lucene.queryParser.QueryParser;
-import org.apache.lucene.analysis.standard.StandardAnalyzer;
-import org.apache.lucene.search.Query;
-
-/**
- * @author Emmanuel Bernard
- */
-public class EmbeddedTest extends SearchTestCase {
-
-	public void testEmbeddedIndexing() throws Exception {
-		Tower tower = new Tower();
-		tower.setName( "JBoss tower" );
-		Address a = new Address();
-		a.setStreet( "Tower place");
-		a.setTower( tower );
-		tower.setAddress( a );
-		Owner o = new Owner();
-		o.setName( "Atlanta Renting corp" );
-		a.setOwnedBy( o );
-		o.setAddress( a );
-
-		Session s = openSession( );
-		Transaction tx = s.beginTransaction();
-		s.persist( tower );
-		tx.commit();
-
-
-		
-
-		FullTextSession session = Search.createFullTextSession(s);
-        QueryParser parser = new QueryParser("id", new StandardAnalyzer() );
-        Query query;
-        List result;
-
-        query = parser.parse("address.street:place");
-		result = session.createFullTextQuery(query).list();
-        assertEquals( "unable to find property in embedded", 1, result.size() );
-
-		query = parser.parse("address.ownedBy_name:renting");
-		result = session.createFullTextQuery(query, Tower.class).list();
-		assertEquals( "unable to find property in embedded", 1, result.size() );
-
-		s.clear();
-
-		tx = s.beginTransaction();
-		Address address = (Address) s.get(Address.class, a.getId() );
-		address.getOwnedBy().setName( "Buckhead community");
-		tx.commit();
-
-
-		s.clear();
-
-		session = Search.createFullTextSession(s);
-
-        query = parser.parse("address.ownedBy_name:buckhead");
-		result = session.createFullTextQuery(query, Tower.class).list();
-        assertEquals( "change in embedded not reflected in root index", 1, result.size() );
-
-		s.clear();
-
-		tx = s.beginTransaction();
-		s.delete( s.get(Tower.class, tower.getId() ) );
-		tx.commit();
-
-		s.close();
-
-	}
-
-	public void testContainedIn() throws Exception {
-		Tower tower = new Tower();
-		tower.setName( "JBoss tower" );
-		Address a = new Address();
-		a.setStreet( "Tower place");
-		a.setTower( tower );
-		tower.setAddress( a );
-		Owner o = new Owner();
-		o.setName( "Atlanta Renting corp" );
-		a.setOwnedBy( o );
-		o.setAddress( a );
-
-		Session s = openSession( );
-		Transaction tx = s.beginTransaction();
-		s.persist( tower );
-		tx.commit();
-
-		s.clear();
-
-		tx = s.beginTransaction();
-		Address address = (Address) s.get(Address.class, a.getId() );
-		address.setStreet( "Peachtree Road NE" );
-		tx.commit();
-
-		s.clear();
-
-		FullTextSession session = Search.createFullTextSession(s);
-        QueryParser parser = new QueryParser("id", new StandardAnalyzer() );
-        Query query;
-        List result;
-
-        query = parser.parse("address.street:peachtree");
-		result = session.createFullTextQuery(query, Tower.class).list();
-        assertEquals( "change in embedded not reflected in root index", 1, result.size() );
-
-		s.clear();
-
-		tx = s.beginTransaction();
-		address = (Address) s.get(Address.class, a.getId() );
-		address.getTower().setAddress( null );
-		address.setTower( null );
-		tx.commit();
-
-		s.clear();
-
-		session = Search.createFullTextSession(s);
-
-        query = parser.parse("address.street:peachtree");
-		result = session.createFullTextQuery(query, Tower.class).list();
-        assertEquals( "breaking link fails", 0, result.size() );
-
-		tx = s.beginTransaction();
-		s.delete( s.get(Tower.class, tower.getId() ) );
-		tx.commit();
-
-		s.close();
-
-	}
-
-	protected Class[] getMappings() {
-		return new Class[] {
-				Tower.class,
-				Address.class
-		};
-	}
-}

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/embedded/EmbeddedTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/embedded/EmbeddedTest.java)
===================================================================
--- trunk/HibernateExt/search/src/test/org/hibernate/search/test/embedded/EmbeddedTest.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/embedded/EmbeddedTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,144 @@
+//$Id: $
+package org.hibernate.search.test.embedded;
+
+import java.util.List;
+
+import org.hibernate.search.test.SearchTestCase;
+import org.hibernate.search.FullTextSession;
+import org.hibernate.search.Search;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.apache.lucene.queryParser.QueryParser;
+import org.apache.lucene.analysis.standard.StandardAnalyzer;
+import org.apache.lucene.search.Query;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class EmbeddedTest extends SearchTestCase {
+
+	public void testEmbeddedIndexing() throws Exception {
+		Tower tower = new Tower();
+		tower.setName( "JBoss tower" );
+		Address a = new Address();
+		a.setStreet( "Tower place");
+		a.setTower( tower );
+		tower.setAddress( a );
+		Owner o = new Owner();
+		o.setName( "Atlanta Renting corp" );
+		a.setOwnedBy( o );
+		o.setAddress( a );
+
+		Session s = openSession( );
+		Transaction tx = s.beginTransaction();
+		s.persist( tower );
+		tx.commit();
+
+
+		
+
+		FullTextSession session = Search.createFullTextSession(s);
+        QueryParser parser = new QueryParser("id", new StandardAnalyzer() );
+        Query query;
+        List result;
+
+        query = parser.parse("address.street:place");
+		result = session.createFullTextQuery(query).list();
+        assertEquals( "unable to find property in embedded", 1, result.size() );
+
+		query = parser.parse("address.ownedBy_name:renting");
+		result = session.createFullTextQuery(query, Tower.class).list();
+		assertEquals( "unable to find property in embedded", 1, result.size() );
+
+		s.clear();
+
+		tx = s.beginTransaction();
+		Address address = (Address) s.get(Address.class, a.getId() );
+		address.getOwnedBy().setName( "Buckhead community");
+		tx.commit();
+
+
+		s.clear();
+
+		session = Search.createFullTextSession(s);
+
+        query = parser.parse("address.ownedBy_name:buckhead");
+		result = session.createFullTextQuery(query, Tower.class).list();
+        assertEquals( "change in embedded not reflected in root index", 1, result.size() );
+
+		s.clear();
+
+		tx = s.beginTransaction();
+		s.delete( s.get(Tower.class, tower.getId() ) );
+		tx.commit();
+
+		s.close();
+
+	}
+
+	public void testContainedIn() throws Exception {
+		Tower tower = new Tower();
+		tower.setName( "JBoss tower" );
+		Address a = new Address();
+		a.setStreet( "Tower place");
+		a.setTower( tower );
+		tower.setAddress( a );
+		Owner o = new Owner();
+		o.setName( "Atlanta Renting corp" );
+		a.setOwnedBy( o );
+		o.setAddress( a );
+
+		Session s = openSession( );
+		Transaction tx = s.beginTransaction();
+		s.persist( tower );
+		tx.commit();
+
+		s.clear();
+
+		tx = s.beginTransaction();
+		Address address = (Address) s.get(Address.class, a.getId() );
+		address.setStreet( "Peachtree Road NE" );
+		tx.commit();
+
+		s.clear();
+
+		FullTextSession session = Search.createFullTextSession(s);
+        QueryParser parser = new QueryParser("id", new StandardAnalyzer() );
+        Query query;
+        List result;
+
+        query = parser.parse("address.street:peachtree");
+		result = session.createFullTextQuery(query, Tower.class).list();
+        assertEquals( "change in embedded not reflected in root index", 1, result.size() );
+
+		s.clear();
+
+		tx = s.beginTransaction();
+		address = (Address) s.get(Address.class, a.getId() );
+		address.getTower().setAddress( null );
+		address.setTower( null );
+		tx.commit();
+
+		s.clear();
+
+		session = Search.createFullTextSession(s);
+
+        query = parser.parse("address.street:peachtree");
+		result = session.createFullTextQuery(query, Tower.class).list();
+        assertEquals( "breaking link fails", 0, result.size() );
+
+		tx = s.beginTransaction();
+		s.delete( s.get(Tower.class, tower.getId() ) );
+		tx.commit();
+
+		s.close();
+
+	}
+
+	protected Class[] getMappings() {
+		return new Class[] {
+				Tower.class,
+				Address.class
+		};
+	}
+}

Deleted: trunk/HibernateExt/search/src/test/org/hibernate/search/test/embedded/Owner.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/embedded/Owner.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/embedded/Owner.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,39 +0,0 @@
-//$Id: $
-package org.hibernate.search.test.embedded;
-
-import javax.persistence.Embeddable;
-
-import org.hibernate.search.annotations.Field;
-import org.hibernate.search.annotations.Index;
-import org.hibernate.search.annotations.IndexedEmbedded;
-import org.hibernate.annotations.Parent;
-
-/**
- * @author Emmanuel Bernard
- */
- at Embeddable
-public class Owner {
-	@Field(index = Index.TOKENIZED)
-	private String name;
-
-	@Parent
-	@IndexedEmbedded //play the lunatic user
-	private Address address;
-
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	public Address getAddress() {
-		return address;
-	}
-
-	public void setAddress(Address address) {
-		this.address = address;
-	}
-}

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/embedded/Owner.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/embedded/Owner.java)
===================================================================
--- trunk/HibernateExt/search/src/test/org/hibernate/search/test/embedded/Owner.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/embedded/Owner.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,39 @@
+//$Id: $
+package org.hibernate.search.test.embedded;
+
+import javax.persistence.Embeddable;
+
+import org.hibernate.search.annotations.Field;
+import org.hibernate.search.annotations.Index;
+import org.hibernate.search.annotations.IndexedEmbedded;
+import org.hibernate.annotations.Parent;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Embeddable
+public class Owner {
+	@Field(index = Index.TOKENIZED)
+	private String name;
+
+	@Parent
+	@IndexedEmbedded //play the lunatic user
+	private Address address;
+
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public Address getAddress() {
+		return address;
+	}
+
+	public void setAddress(Address address) {
+		this.address = address;
+	}
+}

Deleted: trunk/HibernateExt/search/src/test/org/hibernate/search/test/embedded/Tower.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/embedded/Tower.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/embedded/Tower.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,58 +0,0 @@
-//$Id: $
-package org.hibernate.search.test.embedded;
-
-import javax.persistence.CascadeType;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.OneToOne;
-
-import org.hibernate.search.annotations.DocumentId;
-import org.hibernate.search.annotations.Field;
-import org.hibernate.search.annotations.Index;
-import org.hibernate.search.annotations.Indexed;
-import org.hibernate.search.annotations.IndexedEmbedded;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Indexed
-public class Tower {
-	@Id
-	@GeneratedValue
-	@DocumentId
-	private Long id;
-
-	@Field( index = Index.TOKENIZED )
-	private String name;
-
-	@OneToOne( cascade = { CascadeType.PERSIST, CascadeType.REMOVE } )
-	@IndexedEmbedded
-	private Address address;
-
-
-	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 getAddress() {
-		return address;
-	}
-
-	public void setAddress(Address address) {
-		this.address = address;
-	}
-}

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/embedded/Tower.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/embedded/Tower.java)
===================================================================
--- trunk/HibernateExt/search/src/test/org/hibernate/search/test/embedded/Tower.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/embedded/Tower.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,58 @@
+//$Id: $
+package org.hibernate.search.test.embedded;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.OneToOne;
+
+import org.hibernate.search.annotations.DocumentId;
+import org.hibernate.search.annotations.Field;
+import org.hibernate.search.annotations.Index;
+import org.hibernate.search.annotations.Indexed;
+import org.hibernate.search.annotations.IndexedEmbedded;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Indexed
+public class Tower {
+	@Id
+	@GeneratedValue
+	@DocumentId
+	private Long id;
+
+	@Field( index = Index.TOKENIZED )
+	private String name;
+
+	@OneToOne( cascade = { CascadeType.PERSIST, CascadeType.REMOVE } )
+	@IndexedEmbedded
+	private Address address;
+
+
+	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 getAddress() {
+		return address;
+	}
+
+	public void setAddress(Address address) {
+		this.address = address;
+	}
+}

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/fieldAccess (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/fieldAccess)

Deleted: trunk/HibernateExt/search/src/test/org/hibernate/search/test/fieldAccess/Document.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/fieldAccess/Document.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/fieldAccess/Document.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,79 +0,0 @@
-//$Id: $
-package org.hibernate.search.test.fieldAccess;
-
-import javax.persistence.Id;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Entity;
-import javax.persistence.Lob;
-
-import org.hibernate.search.annotations.Unstored;
-import org.hibernate.search.annotations.Text;
-import org.hibernate.search.annotations.Keyword;
-import org.hibernate.search.annotations.Boost;
-import org.hibernate.search.annotations.Indexed;
-
-/**
- * @author Richard Hallier
- */
- at Entity
- at Indexed(index = "DocumentField")
-public class Document {
-	@Id
-    @GeneratedValue
-    @Keyword(id = true)
-	private Long id;
-
-	@Text
-	@Boost(2)
-	private String title;
-
-	@Unstored(name = "Abstract")
-	private String summary;
-
-	@Lob
-    @Unstored
-	private String text;
-
-	Document() {
-	}
-
-	public Document(String title, String summary, String text) {
-		super();
-		this.summary = summary;
-		this.text = text;
-		this.title = title;
-	}
-
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-
-	public String getTitle() {
-		return title;
-	}
-
-	public void setTitle(String title) {
-		this.title = title;
-	}
-
-	public String getSummary() {
-		return summary;
-	}
-
-	public void setSummary(String summary) {
-		this.summary = summary;
-	}
-
-	public String getText() {
-		return text;
-	}
-
-	public void setText(String text) {
-		this.text = text;
-	}
-}
-

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/fieldAccess/Document.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/fieldAccess/Document.java)
===================================================================
--- trunk/HibernateExt/search/src/test/org/hibernate/search/test/fieldAccess/Document.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/fieldAccess/Document.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,79 @@
+//$Id: $
+package org.hibernate.search.test.fieldAccess;
+
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Entity;
+import javax.persistence.Lob;
+
+import org.hibernate.search.annotations.Unstored;
+import org.hibernate.search.annotations.Text;
+import org.hibernate.search.annotations.Keyword;
+import org.hibernate.search.annotations.Boost;
+import org.hibernate.search.annotations.Indexed;
+
+/**
+ * @author Richard Hallier
+ */
+ at Entity
+ at Indexed(index = "DocumentField")
+public class Document {
+	@Id
+    @GeneratedValue
+    @Keyword(id = true)
+	private Long id;
+
+	@Text
+	@Boost(2)
+	private String title;
+
+	@Unstored(name = "Abstract")
+	private String summary;
+
+	@Lob
+    @Unstored
+	private String text;
+
+	Document() {
+	}
+
+	public Document(String title, String summary, String text) {
+		super();
+		this.summary = summary;
+		this.text = text;
+		this.title = title;
+	}
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getTitle() {
+		return title;
+	}
+
+	public void setTitle(String title) {
+		this.title = title;
+	}
+
+	public String getSummary() {
+		return summary;
+	}
+
+	public void setSummary(String summary) {
+		this.summary = summary;
+	}
+
+	public String getText() {
+		return text;
+	}
+
+	public void setText(String text) {
+		this.text = text;
+	}
+}
+

Deleted: trunk/HibernateExt/search/src/test/org/hibernate/search/test/fieldAccess/FieldAccessTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/fieldAccess/FieldAccessTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/fieldAccess/FieldAccessTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,69 +0,0 @@
-//$Id: $
-package org.hibernate.search.test.fieldAccess;
-
-import java.util.List;
-
-import org.hibernate.search.test.SearchTestCase;
-import org.hibernate.search.FullTextSession;
-import org.hibernate.search.Search;
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-import org.apache.lucene.queryParser.QueryParser;
-import org.apache.lucene.analysis.standard.StandardAnalyzer;
-
-/**
- * @author Emmanuel Bernard
- */
-public class FieldAccessTest extends SearchTestCase {
-
-    public void testFields() throws Exception {
-        Document doc = new Document( "Hibernate in Action", "Object/relational mapping with Hibernate", "blah blah blah" );
-        Session s = openSession();
-        Transaction tx = s.beginTransaction();
-        s.persist( doc );
-        tx.commit();
-
-        s.clear();
-
-        FullTextSession session = Search.createFullTextSession(s);
-        tx = session.beginTransaction();
-        QueryParser p = new QueryParser("id", new StandardAnalyzer( ) );
-        List result = session.createFullTextQuery( p.parse( "Abstract:Hibernate" ) ).list();
-        assertEquals( "Query by field", 1, result.size() );
-        s.delete( result.get( 0 ) );
-        tx.commit();
-        s.close();
-
-    }
-
-    public void testFieldBoost() throws Exception {
-        Session s = openSession();
-        Transaction tx = s.beginTransaction();
-        s.persist(
-				new Document( "Hibernate in Action", "Object and Relational", "blah blah blah" )
-		);
-		s.persist(
-				new Document( "Object and Relational", "Hibernate in Action", "blah blah blah" )
-		);
-        tx.commit();
-
-        s.clear();
-
-        FullTextSession session = Search.createFullTextSession(s);
-        tx = session.beginTransaction();
-        QueryParser p = new QueryParser("id", new StandardAnalyzer( ) );
-        List result = session.createFullTextQuery( p.parse( "title:Action OR Abstract:Action" ) ).list();
-        assertEquals( "Query by field", 2, result.size() );
-        assertEquals( "@Boost fails", "Hibernate in Action", ( (Document) result.get( 0 ) ).getTitle() );
-        s.delete( result.get( 0 ) );
-        tx.commit();
-        s.close();
-
-    }
-
-    protected Class[] getMappings() {
-        return new Class[] {
-                Document.class
-        };
-    }
-}

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/fieldAccess/FieldAccessTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/fieldAccess/FieldAccessTest.java)
===================================================================
--- trunk/HibernateExt/search/src/test/org/hibernate/search/test/fieldAccess/FieldAccessTest.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/fieldAccess/FieldAccessTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,69 @@
+//$Id: $
+package org.hibernate.search.test.fieldAccess;
+
+import java.util.List;
+
+import org.hibernate.search.test.SearchTestCase;
+import org.hibernate.search.FullTextSession;
+import org.hibernate.search.Search;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.apache.lucene.queryParser.QueryParser;
+import org.apache.lucene.analysis.standard.StandardAnalyzer;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class FieldAccessTest extends SearchTestCase {
+
+    public void testFields() throws Exception {
+        Document doc = new Document( "Hibernate in Action", "Object/relational mapping with Hibernate", "blah blah blah" );
+        Session s = openSession();
+        Transaction tx = s.beginTransaction();
+        s.persist( doc );
+        tx.commit();
+
+        s.clear();
+
+        FullTextSession session = Search.createFullTextSession(s);
+        tx = session.beginTransaction();
+        QueryParser p = new QueryParser("id", new StandardAnalyzer( ) );
+        List result = session.createFullTextQuery( p.parse( "Abstract:Hibernate" ) ).list();
+        assertEquals( "Query by field", 1, result.size() );
+        s.delete( result.get( 0 ) );
+        tx.commit();
+        s.close();
+
+    }
+
+    public void testFieldBoost() throws Exception {
+        Session s = openSession();
+        Transaction tx = s.beginTransaction();
+        s.persist(
+				new Document( "Hibernate in Action", "Object and Relational", "blah blah blah" )
+		);
+		s.persist(
+				new Document( "Object and Relational", "Hibernate in Action", "blah blah blah" )
+		);
+        tx.commit();
+
+        s.clear();
+
+        FullTextSession session = Search.createFullTextSession(s);
+        tx = session.beginTransaction();
+        QueryParser p = new QueryParser("id", new StandardAnalyzer( ) );
+        List result = session.createFullTextQuery( p.parse( "title:Action OR Abstract:Action" ) ).list();
+        assertEquals( "Query by field", 2, result.size() );
+        assertEquals( "@Boost fails", "Hibernate in Action", ( (Document) result.get( 0 ) ).getTitle() );
+        s.delete( result.get( 0 ) );
+        tx.commit();
+        s.close();
+
+    }
+
+    protected Class[] getMappings() {
+        return new Class[] {
+                Document.class
+        };
+    }
+}

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/inheritance (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/inheritance)

Deleted: trunk/HibernateExt/search/src/test/org/hibernate/search/test/inheritance/Animal.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/inheritance/Animal.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/inheritance/Animal.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,38 +0,0 @@
-//$Id: $
-package org.hibernate.search.test.inheritance;
-
-import org.hibernate.search.annotations.Keyword;
-import org.hibernate.search.annotations.Text;
-import org.hibernate.search.annotations.Indexed;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.GeneratedValue;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Indexed
-public class Animal {
-    private Long id;
-    private String name;
-
-    @Id @GeneratedValue @Keyword(id=true) 
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    @Text
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-}

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/inheritance/Animal.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/inheritance/Animal.java)
===================================================================
--- trunk/HibernateExt/search/src/test/org/hibernate/search/test/inheritance/Animal.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/inheritance/Animal.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,38 @@
+//$Id: $
+package org.hibernate.search.test.inheritance;
+
+import org.hibernate.search.annotations.Keyword;
+import org.hibernate.search.annotations.Text;
+import org.hibernate.search.annotations.Indexed;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Indexed
+public class Animal {
+    private Long id;
+    private String name;
+
+    @Id @GeneratedValue @Keyword(id=true) 
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    @Text
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+}

Deleted: trunk/HibernateExt/search/src/test/org/hibernate/search/test/inheritance/InheritanceTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/inheritance/InheritanceTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/inheritance/InheritanceTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,67 +0,0 @@
-//$Id: $
-package org.hibernate.search.test.inheritance;
-
-import org.hibernate.search.test.SearchTestCase;
-import org.hibernate.search.FullTextSession;
-import org.hibernate.search.Search;
-import org.hibernate.Transaction;
-import org.apache.lucene.queryParser.QueryParser;
-import org.apache.lucene.analysis.StopAnalyzer;
-import org.apache.lucene.search.Query;
-
-import java.util.List;
-
-/**
- * @author Emmanuel Bernard
- */
-public class InheritanceTest extends SearchTestCase {
-
-	public void testInheritance() throws Exception {
-		FullTextSession s = Search.createFullTextSession( openSession() );
-		Transaction tx = s.beginTransaction();
-		Animal a = new Animal();
-        a.setName("Shark Jr");
-        s.save( a );
-        Mammal m = new Mammal();
-        m.setMammalNbr(2);
-        m.setName("Elephant Jr");
-        s.save(m);
-		tx.commit();//post commit events for lucene
-		s.clear();
-		tx = s.beginTransaction();
-		QueryParser parser = new QueryParser("name", new StopAnalyzer() );
-
-		Query query;
-		org.hibernate.Query hibQuery;
-
-        query = parser.parse( "Elephant" );
-		hibQuery = s.createFullTextQuery( query, Mammal.class );
-		List result = hibQuery.list();
-		assertNotNull( result );
-		assertEquals( "Query subclass by superclass attribute", 1, result.size() );
-
-        query = parser.parse( "mammalNbr:[2 TO 2]" );
-		hibQuery = s.createFullTextQuery( query, Animal.class, Mammal.class );
-		result = hibQuery.list();
-		assertNotNull( result );
-		assertEquals( "Query subclass by subclass attribute", 1, result.size() );
-
-        query = parser.parse( "Jr" );
-		hibQuery = s.createFullTextQuery( query, Animal.class );
-		result = hibQuery.list();
-		assertNotNull( result );
-		assertEquals( "Query filtering on superclass return mapped subclasses", 2, result.size() );
-        for (Object managedEntity : result) {
-            s.delete(managedEntity);
-        }
-        tx.commit();
-		s.close();
-	}
-
-	protected Class[] getMappings() {
-		return new Class[] {
-                Animal.class,
-                Mammal.class
-        };
-	}
-}

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/inheritance/InheritanceTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/inheritance/InheritanceTest.java)
===================================================================
--- trunk/HibernateExt/search/src/test/org/hibernate/search/test/inheritance/InheritanceTest.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/inheritance/InheritanceTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,67 @@
+//$Id: $
+package org.hibernate.search.test.inheritance;
+
+import org.hibernate.search.test.SearchTestCase;
+import org.hibernate.search.FullTextSession;
+import org.hibernate.search.Search;
+import org.hibernate.Transaction;
+import org.apache.lucene.queryParser.QueryParser;
+import org.apache.lucene.analysis.StopAnalyzer;
+import org.apache.lucene.search.Query;
+
+import java.util.List;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class InheritanceTest extends SearchTestCase {
+
+	public void testInheritance() throws Exception {
+		FullTextSession s = Search.createFullTextSession( openSession() );
+		Transaction tx = s.beginTransaction();
+		Animal a = new Animal();
+        a.setName("Shark Jr");
+        s.save( a );
+        Mammal m = new Mammal();
+        m.setMammalNbr(2);
+        m.setName("Elephant Jr");
+        s.save(m);
+		tx.commit();//post commit events for lucene
+		s.clear();
+		tx = s.beginTransaction();
+		QueryParser parser = new QueryParser("name", new StopAnalyzer() );
+
+		Query query;
+		org.hibernate.Query hibQuery;
+
+        query = parser.parse( "Elephant" );
+		hibQuery = s.createFullTextQuery( query, Mammal.class );
+		List result = hibQuery.list();
+		assertNotNull( result );
+		assertEquals( "Query subclass by superclass attribute", 1, result.size() );
+
+        query = parser.parse( "mammalNbr:[2 TO 2]" );
+		hibQuery = s.createFullTextQuery( query, Animal.class, Mammal.class );
+		result = hibQuery.list();
+		assertNotNull( result );
+		assertEquals( "Query subclass by subclass attribute", 1, result.size() );
+
+        query = parser.parse( "Jr" );
+		hibQuery = s.createFullTextQuery( query, Animal.class );
+		result = hibQuery.list();
+		assertNotNull( result );
+		assertEquals( "Query filtering on superclass return mapped subclasses", 2, result.size() );
+        for (Object managedEntity : result) {
+            s.delete(managedEntity);
+        }
+        tx.commit();
+		s.close();
+	}
+
+	protected Class[] getMappings() {
+		return new Class[] {
+                Animal.class,
+                Mammal.class
+        };
+	}
+}

Deleted: trunk/HibernateExt/search/src/test/org/hibernate/search/test/inheritance/Mammal.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/inheritance/Mammal.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/inheritance/Mammal.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,25 +0,0 @@
-//$Id: $
-package org.hibernate.search.test.inheritance;
-
-import org.hibernate.search.annotations.Indexed;
-import org.hibernate.search.annotations.Keyword;
-
-import javax.persistence.Entity;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Indexed
-public class Mammal extends Animal {
-    private int mammalNbr;
-
-    @Keyword
-	public int getMammalNbr() {
-        return mammalNbr;
-    }
-
-    public void setMammalNbr(int mammalNbr) {
-        this.mammalNbr = mammalNbr;
-    }
-}

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/inheritance/Mammal.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/inheritance/Mammal.java)
===================================================================
--- trunk/HibernateExt/search/src/test/org/hibernate/search/test/inheritance/Mammal.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/inheritance/Mammal.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,25 @@
+//$Id: $
+package org.hibernate.search.test.inheritance;
+
+import org.hibernate.search.annotations.Indexed;
+import org.hibernate.search.annotations.Keyword;
+
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Indexed
+public class Mammal extends Animal {
+    private int mammalNbr;
+
+    @Keyword
+	public int getMammalNbr() {
+        return mammalNbr;
+    }
+
+    public void setMammalNbr(int mammalNbr) {
+        this.mammalNbr = mammalNbr;
+    }
+}

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/jms)

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/master (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/jms/master)

Deleted: trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/master/JMSMasterTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/jms/master/JMSMasterTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/master/JMSMasterTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,152 +0,0 @@
-//$Id: $
-package org.hibernate.search.test.jms.master;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-import javax.jms.ObjectMessage;
-import javax.jms.Queue;
-import javax.jms.QueueConnection;
-import javax.jms.QueueConnectionFactory;
-import javax.jms.QueueSender;
-import javax.jms.QueueSession;
-import javax.naming.InitialContext;
-
-import org.apache.lucene.analysis.StopAnalyzer;
-import org.apache.lucene.document.Document;
-import org.apache.lucene.document.Field;
-import org.apache.lucene.queryParser.QueryParser;
-import org.apache.lucene.search.Query;
-import org.hibernate.Session;
-import org.hibernate.cfg.Configuration;
-import org.hibernate.search.Environment;
-import org.hibernate.search.FullTextSession;
-import org.hibernate.search.Search;
-import org.hibernate.search.engine.DocumentBuilder;
-import org.hibernate.search.backend.AddLuceneWork;
-import org.hibernate.search.backend.LuceneWork;
-import org.hibernate.search.backend.impl.jms.JMSBackendQueueProcessorFactory;
-import org.hibernate.search.test.SearchTestCase;
-import org.jboss.deployers.spi.DeploymentException;
-import org.jboss.embedded.Bootstrap;
-
-/**
- * @author Emmanuel Bernard
- */
-public class JMSMasterTest extends SearchTestCase {
-
-	private Bootstrap bootstrap;
-
-	public void testMessageSending() throws Exception {
-		MyHibernateUtil.sessionFactory = getSessions();
-
-		//create an object wo trigggering indexing
-		Session s = openSession( );
-		s.getTransaction().begin();
-		s.connection().createStatement().executeUpdate(
-				"insert into TShirt_Master(id, logo, size) values( '1', 'JBoss balls', 'large')"
-		);
-		TShirt ts = (TShirt) s.get(TShirt.class, 1);
-		s.getTransaction().commit();
-		s.close();
-		//create the work queue to send
-		Document doc = new Document();
-		Field field = new Field( DocumentBuilder.CLASS_FIELDNAME, ts.getClass().getName(), Field.Store.YES, Field.Index.UN_TOKENIZED );
-		doc.add( field );
-		field = new Field("id", "1", Field.Store.YES, Field.Index.UN_TOKENIZED );
-		doc.add( field );
-		field = new Field("logo", ts.getLogo(), Field.Store.NO, Field.Index.TOKENIZED );
-		doc.add( field );
-		LuceneWork luceneWork = new AddLuceneWork(ts.getId(), ts.getClass(), doc );
-		List<LuceneWork> queue = new ArrayList<LuceneWork>();
-		queue.add( luceneWork );
-
-		//send the queue
-		InitialContext context = new InitialContext();
-		QueueConnectionFactory factory = (QueueConnectionFactory) context.lookup( "java:/ConnectionFactory" );
-		Queue jmsQueue = (Queue) context.lookup( "queue/searchtest" );
-		QueueConnection cnn;
-		QueueSender sender;
-		QueueSession session;
-		cnn = factory.createQueueConnection();
-		//TODO make transacted parameterized
-		session = cnn.createQueueSession( false, QueueSession.AUTO_ACKNOWLEDGE );
-
-		ObjectMessage message = session.createObjectMessage();
-		message.setObject( (Serializable) queue );
-
-		sender = session.createSender( jmsQueue );
-		sender.send( message );
-
-		session.close();
-		cnn.close();
-
-		//wait for the message to be processed
-		Thread.sleep( 1000 );
-
-		FullTextSession ftSess = Search.createFullTextSession( openSession( ) );
-		ftSess.getTransaction().begin();
-		QueryParser parser = new QueryParser( "id", new StopAnalyzer() );
-		Query luceneQuery = parser.parse( "logo:jboss" );
-		org.hibernate.Query query = ftSess.createFullTextQuery( luceneQuery );
-		List result = query.list();
-		assertEquals( 1, result.size() );
-		ftSess.delete( result.get( 0 ) );
-		ftSess.getTransaction().commit();
-		ftSess.close();
-	}
-
-	protected void setUp() throws Exception {
-		bootstrap = startupEmbeddedJBoss();
-		try {
-			super.setUp();
-		}
-		catch( RuntimeException e ) {
-			try {
-				shutdownEmbeddedJBoss(bootstrap);
-			}
-			catch( Exception ee ) {
-				//swallow
-			}
-			throw e;
-		}
-	}
-
-	protected void tearDown() throws Exception {
-		super.tearDown();
-		shutdownEmbeddedJBoss(bootstrap);
-	}
-
-	public static Bootstrap startupEmbeddedJBoss() {
-		try {
-			long start = System.currentTimeMillis();
-			Bootstrap bootstrap = new Bootstrap();
-			bootstrap.bootstrap();
-			bootstrap.deployResource( "jars/jms-master.jar" );
-			System.out.println("JBoss Embedded boot time: " + (System.currentTimeMillis() - start) + " ms");
-			return bootstrap;
-		}
-		catch (DeploymentException e) {
-			throw new RuntimeException( "Failed to bootstrap", e );
-		}
-	}
-
-	public static void shutdownEmbeddedJBoss(Bootstrap bootstrap) {
-		bootstrap.shutdown();
-	}
-
-
-	protected void configure(Configuration cfg) {
-		super.configure( cfg );
-		cfg.setProperty( Environment.WORKER_BACKEND, "lucene" );
-		cfg.setProperty( JMSBackendQueueProcessorFactory.JMS_CONNECTION_FACTORY, "java:/ConnectionFactory" );
-		cfg.setProperty( JMSBackendQueueProcessorFactory.JMS_QUEUE, "queue/searchtest" );
-
-	}
-
-	protected Class[] getMappings() {
-		return new Class[] {
-				TShirt.class
-		};
-	}
-}

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/master/JMSMasterTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/jms/master/JMSMasterTest.java)
===================================================================
--- trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/master/JMSMasterTest.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/master/JMSMasterTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,152 @@
+//$Id: $
+package org.hibernate.search.test.jms.master;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+import javax.jms.ObjectMessage;
+import javax.jms.Queue;
+import javax.jms.QueueConnection;
+import javax.jms.QueueConnectionFactory;
+import javax.jms.QueueSender;
+import javax.jms.QueueSession;
+import javax.naming.InitialContext;
+
+import org.apache.lucene.analysis.StopAnalyzer;
+import org.apache.lucene.document.Document;
+import org.apache.lucene.document.Field;
+import org.apache.lucene.queryParser.QueryParser;
+import org.apache.lucene.search.Query;
+import org.hibernate.Session;
+import org.hibernate.cfg.Configuration;
+import org.hibernate.search.Environment;
+import org.hibernate.search.FullTextSession;
+import org.hibernate.search.Search;
+import org.hibernate.search.engine.DocumentBuilder;
+import org.hibernate.search.backend.AddLuceneWork;
+import org.hibernate.search.backend.LuceneWork;
+import org.hibernate.search.backend.impl.jms.JMSBackendQueueProcessorFactory;
+import org.hibernate.search.test.SearchTestCase;
+import org.jboss.deployers.spi.DeploymentException;
+import org.jboss.embedded.Bootstrap;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class JMSMasterTest extends SearchTestCase {
+
+	private Bootstrap bootstrap;
+
+	public void testMessageSending() throws Exception {
+		MyHibernateUtil.sessionFactory = getSessions();
+
+		//create an object wo trigggering indexing
+		Session s = openSession( );
+		s.getTransaction().begin();
+		s.connection().createStatement().executeUpdate(
+				"insert into TShirt_Master(id, logo, size) values( '1', 'JBoss balls', 'large')"
+		);
+		TShirt ts = (TShirt) s.get(TShirt.class, 1);
+		s.getTransaction().commit();
+		s.close();
+		//create the work queue to send
+		Document doc = new Document();
+		Field field = new Field( DocumentBuilder.CLASS_FIELDNAME, ts.getClass().getName(), Field.Store.YES, Field.Index.UN_TOKENIZED );
+		doc.add( field );
+		field = new Field("id", "1", Field.Store.YES, Field.Index.UN_TOKENIZED );
+		doc.add( field );
+		field = new Field("logo", ts.getLogo(), Field.Store.NO, Field.Index.TOKENIZED );
+		doc.add( field );
+		LuceneWork luceneWork = new AddLuceneWork(ts.getId(), ts.getClass(), doc );
+		List<LuceneWork> queue = new ArrayList<LuceneWork>();
+		queue.add( luceneWork );
+
+		//send the queue
+		InitialContext context = new InitialContext();
+		QueueConnectionFactory factory = (QueueConnectionFactory) context.lookup( "java:/ConnectionFactory" );
+		Queue jmsQueue = (Queue) context.lookup( "queue/searchtest" );
+		QueueConnection cnn;
+		QueueSender sender;
+		QueueSession session;
+		cnn = factory.createQueueConnection();
+		//TODO make transacted parameterized
+		session = cnn.createQueueSession( false, QueueSession.AUTO_ACKNOWLEDGE );
+
+		ObjectMessage message = session.createObjectMessage();
+		message.setObject( (Serializable) queue );
+
+		sender = session.createSender( jmsQueue );
+		sender.send( message );
+
+		session.close();
+		cnn.close();
+
+		//wait for the message to be processed
+		Thread.sleep( 1000 );
+
+		FullTextSession ftSess = Search.createFullTextSession( openSession( ) );
+		ftSess.getTransaction().begin();
+		QueryParser parser = new QueryParser( "id", new StopAnalyzer() );
+		Query luceneQuery = parser.parse( "logo:jboss" );
+		org.hibernate.Query query = ftSess.createFullTextQuery( luceneQuery );
+		List result = query.list();
+		assertEquals( 1, result.size() );
+		ftSess.delete( result.get( 0 ) );
+		ftSess.getTransaction().commit();
+		ftSess.close();
+	}
+
+	protected void setUp() throws Exception {
+		bootstrap = startupEmbeddedJBoss();
+		try {
+			super.setUp();
+		}
+		catch( RuntimeException e ) {
+			try {
+				shutdownEmbeddedJBoss(bootstrap);
+			}
+			catch( Exception ee ) {
+				//swallow
+			}
+			throw e;
+		}
+	}
+
+	protected void tearDown() throws Exception {
+		super.tearDown();
+		shutdownEmbeddedJBoss(bootstrap);
+	}
+
+	public static Bootstrap startupEmbeddedJBoss() {
+		try {
+			long start = System.currentTimeMillis();
+			Bootstrap bootstrap = new Bootstrap();
+			bootstrap.bootstrap();
+			bootstrap.deployResource( "jars/jms-master.jar" );
+			System.out.println("JBoss Embedded boot time: " + (System.currentTimeMillis() - start) + " ms");
+			return bootstrap;
+		}
+		catch (DeploymentException e) {
+			throw new RuntimeException( "Failed to bootstrap", e );
+		}
+	}
+
+	public static void shutdownEmbeddedJBoss(Bootstrap bootstrap) {
+		bootstrap.shutdown();
+	}
+
+
+	protected void configure(Configuration cfg) {
+		super.configure( cfg );
+		cfg.setProperty( Environment.WORKER_BACKEND, "lucene" );
+		cfg.setProperty( JMSBackendQueueProcessorFactory.JMS_CONNECTION_FACTORY, "java:/ConnectionFactory" );
+		cfg.setProperty( JMSBackendQueueProcessorFactory.JMS_QUEUE, "queue/searchtest" );
+
+	}
+
+	protected Class[] getMappings() {
+		return new Class[] {
+				TShirt.class
+		};
+	}
+}

Deleted: trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/master/MDBSearchController.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/jms/master/MDBSearchController.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/master/MDBSearchController.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,27 +0,0 @@
-//$Id: $
-package org.hibernate.search.test.jms.master;
-
-import javax.ejb.MessageDriven;
-import javax.ejb.ActivationConfigProperty;
-import javax.jms.MessageListener;
-
-import org.hibernate.search.backend.impl.jms.AbstractJMSHibernateSearchController;
-import org.hibernate.Session;
-
-/**
- * @author Emmanuel Bernard
- */
- at MessageDriven(activationConfig = {
-      @ActivationConfigProperty(propertyName="destinationType", propertyValue="javax.jms.Queue"),
-      @ActivationConfigProperty(propertyName="destination", propertyValue="queue/searchtest"),
-      @ActivationConfigProperty(propertyName="DLQMaxResent", propertyValue="1")
-   } )
-public class MDBSearchController extends AbstractJMSHibernateSearchController implements MessageListener {
-	protected Session getSession() {
-		return MyHibernateUtil.sessionFactory.openSession( );
-	}
-
-	protected void cleanSessionIfNeeded(Session session) {
-		session.close();
-	}
-}

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/master/MDBSearchController.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/jms/master/MDBSearchController.java)
===================================================================
--- trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/master/MDBSearchController.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/master/MDBSearchController.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,27 @@
+//$Id: $
+package org.hibernate.search.test.jms.master;
+
+import javax.ejb.MessageDriven;
+import javax.ejb.ActivationConfigProperty;
+import javax.jms.MessageListener;
+
+import org.hibernate.search.backend.impl.jms.AbstractJMSHibernateSearchController;
+import org.hibernate.Session;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at MessageDriven(activationConfig = {
+      @ActivationConfigProperty(propertyName="destinationType", propertyValue="javax.jms.Queue"),
+      @ActivationConfigProperty(propertyName="destination", propertyValue="queue/searchtest"),
+      @ActivationConfigProperty(propertyName="DLQMaxResent", propertyValue="1")
+   } )
+public class MDBSearchController extends AbstractJMSHibernateSearchController implements MessageListener {
+	protected Session getSession() {
+		return MyHibernateUtil.sessionFactory.openSession( );
+	}
+
+	protected void cleanSessionIfNeeded(Session session) {
+		session.close();
+	}
+}

Deleted: trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/master/MyHibernateUtil.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/jms/master/MyHibernateUtil.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/master/MyHibernateUtil.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,12 +0,0 @@
-//$Id: $
-package org.hibernate.search.test.jms.master;
-
-import org.hibernate.SessionFactory;
-
-/**
- * Don't do it at home ;-)
- * @author Emmanuel Bernard
- */
-public class MyHibernateUtil {
-	public static SessionFactory sessionFactory;
-}

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/master/MyHibernateUtil.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/jms/master/MyHibernateUtil.java)
===================================================================
--- trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/master/MyHibernateUtil.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/master/MyHibernateUtil.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,12 @@
+//$Id: $
+package org.hibernate.search.test.jms.master;
+
+import org.hibernate.SessionFactory;
+
+/**
+ * Don't do it at home ;-)
+ * @author Emmanuel Bernard
+ */
+public class MyHibernateUtil {
+	public static SessionFactory sessionFactory;
+}

Deleted: trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/master/TShirt.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/jms/master/TShirt.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/master/TShirt.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,52 +0,0 @@
-//$Id: $
-package org.hibernate.search.test.jms.master;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Table;
-
-import org.hibernate.search.annotations.Indexed;
-import org.hibernate.search.annotations.DocumentId;
-import org.hibernate.search.annotations.Field;
-import org.hibernate.search.annotations.Index;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Indexed
- at Table(name="TShirt_Master")
-public class TShirt {
-	@Id
-	@DocumentId
-	private int id;
-	@Field(index= Index.TOKENIZED)
-	private String logo;
-	private String size;
-
-	public int getId() {
-		return id;
-	}
-
-	public void setId(int id) {
-		this.id = id;
-	}
-
-	public String getLogo() {
-		return logo;
-	}
-
-	public void setLogo(String logo) {
-		this.logo = logo;
-	}
-
-	public String getSize() {
-		return size;
-	}
-
-	public void setSize(String size) {
-		this.size = size;
-	}
-}
-

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/master/TShirt.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/jms/master/TShirt.java)
===================================================================
--- trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/master/TShirt.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/master/TShirt.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,52 @@
+//$Id: $
+package org.hibernate.search.test.jms.master;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Table;
+
+import org.hibernate.search.annotations.Indexed;
+import org.hibernate.search.annotations.DocumentId;
+import org.hibernate.search.annotations.Field;
+import org.hibernate.search.annotations.Index;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Indexed
+ at Table(name="TShirt_Master")
+public class TShirt {
+	@Id
+	@DocumentId
+	private int id;
+	@Field(index= Index.TOKENIZED)
+	private String logo;
+	private String size;
+
+	public int getId() {
+		return id;
+	}
+
+	public void setId(int id) {
+		this.id = id;
+	}
+
+	public String getLogo() {
+		return logo;
+	}
+
+	public void setLogo(String logo) {
+		this.logo = logo;
+	}
+
+	public String getSize() {
+		return size;
+	}
+
+	public void setSize(String size) {
+		this.size = size;
+	}
+}
+

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/slave (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/jms/slave)

Deleted: trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/slave/JMSSlaveTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/jms/slave/JMSSlaveTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/slave/JMSSlaveTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,116 +0,0 @@
-//$Id: $
-package org.hibernate.search.test.jms.slave;
-
-import org.jboss.embedded.Bootstrap;
-import org.jboss.deployers.spi.DeploymentException;
-import org.hibernate.search.test.SearchTestCase;
-import org.hibernate.search.Environment;
-import org.hibernate.search.backend.impl.jms.JMSBackendQueueProcessorFactory;
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-import org.hibernate.cfg.Configuration;
-
-/**
- * @author Emmanuel Bernard
- */
-public class JMSSlaveTest extends SearchTestCase {
-
-	private Bootstrap bootstrap;
-
-
-	protected void setUp() throws Exception {
-		bootstrap = startupEmbeddedJBoss();
-		try {
-			super.setUp();
-		}
-		catch( RuntimeException e ) {
-			try {
-				shutdownEmbeddedJBoss(bootstrap);
-			}
-			catch( Exception ee ) {
-				//swallow
-			}
-			throw e;
-		}
-	}
-
-	protected void tearDown() throws Exception {
-		super.tearDown();
-		shutdownEmbeddedJBoss(bootstrap);
-	}
-
-	public void testMessageSend() throws Exception {
-		SearchQueueChecker.reset();
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		TShirt ts = new TShirt();
-		ts.setLogo( "Boston" );
-		ts.setSize( "XXL" );
-		TShirt ts2 = new TShirt();
-		ts2.setLogo( "Mapple leaves" );
-		ts2.setSize( "L" );
-		s.persist( ts );
-		s.persist( ts2 );
-		tx.commit();
-		//need to sleep for the message consumption
-		Thread.sleep(500);
-		assertEquals( 1, SearchQueueChecker.queues );
-		assertEquals( 2, SearchQueueChecker.works );
-
-		SearchQueueChecker.reset();
-		s = openSession();
-		tx = s.beginTransaction();
-		ts = (TShirt) s.get( TShirt.class, ts.getId() );
-		ts.setLogo( "Peter pan" );
-		tx.commit();
-		//need to sleep for the message consumption
-		Thread.sleep(500);
-		assertEquals( 1, SearchQueueChecker.queues );
-		assertEquals( 2, SearchQueueChecker.works ); //one update = 2 works
-
-		SearchQueueChecker.reset();
-		s = openSession();
-		tx = s.beginTransaction();
-		s.delete( s.get( TShirt.class, ts.getId() ) );
-		s.delete( s.get( TShirt.class, ts2.getId() ) );
-		tx.commit();
-		//Need to sleep for the message consumption
-		Thread.sleep(500);
-		assertEquals( 1, SearchQueueChecker.queues );
-		assertEquals( 2, SearchQueueChecker.works );
-		s.close();
-	}
-
-	public static Bootstrap startupEmbeddedJBoss() {
-		try {
-			long start = System.currentTimeMillis();
-			Bootstrap bootstrap = new Bootstrap();
-			bootstrap.bootstrap();
-			bootstrap.deployResource( "jars/jms-slave.jar" );
-			System.out.println("JBoss Embedded boot time: " + (System.currentTimeMillis() - start) + " ms");
-			return bootstrap;
-		}
-		catch (DeploymentException e) {
-			throw new RuntimeException( "Failed to bootstrap", e );
-		}
-	}
-
-	public static void shutdownEmbeddedJBoss(Bootstrap bootstrap) {
-		bootstrap.shutdown();
-	}
-
-
-	protected void configure(Configuration cfg) {
-		super.configure( cfg );
-		cfg.setProperty( Environment.WORKER_BACKEND, "jms" );
-		cfg.setProperty( JMSBackendQueueProcessorFactory.JMS_CONNECTION_FACTORY, "java:/ConnectionFactory" );
-		cfg.setProperty( JMSBackendQueueProcessorFactory.JMS_QUEUE, "queue/searchtest" );
-
-	}
-
-	protected Class[] getMappings() {
-		return new Class[]{
-				TShirt.class
-		};
-	}
-}

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/slave/JMSSlaveTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/jms/slave/JMSSlaveTest.java)
===================================================================
--- trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/slave/JMSSlaveTest.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/slave/JMSSlaveTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,116 @@
+//$Id: $
+package org.hibernate.search.test.jms.slave;
+
+import org.jboss.embedded.Bootstrap;
+import org.jboss.deployers.spi.DeploymentException;
+import org.hibernate.search.test.SearchTestCase;
+import org.hibernate.search.Environment;
+import org.hibernate.search.backend.impl.jms.JMSBackendQueueProcessorFactory;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.cfg.Configuration;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class JMSSlaveTest extends SearchTestCase {
+
+	private Bootstrap bootstrap;
+
+
+	protected void setUp() throws Exception {
+		bootstrap = startupEmbeddedJBoss();
+		try {
+			super.setUp();
+		}
+		catch( RuntimeException e ) {
+			try {
+				shutdownEmbeddedJBoss(bootstrap);
+			}
+			catch( Exception ee ) {
+				//swallow
+			}
+			throw e;
+		}
+	}
+
+	protected void tearDown() throws Exception {
+		super.tearDown();
+		shutdownEmbeddedJBoss(bootstrap);
+	}
+
+	public void testMessageSend() throws Exception {
+		SearchQueueChecker.reset();
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		TShirt ts = new TShirt();
+		ts.setLogo( "Boston" );
+		ts.setSize( "XXL" );
+		TShirt ts2 = new TShirt();
+		ts2.setLogo( "Mapple leaves" );
+		ts2.setSize( "L" );
+		s.persist( ts );
+		s.persist( ts2 );
+		tx.commit();
+		//need to sleep for the message consumption
+		Thread.sleep(500);
+		assertEquals( 1, SearchQueueChecker.queues );
+		assertEquals( 2, SearchQueueChecker.works );
+
+		SearchQueueChecker.reset();
+		s = openSession();
+		tx = s.beginTransaction();
+		ts = (TShirt) s.get( TShirt.class, ts.getId() );
+		ts.setLogo( "Peter pan" );
+		tx.commit();
+		//need to sleep for the message consumption
+		Thread.sleep(500);
+		assertEquals( 1, SearchQueueChecker.queues );
+		assertEquals( 2, SearchQueueChecker.works ); //one update = 2 works
+
+		SearchQueueChecker.reset();
+		s = openSession();
+		tx = s.beginTransaction();
+		s.delete( s.get( TShirt.class, ts.getId() ) );
+		s.delete( s.get( TShirt.class, ts2.getId() ) );
+		tx.commit();
+		//Need to sleep for the message consumption
+		Thread.sleep(500);
+		assertEquals( 1, SearchQueueChecker.queues );
+		assertEquals( 2, SearchQueueChecker.works );
+		s.close();
+	}
+
+	public static Bootstrap startupEmbeddedJBoss() {
+		try {
+			long start = System.currentTimeMillis();
+			Bootstrap bootstrap = new Bootstrap();
+			bootstrap.bootstrap();
+			bootstrap.deployResource( "jars/jms-slave.jar" );
+			System.out.println("JBoss Embedded boot time: " + (System.currentTimeMillis() - start) + " ms");
+			return bootstrap;
+		}
+		catch (DeploymentException e) {
+			throw new RuntimeException( "Failed to bootstrap", e );
+		}
+	}
+
+	public static void shutdownEmbeddedJBoss(Bootstrap bootstrap) {
+		bootstrap.shutdown();
+	}
+
+
+	protected void configure(Configuration cfg) {
+		super.configure( cfg );
+		cfg.setProperty( Environment.WORKER_BACKEND, "jms" );
+		cfg.setProperty( JMSBackendQueueProcessorFactory.JMS_CONNECTION_FACTORY, "java:/ConnectionFactory" );
+		cfg.setProperty( JMSBackendQueueProcessorFactory.JMS_QUEUE, "queue/searchtest" );
+
+	}
+
+	protected Class[] getMappings() {
+		return new Class[]{
+				TShirt.class
+		};
+	}
+}

Deleted: trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/slave/SearchQueueChecker.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/jms/slave/SearchQueueChecker.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/slave/SearchQueueChecker.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,49 +0,0 @@
-//$Id: $
-package org.hibernate.search.test.jms.slave;
-
-import java.util.List;
-import javax.jms.MessageListener;
-import javax.jms.Message;
-import javax.jms.ObjectMessage;
-import javax.jms.JMSException;
-import javax.ejb.MessageDriven;
-import javax.ejb.ActivationConfigProperty;
-
-import org.hibernate.search.backend.LuceneWork;
-
-/**
- * @author Emmanuel Bernard
- */
- at MessageDriven(activationConfig = {
-      @ActivationConfigProperty(propertyName="destinationType", propertyValue="javax.jms.Queue"),
-      @ActivationConfigProperty(propertyName="destination", propertyValue="queue/searchtest"),
-      @ActivationConfigProperty(propertyName="DLQMaxResent", propertyValue="1")
-   } )
-public class SearchQueueChecker implements MessageListener {
-	public static int queues;
-	public static int works;
-
-	public static void reset() {
-		queues = 0;
-		works = 0;
-	}
-
-	public void onMessage(Message message) {
-		if (! (message instanceof ObjectMessage ) ) {
-			return;
-		}
-		ObjectMessage objectMessage = (ObjectMessage) message;
-		List<LuceneWork> queue;
-		try {
-			queue = (List<LuceneWork>) objectMessage.getObject();
-		}
-		catch (JMSException e) {
-			return;
-		}
-		catch( ClassCastException e ) {
-			return;
-		}
-		queues++;
-		works+=queue.size();
-	}
-}

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/slave/SearchQueueChecker.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/jms/slave/SearchQueueChecker.java)
===================================================================
--- trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/slave/SearchQueueChecker.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/slave/SearchQueueChecker.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,49 @@
+//$Id: $
+package org.hibernate.search.test.jms.slave;
+
+import java.util.List;
+import javax.jms.MessageListener;
+import javax.jms.Message;
+import javax.jms.ObjectMessage;
+import javax.jms.JMSException;
+import javax.ejb.MessageDriven;
+import javax.ejb.ActivationConfigProperty;
+
+import org.hibernate.search.backend.LuceneWork;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at MessageDriven(activationConfig = {
+      @ActivationConfigProperty(propertyName="destinationType", propertyValue="javax.jms.Queue"),
+      @ActivationConfigProperty(propertyName="destination", propertyValue="queue/searchtest"),
+      @ActivationConfigProperty(propertyName="DLQMaxResent", propertyValue="1")
+   } )
+public class SearchQueueChecker implements MessageListener {
+	public static int queues;
+	public static int works;
+
+	public static void reset() {
+		queues = 0;
+		works = 0;
+	}
+
+	public void onMessage(Message message) {
+		if (! (message instanceof ObjectMessage ) ) {
+			return;
+		}
+		ObjectMessage objectMessage = (ObjectMessage) message;
+		List<LuceneWork> queue;
+		try {
+			queue = (List<LuceneWork>) objectMessage.getObject();
+		}
+		catch (JMSException e) {
+			return;
+		}
+		catch( ClassCastException e ) {
+			return;
+		}
+		queues++;
+		works+=queue.size();
+	}
+}

Deleted: trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/slave/TShirt.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/jms/slave/TShirt.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/slave/TShirt.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,50 +0,0 @@
-//$Id: $
-package org.hibernate.search.test.jms.slave;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.GeneratedValue;
-
-import org.hibernate.search.annotations.Indexed;
-import org.hibernate.search.annotations.DocumentId;
-import org.hibernate.search.annotations.Field;
-import org.hibernate.search.annotations.Index;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Indexed
-public class TShirt {
-	@Id
-	@GeneratedValue
-	@DocumentId
-	private int id;
-	@Field(index= Index.TOKENIZED)
-	private String logo;
-	private String size;
-
-	public int getId() {
-		return id;
-	}
-
-	public void setId(int id) {
-		this.id = id;
-	}
-
-	public String getLogo() {
-		return logo;
-	}
-
-	public void setLogo(String logo) {
-		this.logo = logo;
-	}
-
-	public String getSize() {
-		return size;
-	}
-
-	public void setSize(String size) {
-		this.size = size;
-	}
-}

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/slave/TShirt.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/jms/slave/TShirt.java)
===================================================================
--- trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/slave/TShirt.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/jms/slave/TShirt.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,50 @@
+//$Id: $
+package org.hibernate.search.test.jms.slave;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+
+import org.hibernate.search.annotations.Indexed;
+import org.hibernate.search.annotations.DocumentId;
+import org.hibernate.search.annotations.Field;
+import org.hibernate.search.annotations.Index;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Indexed
+public class TShirt {
+	@Id
+	@GeneratedValue
+	@DocumentId
+	private int id;
+	@Field(index= Index.TOKENIZED)
+	private String logo;
+	private String size;
+
+	public int getId() {
+		return id;
+	}
+
+	public void setId(int id) {
+		this.id = id;
+	}
+
+	public String getLogo() {
+		return logo;
+	}
+
+	public void setLogo(String logo) {
+		this.logo = logo;
+	}
+
+	public String getSize() {
+		return size;
+	}
+
+	public void setSize(String size) {
+		this.size = size;
+	}
+}

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/query (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/query)

Deleted: trunk/HibernateExt/search/src/test/org/hibernate/search/test/query/AlternateBook.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/query/AlternateBook.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/query/AlternateBook.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,47 +0,0 @@
-//$Id: $
-package org.hibernate.search.test.query;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-
-import org.hibernate.search.annotations.Indexed;
-import org.hibernate.search.annotations.DocumentId;
-import org.hibernate.search.annotations.Field;
-import org.hibernate.search.annotations.Index;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Indexed(index="Book")
-public class AlternateBook {
-	@Id @DocumentId
-	private Integer id;
-	@Field(index = Index.TOKENIZED)
-	private String summary;
-
-
-	public AlternateBook() {
-	}
-
-	public AlternateBook(Integer id, String summary) {
-		this.id = id;
-		this.summary = summary;
-	}
-
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public String getSummary() {
-		return summary;
-	}
-
-	public void setSummary(String summary) {
-		this.summary = summary;
-	}
-}

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/query/AlternateBook.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/query/AlternateBook.java)
===================================================================
--- trunk/HibernateExt/search/src/test/org/hibernate/search/test/query/AlternateBook.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/query/AlternateBook.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,47 @@
+//$Id: $
+package org.hibernate.search.test.query;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+import org.hibernate.search.annotations.Indexed;
+import org.hibernate.search.annotations.DocumentId;
+import org.hibernate.search.annotations.Field;
+import org.hibernate.search.annotations.Index;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Indexed(index="Book")
+public class AlternateBook {
+	@Id @DocumentId
+	private Integer id;
+	@Field(index = Index.TOKENIZED)
+	private String summary;
+
+
+	public AlternateBook() {
+	}
+
+	public AlternateBook(Integer id, String summary) {
+		this.id = id;
+		this.summary = summary;
+	}
+
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getSummary() {
+		return summary;
+	}
+
+	public void setSummary(String summary) {
+		this.summary = summary;
+	}
+}

Deleted: trunk/HibernateExt/search/src/test/org/hibernate/search/test/query/Book.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/query/Book.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/query/Book.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,58 +0,0 @@
-//$Id: $
-package org.hibernate.search.test.query;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-
-import org.hibernate.search.annotations.Indexed;
-import org.hibernate.search.annotations.Text;
-import org.hibernate.search.annotations.Keyword;
-import org.hibernate.search.annotations.Unstored;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Indexed(index = "Book" )
-public class Book {
-
-	private Integer id;
-	private String body;
-	private String summary;
-
-	public Book() {
-	}
-
-	public Book(Integer id, String summary, String body) {
-		this.id = id;
-		this.summary = summary;
-		this.body = body;
-	}
-
-	@Unstored
-	public String getBody() {
-		return body;
-	}
-
-	public void setBody(String body) {
-		this.body = body;
-	}
-
-	@Id @Keyword(id=true)
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	@Text
-	public String getSummary() {
-		return summary;
-	}
-
-	public void setSummary(String summary) {
-		this.summary = summary;
-	}
-}

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/query/Book.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/query/Book.java)
===================================================================
--- trunk/HibernateExt/search/src/test/org/hibernate/search/test/query/Book.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/query/Book.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,58 @@
+//$Id: $
+package org.hibernate.search.test.query;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+import org.hibernate.search.annotations.Indexed;
+import org.hibernate.search.annotations.Text;
+import org.hibernate.search.annotations.Keyword;
+import org.hibernate.search.annotations.Unstored;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Indexed(index = "Book" )
+public class Book {
+
+	private Integer id;
+	private String body;
+	private String summary;
+
+	public Book() {
+	}
+
+	public Book(Integer id, String summary, String body) {
+		this.id = id;
+		this.summary = summary;
+		this.body = body;
+	}
+
+	@Unstored
+	public String getBody() {
+		return body;
+	}
+
+	public void setBody(String body) {
+		this.body = body;
+	}
+
+	@Id @Keyword(id=true)
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	@Text
+	public String getSummary() {
+		return summary;
+	}
+
+	public void setSummary(String summary) {
+		this.summary = summary;
+	}
+}

Deleted: trunk/HibernateExt/search/src/test/org/hibernate/search/test/query/Clock.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/query/Clock.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/query/Clock.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,44 +0,0 @@
-//$Id: $
-package org.hibernate.search.test.query;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-
-import org.hibernate.search.annotations.Indexed;
-import org.hibernate.search.annotations.Text;
-import org.hibernate.search.annotations.Keyword;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Indexed
-public class Clock {
-	private Integer id;
-	private String brand;
-
-	public Clock() {
-	}
-
-	public Clock(Integer id, String brand) {
-		this.id = id;
-		this.brand = brand;
-	}
-
-	@Text public String getBrand() {
-		return brand;
-	}
-
-	public void setBrand(String brand) {
-		this.brand = brand;
-	}
-
-	@Id @Keyword(id=true)
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-}

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/query/Clock.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/query/Clock.java)
===================================================================
--- trunk/HibernateExt/search/src/test/org/hibernate/search/test/query/Clock.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/query/Clock.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,44 @@
+//$Id: $
+package org.hibernate.search.test.query;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+import org.hibernate.search.annotations.Indexed;
+import org.hibernate.search.annotations.Text;
+import org.hibernate.search.annotations.Keyword;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Indexed
+public class Clock {
+	private Integer id;
+	private String brand;
+
+	public Clock() {
+	}
+
+	public Clock(Integer id, String brand) {
+		this.id = id;
+		this.brand = brand;
+	}
+
+	@Text public String getBrand() {
+		return brand;
+	}
+
+	public void setBrand(String brand) {
+		this.brand = brand;
+	}
+
+	@Id @Keyword(id=true)
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+}

Deleted: trunk/HibernateExt/search/src/test/org/hibernate/search/test/query/LuceneQueryTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/query/LuceneQueryTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/query/LuceneQueryTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,271 +0,0 @@
-//$Id: $
-package org.hibernate.search.test.query;
-
-import java.util.List;
-import java.util.Iterator;
-
-import org.hibernate.search.test.SearchTestCase;
-import org.hibernate.search.FullTextSession;
-import org.hibernate.search.Search;
-import org.hibernate.Transaction;
-import org.hibernate.Hibernate;
-import org.hibernate.ScrollableResults;
-import org.apache.lucene.search.Query;
-import org.apache.lucene.queryParser.QueryParser;
-import org.apache.lucene.analysis.StopAnalyzer;
-
-
-/**
- * @author Emmanuel Bernard
- */
-public class LuceneQueryTest extends SearchTestCase {
-
-	public void testList() throws Exception {
-		FullTextSession s = Search.createFullTextSession( openSession() );
-		Transaction tx = s.beginTransaction();
-		Clock clock = new Clock(1, "Seiko");
-		s.save( clock );
-		clock = new Clock( 2, "Festina");
-		s.save( clock );
-		Book book = new Book(1, "La chute de la petite reine a travers les yeux de Festina", "La chute de la petite reine a travers les yeux de Festina, blahblah");
-		s.save(book);
-		book = new Book(2, "La gloire de mon père", "Les deboires de mon père en vélo");
-		s.save(book);
-		tx.commit();
-		s.clear();
-		tx = s.beginTransaction();
-		QueryParser parser = new QueryParser("title", new StopAnalyzer() );
-
-		Query query = parser.parse( "summary:noword" );
-		org.hibernate.Query hibQuery = s.createFullTextQuery( query, Clock.class, Book.class );
-		List result = hibQuery.list();
-		assertNotNull( result );
-		assertEquals( 0, result.size() );
-
-		query = parser.parse( "summary:Festina Or brand:Seiko" );
-		hibQuery = s.createFullTextQuery( query, Clock.class, Book.class );
-		result = hibQuery.list();
-		assertNotNull( result );
-		assertEquals( "Query with explicit class filter", 2, result.size() );
-
-      query = parser.parse( "summary:Festina Or brand:Seiko" );
-		hibQuery = s.createFullTextQuery( query );
-		result = hibQuery.list();
-		assertNotNull( result );
-		assertEquals( "Query with no class filter", 2, result.size() );
-      for (Object element : result) {
-			assertTrue( Hibernate.isInitialized( element ) );
-			s.delete( element );
-		}
-      s.flush();
-      query = parser.parse( "summary:Festina Or brand:Seiko" );
-		hibQuery = s.createFullTextQuery( query );
-		result = hibQuery.list();
-		assertNotNull( result );
-		assertEquals( "Query with delete objects", 0, result.size() );
-
-      for (Object element : s.createQuery( "from java.lang.Object" ).list() ) s.delete( element );
-		tx.commit();
-		s.close();
-	}
-
-	public void testFirstMax() throws Exception {
-		FullTextSession s = Search.createFullTextSession( openSession() );
-		Transaction tx = s.beginTransaction();
-		Clock clock = new Clock(1, "Seiko");
-		s.save( clock );
-		clock = new Clock( 2, "Festina");
-		s.save( clock );
-		Book book = new Book(1, "La chute de la petite reine a travers les yeux de Festina", "La chute de la petite reine a travers les yeux de Festina, blahblah");
-		s.save(book);
-		book = new Book(2, "La gloire de mon père", "Les deboires de mon père en vélo");
-		s.save(book);
-		tx.commit();
-		s.clear();
-		tx = s.beginTransaction();
-		QueryParser parser = new QueryParser("title", new StopAnalyzer() );
-
-		Query query = parser.parse( "summary:Festina Or brand:Seiko" );
-		org.hibernate.Query hibQuery = s.createFullTextQuery( query, Clock.class, Book.class );
-		hibQuery.setFirstResult( 1 );
-		List result = hibQuery.list();
-		assertNotNull( result );
-		assertEquals( "first result no max result", 1, result.size() );
-
-		hibQuery.setFirstResult( 0 );
-		hibQuery.setMaxResults( 1 );
-		result = hibQuery.list();
-		assertNotNull( result );
-		assertEquals( "max result set", 1, result.size() );
-
-		hibQuery.setFirstResult( 0 );
-		hibQuery.setMaxResults( 3 );
-		result = hibQuery.list();
-		assertNotNull( result );
-		assertEquals( "max result out of limit", 2, result.size() );
-
-		hibQuery.setFirstResult( 2 );
-		hibQuery.setMaxResults( 3 );
-		result = hibQuery.list();
-		assertNotNull( result );
-		assertEquals( "first result out of limit", 0, result.size() );
-		
-		for (Object element : s.createQuery( "from java.lang.Object" ).list() ) s.delete( element );
-		tx.commit();
-		s.close();
-	}
-
-	public void testIterator() throws Exception {
-		FullTextSession s = Search.createFullTextSession( openSession() );
-		Transaction tx = s.beginTransaction();
-		Clock clock = new Clock(1, "Seiko");
-		s.save( clock );
-		clock = new Clock( 2, "Festina");
-		s.save( clock );
-		Book book = new Book(1, "La chute de la petite reine a travers les yeux de Festina", "La chute de la petite reine a travers les yeux de Festina, blahblah");
-		s.save(book);
-		book = new Book(2, "La gloire de mon père", "Les deboires de mon père en vélo");
-		s.save(book);
-		tx.commit();//post commit events for lucene
-		s.clear();
-		tx = s.beginTransaction();
-		QueryParser parser = new QueryParser("title", new StopAnalyzer() );
-
-		Query query = parser.parse( "summary:noword" );
-		org.hibernate.Query hibQuery = s.createFullTextQuery( query, Clock.class, Book.class );
-		Iterator result = hibQuery.iterate();
-		assertNotNull( result );
-		assertFalse( result.hasNext() );
-
-		query = parser.parse( "summary:Festina Or brand:Seiko" );
-		hibQuery = s.createFullTextQuery( query, Clock.class, Book.class );
-		result = hibQuery.iterate();
-		assertNotNull( result );
-		int index = 0;
-		while ( result.hasNext() ) {
-			index++;
-			s.delete( result.next() );
-		}
-		assertEquals( 2, index );
-
-      s.flush();
-
-      query = parser.parse( "summary:Festina Or brand:Seiko" );
-      hibQuery = s.createFullTextQuery( query, Clock.class, Book.class );
-      result = hibQuery.iterate();
-      assertNotNull( result );
-      assertFalse( result.hasNext() );
-
-      for (Object element : s.createQuery( "from java.lang.Object" ).list() ) s.delete( element );
-		tx.commit();
-		s.close();
-	}
-
-	public void testScrollableResultSet() throws Exception {
-		FullTextSession s = Search.createFullTextSession( openSession() );
-		Transaction tx = s.beginTransaction();
-		Clock clock = new Clock(1, "Seiko");
-		s.save( clock );
-		clock = new Clock( 2, "Festina");
-		s.save( clock );
-		Book book = new Book(1, "La chute de la petite reine a travers les yeux de Festina", "La chute de la petite reine a travers les yeux de Festina, blahblah");
-		s.save(book);
-		book = new Book(2, "La gloire de mon père", "Les deboires de mon père en vélo");
-		s.save(book);
-		tx.commit();//post commit events for lucene
-		s.clear();
-		tx = s.beginTransaction();
-		QueryParser parser = new QueryParser("title", new StopAnalyzer() );
-
-		Query query = parser.parse( "summary:noword" );
-		org.hibernate.Query hibQuery = s.createFullTextQuery( query, Clock.class, Book.class );
-		ScrollableResults result = hibQuery.scroll();
-		assertNotNull( result );
-		assertEquals(-1, result.getRowNumber() );
-		assertEquals(false, result.next() );
-		result.close();
-
-		query = parser.parse( "summary:Festina Or brand:Seiko" );
-		hibQuery = s.createFullTextQuery( query, Clock.class, Book.class );
-		result = hibQuery.scroll();
-		assertEquals(0, result.getRowNumber() );
-		result.beforeFirst();
-		assertEquals( true, result.next() );
-		assertTrue( result.isFirst() );
-		assertTrue( result.scroll( 1 ) );
-		assertTrue( result.isLast() );
-		assertFalse( result.scroll( 1 ) );
-		result.beforeFirst();
-		while ( result.next() ) {
-			s.delete( result.get()[0] );
-		}
-		for (Object element : s.createQuery( "from java.lang.Object" ).list() ) s.delete( element );
-		tx.commit();
-		s.close();
-	}
-
-	public void testMultipleEntityPerIndex() throws Exception {
-		FullTextSession s = Search.createFullTextSession( openSession() );
-		Transaction tx = s.beginTransaction();
-		Clock clock = new Clock(1, "Seiko");
-		s.save( clock );
-		Book book = new Book(1, "La chute de la petite reine a travers les yeux de Festina", "La chute de la petite reine a travers les yeux de Festina, blahblah");
-		s.save(book);
-		AlternateBook alternateBook = new AlternateBook(1, "La chute de la petite reine a travers les yeux de Festina");
-		s.save(alternateBook);
-		tx.commit();
-		s.clear();
-		tx = s.beginTransaction();
-		QueryParser parser = new QueryParser("title", new StopAnalyzer() );
-
-		Query query = parser.parse( "summary:Festina" );
-		org.hibernate.Query hibQuery = s.createFullTextQuery( query, Clock.class, Book.class );
-		List result = hibQuery.list();
-		assertNotNull( result );
-		assertEquals( "Query with explicit class filter", 1, result.size() );
-		
-		query = parser.parse( "summary:Festina" );
-		hibQuery = s.createFullTextQuery( query, Clock.class, Book.class );
-		Iterator it = hibQuery.iterate();
-		assertTrue( it.hasNext() );
-		assertNotNull( it.next() );
-		assertFalse( it.hasNext() );
-
-		query = parser.parse( "summary:Festina" );
-		hibQuery = s.createFullTextQuery( query, Clock.class, Book.class );
-		ScrollableResults sr = hibQuery.scroll();
-		assertTrue( sr.first() );
-		assertNotNull( sr.get() );
-		assertFalse( sr.next() );
-		sr.close();
-
-		query = parser.parse( "summary:Festina OR brand:seiko" );
-		hibQuery = s.createFullTextQuery( query, Clock.class, Book.class );
-		hibQuery.setMaxResults( 2 );
-		result = hibQuery.list();
-		assertNotNull( result );
-		assertEquals( "Query with explicit class filter and limit", 2, result.size() );
-
-		query = parser.parse( "summary:Festina" );
-		hibQuery = s.createFullTextQuery( query );
-		result = hibQuery.list();
-		assertNotNull( result );
-		assertEquals( "Query with no class filter", 2, result.size() );
-        for (Object element : result) {
-			assertTrue( Hibernate.isInitialized( element ) );
-			s.delete( element );
-		}
-		for (Object element : s.createQuery( "from java.lang.Object" ).list() ) s.delete( element );
-		tx.commit();
-		s.close();
-	}
-
-
-	protected Class[] getMappings() {
-		return new Class[] {
-				Book.class,
-				AlternateBook.class,
-				Clock.class
-		};
-	}
-}

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/query/LuceneQueryTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/query/LuceneQueryTest.java)
===================================================================
--- trunk/HibernateExt/search/src/test/org/hibernate/search/test/query/LuceneQueryTest.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/query/LuceneQueryTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,271 @@
+//$Id: $
+package org.hibernate.search.test.query;
+
+import java.util.List;
+import java.util.Iterator;
+
+import org.hibernate.search.test.SearchTestCase;
+import org.hibernate.search.FullTextSession;
+import org.hibernate.search.Search;
+import org.hibernate.Transaction;
+import org.hibernate.Hibernate;
+import org.hibernate.ScrollableResults;
+import org.apache.lucene.search.Query;
+import org.apache.lucene.queryParser.QueryParser;
+import org.apache.lucene.analysis.StopAnalyzer;
+
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class LuceneQueryTest extends SearchTestCase {
+
+	public void testList() throws Exception {
+		FullTextSession s = Search.createFullTextSession( openSession() );
+		Transaction tx = s.beginTransaction();
+		Clock clock = new Clock(1, "Seiko");
+		s.save( clock );
+		clock = new Clock( 2, "Festina");
+		s.save( clock );
+		Book book = new Book(1, "La chute de la petite reine a travers les yeux de Festina", "La chute de la petite reine a travers les yeux de Festina, blahblah");
+		s.save(book);
+		book = new Book(2, "La gloire de mon père", "Les deboires de mon père en vélo");
+		s.save(book);
+		tx.commit();
+		s.clear();
+		tx = s.beginTransaction();
+		QueryParser parser = new QueryParser("title", new StopAnalyzer() );
+
+		Query query = parser.parse( "summary:noword" );
+		org.hibernate.Query hibQuery = s.createFullTextQuery( query, Clock.class, Book.class );
+		List result = hibQuery.list();
+		assertNotNull( result );
+		assertEquals( 0, result.size() );
+
+		query = parser.parse( "summary:Festina Or brand:Seiko" );
+		hibQuery = s.createFullTextQuery( query, Clock.class, Book.class );
+		result = hibQuery.list();
+		assertNotNull( result );
+		assertEquals( "Query with explicit class filter", 2, result.size() );
+
+      query = parser.parse( "summary:Festina Or brand:Seiko" );
+		hibQuery = s.createFullTextQuery( query );
+		result = hibQuery.list();
+		assertNotNull( result );
+		assertEquals( "Query with no class filter", 2, result.size() );
+      for (Object element : result) {
+			assertTrue( Hibernate.isInitialized( element ) );
+			s.delete( element );
+		}
+      s.flush();
+      query = parser.parse( "summary:Festina Or brand:Seiko" );
+		hibQuery = s.createFullTextQuery( query );
+		result = hibQuery.list();
+		assertNotNull( result );
+		assertEquals( "Query with delete objects", 0, result.size() );
+
+      for (Object element : s.createQuery( "from java.lang.Object" ).list() ) s.delete( element );
+		tx.commit();
+		s.close();
+	}
+
+	public void testFirstMax() throws Exception {
+		FullTextSession s = Search.createFullTextSession( openSession() );
+		Transaction tx = s.beginTransaction();
+		Clock clock = new Clock(1, "Seiko");
+		s.save( clock );
+		clock = new Clock( 2, "Festina");
+		s.save( clock );
+		Book book = new Book(1, "La chute de la petite reine a travers les yeux de Festina", "La chute de la petite reine a travers les yeux de Festina, blahblah");
+		s.save(book);
+		book = new Book(2, "La gloire de mon père", "Les deboires de mon père en vélo");
+		s.save(book);
+		tx.commit();
+		s.clear();
+		tx = s.beginTransaction();
+		QueryParser parser = new QueryParser("title", new StopAnalyzer() );
+
+		Query query = parser.parse( "summary:Festina Or brand:Seiko" );
+		org.hibernate.Query hibQuery = s.createFullTextQuery( query, Clock.class, Book.class );
+		hibQuery.setFirstResult( 1 );
+		List result = hibQuery.list();
+		assertNotNull( result );
+		assertEquals( "first result no max result", 1, result.size() );
+
+		hibQuery.setFirstResult( 0 );
+		hibQuery.setMaxResults( 1 );
+		result = hibQuery.list();
+		assertNotNull( result );
+		assertEquals( "max result set", 1, result.size() );
+
+		hibQuery.setFirstResult( 0 );
+		hibQuery.setMaxResults( 3 );
+		result = hibQuery.list();
+		assertNotNull( result );
+		assertEquals( "max result out of limit", 2, result.size() );
+
+		hibQuery.setFirstResult( 2 );
+		hibQuery.setMaxResults( 3 );
+		result = hibQuery.list();
+		assertNotNull( result );
+		assertEquals( "first result out of limit", 0, result.size() );
+		
+		for (Object element : s.createQuery( "from java.lang.Object" ).list() ) s.delete( element );
+		tx.commit();
+		s.close();
+	}
+
+	public void testIterator() throws Exception {
+		FullTextSession s = Search.createFullTextSession( openSession() );
+		Transaction tx = s.beginTransaction();
+		Clock clock = new Clock(1, "Seiko");
+		s.save( clock );
+		clock = new Clock( 2, "Festina");
+		s.save( clock );
+		Book book = new Book(1, "La chute de la petite reine a travers les yeux de Festina", "La chute de la petite reine a travers les yeux de Festina, blahblah");
+		s.save(book);
+		book = new Book(2, "La gloire de mon père", "Les deboires de mon père en vélo");
+		s.save(book);
+		tx.commit();//post commit events for lucene
+		s.clear();
+		tx = s.beginTransaction();
+		QueryParser parser = new QueryParser("title", new StopAnalyzer() );
+
+		Query query = parser.parse( "summary:noword" );
+		org.hibernate.Query hibQuery = s.createFullTextQuery( query, Clock.class, Book.class );
+		Iterator result = hibQuery.iterate();
+		assertNotNull( result );
+		assertFalse( result.hasNext() );
+
+		query = parser.parse( "summary:Festina Or brand:Seiko" );
+		hibQuery = s.createFullTextQuery( query, Clock.class, Book.class );
+		result = hibQuery.iterate();
+		assertNotNull( result );
+		int index = 0;
+		while ( result.hasNext() ) {
+			index++;
+			s.delete( result.next() );
+		}
+		assertEquals( 2, index );
+
+      s.flush();
+
+      query = parser.parse( "summary:Festina Or brand:Seiko" );
+      hibQuery = s.createFullTextQuery( query, Clock.class, Book.class );
+      result = hibQuery.iterate();
+      assertNotNull( result );
+      assertFalse( result.hasNext() );
+
+      for (Object element : s.createQuery( "from java.lang.Object" ).list() ) s.delete( element );
+		tx.commit();
+		s.close();
+	}
+
+	public void testScrollableResultSet() throws Exception {
+		FullTextSession s = Search.createFullTextSession( openSession() );
+		Transaction tx = s.beginTransaction();
+		Clock clock = new Clock(1, "Seiko");
+		s.save( clock );
+		clock = new Clock( 2, "Festina");
+		s.save( clock );
+		Book book = new Book(1, "La chute de la petite reine a travers les yeux de Festina", "La chute de la petite reine a travers les yeux de Festina, blahblah");
+		s.save(book);
+		book = new Book(2, "La gloire de mon père", "Les deboires de mon père en vélo");
+		s.save(book);
+		tx.commit();//post commit events for lucene
+		s.clear();
+		tx = s.beginTransaction();
+		QueryParser parser = new QueryParser("title", new StopAnalyzer() );
+
+		Query query = parser.parse( "summary:noword" );
+		org.hibernate.Query hibQuery = s.createFullTextQuery( query, Clock.class, Book.class );
+		ScrollableResults result = hibQuery.scroll();
+		assertNotNull( result );
+		assertEquals(-1, result.getRowNumber() );
+		assertEquals(false, result.next() );
+		result.close();
+
+		query = parser.parse( "summary:Festina Or brand:Seiko" );
+		hibQuery = s.createFullTextQuery( query, Clock.class, Book.class );
+		result = hibQuery.scroll();
+		assertEquals(0, result.getRowNumber() );
+		result.beforeFirst();
+		assertEquals( true, result.next() );
+		assertTrue( result.isFirst() );
+		assertTrue( result.scroll( 1 ) );
+		assertTrue( result.isLast() );
+		assertFalse( result.scroll( 1 ) );
+		result.beforeFirst();
+		while ( result.next() ) {
+			s.delete( result.get()[0] );
+		}
+		for (Object element : s.createQuery( "from java.lang.Object" ).list() ) s.delete( element );
+		tx.commit();
+		s.close();
+	}
+
+	public void testMultipleEntityPerIndex() throws Exception {
+		FullTextSession s = Search.createFullTextSession( openSession() );
+		Transaction tx = s.beginTransaction();
+		Clock clock = new Clock(1, "Seiko");
+		s.save( clock );
+		Book book = new Book(1, "La chute de la petite reine a travers les yeux de Festina", "La chute de la petite reine a travers les yeux de Festina, blahblah");
+		s.save(book);
+		AlternateBook alternateBook = new AlternateBook(1, "La chute de la petite reine a travers les yeux de Festina");
+		s.save(alternateBook);
+		tx.commit();
+		s.clear();
+		tx = s.beginTransaction();
+		QueryParser parser = new QueryParser("title", new StopAnalyzer() );
+
+		Query query = parser.parse( "summary:Festina" );
+		org.hibernate.Query hibQuery = s.createFullTextQuery( query, Clock.class, Book.class );
+		List result = hibQuery.list();
+		assertNotNull( result );
+		assertEquals( "Query with explicit class filter", 1, result.size() );
+		
+		query = parser.parse( "summary:Festina" );
+		hibQuery = s.createFullTextQuery( query, Clock.class, Book.class );
+		Iterator it = hibQuery.iterate();
+		assertTrue( it.hasNext() );
+		assertNotNull( it.next() );
+		assertFalse( it.hasNext() );
+
+		query = parser.parse( "summary:Festina" );
+		hibQuery = s.createFullTextQuery( query, Clock.class, Book.class );
+		ScrollableResults sr = hibQuery.scroll();
+		assertTrue( sr.first() );
+		assertNotNull( sr.get() );
+		assertFalse( sr.next() );
+		sr.close();
+
+		query = parser.parse( "summary:Festina OR brand:seiko" );
+		hibQuery = s.createFullTextQuery( query, Clock.class, Book.class );
+		hibQuery.setMaxResults( 2 );
+		result = hibQuery.list();
+		assertNotNull( result );
+		assertEquals( "Query with explicit class filter and limit", 2, result.size() );
+
+		query = parser.parse( "summary:Festina" );
+		hibQuery = s.createFullTextQuery( query );
+		result = hibQuery.list();
+		assertNotNull( result );
+		assertEquals( "Query with no class filter", 2, result.size() );
+        for (Object element : result) {
+			assertTrue( Hibernate.isInitialized( element ) );
+			s.delete( element );
+		}
+		for (Object element : s.createQuery( "from java.lang.Object" ).list() ) s.delete( element );
+		tx.commit();
+		s.close();
+	}
+
+
+	protected Class[] getMappings() {
+		return new Class[] {
+				Book.class,
+				AlternateBook.class,
+				Clock.class
+		};
+	}
+}

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/session (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/session)

Deleted: trunk/HibernateExt/search/src/test/org/hibernate/search/test/session/Email.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/session/Email.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/session/Email.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,63 +0,0 @@
-//$Id: $
-package org.hibernate.search.test.session;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.GeneratedValue;
-
-import org.hibernate.search.annotations.Indexed;
-import org.hibernate.search.annotations.DocumentId;
-import org.hibernate.search.annotations.Field;
-import org.hibernate.search.annotations.Index;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Indexed
-public class Email {
-	@Id
-	@DocumentId
-	private Long id;
-
-	@Field(index = Index.TOKENIZED)
-	private String title;
-
-	@Field(index = Index.TOKENIZED)
-	private String body;
-
-	private String header;
-
-
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-
-	public String getTitle() {
-		return title;
-	}
-
-	public void setTitle(String title) {
-		this.title = title;
-	}
-
-	public String getBody() {
-		return body;
-	}
-
-	public void setBody(String body) {
-		this.body = body;
-	}
-
-	public String getHeader() {
-		return header;
-	}
-
-	public void setHeader(String header) {
-		this.header = header;
-	}
-}

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/session/Email.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/session/Email.java)
===================================================================
--- trunk/HibernateExt/search/src/test/org/hibernate/search/test/session/Email.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/session/Email.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,63 @@
+//$Id: $
+package org.hibernate.search.test.session;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+
+import org.hibernate.search.annotations.Indexed;
+import org.hibernate.search.annotations.DocumentId;
+import org.hibernate.search.annotations.Field;
+import org.hibernate.search.annotations.Index;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Indexed
+public class Email {
+	@Id
+	@DocumentId
+	private Long id;
+
+	@Field(index = Index.TOKENIZED)
+	private String title;
+
+	@Field(index = Index.TOKENIZED)
+	private String body;
+
+	private String header;
+
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getTitle() {
+		return title;
+	}
+
+	public void setTitle(String title) {
+		this.title = title;
+	}
+
+	public String getBody() {
+		return body;
+	}
+
+	public void setBody(String body) {
+		this.body = body;
+	}
+
+	public String getHeader() {
+		return header;
+	}
+
+	public void setHeader(String header) {
+		this.header = header;
+	}
+}

Deleted: trunk/HibernateExt/search/src/test/org/hibernate/search/test/session/MassIndexTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/session/MassIndexTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/session/MassIndexTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,97 +0,0 @@
-//$Id: $
-package org.hibernate.search.test.session;
-
-import java.util.List;
-import java.sql.ResultSet;
-
-import org.hibernate.search.test.SearchTestCase;
-import org.hibernate.search.impl.FullTextSessionImpl;
-import org.hibernate.search.FullTextSession;
-import org.hibernate.search.Search;
-import org.hibernate.search.util.ContextHelper;
-import org.hibernate.Transaction;
-import org.hibernate.Session;
-import org.apache.lucene.queryParser.QueryParser;
-import org.apache.lucene.analysis.StopAnalyzer;
-import org.apache.lucene.store.Directory;
-import org.apache.lucene.search.IndexSearcher;
-import org.apache.lucene.search.Searcher;
-import org.apache.lucene.search.Hits;
-
-/**
- * @author Emmanuel Bernard
- */
-public class MassIndexTest extends SearchTestCase {
-
-	public void testTransactional() throws Exception {
-		FullTextSession s = Search.createFullTextSession( openSession() );
-		Transaction tx = s.beginTransaction();
-		int loop = 4;
-		for (int i = 0 ; i < loop; i++) {
-			Email email = new Email();
-			email.setId( (long)i+1 );
-			email.setTitle( "JBoss World Berlin" );
-			email.setBody( "Meet the guys who wrote the software");
-			s.persist( email );
-		}
-		tx.commit();
-		s.close();
-
-		//check non created object does get found!!1
-		s = new FullTextSessionImpl( openSession() );
-		tx = s.beginTransaction();
-		QueryParser parser = new QueryParser("id", new StopAnalyzer() );
-		List result = s.createFullTextQuery( parser.parse( "body:create" ) ).list();
-		assertEquals( 0, result.size() );
-		tx.commit();
-		s.close();
-
-		s = new FullTextSessionImpl( openSession() );
-		s.getTransaction().begin();
-		s.connection().createStatement().executeUpdate( "update Email set body='Meet the guys who write the software'");
-		//insert an object never indexed
-		s.connection().createStatement().executeUpdate( "insert into Email(id, title, body, header) values( + "
-				+ (loop+1) + ", 'Bob Sponge', 'Meet the guys who create the software', 'nope')");
-		s.getTransaction().commit();
-		s.close();
-
-		s = new FullTextSessionImpl( openSession() );
-		tx = s.beginTransaction();
-		parser = new QueryParser("id", new StopAnalyzer() );
-		result = s.createFullTextQuery( parser.parse( "body:write" ) ).list();
-		assertEquals( 0, result.size() );
-		result = s.createCriteria( Email.class ).list();
-		for (int i = 0 ; i < loop/2 ; i++)
-			s.index( result.get( i ) );
-		tx.commit(); //do the process
-		s.index( result.get(loop/2) ); //do the process out of tx
-		tx = s.beginTransaction();
-		for (int i = loop/2+1 ; i < loop; i++)
-			s.index( result.get( i ) );
-		tx.commit(); //do the process
-		s.close();
-
-		s = Search.createFullTextSession( openSession() );
-		tx = s.beginTransaction();
-		//object never indexed
-		Email email = (Email) s.get(Email.class, new Long(loop + 1) );
-		s.index( email );
-		tx.commit();
-		s.close();
-
-		//check non indexed object get indexed by s.index
-		s = new FullTextSessionImpl( openSession() );
-		tx = s.beginTransaction();
-		result = s.createFullTextQuery( parser.parse( "body:create" ) ).list();
-		assertEquals( 1, result.size() );
-		tx.commit();
-		s.close();
-
-	}
-
-	protected Class[] getMappings() {
-		return new Class[] {
-				Email.class
-		};
-	}
-}

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/session/MassIndexTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/session/MassIndexTest.java)
===================================================================
--- trunk/HibernateExt/search/src/test/org/hibernate/search/test/session/MassIndexTest.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/session/MassIndexTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,97 @@
+//$Id: $
+package org.hibernate.search.test.session;
+
+import java.util.List;
+import java.sql.ResultSet;
+
+import org.hibernate.search.test.SearchTestCase;
+import org.hibernate.search.impl.FullTextSessionImpl;
+import org.hibernate.search.FullTextSession;
+import org.hibernate.search.Search;
+import org.hibernate.search.util.ContextHelper;
+import org.hibernate.Transaction;
+import org.hibernate.Session;
+import org.apache.lucene.queryParser.QueryParser;
+import org.apache.lucene.analysis.StopAnalyzer;
+import org.apache.lucene.store.Directory;
+import org.apache.lucene.search.IndexSearcher;
+import org.apache.lucene.search.Searcher;
+import org.apache.lucene.search.Hits;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class MassIndexTest extends SearchTestCase {
+
+	public void testTransactional() throws Exception {
+		FullTextSession s = Search.createFullTextSession( openSession() );
+		Transaction tx = s.beginTransaction();
+		int loop = 4;
+		for (int i = 0 ; i < loop; i++) {
+			Email email = new Email();
+			email.setId( (long)i+1 );
+			email.setTitle( "JBoss World Berlin" );
+			email.setBody( "Meet the guys who wrote the software");
+			s.persist( email );
+		}
+		tx.commit();
+		s.close();
+
+		//check non created object does get found!!1
+		s = new FullTextSessionImpl( openSession() );
+		tx = s.beginTransaction();
+		QueryParser parser = new QueryParser("id", new StopAnalyzer() );
+		List result = s.createFullTextQuery( parser.parse( "body:create" ) ).list();
+		assertEquals( 0, result.size() );
+		tx.commit();
+		s.close();
+
+		s = new FullTextSessionImpl( openSession() );
+		s.getTransaction().begin();
+		s.connection().createStatement().executeUpdate( "update Email set body='Meet the guys who write the software'");
+		//insert an object never indexed
+		s.connection().createStatement().executeUpdate( "insert into Email(id, title, body, header) values( + "
+				+ (loop+1) + ", 'Bob Sponge', 'Meet the guys who create the software', 'nope')");
+		s.getTransaction().commit();
+		s.close();
+
+		s = new FullTextSessionImpl( openSession() );
+		tx = s.beginTransaction();
+		parser = new QueryParser("id", new StopAnalyzer() );
+		result = s.createFullTextQuery( parser.parse( "body:write" ) ).list();
+		assertEquals( 0, result.size() );
+		result = s.createCriteria( Email.class ).list();
+		for (int i = 0 ; i < loop/2 ; i++)
+			s.index( result.get( i ) );
+		tx.commit(); //do the process
+		s.index( result.get(loop/2) ); //do the process out of tx
+		tx = s.beginTransaction();
+		for (int i = loop/2+1 ; i < loop; i++)
+			s.index( result.get( i ) );
+		tx.commit(); //do the process
+		s.close();
+
+		s = Search.createFullTextSession( openSession() );
+		tx = s.beginTransaction();
+		//object never indexed
+		Email email = (Email) s.get(Email.class, new Long(loop + 1) );
+		s.index( email );
+		tx.commit();
+		s.close();
+
+		//check non indexed object get indexed by s.index
+		s = new FullTextSessionImpl( openSession() );
+		tx = s.beginTransaction();
+		result = s.createFullTextQuery( parser.parse( "body:create" ) ).list();
+		assertEquals( 1, result.size() );
+		tx.commit();
+		s.close();
+
+	}
+
+	protected Class[] getMappings() {
+		return new Class[] {
+				Email.class
+		};
+	}
+}

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/util (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/util)

Deleted: trunk/HibernateExt/search/src/test/org/hibernate/search/test/util/FileHelperTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/util/FileHelperTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/util/FileHelperTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,82 +0,0 @@
-//$Id: $
-package org.hibernate.search.test.util;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-
-import junit.framework.TestCase;
-import org.hibernate.search.util.FileHelper;
-
-/**
- * @author Emmanuel Bernard
- */
-public class FileHelperTest extends TestCase {
-	public void testTiti() throws Exception {
-		File titi = new File("file:/c:/titi", "file:/d:/toito");
-		assertFalse ( titi.exists() );
-	}
-
-	protected void setUp() throws Exception {
-		super.setUp();
-		File dir =  new File("./filehelpersrc");
-		dir.mkdir();
-		String name = "a";
-		createFile( dir, name );
-		name = "b";
-		createFile( dir, name );
-		dir =  new File(dir, "subdir");
-		dir.mkdir();
-		name = "c";
-		createFile( dir, name );
-	}
-
-	private void createFile(File dir, String name) throws IOException {
-		File a = new File(dir, name);
-		a.createNewFile();
-		FileOutputStream os = new FileOutputStream( a, false );
-		os.write( 1 );
-		os.write( 2 );
-		os.write( 3 );
-		os.flush();
-		os.close();
-	}
-
-	protected void tearDown() throws Exception {
-		super.setUp();
-		File dir =  new File("./filehelpersrc");
-		FileHelper.delete( dir );
-		dir =  new File("./filehelperdest");
-		FileHelper.delete( dir );
-	}
-
-	public void testSynchronize() throws Exception {
-		File src =  new File("./filehelpersrc");
-		File dest =  new File("./filehelperdest");
-		FileHelper.synchronize( src, dest, true );
-		File test = new File(dest, "b");
-		assertTrue( test.exists() );
-		test = new File( new File(dest, "subdir"), "c");
-		assertTrue( test.exists() );
-
-		//change
-		Thread.sleep( 2*2000 );
-		test = new File( src, "c");
-		FileOutputStream os = new FileOutputStream( test, true );
-		os.write( 1 );
-		os.write( 2 );
-		os.write( 3 );
-		os.flush();
-		os.close();
-		File destTest = new File(dest, "c");
-		assertNotSame( test.lastModified(), destTest.lastModified() );
-		FileHelper.synchronize( src, dest, true );
-		assertEquals( test.lastModified(), destTest.lastModified() );
-		assertEquals( test.length(), destTest.length() );
-
-		//delete file
-		test.delete();
-		FileHelper.synchronize( src, dest, true );
-		assertTrue( ! destTest.exists() );
-	}
-}

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/util/FileHelperTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/util/FileHelperTest.java)
===================================================================
--- trunk/HibernateExt/search/src/test/org/hibernate/search/test/util/FileHelperTest.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/util/FileHelperTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,82 @@
+//$Id: $
+package org.hibernate.search.test.util;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+import junit.framework.TestCase;
+import org.hibernate.search.util.FileHelper;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class FileHelperTest extends TestCase {
+	public void testTiti() throws Exception {
+		File titi = new File("file:/c:/titi", "file:/d:/toito");
+		assertFalse ( titi.exists() );
+	}
+
+	protected void setUp() throws Exception {
+		super.setUp();
+		File dir =  new File("./filehelpersrc");
+		dir.mkdir();
+		String name = "a";
+		createFile( dir, name );
+		name = "b";
+		createFile( dir, name );
+		dir =  new File(dir, "subdir");
+		dir.mkdir();
+		name = "c";
+		createFile( dir, name );
+	}
+
+	private void createFile(File dir, String name) throws IOException {
+		File a = new File(dir, name);
+		a.createNewFile();
+		FileOutputStream os = new FileOutputStream( a, false );
+		os.write( 1 );
+		os.write( 2 );
+		os.write( 3 );
+		os.flush();
+		os.close();
+	}
+
+	protected void tearDown() throws Exception {
+		super.setUp();
+		File dir =  new File("./filehelpersrc");
+		FileHelper.delete( dir );
+		dir =  new File("./filehelperdest");
+		FileHelper.delete( dir );
+	}
+
+	public void testSynchronize() throws Exception {
+		File src =  new File("./filehelpersrc");
+		File dest =  new File("./filehelperdest");
+		FileHelper.synchronize( src, dest, true );
+		File test = new File(dest, "b");
+		assertTrue( test.exists() );
+		test = new File( new File(dest, "subdir"), "c");
+		assertTrue( test.exists() );
+
+		//change
+		Thread.sleep( 2*2000 );
+		test = new File( src, "c");
+		FileOutputStream os = new FileOutputStream( test, true );
+		os.write( 1 );
+		os.write( 2 );
+		os.write( 3 );
+		os.flush();
+		os.close();
+		File destTest = new File(dest, "c");
+		assertNotSame( test.lastModified(), destTest.lastModified() );
+		FileHelper.synchronize( src, dest, true );
+		assertEquals( test.lastModified(), destTest.lastModified() );
+		assertEquals( test.length(), destTest.length() );
+
+		//delete file
+		test.delete();
+		FileHelper.synchronize( src, dest, true );
+		assertTrue( ! destTest.exists() );
+	}
+}

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/worker (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/worker)

Deleted: trunk/HibernateExt/search/src/test/org/hibernate/search/test/worker/AsyncWorkerTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/worker/AsyncWorkerTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/worker/AsyncWorkerTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,23 +0,0 @@
-//$Id: $
-package org.hibernate.search.test.worker;
-
-import org.hibernate.search.store.RAMDirectoryProvider;
-import org.hibernate.search.Environment;
-import org.hibernate.cfg.Configuration;
-import org.apache.lucene.analysis.StopAnalyzer;
-
-/**
- * @author Emmanuel Bernard
- */
-public class AsyncWorkerTest extends WorkerTestCase {
-
-	protected void configure(Configuration cfg) {
-		cfg.setProperty( "hibernate.search.default.directory_provider", RAMDirectoryProvider.class.getName() );
-		cfg.setProperty( Environment.ANALYZER_CLASS, StopAnalyzer.class.getName() );
-		cfg.setProperty( Environment.WORKER_SCOPE, "transaction" );
-		cfg.setProperty( Environment.WORKER_EXECUTION, "async" );
-		cfg.setProperty( Environment.WORKER_PREFIX + "thread_pool.size", "1" );
-		cfg.setProperty( Environment.WORKER_PREFIX + "buffer_queue.max", "10" );
-	}
-
-}

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/worker/AsyncWorkerTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/worker/AsyncWorkerTest.java)
===================================================================
--- trunk/HibernateExt/search/src/test/org/hibernate/search/test/worker/AsyncWorkerTest.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/worker/AsyncWorkerTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,23 @@
+//$Id: $
+package org.hibernate.search.test.worker;
+
+import org.hibernate.search.store.RAMDirectoryProvider;
+import org.hibernate.search.Environment;
+import org.hibernate.cfg.Configuration;
+import org.apache.lucene.analysis.StopAnalyzer;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class AsyncWorkerTest extends WorkerTestCase {
+
+	protected void configure(Configuration cfg) {
+		cfg.setProperty( "hibernate.search.default.directory_provider", RAMDirectoryProvider.class.getName() );
+		cfg.setProperty( Environment.ANALYZER_CLASS, StopAnalyzer.class.getName() );
+		cfg.setProperty( Environment.WORKER_SCOPE, "transaction" );
+		cfg.setProperty( Environment.WORKER_EXECUTION, "async" );
+		cfg.setProperty( Environment.WORKER_PREFIX + "thread_pool.size", "1" );
+		cfg.setProperty( Environment.WORKER_PREFIX + "buffer_queue.max", "10" );
+	}
+
+}

Deleted: trunk/HibernateExt/search/src/test/org/hibernate/search/test/worker/Employee.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/worker/Employee.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/worker/Employee.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,43 +0,0 @@
-//$Id: $
-package org.hibernate.search.test.worker;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.GeneratedValue;
-
-import org.hibernate.search.annotations.Indexed;
-import org.hibernate.search.annotations.DocumentId;
-import org.hibernate.search.annotations.Field;
-import org.hibernate.search.annotations.Index;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Indexed(index="employee")
-public class Employee {
-	@Id
-	@GeneratedValue
-	@DocumentId
-	private long id;
-
-	@Field(index = Index.TOKENIZED )
-	private String name;
-
-
-	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;
-	}
-}

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/worker/Employee.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/worker/Employee.java)
===================================================================
--- trunk/HibernateExt/search/src/test/org/hibernate/search/test/worker/Employee.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/worker/Employee.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,43 @@
+//$Id: $
+package org.hibernate.search.test.worker;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+
+import org.hibernate.search.annotations.Indexed;
+import org.hibernate.search.annotations.DocumentId;
+import org.hibernate.search.annotations.Field;
+import org.hibernate.search.annotations.Index;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Indexed(index="employee")
+public class Employee {
+	@Id
+	@GeneratedValue
+	@DocumentId
+	private long id;
+
+	@Field(index = Index.TOKENIZED )
+	private String name;
+
+
+	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;
+	}
+}

Deleted: trunk/HibernateExt/search/src/test/org/hibernate/search/test/worker/Employer.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/worker/Employer.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/worker/Employer.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,43 +0,0 @@
-//$Id: $
-package org.hibernate.search.test.worker;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.GeneratedValue;
-
-import org.hibernate.search.annotations.Indexed;
-import org.hibernate.search.annotations.Field;
-import org.hibernate.search.annotations.Index;
-import org.hibernate.search.annotations.DocumentId;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at Indexed(index="employer")
-public class Employer {
-	@Id
-	@GeneratedValue
-	@DocumentId
-	private long id;
-
-	@Field(index = Index.TOKENIZED )
-	private String name;
-
-
-	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;
-	}
-}

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/worker/Employer.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/worker/Employer.java)
===================================================================
--- trunk/HibernateExt/search/src/test/org/hibernate/search/test/worker/Employer.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/worker/Employer.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,43 @@
+//$Id: $
+package org.hibernate.search.test.worker;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+
+import org.hibernate.search.annotations.Indexed;
+import org.hibernate.search.annotations.Field;
+import org.hibernate.search.annotations.Index;
+import org.hibernate.search.annotations.DocumentId;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Indexed(index="employer")
+public class Employer {
+	@Id
+	@GeneratedValue
+	@DocumentId
+	private long id;
+
+	@Field(index = Index.TOKENIZED )
+	private String name;
+
+
+	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;
+	}
+}

Deleted: trunk/HibernateExt/search/src/test/org/hibernate/search/test/worker/SyncWorkerTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/worker/SyncWorkerTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/worker/SyncWorkerTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,24 +0,0 @@
-//$Id: $
-package org.hibernate.search.test.worker;
-
-import org.hibernate.cfg.Configuration;
-import org.hibernate.search.store.RAMDirectoryProvider;
-import org.hibernate.search.Environment;
-import org.hibernate.search.event.FullTextIndexEventListener;
-import org.hibernate.event.PostDeleteEventListener;
-import org.hibernate.event.PostUpdateEventListener;
-import org.hibernate.event.PostInsertEventListener;
-import org.apache.lucene.analysis.StopAnalyzer;
-
-/**
- * @author Emmanuel Bernard
- */
-public class SyncWorkerTest extends WorkerTestCase {
-
-	protected void configure(Configuration cfg) {
-		cfg.setProperty( "hibernate.search.default.directory_provider", RAMDirectoryProvider.class.getName() );
-		cfg.setProperty( Environment.ANALYZER_CLASS, StopAnalyzer.class.getName() );
-		cfg.setProperty( Environment.WORKER_SCOPE, "transaction" );
-		cfg.setProperty( Environment.WORKER_PREFIX, "sync" );
-	}
-}

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/worker/SyncWorkerTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/worker/SyncWorkerTest.java)
===================================================================
--- trunk/HibernateExt/search/src/test/org/hibernate/search/test/worker/SyncWorkerTest.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/worker/SyncWorkerTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,24 @@
+//$Id: $
+package org.hibernate.search.test.worker;
+
+import org.hibernate.cfg.Configuration;
+import org.hibernate.search.store.RAMDirectoryProvider;
+import org.hibernate.search.Environment;
+import org.hibernate.search.event.FullTextIndexEventListener;
+import org.hibernate.event.PostDeleteEventListener;
+import org.hibernate.event.PostUpdateEventListener;
+import org.hibernate.event.PostInsertEventListener;
+import org.apache.lucene.analysis.StopAnalyzer;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class SyncWorkerTest extends WorkerTestCase {
+
+	protected void configure(Configuration cfg) {
+		cfg.setProperty( "hibernate.search.default.directory_provider", RAMDirectoryProvider.class.getName() );
+		cfg.setProperty( Environment.ANALYZER_CLASS, StopAnalyzer.class.getName() );
+		cfg.setProperty( Environment.WORKER_SCOPE, "transaction" );
+		cfg.setProperty( Environment.WORKER_PREFIX, "sync" );
+	}
+}

Deleted: trunk/HibernateExt/search/src/test/org/hibernate/search/test/worker/WorkerTestCase.java
===================================================================
--- branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/worker/WorkerTestCase.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/worker/WorkerTestCase.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,206 +0,0 @@
-//$Id: $
-package org.hibernate.search.test.worker;
-
-import java.io.File;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-
-import org.apache.lucene.analysis.StopAnalyzer;
-import org.apache.lucene.queryParser.ParseException;
-import org.apache.lucene.queryParser.QueryParser;
-import org.apache.lucene.search.Query;
-import org.hibernate.Session;
-import org.hibernate.SessionFactory;
-import org.hibernate.Transaction;
-import org.hibernate.event.PostDeleteEventListener;
-import org.hibernate.event.PostInsertEventListener;
-import org.hibernate.event.PostUpdateEventListener;
-import org.hibernate.search.Environment;
-import org.hibernate.search.FullTextSession;
-import org.hibernate.search.event.FullTextIndexEventListener;
-import org.hibernate.search.impl.FullTextSessionImpl;
-import org.hibernate.search.store.FSDirectoryProvider;
-import org.hibernate.search.test.SearchTestCase;
-
-/**
- * @author Emmanuel Bernard
- */
-public class WorkerTestCase extends SearchTestCase {
-
-	protected void setUp() throws Exception {
-		File sub = getBaseIndexDir();
-		sub.mkdir();
-		File[] files = sub.listFiles();
-		for ( File file : files ) {
-			if ( file.isDirectory() ) {
-				delete( file );
-			}
-		}
-		//super.setUp(); //we need a fresh session factory each time for index set up
-		buildSessionFactory( getMappings(), getAnnotatedPackages(), getXmlFiles() );
-	}
-
-	private File getBaseIndexDir() {
-		File current = new File( "." );
-		File sub = new File( current, "indextemp" );
-		return sub;
-	}
-
-	protected void tearDown() throws Exception {
-		super.tearDown();
-		File sub = getBaseIndexDir();
-		delete( sub );
-	}
-
-	private void delete(File sub) {
-		if ( sub.isDirectory() ) {
-			for ( File file : sub.listFiles() ) {
-				delete( file );
-			}
-			sub.delete();
-		}
-		else {
-			sub.delete();
-		}
-	}
-
-	public void testConcurrency() throws Exception {
-		int nThreads = 15;
-		ExecutorService es = Executors.newFixedThreadPool( nThreads );
-		Work work = new Work( getSessions() );
-		ReverseWork reverseWork = new ReverseWork( getSessions() );
-		long start = System.currentTimeMillis();
-		int iteration = 100;
-		for ( int i = 0; i < iteration; i++ ) {
-			es.execute( work );
-			es.execute( reverseWork );
-		}
-		while ( work.count < iteration - 1 ) {
-			Thread.sleep( 20 );
-		}
-		System.out.println( iteration + " iterations (8 tx per iteration) in " + nThreads + " threads: " + ( System
-				.currentTimeMillis() - start ) );
-	}
-
-	protected class Work implements Runnable {
-		private SessionFactory sf;
-		public volatile int count = 0;
-
-		public Work(SessionFactory sf) {
-			this.sf = sf;
-		}
-
-		public void run() {
-			Session s = sf.openSession();
-			Transaction tx = s.beginTransaction();
-			Employee ee = new Employee();
-			ee.setName( "Emmanuel" );
-			s.persist( ee );
-			Employer er = new Employer();
-			er.setName( "RH" );
-			s.persist( er );
-			tx.commit();
-			s.close();
-
-			s = sf.openSession();
-			tx = s.beginTransaction();
-			ee = (Employee) s.get( Employee.class, ee.getId() );
-			ee.setName( "Emmanuel2" );
-			er = (Employer) s.get( Employer.class, er.getId() );
-			er.setName( "RH2" );
-			tx.commit();
-			s.close();
-
-//			try {
-//				Thread.sleep( 50 );
-//			}
-//			catch (InterruptedException e) {
-//				e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
-//			}
-
-			s = sf.openSession();
-			tx = s.beginTransaction();
-			FullTextSession fts = new FullTextSessionImpl( s );
-			QueryParser parser = new QueryParser( "id", new StopAnalyzer() );
-			Query query;
-			try {
-				query = parser.parse( "name:emmanuel2" );
-			}
-			catch (ParseException e) {
-				throw new RuntimeException( e );
-			}
-			boolean results = fts.createFullTextQuery( query ).list().size() > 0;
-			//don't test because in case of async, it query happens before actual saving
-			//if ( !results ) throw new RuntimeException( "No results!" );
-			tx.commit();
-			s.close();
-
-			s = sf.openSession();
-			tx = s.beginTransaction();
-			ee = (Employee) s.get( Employee.class, ee.getId() );
-			s.delete( ee );
-			er = (Employer) s.get( Employer.class, er.getId() );
-			s.delete( er );
-			tx.commit();
-			s.close();
-			count++;
-		}
-	}
-
-	protected class ReverseWork implements Runnable {
-		private SessionFactory sf;
-
-		public ReverseWork(SessionFactory sf) {
-			this.sf = sf;
-		}
-
-		public void run() {
-			Session s = sf.openSession();
-			Transaction tx = s.beginTransaction();
-			Employer er = new Employer();
-			er.setName( "RH" );
-			s.persist( er );
-			Employee ee = new Employee();
-			ee.setName( "Emmanuel" );
-			s.persist( ee );
-			tx.commit();
-			s.close();
-
-			s = sf.openSession();
-			tx = s.beginTransaction();
-			er = (Employer) s.get( Employer.class, er.getId() );
-			er.setName( "RH2" );
-			ee = (Employee) s.get( Employee.class, ee.getId() );
-			ee.setName( "Emmanuel2" );
-			tx.commit();
-			s.close();
-
-			s = sf.openSession();
-			tx = s.beginTransaction();
-			er = (Employer) s.get( Employer.class, er.getId() );
-			s.delete( er );
-			ee = (Employee) s.get( Employee.class, ee.getId() );
-			s.delete( ee );
-			tx.commit();
-			s.close();
-		}
-	}
-
-	protected void configure(org.hibernate.cfg.Configuration cfg) {
-		File sub = getBaseIndexDir();
-		cfg.setProperty( "hibernate.search.default.indexBase", sub.getAbsolutePath() );
-		cfg.setProperty( "hibernate.search.Clock.directory_provider", FSDirectoryProvider.class.getName() );
-		cfg.setProperty( Environment.ANALYZER_CLASS, StopAnalyzer.class.getName() );
-		FullTextIndexEventListener del = new FullTextIndexEventListener();
-		cfg.getEventListeners().setPostDeleteEventListeners( new PostDeleteEventListener[]{del} );
-		cfg.getEventListeners().setPostUpdateEventListeners( new PostUpdateEventListener[]{del} );
-		cfg.getEventListeners().setPostInsertEventListeners( new PostInsertEventListener[]{del} );
-	}
-
-	protected Class[] getMappings() {
-		return new Class[]{
-				Employee.class,
-				Employer.class
-		};
-	}
-}

Copied: trunk/HibernateExt/search/src/test/org/hibernate/search/test/worker/WorkerTestCase.java (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test/org/hibernate/search/test/worker/WorkerTestCase.java)
===================================================================
--- trunk/HibernateExt/search/src/test/org/hibernate/search/test/worker/WorkerTestCase.java	                        (rev 0)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/worker/WorkerTestCase.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,206 @@
+//$Id: $
+package org.hibernate.search.test.worker;
+
+import java.io.File;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+import org.apache.lucene.analysis.StopAnalyzer;
+import org.apache.lucene.queryParser.ParseException;
+import org.apache.lucene.queryParser.QueryParser;
+import org.apache.lucene.search.Query;
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.hibernate.Transaction;
+import org.hibernate.event.PostDeleteEventListener;
+import org.hibernate.event.PostInsertEventListener;
+import org.hibernate.event.PostUpdateEventListener;
+import org.hibernate.search.Environment;
+import org.hibernate.search.FullTextSession;
+import org.hibernate.search.event.FullTextIndexEventListener;
+import org.hibernate.search.impl.FullTextSessionImpl;
+import org.hibernate.search.store.FSDirectoryProvider;
+import org.hibernate.search.test.SearchTestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class WorkerTestCase extends SearchTestCase {
+
+	protected void setUp() throws Exception {
+		File sub = getBaseIndexDir();
+		sub.mkdir();
+		File[] files = sub.listFiles();
+		for ( File file : files ) {
+			if ( file.isDirectory() ) {
+				delete( file );
+			}
+		}
+		//super.setUp(); //we need a fresh session factory each time for index set up
+		buildSessionFactory( getMappings(), getAnnotatedPackages(), getXmlFiles() );
+	}
+
+	private File getBaseIndexDir() {
+		File current = new File( "." );
+		File sub = new File( current, "indextemp" );
+		return sub;
+	}
+
+	protected void tearDown() throws Exception {
+		super.tearDown();
+		File sub = getBaseIndexDir();
+		delete( sub );
+	}
+
+	private void delete(File sub) {
+		if ( sub.isDirectory() ) {
+			for ( File file : sub.listFiles() ) {
+				delete( file );
+			}
+			sub.delete();
+		}
+		else {
+			sub.delete();
+		}
+	}
+
+	public void testConcurrency() throws Exception {
+		int nThreads = 15;
+		ExecutorService es = Executors.newFixedThreadPool( nThreads );
+		Work work = new Work( getSessions() );
+		ReverseWork reverseWork = new ReverseWork( getSessions() );
+		long start = System.currentTimeMillis();
+		int iteration = 100;
+		for ( int i = 0; i < iteration; i++ ) {
+			es.execute( work );
+			es.execute( reverseWork );
+		}
+		while ( work.count < iteration - 1 ) {
+			Thread.sleep( 20 );
+		}
+		System.out.println( iteration + " iterations (8 tx per iteration) in " + nThreads + " threads: " + ( System
+				.currentTimeMillis() - start ) );
+	}
+
+	protected class Work implements Runnable {
+		private SessionFactory sf;
+		public volatile int count = 0;
+
+		public Work(SessionFactory sf) {
+			this.sf = sf;
+		}
+
+		public void run() {
+			Session s = sf.openSession();
+			Transaction tx = s.beginTransaction();
+			Employee ee = new Employee();
+			ee.setName( "Emmanuel" );
+			s.persist( ee );
+			Employer er = new Employer();
+			er.setName( "RH" );
+			s.persist( er );
+			tx.commit();
+			s.close();
+
+			s = sf.openSession();
+			tx = s.beginTransaction();
+			ee = (Employee) s.get( Employee.class, ee.getId() );
+			ee.setName( "Emmanuel2" );
+			er = (Employer) s.get( Employer.class, er.getId() );
+			er.setName( "RH2" );
+			tx.commit();
+			s.close();
+
+//			try {
+//				Thread.sleep( 50 );
+//			}
+//			catch (InterruptedException e) {
+//				e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
+//			}
+
+			s = sf.openSession();
+			tx = s.beginTransaction();
+			FullTextSession fts = new FullTextSessionImpl( s );
+			QueryParser parser = new QueryParser( "id", new StopAnalyzer() );
+			Query query;
+			try {
+				query = parser.parse( "name:emmanuel2" );
+			}
+			catch (ParseException e) {
+				throw new RuntimeException( e );
+			}
+			boolean results = fts.createFullTextQuery( query ).list().size() > 0;
+			//don't test because in case of async, it query happens before actual saving
+			//if ( !results ) throw new RuntimeException( "No results!" );
+			tx.commit();
+			s.close();
+
+			s = sf.openSession();
+			tx = s.beginTransaction();
+			ee = (Employee) s.get( Employee.class, ee.getId() );
+			s.delete( ee );
+			er = (Employer) s.get( Employer.class, er.getId() );
+			s.delete( er );
+			tx.commit();
+			s.close();
+			count++;
+		}
+	}
+
+	protected class ReverseWork implements Runnable {
+		private SessionFactory sf;
+
+		public ReverseWork(SessionFactory sf) {
+			this.sf = sf;
+		}
+
+		public void run() {
+			Session s = sf.openSession();
+			Transaction tx = s.beginTransaction();
+			Employer er = new Employer();
+			er.setName( "RH" );
+			s.persist( er );
+			Employee ee = new Employee();
+			ee.setName( "Emmanuel" );
+			s.persist( ee );
+			tx.commit();
+			s.close();
+
+			s = sf.openSession();
+			tx = s.beginTransaction();
+			er = (Employer) s.get( Employer.class, er.getId() );
+			er.setName( "RH2" );
+			ee = (Employee) s.get( Employee.class, ee.getId() );
+			ee.setName( "Emmanuel2" );
+			tx.commit();
+			s.close();
+
+			s = sf.openSession();
+			tx = s.beginTransaction();
+			er = (Employer) s.get( Employer.class, er.getId() );
+			s.delete( er );
+			ee = (Employee) s.get( Employee.class, ee.getId() );
+			s.delete( ee );
+			tx.commit();
+			s.close();
+		}
+	}
+
+	protected void configure(org.hibernate.cfg.Configuration cfg) {
+		File sub = getBaseIndexDir();
+		cfg.setProperty( "hibernate.search.default.indexBase", sub.getAbsolutePath() );
+		cfg.setProperty( "hibernate.search.Clock.directory_provider", FSDirectoryProvider.class.getName() );
+		cfg.setProperty( Environment.ANALYZER_CLASS, StopAnalyzer.class.getName() );
+		FullTextIndexEventListener del = new FullTextIndexEventListener();
+		cfg.getEventListeners().setPostDeleteEventListeners( new PostDeleteEventListener[]{del} );
+		cfg.getEventListeners().setPostUpdateEventListeners( new PostUpdateEventListener[]{del} );
+		cfg.getEventListeners().setPostInsertEventListeners( new PostInsertEventListener[]{del} );
+	}
+
+	protected Class[] getMappings() {
+		return new Class[]{
+				Employee.class,
+				Employer.class
+		};
+	}
+}

Copied: trunk/HibernateExt/search/src/test-resources (from rev 11279, branches/Branch_3_2/HibernateExt/search/src/test-resources)

Copied: trunk/HibernateExt/validator (from rev 11279, branches/Branch_3_2/HibernateExt/validator)

Deleted: trunk/HibernateExt/validator/build.properties.dist
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/build.properties.dist	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/build.properties.dist	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,11 +0,0 @@
-common.dir=.
-src.dir=src
-test.dir=test
-hibernate-core.home=../hibernate-3.2
-
-#locally present jars
-jpa-api.jar=./lib/ejb3-persistence.jar
-jpa.jar=./lib/test/hibernate-entitymanager.jar
-archive-browsing.jar=./lib/test/jboss-archive-browsing.jar
-commons-annotations.jar=./lib/hibernate-commons-annotations.jar
-annotations.jar=./lib/test/hibernate-annotations.jar
\ No newline at end of file

Copied: trunk/HibernateExt/validator/build.properties.dist (from rev 11279, branches/Branch_3_2/HibernateExt/validator/build.properties.dist)
===================================================================
--- trunk/HibernateExt/validator/build.properties.dist	                        (rev 0)
+++ trunk/HibernateExt/validator/build.properties.dist	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,11 @@
+common.dir=.
+src.dir=src
+test.dir=test
+hibernate-core.home=../hibernate-3.2
+
+#locally present jars
+jpa-api.jar=./lib/ejb3-persistence.jar
+jpa.jar=./lib/test/hibernate-entitymanager.jar
+archive-browsing.jar=./lib/test/jboss-archive-browsing.jar
+commons-annotations.jar=./lib/hibernate-commons-annotations.jar
+annotations.jar=./lib/test/hibernate-annotations.jar
\ No newline at end of file

Deleted: trunk/HibernateExt/validator/build.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/build.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/build.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,253 +0,0 @@
-<!--
-
-  Hibernate Annotations ANT build script.
-
-  You need JDK 5.0 installed to build Hibernate Annotations.
-
--->
-
-<!-- To add a dependency:
-    defines the dependency.jar property that points to the expected jar file
-    in init, add an available dependency.jar and populate dependency.jar.available
-    create a target get.dependency which calls clean and jar
-    add get.depdendecy to depends= for compile or compiletest
-    alter lib.moduleclass.path or junit.moduleclasspath accordingly
--->
-
-<project name="Hibernate Validator" default="dist" basedir=".">
-
-	<!-- Give user a chance to override without editing this file
-		   (and without typing -D each time it compiles it) -->
-	<property file="build.properties"/>
-	<property file="${user.home}/.ant.properties"/>
-
-	<!-- Name of project and version, used to create filenames -->
-	<property name="Name" value="Hibernate Validator"/>
-	<property name="name" value="hibernate-validator"/>
-	<property name="version" value="3.2.2.GA"/>
-	<property name="javadoc.packagenames" value="org.hibernate.validator.*"/>
-	<property name="copy.test" value="true"/>
-	<property name="javac.source" value="1.5"/>
-	<property name="javac.target" value="1.5"/>
-	<property name="jdbc.dir" value="jdbc"/>
-	<property name="common.dir" value="${basedir}/../common"/>
-
-    <!-- dependencies -->
-    <property name="jpa-api.jar" value="${basedir}/../jpa-api/build/ejb3-persistence.jar"/>
-	<property name="annotations.jar"
-			  value="${basedir}/../annotations/target/hibernate-annotations/hibernate-annotations.jar"/>
-    <property name="jpa.jar"
-              value="${basedir}/../entitymanager/target/hibernate-entitymanager/hibernate-entitymanager.jar"/>
-    <property name="archive-browsing.jar"
-              value="${basedir}/../entitymanager/lib/jboss-archive-browsing.jar"/>
-    <property name="commons-annotations.jar"
-			  value="${basedir}/../commons-annotations/target/hibernate-commons-annotations/hibernate-commons-annotations.jar"/>
-
-    <import file="${common.dir}/common-build.xml"/>
-
-
-	<path id="lib.moduleclass.path">
-		<pathelement location="${jpa-api.jar}"/>
-		<pathelement location="${commons-annotations.jar}"/>
-	</path>
-	<path id="junit.moduleclasspath">
-		<pathelement location="${src.dir}"/>
-		<pathelement location="${test.dir}"/>
-		<pathelement location="${annotations.jar}"/>
-        <pathelement location="${jpa.jar}"/>
-        <pathelement location="${archive-browsing.jar}"/>
-        <fileset dir="${jdbc.dir}">
-			<include name="*.jar"/>
-			<include name="*.zip"/>
-		</fileset>
-        <fileset dir="${lib.dir}/test">
-			<include name="*.jar"/>
-			<include name="*.zip"/>
-		</fileset>
-    </path>
-
-	<target name="init">
-		<antcall target="common-build.init"/>
-		<!-- check for dependency artefacts -->
-		<available file="${jpa-api.jar}" type="file" property="jpa-api.jar.available"/>
-		<available file="${commons-annotations.jar}" type="file" property="commons-annotations.jar.available"/>
-		<available file="${annotations.jar}" type="file" property="annotations.jar.available"/>
-        <available file="${jpa.jar}" type="file" property="jpa.jar.available"/>
-        <mkdir dir="${lib.dir}/test"/>
-    </target>
-
-	<target name="get.jpa-api" depends="init" unless="jpa-api.jar.available">
-		<ant inheritall="false" dir="${basedir}/../jpa-api" target="clean"/>
-		<ant inheritall="false" dir="${basedir}/../jpa-api" target="jar"/>
-	</target>
-
-	<target name="get.commons-annotations" depends="init" unless="commons-annotations.jar.available">
-		<ant inheritall="false" dir="${basedir}/../commons-annotations" target="clean"/>
-		<ant inheritall="false" dir="${basedir}/../commons-annotations" target="jar"/>
-	</target>
-
-	<target name="get.annotations" depends="init" unless="annotations.jar.available">
-		<ant inheritall="false" dir="${basedir}/../annotations" target="clean"/>
-		<ant inheritall="false" dir="${basedir}/../annotations" target="jar"/>
-	</target>
-
-    <target name="get.jpa" depends="init" unless="jpa.jar.available">
-		<ant inheritall="false" dir="${basedir}/../entitymanager" target="clean"/>
-		<ant inheritall="false" dir="${basedir}/../entitymanager" target="jar"/>
-	</target>
-
-    <target name="compile" depends="init,get.jpa-api,get.commons-annotations" description="Compile the Java source code">
-		<available
-				classname="org.eclipse.core.launcher.Main"
-				property="build.compiler"
-				value="org.eclipse.jdt.core.JDTCompilerAdapter"
-				classpath="${java.class.path}"/>
-		<javac
-				srcdir="${src.dir}"
-				destdir="${classes.dir}"
-				classpathref="lib.class.path"
-				debug="${javac.debug}"
-				optimize="${javac.optimize}"
-				nowarn="on"
-                source="${javac.source}"
-                target="${javac.target}">
-			<src path="${src.dir}"/>
-		</javac>
-		<copy todir="${classes.dir}">
-			<fileset dir="${src.dir}">
-				<include name="**/resources/*.properties"/>
-				<include name="**/*.xsd"/>
-			</fileset>
-		</copy>
-	</target>
-
-	<target name="compiletest" depends="init,get.annotations,get.jpa,compile" description="Compile the tests">
-		<available
-				classname="org.eclipse.core.launcher.Main"
-				property="build.compiler"
-				value="org.eclipse.jdt.core.JDTCompilerAdapter"
-				classpath="${java.class.path}"/>
-		<javac
-				destdir="${testclasses.dir}"
-				classpathref="junit.classpath"
-				debug="${javac.debug}"
-				optimize="${javac.optimize}"
-				nowarn="on"
-				source="1.5"
-				target="1.5">
-			<src refid="testsrc.path"/>
-		</javac>
-	</target>
-
-
-	<!-- target name="junit" depends="compiletest">
-			<mkdir dir="test_output"/>
-			<junit fork="yes" printsummary="yes" haltonfailure="yes"
-				 forkmode="perBatch">
-				<classpath>
-					<fileset dir="${jdbc.dir}">
-						<include name="**/*.jar"/>
-						<include name="**/*.zip"/>
-					</fileset>
-					<path refid="lib.class.path"/>
-					<pathelement path="${classes.dir}"/>
-					<pathelement path="${src.dir}"/>
-					<pathelement path="${test.dir}"/>
-				</classpath>
-				<formatter type="plain"/>
-				<formatter type="xml"/>
-				<batchtest fork="yes" todir="test_output" haltonfailure="no">
-					<fileset dir="${classes.dir}">
-						<include name="**/*Test.class"/>
-					</fileset>
-				</batchtest>
-			</junit>
-		</target -->
-
-	<!-- Run a single unit test. -->
-	<target name="junitsingle" depends="compiletest"
-			description="Run a single test suite (requires testname and jdbc.driver properties)">
-		<mkdir dir="test_output"/>
-		<junit printsummary="yes" fork="yes" haltonfailure="yes">
-			<classpath>
-				<fileset dir="${jdbc.dir}">
-					<include name="**/*.jar"/>
-					<include name="**/*.zip"/>
-				</fileset>
-				<path refid="lib.class.path"/>
-				<pathelement path="${classes.dir}"/>
-				<pathelement path="${src.dir}"/>
-				<!-- pick up properties from here -->
-				<pathelement path="${test.dir}"/>
-				<!-- pick up mappings from here -->
-			</classpath>
-			<formatter type="plain"/>
-			<formatter type="xml"/>
-			<test fork="yes" todir="test_output" haltonfailure="no" name="${testname}"/>
-		</junit>
-	</target>
-
-	<!-- target name="report">
-			<mkdir dir="test_output"/>
-			<junitreport todir="test_output">
-			  <fileset dir="test_output">
-				<include name="TEST-*.xml"/>
-			  </fileset>
-			  <report format="frames" todir="test_output/report"/>
-			</junitreport>
-		</target -->
-
-	<target name="jar" depends="compile" description="Build the distribution .jar file">
-		<mkdir dir="${classes.dir}/META-INF"/>
-		<manifest file="${classes.dir}/META-INF/MANIFEST.MF">
-			<attribute name="Product" value="${Name}"/>
-			<attribute name="Version" value="${version}"/>
-		</manifest>
-		<antcall target="common-build.jar"/>
-	</target>
-
-	<!-- Some of this can probably be moved to common-build... -->
-	<target name="dist" depends="jar,javadoc,copysource,copytest,copylib,extras"
-			description="Build everything">
-
-		<ant inheritall="false" dir="${basedir}/doc/reference"/>
-		<copy todir="${dist.dir}/doc/reference" failonerror="false">
-			<fileset dir="${basedir}/doc/reference/build">
-				<include name="**/*.*"/>
-			</fileset>
-		</copy>
-
-		<copy todir="${dist.dir}" failonerror="false">
-			<fileset dir="${common.dir}">
-				<include name="common-build.xml"/>
-			</fileset>
-		</copy>
-
-        <!-- copy dependencies -->
-        <copy todir="${dist.lib.dir}" failonerror="false">
-			<fileset file="${jpa-api.jar}"/>
-            <fileset file="${commons-annotations.jar}"/>
-        </copy>
-        <mkdir dir="${dist.lib.dir}/test"/>
-        <copy todir="${dist.lib.dir}/test" failonerror="false">
-			<fileset file="${annotations.jar}"/>
-            <fileset file="${jpa.jar}"/>
-            <fileset file="${archive-browsing.jar}"/>
-        </copy>
-
-        <copy file="${basedir}/build.properties.dist" tofile="${dist.dir}/build.properties" failonerror="false">
-		</copy>
-		<antcall target="common-build.dist"/>
-	</target>
-
-	<target name="zip-dist" description="zip the dist">
-		<zip zipfile="${dist.dir}-${version}.zip">
-			<zipfileset prefix="${name}-${version}" dir="${dist.dir}"/>
-		</zip>
-		<tar compression="gzip" tarfile="${dist.dir}-${version}.tar.gz">
-			<tarfileset prefix="${name}-${version}" dir="${dist.dir}"/>
-		</tar>
-	</target>
-
-
-</project>

Copied: trunk/HibernateExt/validator/build.xml (from rev 11279, branches/Branch_3_2/HibernateExt/validator/build.xml)
===================================================================
--- trunk/HibernateExt/validator/build.xml	                        (rev 0)
+++ trunk/HibernateExt/validator/build.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,253 @@
+<!--
+
+  Hibernate Annotations ANT build script.
+
+  You need JDK 5.0 installed to build Hibernate Annotations.
+
+-->
+
+<!-- To add a dependency:
+    defines the dependency.jar property that points to the expected jar file
+    in init, add an available dependency.jar and populate dependency.jar.available
+    create a target get.dependency which calls clean and jar
+    add get.depdendecy to depends= for compile or compiletest
+    alter lib.moduleclass.path or junit.moduleclasspath accordingly
+-->
+
+<project name="Hibernate Validator" default="dist" basedir=".">
+
+	<!-- Give user a chance to override without editing this file
+		   (and without typing -D each time it compiles it) -->
+	<property file="build.properties"/>
+	<property file="${user.home}/.ant.properties"/>
+
+	<!-- Name of project and version, used to create filenames -->
+	<property name="Name" value="Hibernate Validator"/>
+	<property name="name" value="hibernate-validator"/>
+	<property name="version" value="3.2.2.GA"/>
+	<property name="javadoc.packagenames" value="org.hibernate.validator.*"/>
+	<property name="copy.test" value="true"/>
+	<property name="javac.source" value="1.5"/>
+	<property name="javac.target" value="1.5"/>
+	<property name="jdbc.dir" value="jdbc"/>
+	<property name="common.dir" value="${basedir}/../common"/>
+
+    <!-- dependencies -->
+    <property name="jpa-api.jar" value="${basedir}/../jpa-api/build/ejb3-persistence.jar"/>
+	<property name="annotations.jar"
+			  value="${basedir}/../annotations/target/hibernate-annotations/hibernate-annotations.jar"/>
+    <property name="jpa.jar"
+              value="${basedir}/../entitymanager/target/hibernate-entitymanager/hibernate-entitymanager.jar"/>
+    <property name="archive-browsing.jar"
+              value="${basedir}/../entitymanager/lib/jboss-archive-browsing.jar"/>
+    <property name="commons-annotations.jar"
+			  value="${basedir}/../commons-annotations/target/hibernate-commons-annotations/hibernate-commons-annotations.jar"/>
+
+    <import file="${common.dir}/common-build.xml"/>
+
+
+	<path id="lib.moduleclass.path">
+		<pathelement location="${jpa-api.jar}"/>
+		<pathelement location="${commons-annotations.jar}"/>
+	</path>
+	<path id="junit.moduleclasspath">
+		<pathelement location="${src.dir}"/>
+		<pathelement location="${test.dir}"/>
+		<pathelement location="${annotations.jar}"/>
+        <pathelement location="${jpa.jar}"/>
+        <pathelement location="${archive-browsing.jar}"/>
+        <fileset dir="${jdbc.dir}">
+			<include name="*.jar"/>
+			<include name="*.zip"/>
+		</fileset>
+        <fileset dir="${lib.dir}/test">
+			<include name="*.jar"/>
+			<include name="*.zip"/>
+		</fileset>
+    </path>
+
+	<target name="init">
+		<antcall target="common-build.init"/>
+		<!-- check for dependency artefacts -->
+		<available file="${jpa-api.jar}" type="file" property="jpa-api.jar.available"/>
+		<available file="${commons-annotations.jar}" type="file" property="commons-annotations.jar.available"/>
+		<available file="${annotations.jar}" type="file" property="annotations.jar.available"/>
+        <available file="${jpa.jar}" type="file" property="jpa.jar.available"/>
+        <mkdir dir="${lib.dir}/test"/>
+    </target>
+
+	<target name="get.jpa-api" depends="init" unless="jpa-api.jar.available">
+		<ant inheritall="false" dir="${basedir}/../jpa-api" target="clean"/>
+		<ant inheritall="false" dir="${basedir}/../jpa-api" target="jar"/>
+	</target>
+
+	<target name="get.commons-annotations" depends="init" unless="commons-annotations.jar.available">
+		<ant inheritall="false" dir="${basedir}/../commons-annotations" target="clean"/>
+		<ant inheritall="false" dir="${basedir}/../commons-annotations" target="jar"/>
+	</target>
+
+	<target name="get.annotations" depends="init" unless="annotations.jar.available">
+		<ant inheritall="false" dir="${basedir}/../annotations" target="clean"/>
+		<ant inheritall="false" dir="${basedir}/../annotations" target="jar"/>
+	</target>
+
+    <target name="get.jpa" depends="init" unless="jpa.jar.available">
+		<ant inheritall="false" dir="${basedir}/../entitymanager" target="clean"/>
+		<ant inheritall="false" dir="${basedir}/../entitymanager" target="jar"/>
+	</target>
+
+    <target name="compile" depends="init,get.jpa-api,get.commons-annotations" description="Compile the Java source code">
+		<available
+				classname="org.eclipse.core.launcher.Main"
+				property="build.compiler"
+				value="org.eclipse.jdt.core.JDTCompilerAdapter"
+				classpath="${java.class.path}"/>
+		<javac
+				srcdir="${src.dir}"
+				destdir="${classes.dir}"
+				classpathref="lib.class.path"
+				debug="${javac.debug}"
+				optimize="${javac.optimize}"
+				nowarn="on"
+                source="${javac.source}"
+                target="${javac.target}">
+			<src path="${src.dir}"/>
+		</javac>
+		<copy todir="${classes.dir}">
+			<fileset dir="${src.dir}">
+				<include name="**/resources/*.properties"/>
+				<include name="**/*.xsd"/>
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="compiletest" depends="init,get.annotations,get.jpa,compile" description="Compile the tests">
+		<available
+				classname="org.eclipse.core.launcher.Main"
+				property="build.compiler"
+				value="org.eclipse.jdt.core.JDTCompilerAdapter"
+				classpath="${java.class.path}"/>
+		<javac
+				destdir="${testclasses.dir}"
+				classpathref="junit.classpath"
+				debug="${javac.debug}"
+				optimize="${javac.optimize}"
+				nowarn="on"
+				source="1.5"
+				target="1.5">
+			<src refid="testsrc.path"/>
+		</javac>
+	</target>
+
+
+	<!-- target name="junit" depends="compiletest">
+			<mkdir dir="test_output"/>
+			<junit fork="yes" printsummary="yes" haltonfailure="yes"
+				 forkmode="perBatch">
+				<classpath>
+					<fileset dir="${jdbc.dir}">
+						<include name="**/*.jar"/>
+						<include name="**/*.zip"/>
+					</fileset>
+					<path refid="lib.class.path"/>
+					<pathelement path="${classes.dir}"/>
+					<pathelement path="${src.dir}"/>
+					<pathelement path="${test.dir}"/>
+				</classpath>
+				<formatter type="plain"/>
+				<formatter type="xml"/>
+				<batchtest fork="yes" todir="test_output" haltonfailure="no">
+					<fileset dir="${classes.dir}">
+						<include name="**/*Test.class"/>
+					</fileset>
+				</batchtest>
+			</junit>
+		</target -->
+
+	<!-- Run a single unit test. -->
+	<target name="junitsingle" depends="compiletest"
+			description="Run a single test suite (requires testname and jdbc.driver properties)">
+		<mkdir dir="test_output"/>
+		<junit printsummary="yes" fork="yes" haltonfailure="yes">
+			<classpath>
+				<fileset dir="${jdbc.dir}">
+					<include name="**/*.jar"/>
+					<include name="**/*.zip"/>
+				</fileset>
+				<path refid="lib.class.path"/>
+				<pathelement path="${classes.dir}"/>
+				<pathelement path="${src.dir}"/>
+				<!-- pick up properties from here -->
+				<pathelement path="${test.dir}"/>
+				<!-- pick up mappings from here -->
+			</classpath>
+			<formatter type="plain"/>
+			<formatter type="xml"/>
+			<test fork="yes" todir="test_output" haltonfailure="no" name="${testname}"/>
+		</junit>
+	</target>
+
+	<!-- target name="report">
+			<mkdir dir="test_output"/>
+			<junitreport todir="test_output">
+			  <fileset dir="test_output">
+				<include name="TEST-*.xml"/>
+			  </fileset>
+			  <report format="frames" todir="test_output/report"/>
+			</junitreport>
+		</target -->
+
+	<target name="jar" depends="compile" description="Build the distribution .jar file">
+		<mkdir dir="${classes.dir}/META-INF"/>
+		<manifest file="${classes.dir}/META-INF/MANIFEST.MF">
+			<attribute name="Product" value="${Name}"/>
+			<attribute name="Version" value="${version}"/>
+		</manifest>
+		<antcall target="common-build.jar"/>
+	</target>
+
+	<!-- Some of this can probably be moved to common-build... -->
+	<target name="dist" depends="jar,javadoc,copysource,copytest,copylib,extras"
+			description="Build everything">
+
+		<ant inheritall="false" dir="${basedir}/doc/reference"/>
+		<copy todir="${dist.dir}/doc/reference" failonerror="false">
+			<fileset dir="${basedir}/doc/reference/build">
+				<include name="**/*.*"/>
+			</fileset>
+		</copy>
+
+		<copy todir="${dist.dir}" failonerror="false">
+			<fileset dir="${common.dir}">
+				<include name="common-build.xml"/>
+			</fileset>
+		</copy>
+
+        <!-- copy dependencies -->
+        <copy todir="${dist.lib.dir}" failonerror="false">
+			<fileset file="${jpa-api.jar}"/>
+            <fileset file="${commons-annotations.jar}"/>
+        </copy>
+        <mkdir dir="${dist.lib.dir}/test"/>
+        <copy todir="${dist.lib.dir}/test" failonerror="false">
+			<fileset file="${annotations.jar}"/>
+            <fileset file="${jpa.jar}"/>
+            <fileset file="${archive-browsing.jar}"/>
+        </copy>
+
+        <copy file="${basedir}/build.properties.dist" tofile="${dist.dir}/build.properties" failonerror="false">
+		</copy>
+		<antcall target="common-build.dist"/>
+	</target>
+
+	<target name="zip-dist" description="zip the dist">
+		<zip zipfile="${dist.dir}-${version}.zip">
+			<zipfileset prefix="${name}-${version}" dir="${dist.dir}"/>
+		</zip>
+		<tar compression="gzip" tarfile="${dist.dir}-${version}.tar.gz">
+			<tarfileset prefix="${name}-${version}" dir="${dist.dir}"/>
+		</tar>
+	</target>
+
+
+</project>

Deleted: trunk/HibernateExt/validator/changelog.txt
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/changelog.txt	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/changelog.txt	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,7 +0,0 @@
-Hibernate Validator Changelog
-=============================
-
-3.2.2.GA (xx-02-2007)
----------------------
-
-Initial release as a standalone product (see Hibernate Annotations changelog for previous informations)
\ No newline at end of file

Copied: trunk/HibernateExt/validator/changelog.txt (from rev 11279, branches/Branch_3_2/HibernateExt/validator/changelog.txt)
===================================================================
--- trunk/HibernateExt/validator/changelog.txt	                        (rev 0)
+++ trunk/HibernateExt/validator/changelog.txt	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,7 @@
+Hibernate Validator Changelog
+=============================
+
+3.2.2.GA (xx-02-2007)
+---------------------
+
+Initial release as a standalone product (see Hibernate Annotations changelog for previous informations)
\ No newline at end of file

Copied: trunk/HibernateExt/validator/doc (from rev 11279, branches/Branch_3_2/HibernateExt/validator/doc)

Copied: trunk/HibernateExt/validator/doc/api (from rev 11279, branches/Branch_3_2/HibernateExt/validator/doc/api)

Deleted: trunk/HibernateExt/validator/doc/api/package.html
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/doc/api/package.html	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/doc/api/package.html	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1 +0,0 @@
-<body></body>

Copied: trunk/HibernateExt/validator/doc/api/package.html (from rev 11279, branches/Branch_3_2/HibernateExt/validator/doc/api/package.html)
===================================================================
--- trunk/HibernateExt/validator/doc/api/package.html	                        (rev 0)
+++ trunk/HibernateExt/validator/doc/api/package.html	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1 @@
+<body></body>

Copied: trunk/HibernateExt/validator/doc/reference (from rev 11279, branches/Branch_3_2/HibernateExt/validator/doc/reference)

Deleted: trunk/HibernateExt/validator/doc/reference/build.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/doc/reference/build.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/doc/reference/build.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,17 +0,0 @@
-<project name="Documentation" default="all.doc" basedir=".">
-
-    <!-- Use the core Hibernate3 doc build system -->
-    <import file="../../../common/common-build.xml"/>
-    <import file="${hibernate-cvs.doc.reference}/build.xml"/>
-
-
-    <target name="all.doc" depends="clean">
-
-        <!-- TRANSLATOR: Duplicate this call for your language -->
-        <antcall target="lang.all">
-            <param name="docname" value="hibernate_validator"/>
-            <param name="lang" value="en"/>
-        </antcall>
-    </target>
-
-</project>

Copied: trunk/HibernateExt/validator/doc/reference/build.xml (from rev 11279, branches/Branch_3_2/HibernateExt/validator/doc/reference/build.xml)
===================================================================
--- trunk/HibernateExt/validator/doc/reference/build.xml	                        (rev 0)
+++ trunk/HibernateExt/validator/doc/reference/build.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,17 @@
+<project name="Documentation" default="all.doc" basedir=".">
+
+    <!-- Use the core Hibernate3 doc build system -->
+    <import file="../../../common/common-build.xml"/>
+    <import file="${hibernate-cvs.doc.reference}/build.xml"/>
+
+
+    <target name="all.doc" depends="clean">
+
+        <!-- TRANSLATOR: Duplicate this call for your language -->
+        <antcall target="lang.all">
+            <param name="docname" value="hibernate_validator"/>
+            <param name="lang" value="en"/>
+        </antcall>
+    </target>
+
+</project>

Copied: trunk/HibernateExt/validator/doc/reference/en (from rev 11279, branches/Branch_3_2/HibernateExt/validator/doc/reference/en)

Copied: trunk/HibernateExt/validator/doc/reference/en/images (from rev 11279, branches/Branch_3_2/HibernateExt/validator/doc/reference/en/images)

Deleted: trunk/HibernateExt/validator/doc/reference/en/images/hibernate_logo_a.png
===================================================================
(Binary files differ)

Copied: trunk/HibernateExt/validator/doc/reference/en/images/hibernate_logo_a.png (from rev 11279, branches/Branch_3_2/HibernateExt/validator/doc/reference/en/images/hibernate_logo_a.png)
===================================================================
(Binary files differ)

Deleted: trunk/HibernateExt/validator/doc/reference/en/master.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/doc/reference/en/master.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/doc/reference/en/master.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,65 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3CR3//EN"
-"../../../../../Hibernate3/doc/reference/support/docbook-dtd/docbookx.dtd" [
-<!ENTITY defineconstraints SYSTEM "modules/defineconstraints.xml">
-<!ENTITY checkconstraints SYSTEM "modules/checkconstraints.xml">
-]>
-<book lang="en">
-  <bookinfo>
-    <title>Hibernate Validator</title>
-
-    <subtitle>Reference Guide</subtitle>
-
-    <releaseinfo>3.2.2.GA</releaseinfo>
-
-    <mediaobject>
-      <imageobject>
-        <imagedata fileref="images/hibernate_logo_a.png" format="png" />
-      </imageobject>
-    </mediaobject>
-  </bookinfo>
-
-  <toc></toc>
-
-  <preface id="preface" revision="2">
-    <title>Preface</title>
-
-    <para>Annotations are a very convenient and elegant way to specify
-    invariant constraints for a domain model. You can, for example, express
-    that a property should never be null, that the account balance should be
-    strictly positive, etc. These domain model constraints are declared in the
-    bean itself by annotating its properties. A validator can then read them
-    and check for constraint violations. The validation mechanism can be
-    executed in different layers in your application without having to
-    duplicate any of these rules (presentation layer, data access layer).
-    Following the DRY principle, Hibernate Validator has been designed for
-    that purpose.</para>
-
-    <para>Hibernate Validator works at two levels. First, it is able to check
-    in-memory instances of a class for constraint violations. Second, it can
-    apply the constraints to the Hibernate metamodel and incorporate them into
-    the generated database schema.</para>
-
-    <para>Each constraint annotation is associated to a validator
-    implementation responsible for checking the constraint on the entity
-    instance. A validator can also (optionally) apply the constraint to the
-    Hibernate metamodel, allowing Hibernate to generate DDL that expresses the
-    constraint. With the appropriate event listener, you can execute the
-    checking operation on inserts and updates done by Hibernate. Hibernate
-    Validator is not limited to use with Hibernate. You can easily use it
-    anywhere in your application as well as with any Java Persistence provider
-    (entity listener provided).</para>
-
-    <para>When checking instances at runtime, Hibernate Validator returns
-    information about constraint violations in an array of
-    <classname>InvalidValue</classname> s. Among other information, the
-    <classname>InvalidValue</classname> contains an error description message
-    that can embed the parameter values bundle with the annotation (eg. length
-    limit), and message strings that may be externalized to a
-    <classname>ResourceBundle</classname> .</para>
-  </preface>
-
-  &defineconstraints;
-
-  &checkconstraints;
-</book>
\ No newline at end of file

Copied: trunk/HibernateExt/validator/doc/reference/en/master.xml (from rev 11279, branches/Branch_3_2/HibernateExt/validator/doc/reference/en/master.xml)
===================================================================
--- trunk/HibernateExt/validator/doc/reference/en/master.xml	                        (rev 0)
+++ trunk/HibernateExt/validator/doc/reference/en/master.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3CR3//EN"
+"../../../../../Hibernate3/doc/reference/support/docbook-dtd/docbookx.dtd" [
+<!ENTITY defineconstraints SYSTEM "modules/defineconstraints.xml">
+<!ENTITY checkconstraints SYSTEM "modules/checkconstraints.xml">
+]>
+<book lang="en">
+  <bookinfo>
+    <title>Hibernate Validator</title>
+
+    <subtitle>Reference Guide</subtitle>
+
+    <releaseinfo>3.2.2.GA</releaseinfo>
+
+    <mediaobject>
+      <imageobject>
+        <imagedata fileref="images/hibernate_logo_a.png" format="png" />
+      </imageobject>
+    </mediaobject>
+  </bookinfo>
+
+  <toc></toc>
+
+  <preface id="preface" revision="2">
+    <title>Preface</title>
+
+    <para>Annotations are a very convenient and elegant way to specify
+    invariant constraints for a domain model. You can, for example, express
+    that a property should never be null, that the account balance should be
+    strictly positive, etc. These domain model constraints are declared in the
+    bean itself by annotating its properties. A validator can then read them
+    and check for constraint violations. The validation mechanism can be
+    executed in different layers in your application without having to
+    duplicate any of these rules (presentation layer, data access layer).
+    Following the DRY principle, Hibernate Validator has been designed for
+    that purpose.</para>
+
+    <para>Hibernate Validator works at two levels. First, it is able to check
+    in-memory instances of a class for constraint violations. Second, it can
+    apply the constraints to the Hibernate metamodel and incorporate them into
+    the generated database schema.</para>
+
+    <para>Each constraint annotation is associated to a validator
+    implementation responsible for checking the constraint on the entity
+    instance. A validator can also (optionally) apply the constraint to the
+    Hibernate metamodel, allowing Hibernate to generate DDL that expresses the
+    constraint. With the appropriate event listener, you can execute the
+    checking operation on inserts and updates done by Hibernate. Hibernate
+    Validator is not limited to use with Hibernate. You can easily use it
+    anywhere in your application as well as with any Java Persistence provider
+    (entity listener provided).</para>
+
+    <para>When checking instances at runtime, Hibernate Validator returns
+    information about constraint violations in an array of
+    <classname>InvalidValue</classname> s. Among other information, the
+    <classname>InvalidValue</classname> contains an error description message
+    that can embed the parameter values bundle with the annotation (eg. length
+    limit), and message strings that may be externalized to a
+    <classname>ResourceBundle</classname> .</para>
+  </preface>
+
+  &defineconstraints;
+
+  &checkconstraints;
+</book>
\ No newline at end of file

Copied: trunk/HibernateExt/validator/doc/reference/en/modules (from rev 11279, branches/Branch_3_2/HibernateExt/validator/doc/reference/en/modules)

Deleted: trunk/HibernateExt/validator/doc/reference/en/modules/checkconstraints.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/doc/reference/en/modules/checkconstraints.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/doc/reference/en/modules/checkconstraints.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,209 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<chapter id="validator-checkconstraints">
-  <title>Using the Validator framework</title>
-
-  <para>Hibernate Validator is intended to be used to implement multi-layered
-  data validation, where constraints are expressed in a single place (the
-  annotated domain model) and checked in various different layers of the
-  application.</para>
-
-  <para>This chapter will cover Hibernate Validator usage for different
-  layers</para>
-
-  <section id="validator-checkconstraints-db" revision="2">
-    <title>Database schema-level validation</title>
-
-    <para>Out of the box, Hibernate Annotations will translate the constraints
-    you have defined for your entities into mapping metadata. For example, if
-    a property of your entity is annotated <literal>@NotNull</literal>, its
-    columns will be declared as <literal>not null</literal> in the DDL schema
-    generated by Hibernate.</para>
-
-    <para>Using hbm2ddl, domain model constraints will be expressed into the
-    database schema.</para>
-
-    <para>If, for some reason, the feature needs to be disabled, set
-    <literal>hibernate.validator.apply_to_ddl</literal> to
-    <literal>false</literal>.</para>
-  </section>
-
-  <section id="validator-checkconstraints-orm">
-    <title>ORM integration</title>
-
-    <para>Hibernate Validator integrates with both Hibernate and all pure Java
-    Persistence providers</para>
-
-    <section id="validator-checkconstraints-orm-hibernateevent" revision="1">
-      <title>Hibernate event-based validation</title>
-
-      <para>Hibernate Validator has two built-in Hibernate event listeners.
-      Whenever a <literal>PreInsertEvent</literal> or
-      <literal>PreUpdateEvent</literal> occurs, the listeners will verify all
-      constraints of the entity instance and throw an exception if any
-      constraint is violated. Basically, objects will be checked before any
-      inserts and before any updates made by Hibernate. This includes changes
-      applied by cascade! This is the most convenient and the easiest way to
-      activate the validation process. On constraint violation, the event will
-      raise a runtime <classname>InvalidStateException</classname> which
-      contains an array of <literal>InvalidValue</literal>s describing each
-      failure.</para>
-
-      <para>If Hibernate Validator is present in the classpath, Hibernate
-      Annotations (or Hibernate EntityManager) will use it transparently. If,
-      for some reason, you want to disable this integration, set
-      <literal>hibernate.validator.autoregister_listeners</literal> to
-      false</para>
-
-      <para><note>
-          <para>If the beans are not annotated with validation annotations,
-          there is no runtime performance cost.</para>
-        </note></para>
-
-      <para>In case you need to manually set the event listeners for Hibernate
-      Core, use the following configuration in
-      <literal>hibernate.cfg.xml</literal>:</para>
-
-      <programlisting>&lt;hibernate-configuration&gt;
-    ...
-    &lt;event type="pre-update"&gt;
-        &lt;listener 
-          class="org.hibernate.validator.event.ValidateEventListener"/&gt;
-    &lt;/event&gt;
-    &lt;event type="pre-insert"&gt;
-        &lt;listener 
-          class="org.hibernate.validator.event.ValidateEventListener"/&gt;
-    &lt;/event&gt;
-&lt;/hibernate-configuration&gt;</programlisting>
-    </section>
-
-    <section id="validator-checkconstraints-orm-jpaevent">
-      <title>Java Persistence event-based validation</title>
-
-      <para>Hibernate Validator is not tied to Hibernate for event based
-      validation: a Java Persistence entity listener is available. Whenever an
-      listened entity is persisted or updated, Hibernate Validator will verify
-      all constraints of the entity instance and throw an exception if any
-      constraint is violated. Basically, objects will be checked before any
-      inserts and before any updates made by the Java Persistence provider.
-      This includes changes applied by cascade! On constraint violation, the
-      event will raise a runtime <classname>InvalidStateException</classname>
-      which contains an array of <literal>InvalidValue</literal>s describing
-      each failure.</para>
-
-      <para>Here is how to make a class validatable:</para>
-
-      <programlisting>@Entity
- at EntityListeners( JPAValidateListener.class )
-public class Submarine {
-    ...
-}</programlisting>
-
-      <para><note>
-          <para>Compared to the Hibernate event, the Java Persistence listener
-          has two drawbacks. You need to define the entity listener on every
-          validatable entity. The DDL generated by your provider will not
-          reflect the constraints.</para>
-        </note></para>
-    </section>
-  </section>
-
-  <section>
-    <title>Application-level validation</title>
-
-    <para>Hibernate Validator can be applied anywhere in your application
-    code.</para>
-
-    <programlisting>ClassValidator personValidator = new ClassValidator( Person.class );
-ClassValidator addressValidator = new ClassValidator( Address.class, ResourceBundle.getBundle("messages", Locale.ENGLISH) );
-
-InvalidValue[] validationMessages = addressValidator.getInvalidValues(address);</programlisting>
-
-    <para>The first two lines prepare the Hibernate Validator for class
-    checking. The first one relies upon the error messages embedded in
-    Hibernate Validator (see <xref
-    linkend="validator-defineconstraints-error" />), the second one uses a
-    resource bundle for these messages. It is considered a good practice to
-    execute these lines once and cache the validator instances.</para>
-
-    <para>The third line actually validates the <literal>Address</literal>
-    instance and returns an array of <literal>InvalidValue</literal>s. Your
-    application logic will then be able to react to the failure.</para>
-
-    <para>You can also check a particular property instead of the whole bean.
-    This might be useful for property per property user interaction</para>
-
-    <programlisting>ClassValidator addressValidator = new ClassValidator( Address.class, ResourceBundle.getBundle("messages", Locale.ENGLISH) );
-
-//only get city property invalid values
-InvalidValue[] validationMessages = addressValidator.getInvalidValues(address, "city");
-
-//only get potential city property invalid values
-InvalidValue[] validationMessages = addressValidator.getPotentialInvalidValues("city", "Paris")</programlisting>
-  </section>
-
-  <section>
-    <title>Presentation layer validation</title>
-
-    <para>When working with JSF and <productname>JBoss Seam</productname>, one
-    can triggers the validation process at the presentation layer using Seam's
-    JSF tags <literal>&lt;s:validate&gt;</literal> and
-    <literal>&lt;s:validateAll/&gt;</literal>, letting the constraints be
-    expressed on the model, and the violations presented in the view</para>
-
-    <programlisting>&lt;h:form&gt;
-    &lt;div&gt;
-        &lt;h:messages/&gt;
-    &lt;/div&gt;
-    <emphasis role="bold">&lt;s:validateAll&gt;</emphasis>
-        &lt;div&gt;
-            Country:
-            &lt;h:inputText value="#{location.country}" required="true"/&gt;
-        &lt;/div&gt;
-        &lt;div&gt;
-            Zip code:
-            &lt;h:inputText value="#{location.zip}" required="true"/&gt;
-        &lt;/div&gt;
-        &lt;div&gt;
-            &lt;h:commandButton/&gt;
-        &lt;/div&gt;
-    <emphasis role="bold">&lt;/s:validateAll&gt;</emphasis>
-&lt;/h:form&gt;</programlisting>
-
-    <para>Going even further, and adding <productname>Ajax4JSF</productname>
-    to the loop will bring client side validation with just a couple of
-    additional JSF tags, again without validation definition
-    duplication.</para>
-
-    <para>Check the <ulink url="http://www.jboss.com/products/seam">JBoss
-    Seam</ulink> documentation for more information.</para>
-  </section>
-
-  <section>
-    <title>Validation informations</title>
-
-    <para>As a validation information carrier, hibernate provide an array of
-    <classname>InvalidValue</classname>. Each <literal>InvalidValue</literal>
-    has a buch of methods describing the individual issues.</para>
-
-    <para><methodname>getBeanClass()</methodname> retrieves the failing bean
-    type</para>
-
-    <para><methodname>getBean()</methodname>retrieves the failing instance (if
-    any ie not when using
-    <methodname>getPotentianInvalidValues()</methodname>)</para>
-
-    <para><methodname>getValue()</methodname> retrieves the failing
-    value</para>
-
-    <para><methodname>getMessage()</methodname> retrieves the proper
-    internationalized error message</para>
-
-    <para><methodname>getRootBean()</methodname> retrieves the root bean
-    instance generating the issue (useful in conjunction with
-    <literal>@Valid</literal>), is null if getPotentianInvalidValues() is
-    used.</para>
-
-    <para><literal>getPropertyPath()</literal> retrieves the dotted path of
-    the failing property starting from the root bean</para>
-  </section>
-</chapter>
\ No newline at end of file

Copied: trunk/HibernateExt/validator/doc/reference/en/modules/checkconstraints.xml (from rev 11279, branches/Branch_3_2/HibernateExt/validator/doc/reference/en/modules/checkconstraints.xml)
===================================================================
--- trunk/HibernateExt/validator/doc/reference/en/modules/checkconstraints.xml	                        (rev 0)
+++ trunk/HibernateExt/validator/doc/reference/en/modules/checkconstraints.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,209 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<chapter id="validator-checkconstraints">
+  <title>Using the Validator framework</title>
+
+  <para>Hibernate Validator is intended to be used to implement multi-layered
+  data validation, where constraints are expressed in a single place (the
+  annotated domain model) and checked in various different layers of the
+  application.</para>
+
+  <para>This chapter will cover Hibernate Validator usage for different
+  layers</para>
+
+  <section id="validator-checkconstraints-db" revision="2">
+    <title>Database schema-level validation</title>
+
+    <para>Out of the box, Hibernate Annotations will translate the constraints
+    you have defined for your entities into mapping metadata. For example, if
+    a property of your entity is annotated <literal>@NotNull</literal>, its
+    columns will be declared as <literal>not null</literal> in the DDL schema
+    generated by Hibernate.</para>
+
+    <para>Using hbm2ddl, domain model constraints will be expressed into the
+    database schema.</para>
+
+    <para>If, for some reason, the feature needs to be disabled, set
+    <literal>hibernate.validator.apply_to_ddl</literal> to
+    <literal>false</literal>.</para>
+  </section>
+
+  <section id="validator-checkconstraints-orm">
+    <title>ORM integration</title>
+
+    <para>Hibernate Validator integrates with both Hibernate and all pure Java
+    Persistence providers</para>
+
+    <section id="validator-checkconstraints-orm-hibernateevent" revision="1">
+      <title>Hibernate event-based validation</title>
+
+      <para>Hibernate Validator has two built-in Hibernate event listeners.
+      Whenever a <literal>PreInsertEvent</literal> or
+      <literal>PreUpdateEvent</literal> occurs, the listeners will verify all
+      constraints of the entity instance and throw an exception if any
+      constraint is violated. Basically, objects will be checked before any
+      inserts and before any updates made by Hibernate. This includes changes
+      applied by cascade! This is the most convenient and the easiest way to
+      activate the validation process. On constraint violation, the event will
+      raise a runtime <classname>InvalidStateException</classname> which
+      contains an array of <literal>InvalidValue</literal>s describing each
+      failure.</para>
+
+      <para>If Hibernate Validator is present in the classpath, Hibernate
+      Annotations (or Hibernate EntityManager) will use it transparently. If,
+      for some reason, you want to disable this integration, set
+      <literal>hibernate.validator.autoregister_listeners</literal> to
+      false</para>
+
+      <para><note>
+          <para>If the beans are not annotated with validation annotations,
+          there is no runtime performance cost.</para>
+        </note></para>
+
+      <para>In case you need to manually set the event listeners for Hibernate
+      Core, use the following configuration in
+      <literal>hibernate.cfg.xml</literal>:</para>
+
+      <programlisting>&lt;hibernate-configuration&gt;
+    ...
+    &lt;event type="pre-update"&gt;
+        &lt;listener 
+          class="org.hibernate.validator.event.ValidateEventListener"/&gt;
+    &lt;/event&gt;
+    &lt;event type="pre-insert"&gt;
+        &lt;listener 
+          class="org.hibernate.validator.event.ValidateEventListener"/&gt;
+    &lt;/event&gt;
+&lt;/hibernate-configuration&gt;</programlisting>
+    </section>
+
+    <section id="validator-checkconstraints-orm-jpaevent">
+      <title>Java Persistence event-based validation</title>
+
+      <para>Hibernate Validator is not tied to Hibernate for event based
+      validation: a Java Persistence entity listener is available. Whenever an
+      listened entity is persisted or updated, Hibernate Validator will verify
+      all constraints of the entity instance and throw an exception if any
+      constraint is violated. Basically, objects will be checked before any
+      inserts and before any updates made by the Java Persistence provider.
+      This includes changes applied by cascade! On constraint violation, the
+      event will raise a runtime <classname>InvalidStateException</classname>
+      which contains an array of <literal>InvalidValue</literal>s describing
+      each failure.</para>
+
+      <para>Here is how to make a class validatable:</para>
+
+      <programlisting>@Entity
+ at EntityListeners( JPAValidateListener.class )
+public class Submarine {
+    ...
+}</programlisting>
+
+      <para><note>
+          <para>Compared to the Hibernate event, the Java Persistence listener
+          has two drawbacks. You need to define the entity listener on every
+          validatable entity. The DDL generated by your provider will not
+          reflect the constraints.</para>
+        </note></para>
+    </section>
+  </section>
+
+  <section>
+    <title>Application-level validation</title>
+
+    <para>Hibernate Validator can be applied anywhere in your application
+    code.</para>
+
+    <programlisting>ClassValidator personValidator = new ClassValidator( Person.class );
+ClassValidator addressValidator = new ClassValidator( Address.class, ResourceBundle.getBundle("messages", Locale.ENGLISH) );
+
+InvalidValue[] validationMessages = addressValidator.getInvalidValues(address);</programlisting>
+
+    <para>The first two lines prepare the Hibernate Validator for class
+    checking. The first one relies upon the error messages embedded in
+    Hibernate Validator (see <xref
+    linkend="validator-defineconstraints-error" />), the second one uses a
+    resource bundle for these messages. It is considered a good practice to
+    execute these lines once and cache the validator instances.</para>
+
+    <para>The third line actually validates the <literal>Address</literal>
+    instance and returns an array of <literal>InvalidValue</literal>s. Your
+    application logic will then be able to react to the failure.</para>
+
+    <para>You can also check a particular property instead of the whole bean.
+    This might be useful for property per property user interaction</para>
+
+    <programlisting>ClassValidator addressValidator = new ClassValidator( Address.class, ResourceBundle.getBundle("messages", Locale.ENGLISH) );
+
+//only get city property invalid values
+InvalidValue[] validationMessages = addressValidator.getInvalidValues(address, "city");
+
+//only get potential city property invalid values
+InvalidValue[] validationMessages = addressValidator.getPotentialInvalidValues("city", "Paris")</programlisting>
+  </section>
+
+  <section>
+    <title>Presentation layer validation</title>
+
+    <para>When working with JSF and <productname>JBoss Seam</productname>, one
+    can triggers the validation process at the presentation layer using Seam's
+    JSF tags <literal>&lt;s:validate&gt;</literal> and
+    <literal>&lt;s:validateAll/&gt;</literal>, letting the constraints be
+    expressed on the model, and the violations presented in the view</para>
+
+    <programlisting>&lt;h:form&gt;
+    &lt;div&gt;
+        &lt;h:messages/&gt;
+    &lt;/div&gt;
+    <emphasis role="bold">&lt;s:validateAll&gt;</emphasis>
+        &lt;div&gt;
+            Country:
+            &lt;h:inputText value="#{location.country}" required="true"/&gt;
+        &lt;/div&gt;
+        &lt;div&gt;
+            Zip code:
+            &lt;h:inputText value="#{location.zip}" required="true"/&gt;
+        &lt;/div&gt;
+        &lt;div&gt;
+            &lt;h:commandButton/&gt;
+        &lt;/div&gt;
+    <emphasis role="bold">&lt;/s:validateAll&gt;</emphasis>
+&lt;/h:form&gt;</programlisting>
+
+    <para>Going even further, and adding <productname>Ajax4JSF</productname>
+    to the loop will bring client side validation with just a couple of
+    additional JSF tags, again without validation definition
+    duplication.</para>
+
+    <para>Check the <ulink url="http://www.jboss.com/products/seam">JBoss
+    Seam</ulink> documentation for more information.</para>
+  </section>
+
+  <section>
+    <title>Validation informations</title>
+
+    <para>As a validation information carrier, hibernate provide an array of
+    <classname>InvalidValue</classname>. Each <literal>InvalidValue</literal>
+    has a buch of methods describing the individual issues.</para>
+
+    <para><methodname>getBeanClass()</methodname> retrieves the failing bean
+    type</para>
+
+    <para><methodname>getBean()</methodname>retrieves the failing instance (if
+    any ie not when using
+    <methodname>getPotentianInvalidValues()</methodname>)</para>
+
+    <para><methodname>getValue()</methodname> retrieves the failing
+    value</para>
+
+    <para><methodname>getMessage()</methodname> retrieves the proper
+    internationalized error message</para>
+
+    <para><methodname>getRootBean()</methodname> retrieves the root bean
+    instance generating the issue (useful in conjunction with
+    <literal>@Valid</literal>), is null if getPotentianInvalidValues() is
+    used.</para>
+
+    <para><literal>getPropertyPath()</literal> retrieves the dotted path of
+    the failing property starting from the root bean</para>
+  </section>
+</chapter>
\ No newline at end of file

Deleted: trunk/HibernateExt/validator/doc/reference/en/modules/defineconstraints.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/doc/reference/en/modules/defineconstraints.xml	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/doc/reference/en/modules/defineconstraints.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,481 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<chapter id="validator-defineconstraints">
-  <title>Defining constraints</title>
-
-  <section id="validator-defineconstraints-definition" revision="1">
-    <title>What is a constraint?</title>
-
-    <para>A constraint is a rule that a given element (field, property or
-    bean) has to comply to. The rule semantic is expressed by an annotation. A
-    constraint usually has some attributes used to parameterize the
-    constraints limits. The constraint applies to the annotated
-    element.</para>
-  </section>
-
-  <section id="validator-defineconstraints-builtin" revision="2">
-    <title>Built in constraints</title>
-
-    <para>Hibernate Validator comes with some built-in constraints, which
-    covers most basic data checks. As we'll see later, you're not limited to
-    them, you can literally in a minute write your own constraints.</para>
-
-    <table>
-      <title>Built-in constraints</title>
-
-      <tgroup cols="4">
-        <colspec align="center" />
-
-        <thead>
-          <row>
-            <entry>Annotation</entry>
-
-            <entry>Apply on</entry>
-
-            <entry>Runtime checking</entry>
-
-            <entry>Hibernate Metadata impact</entry>
-          </row>
-        </thead>
-
-        <tbody>
-          <row>
-            <entry>@Length(min=, max=)</entry>
-
-            <entry>property (String)</entry>
-
-            <entry>check if the string length match the range</entry>
-
-            <entry>Column length will be set to max</entry>
-          </row>
-
-          <row>
-            <entry>@Max(value=)</entry>
-
-            <entry>property (numeric or string representation of a
-            numeric)</entry>
-
-            <entry>check if the value is less than or equals to max</entry>
-
-            <entry>Add a check constraint on the column</entry>
-          </row>
-
-          <row>
-            <entry>@Min(value=)</entry>
-
-            <entry>property (numeric or string representation of a
-            numeric)</entry>
-
-            <entry>check if the value is more than or equals to min</entry>
-
-            <entry>Add a check constraint on the column</entry>
-          </row>
-
-          <row>
-            <entry>@NotNull</entry>
-
-            <entry>property</entry>
-
-            <entry>check if the value is not null</entry>
-
-            <entry>Column(s) are not null</entry>
-          </row>
-
-          <row>
-            <entry>@NotEmpty</entry>
-
-            <entry>property</entry>
-
-            <entry>check if the string is not null nor empty. Check if the
-            connection is not null nor empty</entry>
-
-            <entry>Column(s) are not null (for String)</entry>
-          </row>
-
-          <row>
-            <entry>@Past</entry>
-
-            <entry>property (date or calendar)</entry>
-
-            <entry>check if the date is in the past</entry>
-
-            <entry>Add a check constraint on the column</entry>
-          </row>
-
-          <row>
-            <entry>@Future</entry>
-
-            <entry>property (date or calendar)</entry>
-
-            <entry>check if the date is in the future</entry>
-
-            <entry>none</entry>
-          </row>
-
-          <row>
-            <entry>@Pattern(regex="regexp", flag=) or @Patterns(
-            {@Pattern(...)} )</entry>
-
-            <entry>property (string)</entry>
-
-            <entry>check if the property match the regular expression given a
-            match flag (see <classname>java.util.regex.Pattern </classname>
-            )</entry>
-
-            <entry>none</entry>
-          </row>
-
-          <row>
-            <entry>@Range(min=, max=)</entry>
-
-            <entry>property (numeric or string representation of a
-            numeric)</entry>
-
-            <entry>check if the value is between min and max
-            (included)</entry>
-
-            <entry>Add a check constraint on the column</entry>
-          </row>
-
-          <row>
-            <entry>@Size(min=, max=)</entry>
-
-            <entry>property (array, collection, map)</entry>
-
-            <entry>check if the element size is between min and max
-            (included)</entry>
-
-            <entry>none</entry>
-          </row>
-
-          <row>
-            <entry>@AssertFalse</entry>
-
-            <entry>property</entry>
-
-            <entry>check that the method evaluates to false (useful for
-            constraints expressed in code rather than annotations)</entry>
-
-            <entry>none</entry>
-          </row>
-
-          <row>
-            <entry>@AssertTrue</entry>
-
-            <entry>property</entry>
-
-            <entry>check that the method evaluates to true (useful for
-            constraints expressed in code rather than annotations)</entry>
-
-            <entry>none</entry>
-          </row>
-
-          <row>
-            <entry>@Valid</entry>
-
-            <entry>property (object)</entry>
-
-            <entry>perform validation recursively on the associated object. If
-            the object is a Collection or an array, the elements are validated
-            recursively. If the object is a Map, the value elements are
-            validated recursively.</entry>
-
-            <entry>none</entry>
-          </row>
-
-          <row>
-            <entry>@Email</entry>
-
-            <entry>property (String)</entry>
-
-            <entry>check whether the string is conform to the email address
-            specification</entry>
-
-            <entry>none</entry>
-          </row>
-
-          <row>
-            <entry>@CreditCardNumber</entry>
-
-            <entry>property (String)</entry>
-
-            <entry>check whether the string is a well formated credit card
-            number (derivative of the Luhn algorithm)</entry>
-
-            <entry>none</entry>
-          </row>
-
-          <row>
-            <entry>@Digits</entry>
-
-            <entry>property (numeric or string representation of a
-            numeric)</entry>
-
-            <entry>check whether the property is a number having up to
-            <literal>integerDigits</literal> integer digits and
-            <literal>fractionalDigits</literal> fractonal digits</entry>
-
-            <entry>define column precision and scale</entry>
-          </row>
-
-          <row>
-            <entry>@EAN</entry>
-
-            <entry>property (string)</entry>
-
-            <entry>check whether the string is a properly formated EAN or
-            UPC-A code</entry>
-
-            <entry>none</entry>
-          </row>
-
-          <row>
-            <entry>@Digits</entry>
-
-            <entry>property (numeric or string representation of a
-            numeric)</entry>
-
-            <entry>check whether the property is a number having up to
-            <literal>integerDigits</literal> integer digits and
-            <literal>fractionalDigits</literal> fractonal digits</entry>
-
-            <entry>define column precision and scale</entry>
-          </row>
-        </tbody>
-      </tgroup>
-    </table>
-  </section>
-
-  <section id="validator-defineconstraints-error" xreflabel="Error messages">
-    <title>Error messages</title>
-
-    <para>Hibernate Validator comes with a default set of error messages
-    translated in about ten languages (if yours is not part of it, please sent
-    us a patch). You can override those messages by creating a
-    <filename>ValidatorMessages.properties</filename> or (
-    <filename>ValidatorMessages_loc.properties</filename> ) and override the
-    needed keys. You can even add your own additional set of messages while
-    writing your validator annotations. If Hibernate Validator cannot resolve
-    a key from your resourceBundle nor from ValidatorMessage, it falls back to
-    the default built-in values.</para>
-
-    <para>Alternatively you can provide a
-    <classname>ResourceBundle</classname> while checking programmatically the
-    validation rules on a bean or if you want a completly different
-    interpolation mechanism, you can provide an implementation of
-    <literal>org.hibernate.validator.MessageInterpolator</literal> (check the
-    JavaDoc for more informations).</para>
-  </section>
-
-  <section id="validator-defineconstraints-own" revision="1">
-    <title>Writing your own constraints</title>
-
-    <para>Extending the set of built-in constraints is extremely easy. Any
-    constraint consists of two pieces: the constraint
-    <emphasis>descriptor</emphasis> (the annotation) and the constraint
-    <emphasis>validator</emphasis> (the implementation class). Here is a
-    simple user-defined descriptor:</para>
-
-    <programlisting>@ValidatorClass(CapitalizedValidator.class)
- at Target(METHOD)
- at Retention(RUNTIME)
- at Documented
-public @interface Capitalized {
-    CapitalizeType type() default Capitalize.FIRST;
-    String message() default "has incorrect capitalization"
-}        </programlisting>
-
-    <para><literal>type</literal> is a parameter describing how the property
-    should to be capitalized. This is a user parameter fully dependant on the
-    annotation business.</para>
-
-    <para><literal>message</literal> is the default string used to describe
-    the constraint violation and is mandatory. You can hard code the string or
-    you can externalize part/all of it through the Java ResourceBundle
-    mechanism. Parameters values are going to be injected inside the message
-    when the <literal>{parameter}</literal> string is found (in our example
-    <literal>Capitalization is not {type}</literal> would generate
-    <literal>Capitalization is not FIRST</literal> ), externalizing the whole
-    string in <filename>ValidatorMessages.properties</filename> is considered
-    good practice. See <xref linkend="validator-defineconstraints-error" />
-    .</para>
-
-    <programlisting>@ValidatorClass(CapitalizedValidator.class)
- at Target(METHOD)
- at Retention(RUNTIME)
- at Documented
-public @interface Capitalized {
-    CapitalizeType type() default Capitalize.FIRST;
-    String message() default "{validator.capitalized}";
-}
-
-
-#in ValidatorMessages.properties
-validator.capitalized = <literal>Capitalization is not {type}</literal>
-        </programlisting>
-
-    <para>As you can see the {} notation is recursive.</para>
-
-    <para>To link a descriptor to its validator implementation, we use the
-    <literal>@ValidatorClass</literal> meta-annotation. The validator class
-    parameter must name a class which implements
-    <literal>Validator&lt;ConstraintAnnotation&gt;</literal> .</para>
-
-    <para>We now have to implement the validator (ie. the rule checking
-    implementation). A validation implementation can check the value of the a
-    property (by implementing <literal>PropertyConstraint</literal> ) and/or
-    can modify the hibernate mapping metadata to express the constraint at the
-    database level (by implementing
-    <literal>PersistentClassConstraint</literal> )</para>
-
-    <programlisting>public class CapitalizedValidator
-        implements Validator&lt;Capitalized&gt;, PropertyConstraint {
-    private CapitalizeType type;
-
-    //part of the Validator&lt;Annotation&gt; contract,
-    //allows to get and use the annotation values
-    public void initialize(Capitalized parameters) {
-        type = parameters.type();
-    }
-
-    //part of the property constraint contract
-    public boolean isValid(Object value) {
-        if (value==null) return true;
-        if ( !(value instanceof String) ) return false;
-        String string = (String) value;
-        if (type == CapitalizeType.ALL) {
-            return string.equals( string.toUpperCase() );
-        }
-        else {
-            String first = string.substring(0,1);
-            return first.equals( first.toUpperCase();
-        }
-    }
-}        </programlisting>
-
-    <para>The <literal>isValid()</literal> method should return false if the
-    constraint has been violated. For more examples, refer to the built-in
-    validator implementations.</para>
-
-    <para>We only have seen property level validation, but you can write a
-    Bean level validation annotation. Instead of receiving the return instance
-    of a property, the bean itself will be passed to the validator. To
-    activate the validation checking, just annotated the bean itself instead.
-    A small sample can be found in the unit test suite.</para>
-
-    <para>If your constraint can be applied multiple times (with different
-    parameters) on the same property or type, you can use the following
-    annotation form:</para>
-
-    <programlisting>@Target(METHOD)
- at Retention(RUNTIME)
- at Documented
-<emphasis role="bold">public @interface Patterns {</emphasis>
-    Pattern[] value();
-}
-
- at Target(METHOD)
- at Retention(RUNTIME)
- at Documented
- at ValidatorClass(PatternValidator.class)
-public @interface Pattern {
-    String regexp();
-}</programlisting>
-
-    <para>Basically an annotation containing the value attribute as an array
-    of validator annotations.</para>
-  </section>
-
-  <section>
-    <title>Annotating your domain model</title>
-
-    <para>Since you are already familiar with annotations now, the syntax
-    should be very familiar</para>
-
-    <programlisting>public class Address {
-    private String line1;
-    private String line2;
-    private String zip;
-    private String state;
-    private String country;
-    private long id;
-
-    // a not null string of 20 characters maximum
-    @Length(max=20)
-    @NotNull
-    public String getCountry() {
-        return country;
-    }
-
-    // a non null string
-    @NotNull
-    public String getLine1() {
-        return line1;
-    }
-
-    //no constraint
-    public String getLine2() {
-        return line2;
-    }
-
-    // a not null string of 3 characters maximum
-    @Length(max=3) @NotNull
-    public String getState() {
-        return state;
-    }
-
-    // a not null numeric string of 5 characters maximum
-    // if the string is longer, the message will
-    //be searched in the resource bundle at key 'long'
-    @Length(max=5, message="{long}")
-    @Pattern(regex="[0-9]+")
-    @NotNull
-    public String getZip() {
-        return zip;
-    }
-
-    // should always be true
-    @AssertTrue
-    public boolean isValid() {
-        return true;
-    }
-
-    // a numeric between 1 and 2000
-    @Id @Min(1)
-    @Range(max=2000)
-    public long getId() {
-        return id;
-    }
-}        </programlisting>
-
-    <para>While the example only shows public property validation, you can
-    also annotate fields of any kind of visibility</para>
-
-    <programlisting>@MyBeanConstraint(max=45
-public class Dog {
-    @AssertTrue private boolean isMale;
-    @NotNull protected String getName() { ... };
-    ...
-}        </programlisting>
-
-    <para>You can also annotate interfaces. Hibernate Validator will check all
-    superclasses and interfaces extended or implemented by a given bean to
-    read the appropriate validator annotations.</para>
-
-    <programlisting>public interface Named {
-    @NotNull String getName();
-    ...
-}
-
-public class Dog implements Named {
-
-    @AssertTrue private boolean isMale;
-
-    public String getName() { ... };
-
-}
-        </programlisting>
-
-    <para>The name property will be checked for nullity when the Dog bean is
-    validated.</para>
-  </section>
-</chapter>
\ No newline at end of file

Copied: trunk/HibernateExt/validator/doc/reference/en/modules/defineconstraints.xml (from rev 11279, branches/Branch_3_2/HibernateExt/validator/doc/reference/en/modules/defineconstraints.xml)
===================================================================
--- trunk/HibernateExt/validator/doc/reference/en/modules/defineconstraints.xml	                        (rev 0)
+++ trunk/HibernateExt/validator/doc/reference/en/modules/defineconstraints.xml	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,481 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<chapter id="validator-defineconstraints">
+  <title>Defining constraints</title>
+
+  <section id="validator-defineconstraints-definition" revision="1">
+    <title>What is a constraint?</title>
+
+    <para>A constraint is a rule that a given element (field, property or
+    bean) has to comply to. The rule semantic is expressed by an annotation. A
+    constraint usually has some attributes used to parameterize the
+    constraints limits. The constraint applies to the annotated
+    element.</para>
+  </section>
+
+  <section id="validator-defineconstraints-builtin" revision="2">
+    <title>Built in constraints</title>
+
+    <para>Hibernate Validator comes with some built-in constraints, which
+    covers most basic data checks. As we'll see later, you're not limited to
+    them, you can literally in a minute write your own constraints.</para>
+
+    <table>
+      <title>Built-in constraints</title>
+
+      <tgroup cols="4">
+        <colspec align="center" />
+
+        <thead>
+          <row>
+            <entry>Annotation</entry>
+
+            <entry>Apply on</entry>
+
+            <entry>Runtime checking</entry>
+
+            <entry>Hibernate Metadata impact</entry>
+          </row>
+        </thead>
+
+        <tbody>
+          <row>
+            <entry>@Length(min=, max=)</entry>
+
+            <entry>property (String)</entry>
+
+            <entry>check if the string length match the range</entry>
+
+            <entry>Column length will be set to max</entry>
+          </row>
+
+          <row>
+            <entry>@Max(value=)</entry>
+
+            <entry>property (numeric or string representation of a
+            numeric)</entry>
+
+            <entry>check if the value is less than or equals to max</entry>
+
+            <entry>Add a check constraint on the column</entry>
+          </row>
+
+          <row>
+            <entry>@Min(value=)</entry>
+
+            <entry>property (numeric or string representation of a
+            numeric)</entry>
+
+            <entry>check if the value is more than or equals to min</entry>
+
+            <entry>Add a check constraint on the column</entry>
+          </row>
+
+          <row>
+            <entry>@NotNull</entry>
+
+            <entry>property</entry>
+
+            <entry>check if the value is not null</entry>
+
+            <entry>Column(s) are not null</entry>
+          </row>
+
+          <row>
+            <entry>@NotEmpty</entry>
+
+            <entry>property</entry>
+
+            <entry>check if the string is not null nor empty. Check if the
+            connection is not null nor empty</entry>
+
+            <entry>Column(s) are not null (for String)</entry>
+          </row>
+
+          <row>
+            <entry>@Past</entry>
+
+            <entry>property (date or calendar)</entry>
+
+            <entry>check if the date is in the past</entry>
+
+            <entry>Add a check constraint on the column</entry>
+          </row>
+
+          <row>
+            <entry>@Future</entry>
+
+            <entry>property (date or calendar)</entry>
+
+            <entry>check if the date is in the future</entry>
+
+            <entry>none</entry>
+          </row>
+
+          <row>
+            <entry>@Pattern(regex="regexp", flag=) or @Patterns(
+            {@Pattern(...)} )</entry>
+
+            <entry>property (string)</entry>
+
+            <entry>check if the property match the regular expression given a
+            match flag (see <classname>java.util.regex.Pattern </classname>
+            )</entry>
+
+            <entry>none</entry>
+          </row>
+
+          <row>
+            <entry>@Range(min=, max=)</entry>
+
+            <entry>property (numeric or string representation of a
+            numeric)</entry>
+
+            <entry>check if the value is between min and max
+            (included)</entry>
+
+            <entry>Add a check constraint on the column</entry>
+          </row>
+
+          <row>
+            <entry>@Size(min=, max=)</entry>
+
+            <entry>property (array, collection, map)</entry>
+
+            <entry>check if the element size is between min and max
+            (included)</entry>
+
+            <entry>none</entry>
+          </row>
+
+          <row>
+            <entry>@AssertFalse</entry>
+
+            <entry>property</entry>
+
+            <entry>check that the method evaluates to false (useful for
+            constraints expressed in code rather than annotations)</entry>
+
+            <entry>none</entry>
+          </row>
+
+          <row>
+            <entry>@AssertTrue</entry>
+
+            <entry>property</entry>
+
+            <entry>check that the method evaluates to true (useful for
+            constraints expressed in code rather than annotations)</entry>
+
+            <entry>none</entry>
+          </row>
+
+          <row>
+            <entry>@Valid</entry>
+
+            <entry>property (object)</entry>
+
+            <entry>perform validation recursively on the associated object. If
+            the object is a Collection or an array, the elements are validated
+            recursively. If the object is a Map, the value elements are
+            validated recursively.</entry>
+
+            <entry>none</entry>
+          </row>
+
+          <row>
+            <entry>@Email</entry>
+
+            <entry>property (String)</entry>
+
+            <entry>check whether the string is conform to the email address
+            specification</entry>
+
+            <entry>none</entry>
+          </row>
+
+          <row>
+            <entry>@CreditCardNumber</entry>
+
+            <entry>property (String)</entry>
+
+            <entry>check whether the string is a well formated credit card
+            number (derivative of the Luhn algorithm)</entry>
+
+            <entry>none</entry>
+          </row>
+
+          <row>
+            <entry>@Digits</entry>
+
+            <entry>property (numeric or string representation of a
+            numeric)</entry>
+
+            <entry>check whether the property is a number having up to
+            <literal>integerDigits</literal> integer digits and
+            <literal>fractionalDigits</literal> fractonal digits</entry>
+
+            <entry>define column precision and scale</entry>
+          </row>
+
+          <row>
+            <entry>@EAN</entry>
+
+            <entry>property (string)</entry>
+
+            <entry>check whether the string is a properly formated EAN or
+            UPC-A code</entry>
+
+            <entry>none</entry>
+          </row>
+
+          <row>
+            <entry>@Digits</entry>
+
+            <entry>property (numeric or string representation of a
+            numeric)</entry>
+
+            <entry>check whether the property is a number having up to
+            <literal>integerDigits</literal> integer digits and
+            <literal>fractionalDigits</literal> fractonal digits</entry>
+
+            <entry>define column precision and scale</entry>
+          </row>
+        </tbody>
+      </tgroup>
+    </table>
+  </section>
+
+  <section id="validator-defineconstraints-error" xreflabel="Error messages">
+    <title>Error messages</title>
+
+    <para>Hibernate Validator comes with a default set of error messages
+    translated in about ten languages (if yours is not part of it, please sent
+    us a patch). You can override those messages by creating a
+    <filename>ValidatorMessages.properties</filename> or (
+    <filename>ValidatorMessages_loc.properties</filename> ) and override the
+    needed keys. You can even add your own additional set of messages while
+    writing your validator annotations. If Hibernate Validator cannot resolve
+    a key from your resourceBundle nor from ValidatorMessage, it falls back to
+    the default built-in values.</para>
+
+    <para>Alternatively you can provide a
+    <classname>ResourceBundle</classname> while checking programmatically the
+    validation rules on a bean or if you want a completly different
+    interpolation mechanism, you can provide an implementation of
+    <literal>org.hibernate.validator.MessageInterpolator</literal> (check the
+    JavaDoc for more informations).</para>
+  </section>
+
+  <section id="validator-defineconstraints-own" revision="1">
+    <title>Writing your own constraints</title>
+
+    <para>Extending the set of built-in constraints is extremely easy. Any
+    constraint consists of two pieces: the constraint
+    <emphasis>descriptor</emphasis> (the annotation) and the constraint
+    <emphasis>validator</emphasis> (the implementation class). Here is a
+    simple user-defined descriptor:</para>
+
+    <programlisting>@ValidatorClass(CapitalizedValidator.class)
+ at Target(METHOD)
+ at Retention(RUNTIME)
+ at Documented
+public @interface Capitalized {
+    CapitalizeType type() default Capitalize.FIRST;
+    String message() default "has incorrect capitalization"
+}        </programlisting>
+
+    <para><literal>type</literal> is a parameter describing how the property
+    should to be capitalized. This is a user parameter fully dependant on the
+    annotation business.</para>
+
+    <para><literal>message</literal> is the default string used to describe
+    the constraint violation and is mandatory. You can hard code the string or
+    you can externalize part/all of it through the Java ResourceBundle
+    mechanism. Parameters values are going to be injected inside the message
+    when the <literal>{parameter}</literal> string is found (in our example
+    <literal>Capitalization is not {type}</literal> would generate
+    <literal>Capitalization is not FIRST</literal> ), externalizing the whole
+    string in <filename>ValidatorMessages.properties</filename> is considered
+    good practice. See <xref linkend="validator-defineconstraints-error" />
+    .</para>
+
+    <programlisting>@ValidatorClass(CapitalizedValidator.class)
+ at Target(METHOD)
+ at Retention(RUNTIME)
+ at Documented
+public @interface Capitalized {
+    CapitalizeType type() default Capitalize.FIRST;
+    String message() default "{validator.capitalized}";
+}
+
+
+#in ValidatorMessages.properties
+validator.capitalized = <literal>Capitalization is not {type}</literal>
+        </programlisting>
+
+    <para>As you can see the {} notation is recursive.</para>
+
+    <para>To link a descriptor to its validator implementation, we use the
+    <literal>@ValidatorClass</literal> meta-annotation. The validator class
+    parameter must name a class which implements
+    <literal>Validator&lt;ConstraintAnnotation&gt;</literal> .</para>
+
+    <para>We now have to implement the validator (ie. the rule checking
+    implementation). A validation implementation can check the value of the a
+    property (by implementing <literal>PropertyConstraint</literal> ) and/or
+    can modify the hibernate mapping metadata to express the constraint at the
+    database level (by implementing
+    <literal>PersistentClassConstraint</literal> )</para>
+
+    <programlisting>public class CapitalizedValidator
+        implements Validator&lt;Capitalized&gt;, PropertyConstraint {
+    private CapitalizeType type;
+
+    //part of the Validator&lt;Annotation&gt; contract,
+    //allows to get and use the annotation values
+    public void initialize(Capitalized parameters) {
+        type = parameters.type();
+    }
+
+    //part of the property constraint contract
+    public boolean isValid(Object value) {
+        if (value==null) return true;
+        if ( !(value instanceof String) ) return false;
+        String string = (String) value;
+        if (type == CapitalizeType.ALL) {
+            return string.equals( string.toUpperCase() );
+        }
+        else {
+            String first = string.substring(0,1);
+            return first.equals( first.toUpperCase();
+        }
+    }
+}        </programlisting>
+
+    <para>The <literal>isValid()</literal> method should return false if the
+    constraint has been violated. For more examples, refer to the built-in
+    validator implementations.</para>
+
+    <para>We only have seen property level validation, but you can write a
+    Bean level validation annotation. Instead of receiving the return instance
+    of a property, the bean itself will be passed to the validator. To
+    activate the validation checking, just annotated the bean itself instead.
+    A small sample can be found in the unit test suite.</para>
+
+    <para>If your constraint can be applied multiple times (with different
+    parameters) on the same property or type, you can use the following
+    annotation form:</para>
+
+    <programlisting>@Target(METHOD)
+ at Retention(RUNTIME)
+ at Documented
+<emphasis role="bold">public @interface Patterns {</emphasis>
+    Pattern[] value();
+}
+
+ at Target(METHOD)
+ at Retention(RUNTIME)
+ at Documented
+ at ValidatorClass(PatternValidator.class)
+public @interface Pattern {
+    String regexp();
+}</programlisting>
+
+    <para>Basically an annotation containing the value attribute as an array
+    of validator annotations.</para>
+  </section>
+
+  <section>
+    <title>Annotating your domain model</title>
+
+    <para>Since you are already familiar with annotations now, the syntax
+    should be very familiar</para>
+
+    <programlisting>public class Address {
+    private String line1;
+    private String line2;
+    private String zip;
+    private String state;
+    private String country;
+    private long id;
+
+    // a not null string of 20 characters maximum
+    @Length(max=20)
+    @NotNull
+    public String getCountry() {
+        return country;
+    }
+
+    // a non null string
+    @NotNull
+    public String getLine1() {
+        return line1;
+    }
+
+    //no constraint
+    public String getLine2() {
+        return line2;
+    }
+
+    // a not null string of 3 characters maximum
+    @Length(max=3) @NotNull
+    public String getState() {
+        return state;
+    }
+
+    // a not null numeric string of 5 characters maximum
+    // if the string is longer, the message will
+    //be searched in the resource bundle at key 'long'
+    @Length(max=5, message="{long}")
+    @Pattern(regex="[0-9]+")
+    @NotNull
+    public String getZip() {
+        return zip;
+    }
+
+    // should always be true
+    @AssertTrue
+    public boolean isValid() {
+        return true;
+    }
+
+    // a numeric between 1 and 2000
+    @Id @Min(1)
+    @Range(max=2000)
+    public long getId() {
+        return id;
+    }
+}        </programlisting>
+
+    <para>While the example only shows public property validation, you can
+    also annotate fields of any kind of visibility</para>
+
+    <programlisting>@MyBeanConstraint(max=45
+public class Dog {
+    @AssertTrue private boolean isMale;
+    @NotNull protected String getName() { ... };
+    ...
+}        </programlisting>
+
+    <para>You can also annotate interfaces. Hibernate Validator will check all
+    superclasses and interfaces extended or implemented by a given bean to
+    read the appropriate validator annotations.</para>
+
+    <programlisting>public interface Named {
+    @NotNull String getName();
+    ...
+}
+
+public class Dog implements Named {
+
+    @AssertTrue private boolean isMale;
+
+    public String getName() { ... };
+
+}
+        </programlisting>
+
+    <para>The name property will be checked for nullity when the Dog bean is
+    validated.</para>
+  </section>
+</chapter>
\ No newline at end of file

Copied: trunk/HibernateExt/validator/doc/reference/en/styles (from rev 11279, branches/Branch_3_2/HibernateExt/validator/doc/reference/en/styles)

Deleted: trunk/HibernateExt/validator/doc/reference/en/styles/fopdf.xsl
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/doc/reference/en/styles/fopdf.xsl	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/doc/reference/en/styles/fopdf.xsl	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,519 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
-
-    This is the XSL FO configuration file for the Hibernate
-    Reference Documentation. It defines a custom titlepage and
-    the parameters for the A4 sized PDF printable output.
-
-    It took me days to figure out this stuff and fix most of
-    the obvious bugs in the DocBook XSL distribution. Some of
-    the workarounds might not be appropriate with a newer version
-    of DocBook XSL. This file is released as part of Hibernate,
-    hence LGPL licensed.
-
-    christian at hibernate.org
-
--->
-
-<!DOCTYPE xsl:stylesheet [
-    <!ENTITY db_xsl_path        "../../../../../../Hibernate3/doc/reference/support/docbook-xsl/">
-]>
-
-<xsl:stylesheet
-    version="1.0"
-    xmlns="http://www.w3.org/TR/xhtml1/transitional"
-    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-    xmlns:fo="http://www.w3.org/1999/XSL/Format"
-    exclude-result-prefixes="#default">
-
-    <xsl:import href="&db_xsl_path;/fo/docbook.xsl"/>
-
-    <!--###################################################
-                       Custom Title Page
-        ################################################### -->
-
-    <xsl:template name="book.titlepage.recto">
-        <fo:block>
-            <fo:table table-layout="fixed" width="175mm">
-                <fo:table-column column-width="175mm"/>
-                <fo:table-body>
-                    <fo:table-row>
-                        <fo:table-cell text-align="center">
-                            <fo:block>
-                                <fo:external-graphic src="file:images/hibernate_logo_a.png"/>
-                            </fo:block>
-                            <fo:block font-family="Helvetica" font-size="22pt" padding-before="10mm">
-                                <xsl:value-of select="bookinfo/title"/>
-                            </fo:block>
-                            <fo:block font-family="Helvetica" font-size="18pt" padding-before="10mm">
-                                <xsl:value-of select="bookinfo/subtitle"/>
-                            </fo:block>
-                            <fo:block font-family="Helvetica" font-size="12pt" padding="10mm">
-                                Version:
-                                <xsl:value-of select="bookinfo/releaseinfo"/>
-                            </fo:block>
-                        </fo:table-cell>
-                    </fo:table-row>
-                </fo:table-body>
-            </fo:table>
-        </fo:block>
-    </xsl:template>
-
-    <!-- Prevent blank pages in output -->
-    <xsl:template name="book.titlepage.before.verso">
-    </xsl:template>
-    <xsl:template name="book.titlepage.verso">
-    </xsl:template>
-    <xsl:template name="book.titlepage.separator">
-    </xsl:template>
-
-    <!--###################################################
-                          Header
-        ################################################### -->
-
-    <!-- More space in the center header for long text -->
-    <xsl:attribute-set name="header.content.properties">
-        <xsl:attribute name="font-family">
-            <xsl:value-of select="$body.font.family"/>
-        </xsl:attribute>
-        <xsl:attribute name="margin-left">-5em</xsl:attribute>
-        <xsl:attribute name="margin-right">-5em</xsl:attribute>
-    </xsl:attribute-set>
-
-    <!--###################################################
-                          Custom Footer
-        ################################################### -->
-
-    <!-- This footer prints the Hibernate version number on the left side -->
-    <xsl:template name="footer.content">
-        <xsl:param name="pageclass" select="''"/>
-        <xsl:param name="sequence" select="''"/>
-        <xsl:param name="position" select="''"/>
-        <xsl:param name="gentext-key" select="''"/>
-
-        <xsl:variable name="Version">
-            <xsl:choose>
-                <xsl:when test="//releaseinfo">
-                    <xsl:text>Hibernate </xsl:text>
-                    <xsl:value-of select="//releaseinfo"/>
-                </xsl:when>
-                <xsl:otherwise>
-                    <!-- nop -->
-                </xsl:otherwise>
-            </xsl:choose>
-        </xsl:variable>
-
-        <xsl:choose>
-            <xsl:when test="$sequence='blank'">
-                <xsl:choose>
-                    <xsl:when test="$double.sided != 0 and $position = 'left'">
-                        <xsl:value-of select="$Version"/>
-                    </xsl:when>
-
-                    <xsl:when test="$double.sided = 0 and $position = 'center'">
-                        <!-- nop -->
-                    </xsl:when>
-
-                    <xsl:otherwise>
-                        <fo:page-number/>
-                    </xsl:otherwise>
-                </xsl:choose>
-            </xsl:when>
-
-            <xsl:when test="$pageclass='titlepage'">
-                <!-- nop: other titlepage sequences have no footer -->
-            </xsl:when>
-
-            <xsl:when test="$double.sided != 0 and $sequence = 'even' and $position='left'">
-                <fo:page-number/>
-            </xsl:when>
-
-            <xsl:when test="$double.sided != 0 and $sequence = 'odd' and $position='right'">
-                <fo:page-number/>
-            </xsl:when>
-
-            <xsl:when test="$double.sided = 0 and $position='right'">
-                <fo:page-number/>
-            </xsl:when>
-
-            <xsl:when test="$double.sided != 0 and $sequence = 'odd' and $position='left'">
-                <xsl:value-of select="$Version"/>
-            </xsl:when>
-
-            <xsl:when test="$double.sided != 0 and $sequence = 'even' and $position='right'">
-                <xsl:value-of select="$Version"/>
-            </xsl:when>
-
-            <xsl:when test="$double.sided = 0 and $position='left'">
-                <xsl:value-of select="$Version"/>
-            </xsl:when>
-
-            <xsl:otherwise>
-                <!-- nop -->
-            </xsl:otherwise>
-        </xsl:choose>
-    </xsl:template>
-
-    <!--###################################################
-                       Custom Toc Line
-        ################################################### -->
-    
-    <!-- Improve the TOC. -->
-    <xsl:template name="toc.line">
-        <xsl:variable name="id">
-            <xsl:call-template name="object.id"/>
-        </xsl:variable>
-
-        <xsl:variable name="label">
-            <xsl:apply-templates select="." mode="label.markup"/>
-        </xsl:variable>
-
-        <fo:block text-align-last="justify"
-            end-indent="{$toc.indent.width}pt"
-            last-line-end-indent="-{$toc.indent.width}pt">
-            <fo:inline keep-with-next.within-line="always">
-                <fo:basic-link internal-destination="{$id}">
-
-                    <!-- Chapter titles should be bold. -->
-                    <xsl:choose>
-                        <xsl:when test="local-name(.) = 'chapter'">
-                            <xsl:attribute name="font-weight">bold</xsl:attribute>
-                        </xsl:when>
-                    </xsl:choose>
-
-                    <xsl:if test="$label != ''">
-                        <xsl:copy-of select="$label"/>
-                        <xsl:value-of select="$autotoc.label.separator"/>
-                    </xsl:if>
-                    <xsl:apply-templates select="." mode="titleabbrev.markup"/>
-                </fo:basic-link>
-            </fo:inline>
-            <fo:inline keep-together.within-line="always">
-                <xsl:text> </xsl:text>
-                <fo:leader leader-pattern="dots"
-                    leader-pattern-width="3pt"
-                    leader-alignment="reference-area"
-                    keep-with-next.within-line="always"/>
-                <xsl:text> </xsl:text>
-                <fo:basic-link internal-destination="{$id}">
-                    <fo:page-number-citation ref-id="{$id}"/>
-                </fo:basic-link>
-            </fo:inline>
-        </fo:block>
-    </xsl:template>
-
-    <!--###################################################
-                          Extensions
-        ################################################### -->
-
-    <!-- These extensions are required for table printing and other stuff -->
-    <xsl:param name="use.extensions">1</xsl:param>
-    <xsl:param name="tablecolumns.extension">0</xsl:param>
-    <!-- FOP provide only PDF Bookmarks at the moment -->
-    <xsl:param name="fop.extensions">1</xsl:param>
-
-    <!--###################################################
-                          Table Of Contents
-        ################################################### -->
-
-    <!-- Generate the TOCs for named components only -->
-    <xsl:param name="generate.toc">
-        book   toc
-    </xsl:param>
-    
-    <!-- Show only Sections up to level 3 in the TOCs -->
-    <xsl:param name="toc.section.depth">3</xsl:param>
-    
-    <!-- Dot and Whitespace as separator in TOC between Label and Title-->
-    <xsl:param name="autotoc.label.separator" select="'.  '"/>
-
-
-    <!--###################################################
-                       Paper & Page Size
-        ################################################### -->
-    
-    <!-- Paper type, no headers on blank pages, no double sided printing -->
-    <xsl:param name="paper.type" select="'A4'"/>
-    <xsl:param name="double.sided">0</xsl:param>
-    <xsl:param name="headers.on.blank.pages">0</xsl:param>
-    <xsl:param name="footers.on.blank.pages">0</xsl:param>
-
-    <!-- Space between paper border and content (chaotic stuff, don't touch) -->
-    <xsl:param name="page.margin.top">5mm</xsl:param>
-    <xsl:param name="region.before.extent">10mm</xsl:param>
-    <xsl:param name="body.margin.top">10mm</xsl:param>
-
-    <xsl:param name="body.margin.bottom">15mm</xsl:param>
-    <xsl:param name="region.after.extent">10mm</xsl:param>
-    <xsl:param name="page.margin.bottom">0mm</xsl:param>
-
-    <xsl:param name="page.margin.outer">18mm</xsl:param>
-    <xsl:param name="page.margin.inner">18mm</xsl:param>
-
-    <!-- No intendation of Titles -->
-    <xsl:param name="title.margin.left">0pc</xsl:param>
-
-    <!--###################################################
-                       Fonts & Styles
-        ################################################### -->
-
-    <!-- Default Font size -->
-    <xsl:param name="body.font.master">11</xsl:param>
-
-    <!-- Line height in body text -->
-    <xsl:param name="line-height">1.4</xsl:param>
-
-    <!-- Monospaced fonts are smaller than regular text -->
-    <xsl:attribute-set name="monospace.properties">
-        <xsl:attribute name="font-family">
-            <xsl:value-of select="$monospace.font.family"/>
-        </xsl:attribute>
-        <xsl:attribute name="font-size">0.8em</xsl:attribute>
-    </xsl:attribute-set>
-
-    <!--###################################################
-                       Tables
-        ################################################### -->
-
-    <!-- The table width should be adapted to the paper size -->
-    <xsl:param name="default.table.width">17.4cm</xsl:param>
-
-    <!-- Some padding inside tables -->
-    <xsl:attribute-set name="table.cell.padding">
-        <xsl:attribute name="padding-left">4pt</xsl:attribute>
-        <xsl:attribute name="padding-right">4pt</xsl:attribute>
-        <xsl:attribute name="padding-top">4pt</xsl:attribute>
-        <xsl:attribute name="padding-bottom">4pt</xsl:attribute>
-    </xsl:attribute-set>
-    
-    <!-- Only hairlines as frame and cell borders in tables -->
-    <xsl:param name="table.frame.border.thickness">0.1pt</xsl:param>
-    <xsl:param name="table.cell.border.thickness">0.1pt</xsl:param>
-
-    <!--###################################################
-                             Labels
-        ################################################### -->
-
-    <!-- Label Chapters and Sections (numbering) -->
-    <xsl:param name="chapter.autolabel">1</xsl:param>
-    <xsl:param name="section.autolabel" select="1"/>
-    <xsl:param name="section.label.includes.component.label" select="1"/>
-
-    <!-- Label only Sections up to level 2 -->
-    <xsl:param name="local.l10n.xml" select="document('')"/>
-    <l:i18n xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0">
-        <l:l10n language="en">
-            <l:context name="title-numbered">
-                <l:template name="sect3" text="%t"/>
-                <l:template name="sect4" text="%t"/>
-                <l:template name="sect5" text="%t"/>
-            </l:context>
-            <l:context name="section-xref-numbered">
-                <l:template name="sect3" text="the section called %t"/>
-                <l:template name="sect4" text="the section called %t"/>
-                <l:template name="sect5" text="the section called %t"/>
-            </l:context>
-        </l:l10n>
-    </l:i18n>
-    
-    <!--###################################################
-                             Titles
-        ################################################### -->
-    
-    <!-- Chapter title size -->
-    <xsl:attribute-set name="chapter.titlepage.recto.style">
-        <xsl:attribute name="text-align">left</xsl:attribute>
-        <xsl:attribute name="font-weight">bold</xsl:attribute>
-        <xsl:attribute name="font-size">
-            <xsl:value-of select="$body.font.master * 1.8"/>
-            <xsl:text>pt</xsl:text>
-        </xsl:attribute>
-    </xsl:attribute-set>
-
-    <!-- Why is the font-size for chapters hardcoded in the XSL FO templates? 
-        Let's remove it, so this sucker can use our attribute-set only... -->
-    <xsl:template match="title" mode="chapter.titlepage.recto.auto.mode">
-        <fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format"
-            xsl:use-attribute-sets="chapter.titlepage.recto.style">
-            <xsl:call-template name="component.title">
-                <xsl:with-param name="node" select="ancestor-or-self::chapter[1]"/>
-            </xsl:call-template>
-        </fo:block>
-    </xsl:template>
-    
-    <!-- Sections 1, 2 and 3 titles have a small bump factor and padding -->
-    <xsl:attribute-set name="section.title.level1.properties">
-        <xsl:attribute name="space-before.optimum">0.8em</xsl:attribute>
-        <xsl:attribute name="space-before.minimum">0.8em</xsl:attribute>
-        <xsl:attribute name="space-before.maximum">0.8em</xsl:attribute>
-        <xsl:attribute name="font-size">
-            <xsl:value-of select="$body.font.master * 1.5"/>
-            <xsl:text>pt</xsl:text>
-        </xsl:attribute>
-        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
-    </xsl:attribute-set>
-    <xsl:attribute-set name="section.title.level2.properties">
-        <xsl:attribute name="space-before.optimum">0.6em</xsl:attribute>
-        <xsl:attribute name="space-before.minimum">0.6em</xsl:attribute>
-        <xsl:attribute name="space-before.maximum">0.6em</xsl:attribute>
-        <xsl:attribute name="font-size">
-            <xsl:value-of select="$body.font.master * 1.25"/>
-            <xsl:text>pt</xsl:text>
-        </xsl:attribute>
-        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
-    </xsl:attribute-set>
-    <xsl:attribute-set name="section.title.level3.properties">
-        <xsl:attribute name="space-before.optimum">0.4em</xsl:attribute>
-        <xsl:attribute name="space-before.minimum">0.4em</xsl:attribute>
-        <xsl:attribute name="space-before.maximum">0.4em</xsl:attribute>
-        <xsl:attribute name="font-size">
-            <xsl:value-of select="$body.font.master * 1.0"/>
-            <xsl:text>pt</xsl:text>
-        </xsl:attribute>
-        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
-    </xsl:attribute-set>
-
-    <!-- Titles of formal objects (tables, examples, ...) -->
-    <xsl:attribute-set name="formal.title.properties" use-attribute-sets="normal.para.spacing">
-        <xsl:attribute name="font-weight">bold</xsl:attribute>
-        <xsl:attribute name="font-size">
-            <xsl:value-of select="$body.font.master"/>
-            <xsl:text>pt</xsl:text>
-        </xsl:attribute>
-        <xsl:attribute name="hyphenate">false</xsl:attribute>
-        <xsl:attribute name="space-after.minimum">0.4em</xsl:attribute>
-        <xsl:attribute name="space-after.optimum">0.6em</xsl:attribute>
-        <xsl:attribute name="space-after.maximum">0.8em</xsl:attribute>
-    </xsl:attribute-set>
-
-    <!--###################################################
-                          Programlistings
-        ################################################### -->
-    
-    <!-- Verbatim text formatting (programlistings) -->
-    <xsl:attribute-set name="verbatim.properties">
-        <xsl:attribute name="space-before.minimum">1em</xsl:attribute>
-        <xsl:attribute name="space-before.optimum">1em</xsl:attribute>
-        <xsl:attribute name="space-before.maximum">1em</xsl:attribute>
-        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
-        <xsl:attribute name="border-color">#444444</xsl:attribute>
-        <xsl:attribute name="border-style">solid</xsl:attribute>
-        <xsl:attribute name="border-width">0.1pt</xsl:attribute>
-        <xsl:attribute name="padding-top">0.5em</xsl:attribute>
-        <xsl:attribute name="padding-left">0.5em</xsl:attribute>
-        <xsl:attribute name="padding-right">0.5em</xsl:attribute>
-        <xsl:attribute name="padding-bottom">0.5em</xsl:attribute>
-        <xsl:attribute name="margin-left">0.5em</xsl:attribute>
-        <xsl:attribute name="margin-right">0.5em</xsl:attribute>
-    </xsl:attribute-set>
-
-    <!-- Shade (background) programlistings -->
-    <xsl:param name="shade.verbatim">1</xsl:param>
-    <xsl:attribute-set name="shade.verbatim.style">
-        <xsl:attribute name="background-color">#F0F0F0</xsl:attribute>
-    </xsl:attribute-set>
-
-    <!--###################################################
-                             Callouts
-        ################################################### -->
-
-    <!-- We want to use callouts... -->
-    <xsl:param name="callout.extensions">1</xsl:param>
-
-    <!-- Place callout bullets at this column in programmlisting.-->
-    <xsl:param name="callout.defaultcolumn">90</xsl:param>
-
-    <!--
-        No, don't use crappy graphics for the callout bullets. This setting
-        enables some weird Unicode rendering for some fancy bullet points
-        in callouts. By default, this can only count to 10 and produces
-        strange results if you ever have more than 10 callouts for one
-        programlisting. We will fix that next.
-    -->
-    <xsl:param name="callout.graphics">0</xsl:param>
-
-    <!--
-        Again, fun with DocBook XSL: The callout bullets are rendered in
-        two places: In the programlisting itself and in the list below
-        the listing, with the actual callout text. The rendering in the
-        programlisting is some XSL transformer extension (e.g. a Saxon
-        extension), so we can't change that without messing with the
-        extensions. We only can turn it off by setting this limit to
-        zero, then, a simple bracket style like "(3)" and "(4)" will
-        be used in the programlisting.
-    -->
-    <xsl:param name="callout.unicode.number.limit" select="'0'"></xsl:param>
-
-    <!--
-        The callout bullets in the actual callout list will be rendered
-        with an XSL FO template. The default template is broken: limited to 10
-        nice looking Unicode bullet points and then it doesn't print anything,
-        the fallback doesn't work. We implement our own template, which is not
-        as complicated, more ugly, but works. As always, function is more
-        important than form.
-    -->
-    <xsl:template name="callout-bug">
-        <xsl:param name="conum" select='1'/>
-        <fo:inline
-            color="black"
-            padding-top="0.1em"
-            padding-bottom="0.1em"
-            padding-start="0.2em"
-            padding-end="0.2em"
-            baseline-shift="0.1em"
-            font-family="{$monospace.font.family}"
-            font-weight="bold"
-            font-size="75%">
-            <xsl:text>(</xsl:text>
-            <xsl:value-of select="$conum"/>
-            <xsl:text>)</xsl:text>
-        </fo:inline>
-
-    </xsl:template>
-
-    <!--###################################################
-                              Misc
-        ################################################### -->
-
-    <!-- Correct placement of titles for figures and examples. -->
-    <xsl:param name="formal.title.placement">
-        figure after
-        example before
-        equation before
-        table before
-        procedure before
-    </xsl:param>
-    
-    <!-- Format Variable Lists as Blocks (prevents horizontal overflow). -->
-    <xsl:param name="variablelist.as.blocks">1</xsl:param>
-
-    <!-- The horrible list spacing problems, this is much better. -->
-    <xsl:attribute-set name="list.block.spacing">
-        <xsl:attribute name="space-before.optimum">0.8em</xsl:attribute>
-        <xsl:attribute name="space-before.minimum">0.8em</xsl:attribute>
-        <xsl:attribute name="space-before.maximum">0.8em</xsl:attribute>
-        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
-        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
-    </xsl:attribute-set>
-
-    <!-- Newer DocBook XSL apparently thinks that some sections are by
-         default "draft" status, and this idiotic thing is by default
-         also set to "maybe", so it spits out a lot of errors with the
-         latest FOP as the XSL/FO styles have references to some draft
-         watermarks, which you actually don't want in the first place.
-         Turn this crap off. If you have to work with the "status"
-         attribute, don't.
-    -->
-    <xsl:param name="draft.mode" select="'no'"/>
-
-</xsl:stylesheet>

Copied: trunk/HibernateExt/validator/doc/reference/en/styles/fopdf.xsl (from rev 11279, branches/Branch_3_2/HibernateExt/validator/doc/reference/en/styles/fopdf.xsl)
===================================================================
--- trunk/HibernateExt/validator/doc/reference/en/styles/fopdf.xsl	                        (rev 0)
+++ trunk/HibernateExt/validator/doc/reference/en/styles/fopdf.xsl	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,519 @@
+<?xml version="1.0"?>
+
+<!--
+
+    This is the XSL FO configuration file for the Hibernate
+    Reference Documentation. It defines a custom titlepage and
+    the parameters for the A4 sized PDF printable output.
+
+    It took me days to figure out this stuff and fix most of
+    the obvious bugs in the DocBook XSL distribution. Some of
+    the workarounds might not be appropriate with a newer version
+    of DocBook XSL. This file is released as part of Hibernate,
+    hence LGPL licensed.
+
+    christian at hibernate.org
+
+-->
+
+<!DOCTYPE xsl:stylesheet [
+    <!ENTITY db_xsl_path        "../../../../../../Hibernate3/doc/reference/support/docbook-xsl/">
+]>
+
+<xsl:stylesheet
+    version="1.0"
+    xmlns="http://www.w3.org/TR/xhtml1/transitional"
+    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+    xmlns:fo="http://www.w3.org/1999/XSL/Format"
+    exclude-result-prefixes="#default">
+
+    <xsl:import href="&db_xsl_path;/fo/docbook.xsl"/>
+
+    <!--###################################################
+                       Custom Title Page
+        ################################################### -->
+
+    <xsl:template name="book.titlepage.recto">
+        <fo:block>
+            <fo:table table-layout="fixed" width="175mm">
+                <fo:table-column column-width="175mm"/>
+                <fo:table-body>
+                    <fo:table-row>
+                        <fo:table-cell text-align="center">
+                            <fo:block>
+                                <fo:external-graphic src="file:images/hibernate_logo_a.png"/>
+                            </fo:block>
+                            <fo:block font-family="Helvetica" font-size="22pt" padding-before="10mm">
+                                <xsl:value-of select="bookinfo/title"/>
+                            </fo:block>
+                            <fo:block font-family="Helvetica" font-size="18pt" padding-before="10mm">
+                                <xsl:value-of select="bookinfo/subtitle"/>
+                            </fo:block>
+                            <fo:block font-family="Helvetica" font-size="12pt" padding="10mm">
+                                Version:
+                                <xsl:value-of select="bookinfo/releaseinfo"/>
+                            </fo:block>
+                        </fo:table-cell>
+                    </fo:table-row>
+                </fo:table-body>
+            </fo:table>
+        </fo:block>
+    </xsl:template>
+
+    <!-- Prevent blank pages in output -->
+    <xsl:template name="book.titlepage.before.verso">
+    </xsl:template>
+    <xsl:template name="book.titlepage.verso">
+    </xsl:template>
+    <xsl:template name="book.titlepage.separator">
+    </xsl:template>
+
+    <!--###################################################
+                          Header
+        ################################################### -->
+
+    <!-- More space in the center header for long text -->
+    <xsl:attribute-set name="header.content.properties">
+        <xsl:attribute name="font-family">
+            <xsl:value-of select="$body.font.family"/>
+        </xsl:attribute>
+        <xsl:attribute name="margin-left">-5em</xsl:attribute>
+        <xsl:attribute name="margin-right">-5em</xsl:attribute>
+    </xsl:attribute-set>
+
+    <!--###################################################
+                          Custom Footer
+        ################################################### -->
+
+    <!-- This footer prints the Hibernate version number on the left side -->
+    <xsl:template name="footer.content">
+        <xsl:param name="pageclass" select="''"/>
+        <xsl:param name="sequence" select="''"/>
+        <xsl:param name="position" select="''"/>
+        <xsl:param name="gentext-key" select="''"/>
+
+        <xsl:variable name="Version">
+            <xsl:choose>
+                <xsl:when test="//releaseinfo">
+                    <xsl:text>Hibernate </xsl:text>
+                    <xsl:value-of select="//releaseinfo"/>
+                </xsl:when>
+                <xsl:otherwise>
+                    <!-- nop -->
+                </xsl:otherwise>
+            </xsl:choose>
+        </xsl:variable>
+
+        <xsl:choose>
+            <xsl:when test="$sequence='blank'">
+                <xsl:choose>
+                    <xsl:when test="$double.sided != 0 and $position = 'left'">
+                        <xsl:value-of select="$Version"/>
+                    </xsl:when>
+
+                    <xsl:when test="$double.sided = 0 and $position = 'center'">
+                        <!-- nop -->
+                    </xsl:when>
+
+                    <xsl:otherwise>
+                        <fo:page-number/>
+                    </xsl:otherwise>
+                </xsl:choose>
+            </xsl:when>
+
+            <xsl:when test="$pageclass='titlepage'">
+                <!-- nop: other titlepage sequences have no footer -->
+            </xsl:when>
+
+            <xsl:when test="$double.sided != 0 and $sequence = 'even' and $position='left'">
+                <fo:page-number/>
+            </xsl:when>
+
+            <xsl:when test="$double.sided != 0 and $sequence = 'odd' and $position='right'">
+                <fo:page-number/>
+            </xsl:when>
+
+            <xsl:when test="$double.sided = 0 and $position='right'">
+                <fo:page-number/>
+            </xsl:when>
+
+            <xsl:when test="$double.sided != 0 and $sequence = 'odd' and $position='left'">
+                <xsl:value-of select="$Version"/>
+            </xsl:when>
+
+            <xsl:when test="$double.sided != 0 and $sequence = 'even' and $position='right'">
+                <xsl:value-of select="$Version"/>
+            </xsl:when>
+
+            <xsl:when test="$double.sided = 0 and $position='left'">
+                <xsl:value-of select="$Version"/>
+            </xsl:when>
+
+            <xsl:otherwise>
+                <!-- nop -->
+            </xsl:otherwise>
+        </xsl:choose>
+    </xsl:template>
+
+    <!--###################################################
+                       Custom Toc Line
+        ################################################### -->
+    
+    <!-- Improve the TOC. -->
+    <xsl:template name="toc.line">
+        <xsl:variable name="id">
+            <xsl:call-template name="object.id"/>
+        </xsl:variable>
+
+        <xsl:variable name="label">
+            <xsl:apply-templates select="." mode="label.markup"/>
+        </xsl:variable>
+
+        <fo:block text-align-last="justify"
+            end-indent="{$toc.indent.width}pt"
+            last-line-end-indent="-{$toc.indent.width}pt">
+            <fo:inline keep-with-next.within-line="always">
+                <fo:basic-link internal-destination="{$id}">
+
+                    <!-- Chapter titles should be bold. -->
+                    <xsl:choose>
+                        <xsl:when test="local-name(.) = 'chapter'">
+                            <xsl:attribute name="font-weight">bold</xsl:attribute>
+                        </xsl:when>
+                    </xsl:choose>
+
+                    <xsl:if test="$label != ''">
+                        <xsl:copy-of select="$label"/>
+                        <xsl:value-of select="$autotoc.label.separator"/>
+                    </xsl:if>
+                    <xsl:apply-templates select="." mode="titleabbrev.markup"/>
+                </fo:basic-link>
+            </fo:inline>
+            <fo:inline keep-together.within-line="always">
+                <xsl:text> </xsl:text>
+                <fo:leader leader-pattern="dots"
+                    leader-pattern-width="3pt"
+                    leader-alignment="reference-area"
+                    keep-with-next.within-line="always"/>
+                <xsl:text> </xsl:text>
+                <fo:basic-link internal-destination="{$id}">
+                    <fo:page-number-citation ref-id="{$id}"/>
+                </fo:basic-link>
+            </fo:inline>
+        </fo:block>
+    </xsl:template>
+
+    <!--###################################################
+                          Extensions
+        ################################################### -->
+
+    <!-- These extensions are required for table printing and other stuff -->
+    <xsl:param name="use.extensions">1</xsl:param>
+    <xsl:param name="tablecolumns.extension">0</xsl:param>
+    <!-- FOP provide only PDF Bookmarks at the moment -->
+    <xsl:param name="fop.extensions">1</xsl:param>
+
+    <!--###################################################
+                          Table Of Contents
+        ################################################### -->
+
+    <!-- Generate the TOCs for named components only -->
+    <xsl:param name="generate.toc">
+        book   toc
+    </xsl:param>
+    
+    <!-- Show only Sections up to level 3 in the TOCs -->
+    <xsl:param name="toc.section.depth">3</xsl:param>
+    
+    <!-- Dot and Whitespace as separator in TOC between Label and Title-->
+    <xsl:param name="autotoc.label.separator" select="'.  '"/>
+
+
+    <!--###################################################
+                       Paper & Page Size
+        ################################################### -->
+    
+    <!-- Paper type, no headers on blank pages, no double sided printing -->
+    <xsl:param name="paper.type" select="'A4'"/>
+    <xsl:param name="double.sided">0</xsl:param>
+    <xsl:param name="headers.on.blank.pages">0</xsl:param>
+    <xsl:param name="footers.on.blank.pages">0</xsl:param>
+
+    <!-- Space between paper border and content (chaotic stuff, don't touch) -->
+    <xsl:param name="page.margin.top">5mm</xsl:param>
+    <xsl:param name="region.before.extent">10mm</xsl:param>
+    <xsl:param name="body.margin.top">10mm</xsl:param>
+
+    <xsl:param name="body.margin.bottom">15mm</xsl:param>
+    <xsl:param name="region.after.extent">10mm</xsl:param>
+    <xsl:param name="page.margin.bottom">0mm</xsl:param>
+
+    <xsl:param name="page.margin.outer">18mm</xsl:param>
+    <xsl:param name="page.margin.inner">18mm</xsl:param>
+
+    <!-- No intendation of Titles -->
+    <xsl:param name="title.margin.left">0pc</xsl:param>
+
+    <!--###################################################
+                       Fonts & Styles
+        ################################################### -->
+
+    <!-- Default Font size -->
+    <xsl:param name="body.font.master">11</xsl:param>
+
+    <!-- Line height in body text -->
+    <xsl:param name="line-height">1.4</xsl:param>
+
+    <!-- Monospaced fonts are smaller than regular text -->
+    <xsl:attribute-set name="monospace.properties">
+        <xsl:attribute name="font-family">
+            <xsl:value-of select="$monospace.font.family"/>
+        </xsl:attribute>
+        <xsl:attribute name="font-size">0.8em</xsl:attribute>
+    </xsl:attribute-set>
+
+    <!--###################################################
+                       Tables
+        ################################################### -->
+
+    <!-- The table width should be adapted to the paper size -->
+    <xsl:param name="default.table.width">17.4cm</xsl:param>
+
+    <!-- Some padding inside tables -->
+    <xsl:attribute-set name="table.cell.padding">
+        <xsl:attribute name="padding-left">4pt</xsl:attribute>
+        <xsl:attribute name="padding-right">4pt</xsl:attribute>
+        <xsl:attribute name="padding-top">4pt</xsl:attribute>
+        <xsl:attribute name="padding-bottom">4pt</xsl:attribute>
+    </xsl:attribute-set>
+    
+    <!-- Only hairlines as frame and cell borders in tables -->
+    <xsl:param name="table.frame.border.thickness">0.1pt</xsl:param>
+    <xsl:param name="table.cell.border.thickness">0.1pt</xsl:param>
+
+    <!--###################################################
+                             Labels
+        ################################################### -->
+
+    <!-- Label Chapters and Sections (numbering) -->
+    <xsl:param name="chapter.autolabel">1</xsl:param>
+    <xsl:param name="section.autolabel" select="1"/>
+    <xsl:param name="section.label.includes.component.label" select="1"/>
+
+    <!-- Label only Sections up to level 2 -->
+    <xsl:param name="local.l10n.xml" select="document('')"/>
+    <l:i18n xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0">
+        <l:l10n language="en">
+            <l:context name="title-numbered">
+                <l:template name="sect3" text="%t"/>
+                <l:template name="sect4" text="%t"/>
+                <l:template name="sect5" text="%t"/>
+            </l:context>
+            <l:context name="section-xref-numbered">
+                <l:template name="sect3" text="the section called %t"/>
+                <l:template name="sect4" text="the section called %t"/>
+                <l:template name="sect5" text="the section called %t"/>
+            </l:context>
+        </l:l10n>
+    </l:i18n>
+    
+    <!--###################################################
+                             Titles
+        ################################################### -->
+    
+    <!-- Chapter title size -->
+    <xsl:attribute-set name="chapter.titlepage.recto.style">
+        <xsl:attribute name="text-align">left</xsl:attribute>
+        <xsl:attribute name="font-weight">bold</xsl:attribute>
+        <xsl:attribute name="font-size">
+            <xsl:value-of select="$body.font.master * 1.8"/>
+            <xsl:text>pt</xsl:text>
+        </xsl:attribute>
+    </xsl:attribute-set>
+
+    <!-- Why is the font-size for chapters hardcoded in the XSL FO templates? 
+        Let's remove it, so this sucker can use our attribute-set only... -->
+    <xsl:template match="title" mode="chapter.titlepage.recto.auto.mode">
+        <fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format"
+            xsl:use-attribute-sets="chapter.titlepage.recto.style">
+            <xsl:call-template name="component.title">
+                <xsl:with-param name="node" select="ancestor-or-self::chapter[1]"/>
+            </xsl:call-template>
+        </fo:block>
+    </xsl:template>
+    
+    <!-- Sections 1, 2 and 3 titles have a small bump factor and padding -->
+    <xsl:attribute-set name="section.title.level1.properties">
+        <xsl:attribute name="space-before.optimum">0.8em</xsl:attribute>
+        <xsl:attribute name="space-before.minimum">0.8em</xsl:attribute>
+        <xsl:attribute name="space-before.maximum">0.8em</xsl:attribute>
+        <xsl:attribute name="font-size">
+            <xsl:value-of select="$body.font.master * 1.5"/>
+            <xsl:text>pt</xsl:text>
+        </xsl:attribute>
+        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
+    </xsl:attribute-set>
+    <xsl:attribute-set name="section.title.level2.properties">
+        <xsl:attribute name="space-before.optimum">0.6em</xsl:attribute>
+        <xsl:attribute name="space-before.minimum">0.6em</xsl:attribute>
+        <xsl:attribute name="space-before.maximum">0.6em</xsl:attribute>
+        <xsl:attribute name="font-size">
+            <xsl:value-of select="$body.font.master * 1.25"/>
+            <xsl:text>pt</xsl:text>
+        </xsl:attribute>
+        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
+    </xsl:attribute-set>
+    <xsl:attribute-set name="section.title.level3.properties">
+        <xsl:attribute name="space-before.optimum">0.4em</xsl:attribute>
+        <xsl:attribute name="space-before.minimum">0.4em</xsl:attribute>
+        <xsl:attribute name="space-before.maximum">0.4em</xsl:attribute>
+        <xsl:attribute name="font-size">
+            <xsl:value-of select="$body.font.master * 1.0"/>
+            <xsl:text>pt</xsl:text>
+        </xsl:attribute>
+        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
+    </xsl:attribute-set>
+
+    <!-- Titles of formal objects (tables, examples, ...) -->
+    <xsl:attribute-set name="formal.title.properties" use-attribute-sets="normal.para.spacing">
+        <xsl:attribute name="font-weight">bold</xsl:attribute>
+        <xsl:attribute name="font-size">
+            <xsl:value-of select="$body.font.master"/>
+            <xsl:text>pt</xsl:text>
+        </xsl:attribute>
+        <xsl:attribute name="hyphenate">false</xsl:attribute>
+        <xsl:attribute name="space-after.minimum">0.4em</xsl:attribute>
+        <xsl:attribute name="space-after.optimum">0.6em</xsl:attribute>
+        <xsl:attribute name="space-after.maximum">0.8em</xsl:attribute>
+    </xsl:attribute-set>
+
+    <!--###################################################
+                          Programlistings
+        ################################################### -->
+    
+    <!-- Verbatim text formatting (programlistings) -->
+    <xsl:attribute-set name="verbatim.properties">
+        <xsl:attribute name="space-before.minimum">1em</xsl:attribute>
+        <xsl:attribute name="space-before.optimum">1em</xsl:attribute>
+        <xsl:attribute name="space-before.maximum">1em</xsl:attribute>
+        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
+        <xsl:attribute name="border-color">#444444</xsl:attribute>
+        <xsl:attribute name="border-style">solid</xsl:attribute>
+        <xsl:attribute name="border-width">0.1pt</xsl:attribute>
+        <xsl:attribute name="padding-top">0.5em</xsl:attribute>
+        <xsl:attribute name="padding-left">0.5em</xsl:attribute>
+        <xsl:attribute name="padding-right">0.5em</xsl:attribute>
+        <xsl:attribute name="padding-bottom">0.5em</xsl:attribute>
+        <xsl:attribute name="margin-left">0.5em</xsl:attribute>
+        <xsl:attribute name="margin-right">0.5em</xsl:attribute>
+    </xsl:attribute-set>
+
+    <!-- Shade (background) programlistings -->
+    <xsl:param name="shade.verbatim">1</xsl:param>
+    <xsl:attribute-set name="shade.verbatim.style">
+        <xsl:attribute name="background-color">#F0F0F0</xsl:attribute>
+    </xsl:attribute-set>
+
+    <!--###################################################
+                             Callouts
+        ################################################### -->
+
+    <!-- We want to use callouts... -->
+    <xsl:param name="callout.extensions">1</xsl:param>
+
+    <!-- Place callout bullets at this column in programmlisting.-->
+    <xsl:param name="callout.defaultcolumn">90</xsl:param>
+
+    <!--
+        No, don't use crappy graphics for the callout bullets. This setting
+        enables some weird Unicode rendering for some fancy bullet points
+        in callouts. By default, this can only count to 10 and produces
+        strange results if you ever have more than 10 callouts for one
+        programlisting. We will fix that next.
+    -->
+    <xsl:param name="callout.graphics">0</xsl:param>
+
+    <!--
+        Again, fun with DocBook XSL: The callout bullets are rendered in
+        two places: In the programlisting itself and in the list below
+        the listing, with the actual callout text. The rendering in the
+        programlisting is some XSL transformer extension (e.g. a Saxon
+        extension), so we can't change that without messing with the
+        extensions. We only can turn it off by setting this limit to
+        zero, then, a simple bracket style like "(3)" and "(4)" will
+        be used in the programlisting.
+    -->
+    <xsl:param name="callout.unicode.number.limit" select="'0'"></xsl:param>
+
+    <!--
+        The callout bullets in the actual callout list will be rendered
+        with an XSL FO template. The default template is broken: limited to 10
+        nice looking Unicode bullet points and then it doesn't print anything,
+        the fallback doesn't work. We implement our own template, which is not
+        as complicated, more ugly, but works. As always, function is more
+        important than form.
+    -->
+    <xsl:template name="callout-bug">
+        <xsl:param name="conum" select='1'/>
+        <fo:inline
+            color="black"
+            padding-top="0.1em"
+            padding-bottom="0.1em"
+            padding-start="0.2em"
+            padding-end="0.2em"
+            baseline-shift="0.1em"
+            font-family="{$monospace.font.family}"
+            font-weight="bold"
+            font-size="75%">
+            <xsl:text>(</xsl:text>
+            <xsl:value-of select="$conum"/>
+            <xsl:text>)</xsl:text>
+        </fo:inline>
+
+    </xsl:template>
+
+    <!--###################################################
+                              Misc
+        ################################################### -->
+
+    <!-- Correct placement of titles for figures and examples. -->
+    <xsl:param name="formal.title.placement">
+        figure after
+        example before
+        equation before
+        table before
+        procedure before
+    </xsl:param>
+    
+    <!-- Format Variable Lists as Blocks (prevents horizontal overflow). -->
+    <xsl:param name="variablelist.as.blocks">1</xsl:param>
+
+    <!-- The horrible list spacing problems, this is much better. -->
+    <xsl:attribute-set name="list.block.spacing">
+        <xsl:attribute name="space-before.optimum">0.8em</xsl:attribute>
+        <xsl:attribute name="space-before.minimum">0.8em</xsl:attribute>
+        <xsl:attribute name="space-before.maximum">0.8em</xsl:attribute>
+        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
+    </xsl:attribute-set>
+
+    <!-- Newer DocBook XSL apparently thinks that some sections are by
+         default "draft" status, and this idiotic thing is by default
+         also set to "maybe", so it spits out a lot of errors with the
+         latest FOP as the XSL/FO styles have references to some draft
+         watermarks, which you actually don't want in the first place.
+         Turn this crap off. If you have to work with the "status"
+         attribute, don't.
+    -->
+    <xsl:param name="draft.mode" select="'no'"/>
+
+</xsl:stylesheet>

Deleted: trunk/HibernateExt/validator/doc/reference/en/styles/html.css
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/doc/reference/en/styles/html.css	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/doc/reference/en/styles/html.css	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,97 +0,0 @@
-A {
-    color: #003399;
-}
-
-A:active {
-    color: #003399;
-}
-
-A:visited {
-    color: #888888;
-}
-
-P, OL, UL, LI, DL, DT, DD, BLOCKQUOTE {
-    color: #000000;
-}
-
-TD, TH, SPAN {
-    color: #000000;
-}
-
-BLOCKQUOTE {
-    margin-right: 0px;
-}
-
-
-H1, H2, H3, H4, H5, H6    {
-    color: #000000;
-    font-weight:500;
-    margin-top:10px;
-    padding-top:15px;
-}
-
-TABLE  {
-    border-collapse: collapse;
-    border-spacing:0;
-    border: 1px thin black;
-    empty-cells: hide;
-}
-
-TD  {
-    padding: 4pt;
-}
-
-H1 { font-size: 150%; }
-H2 { font-size: 140%; }
-H3 { font-size: 110%; font-weight: bold; }
-H4 { font-size: 110%; font-weight: bold;}
-H5 { font-size: 100%; font-style: italic; }
-H6 { font-size: 100%; font-style: italic; }
-
-TT {
-font-size: 90%;
-    font-family: "Courier New", Courier, monospace;
-    color: #000000;
-}
-
-PRE {
-font-size: 100%;
-    padding: 5px;
-    border-style: solid;
-    border-width: 1px;
-    border-color: #CCCCCC;
-    background-color: #F4F4F4;
-}
-
-UL, OL, LI {
-    list-style: disc;
-}
-
-HR  {
-    width: 100%;
-    height: 1px;
-    background-color: #CCCCCC;
-    border-width: 0px;
-    padding: 0px;
-    color: #CCCCCC;
-}
-
-.variablelist { 
-    padding-top: 10; 
-    padding-bottom:10; 
-    margin:0;
-}
-
-.itemizedlist, UL { 
-    padding-top: 0; 
-    padding-bottom:0; 
-    margin:0; 
-}
-
-.term { 
-    font-weight:bold;
-}
-
-
-
-    

Copied: trunk/HibernateExt/validator/doc/reference/en/styles/html.css (from rev 11279, branches/Branch_3_2/HibernateExt/validator/doc/reference/en/styles/html.css)
===================================================================
--- trunk/HibernateExt/validator/doc/reference/en/styles/html.css	                        (rev 0)
+++ trunk/HibernateExt/validator/doc/reference/en/styles/html.css	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,97 @@
+A {
+    color: #003399;
+}
+
+A:active {
+    color: #003399;
+}
+
+A:visited {
+    color: #888888;
+}
+
+P, OL, UL, LI, DL, DT, DD, BLOCKQUOTE {
+    color: #000000;
+}
+
+TD, TH, SPAN {
+    color: #000000;
+}
+
+BLOCKQUOTE {
+    margin-right: 0px;
+}
+
+
+H1, H2, H3, H4, H5, H6    {
+    color: #000000;
+    font-weight:500;
+    margin-top:10px;
+    padding-top:15px;
+}
+
+TABLE  {
+    border-collapse: collapse;
+    border-spacing:0;
+    border: 1px thin black;
+    empty-cells: hide;
+}
+
+TD  {
+    padding: 4pt;
+}
+
+H1 { font-size: 150%; }
+H2 { font-size: 140%; }
+H3 { font-size: 110%; font-weight: bold; }
+H4 { font-size: 110%; font-weight: bold;}
+H5 { font-size: 100%; font-style: italic; }
+H6 { font-size: 100%; font-style: italic; }
+
+TT {
+font-size: 90%;
+    font-family: "Courier New", Courier, monospace;
+    color: #000000;
+}
+
+PRE {
+font-size: 100%;
+    padding: 5px;
+    border-style: solid;
+    border-width: 1px;
+    border-color: #CCCCCC;
+    background-color: #F4F4F4;
+}
+
+UL, OL, LI {
+    list-style: disc;
+}
+
+HR  {
+    width: 100%;
+    height: 1px;
+    background-color: #CCCCCC;
+    border-width: 0px;
+    padding: 0px;
+    color: #CCCCCC;
+}
+
+.variablelist { 
+    padding-top: 10; 
+    padding-bottom:10; 
+    margin:0;
+}
+
+.itemizedlist, UL { 
+    padding-top: 0; 
+    padding-bottom:0; 
+    margin:0; 
+}
+
+.term { 
+    font-weight:bold;
+}
+
+
+
+    

Deleted: trunk/HibernateExt/validator/doc/reference/en/styles/html.xsl
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/doc/reference/en/styles/html.xsl	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/doc/reference/en/styles/html.xsl	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,84 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
-
-    This is the XSL HTML configuration file for the Hibernate
-    Reference Documentation.
-
-    It took me days to figure out this stuff and fix most of
-    the obvious bugs in the DocBook XSL distribution. Some of
-    the workarounds might not be appropriate with a newer version
-    of DocBook XSL. This file is released as part of Hibernate,
-    hence LGPL licensed.
-
-    christian at hibernate.org
--->
-
-<!DOCTYPE xsl:stylesheet [
-    <!ENTITY db_xsl_path        "../../../../../../Hibernate3/doc/reference/support/docbook-xsl/">
-]>
-
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                version="1.0"
-                xmlns="http://www.w3.org/TR/xhtml1/transitional"
-                exclude-result-prefixes="#default">
-                
-<xsl:import href="&db_xsl_path;/html/docbook.xsl"/>
-
-<!--###################################################
-                     HTML Settings
-    ################################################### -->   
-
-    <xsl:param name="html.stylesheet">../shared/css/html.css</xsl:param>
-
-    <!-- These extensions are required for table printing and other stuff -->
-    <xsl:param name="use.extensions">1</xsl:param>
-    <xsl:param name="tablecolumns.extension">0</xsl:param>
-    <xsl:param name="callout.extensions">1</xsl:param>
-    <xsl:param name="graphicsize.extension">0</xsl:param>
-
-<!--###################################################
-                      Table Of Contents
-    ################################################### -->   
-
-    <!-- Generate the TOCs for named components only -->
-    <xsl:param name="generate.toc">
-        book   toc
-    </xsl:param>
-    
-    <!-- Show only Sections up to level 3 in the TOCs -->
-    <xsl:param name="toc.section.depth">3</xsl:param>
-    
-<!--###################################################
-                         Labels
-    ################################################### -->   
-
-    <!-- Label Chapters and Sections (numbering) -->
-    <xsl:param name="chapter.autolabel">1</xsl:param>
-    <xsl:param name="section.autolabel" select="1"/>
-    <xsl:param name="section.label.includes.component.label" select="1"/>
-
-<!--###################################################
-                         Callouts
-    ################################################### -->
-
-    <!-- Don't use graphics, use a simple number style -->
-    <xsl:param name="callout.graphics">0</xsl:param>
-
-    <!-- Place callout marks at this column in annotated areas -->
-    <xsl:param name="callout.defaultcolumn">90</xsl:param>
-
-<!--###################################################
-                          Misc
-    ################################################### -->   
-
-    <!-- Placement of titles -->
-    <xsl:param name="formal.title.placement">
-        figure after
-        example before
-        equation before
-        table before
-        procedure before
-    </xsl:param>    
-    
-</xsl:stylesheet>

Copied: trunk/HibernateExt/validator/doc/reference/en/styles/html.xsl (from rev 11279, branches/Branch_3_2/HibernateExt/validator/doc/reference/en/styles/html.xsl)
===================================================================
--- trunk/HibernateExt/validator/doc/reference/en/styles/html.xsl	                        (rev 0)
+++ trunk/HibernateExt/validator/doc/reference/en/styles/html.xsl	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,84 @@
+<?xml version="1.0"?>
+
+<!--
+
+    This is the XSL HTML configuration file for the Hibernate
+    Reference Documentation.
+
+    It took me days to figure out this stuff and fix most of
+    the obvious bugs in the DocBook XSL distribution. Some of
+    the workarounds might not be appropriate with a newer version
+    of DocBook XSL. This file is released as part of Hibernate,
+    hence LGPL licensed.
+
+    christian at hibernate.org
+-->
+
+<!DOCTYPE xsl:stylesheet [
+    <!ENTITY db_xsl_path        "../../../../../../Hibernate3/doc/reference/support/docbook-xsl/">
+]>
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+                version="1.0"
+                xmlns="http://www.w3.org/TR/xhtml1/transitional"
+                exclude-result-prefixes="#default">
+                
+<xsl:import href="&db_xsl_path;/html/docbook.xsl"/>
+
+<!--###################################################
+                     HTML Settings
+    ################################################### -->   
+
+    <xsl:param name="html.stylesheet">../shared/css/html.css</xsl:param>
+
+    <!-- These extensions are required for table printing and other stuff -->
+    <xsl:param name="use.extensions">1</xsl:param>
+    <xsl:param name="tablecolumns.extension">0</xsl:param>
+    <xsl:param name="callout.extensions">1</xsl:param>
+    <xsl:param name="graphicsize.extension">0</xsl:param>
+
+<!--###################################################
+                      Table Of Contents
+    ################################################### -->   
+
+    <!-- Generate the TOCs for named components only -->
+    <xsl:param name="generate.toc">
+        book   toc
+    </xsl:param>
+    
+    <!-- Show only Sections up to level 3 in the TOCs -->
+    <xsl:param name="toc.section.depth">3</xsl:param>
+    
+<!--###################################################
+                         Labels
+    ################################################### -->   
+
+    <!-- Label Chapters and Sections (numbering) -->
+    <xsl:param name="chapter.autolabel">1</xsl:param>
+    <xsl:param name="section.autolabel" select="1"/>
+    <xsl:param name="section.label.includes.component.label" select="1"/>
+
+<!--###################################################
+                         Callouts
+    ################################################### -->
+
+    <!-- Don't use graphics, use a simple number style -->
+    <xsl:param name="callout.graphics">0</xsl:param>
+
+    <!-- Place callout marks at this column in annotated areas -->
+    <xsl:param name="callout.defaultcolumn">90</xsl:param>
+
+<!--###################################################
+                          Misc
+    ################################################### -->   
+
+    <!-- Placement of titles -->
+    <xsl:param name="formal.title.placement">
+        figure after
+        example before
+        equation before
+        table before
+        procedure before
+    </xsl:param>    
+    
+</xsl:stylesheet>

Deleted: trunk/HibernateExt/validator/doc/reference/en/styles/html_chunk.xsl
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/doc/reference/en/styles/html_chunk.xsl	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/doc/reference/en/styles/html_chunk.xsl	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,86 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
-
-    This is the XSL HTML configuration file for the Hibernate
-    Reference Documentation.
-
-    It took me days to figure out this stuff and fix most of
-    the obvious bugs in the DocBook XSL distribution. Some of
-    the workarounds might not be appropriate with a newer version
-    of DocBook XSL. This file is released as part of Hibernate,
-    hence LGPL licensed.
-
-    christian at hibernate.org
--->
-
-<!DOCTYPE xsl:stylesheet [
-    <!ENTITY db_xsl_path        "../../../../../../Hibernate3/doc/reference/support/docbook-xsl/">
-]>
-
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                version="1.0"
-                xmlns="http://www.w3.org/TR/xhtml1/transitional"
-                exclude-result-prefixes="#default">
-                
-<xsl:import href="&db_xsl_path;/html/chunk.xsl"/>
-
-<!--###################################################
-                     HTML Settings
-    ################################################### -->   
-
-    <xsl:param name="chunk.section.depth">'5'</xsl:param>
-    <xsl:param name="use.id.as.filename">'1'</xsl:param>
-    <xsl:param name="html.stylesheet">../shared/css/html.css</xsl:param>
-
-    <!-- These extensions are required for table printing and other stuff -->
-    <xsl:param name="use.extensions">1</xsl:param>
-    <xsl:param name="tablecolumns.extension">0</xsl:param>
-    <xsl:param name="callout.extensions">1</xsl:param>
-    <xsl:param name="graphicsize.extension">0</xsl:param>
-    
-<!--###################################################
-                      Table Of Contents
-    ################################################### -->   
-
-    <!-- Generate the TOCs for named components only -->
-    <xsl:param name="generate.toc">
-        book   toc
-    </xsl:param>
-    
-    <!-- Show only Sections up to level 3 in the TOCs -->
-    <xsl:param name="toc.section.depth">3</xsl:param>
-
-<!--###################################################
-                         Labels
-    ################################################### -->   
-
-    <!-- Label Chapters and Sections (numbering) -->
-    <xsl:param name="chapter.autolabel">1</xsl:param>
-    <xsl:param name="section.autolabel" select="1"/>
-    <xsl:param name="section.label.includes.component.label" select="1"/>
-                
-<!--###################################################
-                         Callouts
-    ################################################### -->   
-
-    <!-- Don't use graphics, use a simple number style -->
-    <xsl:param name="callout.graphics">0</xsl:param>
-
-    <!-- Place callout marks at this column in annotated areas -->
-    <xsl:param name="callout.defaultcolumn">90</xsl:param>
-
-<!--###################################################
-                          Misc
-    ################################################### -->   
-
-    <!-- Placement of titles -->
-    <xsl:param name="formal.title.placement">
-        figure after
-        example before
-        equation before
-        table before
-        procedure before
-    </xsl:param>    
-    
-</xsl:stylesheet>

Copied: trunk/HibernateExt/validator/doc/reference/en/styles/html_chunk.xsl (from rev 11279, branches/Branch_3_2/HibernateExt/validator/doc/reference/en/styles/html_chunk.xsl)
===================================================================
--- trunk/HibernateExt/validator/doc/reference/en/styles/html_chunk.xsl	                        (rev 0)
+++ trunk/HibernateExt/validator/doc/reference/en/styles/html_chunk.xsl	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,86 @@
+<?xml version="1.0"?>
+
+<!--
+
+    This is the XSL HTML configuration file for the Hibernate
+    Reference Documentation.
+
+    It took me days to figure out this stuff and fix most of
+    the obvious bugs in the DocBook XSL distribution. Some of
+    the workarounds might not be appropriate with a newer version
+    of DocBook XSL. This file is released as part of Hibernate,
+    hence LGPL licensed.
+
+    christian at hibernate.org
+-->
+
+<!DOCTYPE xsl:stylesheet [
+    <!ENTITY db_xsl_path        "../../../../../../Hibernate3/doc/reference/support/docbook-xsl/">
+]>
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+                version="1.0"
+                xmlns="http://www.w3.org/TR/xhtml1/transitional"
+                exclude-result-prefixes="#default">
+                
+<xsl:import href="&db_xsl_path;/html/chunk.xsl"/>
+
+<!--###################################################
+                     HTML Settings
+    ################################################### -->   
+
+    <xsl:param name="chunk.section.depth">'5'</xsl:param>
+    <xsl:param name="use.id.as.filename">'1'</xsl:param>
+    <xsl:param name="html.stylesheet">../shared/css/html.css</xsl:param>
+
+    <!-- These extensions are required for table printing and other stuff -->
+    <xsl:param name="use.extensions">1</xsl:param>
+    <xsl:param name="tablecolumns.extension">0</xsl:param>
+    <xsl:param name="callout.extensions">1</xsl:param>
+    <xsl:param name="graphicsize.extension">0</xsl:param>
+    
+<!--###################################################
+                      Table Of Contents
+    ################################################### -->   
+
+    <!-- Generate the TOCs for named components only -->
+    <xsl:param name="generate.toc">
+        book   toc
+    </xsl:param>
+    
+    <!-- Show only Sections up to level 3 in the TOCs -->
+    <xsl:param name="toc.section.depth">3</xsl:param>
+
+<!--###################################################
+                         Labels
+    ################################################### -->   
+
+    <!-- Label Chapters and Sections (numbering) -->
+    <xsl:param name="chapter.autolabel">1</xsl:param>
+    <xsl:param name="section.autolabel" select="1"/>
+    <xsl:param name="section.label.includes.component.label" select="1"/>
+                
+<!--###################################################
+                         Callouts
+    ################################################### -->   
+
+    <!-- Don't use graphics, use a simple number style -->
+    <xsl:param name="callout.graphics">0</xsl:param>
+
+    <!-- Place callout marks at this column in annotated areas -->
+    <xsl:param name="callout.defaultcolumn">90</xsl:param>
+
+<!--###################################################
+                          Misc
+    ################################################### -->   
+
+    <!-- Placement of titles -->
+    <xsl:param name="formal.title.placement">
+        figure after
+        example before
+        equation before
+        table before
+        procedure before
+    </xsl:param>    
+    
+</xsl:stylesheet>

Copied: trunk/HibernateExt/validator/jdbc (from rev 11279, branches/Branch_3_2/HibernateExt/validator/jdbc)

Deleted: trunk/HibernateExt/validator/jdbc/hsqldb.jar
===================================================================
(Binary files differ)

Copied: trunk/HibernateExt/validator/jdbc/hsqldb.jar (from rev 11279, branches/Branch_3_2/HibernateExt/validator/jdbc/hsqldb.jar)
===================================================================
(Binary files differ)

Deleted: trunk/HibernateExt/validator/lgpl.txt
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/lgpl.txt	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/lgpl.txt	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,504 +0,0 @@
-		  GNU LESSER GENERAL PUBLIC LICENSE
-		       Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
-     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL.  It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
-			    Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
-  This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it.  You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
-  When we speak of free software, we are referring to freedom of use,
-not price.  Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
-  To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights.  These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
-  For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you.  You must make sure that they, too, receive or can get the source
-code.  If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it.  And you must show them these terms so they know their rights.
-
-  We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
-  To protect each distributor, we want to make it very clear that
-there is no warranty for the free library.  Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-
-  Finally, software patents pose a constant threat to the existence of
-any free program.  We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder.  Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
-  Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License.  This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License.  We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
-  When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library.  The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom.  The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
-  We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License.  It also provides other free software developers Less
-of an advantage over competing non-free programs.  These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries.  However, the Lesser license provides advantages in certain
-special circumstances.
-
-  For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard.  To achieve this, non-free programs must be
-allowed to use the library.  A more frequent case is that a free
-library does the same job as widely used non-free libraries.  In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
-  In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software.  For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
-  Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.  Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library".  The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-
-		  GNU LESSER GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
-  A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
-  The "Library", below, refers to any such software library or work
-which has been distributed under these terms.  A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language.  (Hereinafter, translation is
-included without limitation in the term "modification".)
-
-  "Source code" for a work means the preferred form of the work for
-making modifications to it.  For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
-  Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it).  Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-  
-  1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
-  You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
-  2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) The modified work must itself be a software library.
-
-    b) You must cause the files modified to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    c) You must cause the whole of the work to be licensed at no
-    charge to all third parties under the terms of this License.
-
-    d) If a facility in the modified Library refers to a function or a
-    table of data to be supplied by an application program that uses
-    the facility, other than as an argument passed when the facility
-    is invoked, then you must make a good faith effort to ensure that,
-    in the event an application does not supply such function or
-    table, the facility still operates, and performs whatever part of
-    its purpose remains meaningful.
-
-    (For example, a function in a library to compute square roots has
-    a purpose that is entirely well-defined independent of the
-    application.  Therefore, Subsection 2d requires that any
-    application-supplied function or table used by this function must
-    be optional: if the application does not supply it, the square
-    root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library.  To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License.  (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.)  Do not make any other change in
-these notices.
-
-  Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
-  This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
-  4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
-  If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library".  Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
-  However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library".  The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
-  When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library.  The
-threshold for this to be true is not precisely defined by law.
-
-  If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work.  (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
-  Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
-  6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
-  You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License.  You must supply a copy of this License.  If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License.  Also, you must do one
-of these things:
-
-    a) Accompany the work with the complete corresponding
-    machine-readable source code for the Library including whatever
-    changes were used in the work (which must be distributed under
-    Sections 1 and 2 above); and, if the work is an executable linked
-    with the Library, with the complete machine-readable "work that
-    uses the Library", as object code and/or source code, so that the
-    user can modify the Library and then relink to produce a modified
-    executable containing the modified Library.  (It is understood
-    that the user who changes the contents of definitions files in the
-    Library will not necessarily be able to recompile the application
-    to use the modified definitions.)
-
-    b) Use a suitable shared library mechanism for linking with the
-    Library.  A suitable mechanism is one that (1) uses at run time a
-    copy of the library already present on the user's computer system,
-    rather than copying library functions into the executable, and (2)
-    will operate properly with a modified version of the library, if
-    the user installs one, as long as the modified version is
-    interface-compatible with the version that the work was made with.
-
-    c) Accompany the work with a written offer, valid for at
-    least three years, to give the same user the materials
-    specified in Subsection 6a, above, for a charge no more
-    than the cost of performing this distribution.
-
-    d) If distribution of the work is made by offering access to copy
-    from a designated place, offer equivalent access to copy the above
-    specified materials from the same place.
-
-    e) Verify that the user has already received a copy of these
-    materials or that you have already sent this user a copy.
-
-  For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it.  However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
-  It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system.  Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
-  7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
-    a) Accompany the combined library with a copy of the same work
-    based on the Library, uncombined with any other library
-    facilities.  This must be distributed under the terms of the
-    Sections above.
-
-    b) Give prominent notice with the combined library of the fact
-    that part of it is a work based on the Library, and explaining
-    where to find the accompanying uncombined form of the same work.
-
-  8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License.  Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License.  However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
-  9. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Library or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
-  10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-
-  11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded.  In such case, this License incorporates the limitation as if
-written in the body of this License.
-
-  13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation.  If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
-  14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission.  For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this.  Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
-			    NO WARRANTY
-
-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
-		     END OF TERMS AND CONDITIONS
-		     
-           How to Apply These Terms to Your New Libraries
-
-  If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change.  You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
-  To apply these terms, attach the following notices to the library.  It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the library's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the
-  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
-  <signature of Ty Coon>, 1 April 1990
-  Ty Coon, President of Vice
-
-That's all there is to it!
-
-

Copied: trunk/HibernateExt/validator/lgpl.txt (from rev 11279, branches/Branch_3_2/HibernateExt/validator/lgpl.txt)
===================================================================
--- trunk/HibernateExt/validator/lgpl.txt	                        (rev 0)
+++ trunk/HibernateExt/validator/lgpl.txt	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,504 @@
+		  GNU LESSER GENERAL PUBLIC LICENSE
+		       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+		  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+  
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+			    NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+		     
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+

Copied: trunk/HibernateExt/validator/lib (from rev 11279, branches/Branch_3_2/HibernateExt/validator/lib)

Deleted: trunk/HibernateExt/validator/lib/README.txt
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/lib/README.txt	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/lib/README.txt	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,14 +0,0 @@
-Hibernate Commons Annotations dependencies
-==========================================
-
-Core
-====
-hibernate-commons-annotations.jar: required
-hibernate3.jar: required
-hibernate core dependencies: required (see Hibernate Core for more information)
-ejb3-persistence.jar: optional (needed for Java Persistence integration)
-
-Test
-====
-hibernate-annotations.jar: required
-hibernate-entitymanager.jar: required
\ No newline at end of file

Copied: trunk/HibernateExt/validator/lib/README.txt (from rev 11279, branches/Branch_3_2/HibernateExt/validator/lib/README.txt)
===================================================================
--- trunk/HibernateExt/validator/lib/README.txt	                        (rev 0)
+++ trunk/HibernateExt/validator/lib/README.txt	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,14 @@
+Hibernate Commons Annotations dependencies
+==========================================
+
+Core
+====
+hibernate-commons-annotations.jar: required
+hibernate3.jar: required
+hibernate core dependencies: required (see Hibernate Core for more information)
+ejb3-persistence.jar: optional (needed for Java Persistence integration)
+
+Test
+====
+hibernate-annotations.jar: required
+hibernate-entitymanager.jar: required
\ No newline at end of file

Deleted: trunk/HibernateExt/validator/readme.txt
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/readme.txt	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/readme.txt	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,45 +0,0 @@
-Hibernate Validator
-==================================================
-Version: 3.2.2.GA, xx.02.2007
-
-Description
------------
-
-Hibernate Validator aims at defining and checking a domain model level constraints.
-It supports custom constraints definitions as well as full internationalization.
-Annotations are used to define constraints on object level.
-The validation mechanism can be executed in different layers in your application
-without having to duplicate any of these rules (presentation layer,
-data access layer, Database schema).
-
-
-Instructions
-------------
-
-Unzip to installation directory, read doc/reference
-
-
-Contact
-------------
-
-Latest Documentation:
-
-   http://www.hibernate.org
-
-Bug Reports:
-
-   Hibernate JIRA (preferred)
-   hibernate-devel at lists.sourceforge.net
-
-Free Technical Support:
-
-   http://forum.hibernate.org (http://forum.hibernate.org/viewforum.php?f=9)
-
-
-Notes
------------
-
-If you want to contribute, go to http://www.hibernate.org/
-
-This software and its documentation are distributed under the terms of the
-FSF Lesser Gnu Public License (see lgpl.txt).
\ No newline at end of file

Copied: trunk/HibernateExt/validator/readme.txt (from rev 11279, branches/Branch_3_2/HibernateExt/validator/readme.txt)
===================================================================
--- trunk/HibernateExt/validator/readme.txt	                        (rev 0)
+++ trunk/HibernateExt/validator/readme.txt	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,45 @@
+Hibernate Validator
+==================================================
+Version: 3.2.2.GA, xx.02.2007
+
+Description
+-----------
+
+Hibernate Validator aims at defining and checking a domain model level constraints.
+It supports custom constraints definitions as well as full internationalization.
+Annotations are used to define constraints on object level.
+The validation mechanism can be executed in different layers in your application
+without having to duplicate any of these rules (presentation layer,
+data access layer, Database schema).
+
+
+Instructions
+------------
+
+Unzip to installation directory, read doc/reference
+
+
+Contact
+------------
+
+Latest Documentation:
+
+   http://www.hibernate.org
+
+Bug Reports:
+
+   Hibernate JIRA (preferred)
+   hibernate-devel at lists.sourceforge.net
+
+Free Technical Support:
+
+   http://forum.hibernate.org (http://forum.hibernate.org/viewforum.php?f=9)
+
+
+Notes
+-----------
+
+If you want to contribute, go to http://www.hibernate.org/
+
+This software and its documentation are distributed under the terms of the
+FSF Lesser Gnu Public License (see lgpl.txt).
\ No newline at end of file

Copied: trunk/HibernateExt/validator/src (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src)

Copied: trunk/HibernateExt/validator/src/java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java)

Copied: trunk/HibernateExt/validator/src/java/org (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org)

Copied: trunk/HibernateExt/validator/src/java/org/hibernate (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate)

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator)

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/AbstractLuhnValidator.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/AbstractLuhnValidator.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/AbstractLuhnValidator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,40 +0,0 @@
-//$Id: $
-package org.hibernate.validator;
-
-import java.util.List;
-import java.util.ArrayList;
-
-/**
- * Implement the Luhn algorithm (with Luhn key on the last digit)
- * @author Emmanuel Bernard
- */
-public abstract class AbstractLuhnValidator {
-	abstract int multiplicator();
-
-	public boolean isValid(Object value) {
-		if (value == null) return true;
-		if ( ! ( value instanceof String) ) return false;
-		String creditCard = (String) value;
-		char[] chars = creditCard.toCharArray();
-
-		List<Integer> ints = new ArrayList<Integer>();
-		for (char c : chars) {
-			if ( Character.isDigit( c ) ) ints.add( c - '0' );
-		}
-		int length = ints.size();
-		int sum = 0;
-		boolean even = false;
-		for ( int index = length - 1 ; index >= 0 ; index-- ) {
-			int digit = ints.get(index);
-			if  (even) {
-				digit *= multiplicator();
-			}
-			if (digit > 9) {
-				digit = digit / 10 + digit % 10;
-			}
-			sum+= digit;
-			even = !even;
-		}
-		return  sum % 10 == 0;
-	}
-}

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/AbstractLuhnValidator.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/AbstractLuhnValidator.java)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/AbstractLuhnValidator.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/AbstractLuhnValidator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,40 @@
+//$Id: $
+package org.hibernate.validator;
+
+import java.util.List;
+import java.util.ArrayList;
+
+/**
+ * Implement the Luhn algorithm (with Luhn key on the last digit)
+ * @author Emmanuel Bernard
+ */
+public abstract class AbstractLuhnValidator {
+	abstract int multiplicator();
+
+	public boolean isValid(Object value) {
+		if (value == null) return true;
+		if ( ! ( value instanceof String) ) return false;
+		String creditCard = (String) value;
+		char[] chars = creditCard.toCharArray();
+
+		List<Integer> ints = new ArrayList<Integer>();
+		for (char c : chars) {
+			if ( Character.isDigit( c ) ) ints.add( c - '0' );
+		}
+		int length = ints.size();
+		int sum = 0;
+		boolean even = false;
+		for ( int index = length - 1 ; index >= 0 ; index-- ) {
+			int digit = ints.get(index);
+			if  (even) {
+				digit *= multiplicator();
+			}
+			if (digit > 9) {
+				digit = digit / 10 + digit % 10;
+			}
+			sum+= digit;
+			even = !even;
+		}
+		return  sum % 10 == 0;
+	}
+}

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/AssertFalse.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/AssertFalse.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/AssertFalse.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,22 +0,0 @@
-//$Id$
-package org.hibernate.validator;
-
-import java.lang.annotation.Documented;
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.ElementType.METHOD;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * The annotated property has to be false.
- *
- * @author Gavin King
- */
- at Documented
- at ValidatorClass(AssertFalseValidator.class)
- at Target({METHOD, FIELD})
- at Retention(RUNTIME)
-public @interface AssertFalse {
-	String message() default "{validator.assertFalse}";
-}

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/AssertFalse.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/AssertFalse.java)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/AssertFalse.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/AssertFalse.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,22 @@
+//$Id$
+package org.hibernate.validator;
+
+import java.lang.annotation.Documented;
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * The annotated property has to be false.
+ *
+ * @author Gavin King
+ */
+ at Documented
+ at ValidatorClass(AssertFalseValidator.class)
+ at Target({METHOD, FIELD})
+ at Retention(RUNTIME)
+public @interface AssertFalse {
+	String message() default "{validator.assertFalse}";
+}

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/AssertFalseValidator.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/AssertFalseValidator.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/AssertFalseValidator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,21 +0,0 @@
-//$Id$
-package org.hibernate.validator;
-
-import java.io.Serializable;
-
-
-/**
- * Check if a given object is false or not
- *
- * @author Gavin King
- */
-public class AssertFalseValidator implements Validator<AssertFalse>, Serializable {
-
-	public boolean isValid(Object value) {
-		return !(Boolean) value;
-	}
-
-	public void initialize(AssertFalse parameters) {
-	}
-
-}

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/AssertFalseValidator.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/AssertFalseValidator.java)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/AssertFalseValidator.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/AssertFalseValidator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,21 @@
+//$Id$
+package org.hibernate.validator;
+
+import java.io.Serializable;
+
+
+/**
+ * Check if a given object is false or not
+ *
+ * @author Gavin King
+ */
+public class AssertFalseValidator implements Validator<AssertFalse>, Serializable {
+
+	public boolean isValid(Object value) {
+		return !(Boolean) value;
+	}
+
+	public void initialize(AssertFalse parameters) {
+	}
+
+}

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/AssertTrue.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/AssertTrue.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/AssertTrue.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,22 +0,0 @@
-//$Id$
-package org.hibernate.validator;
-
-import java.lang.annotation.Documented;
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.ElementType.METHOD;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * The annotated element has to be true
- *
- * @author Gavin King
- */
- at Documented
- at ValidatorClass(AssertTrueValidator.class)
- at Target({METHOD, FIELD})
- at Retention(RUNTIME)
-public @interface AssertTrue {
-	String message() default "{validator.assertTrue}";
-}

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/AssertTrue.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/AssertTrue.java)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/AssertTrue.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/AssertTrue.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,22 @@
+//$Id$
+package org.hibernate.validator;
+
+import java.lang.annotation.Documented;
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * The annotated element has to be true
+ *
+ * @author Gavin King
+ */
+ at Documented
+ at ValidatorClass(AssertTrueValidator.class)
+ at Target({METHOD, FIELD})
+ at Retention(RUNTIME)
+public @interface AssertTrue {
+	String message() default "{validator.assertTrue}";
+}

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/AssertTrueValidator.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/AssertTrueValidator.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/AssertTrueValidator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,21 +0,0 @@
-//$Id$
-package org.hibernate.validator;
-
-import java.io.Serializable;
-
-
-/**
- * Check whether an element is true or not
- *
- * @author Gavin King
- */
-public class AssertTrueValidator implements Validator<AssertTrue>, Serializable {
-
-	public boolean isValid(Object value) {
-		return (Boolean) value;
-	}
-
-	public void initialize(AssertTrue parameters) {
-	}
-
-}

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/AssertTrueValidator.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/AssertTrueValidator.java)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/AssertTrueValidator.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/AssertTrueValidator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,21 @@
+//$Id$
+package org.hibernate.validator;
+
+import java.io.Serializable;
+
+
+/**
+ * Check whether an element is true or not
+ *
+ * @author Gavin King
+ */
+public class AssertTrueValidator implements Validator<AssertTrue>, Serializable {
+
+	public boolean isValid(Object value) {
+		return (Boolean) value;
+	}
+
+	public void initialize(AssertTrue parameters) {
+	}
+
+}

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/ClassValidator.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/ClassValidator.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/ClassValidator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,756 +0,0 @@
-//$Id$
-package org.hibernate.validator;
-
-import java.beans.Introspector;
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.io.Serializable;
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-import java.util.Set;
-import java.util.StringTokenizer;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.hibernate.AssertionFailure;
-import org.hibernate.Hibernate;
-import org.hibernate.MappingException;
-import org.hibernate.mapping.PersistentClass;
-import org.hibernate.mapping.Property;
-import org.hibernate.mapping.Component;
-import org.hibernate.annotations.common.reflection.Filter;
-import org.hibernate.annotations.common.reflection.ReflectionManager;
-import org.hibernate.annotations.common.reflection.XClass;
-import org.hibernate.annotations.common.reflection.XMember;
-import org.hibernate.annotations.common.reflection.XMethod;
-import org.hibernate.annotations.common.reflection.XProperty;
-import org.hibernate.annotations.common.reflection.java.JavaReflectionManager;
-import org.hibernate.util.IdentitySet;
-import org.hibernate.validator.interpolator.DefaultMessageInterpolatorAggerator;
-
-
-/**
- * Engine that take a bean and check every expressed annotation restrictions
- *
- * @author Gavin King
- * @author Emmanuel Bernard
- */
-public class ClassValidator<T> implements Serializable {
-	//TODO Define magic number
-	private static Log log = LogFactory.getLog( ClassValidator.class );
-	private static final InvalidValue[] EMPTY_INVALID_VALUE_ARRAY = new InvalidValue[]{};
-	private static final String DEFAULT_VALIDATOR_MESSAGE = "org.hibernate.validator.resources.DefaultValidatorMessages";
-	private static final String VALIDATOR_MESSAGE = "ValidatorMessages";
-	private static final Set<Class> INDEXABLE_CLASS = new HashSet<Class>();
-
-	static {
-		INDEXABLE_CLASS.add( Integer.class );
-		INDEXABLE_CLASS.add( Long.class );
-		INDEXABLE_CLASS.add( String.class );
-	}
-
-	static {
-		Version.touch(); //touch version
-	}
-
-	private final Class<T> beanClass;
-	private transient ResourceBundle messageBundle;
-	private transient ResourceBundle defaultMessageBundle;
-	private transient boolean isUserProvidedResourceBundle;
-	private transient ReflectionManager reflectionManager;
-
-	private final transient Map<XClass, ClassValidator> childClassValidators;
-	private transient List<Validator> beanValidators;
-	private transient List<Validator> memberValidators;
-	private transient List<XMember> memberGetters;
-	private transient List<XMember> childGetters;
-	private transient DefaultMessageInterpolatorAggerator defaultInterpolator;
-	private transient MessageInterpolator userInterpolator;
-	private static final Filter GET_ALL_FILTER = new Filter() {
-		public boolean returnStatic() {
-		return true;
-		}
-
-		public boolean returnTransient() {
-		return true;
-		}
-	};
-
-	/**
-	 * create the validator engine for this bean type
-	 */
-	public ClassValidator(Class<T> beanClass) {
-		this( beanClass, (ResourceBundle) null );
-	}
-
-	/**
-	 * create the validator engine for a particular bean class, using a resource bundle
-	 * for message rendering on violation
-	 */
-	public ClassValidator(Class<T> beanClass, ResourceBundle resourceBundle) {
-		this( beanClass, resourceBundle, null, new HashMap<XClass, ClassValidator>(), null );
-	}
-
-	/**
-	 * create the validator engine for a particular bean class, using a custom message interpolator
-	 * for message rendering on violation
-	 */
-	public ClassValidator(Class<T> beanClass, MessageInterpolator interpolator) {
-		this( beanClass, null, interpolator, new HashMap<XClass, ClassValidator>(), null );
-	}
-
-    /**
-     * Not a public API
-     */
-    public ClassValidator(
-			Class<T> beanClass, ResourceBundle resourceBundle, MessageInterpolator interpolator,
-            Map<XClass, ClassValidator> childClassValidators, ReflectionManager reflectionManager
-    ) {
-        this.reflectionManager = reflectionManager != null ? reflectionManager : new JavaReflectionManager();
-        XClass beanXClass = this.reflectionManager.toXClass( beanClass );
-		this.beanClass = beanClass;
-		this.messageBundle = resourceBundle == null ?
-				getDefaultResourceBundle() :
-				resourceBundle;
-		this.defaultMessageBundle = ResourceBundle.getBundle( DEFAULT_VALIDATOR_MESSAGE );
-		this.userInterpolator = interpolator;
-		this.childClassValidators = childClassValidators != null ?
-                childClassValidators :
-                new HashMap<XClass, ClassValidator>();
-		initValidator( beanXClass, this.childClassValidators );
-	}
-
-	@SuppressWarnings("unchecked")
-	protected ClassValidator(
-			XClass beanXClass, ResourceBundle resourceBundle, MessageInterpolator userInterpolator,
-			Map<XClass, ClassValidator> childClassValidators, ReflectionManager reflectionManager
-	) {
-		this.reflectionManager = reflectionManager;
-		this.beanClass = reflectionManager.toClass( beanXClass );
-		this.messageBundle = resourceBundle == null ?
-				getDefaultResourceBundle() :
-				resourceBundle;
-		this.defaultMessageBundle = ResourceBundle.getBundle( DEFAULT_VALIDATOR_MESSAGE );
-		this.userInterpolator = userInterpolator;
-		this.childClassValidators = childClassValidators;
-		initValidator( beanXClass, childClassValidators );
-	}
-
-	private ResourceBundle getDefaultResourceBundle() {
-		ResourceBundle rb;
-		try {
-			//use context class loader as a first citizen
-			ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
-			if ( contextClassLoader == null ) {
-				throw new MissingResourceException( "No context classloader", null, VALIDATOR_MESSAGE );
-			}
-			rb = ResourceBundle.getBundle(
-					VALIDATOR_MESSAGE,
-					Locale.getDefault(),
-					contextClassLoader
-			);
-		}
-		catch (MissingResourceException e) {
-			log.trace( "ResourceBundle " + VALIDATOR_MESSAGE + " not found in thread context classloader" );
-			//then use the Validator Framework classloader
-			try {
-				rb = ResourceBundle.getBundle(
-						VALIDATOR_MESSAGE,
-						Locale.getDefault(),
-						this.getClass().getClassLoader()
-				);
-			}
-			catch (MissingResourceException ee) {
-				log.debug(
-						"ResourceBundle ValidatorMessages not found in Validator classloader. Delegate to " + DEFAULT_VALIDATOR_MESSAGE
-				);
-				//the user did not override the default ValidatorMessages
-				rb = null;
-			}
-		}
-		isUserProvidedResourceBundle = true;
-		return rb;
-	}
-
-	private void initValidator(
-			XClass xClass, Map<XClass, ClassValidator> childClassValidators
-	) {
-		beanValidators = new ArrayList<Validator>();
-		memberValidators = new ArrayList<Validator>();
-		memberGetters = new ArrayList<XMember>();
-		childGetters = new ArrayList<XMember>();
-		defaultInterpolator = new DefaultMessageInterpolatorAggerator();
-		defaultInterpolator.initialize( messageBundle, defaultMessageBundle );
-
-		//build the class hierarchy to look for members in
-		childClassValidators.put( xClass, this );
-		Collection<XClass> classes = new HashSet<XClass>();
-		addSuperClassesAndInterfaces( xClass, classes );
-		for ( XClass currentClass : classes ) {
-			Annotation[] classAnnotations = currentClass.getAnnotations();
-			for ( int i = 0; i < classAnnotations.length ; i++ ) {
-				Annotation classAnnotation = classAnnotations[i];
-				Validator beanValidator = createValidator( classAnnotation );
-				if ( beanValidator != null ) beanValidators.add( beanValidator );
-				handleAggregateAnnotations(classAnnotation, null);
-			}
-		}
-
-		//Check on all selected classes
-		for ( XClass currClass : classes ) {
-			List<XMethod> methods = currClass.getDeclaredMethods();
-			for ( XMethod method : methods ) {
-				createMemberValidator( method );
-				createChildValidator( method );
-			}
-
-			List<XProperty> fields = currClass.getDeclaredProperties(
-					"field", GET_ALL_FILTER
-			);
-			for ( XProperty field : fields ) {
-				createMemberValidator( field );
-				createChildValidator( field );
-			}
-		}
-	}
-
-	private void addSuperClassesAndInterfaces(XClass clazz, Collection<XClass> classes) {
-		for ( XClass currClass = clazz; currClass != null ; currClass = currClass.getSuperclass() ) {
-			if ( ! classes.add( currClass ) ) return;
-			XClass[] interfaces = currClass.getInterfaces();
-			for ( XClass interf : interfaces ) {
-				addSuperClassesAndInterfaces( interf, classes );
-			}
-		}
-	}
-
-	private boolean handleAggregateAnnotations(Annotation annotation, XMember member) {
-		Object[] values;
-		try {
-			Method valueMethod = annotation.getClass().getMethod( "value" );
-			if ( valueMethod.getReturnType().isArray() ) {
-				values = (Object[]) valueMethod.invoke( annotation );
-			}
-			else {
-				return false;
-			}
-		}
-		catch (NoSuchMethodException e) {
-			return false;
-		}
-		catch (Exception e) {
-			throw new IllegalStateException( e );
-		}
-
-		boolean validatorPresent = false;
-		for ( Object value : values ) {
-			if ( value instanceof Annotation ) {
-				annotation = (Annotation) value;
-				Validator validator = createValidator( annotation );
-				if ( validator != null ) {
-					if ( member != null ) {
-						//member
-						memberValidators.add( validator );
-						setAccessible( member );
-						memberGetters.add( member );
-					}
-					else {
-						//bean
-						beanValidators.add( validator );
-					}
-					validatorPresent = true;
-				}
-			}
-		}
-		return validatorPresent;
-	}
-
-	@SuppressWarnings("unchecked")
-	private void createChildValidator( XMember member) {
-		if ( member.isAnnotationPresent( Valid.class ) ) {
-			setAccessible( member );
-			childGetters.add( member );
-			XClass clazz;
-			if ( member.isCollection() || member.isArray() ) {
-				clazz = member.getElementClass();
-			}
-			else {
-				clazz = member.getType();
-			}
-			if ( !childClassValidators.containsKey( clazz ) ) {
-				//ClassValidator added by side effect (added to childClassValidators during CV construction)
-				new ClassValidator( clazz, messageBundle, userInterpolator, childClassValidators, reflectionManager );
-			}
-		}
-	}
-
-	private void createMemberValidator(XMember member) {
-		boolean validatorPresent = false;
-		Annotation[] memberAnnotations = member.getAnnotations();
-		for ( Annotation methodAnnotation : memberAnnotations ) {
-			Validator propertyValidator = createValidator( methodAnnotation );
-			if ( propertyValidator != null ) {
-				memberValidators.add( propertyValidator );
-				setAccessible( member );
-				memberGetters.add( member );
-				validatorPresent = true;
-			}
-			boolean agrValidPresent = handleAggregateAnnotations( methodAnnotation, member );
-			validatorPresent = validatorPresent || agrValidPresent;
-		}
-		if ( validatorPresent && !member.isTypeResolved() ) {
-			log.warn( "Original type of property " + member + " is unbound and has been approximated." );
-		}
-	}
-
-	private static void setAccessible(XMember member) {
-		if ( !Modifier.isPublic( member.getModifiers() ) ) {
-			member.setAccessible( true );
-		}
-	}
-
-	@SuppressWarnings("unchecked")
-	private Validator createValidator(Annotation annotation) {
-		try {
-			ValidatorClass validatorClass = annotation.annotationType().getAnnotation( ValidatorClass.class );
-			if ( validatorClass == null ) {
-				return null;
-			}
-			Validator beanValidator = validatorClass.value().newInstance();
-			beanValidator.initialize( annotation );
-			defaultInterpolator.addInterpolator( annotation, beanValidator );
-			return beanValidator;
-		}
-		catch (Exception e) {
-			throw new IllegalArgumentException( "could not instantiate ClassValidator", e );
-		}
-	}
-
-	public boolean hasValidationRules() {
-		return beanValidators.size() != 0 || memberValidators.size() != 0;
-	}
-
-	/**
-	 * apply constraints on a bean instance and return all the failures.
-	 * if <code>bean</code> is null, an empty array is returned
-	 */
-	public InvalidValue[] getInvalidValues(T bean) {
-		return this.getInvalidValues( bean, new IdentitySet() );
-	}
-
-	/**
-	 * apply constraints on a bean instance and return all the failures.
-	 * if <code>bean</code> is null, an empty array is returned
-	 */
-	@SuppressWarnings("unchecked")
-	protected InvalidValue[] getInvalidValues(T bean, Set<Object> circularityState) {
-		if ( bean == null || circularityState.contains( bean ) ) {
-			return EMPTY_INVALID_VALUE_ARRAY; //Avoid circularity
-		}
-		else {
-			circularityState.add( bean );
-		}
-
-		if ( !beanClass.isInstance( bean ) ) {
-			throw new IllegalArgumentException( "not an instance of: " + bean.getClass() );
-		}
-
-		List<InvalidValue> results = new ArrayList<InvalidValue>();
-
-		for ( int i = 0; i < beanValidators.size() ; i++ ) {
-			Validator validator = beanValidators.get( i );
-			if ( !validator.isValid( bean ) ) {
-				results.add( new InvalidValue( interpolate(validator), beanClass, null, bean, bean ) );
-			}
-		}
-
-		for ( int i = 0; i < memberValidators.size() ; i++ ) {
-			XMember getter = memberGetters.get( i );
-			if ( Hibernate.isPropertyInitialized( bean, getPropertyName( getter ) ) ) {
-				Object value = getMemberValue( bean, getter );
-				Validator validator = memberValidators.get( i );
-				if ( !validator.isValid( value ) ) {
-					String propertyName = getPropertyName( getter );
-					results.add( new InvalidValue( interpolate(validator), beanClass, propertyName, value, bean ) );
-				}
-			}
-		}
-
-		for ( int i = 0; i < childGetters.size() ; i++ ) {
-			XMember getter = childGetters.get( i );
-			if ( Hibernate.isPropertyInitialized( bean, getPropertyName( getter ) ) ) {
-				Object value = getMemberValue( bean, getter );
-				if ( value != null && Hibernate.isInitialized( value ) ) {
-					String propertyName = getPropertyName( getter );
-					if ( getter.isCollection() ) {
-						int index = 0;
-						boolean isIterable = value instanceof Iterable;
-						Map map = ! isIterable ? (Map) value : null;
-						Iterable elements = isIterable ?
-								(Iterable) value :
-								map.keySet();
-						for ( Object element : elements ) {
-							Object actualElement = isIterable ? element : map.get( element );
-							if ( actualElement == null ) {
-								index++;
-								continue;
-							}
-							InvalidValue[] invalidValues = getClassValidator( actualElement )
-									.getInvalidValues( actualElement, circularityState );
-
-							String indexedPropName = MessageFormat.format(
-									"{0}[{1}]",
-									propertyName,
-									INDEXABLE_CLASS.contains( element.getClass() ) ?
-											( "'" + element + "'" ) :
-											index
-							);
-							index++;
-
-							for ( InvalidValue invalidValue : invalidValues ) {
-								invalidValue.addParentBean( bean, indexedPropName );
-								results.add( invalidValue );
-							}
-						}
-					}
-					if ( getter.isArray() ) {
-						int index = 0;
-						for ( Object element : (Object[]) value ) {
-							if ( element == null ) {
-								index++;
-								continue;
-							}
-							InvalidValue[] invalidValues = getClassValidator( element )
-									.getInvalidValues( element, circularityState );
-
-							String indexedPropName = MessageFormat.format(
-									"{0}[{1}]",
-									propertyName,
-									index
-							);
-							index++;
-
-							for ( InvalidValue invalidValue : invalidValues ) {
-								invalidValue.addParentBean( bean, indexedPropName );
-								results.add( invalidValue );
-							}
-						}
-					}
-					else {
-						InvalidValue[] invalidValues = getClassValidator( value )
-								.getInvalidValues( value, circularityState );
-						for ( InvalidValue invalidValue : invalidValues ) {
-							invalidValue.addParentBean( bean, propertyName );
-							results.add( invalidValue );
-						}
-					}
-				}
-			}
-		}
-
-		return results.toArray( new InvalidValue[results.size()] );
-	}
-
-	private String interpolate(Validator validator) {
-		String message = defaultInterpolator.getAnnotationMessage( validator );
-		if (userInterpolator != null) {
-			return userInterpolator.interpolate( message, validator, defaultInterpolator );
-		}
-		else {
-			return defaultInterpolator.interpolate( message, validator, null);
-		}
-	}
-
-	@SuppressWarnings("unchecked")
-	private ClassValidator getClassValidator(Object value) {
-		Class clazz = value.getClass();
-		ClassValidator validator = childClassValidators.get( reflectionManager.toXClass( clazz ) );
-		if ( validator == null ) { //handles polymorphism
-			validator = new ClassValidator( clazz );
-		}
-		return validator;
-	}
-
-	/**
-	 * Apply constraints of a particular property on a bean instance and return all the failures.
-	 * Note this is not recursive.
-	 */
-	//TODO should it be recursive?
-	public InvalidValue[] getInvalidValues(T bean, String propertyName) {
-		List<InvalidValue> results = new ArrayList<InvalidValue>();
-
-		for ( int i = 0; i < memberValidators.size() ; i++ ) {
-			XMember getter = memberGetters.get( i );
-			if ( getPropertyName( getter ).equals( propertyName ) ) {
-				Object value = getMemberValue( bean, getter );
-				Validator validator = memberValidators.get( i );
-				if ( !validator.isValid( value ) ) {
-					results.add( new InvalidValue( interpolate(validator), beanClass, propertyName, value, bean ) );
-				}
-			}
-		}
-
-		return results.toArray( new InvalidValue[results.size()] );
-	}
-
-	/**
-	 * Apply constraints of a particular property value of a bean type and return all the failures.
-	 * The InvalidValue objects returns return null for InvalidValue#getBean() and InvalidValue#getRootBean()
-	 * Note this is not recursive.
-	 */
-	//TODO should it be recursive?
-	public InvalidValue[] getPotentialInvalidValues(String propertyName, Object value) {
-		List<InvalidValue> results = new ArrayList<InvalidValue>();
-
-		for ( int i = 0; i < memberValidators.size() ; i++ ) {
-			XMember getter = memberGetters.get( i );
-			if ( getPropertyName( getter ).equals( propertyName ) ) {
-				Validator validator = memberValidators.get( i );
-				if ( !validator.isValid( value ) ) {
-					results.add( new InvalidValue( interpolate(validator), beanClass, propertyName, value, null ) );
-				}
-			}
-		}
-
-		return results.toArray( new InvalidValue[results.size()] );
-	}
-
-	private Object getMemberValue(T bean, XMember getter) {
-		Object value;
-		try {
-			value = getter.invoke( bean );
-		}
-		catch (Exception e) {
-			throw new IllegalStateException( "Could not get property value", e );
-		}
-		return value;
-	}
-
-	public String getPropertyName(XMember member) {
-		//Do no try to cache the result in a map, it's actually much slower (2.x time)
-		String propertyName;
-		if ( XProperty.class.isAssignableFrom( member.getClass() ) ) {
-			propertyName = member.getName();
-		}
-		else if ( XMethod.class.isAssignableFrom( member.getClass() ) ) {
-			propertyName = member.getName();
-			if ( propertyName.startsWith( "is" ) ) {
-				propertyName = Introspector.decapitalize( propertyName.substring( 2 ) );
-			}
-			else if ( propertyName.startsWith( "get" ) ) {
-				propertyName = Introspector.decapitalize( propertyName.substring( 3 ) );
-			}
-			//do nothing for non getter method, in case someone want to validate a PO Method
-		}
-		else {
-			throw new AssertionFailure( "Unexpected member: " + member.getClass().getName() );
-		}
-		return propertyName;
-	}
-
-	/** @deprecated */
-	private String replace(String message, Annotation parameters) {
-		StringTokenizer tokens = new StringTokenizer( message, "#{}", true );
-		StringBuilder buf = new StringBuilder( 30 );
-		boolean escaped = false;
-		boolean el = false;
-		while ( tokens.hasMoreTokens() ) {
-			String token = tokens.nextToken();
-			if ( !escaped && "#".equals( token ) ) {
-				el = true;
-			}
-			if ( !el && "{".equals( token ) ) {
-				escaped = true;
-			}
-			else if ( escaped && "}".equals( token ) ) {
-				escaped = false;
-			}
-			else if ( !escaped ) {
-				if ( "{".equals( token ) ) el = false;
-				buf.append( token );
-			}
-			else {
-				Method member;
-				try {
-					member = parameters.getClass().getMethod( token, (Class[]) null );
-				}
-				catch (NoSuchMethodException nsfme) {
-					member = null;
-				}
-				if ( member != null ) {
-					try {
-						buf.append( member.invoke( parameters ) );
-					}
-					catch (Exception e) {
-						throw new IllegalArgumentException( "could not render message", e );
-					}
-				}
-				else {
-					String string = null;
-					try {
-						string = messageBundle != null ? messageBundle.getString( token ) : null;
-					}
-					catch( MissingResourceException e ) {
-						//give a second chance with the default resource bundle
-					}
-					if (string == null) {
-						try {
-							string = defaultMessageBundle.getString( token );
-						}
-						catch( MissingResourceException e) {
-							throw new MissingResourceException(
-									"Can't find resource in validator bundles, key " + token,
-                                    defaultMessageBundle.getClass().getName(),
-                                    token
-							);
-						}
-					}
-					if ( string != null ) buf.append( replace( string, parameters ) );
-				}
-			}
-		}
-		return buf.toString();
-	}
-
-	/**
-	 * apply the registred constraints rules on the hibernate metadata (to be applied on DB schema...)
-	 *
-	 * @param persistentClass hibernate metadata
-	 */
-	public void apply(PersistentClass persistentClass) {
-
-		for ( Validator validator : beanValidators ) {
-			if ( validator instanceof PersistentClassConstraint ) {
-				( (PersistentClassConstraint) validator ).apply( persistentClass );
-			}
-		}
-
-		Iterator<Validator> validators = memberValidators.iterator();
-		Iterator<XMember> getters = memberGetters.iterator();
-		while ( validators.hasNext() ) {
-			Validator validator = validators.next();
-			String propertyName = getPropertyName( getters.next() );
-			if ( validator instanceof PropertyConstraint ) {
-				try {
-					Property property = findPropertyByName(persistentClass, propertyName);
-					if (property != null) {
-						( (PropertyConstraint) validator ).apply( property );
-					}
-				}
-				catch (MappingException pnfe) {
-					//do nothing
-				}
-			}
-		}
-
-	}
-
-	public void assertValid(T bean) {
-		InvalidValue[] values = getInvalidValues( bean );
-		if ( values.length > 0 ) {
-			throw new InvalidStateException( values );
-		}
-	}
-
-	private void writeObject(ObjectOutputStream oos) throws IOException {
-		ResourceBundle rb = messageBundle;
-		MessageInterpolator interpolator = this.userInterpolator;
-		if ( rb != null && ! ( rb instanceof Serializable ) ) {
-			messageBundle = null;
-			if ( ! isUserProvidedResourceBundle ) {
-				log.warn(
-						"Serializing a ClassValidator with a non serializable ResourceBundle: ResourceBundle ignored"
-				);
-			}
-		}
-		if (interpolator != null && ! (interpolator instanceof Serializable) ) {
-			userInterpolator = null;
-			log.warn( "Serializing a non serializable MessageInterpolator" );
-		}
-		oos.defaultWriteObject();
-		oos.writeObject( messageBundle );
-		oos.writeObject( userInterpolator );
-		messageBundle = rb;
-		userInterpolator = interpolator;
-	}
-
-	private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
-		ois.defaultReadObject();
-		ResourceBundle rb = (ResourceBundle) ois.readObject();
-		if ( rb == null ) rb = getDefaultResourceBundle();
-		this.messageBundle = rb;
-		this.userInterpolator = (MessageInterpolator) ois.readObject();
-		this.defaultMessageBundle = ResourceBundle.getBundle( DEFAULT_VALIDATOR_MESSAGE );
-		reflectionManager = new JavaReflectionManager();
-		initValidator( reflectionManager.toXClass( beanClass ), new HashMap<XClass, ClassValidator>() );
-	}
-
-	/**
-	 * Retrieve the property by path in a recursive way, including IndetifierProperty in the loop
-	 * If propertyName is null or empty, the IdentifierProperty is returned
-	 */
-	public static Property findPropertyByName(PersistentClass associatedClass, String propertyName) {
-		Property property = null;
-		Property idProperty = associatedClass.getIdentifierProperty();
-		String idName = idProperty != null ? idProperty.getName() : null;
-		try {
-			if ( propertyName == null
-					|| propertyName.length() == 0
-					|| propertyName.equals( idName ) ) {
-				//default to id
-				property = idProperty;
-			}
-			else {
-				if ( propertyName.indexOf( idName + "." ) == 0 ) {
-					property = idProperty;
-					propertyName = propertyName.substring( idName.length() + 1 );
-				}
-				StringTokenizer st = new StringTokenizer( propertyName, ".", false );
-				while ( st.hasMoreElements() ) {
-					String element = (String) st.nextElement();
-					if ( property == null ) {
-						property = associatedClass.getProperty( element );
-					}
-					else {
-						if ( ! property.isComposite() ) return null;
-						property = ( (Component) property.getValue() ).getProperty( element );
-					}
-				}
-			}
-		}
-		catch (MappingException e) {
-			try {
-				//if we do not find it try to check the identifier mapper
-				if ( associatedClass.getIdentifierMapper() == null ) return null;
-				StringTokenizer st = new StringTokenizer( propertyName, ".", false );
-				while ( st.hasMoreElements() ) {
-					String element = (String) st.nextElement();
-					if ( property == null ) {
-						property = associatedClass.getIdentifierMapper().getProperty( element );
-					}
-					else {
-						if ( ! property.isComposite() ) return null;
-						property = ( (Component) property.getValue() ).getProperty( element );
-					}
-				}
-			}
-			catch (MappingException ee) {
-				return null;
-			}
-		}
-		return property;
-	}
-}

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/ClassValidator.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/ClassValidator.java)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/ClassValidator.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/ClassValidator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,756 @@
+//$Id$
+package org.hibernate.validator;
+
+import java.beans.Introspector;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+import java.util.Set;
+import java.util.StringTokenizer;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.hibernate.AssertionFailure;
+import org.hibernate.Hibernate;
+import org.hibernate.MappingException;
+import org.hibernate.mapping.PersistentClass;
+import org.hibernate.mapping.Property;
+import org.hibernate.mapping.Component;
+import org.hibernate.annotations.common.reflection.Filter;
+import org.hibernate.annotations.common.reflection.ReflectionManager;
+import org.hibernate.annotations.common.reflection.XClass;
+import org.hibernate.annotations.common.reflection.XMember;
+import org.hibernate.annotations.common.reflection.XMethod;
+import org.hibernate.annotations.common.reflection.XProperty;
+import org.hibernate.annotations.common.reflection.java.JavaReflectionManager;
+import org.hibernate.util.IdentitySet;
+import org.hibernate.validator.interpolator.DefaultMessageInterpolatorAggerator;
+
+
+/**
+ * Engine that take a bean and check every expressed annotation restrictions
+ *
+ * @author Gavin King
+ * @author Emmanuel Bernard
+ */
+public class ClassValidator<T> implements Serializable {
+	//TODO Define magic number
+	private static Log log = LogFactory.getLog( ClassValidator.class );
+	private static final InvalidValue[] EMPTY_INVALID_VALUE_ARRAY = new InvalidValue[]{};
+	private static final String DEFAULT_VALIDATOR_MESSAGE = "org.hibernate.validator.resources.DefaultValidatorMessages";
+	private static final String VALIDATOR_MESSAGE = "ValidatorMessages";
+	private static final Set<Class> INDEXABLE_CLASS = new HashSet<Class>();
+
+	static {
+		INDEXABLE_CLASS.add( Integer.class );
+		INDEXABLE_CLASS.add( Long.class );
+		INDEXABLE_CLASS.add( String.class );
+	}
+
+	static {
+		Version.touch(); //touch version
+	}
+
+	private final Class<T> beanClass;
+	private transient ResourceBundle messageBundle;
+	private transient ResourceBundle defaultMessageBundle;
+	private transient boolean isUserProvidedResourceBundle;
+	private transient ReflectionManager reflectionManager;
+
+	private final transient Map<XClass, ClassValidator> childClassValidators;
+	private transient List<Validator> beanValidators;
+	private transient List<Validator> memberValidators;
+	private transient List<XMember> memberGetters;
+	private transient List<XMember> childGetters;
+	private transient DefaultMessageInterpolatorAggerator defaultInterpolator;
+	private transient MessageInterpolator userInterpolator;
+	private static final Filter GET_ALL_FILTER = new Filter() {
+		public boolean returnStatic() {
+		return true;
+		}
+
+		public boolean returnTransient() {
+		return true;
+		}
+	};
+
+	/**
+	 * create the validator engine for this bean type
+	 */
+	public ClassValidator(Class<T> beanClass) {
+		this( beanClass, (ResourceBundle) null );
+	}
+
+	/**
+	 * create the validator engine for a particular bean class, using a resource bundle
+	 * for message rendering on violation
+	 */
+	public ClassValidator(Class<T> beanClass, ResourceBundle resourceBundle) {
+		this( beanClass, resourceBundle, null, new HashMap<XClass, ClassValidator>(), null );
+	}
+
+	/**
+	 * create the validator engine for a particular bean class, using a custom message interpolator
+	 * for message rendering on violation
+	 */
+	public ClassValidator(Class<T> beanClass, MessageInterpolator interpolator) {
+		this( beanClass, null, interpolator, new HashMap<XClass, ClassValidator>(), null );
+	}
+
+    /**
+     * Not a public API
+     */
+    public ClassValidator(
+			Class<T> beanClass, ResourceBundle resourceBundle, MessageInterpolator interpolator,
+            Map<XClass, ClassValidator> childClassValidators, ReflectionManager reflectionManager
+    ) {
+        this.reflectionManager = reflectionManager != null ? reflectionManager : new JavaReflectionManager();
+        XClass beanXClass = this.reflectionManager.toXClass( beanClass );
+		this.beanClass = beanClass;
+		this.messageBundle = resourceBundle == null ?
+				getDefaultResourceBundle() :
+				resourceBundle;
+		this.defaultMessageBundle = ResourceBundle.getBundle( DEFAULT_VALIDATOR_MESSAGE );
+		this.userInterpolator = interpolator;
+		this.childClassValidators = childClassValidators != null ?
+                childClassValidators :
+                new HashMap<XClass, ClassValidator>();
+		initValidator( beanXClass, this.childClassValidators );
+	}
+
+	@SuppressWarnings("unchecked")
+	protected ClassValidator(
+			XClass beanXClass, ResourceBundle resourceBundle, MessageInterpolator userInterpolator,
+			Map<XClass, ClassValidator> childClassValidators, ReflectionManager reflectionManager
+	) {
+		this.reflectionManager = reflectionManager;
+		this.beanClass = reflectionManager.toClass( beanXClass );
+		this.messageBundle = resourceBundle == null ?
+				getDefaultResourceBundle() :
+				resourceBundle;
+		this.defaultMessageBundle = ResourceBundle.getBundle( DEFAULT_VALIDATOR_MESSAGE );
+		this.userInterpolator = userInterpolator;
+		this.childClassValidators = childClassValidators;
+		initValidator( beanXClass, childClassValidators );
+	}
+
+	private ResourceBundle getDefaultResourceBundle() {
+		ResourceBundle rb;
+		try {
+			//use context class loader as a first citizen
+			ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
+			if ( contextClassLoader == null ) {
+				throw new MissingResourceException( "No context classloader", null, VALIDATOR_MESSAGE );
+			}
+			rb = ResourceBundle.getBundle(
+					VALIDATOR_MESSAGE,
+					Locale.getDefault(),
+					contextClassLoader
+			);
+		}
+		catch (MissingResourceException e) {
+			log.trace( "ResourceBundle " + VALIDATOR_MESSAGE + " not found in thread context classloader" );
+			//then use the Validator Framework classloader
+			try {
+				rb = ResourceBundle.getBundle(
+						VALIDATOR_MESSAGE,
+						Locale.getDefault(),
+						this.getClass().getClassLoader()
+				);
+			}
+			catch (MissingResourceException ee) {
+				log.debug(
+						"ResourceBundle ValidatorMessages not found in Validator classloader. Delegate to " + DEFAULT_VALIDATOR_MESSAGE
+				);
+				//the user did not override the default ValidatorMessages
+				rb = null;
+			}
+		}
+		isUserProvidedResourceBundle = true;
+		return rb;
+	}
+
+	private void initValidator(
+			XClass xClass, Map<XClass, ClassValidator> childClassValidators
+	) {
+		beanValidators = new ArrayList<Validator>();
+		memberValidators = new ArrayList<Validator>();
+		memberGetters = new ArrayList<XMember>();
+		childGetters = new ArrayList<XMember>();
+		defaultInterpolator = new DefaultMessageInterpolatorAggerator();
+		defaultInterpolator.initialize( messageBundle, defaultMessageBundle );
+
+		//build the class hierarchy to look for members in
+		childClassValidators.put( xClass, this );
+		Collection<XClass> classes = new HashSet<XClass>();
+		addSuperClassesAndInterfaces( xClass, classes );
+		for ( XClass currentClass : classes ) {
+			Annotation[] classAnnotations = currentClass.getAnnotations();
+			for ( int i = 0; i < classAnnotations.length ; i++ ) {
+				Annotation classAnnotation = classAnnotations[i];
+				Validator beanValidator = createValidator( classAnnotation );
+				if ( beanValidator != null ) beanValidators.add( beanValidator );
+				handleAggregateAnnotations(classAnnotation, null);
+			}
+		}
+
+		//Check on all selected classes
+		for ( XClass currClass : classes ) {
+			List<XMethod> methods = currClass.getDeclaredMethods();
+			for ( XMethod method : methods ) {
+				createMemberValidator( method );
+				createChildValidator( method );
+			}
+
+			List<XProperty> fields = currClass.getDeclaredProperties(
+					"field", GET_ALL_FILTER
+			);
+			for ( XProperty field : fields ) {
+				createMemberValidator( field );
+				createChildValidator( field );
+			}
+		}
+	}
+
+	private void addSuperClassesAndInterfaces(XClass clazz, Collection<XClass> classes) {
+		for ( XClass currClass = clazz; currClass != null ; currClass = currClass.getSuperclass() ) {
+			if ( ! classes.add( currClass ) ) return;
+			XClass[] interfaces = currClass.getInterfaces();
+			for ( XClass interf : interfaces ) {
+				addSuperClassesAndInterfaces( interf, classes );
+			}
+		}
+	}
+
+	private boolean handleAggregateAnnotations(Annotation annotation, XMember member) {
+		Object[] values;
+		try {
+			Method valueMethod = annotation.getClass().getMethod( "value" );
+			if ( valueMethod.getReturnType().isArray() ) {
+				values = (Object[]) valueMethod.invoke( annotation );
+			}
+			else {
+				return false;
+			}
+		}
+		catch (NoSuchMethodException e) {
+			return false;
+		}
+		catch (Exception e) {
+			throw new IllegalStateException( e );
+		}
+
+		boolean validatorPresent = false;
+		for ( Object value : values ) {
+			if ( value instanceof Annotation ) {
+				annotation = (Annotation) value;
+				Validator validator = createValidator( annotation );
+				if ( validator != null ) {
+					if ( member != null ) {
+						//member
+						memberValidators.add( validator );
+						setAccessible( member );
+						memberGetters.add( member );
+					}
+					else {
+						//bean
+						beanValidators.add( validator );
+					}
+					validatorPresent = true;
+				}
+			}
+		}
+		return validatorPresent;
+	}
+
+	@SuppressWarnings("unchecked")
+	private void createChildValidator( XMember member) {
+		if ( member.isAnnotationPresent( Valid.class ) ) {
+			setAccessible( member );
+			childGetters.add( member );
+			XClass clazz;
+			if ( member.isCollection() || member.isArray() ) {
+				clazz = member.getElementClass();
+			}
+			else {
+				clazz = member.getType();
+			}
+			if ( !childClassValidators.containsKey( clazz ) ) {
+				//ClassValidator added by side effect (added to childClassValidators during CV construction)
+				new ClassValidator( clazz, messageBundle, userInterpolator, childClassValidators, reflectionManager );
+			}
+		}
+	}
+
+	private void createMemberValidator(XMember member) {
+		boolean validatorPresent = false;
+		Annotation[] memberAnnotations = member.getAnnotations();
+		for ( Annotation methodAnnotation : memberAnnotations ) {
+			Validator propertyValidator = createValidator( methodAnnotation );
+			if ( propertyValidator != null ) {
+				memberValidators.add( propertyValidator );
+				setAccessible( member );
+				memberGetters.add( member );
+				validatorPresent = true;
+			}
+			boolean agrValidPresent = handleAggregateAnnotations( methodAnnotation, member );
+			validatorPresent = validatorPresent || agrValidPresent;
+		}
+		if ( validatorPresent && !member.isTypeResolved() ) {
+			log.warn( "Original type of property " + member + " is unbound and has been approximated." );
+		}
+	}
+
+	private static void setAccessible(XMember member) {
+		if ( !Modifier.isPublic( member.getModifiers() ) ) {
+			member.setAccessible( true );
+		}
+	}
+
+	@SuppressWarnings("unchecked")
+	private Validator createValidator(Annotation annotation) {
+		try {
+			ValidatorClass validatorClass = annotation.annotationType().getAnnotation( ValidatorClass.class );
+			if ( validatorClass == null ) {
+				return null;
+			}
+			Validator beanValidator = validatorClass.value().newInstance();
+			beanValidator.initialize( annotation );
+			defaultInterpolator.addInterpolator( annotation, beanValidator );
+			return beanValidator;
+		}
+		catch (Exception e) {
+			throw new IllegalArgumentException( "could not instantiate ClassValidator", e );
+		}
+	}
+
+	public boolean hasValidationRules() {
+		return beanValidators.size() != 0 || memberValidators.size() != 0;
+	}
+
+	/**
+	 * apply constraints on a bean instance and return all the failures.
+	 * if <code>bean</code> is null, an empty array is returned
+	 */
+	public InvalidValue[] getInvalidValues(T bean) {
+		return this.getInvalidValues( bean, new IdentitySet() );
+	}
+
+	/**
+	 * apply constraints on a bean instance and return all the failures.
+	 * if <code>bean</code> is null, an empty array is returned
+	 */
+	@SuppressWarnings("unchecked")
+	protected InvalidValue[] getInvalidValues(T bean, Set<Object> circularityState) {
+		if ( bean == null || circularityState.contains( bean ) ) {
+			return EMPTY_INVALID_VALUE_ARRAY; //Avoid circularity
+		}
+		else {
+			circularityState.add( bean );
+		}
+
+		if ( !beanClass.isInstance( bean ) ) {
+			throw new IllegalArgumentException( "not an instance of: " + bean.getClass() );
+		}
+
+		List<InvalidValue> results = new ArrayList<InvalidValue>();
+
+		for ( int i = 0; i < beanValidators.size() ; i++ ) {
+			Validator validator = beanValidators.get( i );
+			if ( !validator.isValid( bean ) ) {
+				results.add( new InvalidValue( interpolate(validator), beanClass, null, bean, bean ) );
+			}
+		}
+
+		for ( int i = 0; i < memberValidators.size() ; i++ ) {
+			XMember getter = memberGetters.get( i );
+			if ( Hibernate.isPropertyInitialized( bean, getPropertyName( getter ) ) ) {
+				Object value = getMemberValue( bean, getter );
+				Validator validator = memberValidators.get( i );
+				if ( !validator.isValid( value ) ) {
+					String propertyName = getPropertyName( getter );
+					results.add( new InvalidValue( interpolate(validator), beanClass, propertyName, value, bean ) );
+				}
+			}
+		}
+
+		for ( int i = 0; i < childGetters.size() ; i++ ) {
+			XMember getter = childGetters.get( i );
+			if ( Hibernate.isPropertyInitialized( bean, getPropertyName( getter ) ) ) {
+				Object value = getMemberValue( bean, getter );
+				if ( value != null && Hibernate.isInitialized( value ) ) {
+					String propertyName = getPropertyName( getter );
+					if ( getter.isCollection() ) {
+						int index = 0;
+						boolean isIterable = value instanceof Iterable;
+						Map map = ! isIterable ? (Map) value : null;
+						Iterable elements = isIterable ?
+								(Iterable) value :
+								map.keySet();
+						for ( Object element : elements ) {
+							Object actualElement = isIterable ? element : map.get( element );
+							if ( actualElement == null ) {
+								index++;
+								continue;
+							}
+							InvalidValue[] invalidValues = getClassValidator( actualElement )
+									.getInvalidValues( actualElement, circularityState );
+
+							String indexedPropName = MessageFormat.format(
+									"{0}[{1}]",
+									propertyName,
+									INDEXABLE_CLASS.contains( element.getClass() ) ?
+											( "'" + element + "'" ) :
+											index
+							);
+							index++;
+
+							for ( InvalidValue invalidValue : invalidValues ) {
+								invalidValue.addParentBean( bean, indexedPropName );
+								results.add( invalidValue );
+							}
+						}
+					}
+					if ( getter.isArray() ) {
+						int index = 0;
+						for ( Object element : (Object[]) value ) {
+							if ( element == null ) {
+								index++;
+								continue;
+							}
+							InvalidValue[] invalidValues = getClassValidator( element )
+									.getInvalidValues( element, circularityState );
+
+							String indexedPropName = MessageFormat.format(
+									"{0}[{1}]",
+									propertyName,
+									index
+							);
+							index++;
+
+							for ( InvalidValue invalidValue : invalidValues ) {
+								invalidValue.addParentBean( bean, indexedPropName );
+								results.add( invalidValue );
+							}
+						}
+					}
+					else {
+						InvalidValue[] invalidValues = getClassValidator( value )
+								.getInvalidValues( value, circularityState );
+						for ( InvalidValue invalidValue : invalidValues ) {
+							invalidValue.addParentBean( bean, propertyName );
+							results.add( invalidValue );
+						}
+					}
+				}
+			}
+		}
+
+		return results.toArray( new InvalidValue[results.size()] );
+	}
+
+	private String interpolate(Validator validator) {
+		String message = defaultInterpolator.getAnnotationMessage( validator );
+		if (userInterpolator != null) {
+			return userInterpolator.interpolate( message, validator, defaultInterpolator );
+		}
+		else {
+			return defaultInterpolator.interpolate( message, validator, null);
+		}
+	}
+
+	@SuppressWarnings("unchecked")
+	private ClassValidator getClassValidator(Object value) {
+		Class clazz = value.getClass();
+		ClassValidator validator = childClassValidators.get( reflectionManager.toXClass( clazz ) );
+		if ( validator == null ) { //handles polymorphism
+			validator = new ClassValidator( clazz );
+		}
+		return validator;
+	}
+
+	/**
+	 * Apply constraints of a particular property on a bean instance and return all the failures.
+	 * Note this is not recursive.
+	 */
+	//TODO should it be recursive?
+	public InvalidValue[] getInvalidValues(T bean, String propertyName) {
+		List<InvalidValue> results = new ArrayList<InvalidValue>();
+
+		for ( int i = 0; i < memberValidators.size() ; i++ ) {
+			XMember getter = memberGetters.get( i );
+			if ( getPropertyName( getter ).equals( propertyName ) ) {
+				Object value = getMemberValue( bean, getter );
+				Validator validator = memberValidators.get( i );
+				if ( !validator.isValid( value ) ) {
+					results.add( new InvalidValue( interpolate(validator), beanClass, propertyName, value, bean ) );
+				}
+			}
+		}
+
+		return results.toArray( new InvalidValue[results.size()] );
+	}
+
+	/**
+	 * Apply constraints of a particular property value of a bean type and return all the failures.
+	 * The InvalidValue objects returns return null for InvalidValue#getBean() and InvalidValue#getRootBean()
+	 * Note this is not recursive.
+	 */
+	//TODO should it be recursive?
+	public InvalidValue[] getPotentialInvalidValues(String propertyName, Object value) {
+		List<InvalidValue> results = new ArrayList<InvalidValue>();
+
+		for ( int i = 0; i < memberValidators.size() ; i++ ) {
+			XMember getter = memberGetters.get( i );
+			if ( getPropertyName( getter ).equals( propertyName ) ) {
+				Validator validator = memberValidators.get( i );
+				if ( !validator.isValid( value ) ) {
+					results.add( new InvalidValue( interpolate(validator), beanClass, propertyName, value, null ) );
+				}
+			}
+		}
+
+		return results.toArray( new InvalidValue[results.size()] );
+	}
+
+	private Object getMemberValue(T bean, XMember getter) {
+		Object value;
+		try {
+			value = getter.invoke( bean );
+		}
+		catch (Exception e) {
+			throw new IllegalStateException( "Could not get property value", e );
+		}
+		return value;
+	}
+
+	public String getPropertyName(XMember member) {
+		//Do no try to cache the result in a map, it's actually much slower (2.x time)
+		String propertyName;
+		if ( XProperty.class.isAssignableFrom( member.getClass() ) ) {
+			propertyName = member.getName();
+		}
+		else if ( XMethod.class.isAssignableFrom( member.getClass() ) ) {
+			propertyName = member.getName();
+			if ( propertyName.startsWith( "is" ) ) {
+				propertyName = Introspector.decapitalize( propertyName.substring( 2 ) );
+			}
+			else if ( propertyName.startsWith( "get" ) ) {
+				propertyName = Introspector.decapitalize( propertyName.substring( 3 ) );
+			}
+			//do nothing for non getter method, in case someone want to validate a PO Method
+		}
+		else {
+			throw new AssertionFailure( "Unexpected member: " + member.getClass().getName() );
+		}
+		return propertyName;
+	}
+
+	/** @deprecated */
+	private String replace(String message, Annotation parameters) {
+		StringTokenizer tokens = new StringTokenizer( message, "#{}", true );
+		StringBuilder buf = new StringBuilder( 30 );
+		boolean escaped = false;
+		boolean el = false;
+		while ( tokens.hasMoreTokens() ) {
+			String token = tokens.nextToken();
+			if ( !escaped && "#".equals( token ) ) {
+				el = true;
+			}
+			if ( !el && "{".equals( token ) ) {
+				escaped = true;
+			}
+			else if ( escaped && "}".equals( token ) ) {
+				escaped = false;
+			}
+			else if ( !escaped ) {
+				if ( "{".equals( token ) ) el = false;
+				buf.append( token );
+			}
+			else {
+				Method member;
+				try {
+					member = parameters.getClass().getMethod( token, (Class[]) null );
+				}
+				catch (NoSuchMethodException nsfme) {
+					member = null;
+				}
+				if ( member != null ) {
+					try {
+						buf.append( member.invoke( parameters ) );
+					}
+					catch (Exception e) {
+						throw new IllegalArgumentException( "could not render message", e );
+					}
+				}
+				else {
+					String string = null;
+					try {
+						string = messageBundle != null ? messageBundle.getString( token ) : null;
+					}
+					catch( MissingResourceException e ) {
+						//give a second chance with the default resource bundle
+					}
+					if (string == null) {
+						try {
+							string = defaultMessageBundle.getString( token );
+						}
+						catch( MissingResourceException e) {
+							throw new MissingResourceException(
+									"Can't find resource in validator bundles, key " + token,
+                                    defaultMessageBundle.getClass().getName(),
+                                    token
+							);
+						}
+					}
+					if ( string != null ) buf.append( replace( string, parameters ) );
+				}
+			}
+		}
+		return buf.toString();
+	}
+
+	/**
+	 * apply the registred constraints rules on the hibernate metadata (to be applied on DB schema...)
+	 *
+	 * @param persistentClass hibernate metadata
+	 */
+	public void apply(PersistentClass persistentClass) {
+
+		for ( Validator validator : beanValidators ) {
+			if ( validator instanceof PersistentClassConstraint ) {
+				( (PersistentClassConstraint) validator ).apply( persistentClass );
+			}
+		}
+
+		Iterator<Validator> validators = memberValidators.iterator();
+		Iterator<XMember> getters = memberGetters.iterator();
+		while ( validators.hasNext() ) {
+			Validator validator = validators.next();
+			String propertyName = getPropertyName( getters.next() );
+			if ( validator instanceof PropertyConstraint ) {
+				try {
+					Property property = findPropertyByName(persistentClass, propertyName);
+					if (property != null) {
+						( (PropertyConstraint) validator ).apply( property );
+					}
+				}
+				catch (MappingException pnfe) {
+					//do nothing
+				}
+			}
+		}
+
+	}
+
+	public void assertValid(T bean) {
+		InvalidValue[] values = getInvalidValues( bean );
+		if ( values.length > 0 ) {
+			throw new InvalidStateException( values );
+		}
+	}
+
+	private void writeObject(ObjectOutputStream oos) throws IOException {
+		ResourceBundle rb = messageBundle;
+		MessageInterpolator interpolator = this.userInterpolator;
+		if ( rb != null && ! ( rb instanceof Serializable ) ) {
+			messageBundle = null;
+			if ( ! isUserProvidedResourceBundle ) {
+				log.warn(
+						"Serializing a ClassValidator with a non serializable ResourceBundle: ResourceBundle ignored"
+				);
+			}
+		}
+		if (interpolator != null && ! (interpolator instanceof Serializable) ) {
+			userInterpolator = null;
+			log.warn( "Serializing a non serializable MessageInterpolator" );
+		}
+		oos.defaultWriteObject();
+		oos.writeObject( messageBundle );
+		oos.writeObject( userInterpolator );
+		messageBundle = rb;
+		userInterpolator = interpolator;
+	}
+
+	private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
+		ois.defaultReadObject();
+		ResourceBundle rb = (ResourceBundle) ois.readObject();
+		if ( rb == null ) rb = getDefaultResourceBundle();
+		this.messageBundle = rb;
+		this.userInterpolator = (MessageInterpolator) ois.readObject();
+		this.defaultMessageBundle = ResourceBundle.getBundle( DEFAULT_VALIDATOR_MESSAGE );
+		reflectionManager = new JavaReflectionManager();
+		initValidator( reflectionManager.toXClass( beanClass ), new HashMap<XClass, ClassValidator>() );
+	}
+
+	/**
+	 * Retrieve the property by path in a recursive way, including IndetifierProperty in the loop
+	 * If propertyName is null or empty, the IdentifierProperty is returned
+	 */
+	public static Property findPropertyByName(PersistentClass associatedClass, String propertyName) {
+		Property property = null;
+		Property idProperty = associatedClass.getIdentifierProperty();
+		String idName = idProperty != null ? idProperty.getName() : null;
+		try {
+			if ( propertyName == null
+					|| propertyName.length() == 0
+					|| propertyName.equals( idName ) ) {
+				//default to id
+				property = idProperty;
+			}
+			else {
+				if ( propertyName.indexOf( idName + "." ) == 0 ) {
+					property = idProperty;
+					propertyName = propertyName.substring( idName.length() + 1 );
+				}
+				StringTokenizer st = new StringTokenizer( propertyName, ".", false );
+				while ( st.hasMoreElements() ) {
+					String element = (String) st.nextElement();
+					if ( property == null ) {
+						property = associatedClass.getProperty( element );
+					}
+					else {
+						if ( ! property.isComposite() ) return null;
+						property = ( (Component) property.getValue() ).getProperty( element );
+					}
+				}
+			}
+		}
+		catch (MappingException e) {
+			try {
+				//if we do not find it try to check the identifier mapper
+				if ( associatedClass.getIdentifierMapper() == null ) return null;
+				StringTokenizer st = new StringTokenizer( propertyName, ".", false );
+				while ( st.hasMoreElements() ) {
+					String element = (String) st.nextElement();
+					if ( property == null ) {
+						property = associatedClass.getIdentifierMapper().getProperty( element );
+					}
+					else {
+						if ( ! property.isComposite() ) return null;
+						property = ( (Component) property.getValue() ).getProperty( element );
+					}
+				}
+			}
+			catch (MappingException ee) {
+				return null;
+			}
+		}
+		return property;
+	}
+}

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/CreditCardNumber.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/CreditCardNumber.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/CreditCardNumber.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,23 +0,0 @@
-//$Id: $
-package org.hibernate.validator;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.Target;
-import java.lang.annotation.Retention;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * The annotated element has to represent a valid
- * credit card number. This is the Luhn algorithm implementation
- * which aims to check for user mistake, not credit card validity!
- *
- * @author Emmanuel Bernard
- */
- at Documented
- at ValidatorClass( CreditCardNumberValidator.class)
- at Target({ElementType.METHOD, ElementType.FIELD})
- at Retention( RetentionPolicy.RUNTIME )
-public @interface CreditCardNumber {
-	String message() default "{validator.creditCard}";
-}

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/CreditCardNumber.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/CreditCardNumber.java)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/CreditCardNumber.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/CreditCardNumber.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,23 @@
+//$Id: $
+package org.hibernate.validator;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Target;
+import java.lang.annotation.Retention;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * The annotated element has to represent a valid
+ * credit card number. This is the Luhn algorithm implementation
+ * which aims to check for user mistake, not credit card validity!
+ *
+ * @author Emmanuel Bernard
+ */
+ at Documented
+ at ValidatorClass( CreditCardNumberValidator.class)
+ at Target({ElementType.METHOD, ElementType.FIELD})
+ at Retention( RetentionPolicy.RUNTIME )
+public @interface CreditCardNumber {
+	String message() default "{validator.creditCard}";
+}

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/CreditCardNumberValidator.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/CreditCardNumberValidator.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/CreditCardNumberValidator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,19 +0,0 @@
-//$Id: $
-package org.hibernate.validator;
-
-import java.io.Serializable;
-
-/**
- * Check a credit card number through the Luhn algorithm
- *
- * @author Emmanuel Bernard
- */
-public class CreditCardNumberValidator extends AbstractLuhnValidator implements Validator<CreditCardNumber>, Serializable {
-
-	public void initialize(CreditCardNumber parameters) {
-	}
-
-	int multiplicator() {
-		return 2;
-	}
-}

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/CreditCardNumberValidator.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/CreditCardNumberValidator.java)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/CreditCardNumberValidator.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/CreditCardNumberValidator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,19 @@
+//$Id: $
+package org.hibernate.validator;
+
+import java.io.Serializable;
+
+/**
+ * Check a credit card number through the Luhn algorithm
+ *
+ * @author Emmanuel Bernard
+ */
+public class CreditCardNumberValidator extends AbstractLuhnValidator implements Validator<CreditCardNumber>, Serializable {
+
+	public void initialize(CreditCardNumber parameters) {
+	}
+
+	int multiplicator() {
+		return 2;
+	}
+}

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/Digits.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/Digits.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/Digits.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,25 +0,0 @@
-//$Id: $
-package org.hibernate.validator;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Target;
-import java.lang.annotation.Documented;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * Check that a given number has <code>integerDigits</code> integer digits
- * and <code>fractionalDigits</code> fractional digits
- * The constraints are defined at the database level too
- *
- * @author Norman Richards
- */
- at ValidatorClass(DigitsValidator.class)
- at Target({ElementType.METHOD, ElementType.FIELD})
- at Retention( RetentionPolicy.RUNTIME)
- at Documented
-public @interface Digits {
-    int integerDigits();
-    int fractionalDigits() default 0;
-    String message() default "{validator.digits}";
-}
\ No newline at end of file

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/Digits.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/Digits.java)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/Digits.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/Digits.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,25 @@
+//$Id: $
+package org.hibernate.validator;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Target;
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * Check that a given number has <code>integerDigits</code> integer digits
+ * and <code>fractionalDigits</code> fractional digits
+ * The constraints are defined at the database level too
+ *
+ * @author Norman Richards
+ */
+ at ValidatorClass(DigitsValidator.class)
+ at Target({ElementType.METHOD, ElementType.FIELD})
+ at Retention( RetentionPolicy.RUNTIME)
+ at Documented
+public @interface Digits {
+    int integerDigits();
+    int fractionalDigits() default 0;
+    String message() default "{validator.digits}";
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/DigitsValidator.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/DigitsValidator.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/DigitsValidator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,84 +0,0 @@
-//$Id: $
-package org.hibernate.validator;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-
-import org.hibernate.mapping.Property;
-import org.hibernate.mapping.Column;
-
-/**
- * Validate a Digit to check if it matches the according pattern
- *
- * @author Norman Richards
- * @author Emmanuel Bernard
- */
-public class DigitsValidator implements Validator<Digits>, PropertyConstraint {
-	int integerDigits;
-	int fractionalDigits;
-
-	public void initialize(Digits configuration) {
-		integerDigits = configuration.integerDigits();
-		fractionalDigits = configuration.fractionalDigits();
-	}
-
-	public boolean isValid(Object value) {
-		if ( value == null ) {
-			return true;
-		}
-
-		String stringValue = null;
-
-		if ( value instanceof String ) {
-			try {
-				stringValue = stringValue( new BigDecimal( (String) value ) );
-			}
-			catch (NumberFormatException nfe) {
-				return false;
-			}
-		}
-		else if ( value instanceof BigDecimal ) {
-			stringValue = stringValue( (BigDecimal) value );
-		}
-		else if ( value instanceof BigInteger ) {
-			stringValue = stringValue( (BigInteger) value );
-		}
-		else if ( value instanceof Number ) {
-			//yukky
-			stringValue = stringValue( new BigDecimal( ( (Number) value ).toString() ) );
-		}
-		else {
-			return false;
-		}
-
-		int pos = stringValue.indexOf( "." );
-
-		int left = ( pos == -1 ) ?
-				stringValue.length() :
-				pos;
-		int right = ( pos == -1 ) ?
-				0 :
-				stringValue.length() - pos - 1;
-
-		if ( left == 1 && stringValue.charAt( 0 ) == '0' ) {
-			left--;
-		}
-
-		return !( left > integerDigits || right > fractionalDigits );
-
-	}
-
-	private String stringValue(BigDecimal number) {
-		return number.abs().stripTrailingZeros().toPlainString();
-	}
-
-	private String stringValue(BigInteger number) {
-		return number.abs().toString();
-	}
-
-	public void apply(Property property) {
-		Column col = (Column) property.getColumnIterator().next();
-		col.setPrecision( integerDigits + fractionalDigits );
-		col.setScale( fractionalDigits );
-	}
-}

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/DigitsValidator.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/DigitsValidator.java)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/DigitsValidator.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/DigitsValidator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,84 @@
+//$Id: $
+package org.hibernate.validator;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+
+import org.hibernate.mapping.Property;
+import org.hibernate.mapping.Column;
+
+/**
+ * Validate a Digit to check if it matches the according pattern
+ *
+ * @author Norman Richards
+ * @author Emmanuel Bernard
+ */
+public class DigitsValidator implements Validator<Digits>, PropertyConstraint {
+	int integerDigits;
+	int fractionalDigits;
+
+	public void initialize(Digits configuration) {
+		integerDigits = configuration.integerDigits();
+		fractionalDigits = configuration.fractionalDigits();
+	}
+
+	public boolean isValid(Object value) {
+		if ( value == null ) {
+			return true;
+		}
+
+		String stringValue = null;
+
+		if ( value instanceof String ) {
+			try {
+				stringValue = stringValue( new BigDecimal( (String) value ) );
+			}
+			catch (NumberFormatException nfe) {
+				return false;
+			}
+		}
+		else if ( value instanceof BigDecimal ) {
+			stringValue = stringValue( (BigDecimal) value );
+		}
+		else if ( value instanceof BigInteger ) {
+			stringValue = stringValue( (BigInteger) value );
+		}
+		else if ( value instanceof Number ) {
+			//yukky
+			stringValue = stringValue( new BigDecimal( ( (Number) value ).toString() ) );
+		}
+		else {
+			return false;
+		}
+
+		int pos = stringValue.indexOf( "." );
+
+		int left = ( pos == -1 ) ?
+				stringValue.length() :
+				pos;
+		int right = ( pos == -1 ) ?
+				0 :
+				stringValue.length() - pos - 1;
+
+		if ( left == 1 && stringValue.charAt( 0 ) == '0' ) {
+			left--;
+		}
+
+		return !( left > integerDigits || right > fractionalDigits );
+
+	}
+
+	private String stringValue(BigDecimal number) {
+		return number.abs().stripTrailingZeros().toPlainString();
+	}
+
+	private String stringValue(BigInteger number) {
+		return number.abs().toString();
+	}
+
+	public void apply(Property property) {
+		Column col = (Column) property.getColumnIterator().next();
+		col.setPrecision( integerDigits + fractionalDigits );
+		col.setScale( fractionalDigits );
+	}
+}

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/EAN.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/EAN.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/EAN.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,23 +0,0 @@
-//$Id: $
-package org.hibernate.validator;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.Target;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * The annotated element has to represent an EAN-13 or UPC-A
- *
- * which aims to check for user mistake, not actual number validity!
- *
- * @author Emmanuel Bernard
- */
- at Documented
- at ValidatorClass( EANValidator.class)
- at Target({ElementType.METHOD, ElementType.FIELD})
- at Retention( RetentionPolicy.RUNTIME )
-public @interface EAN {
-	String message() default "{validator.ean}";
-}

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/EAN.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/EAN.java)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/EAN.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/EAN.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,23 @@
+//$Id: $
+package org.hibernate.validator;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Target;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * The annotated element has to represent an EAN-13 or UPC-A
+ *
+ * which aims to check for user mistake, not actual number validity!
+ *
+ * @author Emmanuel Bernard
+ */
+ at Documented
+ at ValidatorClass( EANValidator.class)
+ at Target({ElementType.METHOD, ElementType.FIELD})
+ at Retention( RetentionPolicy.RUNTIME )
+public @interface EAN {
+	String message() default "{validator.ean}";
+}

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/EANValidator.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/EANValidator.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/EANValidator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,41 +0,0 @@
-//$Id: $
-package org.hibernate.validator;
-
-import java.util.List;
-import java.util.ArrayList;
-
-/**
- * Validate EAN13 and UPC-A
- *
- * @author Emmanuel Bernard
- */
-public class EANValidator implements Validator<EAN> {
-
-	public void initialize(EAN parameters) {
-	}
-
-
-	public boolean isValid(Object value) {
-		if (value == null) return true;
-		if ( ! ( value instanceof String) ) return false;
-		String creditCard = (String) value;
-		char[] chars = creditCard.toCharArray();
-
-		List<Integer> ints = new ArrayList<Integer>();
-		for (char c : chars) {
-			if ( Character.isDigit( c ) ) ints.add( c - '0' );
-		}
-		int length = ints.size();
-		int sum = 0;
-		boolean even = false;
-		for ( int index = length - 1 ; index >= 0 ; index-- ) {
-			int digit = ints.get(index);
-			if  (even) {
-				digit *= 3;
-			}
-			sum+= digit;
-			even = !even;
-		}
-		return  sum % 10 == 0;
-	}
-}

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/EANValidator.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/EANValidator.java)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/EANValidator.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/EANValidator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,41 @@
+//$Id: $
+package org.hibernate.validator;
+
+import java.util.List;
+import java.util.ArrayList;
+
+/**
+ * Validate EAN13 and UPC-A
+ *
+ * @author Emmanuel Bernard
+ */
+public class EANValidator implements Validator<EAN> {
+
+	public void initialize(EAN parameters) {
+	}
+
+
+	public boolean isValid(Object value) {
+		if (value == null) return true;
+		if ( ! ( value instanceof String) ) return false;
+		String creditCard = (String) value;
+		char[] chars = creditCard.toCharArray();
+
+		List<Integer> ints = new ArrayList<Integer>();
+		for (char c : chars) {
+			if ( Character.isDigit( c ) ) ints.add( c - '0' );
+		}
+		int length = ints.size();
+		int sum = 0;
+		boolean even = false;
+		for ( int index = length - 1 ; index >= 0 ; index-- ) {
+			int digit = ints.get(index);
+			if  (even) {
+				digit *= 3;
+			}
+			sum+= digit;
+			even = !even;
+		}
+		return  sum % 10 == 0;
+	}
+}

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/Email.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/Email.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/Email.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,22 +0,0 @@
-//$Id$
-package org.hibernate.validator;
-
-import java.lang.annotation.Documented;
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.ElementType.METHOD;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * The string has to be a well-formed email address
- *
- * @author Emmanuel Bernard
- */
- at Documented
- at ValidatorClass(EmailValidator.class)
- at Target({METHOD, FIELD})
- at Retention(RUNTIME)
-public @interface Email {
-	String message() default "{validator.email}";
-}

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/Email.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/Email.java)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/Email.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/Email.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,22 @@
+//$Id$
+package org.hibernate.validator;
+
+import java.lang.annotation.Documented;
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * The string has to be a well-formed email address
+ *
+ * @author Emmanuel Bernard
+ */
+ at Documented
+ at ValidatorClass(EmailValidator.class)
+ at Target({METHOD, FIELD})
+ at Retention(RUNTIME)
+public @interface Email {
+	String message() default "{validator.email}";
+}

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/EmailValidator.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/EmailValidator.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/EmailValidator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,42 +0,0 @@
-//$Id$
-package org.hibernate.validator;
-
-import java.io.Serializable;
-import java.util.regex.Matcher;
-
-/**
- * Check that a given string is a well-formed email address
- *
- * @author Emmanuel Bernard
- */
-public class EmailValidator implements Validator<Email>, Serializable {
-	private static String ATOM = "[^\\x00-\\x1F^\\(^\\)^\\<^\\>^\\@^\\,^\\(;^\\:^\\\\^\\\"^\\.^\\[^\\]^\\s]";
-	private static String DOMAIN = "(" + ATOM + "+(\\." + ATOM + "+)*";
-	private static String IP_DOMAIN = "\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\]";
-
-	private java.util.regex.Pattern pattern;
-
-	public boolean isValid(Object value) {
-		if ( value == null ) return true;
-		if ( !( value instanceof String ) ) return false;
-		String string = (String) value;
-      if ( string.length() == 0 ) return true;
-      Matcher m = pattern.matcher( string );
-		return m.matches();
-	}
-
-	public void initialize(Email parameters) {
-		pattern = java.util.regex.Pattern.compile(
-				"^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9-]+)*$",
-				java.util.regex.Pattern.CASE_INSENSITIVE
-		);
-		pattern = java.util.regex.Pattern.compile(
-				"^" + ATOM + "+(\\." + ATOM + "+)*@"
-						 + DOMAIN
-						 + "|"
-						 + IP_DOMAIN
-						 + ")$",
-				java.util.regex.Pattern.CASE_INSENSITIVE
-		);
-	}
-}

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/EmailValidator.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/EmailValidator.java)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/EmailValidator.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/EmailValidator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,42 @@
+//$Id$
+package org.hibernate.validator;
+
+import java.io.Serializable;
+import java.util.regex.Matcher;
+
+/**
+ * Check that a given string is a well-formed email address
+ *
+ * @author Emmanuel Bernard
+ */
+public class EmailValidator implements Validator<Email>, Serializable {
+	private static String ATOM = "[^\\x00-\\x1F^\\(^\\)^\\<^\\>^\\@^\\,^\\(;^\\:^\\\\^\\\"^\\.^\\[^\\]^\\s]";
+	private static String DOMAIN = "(" + ATOM + "+(\\." + ATOM + "+)*";
+	private static String IP_DOMAIN = "\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\]";
+
+	private java.util.regex.Pattern pattern;
+
+	public boolean isValid(Object value) {
+		if ( value == null ) return true;
+		if ( !( value instanceof String ) ) return false;
+		String string = (String) value;
+      if ( string.length() == 0 ) return true;
+      Matcher m = pattern.matcher( string );
+		return m.matches();
+	}
+
+	public void initialize(Email parameters) {
+		pattern = java.util.regex.Pattern.compile(
+				"^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9-]+)*$",
+				java.util.regex.Pattern.CASE_INSENSITIVE
+		);
+		pattern = java.util.regex.Pattern.compile(
+				"^" + ATOM + "+(\\." + ATOM + "+)*@"
+						 + DOMAIN
+						 + "|"
+						 + IP_DOMAIN
+						 + ")$",
+				java.util.regex.Pattern.CASE_INSENSITIVE
+		);
+	}
+}

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/Environment.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/Environment.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/Environment.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,26 +0,0 @@
-//$Id: $
-package org.hibernate.validator;
-
-/**
- * Hibernate Validator Event properties
- * The properties are retrieved from Hibernate
- * (hibernate.properties, hibernate.cfg.xml, persistence.xml or Configuration API)
- *
- * @author Emmanuel Bernard
- */
-public class Environment {
-	/**
-	 * Message interpolator class used. The same instance is shared across all ClassValidators
-	 */
-	public static final String MESSAGE_INTERPOLATOR_CLASS = "hibernate.validator.message_interpolator_class";
-
-	/**
-	 * Apply DDL changes on Hibernate metamodel when using validator with Hibernate Annotations. Default to true.
-	 */
-	public static final String APPLY_TO_DDL = "hibernate.validator.apply_to_ddl";
-
-	/**
-	 * Enable listeners auto registration in Hibernate Annotations and EntityManager. Default to true.
-	 */
-	public static final String AUTOREGISTER_LISTENERS = "hibernate.validator.autoregister_listeners";
-}

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/Environment.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/Environment.java)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/Environment.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/Environment.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,26 @@
+//$Id: $
+package org.hibernate.validator;
+
+/**
+ * Hibernate Validator Event properties
+ * The properties are retrieved from Hibernate
+ * (hibernate.properties, hibernate.cfg.xml, persistence.xml or Configuration API)
+ *
+ * @author Emmanuel Bernard
+ */
+public class Environment {
+	/**
+	 * Message interpolator class used. The same instance is shared across all ClassValidators
+	 */
+	public static final String MESSAGE_INTERPOLATOR_CLASS = "hibernate.validator.message_interpolator_class";
+
+	/**
+	 * Apply DDL changes on Hibernate metamodel when using validator with Hibernate Annotations. Default to true.
+	 */
+	public static final String APPLY_TO_DDL = "hibernate.validator.apply_to_ddl";
+
+	/**
+	 * Enable listeners auto registration in Hibernate Annotations and EntityManager. Default to true.
+	 */
+	public static final String AUTOREGISTER_LISTENERS = "hibernate.validator.autoregister_listeners";
+}

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/Future.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/Future.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/Future.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,22 +0,0 @@
-//$Id$
-package org.hibernate.validator;
-
-import java.lang.annotation.Documented;
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.ElementType.METHOD;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * Check that a Date, a Calendar, or a string representation apply in the future
- *
- * @author Gavin King
- */
- at Documented
- at ValidatorClass(FutureValidator.class)
- at Target({METHOD, FIELD})
- at Retention(RUNTIME)
-public @interface Future {
-	String message() default "{validator.future}";
-}

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/Future.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/Future.java)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/Future.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/Future.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,22 @@
+//$Id$
+package org.hibernate.validator;
+
+import java.lang.annotation.Documented;
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * Check that a Date, a Calendar, or a string representation apply in the future
+ *
+ * @author Gavin King
+ */
+ at Documented
+ at ValidatorClass(FutureValidator.class)
+ at Target({METHOD, FIELD})
+ at Retention(RUNTIME)
+public @interface Future {
+	String message() default "{validator.future}";
+}

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/FutureValidator.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/FutureValidator.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/FutureValidator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,35 +0,0 @@
-//$Id$
-package org.hibernate.validator;
-
-import java.io.Serializable;
-import java.text.DateFormat;
-import java.text.ParseException;
-import java.util.Calendar;
-import java.util.Date;
-
-/**
- * Check that a given date is in the future, and apply the same restriction
- * at the DB level
- *
- * @author Emmanuel Bernard
- */
-public class FutureValidator implements Validator<Future>, Serializable {
-
-	public void initialize(Future parameters) {
-	}
-
-	public boolean isValid(Object value) {
-		if ( value == null ) return true;
-		if ( value instanceof Date ) {
-			Date date = (Date) value;
-			return date.after( new Date() );
-		}
-		else if ( value instanceof Calendar ) {
-			Calendar cal = (Calendar) value;
-			return cal.after( Calendar.getInstance() );
-		}
-		else {
-			return false;
-		}
-	}
-}

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/FutureValidator.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/FutureValidator.java)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/FutureValidator.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/FutureValidator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,35 @@
+//$Id$
+package org.hibernate.validator;
+
+import java.io.Serializable;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.util.Calendar;
+import java.util.Date;
+
+/**
+ * Check that a given date is in the future, and apply the same restriction
+ * at the DB level
+ *
+ * @author Emmanuel Bernard
+ */
+public class FutureValidator implements Validator<Future>, Serializable {
+
+	public void initialize(Future parameters) {
+	}
+
+	public boolean isValid(Object value) {
+		if ( value == null ) return true;
+		if ( value instanceof Date ) {
+			Date date = (Date) value;
+			return date.after( new Date() );
+		}
+		else if ( value instanceof Calendar ) {
+			Calendar cal = (Calendar) value;
+			return cal.after( Calendar.getInstance() );
+		}
+		else {
+			return false;
+		}
+	}
+}

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/InvalidStateException.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/InvalidStateException.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/InvalidStateException.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,27 +0,0 @@
-//$Id$
-package org.hibernate.validator;
-
-/**
- * Thrown when the bean has violated one or several of its constraints
- * You can get the violation details in getInvalidValues()
- *
- * @author Gavin King
- */
-public class InvalidStateException extends RuntimeException {
-
-	private final InvalidValue[] invalidValues;
-
-	public InvalidStateException(InvalidValue[] invalidValues) {
-		this( invalidValues, invalidValues[0].getBeanClass().getName() );
-	}
-
-	public InvalidStateException(InvalidValue[] invalidValues, String className) {
-		super( "validation failed for: " + className );
-		this.invalidValues = invalidValues;
-	}
-
-	public InvalidValue[] getInvalidValues() {
-		return invalidValues;
-	}
-
-}

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/InvalidStateException.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/InvalidStateException.java)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/InvalidStateException.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/InvalidStateException.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,27 @@
+//$Id$
+package org.hibernate.validator;
+
+/**
+ * Thrown when the bean has violated one or several of its constraints
+ * You can get the violation details in getInvalidValues()
+ *
+ * @author Gavin King
+ */
+public class InvalidStateException extends RuntimeException {
+
+	private final InvalidValue[] invalidValues;
+
+	public InvalidStateException(InvalidValue[] invalidValues) {
+		this( invalidValues, invalidValues[0].getBeanClass().getName() );
+	}
+
+	public InvalidStateException(InvalidValue[] invalidValues, String className) {
+		super( "validation failed for: " + className );
+		this.invalidValues = invalidValues;
+	}
+
+	public InvalidValue[] getInvalidValues() {
+		return invalidValues;
+	}
+
+}

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/InvalidValue.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/InvalidValue.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/InvalidValue.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,68 +0,0 @@
-//$Id$
-package org.hibernate.validator;
-
-import java.io.Serializable;
-
-/**
- * A single violation of a class level or method level constraint.
- *
- * @author Gavin King
- */
-public class InvalidValue implements Serializable {
-	private final String message;
-	private final Object value;
-	private final String propertyName;
-	private final Class beanClass;
-	private final Object bean;
-	private Object rootBean;
-
-	public Object getRootBean() {
-		return rootBean;
-	}
-
-	public String getPropertyPath() {
-		return propertyPath;
-	}
-
-	private String propertyPath;
-
-	public InvalidValue(String message, Class beanClass, String propertyName, Object value, Object bean) {
-		this.message = message;
-		this.value = value;
-		this.beanClass = beanClass;
-		this.propertyName = propertyName;
-		this.bean = bean;
-		this.rootBean = bean;
-		this.propertyPath = propertyName;
-	}
-
-	public void addParentBean(Object parentBean, String propertyName) {
-		this.rootBean = parentBean;
-		this.propertyPath = propertyName + "." + this.propertyPath;
-	}
-
-	public Class getBeanClass() {
-		return beanClass;
-	}
-
-	public String getMessage() {
-		return message;
-	}
-
-	public String getPropertyName() {
-		return propertyName;
-	}
-
-	public Object getValue() {
-		return value;
-	}
-
-	public Object getBean() {
-		return bean;
-	}
-
-	public String toString() {
-		return propertyName + ' ' + message;
-	}
-
-}

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/InvalidValue.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/InvalidValue.java)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/InvalidValue.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/InvalidValue.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,68 @@
+//$Id$
+package org.hibernate.validator;
+
+import java.io.Serializable;
+
+/**
+ * A single violation of a class level or method level constraint.
+ *
+ * @author Gavin King
+ */
+public class InvalidValue implements Serializable {
+	private final String message;
+	private final Object value;
+	private final String propertyName;
+	private final Class beanClass;
+	private final Object bean;
+	private Object rootBean;
+
+	public Object getRootBean() {
+		return rootBean;
+	}
+
+	public String getPropertyPath() {
+		return propertyPath;
+	}
+
+	private String propertyPath;
+
+	public InvalidValue(String message, Class beanClass, String propertyName, Object value, Object bean) {
+		this.message = message;
+		this.value = value;
+		this.beanClass = beanClass;
+		this.propertyName = propertyName;
+		this.bean = bean;
+		this.rootBean = bean;
+		this.propertyPath = propertyName;
+	}
+
+	public void addParentBean(Object parentBean, String propertyName) {
+		this.rootBean = parentBean;
+		this.propertyPath = propertyName + "." + this.propertyPath;
+	}
+
+	public Class getBeanClass() {
+		return beanClass;
+	}
+
+	public String getMessage() {
+		return message;
+	}
+
+	public String getPropertyName() {
+		return propertyName;
+	}
+
+	public Object getValue() {
+		return value;
+	}
+
+	public Object getBean() {
+		return bean;
+	}
+
+	public String toString() {
+		return propertyName + ' ' + message;
+	}
+
+}

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/Length.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/Length.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/Length.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,26 +0,0 @@
-//$Id$
-package org.hibernate.validator;
-
-import java.lang.annotation.Documented;
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.ElementType.METHOD;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * Apply some length restrictions to the annotated element. It has to be a string
- *
- * @author Gavin King
- */
- at Documented
- at ValidatorClass(LengthValidator.class)
- at Target({METHOD, FIELD})
- at Retention(RUNTIME)
-public @interface Length {
-	int max() default Integer.MAX_VALUE;
-
-	int min() default 0;
-
-	String message() default "{validator.length}";
-}

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/Length.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/Length.java)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/Length.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/Length.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,26 @@
+//$Id$
+package org.hibernate.validator;
+
+import java.lang.annotation.Documented;
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * Apply some length restrictions to the annotated element. It has to be a string
+ *
+ * @author Gavin King
+ */
+ at Documented
+ at ValidatorClass(LengthValidator.class)
+ at Target({METHOD, FIELD})
+ at Retention(RUNTIME)
+public @interface Length {
+	int max() default Integer.MAX_VALUE;
+
+	int min() default 0;
+
+	String message() default "{validator.length}";
+}

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/LengthValidator.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/LengthValidator.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/LengthValidator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,36 +0,0 @@
-//$Id$
-package org.hibernate.validator;
-
-import java.io.Serializable;
-
-import org.hibernate.mapping.Column;
-import org.hibernate.mapping.Property;
-
-/**
- * Do check a length restriction on a string, and apply expected contraints on hibernate metadata.
- *
- * @author Gavin King
- */
-public class LengthValidator implements Validator<Length>, PropertyConstraint, Serializable {
-	private int max;
-	private int min;
-
-	public void initialize(Length parameters) {
-		max = parameters.max();
-		min = parameters.min();
-	}
-
-	public boolean isValid(Object value) {
-		if ( value == null ) return true;
-		if ( !( value instanceof String ) ) return false;
-		String string = (String) value;
-		int length = string.length();
-		return length >= min && length <= max;
-	}
-
-	public void apply(Property property) {
-		Column col = (Column) property.getColumnIterator().next();
-		if ( max < Integer.MAX_VALUE ) col.setLength( max );
-	}
-
-}

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/LengthValidator.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/LengthValidator.java)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/LengthValidator.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/LengthValidator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,36 @@
+//$Id$
+package org.hibernate.validator;
+
+import java.io.Serializable;
+
+import org.hibernate.mapping.Column;
+import org.hibernate.mapping.Property;
+
+/**
+ * Do check a length restriction on a string, and apply expected contraints on hibernate metadata.
+ *
+ * @author Gavin King
+ */
+public class LengthValidator implements Validator<Length>, PropertyConstraint, Serializable {
+	private int max;
+	private int min;
+
+	public void initialize(Length parameters) {
+		max = parameters.max();
+		min = parameters.min();
+	}
+
+	public boolean isValid(Object value) {
+		if ( value == null ) return true;
+		if ( !( value instanceof String ) ) return false;
+		String string = (String) value;
+		int length = string.length();
+		return length >= min && length <= max;
+	}
+
+	public void apply(Property property) {
+		Column col = (Column) property.getColumnIterator().next();
+		if ( max < Integer.MAX_VALUE ) col.setLength( max );
+	}
+
+}

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/Max.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/Max.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/Max.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,24 +0,0 @@
-//$Id$
-package org.hibernate.validator;
-
-import java.lang.annotation.Documented;
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.ElementType.METHOD;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * max restriction on a numeric annotated element
- *
- * @author Gavin King
- */
- at Documented
- at ValidatorClass(MaxValidator.class)
- at Target({METHOD, FIELD})
- at Retention(RUNTIME)
-public @interface Max {
-	long value();
-
-	String message() default "{validator.max}";
-}

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/Max.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/Max.java)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/Max.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/Max.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,24 @@
+//$Id$
+package org.hibernate.validator;
+
+import java.lang.annotation.Documented;
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * max restriction on a numeric annotated element
+ *
+ * @author Gavin King
+ */
+ at Documented
+ at ValidatorClass(MaxValidator.class)
+ at Target({METHOD, FIELD})
+ at Retention(RUNTIME)
+public @interface Max {
+	long value();
+
+	String message() default "{validator.max}";
+}

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/MaxValidator.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/MaxValidator.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/MaxValidator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,58 +0,0 @@
-//$Id$
-package org.hibernate.validator;
-
-import java.io.Serializable;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-
-import org.hibernate.mapping.Column;
-import org.hibernate.mapping.Property;
-
-/**
- * Do check a max restriction on a numeric (whether and actual number or its string representation,
- * and apply expected contraints on hibernate metadata.
- *
- * @author Gavin King
- */
-public class MaxValidator implements Validator<Max>, PropertyConstraint, Serializable {
-
-	private long max;
-
-	public void initialize(Max parameters) {
-		max = parameters.value();
-	}
-
-	public boolean isValid(Object value) {
-		if ( value == null ) return true;
-		if ( value instanceof String ) {
-			try {
-				return new BigDecimal( (String) value ).compareTo( BigDecimal.valueOf( max ) ) <= 0;
-			}
-			catch (NumberFormatException nfe) {
-				return false;
-			}
-		}
-		else if ( ( value instanceof Double ) || ( value instanceof Float ) ) {
-			double dv = ( (Number) value ).doubleValue();
-			return dv <= max;
-		}
-		else if ( value instanceof BigInteger ) {
-			return ( (BigInteger) value ).compareTo( BigInteger.valueOf( max ) ) <= 0;
-		}
-		else if ( value instanceof BigDecimal ) {
-			return ( (BigDecimal) value ).compareTo( BigDecimal.valueOf( max ) ) <= 0;
-		}
-		else if ( value instanceof Number ) {
-			long lv = ( (Number) value ).longValue();
-			return lv <= max;
-		}
-		else {
-			return false;
-		}
-	}
-
-	public void apply(Property property) {
-		Column col = (Column) property.getColumnIterator().next();
-		col.setCheckConstraint( col.getName() + "<=" + max );
-	}
-}

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/MaxValidator.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/MaxValidator.java)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/MaxValidator.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/MaxValidator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,58 @@
+//$Id$
+package org.hibernate.validator;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+
+import org.hibernate.mapping.Column;
+import org.hibernate.mapping.Property;
+
+/**
+ * Do check a max restriction on a numeric (whether and actual number or its string representation,
+ * and apply expected contraints on hibernate metadata.
+ *
+ * @author Gavin King
+ */
+public class MaxValidator implements Validator<Max>, PropertyConstraint, Serializable {
+
+	private long max;
+
+	public void initialize(Max parameters) {
+		max = parameters.value();
+	}
+
+	public boolean isValid(Object value) {
+		if ( value == null ) return true;
+		if ( value instanceof String ) {
+			try {
+				return new BigDecimal( (String) value ).compareTo( BigDecimal.valueOf( max ) ) <= 0;
+			}
+			catch (NumberFormatException nfe) {
+				return false;
+			}
+		}
+		else if ( ( value instanceof Double ) || ( value instanceof Float ) ) {
+			double dv = ( (Number) value ).doubleValue();
+			return dv <= max;
+		}
+		else if ( value instanceof BigInteger ) {
+			return ( (BigInteger) value ).compareTo( BigInteger.valueOf( max ) ) <= 0;
+		}
+		else if ( value instanceof BigDecimal ) {
+			return ( (BigDecimal) value ).compareTo( BigDecimal.valueOf( max ) ) <= 0;
+		}
+		else if ( value instanceof Number ) {
+			long lv = ( (Number) value ).longValue();
+			return lv <= max;
+		}
+		else {
+			return false;
+		}
+	}
+
+	public void apply(Property property) {
+		Column col = (Column) property.getColumnIterator().next();
+		col.setCheckConstraint( col.getName() + "<=" + max );
+	}
+}

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/MessageInterpolator.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/MessageInterpolator.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/MessageInterpolator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,17 +0,0 @@
-//$Id: $
-package org.hibernate.validator;
-
-/**
- * Responsible for validator message interpolation (variable replacement etc)
- * this extension point is useful if the call has some contextual informations to
- * interpolate in validator messages
- *
- * @author Emmanuel Bernard
- */
-public interface MessageInterpolator {
-	/**
-	 * Interpolate a given validator message.
-	 * The implementation is free to delegate to the default interpolator or not.
-	 */
-	String interpolate(String message, Validator validator, MessageInterpolator defaultInterpolator);
-}

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/MessageInterpolator.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/MessageInterpolator.java)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/MessageInterpolator.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/MessageInterpolator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,17 @@
+//$Id: $
+package org.hibernate.validator;
+
+/**
+ * Responsible for validator message interpolation (variable replacement etc)
+ * this extension point is useful if the call has some contextual informations to
+ * interpolate in validator messages
+ *
+ * @author Emmanuel Bernard
+ */
+public interface MessageInterpolator {
+	/**
+	 * Interpolate a given validator message.
+	 * The implementation is free to delegate to the default interpolator or not.
+	 */
+	String interpolate(String message, Validator validator, MessageInterpolator defaultInterpolator);
+}

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/Min.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/Min.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/Min.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,24 +0,0 @@
-//$Id$
-package org.hibernate.validator;
-
-import java.lang.annotation.Documented;
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.ElementType.METHOD;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * min restriction on a numeric annotated elemnt (or the string representation of a numeric)
- *
- * @author Gavin King
- */
- at Documented
- at ValidatorClass(MinValidator.class)
- at Target({METHOD, FIELD})
- at Retention(RUNTIME)
-public @interface Min {
-	long value();
-
-	String message() default "{validator.min}";
-}

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/Min.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/Min.java)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/Min.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/Min.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,24 @@
+//$Id$
+package org.hibernate.validator;
+
+import java.lang.annotation.Documented;
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * min restriction on a numeric annotated elemnt (or the string representation of a numeric)
+ *
+ * @author Gavin King
+ */
+ at Documented
+ at ValidatorClass(MinValidator.class)
+ at Target({METHOD, FIELD})
+ at Retention(RUNTIME)
+public @interface Min {
+	long value();
+
+	String message() default "{validator.min}";
+}

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/MinValidator.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/MinValidator.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/MinValidator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,58 +0,0 @@
-//$Id$
-package org.hibernate.validator;
-
-import java.io.Serializable;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-
-import org.hibernate.mapping.Column;
-import org.hibernate.mapping.Property;
-
-/**
- * Do check a min restriction on a numeric (whether and actual number or its string representation,
- * and apply expected contraints on hibernate metadata.
- *
- * @author Gavin King
- */
-public class MinValidator implements Validator<Min>, PropertyConstraint, Serializable {
-
-	private long min;
-
-	public void initialize(Min parameters) {
-		min = parameters.value();
-	}
-
-	public boolean isValid(Object value) {
-		if ( value == null ) return true;
-		if ( value instanceof String ) {
-			try {
-				return new BigDecimal( (String) value ).compareTo( BigDecimal.valueOf(min) ) >= 0;
-			}
-			catch (NumberFormatException nfe) {
-				return false;
-			}
-		}
-		else if ( ( value instanceof Double ) || ( value instanceof Float ) ) {
-			double dv = ( (Number) value ).doubleValue();
-			return dv >= min;
-		}
-		else if ( value instanceof BigInteger ) {
-			return ( (BigInteger) value ).compareTo( BigInteger.valueOf( min ) ) >= 0;
-		}
-		else if ( value instanceof BigDecimal ) {
-			return ( (BigDecimal) value ).compareTo( BigDecimal.valueOf( min ) ) >= 0;
-		}
-		else if ( value instanceof Number ) {
-			long lv = ( (Number) value ).longValue();
-			return lv >= min;
-		}
-		else {
-			return false;
-		}
-	}
-
-	public void apply(Property property) {
-		Column col = (Column) property.getColumnIterator().next();
-		col.setCheckConstraint( col.getName() + ">=" + min );
-	}
-}

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/MinValidator.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/MinValidator.java)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/MinValidator.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/MinValidator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,58 @@
+//$Id$
+package org.hibernate.validator;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+
+import org.hibernate.mapping.Column;
+import org.hibernate.mapping.Property;
+
+/**
+ * Do check a min restriction on a numeric (whether and actual number or its string representation,
+ * and apply expected contraints on hibernate metadata.
+ *
+ * @author Gavin King
+ */
+public class MinValidator implements Validator<Min>, PropertyConstraint, Serializable {
+
+	private long min;
+
+	public void initialize(Min parameters) {
+		min = parameters.value();
+	}
+
+	public boolean isValid(Object value) {
+		if ( value == null ) return true;
+		if ( value instanceof String ) {
+			try {
+				return new BigDecimal( (String) value ).compareTo( BigDecimal.valueOf(min) ) >= 0;
+			}
+			catch (NumberFormatException nfe) {
+				return false;
+			}
+		}
+		else if ( ( value instanceof Double ) || ( value instanceof Float ) ) {
+			double dv = ( (Number) value ).doubleValue();
+			return dv >= min;
+		}
+		else if ( value instanceof BigInteger ) {
+			return ( (BigInteger) value ).compareTo( BigInteger.valueOf( min ) ) >= 0;
+		}
+		else if ( value instanceof BigDecimal ) {
+			return ( (BigDecimal) value ).compareTo( BigDecimal.valueOf( min ) ) >= 0;
+		}
+		else if ( value instanceof Number ) {
+			long lv = ( (Number) value ).longValue();
+			return lv >= min;
+		}
+		else {
+			return false;
+		}
+	}
+
+	public void apply(Property property) {
+		Column col = (Column) property.getColumnIterator().next();
+		col.setCheckConstraint( col.getName() + ">=" + min );
+	}
+}

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/NotEmpty.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/NotEmpty.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/NotEmpty.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,22 +0,0 @@
-//$Id: $
-package org.hibernate.validator;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.Target;
-import java.lang.annotation.Retention;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * Check that a String is not empty (not null and length > 0)
- * or that a Collection (or array) is not empty (not null and length > 0)
- *
- * @author Emmanuel Bernard
- */
- at Documented
- at ValidatorClass(NotEmptyValidator.class)
- at Target({ElementType.METHOD, ElementType.FIELD})
- at Retention( RetentionPolicy.RUNTIME )
-public @interface NotEmpty {
-	String message() default "{validator.notEmpty}";
-}

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/NotEmpty.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/NotEmpty.java)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/NotEmpty.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/NotEmpty.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,22 @@
+//$Id: $
+package org.hibernate.validator;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Target;
+import java.lang.annotation.Retention;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * Check that a String is not empty (not null and length > 0)
+ * or that a Collection (or array) is not empty (not null and length > 0)
+ *
+ * @author Emmanuel Bernard
+ */
+ at Documented
+ at ValidatorClass(NotEmptyValidator.class)
+ at Target({ElementType.METHOD, ElementType.FIELD})
+ at Retention( RetentionPolicy.RUNTIME )
+public @interface NotEmpty {
+	String message() default "{validator.notEmpty}";
+}

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/NotEmptyValidator.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/NotEmptyValidator.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/NotEmptyValidator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,54 +0,0 @@
-//$Id: $
-package org.hibernate.validator;
-
-import java.io.Serializable;
-import java.lang.reflect.Array;
-import java.util.Collection;
-import java.util.Map;
-import java.util.Iterator;
-
-import org.hibernate.mapping.Property;
-import org.hibernate.mapping.SingleTableSubclass;
-import org.hibernate.mapping.Column;
-
-/**
- * Check the non emptyness of the element
- *
- * @author Gavin King
- */
-public class NotEmptyValidator implements Validator<NotEmpty>, PropertyConstraint, Serializable {
-
-	public void initialize(NotEmpty parameters) {
-	}
-
-	public boolean isValid(Object value) {
-		if ( value == null ) return false;
-		if ( value.getClass().isArray() ) {
-			return Array.getLength( value ) > 0;
-		}
-		else if ( value instanceof Collection ) {
-			return ( (Collection) value ).size() > 0;
-		}
-		else if ( value instanceof Map ) {
-			return ( (Map) value ).size() > 0;
-		}
-		else {
-			return ( (String) value ).length() > 0;
-		}
-	}
-
-	@SuppressWarnings("unchecked")
-	public void apply(Property property) {
-		if ( ! ( property.getPersistentClass() instanceof SingleTableSubclass )
-				&& ! ( property.getValue() instanceof Collection ) ) {
-			//single table should not be forced to null
-			if ( !property.isComposite() ) { //composite should not add not-null on all columns
-				Iterator<Column> iter = (Iterator<Column>) property.getColumnIterator();
-				while ( iter.hasNext() ) {
-					iter.next().setNullable( false );
-				}
-			}
-		}
-	}
-
-}

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/NotEmptyValidator.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/NotEmptyValidator.java)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/NotEmptyValidator.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/NotEmptyValidator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,54 @@
+//$Id: $
+package org.hibernate.validator;
+
+import java.io.Serializable;
+import java.lang.reflect.Array;
+import java.util.Collection;
+import java.util.Map;
+import java.util.Iterator;
+
+import org.hibernate.mapping.Property;
+import org.hibernate.mapping.SingleTableSubclass;
+import org.hibernate.mapping.Column;
+
+/**
+ * Check the non emptyness of the element
+ *
+ * @author Gavin King
+ */
+public class NotEmptyValidator implements Validator<NotEmpty>, PropertyConstraint, Serializable {
+
+	public void initialize(NotEmpty parameters) {
+	}
+
+	public boolean isValid(Object value) {
+		if ( value == null ) return false;
+		if ( value.getClass().isArray() ) {
+			return Array.getLength( value ) > 0;
+		}
+		else if ( value instanceof Collection ) {
+			return ( (Collection) value ).size() > 0;
+		}
+		else if ( value instanceof Map ) {
+			return ( (Map) value ).size() > 0;
+		}
+		else {
+			return ( (String) value ).length() > 0;
+		}
+	}
+
+	@SuppressWarnings("unchecked")
+	public void apply(Property property) {
+		if ( ! ( property.getPersistentClass() instanceof SingleTableSubclass )
+				&& ! ( property.getValue() instanceof Collection ) ) {
+			//single table should not be forced to null
+			if ( !property.isComposite() ) { //composite should not add not-null on all columns
+				Iterator<Column> iter = (Iterator<Column>) property.getColumnIterator();
+				while ( iter.hasNext() ) {
+					iter.next().setNullable( false );
+				}
+			}
+		}
+	}
+
+}

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/NotNull.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/NotNull.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/NotNull.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,22 +0,0 @@
-//$Id$
-package org.hibernate.validator;
-
-import java.lang.annotation.Documented;
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.ElementType.METHOD;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * not null constraint
- *
- * @author Gavin King
- */
- at Documented
- at ValidatorClass(NotNullValidator.class)
- at Target({METHOD, FIELD})
- at Retention(RUNTIME)
-public @interface NotNull {
-	String message() default "{validator.notNull}";
-}

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/NotNull.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/NotNull.java)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/NotNull.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/NotNull.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,22 @@
+//$Id$
+package org.hibernate.validator;
+
+import java.lang.annotation.Documented;
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * not null constraint
+ *
+ * @author Gavin King
+ */
+ at Documented
+ at ValidatorClass(NotNullValidator.class)
+ at Target({METHOD, FIELD})
+ at Retention(RUNTIME)
+public @interface NotNull {
+	String message() default "{validator.notNull}";
+}

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/NotNullValidator.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/NotNullValidator.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/NotNullValidator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,38 +0,0 @@
-//$Id$
-package org.hibernate.validator;
-
-import java.io.Serializable;
-import java.util.Iterator;
-
-import org.hibernate.mapping.Column;
-import org.hibernate.mapping.Property;
-import org.hibernate.mapping.SingleTableSubclass;
-
-/**
- * Check a not null restriction on an object
- * and apply the equivalent constraint on hibernate metadata.
- *
- * @author Gavin King
- */
-public class NotNullValidator implements Validator<NotNull>, PropertyConstraint, Serializable {
-
-	public boolean isValid(Object value) {
-		return value != null;
-	}
-
-	public void initialize(NotNull parameters) {
-	}
-
-	@SuppressWarnings("unchecked")
-	public void apply(Property property) {
-		if ( ! ( property.getPersistentClass() instanceof SingleTableSubclass ) ) {
-			//single table should not be forced to null
-			if ( !property.isComposite() ) { //composite should not add not-null on all columns
-				Iterator<Column> iter = (Iterator<Column>) property.getColumnIterator();
-				while ( iter.hasNext() ) {
-					iter.next().setNullable( false );
-				}
-			}
-		}
-	}
-}

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/NotNullValidator.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/NotNullValidator.java)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/NotNullValidator.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/NotNullValidator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,38 @@
+//$Id$
+package org.hibernate.validator;
+
+import java.io.Serializable;
+import java.util.Iterator;
+
+import org.hibernate.mapping.Column;
+import org.hibernate.mapping.Property;
+import org.hibernate.mapping.SingleTableSubclass;
+
+/**
+ * Check a not null restriction on an object
+ * and apply the equivalent constraint on hibernate metadata.
+ *
+ * @author Gavin King
+ */
+public class NotNullValidator implements Validator<NotNull>, PropertyConstraint, Serializable {
+
+	public boolean isValid(Object value) {
+		return value != null;
+	}
+
+	public void initialize(NotNull parameters) {
+	}
+
+	@SuppressWarnings("unchecked")
+	public void apply(Property property) {
+		if ( ! ( property.getPersistentClass() instanceof SingleTableSubclass ) ) {
+			//single table should not be forced to null
+			if ( !property.isComposite() ) { //composite should not add not-null on all columns
+				Iterator<Column> iter = (Iterator<Column>) property.getColumnIterator();
+				while ( iter.hasNext() ) {
+					iter.next().setNullable( false );
+				}
+			}
+		}
+	}
+}

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/Past.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/Past.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/Past.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,22 +0,0 @@
-//$Id$
-package org.hibernate.validator;
-
-import java.lang.annotation.Documented;
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.ElementType.METHOD;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * Check that a Date, a Calendar, or a string representation apply in the past
- *
- * @author Gavin King
- */
- at Documented
- at ValidatorClass(PastValidator.class)
- at Target({METHOD, FIELD})
- at Retention(RUNTIME)
-public @interface Past {
-	String message() default "{validator.past}";
-}

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/Past.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/Past.java)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/Past.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/Past.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,22 @@
+//$Id$
+package org.hibernate.validator;
+
+import java.lang.annotation.Documented;
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * Check that a Date, a Calendar, or a string representation apply in the past
+ *
+ * @author Gavin King
+ */
+ at Documented
+ at ValidatorClass(PastValidator.class)
+ at Target({METHOD, FIELD})
+ at Retention(RUNTIME)
+public @interface Past {
+	String message() default "{validator.past}";
+}

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/PastValidator.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/PastValidator.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/PastValidator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,43 +0,0 @@
-//$Id$
-package org.hibernate.validator;
-
-import java.io.Serializable;
-import java.text.DateFormat;
-import java.text.ParseException;
-import java.util.Calendar;
-import java.util.Date;
-
-import org.hibernate.mapping.Column;
-import org.hibernate.mapping.Property;
-
-/**
- * Check that a given date is in the past, and apply the same restriction
- * at the DB level
- *
- * @author Gavin King
- */
-public class PastValidator implements Validator<Past>, PropertyConstraint, Serializable {
-
-	public void initialize(Past parameters) {
-	}
-
-	public boolean isValid(Object value) {
-		if ( value == null ) return true;
-		if ( value instanceof Date ) {
-			Date date = (Date) value;
-			return date.before( new Date() );
-		}
-		else if ( value instanceof Calendar ) {
-			Calendar cal = (Calendar) value;
-			return cal.before( Calendar.getInstance() );
-		}
-		else {
-			return false;
-		}
-	}
-
-	public void apply(Property property) {
-		Column col = (Column) property.getColumnIterator().next();
-		col.setCheckConstraint( col.getName() + " < current_date" );
-	}
-}

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/PastValidator.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/PastValidator.java)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/PastValidator.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/PastValidator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,43 @@
+//$Id$
+package org.hibernate.validator;
+
+import java.io.Serializable;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.util.Calendar;
+import java.util.Date;
+
+import org.hibernate.mapping.Column;
+import org.hibernate.mapping.Property;
+
+/**
+ * Check that a given date is in the past, and apply the same restriction
+ * at the DB level
+ *
+ * @author Gavin King
+ */
+public class PastValidator implements Validator<Past>, PropertyConstraint, Serializable {
+
+	public void initialize(Past parameters) {
+	}
+
+	public boolean isValid(Object value) {
+		if ( value == null ) return true;
+		if ( value instanceof Date ) {
+			Date date = (Date) value;
+			return date.before( new Date() );
+		}
+		else if ( value instanceof Calendar ) {
+			Calendar cal = (Calendar) value;
+			return cal.before( Calendar.getInstance() );
+		}
+		else {
+			return false;
+		}
+	}
+
+	public void apply(Property property) {
+		Column col = (Column) property.getColumnIterator().next();
+		col.setCheckConstraint( col.getName() + " < current_date" );
+	}
+}

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/Pattern.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/Pattern.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/Pattern.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,28 +0,0 @@
-//$Id$
-package org.hibernate.validator;
-
-import java.lang.annotation.Documented;
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.ElementType.METHOD;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * The annotated element must follow the regexp pattern
- *
- * @author Gavin King
- */
- at Documented
- at ValidatorClass(PatternValidator.class)
- at Target({METHOD, FIELD})
- at Retention(RUNTIME)
-public @interface Pattern {
-	/** regular expression */
-	String regex();
-
-	/** regular expression processing flags */
-	int flags() default 0;
-
-	String message() default "{validator.pattern}";
-}

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/Pattern.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/Pattern.java)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/Pattern.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/Pattern.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,28 @@
+//$Id$
+package org.hibernate.validator;
+
+import java.lang.annotation.Documented;
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * The annotated element must follow the regexp pattern
+ *
+ * @author Gavin King
+ */
+ at Documented
+ at ValidatorClass(PatternValidator.class)
+ at Target({METHOD, FIELD})
+ at Retention(RUNTIME)
+public @interface Pattern {
+	/** regular expression */
+	String regex();
+
+	/** regular expression processing flags */
+	int flags() default 0;
+
+	String message() default "{validator.pattern}";
+}

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/PatternValidator.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/PatternValidator.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/PatternValidator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,31 +0,0 @@
-//$Id$
-package org.hibernate.validator;
-
-import java.io.Serializable;
-import java.util.regex.Matcher;
-
-/**
- * check if a given element match the regular expression
- *
- * @author Gavin King
- */
-public class PatternValidator implements Validator<Pattern>, Serializable {
-
-	private java.util.regex.Pattern pattern;
-
-	public void initialize(Pattern parameters) {
-		pattern = java.util.regex.Pattern.compile(
-				parameters.regex(),
-				parameters.flags()
-		);
-	}
-
-	public boolean isValid(Object value) {
-		if ( value == null ) return true;
-		if ( !( value instanceof String ) ) return false;
-		String string = (String) value;
-		Matcher m = pattern.matcher( string );
-		return m.matches();
-	}
-
-}

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/PatternValidator.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/PatternValidator.java)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/PatternValidator.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/PatternValidator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,31 @@
+//$Id$
+package org.hibernate.validator;
+
+import java.io.Serializable;
+import java.util.regex.Matcher;
+
+/**
+ * check if a given element match the regular expression
+ *
+ * @author Gavin King
+ */
+public class PatternValidator implements Validator<Pattern>, Serializable {
+
+	private java.util.regex.Pattern pattern;
+
+	public void initialize(Pattern parameters) {
+		pattern = java.util.regex.Pattern.compile(
+				parameters.regex(),
+				parameters.flags()
+		);
+	}
+
+	public boolean isValid(Object value) {
+		if ( value == null ) return true;
+		if ( !( value instanceof String ) ) return false;
+		String string = (String) value;
+		Matcher m = pattern.matcher( string );
+		return m.matches();
+	}
+
+}

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/Patterns.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/Patterns.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/Patterns.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,21 +0,0 @@
-//$Id: $
-package org.hibernate.validator;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.Target;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import static java.lang.annotation.ElementType.METHOD;
-import static java.lang.annotation.ElementType.FIELD;
-
-/**
- * The annotated element must follow the list of regexp patterns
- *
- * @author Gavin King
- */
- at Documented
- at Target({METHOD, FIELD})
- at Retention(RUNTIME)
-public @interface Patterns {
-	Pattern[] value();
-}

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/Patterns.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/Patterns.java)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/Patterns.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/Patterns.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,21 @@
+//$Id: $
+package org.hibernate.validator;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Target;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.FIELD;
+
+/**
+ * The annotated element must follow the list of regexp patterns
+ *
+ * @author Gavin King
+ */
+ at Documented
+ at Target({METHOD, FIELD})
+ at Retention(RUNTIME)
+public @interface Patterns {
+	Pattern[] value();
+}

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/PersistentClassConstraint.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/PersistentClassConstraint.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/PersistentClassConstraint.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,20 +0,0 @@
-//$Id$
-package org.hibernate.validator;
-
-import org.hibernate.mapping.PersistentClass;
-
-/**
- * Interface implemented by the validator
- * when a constraint may be represented in the
- * hibernate metadata
- *
- * @author Gavin King
- */
-public interface PersistentClassConstraint {
-	/**
-	 * Apply the constraint in the hibernate metadata
-	 *
-	 * @param persistentClass
-	 */
-	public void apply(PersistentClass persistentClass);
-}

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/PersistentClassConstraint.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/PersistentClassConstraint.java)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/PersistentClassConstraint.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/PersistentClassConstraint.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,20 @@
+//$Id$
+package org.hibernate.validator;
+
+import org.hibernate.mapping.PersistentClass;
+
+/**
+ * Interface implemented by the validator
+ * when a constraint may be represented in the
+ * hibernate metadata
+ *
+ * @author Gavin King
+ */
+public interface PersistentClassConstraint {
+	/**
+	 * Apply the constraint in the hibernate metadata
+	 *
+	 * @param persistentClass
+	 */
+	public void apply(PersistentClass persistentClass);
+}

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/PropertyConstraint.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/PropertyConstraint.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/PropertyConstraint.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,16 +0,0 @@
-//$Id$
-package org.hibernate.validator;
-
-import org.hibernate.mapping.Property;
-
-/**
- * Interface implemented by the validator
- * when a constraint may be represented in a
- * hibernate metadata property
- *
- * @author Gavin King
- */
-public interface PropertyConstraint {
-
-	public void apply(Property property);
-}

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/PropertyConstraint.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/PropertyConstraint.java)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/PropertyConstraint.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/PropertyConstraint.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,16 @@
+//$Id$
+package org.hibernate.validator;
+
+import org.hibernate.mapping.Property;
+
+/**
+ * Interface implemented by the validator
+ * when a constraint may be represented in a
+ * hibernate metadata property
+ *
+ * @author Gavin King
+ */
+public interface PropertyConstraint {
+
+	public void apply(Property property);
+}

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/Range.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/Range.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/Range.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,27 +0,0 @@
-//$Id$
-package org.hibernate.validator;
-
-import java.lang.annotation.Documented;
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.ElementType.METHOD;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * The annotated elemnt has to be in the appropriate range. Apply on numeric values or string
- * representation of the numeric value.
- *
- * @author Gavin King
- */
- at Documented
- at ValidatorClass(RangeValidator.class)
- at Target({METHOD, FIELD})
- at Retention(RUNTIME)
-public @interface Range {
-	long max() default Long.MAX_VALUE;
-
-	long min() default Long.MIN_VALUE;
-
-	String message() default "{validator.range}";
-}

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/Range.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/Range.java)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/Range.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/Range.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,27 @@
+//$Id$
+package org.hibernate.validator;
+
+import java.lang.annotation.Documented;
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * The annotated elemnt has to be in the appropriate range. Apply on numeric values or string
+ * representation of the numeric value.
+ *
+ * @author Gavin King
+ */
+ at Documented
+ at ValidatorClass(RangeValidator.class)
+ at Target({METHOD, FIELD})
+ at Retention(RUNTIME)
+public @interface Range {
+	long max() default Long.MAX_VALUE;
+
+	long min() default Long.MIN_VALUE;
+
+	String message() default "{validator.range}";
+}

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/RangeValidator.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/RangeValidator.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/RangeValidator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,57 +0,0 @@
-//$Id$
-package org.hibernate.validator;
-
-import java.io.Serializable;
-import java.math.BigDecimal;
-
-import org.hibernate.mapping.Column;
-import org.hibernate.mapping.Property;
-
-/**
- * The value has to be in a defined range, the constraint is also applied on DB
- *
- * @author Gavin King
- */
-public class RangeValidator implements Validator<Range>, PropertyConstraint, Serializable {
-	private long max;
-	private long min;
-
-	public void initialize(Range parameters) {
-		max = parameters.max();
-		min = parameters.min();
-	}
-
-	public boolean isValid(Object value) {
-		if ( value == null ) return true;
-		if ( value instanceof String ) {
-			try {
-				BigDecimal dv = new BigDecimal( (String) value );
-				return dv.compareTo( BigDecimal.valueOf( min ) ) >= 0 && dv.compareTo( BigDecimal.valueOf( max ) ) <= 0;
-			}
-			catch (NumberFormatException nfe) {
-				return false;
-			}
-		}
-		else if ( ( value instanceof Double ) || ( value instanceof Float ) ) {
-			double dv = ( (Number) value ).doubleValue();
-			return dv >= min && dv <= max;
-		}
-		else if ( value instanceof Number ) {
-			long lv = ( (Number) value ).longValue();
-			return lv >= min && lv <= max;
-		}
-		else {
-			return false;
-		}
-	}
-
-	public void apply(Property property) {
-		Column col = (Column) property.getColumnIterator().next();
-		String check = "";
-		if ( min != Long.MIN_VALUE ) check += col.getName() + ">=" + min;
-		if ( max != Long.MAX_VALUE && min != Long.MIN_VALUE ) check += " and ";
-		if ( max != Long.MAX_VALUE ) check += col.getName() + "<=" + max;
-		col.setCheckConstraint( check );
-	}
-
-}

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/RangeValidator.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/RangeValidator.java)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/RangeValidator.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/RangeValidator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,57 @@
+//$Id$
+package org.hibernate.validator;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+import org.hibernate.mapping.Column;
+import org.hibernate.mapping.Property;
+
+/**
+ * The value has to be in a defined range, the constraint is also applied on DB
+ *
+ * @author Gavin King
+ */
+public class RangeValidator implements Validator<Range>, PropertyConstraint, Serializable {
+	private long max;
+	private long min;
+
+	public void initialize(Range parameters) {
+		max = parameters.max();
+		min = parameters.min();
+	}
+
+	public boolean isValid(Object value) {
+		if ( value == null ) return true;
+		if ( value instanceof String ) {
+			try {
+				BigDecimal dv = new BigDecimal( (String) value );
+				return dv.compareTo( BigDecimal.valueOf( min ) ) >= 0 && dv.compareTo( BigDecimal.valueOf( max ) ) <= 0;
+			}
+			catch (NumberFormatException nfe) {
+				return false;
+			}
+		}
+		else if ( ( value instanceof Double ) || ( value instanceof Float ) ) {
+			double dv = ( (Number) value ).doubleValue();
+			return dv >= min && dv <= max;
+		}
+		else if ( value instanceof Number ) {
+			long lv = ( (Number) value ).longValue();
+			return lv >= min && lv <= max;
+		}
+		else {
+			return false;
+		}
+	}
+
+	public void apply(Property property) {
+		Column col = (Column) property.getColumnIterator().next();
+		String check = "";
+		if ( min != Long.MIN_VALUE ) check += col.getName() + ">=" + min;
+		if ( max != Long.MAX_VALUE && min != Long.MIN_VALUE ) check += " and ";
+		if ( max != Long.MAX_VALUE ) check += col.getName() + "<=" + max;
+		col.setCheckConstraint( check );
+	}
+
+}

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/Size.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/Size.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/Size.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,26 +0,0 @@
-//$Id$
-package org.hibernate.validator;
-
-import java.lang.annotation.Documented;
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.ElementType.METHOD;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * Size range for Arrays, Collections or Maps
- *
- * @author Gavin King
- */
- at Documented
- at ValidatorClass(SizeValidator.class)
- at Target({METHOD, FIELD})
- at Retention(RUNTIME)
-public @interface Size {
-	int max() default Integer.MAX_VALUE;
-
-	int min() default 0;
-
-	String message() default "{validator.size}";
-}

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/Size.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/Size.java)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/Size.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/Size.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,26 @@
+//$Id$
+package org.hibernate.validator;
+
+import java.lang.annotation.Documented;
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * Size range for Arrays, Collections or Maps
+ *
+ * @author Gavin King
+ */
+ at Documented
+ at ValidatorClass(SizeValidator.class)
+ at Target({METHOD, FIELD})
+ at Retention(RUNTIME)
+public @interface Size {
+	int max() default Integer.MAX_VALUE;
+
+	int min() default 0;
+
+	String message() default "{validator.size}";
+}

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/SizeValidator.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/SizeValidator.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/SizeValidator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,41 +0,0 @@
-//$Id$
-package org.hibernate.validator;
-
-import java.io.Serializable;
-import java.lang.reflect.Array;
-import java.util.Collection;
-import java.util.Map;
-
-/**
- * Check the size range according to the element
- *
- * @author Gavin King
- */
-public class SizeValidator implements Validator<Size>, Serializable {
-	private int max;
-	private int min;
-
-	public void initialize(Size parameters) {
-		max = parameters.max();
-		min = parameters.min();
-	}
-
-	public boolean isValid(Object value) {
-		if ( value == null ) return true;
-		int length;
-		if ( value.getClass().isArray() ) {
-			length = Array.getLength( value );
-		}
-		else if ( value instanceof Collection ) {
-			length = ( (Collection) value ).size();
-		}
-		else if ( value instanceof Map ) {
-			length = ( (Map) value ).size();
-		}
-		else {
-			return false;
-		}
-		return length >= min && length <= max;
-	}
-
-}

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/SizeValidator.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/SizeValidator.java)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/SizeValidator.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/SizeValidator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,41 @@
+//$Id$
+package org.hibernate.validator;
+
+import java.io.Serializable;
+import java.lang.reflect.Array;
+import java.util.Collection;
+import java.util.Map;
+
+/**
+ * Check the size range according to the element
+ *
+ * @author Gavin King
+ */
+public class SizeValidator implements Validator<Size>, Serializable {
+	private int max;
+	private int min;
+
+	public void initialize(Size parameters) {
+		max = parameters.max();
+		min = parameters.min();
+	}
+
+	public boolean isValid(Object value) {
+		if ( value == null ) return true;
+		int length;
+		if ( value.getClass().isArray() ) {
+			length = Array.getLength( value );
+		}
+		else if ( value instanceof Collection ) {
+			length = ( (Collection) value ).size();
+		}
+		else if ( value instanceof Map ) {
+			length = ( (Map) value ).size();
+		}
+		else {
+			return false;
+		}
+		return length >= min && length <= max;
+	}
+
+}

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/Valid.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/Valid.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/Valid.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,20 +0,0 @@
-//$Id$
-package org.hibernate.validator;
-
-import java.lang.annotation.Documented;
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.ElementType.METHOD;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-/**
- * Enables recursive validation of an associated object
- *
- * @author Gavin King
- */
- at Documented
- at Target({METHOD, FIELD})
- at Retention(RUNTIME)
-public @interface Valid {
-}

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/Valid.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/Valid.java)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/Valid.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/Valid.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,20 @@
+//$Id$
+package org.hibernate.validator;
+
+import java.lang.annotation.Documented;
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * Enables recursive validation of an associated object
+ *
+ * @author Gavin King
+ */
+ at Documented
+ at Target({METHOD, FIELD})
+ at Retention(RUNTIME)
+public @interface Valid {
+}

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/Validator.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/Validator.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/Validator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,23 +0,0 @@
-//$Id$
-package org.hibernate.validator;
-
-import java.lang.annotation.Annotation;
-
-/**
- * A constraint validator for a particular annotation
- *
- * @author Gavin King
- */
-public interface Validator<A extends Annotation> {
-	/**
-	 * does the object/element pass the constraints
-	 */
-	public boolean isValid(Object value);
-
-	/**
-	 * Take the annotations values
-	 *
-	 * @param parameters
-	 */
-	public void initialize(A parameters);
-}

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/Validator.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/Validator.java)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/Validator.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/Validator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,23 @@
+//$Id$
+package org.hibernate.validator;
+
+import java.lang.annotation.Annotation;
+
+/**
+ * A constraint validator for a particular annotation
+ *
+ * @author Gavin King
+ */
+public interface Validator<A extends Annotation> {
+	/**
+	 * does the object/element pass the constraints
+	 */
+	public boolean isValid(Object value);
+
+	/**
+	 * Take the annotations values
+	 *
+	 * @param parameters
+	 */
+	public void initialize(A parameters);
+}

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/ValidatorClass.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/ValidatorClass.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/ValidatorClass.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,21 +0,0 @@
-//$Id$
-package org.hibernate.validator;
-
-import java.lang.annotation.Documented;
-import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-
-/**
- * Link between an constraint annotation and it's validator implementation
- *
- * @author Gavin King
- */
- at Documented
- at Target({ANNOTATION_TYPE})
- at Retention(RUNTIME)
-public @interface ValidatorClass {
-	Class<? extends Validator> value();
-}

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/ValidatorClass.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/ValidatorClass.java)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/ValidatorClass.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/ValidatorClass.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,21 @@
+//$Id$
+package org.hibernate.validator;
+
+import java.lang.annotation.Documented;
+import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+
+/**
+ * Link between an constraint annotation and it's validator implementation
+ *
+ * @author Gavin King
+ */
+ at Documented
+ at Target({ANNOTATION_TYPE})
+ at Retention(RUNTIME)
+public @interface ValidatorClass {
+	Class<? extends Validator> value();
+}

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/Version.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/Version.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/Version.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,22 +0,0 @@
-//$Id: $
-package org.hibernate.validator;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * Hibernate Vaildator version
- *
- * @author Emmanuel Bernard
- */
-public class Version {
-	public static final String VERSION = "3.2.2.GA";
-	private static Log log = LogFactory.getLog( Version.class );
-
-	static {
-		log.info( "Hibernate Validator " + VERSION );
-	}
-
-	public static void touch() {
-	}
-}
\ No newline at end of file

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/Version.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/Version.java)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/Version.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/Version.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,22 @@
+//$Id: $
+package org.hibernate.validator;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * Hibernate Vaildator version
+ *
+ * @author Emmanuel Bernard
+ */
+public class Version {
+	public static final String VERSION = "3.2.2.GA";
+	private static Log log = LogFactory.getLog( Version.class );
+
+	static {
+		log.info( "Hibernate Validator " + VERSION );
+	}
+
+	public static void touch() {
+	}
+}
\ No newline at end of file

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/event (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/event)

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/event/JPAValidateListener.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/event/JPAValidateListener.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/event/JPAValidateListener.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,65 +0,0 @@
-//$Id: $
-package org.hibernate.validator.event;
-
-import java.lang.ref.WeakReference;
-import java.util.Map;
-import java.util.WeakHashMap;
-import java.util.Set;
-import java.util.HashSet;
-import javax.persistence.PrePersist;
-import javax.persistence.PreUpdate;
-
-import org.hibernate.validator.ClassValidator;
-
-/**
- * Java Persistence Entity Listener that validates entities on inserts or updates
- * This listener needs ot be placed on each validatable entities
- *
- * <code>
- * @Entity
- * @EntityListeners(JPAValidateListener.class)
- * public class Submarine {
- *     @NotEmpty private String name;
- *     ...
- * }
- * </code>
- *
- * @author Emmanuel Bernard
- */
-public class JPAValidateListener {
-	//No need for weakReference if the event listener is loaded by the same CL than
-	//the entities, but in a shared env this is not the case
-	//TODO check that this can be hot redeployable
-	private static final Map<Class, WeakReference<ClassValidator>> validators;
-	private static final ClassValidator<JPAValidateListener> NO_VALIDATOR;
-	static {
-		validators = new WeakHashMap<Class, WeakReference<ClassValidator>>();
-		NO_VALIDATOR = new ClassValidator<JPAValidateListener>( JPAValidateListener.class);
-	}
-
-	//keep hardref at the instance level
-	private final Set<ClassValidator> currentValidators = new HashSet<ClassValidator>();
-
-	@PrePersist
-	@PreUpdate
-	@SuppressWarnings( "unchecked" )
-	public void onChange(Object object) {
-		if (object == null) return;
-		Class entity = object.getClass();
-		WeakReference<ClassValidator> weakValidator = validators.get(entity);
-		ClassValidator validator = weakValidator != null ? weakValidator.get() : null;
-		if ( validator == null ) {
-			//initialize
-			//TODO reuse the same reflection manager?
-			validator = new ClassValidator(entity);
-			if ( ! validator.hasValidationRules() ) {
-				validator = NO_VALIDATOR;
-			}
-			validators.put( entity, new WeakReference<ClassValidator>(validator) );
-			currentValidators.add( validator );
-		}
-		if ( validator != NO_VALIDATOR ) {
-			validator.assertValid( object );
-		}
-	}
-}

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/event/JPAValidateListener.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/event/JPAValidateListener.java)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/event/JPAValidateListener.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/event/JPAValidateListener.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,65 @@
+//$Id: $
+package org.hibernate.validator.event;
+
+import java.lang.ref.WeakReference;
+import java.util.Map;
+import java.util.WeakHashMap;
+import java.util.Set;
+import java.util.HashSet;
+import javax.persistence.PrePersist;
+import javax.persistence.PreUpdate;
+
+import org.hibernate.validator.ClassValidator;
+
+/**
+ * Java Persistence Entity Listener that validates entities on inserts or updates
+ * This listener needs ot be placed on each validatable entities
+ *
+ * <code>
+ * @Entity
+ * @EntityListeners(JPAValidateListener.class)
+ * public class Submarine {
+ *     @NotEmpty private String name;
+ *     ...
+ * }
+ * </code>
+ *
+ * @author Emmanuel Bernard
+ */
+public class JPAValidateListener {
+	//No need for weakReference if the event listener is loaded by the same CL than
+	//the entities, but in a shared env this is not the case
+	//TODO check that this can be hot redeployable
+	private static final Map<Class, WeakReference<ClassValidator>> validators;
+	private static final ClassValidator<JPAValidateListener> NO_VALIDATOR;
+	static {
+		validators = new WeakHashMap<Class, WeakReference<ClassValidator>>();
+		NO_VALIDATOR = new ClassValidator<JPAValidateListener>( JPAValidateListener.class);
+	}
+
+	//keep hardref at the instance level
+	private final Set<ClassValidator> currentValidators = new HashSet<ClassValidator>();
+
+	@PrePersist
+	@PreUpdate
+	@SuppressWarnings( "unchecked" )
+	public void onChange(Object object) {
+		if (object == null) return;
+		Class entity = object.getClass();
+		WeakReference<ClassValidator> weakValidator = validators.get(entity);
+		ClassValidator validator = weakValidator != null ? weakValidator.get() : null;
+		if ( validator == null ) {
+			//initialize
+			//TODO reuse the same reflection manager?
+			validator = new ClassValidator(entity);
+			if ( ! validator.hasValidationRules() ) {
+				validator = NO_VALIDATOR;
+			}
+			validators.put( entity, new WeakReference<ClassValidator>(validator) );
+			currentValidators.add( validator );
+		}
+		if ( validator != NO_VALIDATOR ) {
+			validator.assertValid( object );
+		}
+	}
+}

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/event/ValidateEventListener.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/event/ValidateEventListener.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/event/ValidateEventListener.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,205 +0,0 @@
-//$Id$
-package org.hibernate.validator.event;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.hibernate.AssertionFailure;
-import org.hibernate.EntityMode;
-import org.hibernate.HibernateException;
-import org.hibernate.cfg.Configuration;
-import org.hibernate.event.Initializable;
-import org.hibernate.event.PreInsertEvent;
-import org.hibernate.event.PreInsertEventListener;
-import org.hibernate.event.PreUpdateEvent;
-import org.hibernate.event.PreUpdateEventListener;
-import org.hibernate.mapping.Component;
-import org.hibernate.mapping.PersistentClass;
-import org.hibernate.mapping.Property;
-import org.hibernate.property.Getter;
-import org.hibernate.property.PropertyAccessor;
-import org.hibernate.property.PropertyAccessorFactory;
-import org.hibernate.annotations.common.reflection.ReflectionManager;
-import org.hibernate.annotations.common.reflection.java.JavaReflectionManager;
-import org.hibernate.util.ReflectHelper;
-import org.hibernate.util.StringHelper;
-import org.hibernate.validator.ClassValidator;
-import org.hibernate.validator.Environment;
-import org.hibernate.validator.InvalidStateException;
-import org.hibernate.validator.InvalidValue;
-import org.hibernate.validator.MessageInterpolator;
-
-/**
- * Before insert and update, executes the validator framework
- *
- * @author Emmanuel Bernard
- */
-public class ValidateEventListener implements PreInsertEventListener, PreUpdateEventListener, Initializable {
-	private boolean isInitialized;
-	private Map<Class, ValidatableElement> validators = new HashMap<Class, ValidatableElement>();
-
-	/**
-	 * initialize the validators, any non significant validators are not kept
-	 */
-	@SuppressWarnings( "unchecked" )
-	public synchronized void initialize(final Configuration cfg) {
-		if ( !isInitialized ) {
-			String interpolatorString = cfg.getProperty( Environment.MESSAGE_INTERPOLATOR_CLASS );
-			MessageInterpolator interpolator = null;
-			if ( StringHelper.isNotEmpty( interpolatorString ) ) {
-				try {
-					Class interpolatorClass = ReflectHelper.classForName( interpolatorString );
-					interpolator = (MessageInterpolator) interpolatorClass.newInstance();
-				}
-				catch (ClassNotFoundException e) {
-					throw new HibernateException( "Unable to find message interpolator: " + interpolatorString, e );
-				}
-				catch (IllegalAccessException e) {
-					throw new HibernateException( "Unable to instanciate message interpolator: " + interpolatorString,
-							e );
-				}
-				catch (InstantiationException e) {
-					throw new HibernateException( "Unable to instanciate message interpolator: " + interpolatorString,
-							e );
-				}
-				catch (ClassCastException e) {
-					throw new HibernateException( "Class does not implement "
-							+ MessageInterpolator.class.getName() + ": " + interpolatorString, e );
-				}
-			}
-			Iterator<PersistentClass> classes = (Iterator<PersistentClass>) cfg.getClassMappings();
-			ReflectionManager reflectionManager;
-			try {
-				//TODO introduce q ReflectionManagerHolder interface to avoid reflection
-				//I want to avoid hard link between HAN and Validator for usch a simple need
-				//reuse the existing reflectionManager one when possible
-				reflectionManager =
-						(ReflectionManager) cfg.getClass().getMethod( "getReflectionManager" ).invoke( cfg );
-
-			}
-			catch (Exception e) {
-				reflectionManager = new JavaReflectionManager();
-			}
-			while ( classes.hasNext() ) {
-				PersistentClass clazz = classes.next();
-				final Class mappedClass = clazz.getMappedClass();
-				ClassValidator validator =
-						new ClassValidator( mappedClass, null, interpolator, null, reflectionManager );
-				ValidatableElement element = new ValidatableElement( mappedClass, validator );
-				addSubElement( clazz.getIdentifierProperty(), element );
-				Iterator properties = clazz.getPropertyIterator();
-				while ( properties.hasNext() ) {
-					addSubElement( (Property) properties.next(), element );
-				}
-				if ( element.subElements.size() != 0 || element.validator.hasValidationRules() ) {
-					validators.put( mappedClass, element );
-				}
-			}
-			isInitialized = true;
-		}
-	}
-
-	@SuppressWarnings( "unchecked" )
-	private void addSubElement(Property property, ValidatableElement element) {
-		if ( property != null && property.isComposite() && !property.isBackRef() ) {
-			Component component = (Component) property.getValue();
-			if ( component.isEmbedded() ) return;
-			PropertyAccessor accessor = PropertyAccessorFactory.getPropertyAccessor( property, EntityMode.POJO );
-			Getter getter = accessor.getGetter( element.clazz, property.getName() );
-			ClassValidator validator = new ClassValidator( getter.getReturnType() );
-			ValidatableElement subElement = new ValidatableElement( getter.getReturnType(), validator, getter );
-			Iterator properties = component.getPropertyIterator();
-			while ( properties.hasNext() ) {
-				addSubElement( (Property) properties.next(), subElement );
-			}
-			if ( subElement.getSubElements().size() != 0 || subElement.validator.hasValidationRules() ) {
-				element.addSubElement( subElement );
-			}
-		}
-	}
-
-	@SuppressWarnings( "unchecked" )
-	protected void validate(Object entity, EntityMode mode) {
-		if ( entity == null || !EntityMode.POJO.equals( mode ) ) return;
-		ValidatableElement element;
-		if ( isInitialized ) {
-			element = validators.get( entity.getClass() );
-		}
-		else {
-			throw new AssertionFailure( "Validator event not initialized" );
-		}
-		if ( element == null ) return; //no validation to do
-		List<InvalidValue> consolidatedInvalidValues = new ArrayList<InvalidValue>();
-		validateSubElements( element, entity, consolidatedInvalidValues );
-		InvalidValue[] invalidValues = element.validator == null ?
-				null :
-				element.validator.getInvalidValues( entity );
-		if ( invalidValues != null ) {
-			for ( InvalidValue invalidValue : invalidValues ) {
-				consolidatedInvalidValues.add( invalidValue );
-			}
-		}
-		if ( consolidatedInvalidValues.size() > 0 ) {
-			throw new InvalidStateException(
-					consolidatedInvalidValues.toArray( new InvalidValue[consolidatedInvalidValues.size()] ),
-					entity.getClass().getName()
-			);
-		}
-	}
-
-	@SuppressWarnings( "unchecked" )
-	private void validateSubElements(
-			ValidatableElement element, Object entity, List<InvalidValue> consolidatedInvalidValues
-	) {
-		if ( element != null ) {
-			for ( ValidatableElement subElement : element.subElements ) {
-				Object component = subElement.getter.get( entity );
-				InvalidValue[] invalidValues = subElement.validator.getInvalidValues( component );
-				for ( InvalidValue invalidValue : invalidValues ) {
-					consolidatedInvalidValues.add( invalidValue );
-				}
-				validateSubElements( subElement, component, consolidatedInvalidValues );
-			}
-		}
-	}
-
-	public boolean onPreInsert(PreInsertEvent event) {
-		validate( event.getEntity(), event.getSource().getEntityMode() );
-		return false;
-	}
-
-	public boolean onPreUpdate(PreUpdateEvent event) {
-		validate( event.getEntity(), event.getSource().getEntityMode() );
-		return false;
-	}
-
-	private static class ValidatableElement implements Serializable {
-		private Class clazz;
-		private ClassValidator validator;
-		private Getter getter;
-		private Collection<ValidatableElement> subElements = new ArrayList<ValidatableElement>();
-
-		public ValidatableElement(Class clazz, ClassValidator validator) {
-			this.clazz = clazz;
-			this.validator = validator;
-		}
-
-		public ValidatableElement(Class clazz, ClassValidator validator, Getter getter) {
-			this( clazz, validator );
-			this.getter = getter;
-		}
-
-		public void addSubElement(ValidatableElement subValidatableElement) {
-			subElements.add( subValidatableElement );
-		}
-
-		public Collection<ValidatableElement> getSubElements() {
-			return this.subElements;
-		}
-	}
-}

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/event/ValidateEventListener.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/event/ValidateEventListener.java)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/event/ValidateEventListener.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/event/ValidateEventListener.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,205 @@
+//$Id$
+package org.hibernate.validator.event;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.hibernate.AssertionFailure;
+import org.hibernate.EntityMode;
+import org.hibernate.HibernateException;
+import org.hibernate.cfg.Configuration;
+import org.hibernate.event.Initializable;
+import org.hibernate.event.PreInsertEvent;
+import org.hibernate.event.PreInsertEventListener;
+import org.hibernate.event.PreUpdateEvent;
+import org.hibernate.event.PreUpdateEventListener;
+import org.hibernate.mapping.Component;
+import org.hibernate.mapping.PersistentClass;
+import org.hibernate.mapping.Property;
+import org.hibernate.property.Getter;
+import org.hibernate.property.PropertyAccessor;
+import org.hibernate.property.PropertyAccessorFactory;
+import org.hibernate.annotations.common.reflection.ReflectionManager;
+import org.hibernate.annotations.common.reflection.java.JavaReflectionManager;
+import org.hibernate.util.ReflectHelper;
+import org.hibernate.util.StringHelper;
+import org.hibernate.validator.ClassValidator;
+import org.hibernate.validator.Environment;
+import org.hibernate.validator.InvalidStateException;
+import org.hibernate.validator.InvalidValue;
+import org.hibernate.validator.MessageInterpolator;
+
+/**
+ * Before insert and update, executes the validator framework
+ *
+ * @author Emmanuel Bernard
+ */
+public class ValidateEventListener implements PreInsertEventListener, PreUpdateEventListener, Initializable {
+	private boolean isInitialized;
+	private Map<Class, ValidatableElement> validators = new HashMap<Class, ValidatableElement>();
+
+	/**
+	 * initialize the validators, any non significant validators are not kept
+	 */
+	@SuppressWarnings( "unchecked" )
+	public synchronized void initialize(final Configuration cfg) {
+		if ( !isInitialized ) {
+			String interpolatorString = cfg.getProperty( Environment.MESSAGE_INTERPOLATOR_CLASS );
+			MessageInterpolator interpolator = null;
+			if ( StringHelper.isNotEmpty( interpolatorString ) ) {
+				try {
+					Class interpolatorClass = ReflectHelper.classForName( interpolatorString );
+					interpolator = (MessageInterpolator) interpolatorClass.newInstance();
+				}
+				catch (ClassNotFoundException e) {
+					throw new HibernateException( "Unable to find message interpolator: " + interpolatorString, e );
+				}
+				catch (IllegalAccessException e) {
+					throw new HibernateException( "Unable to instanciate message interpolator: " + interpolatorString,
+							e );
+				}
+				catch (InstantiationException e) {
+					throw new HibernateException( "Unable to instanciate message interpolator: " + interpolatorString,
+							e );
+				}
+				catch (ClassCastException e) {
+					throw new HibernateException( "Class does not implement "
+							+ MessageInterpolator.class.getName() + ": " + interpolatorString, e );
+				}
+			}
+			Iterator<PersistentClass> classes = (Iterator<PersistentClass>) cfg.getClassMappings();
+			ReflectionManager reflectionManager;
+			try {
+				//TODO introduce q ReflectionManagerHolder interface to avoid reflection
+				//I want to avoid hard link between HAN and Validator for usch a simple need
+				//reuse the existing reflectionManager one when possible
+				reflectionManager =
+						(ReflectionManager) cfg.getClass().getMethod( "getReflectionManager" ).invoke( cfg );
+
+			}
+			catch (Exception e) {
+				reflectionManager = new JavaReflectionManager();
+			}
+			while ( classes.hasNext() ) {
+				PersistentClass clazz = classes.next();
+				final Class mappedClass = clazz.getMappedClass();
+				ClassValidator validator =
+						new ClassValidator( mappedClass, null, interpolator, null, reflectionManager );
+				ValidatableElement element = new ValidatableElement( mappedClass, validator );
+				addSubElement( clazz.getIdentifierProperty(), element );
+				Iterator properties = clazz.getPropertyIterator();
+				while ( properties.hasNext() ) {
+					addSubElement( (Property) properties.next(), element );
+				}
+				if ( element.subElements.size() != 0 || element.validator.hasValidationRules() ) {
+					validators.put( mappedClass, element );
+				}
+			}
+			isInitialized = true;
+		}
+	}
+
+	@SuppressWarnings( "unchecked" )
+	private void addSubElement(Property property, ValidatableElement element) {
+		if ( property != null && property.isComposite() && !property.isBackRef() ) {
+			Component component = (Component) property.getValue();
+			if ( component.isEmbedded() ) return;
+			PropertyAccessor accessor = PropertyAccessorFactory.getPropertyAccessor( property, EntityMode.POJO );
+			Getter getter = accessor.getGetter( element.clazz, property.getName() );
+			ClassValidator validator = new ClassValidator( getter.getReturnType() );
+			ValidatableElement subElement = new ValidatableElement( getter.getReturnType(), validator, getter );
+			Iterator properties = component.getPropertyIterator();
+			while ( properties.hasNext() ) {
+				addSubElement( (Property) properties.next(), subElement );
+			}
+			if ( subElement.getSubElements().size() != 0 || subElement.validator.hasValidationRules() ) {
+				element.addSubElement( subElement );
+			}
+		}
+	}
+
+	@SuppressWarnings( "unchecked" )
+	protected void validate(Object entity, EntityMode mode) {
+		if ( entity == null || !EntityMode.POJO.equals( mode ) ) return;
+		ValidatableElement element;
+		if ( isInitialized ) {
+			element = validators.get( entity.getClass() );
+		}
+		else {
+			throw new AssertionFailure( "Validator event not initialized" );
+		}
+		if ( element == null ) return; //no validation to do
+		List<InvalidValue> consolidatedInvalidValues = new ArrayList<InvalidValue>();
+		validateSubElements( element, entity, consolidatedInvalidValues );
+		InvalidValue[] invalidValues = element.validator == null ?
+				null :
+				element.validator.getInvalidValues( entity );
+		if ( invalidValues != null ) {
+			for ( InvalidValue invalidValue : invalidValues ) {
+				consolidatedInvalidValues.add( invalidValue );
+			}
+		}
+		if ( consolidatedInvalidValues.size() > 0 ) {
+			throw new InvalidStateException(
+					consolidatedInvalidValues.toArray( new InvalidValue[consolidatedInvalidValues.size()] ),
+					entity.getClass().getName()
+			);
+		}
+	}
+
+	@SuppressWarnings( "unchecked" )
+	private void validateSubElements(
+			ValidatableElement element, Object entity, List<InvalidValue> consolidatedInvalidValues
+	) {
+		if ( element != null ) {
+			for ( ValidatableElement subElement : element.subElements ) {
+				Object component = subElement.getter.get( entity );
+				InvalidValue[] invalidValues = subElement.validator.getInvalidValues( component );
+				for ( InvalidValue invalidValue : invalidValues ) {
+					consolidatedInvalidValues.add( invalidValue );
+				}
+				validateSubElements( subElement, component, consolidatedInvalidValues );
+			}
+		}
+	}
+
+	public boolean onPreInsert(PreInsertEvent event) {
+		validate( event.getEntity(), event.getSource().getEntityMode() );
+		return false;
+	}
+
+	public boolean onPreUpdate(PreUpdateEvent event) {
+		validate( event.getEntity(), event.getSource().getEntityMode() );
+		return false;
+	}
+
+	private static class ValidatableElement implements Serializable {
+		private Class clazz;
+		private ClassValidator validator;
+		private Getter getter;
+		private Collection<ValidatableElement> subElements = new ArrayList<ValidatableElement>();
+
+		public ValidatableElement(Class clazz, ClassValidator validator) {
+			this.clazz = clazz;
+			this.validator = validator;
+		}
+
+		public ValidatableElement(Class clazz, ClassValidator validator, Getter getter) {
+			this( clazz, validator );
+			this.getter = getter;
+		}
+
+		public void addSubElement(ValidatableElement subValidatableElement) {
+			subElements.add( subValidatableElement );
+		}
+
+		public Collection<ValidatableElement> getSubElements() {
+			return this.subElements;
+		}
+	}
+}

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/event/ValidatePreInsertEventListener.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/event/ValidatePreInsertEventListener.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/event/ValidatePreInsertEventListener.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,13 +0,0 @@
-//$Id$
-package org.hibernate.validator.event;
-
-/**
- * Before insert, execute the validator framework
- *
- * @deprecated use ValidateEventListener
- * 
- * @author Gavin King
- */
-public class ValidatePreInsertEventListener extends ValidateEventListener {
-
-}

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/event/ValidatePreInsertEventListener.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/event/ValidatePreInsertEventListener.java)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/event/ValidatePreInsertEventListener.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/event/ValidatePreInsertEventListener.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,13 @@
+//$Id$
+package org.hibernate.validator.event;
+
+/**
+ * Before insert, execute the validator framework
+ *
+ * @deprecated use ValidateEventListener
+ * 
+ * @author Gavin King
+ */
+public class ValidatePreInsertEventListener extends ValidateEventListener {
+
+}

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/event/ValidatePreUpdateEventListener.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/event/ValidatePreUpdateEventListener.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/event/ValidatePreUpdateEventListener.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,13 +0,0 @@
-//$Id$
-package org.hibernate.validator.event;
-
-/**
- * Before update, execute the validator framework
- *
- * @deprecated use ValidateEventListener
- *
- * @author Gavin King
- */
-public class ValidatePreUpdateEventListener extends ValidateEventListener {
-
-}

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/event/ValidatePreUpdateEventListener.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/event/ValidatePreUpdateEventListener.java)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/event/ValidatePreUpdateEventListener.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/event/ValidatePreUpdateEventListener.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,13 @@
+//$Id$
+package org.hibernate.validator.event;
+
+/**
+ * Before update, execute the validator framework
+ *
+ * @deprecated use ValidateEventListener
+ *
+ * @author Gavin King
+ */
+public class ValidatePreUpdateEventListener extends ValidateEventListener {
+
+}

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/interpolator (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/interpolator)

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/interpolator/DefaultMessageInterpolator.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/interpolator/DefaultMessageInterpolator.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/interpolator/DefaultMessageInterpolator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,135 +0,0 @@
-//$Id: $
-package org.hibernate.validator.interpolator;
-
-import java.io.Serializable;
-import java.lang.annotation.Annotation;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-import java.util.StringTokenizer;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.hibernate.util.StringHelper;
-import org.hibernate.validator.MessageInterpolator;
-import org.hibernate.validator.Validator;
-
-/**
- * Resource bundle based interpolator
- * Also interpolate annotation parameters inside the message
- *
- * @author Emmanuel Bernard
- */
-public class DefaultMessageInterpolator implements MessageInterpolator, Serializable {
-	private static Log log = LogFactory.getLog( DefaultMessageInterpolator.class );
-	private Map<String, Object> annotationParameters = new HashMap<String, Object>();
-	private transient ResourceBundle messageBundle;
-	private transient ResourceBundle defaultMessageBundle;
-	private String annotationMessage;
-	private String interpolateMessage;
-
-	//not an interface method
-	public void initialize(ResourceBundle messageBundle, ResourceBundle defaultMessageBundle) {
-		this.messageBundle = messageBundle;
-		this.defaultMessageBundle = defaultMessageBundle;
-	}
-
-	public void initialize(Annotation annotation, MessageInterpolator defaultInterpolator) {
-		Class clazz = annotation.getClass();
-		for ( Method method  : clazz.getMethods() ) {
-			try {
-				//FIXME remove non serilalization elements on writeObject?
-				if ( method.getReturnType() != void.class
-						&& method.getParameterTypes().length == 0
-						&& ! Modifier.isStatic( method.getModifiers() ) ) {
-					//cannot use an exclude list because the parameter name could match a method name
-					annotationParameters.put( method.getName(), method.invoke( annotation ) );
-				}
-			}
-			catch (IllegalAccessException e) {
-				//really should not happen, but we degrade nicely
-				log.warn( "Unable to access " + StringHelper.qualify( clazz.toString(), method.getName() ) );
-			}
-			catch (InvocationTargetException e) {
-				//really should not happen, but we degrade nicely
-				log.warn( "Unable to access " + StringHelper.qualify( clazz.toString(), method.getName() ) );
-			}
-		}
-		annotationMessage = (String) annotationParameters.get( "message" );
-		if (annotationMessage == null) {
-			throw new IllegalArgumentException( "Annotation " + clazz + " does not have an (accessible) message attribute");
-		}
-		//do not resolve the property eagerly to allow validator.apply to work wo interpolator
-    }
-
-	private String replace(String message) {
-		StringTokenizer tokens = new StringTokenizer( message, "#{}", true );
-		StringBuilder buf = new StringBuilder( 30 );
-		boolean escaped = false;
-		boolean el = false;
-		while ( tokens.hasMoreTokens() ) {
-			String token = tokens.nextToken();
-			if ( !escaped && "#".equals( token ) ) {
-				el = true;
-			}
-			if ( !el && "{".equals( token ) ) {
-				escaped = true;
-			}
-			else if ( escaped && "}".equals( token ) ) {
-				escaped = false;
-			}
-			else if ( !escaped ) {
-				if ( "{".equals( token ) ) el = false;
-				buf.append( token );
-			}
-			else {
-				Object variable = annotationParameters.get( token );
-				if ( variable != null ) {
-					buf.append( variable );
-				}
-				else {
-					String string = null;
-					try {
-						string = messageBundle != null ? messageBundle.getString( token ) : null;
-					}
-					catch( MissingResourceException e ) {
-						//give a second chance with the default resource bundle
-					}
-					if (string == null) {
-						try {
-							string = defaultMessageBundle.getString( token );
-						}
-						catch( MissingResourceException e) {
-                            //return the unchanged string
-                            buf.append('{').append(token).append('}');
-						}
-					}
-					if ( string != null ) buf.append( replace( string ) );
-				}
-			}
-		}
-		return buf.toString();
-	}
-
-	public String interpolate(String message, Validator validator, MessageInterpolator defaultInterpolator) {
-		if ( annotationMessage.equals( message ) ) {
-			//short cut
-            if (interpolateMessage == null) {
-                interpolateMessage = replace( annotationMessage );
-            }
-            return interpolateMessage;
-		}
-		else {
-			//TODO keep them in a weak hash map, but this might not even be useful
-			return replace( message );
-		}
-	}
-
-	public String getAnnotationMessage() {
-		return annotationMessage;
-	}
-}

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/interpolator/DefaultMessageInterpolator.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/interpolator/DefaultMessageInterpolator.java)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/interpolator/DefaultMessageInterpolator.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/interpolator/DefaultMessageInterpolator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,135 @@
+//$Id: $
+package org.hibernate.validator.interpolator;
+
+import java.io.Serializable;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+import java.util.StringTokenizer;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.hibernate.util.StringHelper;
+import org.hibernate.validator.MessageInterpolator;
+import org.hibernate.validator.Validator;
+
+/**
+ * Resource bundle based interpolator
+ * Also interpolate annotation parameters inside the message
+ *
+ * @author Emmanuel Bernard
+ */
+public class DefaultMessageInterpolator implements MessageInterpolator, Serializable {
+	private static Log log = LogFactory.getLog( DefaultMessageInterpolator.class );
+	private Map<String, Object> annotationParameters = new HashMap<String, Object>();
+	private transient ResourceBundle messageBundle;
+	private transient ResourceBundle defaultMessageBundle;
+	private String annotationMessage;
+	private String interpolateMessage;
+
+	//not an interface method
+	public void initialize(ResourceBundle messageBundle, ResourceBundle defaultMessageBundle) {
+		this.messageBundle = messageBundle;
+		this.defaultMessageBundle = defaultMessageBundle;
+	}
+
+	public void initialize(Annotation annotation, MessageInterpolator defaultInterpolator) {
+		Class clazz = annotation.getClass();
+		for ( Method method  : clazz.getMethods() ) {
+			try {
+				//FIXME remove non serilalization elements on writeObject?
+				if ( method.getReturnType() != void.class
+						&& method.getParameterTypes().length == 0
+						&& ! Modifier.isStatic( method.getModifiers() ) ) {
+					//cannot use an exclude list because the parameter name could match a method name
+					annotationParameters.put( method.getName(), method.invoke( annotation ) );
+				}
+			}
+			catch (IllegalAccessException e) {
+				//really should not happen, but we degrade nicely
+				log.warn( "Unable to access " + StringHelper.qualify( clazz.toString(), method.getName() ) );
+			}
+			catch (InvocationTargetException e) {
+				//really should not happen, but we degrade nicely
+				log.warn( "Unable to access " + StringHelper.qualify( clazz.toString(), method.getName() ) );
+			}
+		}
+		annotationMessage = (String) annotationParameters.get( "message" );
+		if (annotationMessage == null) {
+			throw new IllegalArgumentException( "Annotation " + clazz + " does not have an (accessible) message attribute");
+		}
+		//do not resolve the property eagerly to allow validator.apply to work wo interpolator
+    }
+
+	private String replace(String message) {
+		StringTokenizer tokens = new StringTokenizer( message, "#{}", true );
+		StringBuilder buf = new StringBuilder( 30 );
+		boolean escaped = false;
+		boolean el = false;
+		while ( tokens.hasMoreTokens() ) {
+			String token = tokens.nextToken();
+			if ( !escaped && "#".equals( token ) ) {
+				el = true;
+			}
+			if ( !el && "{".equals( token ) ) {
+				escaped = true;
+			}
+			else if ( escaped && "}".equals( token ) ) {
+				escaped = false;
+			}
+			else if ( !escaped ) {
+				if ( "{".equals( token ) ) el = false;
+				buf.append( token );
+			}
+			else {
+				Object variable = annotationParameters.get( token );
+				if ( variable != null ) {
+					buf.append( variable );
+				}
+				else {
+					String string = null;
+					try {
+						string = messageBundle != null ? messageBundle.getString( token ) : null;
+					}
+					catch( MissingResourceException e ) {
+						//give a second chance with the default resource bundle
+					}
+					if (string == null) {
+						try {
+							string = defaultMessageBundle.getString( token );
+						}
+						catch( MissingResourceException e) {
+                            //return the unchanged string
+                            buf.append('{').append(token).append('}');
+						}
+					}
+					if ( string != null ) buf.append( replace( string ) );
+				}
+			}
+		}
+		return buf.toString();
+	}
+
+	public String interpolate(String message, Validator validator, MessageInterpolator defaultInterpolator) {
+		if ( annotationMessage.equals( message ) ) {
+			//short cut
+            if (interpolateMessage == null) {
+                interpolateMessage = replace( annotationMessage );
+            }
+            return interpolateMessage;
+		}
+		else {
+			//TODO keep them in a weak hash map, but this might not even be useful
+			return replace( message );
+		}
+	}
+
+	public String getAnnotationMessage() {
+		return annotationMessage;
+	}
+}

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/interpolator/DefaultMessageInterpolatorAggerator.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/interpolator/DefaultMessageInterpolatorAggerator.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/interpolator/DefaultMessageInterpolatorAggerator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,57 +0,0 @@
-//$Id: $
-package org.hibernate.validator.interpolator;
-
-import java.lang.annotation.Annotation;
-import java.util.Map;
-import java.util.HashMap;
-import java.util.ResourceBundle;
-import java.io.Serializable;
-
-import org.hibernate.validator.MessageInterpolator;
-import org.hibernate.validator.Validator;
-import org.hibernate.AssertionFailure;
-
-/**
- * @author Emmanuel Bernard
- */
-public class DefaultMessageInterpolatorAggerator implements MessageInterpolator, Serializable {
-	private Map<Validator, DefaultMessageInterpolator> interpolators = new HashMap<Validator, DefaultMessageInterpolator>();
-	//transient but repopulated by the object owing a reference to the interpolator
-	private transient ResourceBundle messageBundle;
-	//transient but repopulated by the object owing a reference to the interpolator
-	private transient ResourceBundle defaultMessageBundle;
-
-	//not an interface method
-	public void initialize(ResourceBundle messageBundle, ResourceBundle defaultMessageBundle) {
-		this.messageBundle = messageBundle;
-		this.defaultMessageBundle = defaultMessageBundle;
-		//useful when we deserialize
-		for ( DefaultMessageInterpolator interpolator : interpolators.values() ) {
-			interpolator.initialize( messageBundle, defaultMessageBundle );
-		}
-	}
-
-	public void addInterpolator(Annotation annotation, Validator validator) {
-		DefaultMessageInterpolator interpolator = new DefaultMessageInterpolator();
-		interpolator.initialize(messageBundle, defaultMessageBundle );
-		interpolator.initialize( annotation, null );
-		interpolators.put( validator, interpolator );
-	}
-
-	public String interpolate(String message, Validator validator, MessageInterpolator defaultInterpolator) {
-		DefaultMessageInterpolator defaultMessageInterpolator = interpolators.get( validator );
-		if (defaultMessageInterpolator == null) {
-			return message;
-		}
-		else {
-			return defaultMessageInterpolator.interpolate( message, validator, defaultInterpolator );
-		}
-	}
-
-	public String getAnnotationMessage(Validator validator) {
-		DefaultMessageInterpolator defaultMessageInterpolator = interpolators.get( validator );
-		String message = defaultMessageInterpolator != null ? defaultMessageInterpolator.getAnnotationMessage() : null;
-		if (message == null) throw new AssertionFailure("Validator not registred to the messageInterceptorAggregator");
-		return message;
-	}
-}

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/interpolator/DefaultMessageInterpolatorAggerator.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/interpolator/DefaultMessageInterpolatorAggerator.java)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/interpolator/DefaultMessageInterpolatorAggerator.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/interpolator/DefaultMessageInterpolatorAggerator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,57 @@
+//$Id: $
+package org.hibernate.validator.interpolator;
+
+import java.lang.annotation.Annotation;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.ResourceBundle;
+import java.io.Serializable;
+
+import org.hibernate.validator.MessageInterpolator;
+import org.hibernate.validator.Validator;
+import org.hibernate.AssertionFailure;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class DefaultMessageInterpolatorAggerator implements MessageInterpolator, Serializable {
+	private Map<Validator, DefaultMessageInterpolator> interpolators = new HashMap<Validator, DefaultMessageInterpolator>();
+	//transient but repopulated by the object owing a reference to the interpolator
+	private transient ResourceBundle messageBundle;
+	//transient but repopulated by the object owing a reference to the interpolator
+	private transient ResourceBundle defaultMessageBundle;
+
+	//not an interface method
+	public void initialize(ResourceBundle messageBundle, ResourceBundle defaultMessageBundle) {
+		this.messageBundle = messageBundle;
+		this.defaultMessageBundle = defaultMessageBundle;
+		//useful when we deserialize
+		for ( DefaultMessageInterpolator interpolator : interpolators.values() ) {
+			interpolator.initialize( messageBundle, defaultMessageBundle );
+		}
+	}
+
+	public void addInterpolator(Annotation annotation, Validator validator) {
+		DefaultMessageInterpolator interpolator = new DefaultMessageInterpolator();
+		interpolator.initialize(messageBundle, defaultMessageBundle );
+		interpolator.initialize( annotation, null );
+		interpolators.put( validator, interpolator );
+	}
+
+	public String interpolate(String message, Validator validator, MessageInterpolator defaultInterpolator) {
+		DefaultMessageInterpolator defaultMessageInterpolator = interpolators.get( validator );
+		if (defaultMessageInterpolator == null) {
+			return message;
+		}
+		else {
+			return defaultMessageInterpolator.interpolate( message, validator, defaultInterpolator );
+		}
+	}
+
+	public String getAnnotationMessage(Validator validator) {
+		DefaultMessageInterpolator defaultMessageInterpolator = interpolators.get( validator );
+		String message = defaultMessageInterpolator != null ? defaultMessageInterpolator.getAnnotationMessage() : null;
+		if (message == null) throw new AssertionFailure("Validator not registred to the messageInterceptorAggregator");
+		return message;
+	}
+}

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/resources)

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages.properties
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages.properties	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages.properties	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,16 +0,0 @@
-validator.assertFalse=assertion failed
-validator.assertTrue=assertion failed
-validator.future=must be a future date
-validator.length=length must be between {min} and {max}
-validator.max=must be less than or equal to {value}
-validator.min=must be greater than or equal to {value}
-validator.notNull=may not be null
-validator.past=must be a past date
-validator.pattern=must match "{regex}"
-validator.range=must be between {min} and {max}
-validator.size=size must be between {min} and {max}
-validator.email=not a well-formed email address
-validator.notEmpty=may not be null or empty
-validator.digits=Numeric value out of bounds (<{integerDigits} digits>.<{fractionalDigits} digits> expected)
-validator.creditCard=Invalid credit card number
-validator.ean=Invalid EAN
\ No newline at end of file

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages.properties (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages.properties)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages.properties	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages.properties	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,16 @@
+validator.assertFalse=assertion failed
+validator.assertTrue=assertion failed
+validator.future=must be a future date
+validator.length=length must be between {min} and {max}
+validator.max=must be less than or equal to {value}
+validator.min=must be greater than or equal to {value}
+validator.notNull=may not be null
+validator.past=must be a past date
+validator.pattern=must match "{regex}"
+validator.range=must be between {min} and {max}
+validator.size=size must be between {min} and {max}
+validator.email=not a well-formed email address
+validator.notEmpty=may not be null or empty
+validator.digits=Numeric value out of bounds (<{integerDigits} digits>.<{fractionalDigits} digits> expected)
+validator.creditCard=Invalid credit card number
+validator.ean=Invalid EAN
\ No newline at end of file

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_da.properties
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_da.properties	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_da.properties	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,16 +0,0 @@
-validator.assertFalse=assertion fejlet
-validator.assertTrue=assertion fejlet
-validator.future=skal være en fremtidig dato
-validator.length=længden skal være mellem {min} og {max}
-validator.max=skal være mindre end eller lig med {value}
-validator.min=skal være større end eller lig med {value}
-validator.notNull=må ikke være null
-validator.past=skal være en passeret dato
-validator.pattern=skal matche "{regex}"
-validator.range=skal være mellem {min} og {max}
-validator.size=antallet skal være mellem {min} og {max}
-validator.email=not a well-formed email address
-validator.notEmpty=må ikke være null eller tom
-validator.digits=Værdien er ikke inden for det forventede (<{integerDigits} heltal>.<{fractionalDigits} decimaler>)
-validator.ean=Ukorrekt EAN
-validator.creditCard=Ukorrekt kreditkort nummer
\ No newline at end of file

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_da.properties (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_da.properties)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_da.properties	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_da.properties	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,16 @@
+validator.assertFalse=assertion fejlet
+validator.assertTrue=assertion fejlet
+validator.future=skal være en fremtidig dato
+validator.length=længden skal være mellem {min} og {max}
+validator.max=skal være mindre end eller lig med {value}
+validator.min=skal være større end eller lig med {value}
+validator.notNull=må ikke være null
+validator.past=skal være en passeret dato
+validator.pattern=skal matche "{regex}"
+validator.range=skal være mellem {min} og {max}
+validator.size=antallet skal være mellem {min} og {max}
+validator.email=not a well-formed email address
+validator.notEmpty=må ikke være null eller tom
+validator.digits=Værdien er ikke inden for det forventede (<{integerDigits} heltal>.<{fractionalDigits} decimaler>)
+validator.ean=Ukorrekt EAN
+validator.creditCard=Ukorrekt kreditkort nummer
\ No newline at end of file

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_de.properties
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_de.properties	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_de.properties	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,16 +0,0 @@
-validator.assertFalse=nicht garantiert
-validator.assertTrue=garantiert
-validator.future=muss in der Zukunft liegen
-validator.length=muss zwischen {min} und {max} lang sein
-validator.max=muss weniger oder gleich {value} sein
-validator.min=muss mehr oder gleich {value} sein
-validator.notNull=kann nicht leer sein
-validator.past=muss in der Vergangenheit liegen
-validator.pattern=muss Ausdruck "{regex}" entsprechen
-validator.range=muss zwischen {min} und {max} sein
-validator.size=muss zwischen {min} und {max} gross sein
-validator.email=not a well-formed email address
-validator.notEmpty=kann nicht null oder leer sein
-validator.digits=numeric value out of bounds (<{integerDigits} digits>.<{fractionalDigits} digits> expected)
-validator.ean=invalid EAN
-validator.creditCard=Ungültige Kreditkartennummer
\ No newline at end of file

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_de.properties (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_de.properties)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_de.properties	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_de.properties	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,16 @@
+validator.assertFalse=nicht garantiert
+validator.assertTrue=garantiert
+validator.future=muss in der Zukunft liegen
+validator.length=muss zwischen {min} und {max} lang sein
+validator.max=muss weniger oder gleich {value} sein
+validator.min=muss mehr oder gleich {value} sein
+validator.notNull=kann nicht leer sein
+validator.past=muss in der Vergangenheit liegen
+validator.pattern=muss Ausdruck "{regex}" entsprechen
+validator.range=muss zwischen {min} und {max} sein
+validator.size=muss zwischen {min} und {max} gross sein
+validator.email=not a well-formed email address
+validator.notEmpty=kann nicht null oder leer sein
+validator.digits=numeric value out of bounds (<{integerDigits} digits>.<{fractionalDigits} digits> expected)
+validator.ean=invalid EAN
+validator.creditCard=Ungültige Kreditkartennummer
\ No newline at end of file

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_es.properties
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_es.properties	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_es.properties	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,16 +0,0 @@
-validator.assertFalse=aserción fallida
-validator.assertTrue=aserción fallida
-validator.future=debe ser una fecha futura
-validator.length=la longitud debe ser entre {min} y {max}
-validator.max=debe ser menor o igual a {value}
-validator.min=debe ser mayor o igual a {value}
-validator.notNull=no puede ser nula
-validator.past=debe ser una fecha pasada
-validator.pattern=debe corresponder a "{regex}"
-validator.range=debe ser entre {min} y {max}
-validator.size=el tamaño debe ser entre {min} y {max}
-validator.email=no es una dirección de correo electrónico bien formada
-validator.notEmpty=no debe ser nulo o vacío
-validator.digits=numeric value out of bounds (<{integerDigits} digits>.<{fractionalDigits} digits> expected)
-validator.ean=invalid EAN
-validator.creditCard=invalid credit card number
\ No newline at end of file

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_es.properties (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_es.properties)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_es.properties	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_es.properties	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,16 @@
+validator.assertFalse=aserción fallida
+validator.assertTrue=aserción fallida
+validator.future=debe ser una fecha futura
+validator.length=la longitud debe ser entre {min} y {max}
+validator.max=debe ser menor o igual a {value}
+validator.min=debe ser mayor o igual a {value}
+validator.notNull=no puede ser nula
+validator.past=debe ser una fecha pasada
+validator.pattern=debe corresponder a "{regex}"
+validator.range=debe ser entre {min} y {max}
+validator.size=el tamaño debe ser entre {min} y {max}
+validator.email=no es una dirección de correo electrónico bien formada
+validator.notEmpty=no debe ser nulo o vacío
+validator.digits=numeric value out of bounds (<{integerDigits} digits>.<{fractionalDigits} digits> expected)
+validator.ean=invalid EAN
+validator.creditCard=invalid credit card number
\ No newline at end of file

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_fr.properties
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_fr.properties	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_fr.properties	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,16 +0,0 @@
-validator.assertFalse=l'assertion a échoué
-validator.assertTrue=l'assertion a échoué
-validator.future=doit être dans le futur
-validator.length=la longueur doit être entre {min} et {max}
-validator.max=doit être inférieur ou égal à {value}
-validator.min=doit être supérieur ou égal à {value}
-validator.notNull=ne peut pas être nul
-validator.past=doit être dans le passé
-validator.pattern=doit suivre "{regex}"
-validator.range=doit être entre {min} et {max}
-validator.size=le nombre d'éléments doit être entre {min} et {max}
-validator.email=Address email mal formée
-validator.notEmpty=ne peut pas être nul ou vide
-validator.digits=Valeur numérique hors limite (<{integerDigits} chiffres>.<{fractionalDigits} chiffres> attendus)
-validator.ean=EAN invalide
-validator.creditCard=Numéro de carte de crédit invalide
\ No newline at end of file

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_fr.properties (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_fr.properties)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_fr.properties	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_fr.properties	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,16 @@
+validator.assertFalse=l'assertion a échoué
+validator.assertTrue=l'assertion a échoué
+validator.future=doit être dans le futur
+validator.length=la longueur doit être entre {min} et {max}
+validator.max=doit être inférieur ou égal à {value}
+validator.min=doit être supérieur ou égal à {value}
+validator.notNull=ne peut pas être nul
+validator.past=doit être dans le passé
+validator.pattern=doit suivre "{regex}"
+validator.range=doit être entre {min} et {max}
+validator.size=le nombre d'éléments doit être entre {min} et {max}
+validator.email=Address email mal formée
+validator.notEmpty=ne peut pas être nul ou vide
+validator.digits=Valeur numérique hors limite (<{integerDigits} chiffres>.<{fractionalDigits} chiffres> attendus)
+validator.ean=EAN invalide
+validator.creditCard=Numéro de carte de crédit invalide
\ No newline at end of file

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_it.properties
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_it.properties	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_it.properties	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,16 +0,0 @@
-validator.assertFalse=asserzione fallita
-validator.assertTrue=asserzione fallita
-validator.future=deve essere una data futura
-validator.length=la lunghezza deve essere tra {min} e {max}
-validator.max=deve essere minore o uguale a {value}
-validator.min=deve essere maggiore o uguale a {value}
-validator.notNull=non può essere nullo
-validator.past=deve essere una data nel passato
-validator.pattern=deve corrispondere a "{regex}"
-validator.range=deve essere tra {min} e {max}
-validator.size=le dimensioni devono essere tra {min} e {max}
-validator.email=not a well-formed email address
-validator.notEmpty=non può essere nullo o vuoto
-validator.digits=Valore numerico fuori dai limiti (atteso <{integerDigits} cifre>.<{fractionalDigits} cifre>)
-validator.ean=EAN invalido
-validator.creditCard=invalid credit card number
\ No newline at end of file

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_it.properties (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_it.properties)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_it.properties	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_it.properties	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,16 @@
+validator.assertFalse=asserzione fallita
+validator.assertTrue=asserzione fallita
+validator.future=deve essere una data futura
+validator.length=la lunghezza deve essere tra {min} e {max}
+validator.max=deve essere minore o uguale a {value}
+validator.min=deve essere maggiore o uguale a {value}
+validator.notNull=non può essere nullo
+validator.past=deve essere una data nel passato
+validator.pattern=deve corrispondere a "{regex}"
+validator.range=deve essere tra {min} e {max}
+validator.size=le dimensioni devono essere tra {min} e {max}
+validator.email=not a well-formed email address
+validator.notEmpty=non può essere nullo o vuoto
+validator.digits=Valore numerico fuori dai limiti (atteso <{integerDigits} cifre>.<{fractionalDigits} cifre>)
+validator.ean=EAN invalido
+validator.creditCard=invalid credit card number
\ No newline at end of file

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_nl.properties
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_nl.properties	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_nl.properties	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,16 +0,0 @@
-validator.assertFalse=is niet geldig
-validator.assertTrue=is niet geldig
-validator.future=moet een datum in de toekomst zijn
-validator.length=moet tussen {min} en {max} lang zijn
-validator.max=moet kleiner of gelijk aan {value} zijn
-validator.min=moet groter of gelijk aan {value} zijn
-validator.notNull=mag niet leeg zijn
-validator.past=moet een datum in het verleden zijn
-validator.pattern=moet overeenkomen met "{regex}"
-validator.range=moet tussen {min} en {max} zijn
-validator.size=moet tussen {min} en {max} groot zijn
-validator.email=moet een geldig e-mail adres zijn
-validator.notEmpty=mag niet null of leeg zijn
-validator.digits=numeric value out of bounds (<{integerDigits} digits>.<{fractionalDigits} digits> expected)
-validator.ean=invalid EAN
-validator.creditCard=invalid credit card number
\ No newline at end of file

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_nl.properties (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_nl.properties)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_nl.properties	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_nl.properties	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,16 @@
+validator.assertFalse=is niet geldig
+validator.assertTrue=is niet geldig
+validator.future=moet een datum in de toekomst zijn
+validator.length=moet tussen {min} en {max} lang zijn
+validator.max=moet kleiner of gelijk aan {value} zijn
+validator.min=moet groter of gelijk aan {value} zijn
+validator.notNull=mag niet leeg zijn
+validator.past=moet een datum in het verleden zijn
+validator.pattern=moet overeenkomen met "{regex}"
+validator.range=moet tussen {min} en {max} zijn
+validator.size=moet tussen {min} en {max} groot zijn
+validator.email=moet een geldig e-mail adres zijn
+validator.notEmpty=mag niet null of leeg zijn
+validator.digits=numeric value out of bounds (<{integerDigits} digits>.<{fractionalDigits} digits> expected)
+validator.ean=invalid EAN
+validator.creditCard=invalid credit card number
\ No newline at end of file

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_pt_BR.properties
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_pt_BR.properties	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_pt_BR.properties	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,16 +0,0 @@
-validator.assertFalse=asserção falhou
-validator.assertTrue=asserção falhou
-validator.future=deve ser uma data no futuro
-validator.length=tamanho deve estar entre {min} e {max}
-validator.max=deve ser menor ou igual a {value}
-validator.min=deve ser maior ou igual a {value}
-validator.notNull=não pode ser nulo
-validator.past=deve ser uma data no passado
-validator.pattern=deve ser válida de acordo com a expressão "{regex}"
-validator.range=deve estar entre {min} e {max}
-validator.size=tamanho deve estar entre {min} e {max}
-validator.email=não é um email válido
-validator.notEmpty=não pode ser nulo ou vazio 
-validator.digits=Valor numérico fora do padrão (esperado <{integerDigits}> dígitos,<{fractionalDigits} dígitos)
-validator.ean=EAN inválido
-validator.creditCard=Número inválido de cartão de crédito
\ No newline at end of file

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_pt_BR.properties (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_pt_BR.properties)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_pt_BR.properties	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_pt_BR.properties	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,16 @@
+validator.assertFalse=asserção falhou
+validator.assertTrue=asserção falhou
+validator.future=deve ser uma data no futuro
+validator.length=tamanho deve estar entre {min} e {max}
+validator.max=deve ser menor ou igual a {value}
+validator.min=deve ser maior ou igual a {value}
+validator.notNull=não pode ser nulo
+validator.past=deve ser uma data no passado
+validator.pattern=deve ser válida de acordo com a expressão "{regex}"
+validator.range=deve estar entre {min} e {max}
+validator.size=tamanho deve estar entre {min} e {max}
+validator.email=não é um email válido
+validator.notEmpty=não pode ser nulo ou vazio 
+validator.digits=Valor numérico fora do padrão (esperado <{integerDigits}> dígitos,<{fractionalDigits} dígitos)
+validator.ean=EAN inválido
+validator.creditCard=Número inválido de cartão de crédito
\ No newline at end of file

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_sv.properties
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_sv.properties	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_sv.properties	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,16 +0,0 @@
-validator.assertFalse=Felaktigt påstående
-validator.assertTrue=Felaktigt påstående
-validator.future=måste vara ett datum fram i tiden
-validator.length=måste vara mellan {min} och {max} tecken
-validator.max=får vara max {value}
-validator.min=måste vara minst {value}
-validator.notNull=får inte vara tomt
-validator.past=måste vara ett datum bakåt i tiden
-validator.pattern=måste matcha "{regex}"
-validator.range=måste vara mellan {min} och {max}
-validator.size=storlek måste vara mellan {min} och {max}
-validator.email=ogiltig e-mail adress
-validator.notEmpty=får inte vara tomt
-validator.digits=numeric value out of bounds (<{integerDigits} digits>.<{fractionalDigits} digits> expected)
-validator.ean=invalid EAN
-validator.creditCard=invalid credit card number
\ No newline at end of file

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_sv.properties (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_sv.properties)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_sv.properties	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_sv.properties	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,16 @@
+validator.assertFalse=Felaktigt påstående
+validator.assertTrue=Felaktigt påstående
+validator.future=måste vara ett datum fram i tiden
+validator.length=måste vara mellan {min} och {max} tecken
+validator.max=får vara max {value}
+validator.min=måste vara minst {value}
+validator.notNull=får inte vara tomt
+validator.past=måste vara ett datum bakåt i tiden
+validator.pattern=måste matcha "{regex}"
+validator.range=måste vara mellan {min} och {max}
+validator.size=storlek måste vara mellan {min} och {max}
+validator.email=ogiltig e-mail adress
+validator.notEmpty=får inte vara tomt
+validator.digits=numeric value out of bounds (<{integerDigits} digits>.<{fractionalDigits} digits> expected)
+validator.ean=invalid EAN
+validator.creditCard=invalid credit card number
\ No newline at end of file

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_zh_CN.properties
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_zh_CN.properties	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_zh_CN.properties	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,16 +0,0 @@
-validator.assertFalse=\u9a8c\u8bc1\u5931\u8d25
-validator.assertTrue=\u9a8c\u8bc1\u5931\u8d25
-validator.future=\u5fc5\u987b\u8fdf\u4e8e\u4eca\u65e5
-validator.length=\u957f\u5ea6\u5fc5\u987b\u4ecb\u4e8e {min} \u4e0e {max} \u4e4b\u95f4
-validator.max=\u5fc5\u987b\u5c0f\u4e8e\u7b49\u4e8e {value}
-validator.min=\u5fc5\u987b\u5927\u4e8e\u7b49\u4e8e {value}
-validator.notNull=\u4e0d\u80fd\u4e3a\u7a7a
-validator.past=\u5fc5\u987b\u65e9\u4e8e\u4eca\u65e5
-validator.pattern=\u5fc5\u987b\u7b26\u5408 "{regex}"
-validator.range=\u5fc5\u987b\u4ecb\u4e8e {min} \u4e0e {max} \u4e4b\u95f4
-validator.size=\u5927\u5c0f\u5fc5\u987b\u4ecb\u4e8e {min} \u4e0e {max} \u4e4b\u95f4
-validator.email=not a well-formed email address
-validator.notEmpty=may not be null or empty
-validator.digits=numeric value out of bounds (<{integerDigits} digits>.<{fractionalDigits} digits> expected)
-validator.ean=invalid EAN
-validator.creditCard=invalid credit card number
\ No newline at end of file

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_zh_CN.properties (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_zh_CN.properties)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_zh_CN.properties	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_zh_CN.properties	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,16 @@
+validator.assertFalse=\u9a8c\u8bc1\u5931\u8d25
+validator.assertTrue=\u9a8c\u8bc1\u5931\u8d25
+validator.future=\u5fc5\u987b\u8fdf\u4e8e\u4eca\u65e5
+validator.length=\u957f\u5ea6\u5fc5\u987b\u4ecb\u4e8e {min} \u4e0e {max} \u4e4b\u95f4
+validator.max=\u5fc5\u987b\u5c0f\u4e8e\u7b49\u4e8e {value}
+validator.min=\u5fc5\u987b\u5927\u4e8e\u7b49\u4e8e {value}
+validator.notNull=\u4e0d\u80fd\u4e3a\u7a7a
+validator.past=\u5fc5\u987b\u65e9\u4e8e\u4eca\u65e5
+validator.pattern=\u5fc5\u987b\u7b26\u5408 "{regex}"
+validator.range=\u5fc5\u987b\u4ecb\u4e8e {min} \u4e0e {max} \u4e4b\u95f4
+validator.size=\u5927\u5c0f\u5fc5\u987b\u4ecb\u4e8e {min} \u4e0e {max} \u4e4b\u95f4
+validator.email=not a well-formed email address
+validator.notEmpty=may not be null or empty
+validator.digits=numeric value out of bounds (<{integerDigits} digits>.<{fractionalDigits} digits> expected)
+validator.ean=invalid EAN
+validator.creditCard=invalid credit card number
\ No newline at end of file

Deleted: trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_zh_TW.properties
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_zh_TW.properties	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_zh_TW.properties	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,16 +0,0 @@
-validator.assertFalse=\u9a57\u8b49\u5931\u6557
-validator.assertTrue=\u9a57\u8b49\u5931\u6557
-validator.future=\u5fc5\u9808\u9072\u4e8e\u4eca\u65e5
-validator.length=\u9577\u5ea6\u5fc5\u9808\u4ecb\u65bc {min} \u8207 {max} \u4e4b\u9593
-validator.max=\u5fc5\u9808\u5c0f\u4e8e\u6216\u7b49\u65bc{value}
-validator.min=\u5fc5\u9808\u5927\u4e8e\u6216\u7b49\u65bc{value}
-validator.notNull=\u5fc5\u9808\u586b\u5beb
-validator.past=\u5fc5\u9808\u65e9\u4e8e\u4eca\u65e5
-validator.pattern=\u5fc5\u9808\u7b26\u5408"{regex}"
-validator.range=\u5fc5\u9808\u4ecb\u65bc{min} \u8207 {max} \u4e4b\u9593
-validator.size=\u5927\u5c0f\u5fc5\u9808\u4ecb\u65bc{min} \u8207 {max} \u4e4b\u9593
-validator.email=not a well-formed email address
-validator.digits=numeric value out of bounds (<{integerDigits} digits>.<{fractionalDigits} digits> expected)
-validator.notEmpty=may not be null or empty
-validator.ean=invalid EAN
-validator.creditCard=invalid credit card number
\ No newline at end of file

Copied: trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_zh_TW.properties (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_zh_TW.properties)
===================================================================
--- trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_zh_TW.properties	                        (rev 0)
+++ trunk/HibernateExt/validator/src/java/org/hibernate/validator/resources/DefaultValidatorMessages_zh_TW.properties	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,16 @@
+validator.assertFalse=\u9a57\u8b49\u5931\u6557
+validator.assertTrue=\u9a57\u8b49\u5931\u6557
+validator.future=\u5fc5\u9808\u9072\u4e8e\u4eca\u65e5
+validator.length=\u9577\u5ea6\u5fc5\u9808\u4ecb\u65bc {min} \u8207 {max} \u4e4b\u9593
+validator.max=\u5fc5\u9808\u5c0f\u4e8e\u6216\u7b49\u65bc{value}
+validator.min=\u5fc5\u9808\u5927\u4e8e\u6216\u7b49\u65bc{value}
+validator.notNull=\u5fc5\u9808\u586b\u5beb
+validator.past=\u5fc5\u9808\u65e9\u4e8e\u4eca\u65e5
+validator.pattern=\u5fc5\u9808\u7b26\u5408"{regex}"
+validator.range=\u5fc5\u9808\u4ecb\u65bc{min} \u8207 {max} \u4e4b\u9593
+validator.size=\u5927\u5c0f\u5fc5\u9808\u4ecb\u65bc{min} \u8207 {max} \u4e4b\u9593
+validator.email=not a well-formed email address
+validator.digits=numeric value out of bounds (<{integerDigits} digits>.<{fractionalDigits} digits> expected)
+validator.notEmpty=may not be null or empty
+validator.ean=invalid EAN
+validator.creditCard=invalid credit card number
\ No newline at end of file

Copied: trunk/HibernateExt/validator/src/test (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test)

Deleted: trunk/HibernateExt/validator/src/test/ValidatorMessages.properties
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/ValidatorMessages.properties	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/ValidatorMessages.properties	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,7 +0,0 @@
-#overriding of default keys
-
-#specific to my project
-long=is too damn long
-floor.name=Floor
-out.of.range=lower that {min} and greater than {max}
-floor.out.of.range={floor.name} cannot be {out.of.range}
\ No newline at end of file

Copied: trunk/HibernateExt/validator/src/test/ValidatorMessages.properties (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/ValidatorMessages.properties)
===================================================================
--- trunk/HibernateExt/validator/src/test/ValidatorMessages.properties	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/ValidatorMessages.properties	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,7 @@
+#overriding of default keys
+
+#specific to my project
+long=is too damn long
+floor.name=Floor
+out.of.range=lower that {min} and greater than {max}
+floor.out.of.range={floor.name} cannot be {out.of.range}
\ No newline at end of file

Deleted: trunk/HibernateExt/validator/src/test/ValidatorMessages_da.properties
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/ValidatorMessages_da.properties	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/ValidatorMessages_da.properties	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,7 +0,0 @@
-#overriding of default keys
-
-#specific to my project
-long=is too damn long
-floor.name=Floor
-out.of.range=lower that {min} and greater than {max}
-floor.out.of.range={floor.name} cannot be {out.of.range}
\ No newline at end of file

Copied: trunk/HibernateExt/validator/src/test/ValidatorMessages_da.properties (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/ValidatorMessages_da.properties)
===================================================================
--- trunk/HibernateExt/validator/src/test/ValidatorMessages_da.properties	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/ValidatorMessages_da.properties	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,7 @@
+#overriding of default keys
+
+#specific to my project
+long=is too damn long
+floor.name=Floor
+out.of.range=lower that {min} and greater than {max}
+floor.out.of.range={floor.name} cannot be {out.of.range}
\ No newline at end of file

Deleted: trunk/HibernateExt/validator/src/test/ValidatorMessages_fr.properties
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/ValidatorMessages_fr.properties	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/ValidatorMessages_fr.properties	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,7 +0,0 @@
-#overriding of default keys
-
-#specific to my project
-long=est grave trop long
-floor.name=Etage
-out.of.range=plus petit que {min} ou plus grand que {max}
-floor.out.of.range={floor.name} ne peut pas être {out.of.range}
\ No newline at end of file

Copied: trunk/HibernateExt/validator/src/test/ValidatorMessages_fr.properties (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/ValidatorMessages_fr.properties)
===================================================================
--- trunk/HibernateExt/validator/src/test/ValidatorMessages_fr.properties	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/ValidatorMessages_fr.properties	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,7 @@
+#overriding of default keys
+
+#specific to my project
+long=est grave trop long
+floor.name=Etage
+out.of.range=plus petit que {min} ou plus grand que {max}
+floor.out.of.range={floor.name} ne peut pas être {out.of.range}
\ No newline at end of file

Deleted: trunk/HibernateExt/validator/src/test/hibernate.properties
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/hibernate.properties	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/hibernate.properties	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,472 +0,0 @@
-######################
-### Query Language ###
-######################
-
-## define query language constants / function names
-
-hibernate.query.substitutions true 1, false 0, yes 'Y', no 'N'
-
-
-## select the classic query parser
-
-#hibernate.query.factory_class org.hibernate.hql.classic.ClassicQueryTranslatorFactory
-
-hibernate.format_sql true
-
-
-
-#################
-### Platforms ###
-#################
-
-## JNDI Datasource
-
-#hibernate.connection.datasource jdbc/test
-#hibernate.connection.username db2
-#hibernate.connection.password db2
-
-
-## HypersonicSQL
-
-hibernate.dialect org.hibernate.dialect.HSQLDialect
-hibernate.connection.driver_class org.hsqldb.jdbcDriver
-hibernate.connection.username sa
-hibernate.connection.password
-hibernate.connection.url jdbc:hsqldb:hsql://localhost
-hibernate.connection.url jdbc:hsqldb:test
-hibernate.connection.url jdbc:hsqldb:.
-
-
-## MySQL
-
-#hibernate.dialect org.hibernate.dialect.MySQLDialect
-#hibernate.dialect org.hibernate.dialect.MySQLInnoDBDialect
-#hibernate.dialect org.hibernate.dialect.MySQLMyISAMDialect
-#hibernate.connection.driver_class com.mysql.jdbc.Driver
-#hibernate.connection.url jdbc:mysql:///test
-#hibernate.connection.username emmanuel
-#hibernate.connection.password
-
-
-## Oracle
-
-#hibernate.dialect org.hibernate.dialect.OracleDialect
-#hibernate.dialect org.hibernate.dialect.Oracle9Dialect
-#hibernate.connection.driver_class oracle.jdbc.driver.OracleDriver
-#hibernate.connection.username ora
-#hibernate.connection.password ora
-#hibernate.connection.url jdbc:oracle:thin:@localhost:1521:test
-
-
-## PostgreSQL
-
-#hibernate.dialect org.hibernate.dialect.PostgreSQLDialect
-#hibernate.connection.driver_class org.postgresql.Driver
-#hibernate.connection.url jdbc:postgresql:annotations
-#hibernate.connection.username postgres
-#hibernate.connection.password hibernate
-#hibernate.query.substitutions yes 'Y', no 'N'
-
-
-## DB2
-
-#hibernate.dialect org.hibernate.dialect.DB2Dialect
-#hibernate.connection.driver_class COM.ibm.db2.jdbc.app.DB2Driver
-#hibernate.connection.url jdbc:db2:test
-#hibernate.connection.username db2
-#hibernate.connection.password db2
-
-## TimesTen (not supported yet)
-
-#hibernate.dialect org.hibernate.dialect.TimesTenDialect
-#hibernate.connection.driver_class com.timesten.jdbc.TimesTenDriver
-#hibernate.connection.url jdbc:timesten:direct:test
-#hibernate.connection.username
-#hibernate.connection.password 
-
-## DB2/400
-
-#hibernate.dialect org.hibernate.dialect.DB2400Dialect
-#hibernate.connection.username user
-#hibernate.connection.password password
-
-## Native driver
-#hibernate.connection.driver_class COM.ibm.db2.jdbc.app.DB2Driver
-#hibernate.connection.url jdbc:db2://systemname
-
-## Toolbox driver
-#hibernate.connection.driver_class com.ibm.as400.access.AS400JDBCDriver
-#hibernate.connection.url jdbc:as400://systemname
-
-
-## Derby (Not supported!)
-
-#hibernate.dialect org.hibernate.dialect.DerbyDialect
-#hibernate.connection.driver_class org.apache.derby.jdbc.EmbeddedDriver
-#hibernate.connection.username
-#hibernate.connection.password
-#hibernate.connection.url jdbc:derby:/test;create=true
-
-
-## Sybase
-
-#hibernate.dialect org.hibernate.dialect.SybaseDialect
-#hibernate.connection.driver_class com.sybase.jdbc2.jdbc.SybDriver
-#hibernate.connection.username sa
-#hibernate.connection.password sasasa
-#hibernate.connection.url jdbc:sybase:Tds:co3061835-a:5000/tempdb
-
-
-## Mckoi SQL
-
-#hibernate.dialect org.hibernate.dialect.MckoiDialect
-#hibernate.connection.driver_class com.mckoi.JDBCDriver
-#hibernate.connection.url jdbc:mckoi:///
-#hibernate.connection.url jdbc:mckoi:local://C:/mckoi1.00/db.conf
-#hibernate.connection.username admin
-#hibernate.connection.password nimda
-
-
-## SAP DB
-
-#hibernate.dialect org.hibernate.dialect.SAPDBDialect
-#hibernate.connection.driver_class com.sap.dbtech.jdbc.DriverSapDB
-#hibernate.connection.url jdbc:sapdb://localhost/TST
-#hibernate.connection.username TEST
-#hibernate.connection.password TEST
-#hibernate.query.substitutions yes 'Y', no 'N'
-
-
-## MS SQL Server
-
-#hibernate.dialect org.hibernate.dialect.SQLServerDialect
-#hibernate.connection.username sa
-#hibernate.connection.password sa
-
-## JSQL Driver
-#hibernate.connection.driver_class com.jnetdirect.jsql.JSQLDriver
-#hibernate.connection.url jdbc:JSQLConnect://1E1/test
-
-## JTURBO Driver
-#hibernate.connection.driver_class com.newatlanta.jturbo.driver.Driver
-#hibernate.connection.url jdbc:JTurbo://1E1:1433/test
-
-## WebLogic Driver
-#hibernate.connection.driver_class weblogic.jdbc.mssqlserver4.Driver
-#hibernate.connection.url jdbc:weblogic:mssqlserver4:1E1:1433
-
-## Microsoft Driver (not recommended!)
-#hibernate.connection.driver_class com.microsoft.jdbc.sqlserver.SQLServerDriver
-#hibernate.connection.url jdbc:microsoft:sqlserver://1E1;DatabaseName=test;SelectMethod=cursor
-
-## jTDS (since version 0.9)
-#hibernate.connection.driver_class net.sourceforge.jtds.jdbc.Driver
-#hibernate.connection.url jdbc:jtds:sqlserver://1E1/test
-
-## Interbase
-
-#hibernate.dialect org.hibernate.dialect.InterbaseDialect
-#hibernate.connection.username sysdba
-#hibernate.connection.password masterkey
-
-## DO NOT specify hibernate.connection.sqlDialect
-
-## InterClient
-
-#hibernate.connection.driver_class interbase.interclient.Driver
-#hibernate.connection.url jdbc:interbase://localhost:3060/C:/firebird/test.gdb
-
-## Pure Java
-
-#hibernate.connection.driver_class org.firebirdsql.jdbc.FBDriver
-#hibernate.connection.url jdbc:firebirdsql:localhost/3050:/firebird/test.gdb
-
-
-## Pointbase
-
-#hibernate.dialect org.hibernate.dialect.PointbaseDialect
-#hibernate.connection.driver_class com.pointbase.jdbc.jdbcUniversalDriver
-#hibernate.connection.url jdbc:pointbase:embedded:sample
-#hibernate.connection.username PBPUBLIC
-#hibernate.connection.password PBPUBLIC
-
-
-
-#################################
-### Hibernate Connection Pool ###
-#################################
-
-hibernate.connection.pool_size 1
-
-
-
-###########################
-### C3P0 Connection Pool###
-###########################
-
-#hibernate.c3p0.max_size 2
-#hibernate.c3p0.min_size 2
-#hibernate.c3p0.timeout 5000
-#hibernate.c3p0.max_statements 100
-#hibernate.c3p0.idle_test_period 3000
-#hibernate.c3p0.acquire_increment 2
-#hibernate.c3p0.validate false
-
-
-
-##############################
-### Proxool Connection Pool###
-##############################
-
-## Properties for external configuration of Proxool
-
-hibernate.proxool.pool_alias pool1
-
-## Only need one of the following
-
-#hibernate.proxool.existing_pool true
-#hibernate.proxool.xml proxool.xml
-#hibernate.proxool.properties proxool.properties
-
-
-
-#################################
-### Plugin ConnectionProvider ###
-#################################
-
-## use a custom ConnectionProvider (if not set, Hibernate will choose a built-in ConnectionProvider using hueristics)
-
-#hibernate.connection.provider_class org.hibernate.connection.DriverManagerConnectionProvider
-#hibernate.connection.provider_class org.hibernate.connection.DatasourceConnectionProvider
-#hibernate.connection.provider_class org.hibernate.connection.C3P0ConnectionProvider
-#hibernate.connection.provider_class org.hibernate.connection.DBCPConnectionProvider
-#hibernate.connection.provider_class org.hibernate.connection.ProxoolConnectionProvider
-
-
-
-#######################
-### Transaction API ###
-#######################
-
-## Enable automatic flush during the JTA beforeCompletion() callback
-## (This setting is relevant with or without the Transaction API)
-
-#hibernate.transaction.flush_before_completion
-
-
-## Enable automatic session close at the end of transaction
-## (This setting is relevant with or without the Transaction API)
-
-#hibernate.transaction.auto_close_session
-
-
-## the Transaction API abstracts application code from the underlying JTA or JDBC transactions
-
-#hibernate.transaction.factory_class org.hibernate.transaction.JTATransactionFactory
-#hibernate.transaction.factory_class org.hibernate.transaction.JDBCTransactionFactory
-
-
-## to use JTATransactionFactory, Hibernate must be able to locate the UserTransaction in JNDI
-## default is java:comp/UserTransaction
-## you do NOT need this setting if you specify hibernate.transaction.manager_lookup_class
-
-#jta.UserTransaction jta/usertransaction
-#jta.UserTransaction javax.transaction.UserTransaction
-#jta.UserTransaction UserTransaction
-
-
-## to use the second-level cache with JTA, Hibernate must be able to obtain the JTA TransactionManager
-
-#hibernate.transaction.manager_lookup_class org.hibernate.transaction.JBossTransactionManagerLookup
-#hibernate.transaction.manager_lookup_class org.hibernate.transaction.WeblogicTransactionManagerLookup
-#hibernate.transaction.manager_lookup_class org.hibernate.transaction.WebSphereTransactionManagerLookup
-#hibernate.transaction.manager_lookup_class org.hibernate.transaction.OrionTransactionManagerLookup
-#hibernate.transaction.manager_lookup_class org.hibernate.transaction.ResinTransactionManagerLookup
-
-
-
-##############################
-### Miscellaneous Settings ###
-##############################
-
-## print all generated SQL to the console
-
-#hibernate.show_sql true
-
-
-## add comments to the generated SQL
-
-#hibernate.use_sql_comments true
-
-
-## generate statistics
-
-#hibernate.generate_statistics true
-
-
-## auto schema export
-
-#hibernate.hbm2ddl.auto create-drop
-#hibernate.hbm2ddl.auto create
-#hibernate.hbm2ddl.auto update
-
-
-## specify a default schema and catalog for unqualified tablenames
-
-#hibernate.default_schema test
-#hibernate.default_catalog test
-
-
-## enable ordering of SQL UPDATEs by primary key
-
-hibernate.order_updates true
-
-
-## set the maximum depth of the outer join fetch tree
-
-hibernate.max_fetch_depth 1
-
-
-## set the default batch size for batch fetching
-
-hibernate.default_batch_fetch_size 100
-
-
-## rollback generated identifier values of deleted entities to default values
-
-#hibernate.use_identifer_rollback true
-
-
-## enable CGLIB reflection optimizer (enabled by default)
-
-#hibernate.cglib.use_reflection_optimizer false
-
-
-
-#####################
-### JDBC Settings ###
-#####################
-
-## specify a JDBC isolation level
-
-#hibernate.connection.isolation 4
-
-
-## enable JDBC autocommit (not recommended!)
-
-#hibernate.connection.autocommit true
-
-
-## set the JDBC fetch size
-
-#hibernate.jdbc.fetch_size 25
-
-
-## set the maximum JDBC 2 batch size (a nonzero value enables batching)
-
-#hibernate.jdbc.batch_size 0
-
-
-## enable batch updates even for versioned data
-
-hibernate.jdbc.batch_versioned_data true
-
-
-## enable use of JDBC 2 scrollable ResultSets (specifying a Dialect will cause Hibernate to use a sensible default)
-
-#hibernate.jdbc.use_scrollable_resultset true
-
-
-## use streams when writing binary types to / from JDBC
-
-hibernate.jdbc.use_streams_for_binary true
-
-
-## use JDBC 3 PreparedStatement.getGeneratedKeys() to get the identifier of an inserted row
-
-#hibernate.jdbc.use_get_generated_keys false
-
-
-## choose a custom JDBC batcher
-
-# hibernate.jdbc.factory_class
-
-
-## enable JDBC result set column alias caching 
-## (minor performance enhancement for broken JDBC drivers)
-
-# hibernate.jdbc.wrap_result_sets
-
-
-## choose a custom SQL exception converter
-
-#hibernate.jdbc.sql_exception_converter
-
-
-
-##########################
-### Second-level Cache ###
-##########################
-
-## optimize chache for minimal "puts" instead of minimal "gets" (good for clustered cache)
-
-#hibernate.cache.use_minimal_puts true
-
-
-## set a prefix for cache region names
-
-hibernate.cache.region_prefix hibernate.test
-
-
-## disable the second-level cache
-
-#hibernate.cache.use_second_level_cache false
-
-
-## enable the query cache
-
-hibernate.cache.use_query_cache true
-
-
-## store the second-level cache entries in a more human-friendly format
-
-#hibernate.cache.use_structured_entries true
-
-
-## choose a cache implementation
-
-#hibernate.cache.provider_class org.hibernate.cache.EhCacheProvider
-#hibernate.cache.provider_class org.hibernate.cache.EmptyCacheProvider
-hibernate.cache.provider_class org.hibernate.cache.HashtableCacheProvider
-#hibernate.cache.provider_class org.hibernate.cache.TreeCacheProvider
-#hibernate.cache.provider_class org.hibernate.cache.OSCacheProvider
-#hibernate.cache.provider_class org.hibernate.cache.SwarmCacheProvider
-
-
-## choose a custom query cache implementation
-
-#hibernate.cache.query_cache_factory
-
-
-
-############
-### JNDI ###
-############
-
-## specify a JNDI name for the SessionFactory
-
-#hibernate.session_factory_name hibernate/session_factory
-
-
-## Hibernate uses JNDI to bind a name to a SessionFactory and to look up the JTA UserTransaction;
-## if hibernate.jndi.* are not specified, Hibernate will use the default InitialContext() which
-## is the best approach in an application server
-
-#file system
-#hibernate.jndi.class com.sun.jndi.fscontext.RefFSContextFactory
-#hibernate.jndi.url file:/
-
-#WebSphere
-#hibernate.jndi.class com.ibm.websphere.naming.WsnInitialContextFactory
-#hibernate.jndi.url iiop://localhost:900/
-

Copied: trunk/HibernateExt/validator/src/test/hibernate.properties (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/hibernate.properties)
===================================================================
--- trunk/HibernateExt/validator/src/test/hibernate.properties	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/hibernate.properties	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,472 @@
+######################
+### Query Language ###
+######################
+
+## define query language constants / function names
+
+hibernate.query.substitutions true 1, false 0, yes 'Y', no 'N'
+
+
+## select the classic query parser
+
+#hibernate.query.factory_class org.hibernate.hql.classic.ClassicQueryTranslatorFactory
+
+hibernate.format_sql true
+
+
+
+#################
+### Platforms ###
+#################
+
+## JNDI Datasource
+
+#hibernate.connection.datasource jdbc/test
+#hibernate.connection.username db2
+#hibernate.connection.password db2
+
+
+## HypersonicSQL
+
+hibernate.dialect org.hibernate.dialect.HSQLDialect
+hibernate.connection.driver_class org.hsqldb.jdbcDriver
+hibernate.connection.username sa
+hibernate.connection.password
+hibernate.connection.url jdbc:hsqldb:hsql://localhost
+hibernate.connection.url jdbc:hsqldb:test
+hibernate.connection.url jdbc:hsqldb:.
+
+
+## MySQL
+
+#hibernate.dialect org.hibernate.dialect.MySQLDialect
+#hibernate.dialect org.hibernate.dialect.MySQLInnoDBDialect
+#hibernate.dialect org.hibernate.dialect.MySQLMyISAMDialect
+#hibernate.connection.driver_class com.mysql.jdbc.Driver
+#hibernate.connection.url jdbc:mysql:///test
+#hibernate.connection.username emmanuel
+#hibernate.connection.password
+
+
+## Oracle
+
+#hibernate.dialect org.hibernate.dialect.OracleDialect
+#hibernate.dialect org.hibernate.dialect.Oracle9Dialect
+#hibernate.connection.driver_class oracle.jdbc.driver.OracleDriver
+#hibernate.connection.username ora
+#hibernate.connection.password ora
+#hibernate.connection.url jdbc:oracle:thin:@localhost:1521:test
+
+
+## PostgreSQL
+
+#hibernate.dialect org.hibernate.dialect.PostgreSQLDialect
+#hibernate.connection.driver_class org.postgresql.Driver
+#hibernate.connection.url jdbc:postgresql:annotations
+#hibernate.connection.username postgres
+#hibernate.connection.password hibernate
+#hibernate.query.substitutions yes 'Y', no 'N'
+
+
+## DB2
+
+#hibernate.dialect org.hibernate.dialect.DB2Dialect
+#hibernate.connection.driver_class COM.ibm.db2.jdbc.app.DB2Driver
+#hibernate.connection.url jdbc:db2:test
+#hibernate.connection.username db2
+#hibernate.connection.password db2
+
+## TimesTen (not supported yet)
+
+#hibernate.dialect org.hibernate.dialect.TimesTenDialect
+#hibernate.connection.driver_class com.timesten.jdbc.TimesTenDriver
+#hibernate.connection.url jdbc:timesten:direct:test
+#hibernate.connection.username
+#hibernate.connection.password 
+
+## DB2/400
+
+#hibernate.dialect org.hibernate.dialect.DB2400Dialect
+#hibernate.connection.username user
+#hibernate.connection.password password
+
+## Native driver
+#hibernate.connection.driver_class COM.ibm.db2.jdbc.app.DB2Driver
+#hibernate.connection.url jdbc:db2://systemname
+
+## Toolbox driver
+#hibernate.connection.driver_class com.ibm.as400.access.AS400JDBCDriver
+#hibernate.connection.url jdbc:as400://systemname
+
+
+## Derby (Not supported!)
+
+#hibernate.dialect org.hibernate.dialect.DerbyDialect
+#hibernate.connection.driver_class org.apache.derby.jdbc.EmbeddedDriver
+#hibernate.connection.username
+#hibernate.connection.password
+#hibernate.connection.url jdbc:derby:/test;create=true
+
+
+## Sybase
+
+#hibernate.dialect org.hibernate.dialect.SybaseDialect
+#hibernate.connection.driver_class com.sybase.jdbc2.jdbc.SybDriver
+#hibernate.connection.username sa
+#hibernate.connection.password sasasa
+#hibernate.connection.url jdbc:sybase:Tds:co3061835-a:5000/tempdb
+
+
+## Mckoi SQL
+
+#hibernate.dialect org.hibernate.dialect.MckoiDialect
+#hibernate.connection.driver_class com.mckoi.JDBCDriver
+#hibernate.connection.url jdbc:mckoi:///
+#hibernate.connection.url jdbc:mckoi:local://C:/mckoi1.00/db.conf
+#hibernate.connection.username admin
+#hibernate.connection.password nimda
+
+
+## SAP DB
+
+#hibernate.dialect org.hibernate.dialect.SAPDBDialect
+#hibernate.connection.driver_class com.sap.dbtech.jdbc.DriverSapDB
+#hibernate.connection.url jdbc:sapdb://localhost/TST
+#hibernate.connection.username TEST
+#hibernate.connection.password TEST
+#hibernate.query.substitutions yes 'Y', no 'N'
+
+
+## MS SQL Server
+
+#hibernate.dialect org.hibernate.dialect.SQLServerDialect
+#hibernate.connection.username sa
+#hibernate.connection.password sa
+
+## JSQL Driver
+#hibernate.connection.driver_class com.jnetdirect.jsql.JSQLDriver
+#hibernate.connection.url jdbc:JSQLConnect://1E1/test
+
+## JTURBO Driver
+#hibernate.connection.driver_class com.newatlanta.jturbo.driver.Driver
+#hibernate.connection.url jdbc:JTurbo://1E1:1433/test
+
+## WebLogic Driver
+#hibernate.connection.driver_class weblogic.jdbc.mssqlserver4.Driver
+#hibernate.connection.url jdbc:weblogic:mssqlserver4:1E1:1433
+
+## Microsoft Driver (not recommended!)
+#hibernate.connection.driver_class com.microsoft.jdbc.sqlserver.SQLServerDriver
+#hibernate.connection.url jdbc:microsoft:sqlserver://1E1;DatabaseName=test;SelectMethod=cursor
+
+## jTDS (since version 0.9)
+#hibernate.connection.driver_class net.sourceforge.jtds.jdbc.Driver
+#hibernate.connection.url jdbc:jtds:sqlserver://1E1/test
+
+## Interbase
+
+#hibernate.dialect org.hibernate.dialect.InterbaseDialect
+#hibernate.connection.username sysdba
+#hibernate.connection.password masterkey
+
+## DO NOT specify hibernate.connection.sqlDialect
+
+## InterClient
+
+#hibernate.connection.driver_class interbase.interclient.Driver
+#hibernate.connection.url jdbc:interbase://localhost:3060/C:/firebird/test.gdb
+
+## Pure Java
+
+#hibernate.connection.driver_class org.firebirdsql.jdbc.FBDriver
+#hibernate.connection.url jdbc:firebirdsql:localhost/3050:/firebird/test.gdb
+
+
+## Pointbase
+
+#hibernate.dialect org.hibernate.dialect.PointbaseDialect
+#hibernate.connection.driver_class com.pointbase.jdbc.jdbcUniversalDriver
+#hibernate.connection.url jdbc:pointbase:embedded:sample
+#hibernate.connection.username PBPUBLIC
+#hibernate.connection.password PBPUBLIC
+
+
+
+#################################
+### Hibernate Connection Pool ###
+#################################
+
+hibernate.connection.pool_size 1
+
+
+
+###########################
+### C3P0 Connection Pool###
+###########################
+
+#hibernate.c3p0.max_size 2
+#hibernate.c3p0.min_size 2
+#hibernate.c3p0.timeout 5000
+#hibernate.c3p0.max_statements 100
+#hibernate.c3p0.idle_test_period 3000
+#hibernate.c3p0.acquire_increment 2
+#hibernate.c3p0.validate false
+
+
+
+##############################
+### Proxool Connection Pool###
+##############################
+
+## Properties for external configuration of Proxool
+
+hibernate.proxool.pool_alias pool1
+
+## Only need one of the following
+
+#hibernate.proxool.existing_pool true
+#hibernate.proxool.xml proxool.xml
+#hibernate.proxool.properties proxool.properties
+
+
+
+#################################
+### Plugin ConnectionProvider ###
+#################################
+
+## use a custom ConnectionProvider (if not set, Hibernate will choose a built-in ConnectionProvider using hueristics)
+
+#hibernate.connection.provider_class org.hibernate.connection.DriverManagerConnectionProvider
+#hibernate.connection.provider_class org.hibernate.connection.DatasourceConnectionProvider
+#hibernate.connection.provider_class org.hibernate.connection.C3P0ConnectionProvider
+#hibernate.connection.provider_class org.hibernate.connection.DBCPConnectionProvider
+#hibernate.connection.provider_class org.hibernate.connection.ProxoolConnectionProvider
+
+
+
+#######################
+### Transaction API ###
+#######################
+
+## Enable automatic flush during the JTA beforeCompletion() callback
+## (This setting is relevant with or without the Transaction API)
+
+#hibernate.transaction.flush_before_completion
+
+
+## Enable automatic session close at the end of transaction
+## (This setting is relevant with or without the Transaction API)
+
+#hibernate.transaction.auto_close_session
+
+
+## the Transaction API abstracts application code from the underlying JTA or JDBC transactions
+
+#hibernate.transaction.factory_class org.hibernate.transaction.JTATransactionFactory
+#hibernate.transaction.factory_class org.hibernate.transaction.JDBCTransactionFactory
+
+
+## to use JTATransactionFactory, Hibernate must be able to locate the UserTransaction in JNDI
+## default is java:comp/UserTransaction
+## you do NOT need this setting if you specify hibernate.transaction.manager_lookup_class
+
+#jta.UserTransaction jta/usertransaction
+#jta.UserTransaction javax.transaction.UserTransaction
+#jta.UserTransaction UserTransaction
+
+
+## to use the second-level cache with JTA, Hibernate must be able to obtain the JTA TransactionManager
+
+#hibernate.transaction.manager_lookup_class org.hibernate.transaction.JBossTransactionManagerLookup
+#hibernate.transaction.manager_lookup_class org.hibernate.transaction.WeblogicTransactionManagerLookup
+#hibernate.transaction.manager_lookup_class org.hibernate.transaction.WebSphereTransactionManagerLookup
+#hibernate.transaction.manager_lookup_class org.hibernate.transaction.OrionTransactionManagerLookup
+#hibernate.transaction.manager_lookup_class org.hibernate.transaction.ResinTransactionManagerLookup
+
+
+
+##############################
+### Miscellaneous Settings ###
+##############################
+
+## print all generated SQL to the console
+
+#hibernate.show_sql true
+
+
+## add comments to the generated SQL
+
+#hibernate.use_sql_comments true
+
+
+## generate statistics
+
+#hibernate.generate_statistics true
+
+
+## auto schema export
+
+#hibernate.hbm2ddl.auto create-drop
+#hibernate.hbm2ddl.auto create
+#hibernate.hbm2ddl.auto update
+
+
+## specify a default schema and catalog for unqualified tablenames
+
+#hibernate.default_schema test
+#hibernate.default_catalog test
+
+
+## enable ordering of SQL UPDATEs by primary key
+
+hibernate.order_updates true
+
+
+## set the maximum depth of the outer join fetch tree
+
+hibernate.max_fetch_depth 1
+
+
+## set the default batch size for batch fetching
+
+hibernate.default_batch_fetch_size 100
+
+
+## rollback generated identifier values of deleted entities to default values
+
+#hibernate.use_identifer_rollback true
+
+
+## enable CGLIB reflection optimizer (enabled by default)
+
+#hibernate.cglib.use_reflection_optimizer false
+
+
+
+#####################
+### JDBC Settings ###
+#####################
+
+## specify a JDBC isolation level
+
+#hibernate.connection.isolation 4
+
+
+## enable JDBC autocommit (not recommended!)
+
+#hibernate.connection.autocommit true
+
+
+## set the JDBC fetch size
+
+#hibernate.jdbc.fetch_size 25
+
+
+## set the maximum JDBC 2 batch size (a nonzero value enables batching)
+
+#hibernate.jdbc.batch_size 0
+
+
+## enable batch updates even for versioned data
+
+hibernate.jdbc.batch_versioned_data true
+
+
+## enable use of JDBC 2 scrollable ResultSets (specifying a Dialect will cause Hibernate to use a sensible default)
+
+#hibernate.jdbc.use_scrollable_resultset true
+
+
+## use streams when writing binary types to / from JDBC
+
+hibernate.jdbc.use_streams_for_binary true
+
+
+## use JDBC 3 PreparedStatement.getGeneratedKeys() to get the identifier of an inserted row
+
+#hibernate.jdbc.use_get_generated_keys false
+
+
+## choose a custom JDBC batcher
+
+# hibernate.jdbc.factory_class
+
+
+## enable JDBC result set column alias caching 
+## (minor performance enhancement for broken JDBC drivers)
+
+# hibernate.jdbc.wrap_result_sets
+
+
+## choose a custom SQL exception converter
+
+#hibernate.jdbc.sql_exception_converter
+
+
+
+##########################
+### Second-level Cache ###
+##########################
+
+## optimize chache for minimal "puts" instead of minimal "gets" (good for clustered cache)
+
+#hibernate.cache.use_minimal_puts true
+
+
+## set a prefix for cache region names
+
+hibernate.cache.region_prefix hibernate.test
+
+
+## disable the second-level cache
+
+#hibernate.cache.use_second_level_cache false
+
+
+## enable the query cache
+
+hibernate.cache.use_query_cache true
+
+
+## store the second-level cache entries in a more human-friendly format
+
+#hibernate.cache.use_structured_entries true
+
+
+## choose a cache implementation
+
+#hibernate.cache.provider_class org.hibernate.cache.EhCacheProvider
+#hibernate.cache.provider_class org.hibernate.cache.EmptyCacheProvider
+hibernate.cache.provider_class org.hibernate.cache.HashtableCacheProvider
+#hibernate.cache.provider_class org.hibernate.cache.TreeCacheProvider
+#hibernate.cache.provider_class org.hibernate.cache.OSCacheProvider
+#hibernate.cache.provider_class org.hibernate.cache.SwarmCacheProvider
+
+
+## choose a custom query cache implementation
+
+#hibernate.cache.query_cache_factory
+
+
+
+############
+### JNDI ###
+############
+
+## specify a JNDI name for the SessionFactory
+
+#hibernate.session_factory_name hibernate/session_factory
+
+
+## Hibernate uses JNDI to bind a name to a SessionFactory and to look up the JTA UserTransaction;
+## if hibernate.jndi.* are not specified, Hibernate will use the default InitialContext() which
+## is the best approach in an application server
+
+#file system
+#hibernate.jndi.class com.sun.jndi.fscontext.RefFSContextFactory
+#hibernate.jndi.url file:/
+
+#WebSphere
+#hibernate.jndi.class com.ibm.websphere.naming.WsnInitialContextFactory
+#hibernate.jndi.url iiop://localhost:900/
+

Deleted: trunk/HibernateExt/validator/src/test/log4j.properties
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/log4j.properties	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/log4j.properties	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,44 +0,0 @@
-### direct log messages to stdout ###
-log4j.appender.stdout=org.apache.log4j.ConsoleAppender
-log4j.appender.stdout.Target=System.out
-log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
-log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
-
-### direct messages to file hibernate.log ###
-#log4j.appender.file=org.apache.log4j.FileAppender
-#log4j.appender.file.File=hibernate.log
-#log4j.appender.file.layout=org.apache.log4j.PatternLayout
-#log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
-
-### set log levels - for more verbose logging change 'info' to 'debug' ###
-
-log4j.rootLogger=warn, stdout
-
-log4j.logger.org.hibernate=info
-
-
-### log just the SQL
-log4j.logger.org.hibernate.SQL=debug
-
-#log4j.logger.org.hibernate.engine.CascadingAction=debug
-
-### log JDBC bind parameters ###
-#log4j.logger.org.hibernate.type=debug
-
-### log schema export/update ###
-log4j.logger.org.hibernate.tool.hbm2ddl=debug
-
-### log cache activity ###
-#log4j.logger.org.hibernate.cache=debug
-
-### enable the following line if you want to track down connection ###
-### leakages when using DriverManagerConnectionProvider ###
-#log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trace
-
-### annotation logs
-#log4j.logger.org.hibernate.annotation=info
-#log4j.logger.org.hibernate.cfg=info
-#log4j.logger.org.hibernate.cfg.SettingsFactory=info
-#log4j.logger.org.hibernate.cfg.AnnotationBinder=info
-#log4j.logger.org.hibernate.cfg.AnnotationConfiguration=info
-#log4j.logger.org.hibernate.cfg.Ejb3Column=info
\ No newline at end of file

Copied: trunk/HibernateExt/validator/src/test/log4j.properties (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/log4j.properties)
===================================================================
--- trunk/HibernateExt/validator/src/test/log4j.properties	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/log4j.properties	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,44 @@
+### direct log messages to stdout ###
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.Target=System.out
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
+
+### direct messages to file hibernate.log ###
+#log4j.appender.file=org.apache.log4j.FileAppender
+#log4j.appender.file.File=hibernate.log
+#log4j.appender.file.layout=org.apache.log4j.PatternLayout
+#log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
+
+### set log levels - for more verbose logging change 'info' to 'debug' ###
+
+log4j.rootLogger=warn, stdout
+
+log4j.logger.org.hibernate=info
+
+
+### log just the SQL
+log4j.logger.org.hibernate.SQL=debug
+
+#log4j.logger.org.hibernate.engine.CascadingAction=debug
+
+### log JDBC bind parameters ###
+#log4j.logger.org.hibernate.type=debug
+
+### log schema export/update ###
+log4j.logger.org.hibernate.tool.hbm2ddl=debug
+
+### log cache activity ###
+#log4j.logger.org.hibernate.cache=debug
+
+### enable the following line if you want to track down connection ###
+### leakages when using DriverManagerConnectionProvider ###
+#log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trace
+
+### annotation logs
+#log4j.logger.org.hibernate.annotation=info
+#log4j.logger.org.hibernate.cfg=info
+#log4j.logger.org.hibernate.cfg.SettingsFactory=info
+#log4j.logger.org.hibernate.cfg.AnnotationBinder=info
+#log4j.logger.org.hibernate.cfg.AnnotationConfiguration=info
+#log4j.logger.org.hibernate.cfg.Ejb3Column=info
\ No newline at end of file

Deleted: trunk/HibernateExt/validator/src/test/messages_en.properties
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/messages_en.properties	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/messages_en.properties	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,15 +0,0 @@
-long=is too damn long
-floor.name=Floor
-out.of.range=lower that {min} and greater than {max}
-floor.out.of.range={floor.name} cannot (escaping #{el}) be {out.of.range}
-
-validator.assertFalse=assertion failed
-validator.assertTrue=assertion failed
-validator.length=length must be between {min} and {max}
-validator.max=must less than or equal to {value}
-validator.min=must greater than or equal to {value}
-validator.notNull=may not be null
-validator.past=must be a past date
-validator.pattern=must match "{regex}"
-validator.range=must be between {min} and {max}
-validator.size=size must be between {min} and {max}
\ No newline at end of file

Copied: trunk/HibernateExt/validator/src/test/messages_en.properties (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/messages_en.properties)
===================================================================
--- trunk/HibernateExt/validator/src/test/messages_en.properties	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/messages_en.properties	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,15 @@
+long=is too damn long
+floor.name=Floor
+out.of.range=lower that {min} and greater than {max}
+floor.out.of.range={floor.name} cannot (escaping #{el}) be {out.of.range}
+
+validator.assertFalse=assertion failed
+validator.assertTrue=assertion failed
+validator.length=length must be between {min} and {max}
+validator.max=must less than or equal to {value}
+validator.min=must greater than or equal to {value}
+validator.notNull=may not be null
+validator.past=must be a past date
+validator.pattern=must match "{regex}"
+validator.range=must be between {min} and {max}
+validator.size=size must be between {min} and {max}
\ No newline at end of file

Copied: trunk/HibernateExt/validator/src/test/org (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org)

Copied: trunk/HibernateExt/validator/src/test/org/hibernate (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate)

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator)

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test)

Deleted: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Address.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/Address.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Address.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,100 +0,0 @@
-//$Id$
-package org.hibernate.validator.test;
-
-import org.hibernate.validator.AssertTrue;
-import org.hibernate.validator.Length;
-import org.hibernate.validator.Min;
-import org.hibernate.validator.NotNull;
-import org.hibernate.validator.Pattern;
-import org.hibernate.validator.Range;
-
-/**
- * @author Gavin King
- */
-public class Address {
-	@NotNull
-	public static String blacklistedZipCode;
-
-	private String line1;
-	private String line2;
-	private String zip;
-	private String state;
-	@Length(max = 20)
-	@NotNull
-	private String country;
-	private long id;
-	private boolean internalValid = true;
-	@Range(min = -2, max = 50, message = "{floor.out.of.range} (escaping #{el})")
-	public int floor;
-
-	public String getCountry() {
-		return country;
-	}
-
-	public void setCountry(String country) {
-		this.country = country;
-	}
-
-	@NotNull
-	public String getLine1() {
-		return line1;
-	}
-
-	public void setLine1(String line1) {
-		this.line1 = line1;
-	}
-
-	public String getLine2() {
-		return line2;
-	}
-
-	public void setLine2(String line2) {
-		this.line2 = line2;
-	}
-
-	@Length(max = 3)
-	@NotNull
-	public String getState() {
-		return state;
-	}
-
-	public void setState(String state) {
-		this.state = state;
-	}
-
-	@Length(max = 5, message = "{long}")
-	@Pattern(regex = "[0-9]+")
-	@NotNull
-	public String getZip() {
-		return zip;
-	}
-
-	public void setZip(String zip) {
-		this.zip = zip;
-	}
-
-	@AssertTrue
-	public boolean isValid() {
-		return true;
-	}
-
-	@AssertTrue
-	private boolean isInternalValid() {
-		return internalValid;
-	}
-
-	public void setInternalValid(boolean internalValid) {
-		this.internalValid = internalValid;
-	}
-
-	@Min(1)
-	@Range(max = 2000)
-	public long getId() {
-		return id;
-	}
-
-	public void setId(long id) {
-		this.id = id;
-	}
-
-}

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Address.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/Address.java)
===================================================================
--- trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Address.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Address.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,100 @@
+//$Id$
+package org.hibernate.validator.test;
+
+import org.hibernate.validator.AssertTrue;
+import org.hibernate.validator.Length;
+import org.hibernate.validator.Min;
+import org.hibernate.validator.NotNull;
+import org.hibernate.validator.Pattern;
+import org.hibernate.validator.Range;
+
+/**
+ * @author Gavin King
+ */
+public class Address {
+	@NotNull
+	public static String blacklistedZipCode;
+
+	private String line1;
+	private String line2;
+	private String zip;
+	private String state;
+	@Length(max = 20)
+	@NotNull
+	private String country;
+	private long id;
+	private boolean internalValid = true;
+	@Range(min = -2, max = 50, message = "{floor.out.of.range} (escaping #{el})")
+	public int floor;
+
+	public String getCountry() {
+		return country;
+	}
+
+	public void setCountry(String country) {
+		this.country = country;
+	}
+
+	@NotNull
+	public String getLine1() {
+		return line1;
+	}
+
+	public void setLine1(String line1) {
+		this.line1 = line1;
+	}
+
+	public String getLine2() {
+		return line2;
+	}
+
+	public void setLine2(String line2) {
+		this.line2 = line2;
+	}
+
+	@Length(max = 3)
+	@NotNull
+	public String getState() {
+		return state;
+	}
+
+	public void setState(String state) {
+		this.state = state;
+	}
+
+	@Length(max = 5, message = "{long}")
+	@Pattern(regex = "[0-9]+")
+	@NotNull
+	public String getZip() {
+		return zip;
+	}
+
+	public void setZip(String zip) {
+		this.zip = zip;
+	}
+
+	@AssertTrue
+	public boolean isValid() {
+		return true;
+	}
+
+	@AssertTrue
+	private boolean isInternalValid() {
+		return internalValid;
+	}
+
+	public void setInternalValid(boolean internalValid) {
+		this.internalValid = internalValid;
+	}
+
+	@Min(1)
+	@Range(max = 2000)
+	public long getId() {
+		return id;
+	}
+
+	public void setId(long id) {
+		this.id = id;
+	}
+
+}

Deleted: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Brother.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/Brother.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Brother.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,61 +0,0 @@
-//$Id$
-package org.hibernate.validator.test;
-
-import org.hibernate.validator.NotNull;
-import org.hibernate.validator.Valid;
-
-/**
- * @author Emmanuel Bernard
- */
-public class Brother {
-	private String name;
-	private Brother elder;
-	private Brother youngerBrother;
-	@NotNull
-	@Valid
-	private Address address;
-
-	@NotNull
-	public String getName() {
-		return name;
-	}
-
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	@Valid
-	public Brother getElder() {
-		return elder;
-	}
-
-	public void setElder(Brother elder) {
-		this.elder = elder;
-	}
-
-	@Valid
-	public Brother getYoungerBrother() {
-		return youngerBrother;
-	}
-
-	public void setYoungerBrother(Brother youngerBrother) {
-		this.youngerBrother = youngerBrother;
-	}
-
-	public Address getAddress() {
-		return address;
-	}
-
-	public void setAddress(Address address) {
-		this.address = address;
-	}
-
-	public boolean equals(Object o) {
-		return true; //workaround dummy equals and hashcode?
-	}
-
-	public int hashCode() {
-		return 5;
-	}
-}

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Brother.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/Brother.java)
===================================================================
--- trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Brother.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Brother.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,61 @@
+//$Id$
+package org.hibernate.validator.test;
+
+import org.hibernate.validator.NotNull;
+import org.hibernate.validator.Valid;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Brother {
+	private String name;
+	private Brother elder;
+	private Brother youngerBrother;
+	@NotNull
+	@Valid
+	private Address address;
+
+	@NotNull
+	public String getName() {
+		return name;
+	}
+
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	@Valid
+	public Brother getElder() {
+		return elder;
+	}
+
+	public void setElder(Brother elder) {
+		this.elder = elder;
+	}
+
+	@Valid
+	public Brother getYoungerBrother() {
+		return youngerBrother;
+	}
+
+	public void setYoungerBrother(Brother youngerBrother) {
+		this.youngerBrother = youngerBrother;
+	}
+
+	public Address getAddress() {
+		return address;
+	}
+
+	public void setAddress(Address address) {
+		this.address = address;
+	}
+
+	public boolean equals(Object o) {
+		return true; //workaround dummy equals and hashcode?
+	}
+
+	public int hashCode() {
+		return 5;
+	}
+}

Deleted: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Building.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/Building.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Building.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,32 +0,0 @@
-//$Id: $
-package org.hibernate.validator.test;
-
-import org.hibernate.validator.Length;
-
-/**
- * @author Emmanuel Bernard
- */
-public class Building {
-	private Long id;
-
-	@Length( min = 1, message = "{notpresent.Key} and #{key.notPresent} and {key.notPresent2} {min}" )
-	private String address;
-
-
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-
-	public String getAddress() {
-		return address;
-	}
-
-	public void setAddress(String address) {
-		this.address = address;
-	}
-}
-

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Building.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/Building.java)
===================================================================
--- trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Building.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Building.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,32 @@
+//$Id: $
+package org.hibernate.validator.test;
+
+import org.hibernate.validator.Length;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Building {
+	private Long id;
+
+	@Length( min = 1, message = "{notpresent.Key} and #{key.notPresent} and {key.notPresent2} {min}" )
+	private String address;
+
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getAddress() {
+		return address;
+	}
+
+	public void setAddress(String address) {
+		this.address = address;
+	}
+}
+

Deleted: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Contact.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/Contact.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Contact.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,30 +0,0 @@
-//$Id$
-package org.hibernate.validator.test;
-
-import org.hibernate.validator.NotNull;
-
-/**
- * @author Emmanuel Bernard
- */
-public class Contact {
-	@NotNull
-	private String name;
-	@NotNull
-	private String phone;
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	public String getPhone() {
-		return phone;
-	}
-
-	public void setPhone(String phone) {
-		this.phone = phone;
-	}
-}
\ No newline at end of file

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Contact.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/Contact.java)
===================================================================
--- trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Contact.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Contact.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,30 @@
+//$Id$
+package org.hibernate.validator.test;
+
+import org.hibernate.validator.NotNull;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Contact {
+	@NotNull
+	private String name;
+	@NotNull
+	private String phone;
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getPhone() {
+		return phone;
+	}
+
+	public void setPhone(String phone) {
+		this.phone = phone;
+	}
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/EmailTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/EmailTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/EmailTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,39 +0,0 @@
-//$Id$
-package org.hibernate.validator.test;
-
-import junit.framework.TestCase;
-import org.hibernate.validator.ClassValidator;
-
-/**
- * @author Emmanuel Bernard
- */
-public class EmailTest extends TestCase {
-	private ClassValidator<User> userValidator;
-
-	public void testEmail() throws Exception {
-		userValidator = new ClassValidator<User>( User.class );
-		isRightEmail( "emmanuel at hibernate.org" );
-      isRightEmail( "" );
-      isRightEmail( null );
-      isWrongEmail( "emmanuel.hibernate.org" );
-		isRightEmail( "emmanuel at hibernate" );
-		isRightEmail( "emma-n_uel at hibernate" );
-		isWrongEmail( "emma nuel at hibernate.org" );
-		isWrongEmail( "emma(nuel at hibernate.org" );
-		isWrongEmail( "emmanuel@" );
-		isRightEmail( "emma+nuel at hibernate.org" );
-		isRightEmail( "emma=nuel at hibernate.org" );
-		isWrongEmail( "emma\nnuel at hibernate.org" );
-		isWrongEmail( "emma at nuel@hibernate.org" );
-		isRightEmail( "emmanuel@[123.12.2.11]" );
-	}
-
-	private void isRightEmail(String email) {
-		assertEquals( "Wrong email", 0, userValidator.getPotentialInvalidValues( "email", email ).length );
-	}
-
-	private void isWrongEmail(String email) {
-		assertEquals( "Right email", 1, userValidator.getPotentialInvalidValues( "email", email ).length );
-		;
-	}
-}

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/EmailTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/EmailTest.java)
===================================================================
--- trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/EmailTest.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/EmailTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,39 @@
+//$Id$
+package org.hibernate.validator.test;
+
+import junit.framework.TestCase;
+import org.hibernate.validator.ClassValidator;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class EmailTest extends TestCase {
+	private ClassValidator<User> userValidator;
+
+	public void testEmail() throws Exception {
+		userValidator = new ClassValidator<User>( User.class );
+		isRightEmail( "emmanuel at hibernate.org" );
+      isRightEmail( "" );
+      isRightEmail( null );
+      isWrongEmail( "emmanuel.hibernate.org" );
+		isRightEmail( "emmanuel at hibernate" );
+		isRightEmail( "emma-n_uel at hibernate" );
+		isWrongEmail( "emma nuel at hibernate.org" );
+		isWrongEmail( "emma(nuel at hibernate.org" );
+		isWrongEmail( "emmanuel@" );
+		isRightEmail( "emma+nuel at hibernate.org" );
+		isRightEmail( "emma=nuel at hibernate.org" );
+		isWrongEmail( "emma\nnuel at hibernate.org" );
+		isWrongEmail( "emma at nuel@hibernate.org" );
+		isRightEmail( "emmanuel@[123.12.2.11]" );
+	}
+
+	private void isRightEmail(String email) {
+		assertEquals( "Wrong email", 0, userValidator.getPotentialInvalidValues( "email", email ).length );
+	}
+
+	private void isWrongEmail(String email) {
+		assertEquals( "Right email", 1, userValidator.getPotentialInvalidValues( "email", email ).length );
+		;
+	}
+}

Deleted: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Engine.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/Engine.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Engine.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,34 +0,0 @@
-//$Id: $
-package org.hibernate.validator.test;
-
-import org.hibernate.validator.Patterns;
-import org.hibernate.validator.Pattern;
-
-/**
- * @author Emmanuel Bernard
- */
-public class Engine {
-	@Patterns( {
-			@Pattern(regex = "^[A-Z0-9-]+$", message = "must contain alphabetical characters only"),
-			@Pattern(regex = "^....-....-....$", message="must match ....-....-....")
-			} )
-	private String serialNumber;
-	private long horsePower;
-
-
-	public String getSerialNumber() {
-		return serialNumber;
-	}
-
-	public void setSerialNumber(String serialNumber) {
-		this.serialNumber = serialNumber;
-	}
-
-	public long getHorsePower() {
-		return horsePower;
-	}
-
-	public void setHorsePower(long horsePower) {
-		this.horsePower = horsePower;
-	}
-}

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Engine.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/Engine.java)
===================================================================
--- trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Engine.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Engine.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,34 @@
+//$Id: $
+package org.hibernate.validator.test;
+
+import org.hibernate.validator.Patterns;
+import org.hibernate.validator.Pattern;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Engine {
+	@Patterns( {
+			@Pattern(regex = "^[A-Z0-9-]+$", message = "must contain alphabetical characters only"),
+			@Pattern(regex = "^....-....-....$", message="must match ....-....-....")
+			} )
+	private String serialNumber;
+	private long horsePower;
+
+
+	public String getSerialNumber() {
+		return serialNumber;
+	}
+
+	public void setSerialNumber(String serialNumber) {
+		this.serialNumber = serialNumber;
+	}
+
+	public long getHorsePower() {
+		return horsePower;
+	}
+
+	public void setHorsePower(long horsePower) {
+		this.horsePower = horsePower;
+	}
+}

Deleted: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/HANTestCase.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/HANTestCase.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/HANTestCase.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,160 +0,0 @@
-//$Id: $
-package org.hibernate.validator.test;
-
-import java.io.InputStream;
-
-import org.hibernate.SessionFactory;
-import org.hibernate.Session;
-import org.hibernate.HibernateException;
-import org.hibernate.Interceptor;
-import org.hibernate.dialect.Dialect;
-import org.hibernate.cfg.AnnotationConfiguration;
-import org.hibernate.cfg.Environment;
-import org.hibernate.cfg.Configuration;
-
-/**
- * Copy from HAN
- *
- * @author Emmanuel Bernard
- */
-public abstract class HANTestCase extends junit.framework.TestCase {
-
-	private static SessionFactory sessions;
-	private static AnnotationConfiguration cfg;
-	private static Dialect dialect;
-	private static Class lastTestClass;
-	private Session session;
-
-	public HANTestCase() {
-		super();
-	}
-
-	public HANTestCase(String x) {
-		super( x );
-	}
-
-	protected void buildSessionFactory(Class[] classes, String[] packages, String[] xmlFiles) throws Exception {
-
-		if ( getSessions() != null ) getSessions().close();
-		try {
-			setCfg( new AnnotationConfiguration() );
-			configure( cfg );
-			if ( recreateSchema() ) {
-				cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
-			}
-			for ( int i = 0; i < packages.length; i++ ) {
-				getCfg().addPackage( packages[i] );
-			}
-			for ( int i = 0; i < classes.length; i++ ) {
-				getCfg().addAnnotatedClass( classes[i] );
-			}
-			for ( int i = 0; i < xmlFiles.length; i++ ) {
-				InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream( xmlFiles[i] );
-				getCfg().addInputStream( is );
-			}
-			setDialect( Dialect.getDialect() );
-			setSessions( getCfg().buildSessionFactory( /*new TestInterceptor()*/ ) );
-		}
-		catch (Exception e) {
-			e.printStackTrace();
-			throw e;
-		}
-	}
-
-	protected void setUp() throws Exception {
-		if ( getSessions() == null || lastTestClass != getClass() ) {
-			buildSessionFactory( getMappings(), getAnnotatedPackages(), getXmlFiles() );
-			lastTestClass = getClass();
-		}
-	}
-
-	protected void runTest() throws Throwable {
-		try {
-			super.runTest();
-			if ( session != null && session.isOpen() ) {
-				if ( session.isConnected() ) session.connection().rollback();
-				session.close();
-				session = null;
-				fail( "unclosed session" );
-			}
-			else {
-				session = null;
-			}
-		}
-		catch (Throwable e) {
-			try {
-				if ( session != null && session.isOpen() ) {
-					if ( session.isConnected() ) session.connection().rollback();
-					session.close();
-				}
-			}
-			catch (Exception ignore) {
-			}
-			try {
-				if ( sessions != null ) {
-					sessions.close();
-					sessions = null;
-				}
-			}
-			catch (Exception ignore) {
-			}
-			throw e;
-		}
-	}
-
-	public Session openSession() throws HibernateException {
-		session = getSessions().openSession();
-		return session;
-	}
-
-	public Session openSession(Interceptor interceptor) throws HibernateException {
-		session = getSessions().openSession( interceptor );
-		return session;
-	}
-
-	protected abstract Class[] getMappings();
-
-	protected String[] getAnnotatedPackages() {
-		return new String[]{};
-	}
-
-	protected String[] getXmlFiles() {
-		return new String[]{};
-	}
-
-	private void setSessions(SessionFactory sessions) {
-		HANTestCase.sessions = sessions;
-	}
-
-	protected SessionFactory getSessions() {
-		return sessions;
-	}
-
-	private void setDialect(Dialect dialect) {
-		HANTestCase.dialect = dialect;
-	}
-
-	protected Dialect getDialect() {
-		return dialect;
-	}
-
-	protected static void setCfg(AnnotationConfiguration cfg) {
-		HANTestCase.cfg = cfg;
-	}
-
-	protected static AnnotationConfiguration getCfg() {
-		return cfg;
-	}
-
-	protected void configure(Configuration cfg) {
-		//cfg.setNamingStrategy( AlternativeNamingStrategy.INSTANCE );
-		//cfg.getSessionEventListenerConfig().setFlushEventListener( new EJB3FlushEventListener() );
-		//cfg.getSessionEventListenerConfig().setAutoFlushEventListener( new EJB3AutoFlushEventListener() );
-	}
-
-	protected boolean recreateSchema() {
-		return true;
-	}
-
-}
-

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/HANTestCase.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/HANTestCase.java)
===================================================================
--- trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/HANTestCase.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/HANTestCase.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,160 @@
+//$Id: $
+package org.hibernate.validator.test;
+
+import java.io.InputStream;
+
+import org.hibernate.SessionFactory;
+import org.hibernate.Session;
+import org.hibernate.HibernateException;
+import org.hibernate.Interceptor;
+import org.hibernate.dialect.Dialect;
+import org.hibernate.cfg.AnnotationConfiguration;
+import org.hibernate.cfg.Environment;
+import org.hibernate.cfg.Configuration;
+
+/**
+ * Copy from HAN
+ *
+ * @author Emmanuel Bernard
+ */
+public abstract class HANTestCase extends junit.framework.TestCase {
+
+	private static SessionFactory sessions;
+	private static AnnotationConfiguration cfg;
+	private static Dialect dialect;
+	private static Class lastTestClass;
+	private Session session;
+
+	public HANTestCase() {
+		super();
+	}
+
+	public HANTestCase(String x) {
+		super( x );
+	}
+
+	protected void buildSessionFactory(Class[] classes, String[] packages, String[] xmlFiles) throws Exception {
+
+		if ( getSessions() != null ) getSessions().close();
+		try {
+			setCfg( new AnnotationConfiguration() );
+			configure( cfg );
+			if ( recreateSchema() ) {
+				cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
+			}
+			for ( int i = 0; i < packages.length; i++ ) {
+				getCfg().addPackage( packages[i] );
+			}
+			for ( int i = 0; i < classes.length; i++ ) {
+				getCfg().addAnnotatedClass( classes[i] );
+			}
+			for ( int i = 0; i < xmlFiles.length; i++ ) {
+				InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream( xmlFiles[i] );
+				getCfg().addInputStream( is );
+			}
+			setDialect( Dialect.getDialect() );
+			setSessions( getCfg().buildSessionFactory( /*new TestInterceptor()*/ ) );
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+			throw e;
+		}
+	}
+
+	protected void setUp() throws Exception {
+		if ( getSessions() == null || lastTestClass != getClass() ) {
+			buildSessionFactory( getMappings(), getAnnotatedPackages(), getXmlFiles() );
+			lastTestClass = getClass();
+		}
+	}
+
+	protected void runTest() throws Throwable {
+		try {
+			super.runTest();
+			if ( session != null && session.isOpen() ) {
+				if ( session.isConnected() ) session.connection().rollback();
+				session.close();
+				session = null;
+				fail( "unclosed session" );
+			}
+			else {
+				session = null;
+			}
+		}
+		catch (Throwable e) {
+			try {
+				if ( session != null && session.isOpen() ) {
+					if ( session.isConnected() ) session.connection().rollback();
+					session.close();
+				}
+			}
+			catch (Exception ignore) {
+			}
+			try {
+				if ( sessions != null ) {
+					sessions.close();
+					sessions = null;
+				}
+			}
+			catch (Exception ignore) {
+			}
+			throw e;
+		}
+	}
+
+	public Session openSession() throws HibernateException {
+		session = getSessions().openSession();
+		return session;
+	}
+
+	public Session openSession(Interceptor interceptor) throws HibernateException {
+		session = getSessions().openSession( interceptor );
+		return session;
+	}
+
+	protected abstract Class[] getMappings();
+
+	protected String[] getAnnotatedPackages() {
+		return new String[]{};
+	}
+
+	protected String[] getXmlFiles() {
+		return new String[]{};
+	}
+
+	private void setSessions(SessionFactory sessions) {
+		HANTestCase.sessions = sessions;
+	}
+
+	protected SessionFactory getSessions() {
+		return sessions;
+	}
+
+	private void setDialect(Dialect dialect) {
+		HANTestCase.dialect = dialect;
+	}
+
+	protected Dialect getDialect() {
+		return dialect;
+	}
+
+	protected static void setCfg(AnnotationConfiguration cfg) {
+		HANTestCase.cfg = cfg;
+	}
+
+	protected static AnnotationConfiguration getCfg() {
+		return cfg;
+	}
+
+	protected void configure(Configuration cfg) {
+		//cfg.setNamingStrategy( AlternativeNamingStrategy.INSTANCE );
+		//cfg.getSessionEventListenerConfig().setFlushEventListener( new EJB3FlushEventListener() );
+		//cfg.getSessionEventListenerConfig().setAutoFlushEventListener( new EJB3AutoFlushEventListener() );
+	}
+
+	protected boolean recreateSchema() {
+		return true;
+	}
+
+}
+

Deleted: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/InterpolationTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/InterpolationTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/InterpolationTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,36 +0,0 @@
-//$Id: $
-package org.hibernate.validator.test;
-
-import java.util.MissingResourceException;
-
-import junit.framework.TestCase;
-import org.hibernate.validator.ClassValidator;
-import org.hibernate.validator.InvalidValue;
-
-/**
- * @author Emmanuel Bernard
- */
-public class InterpolationTest extends TestCase {
-    public void testMissingKey() {
-
-        Building b = new Building();
-        b.setAddress( "2323 Younge St");
-		ClassValidator<Building> validator = new ClassValidator<Building>(Building.class);
-		try {
-            validator.getInvalidValues( b );
-        }
-        catch (MissingResourceException e) {
-            fail("message should be interpolated lazily in DefaultMessageInterpolator");
-        }
-
-		b = new Building();
-        b.setAddress("");
-        boolean failure = false;
-		InvalidValue[] invalidValues = validator.getInvalidValues( b );
-		assertNotSame( "Should have a failure here", 0, invalidValues.length );
-		assertEquals( "Missing key should be left unchanged",
-                    "{notpresent.Key} and #{key.notPresent} and {key.notPresent2} 1",
-                    invalidValues[0].getMessage() );
-    }
-}
-

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/InterpolationTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/InterpolationTest.java)
===================================================================
--- trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/InterpolationTest.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/InterpolationTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,36 @@
+//$Id: $
+package org.hibernate.validator.test;
+
+import java.util.MissingResourceException;
+
+import junit.framework.TestCase;
+import org.hibernate.validator.ClassValidator;
+import org.hibernate.validator.InvalidValue;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class InterpolationTest extends TestCase {
+    public void testMissingKey() {
+
+        Building b = new Building();
+        b.setAddress( "2323 Younge St");
+		ClassValidator<Building> validator = new ClassValidator<Building>(Building.class);
+		try {
+            validator.getInvalidValues( b );
+        }
+        catch (MissingResourceException e) {
+            fail("message should be interpolated lazily in DefaultMessageInterpolator");
+        }
+
+		b = new Building();
+        b.setAddress("");
+        boolean failure = false;
+		InvalidValue[] invalidValues = validator.getInvalidValues( b );
+		assertNotSame( "Should have a failure here", 0, invalidValues.length );
+		assertEquals( "Missing key should be left unchanged",
+                    "{notpresent.Key} and #{key.notPresent} and {key.notPresent2} 1",
+                    invalidValues[0].getMessage() );
+    }
+}
+

Deleted: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Serializability.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/Serializability.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Serializability.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,22 +0,0 @@
-package org.hibernate.validator.test;
-
-import java.lang.annotation.Documented;
-import static java.lang.annotation.ElementType.TYPE;
-import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import java.lang.annotation.Target;
-
-import org.hibernate.validator.ValidatorClass;
-
-/**
- * Dummy sample of a bean-level validation annotation
- *
- * @author Emmanuel Bernard
- */
- at ValidatorClass(SerializabilityValidator.class)
- at Target(TYPE)
- at Retention(RUNTIME)
- at Documented
-public @interface Serializability {
-	String message() default "Bean not Serializable";
-}

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Serializability.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/Serializability.java)
===================================================================
--- trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Serializability.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Serializability.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,22 @@
+package org.hibernate.validator.test;
+
+import java.lang.annotation.Documented;
+import static java.lang.annotation.ElementType.TYPE;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+import org.hibernate.validator.ValidatorClass;
+
+/**
+ * Dummy sample of a bean-level validation annotation
+ *
+ * @author Emmanuel Bernard
+ */
+ at ValidatorClass(SerializabilityValidator.class)
+ at Target(TYPE)
+ at Retention(RUNTIME)
+ at Documented
+public @interface Serializability {
+	String message() default "Bean not Serializable";
+}

Deleted: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/SerializabilityValidator.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/SerializabilityValidator.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/SerializabilityValidator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,21 +0,0 @@
-//$Id$
-package org.hibernate.validator.test;
-
-import java.io.Serializable;
-
-import org.hibernate.validator.Validator;
-
-/**
- * Sample of a bean-level validator
- *
- * @author Emmanuel Bernard
- */
-public class SerializabilityValidator implements Validator<Serializability>, Serializable {
-	public boolean isValid(Object value) {
-		return value instanceof Serializable;
-	}
-
-	public void initialize(Serializability parameters) {
-
-	}
-}

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/SerializabilityValidator.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/SerializabilityValidator.java)
===================================================================
--- trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/SerializabilityValidator.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/SerializabilityValidator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,21 @@
+//$Id$
+package org.hibernate.validator.test;
+
+import java.io.Serializable;
+
+import org.hibernate.validator.Validator;
+
+/**
+ * Sample of a bean-level validator
+ *
+ * @author Emmanuel Bernard
+ */
+public class SerializabilityValidator implements Validator<Serializability>, Serializable {
+	public boolean isValid(Object value) {
+		return value instanceof Serializable;
+	}
+
+	public void initialize(Serializability parameters) {
+
+	}
+}

Deleted: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Site.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/Site.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Site.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,43 +0,0 @@
-//$Id$
-package org.hibernate.validator.test;
-
-import org.hibernate.validator.NotNull;
-import org.hibernate.validator.Valid;
-
-/**
- * @author Emmanuel Bernard
- */
-public class Site {
-	@NotNull
-	private String siteName;
-
-	@Valid
-	private Address address;
-
-	@Valid
-	private Contact contact;
-
-	public String getSiteName() {
-		return siteName;
-	}
-
-	public void setSiteName(String siteName) {
-		this.siteName = siteName;
-	}
-
-	public Address getAddress() {
-		return address;
-	}
-
-	public void setAddress(Address address) {
-		this.address = address;
-	}
-
-	public Contact getContact() {
-		return contact;
-	}
-
-	public void setContact(Contact contact) {
-		this.contact = contact;
-	}
-}
\ No newline at end of file

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Site.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/Site.java)
===================================================================
--- trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Site.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Site.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,43 @@
+//$Id$
+package org.hibernate.validator.test;
+
+import org.hibernate.validator.NotNull;
+import org.hibernate.validator.Valid;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Site {
+	@NotNull
+	private String siteName;
+
+	@Valid
+	private Address address;
+
+	@Valid
+	private Contact contact;
+
+	public String getSiteName() {
+		return siteName;
+	}
+
+	public void setSiteName(String siteName) {
+		this.siteName = siteName;
+	}
+
+	public Address getAddress() {
+		return address;
+	}
+
+	public void setAddress(Address address) {
+		this.address = address;
+	}
+
+	public Contact getContact() {
+		return contact;
+	}
+
+	public void setContact(Contact contact) {
+		this.contact = contact;
+	}
+}
\ No newline at end of file

Deleted: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Tv.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/Tv.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Tv.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,26 +0,0 @@
-//$Id$
-package org.hibernate.validator.test;
-
-import java.math.BigInteger;
-import java.util.Date;
-
-import org.hibernate.validator.Future;
-import org.hibernate.validator.Length;
-import org.hibernate.validator.Min;
-
-/**
- * @author Emmanuel Bernard
- */
-public class Tv {
-	@Length(max = 2)
-	public String serial;
-	public int size;
-	@Length(max = 2)
-	public String name;
-	@Future
-	public Date expDate;
-	@Length(min = 0)
-	public String description;
-	@Min(1000)
-	public BigInteger lifetime;
-}

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Tv.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/Tv.java)
===================================================================
--- trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Tv.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Tv.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,26 @@
+//$Id$
+package org.hibernate.validator.test;
+
+import java.math.BigInteger;
+import java.util.Date;
+
+import org.hibernate.validator.Future;
+import org.hibernate.validator.Length;
+import org.hibernate.validator.Min;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Tv {
+	@Length(max = 2)
+	public String serial;
+	public int size;
+	@Length(max = 2)
+	public String name;
+	@Future
+	public Date expDate;
+	@Length(min = 0)
+	public String description;
+	@Min(1000)
+	public BigInteger lifetime;
+}

Deleted: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/TvOwner.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/TvOwner.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/TvOwner.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,16 +0,0 @@
-//$Id$
-package org.hibernate.validator.test;
-
-import org.hibernate.validator.NotNull;
-import org.hibernate.validator.Valid;
-
-/**
- * @author Emmanuel Bernard
- */
-public class TvOwner {
-	public Integer id;
-
-	@NotNull
-	@Valid
-	public Tv tv;
-}

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/TvOwner.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/TvOwner.java)
===================================================================
--- trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/TvOwner.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/TvOwner.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,16 @@
+//$Id$
+package org.hibernate.validator.test;
+
+import org.hibernate.validator.NotNull;
+import org.hibernate.validator.Valid;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class TvOwner {
+	public Integer id;
+
+	@NotNull
+	@Valid
+	public Tv tv;
+}

Deleted: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/User.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/User.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/User.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,15 +0,0 @@
-//$Id$
-package org.hibernate.validator.test;
-
-import org.hibernate.validator.Email;
-import org.hibernate.validator.NotNull;
-
-/**
- * @author Emmanuel Bernard
- */
-public class User {
-	@NotNull
-	public String name;
-	@Email
-	public String email;
-}

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/User.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/User.java)
===================================================================
--- trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/User.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/User.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,15 @@
+//$Id$
+package org.hibernate.validator.test;
+
+import org.hibernate.validator.Email;
+import org.hibernate.validator.NotNull;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class User {
+	@NotNull
+	public String name;
+	@Email
+	public String email;
+}

Deleted: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/ValidatorTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/ValidatorTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/ValidatorTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,230 +0,0 @@
-//$Id$
-package org.hibernate.validator.test;
-
-import java.io.Serializable;
-import java.math.BigInteger;
-import java.util.Date;
-import java.util.Locale;
-import java.util.ResourceBundle;
-
-import junit.framework.TestCase;
-import org.hibernate.validator.ClassValidator;
-import org.hibernate.validator.InvalidValue;
-import org.hibernate.validator.MessageInterpolator;
-import org.hibernate.validator.Validator;
-
-/**
- * @author Gavin King
- */
-public class ValidatorTest extends TestCase {
-	public static final String ESCAPING_EL = "(escaping #{el})";
-
-	public void testValidator() {
-		Address a = new Address();
-		Address.blacklistedZipCode = null;
-		a.setCountry( "Australia" );
-		a.setZip( "1221341234123" );
-		a.setState( "Vic" );
-		a.setLine1( "Karbarook Ave" );
-		a.setId( 3 );
-		ClassValidator<Address> classValidator = new ClassValidator<Address>(
-				Address.class, ResourceBundle.getBundle( "messages", Locale.ENGLISH )
-		);
-		InvalidValue[] validationMessages = classValidator.getInvalidValues( a );
-		assertEquals( 2, validationMessages.length ); //static field is tested also
-		Address.blacklistedZipCode = "323232";
-		a.setZip( null );
-		a.setState( "Victoria" );
-		validationMessages = classValidator.getInvalidValues( a );
-		assertEquals( 2, validationMessages.length );
-		validationMessages = classValidator.getInvalidValues( a, "zip" );
-		assertEquals( 1, validationMessages.length );
-		a.setZip( "3181" );
-		a.setState( "NSW" );
-		validationMessages = classValidator.getInvalidValues( a );
-		assertEquals( 0, validationMessages.length );
-		a.setCountry( null );
-		validationMessages = classValidator.getInvalidValues( a );
-		assertEquals( 1, validationMessages.length );
-		a.setInternalValid( false );
-		validationMessages = classValidator.getInvalidValues( a );
-		assertEquals( 2, validationMessages.length );
-		a.setInternalValid( true );
-		a.setCountry( "France" );
-		a.floor = 4000;
-		validationMessages = classValidator.getInvalidValues( a );
-		assertEquals( 1, validationMessages.length );
-		assertEquals(
-				"Floor cannot " + ESCAPING_EL
-						+ " be lower that -2 and greater than 50 " + ESCAPING_EL,
-				validationMessages[0].getMessage()
-		);
-	}
-
-	public void testCircularity() throws Exception {
-		Brother emmanuel = new Brother();
-		emmanuel.setName( "Emmanuel" );
-		Address.blacklistedZipCode = "666";
-		Address address = new Address();
-		address.setInternalValid( true );
-		address.setCountry( "France" );
-		address.setId( 3 );
-		address.setLine1( "Rue des rosiers" );
-		address.setState( "NYC" );
-		address.setZip( "33333" );
-		address.floor = 4;
-		emmanuel.setAddress( address );
-		Brother christophe = new Brother();
-		christophe.setName( "Christophe" );
-		christophe.setAddress( address );
-		emmanuel.setYoungerBrother( christophe );
-		christophe.setElder( emmanuel );
-		ClassValidator<Brother> classValidator = new ClassValidator<Brother>( Brother.class );
-		InvalidValue[] invalidValues = classValidator.getInvalidValues( emmanuel );
-		assertEquals( 0, invalidValues.length );
-		christophe.setName( null );
-		invalidValues = classValidator.getInvalidValues( emmanuel );
-		assertEquals( 1, invalidValues.length );
-		assertEquals( emmanuel, invalidValues[0].getRootBean() );
-		assertEquals( "youngerBrother.name", invalidValues[0].getPropertyPath() );
-		christophe.setName( "Christophe" );
-		address = new Address();
-		address.setInternalValid( true );
-		address.setCountry( "France" );
-		address.setId( 4 );
-		address.setLine1( "Rue des plantes" );
-		address.setState( "NYC" );
-		address.setZip( "33333" );
-		address.floor = -100;
-		christophe.setAddress( address );
-		invalidValues = classValidator.getInvalidValues( emmanuel );
-		assertEquals( 1, invalidValues.length );
-	}
-
-	public void testAggregationAnnotations() throws Exception {
-		Engine eng = new Engine();
-		eng.setHorsePower( 23 );
-		eng.setSerialNumber( "23-43###4" );
-		ClassValidator<Engine> classValidator = new ClassValidator<Engine>( Engine.class );
-		InvalidValue[] invalidValues = classValidator.getInvalidValues( eng );
-		assertEquals( 2, invalidValues.length );
-
-		eng.setSerialNumber( "1234-5678-9012");
-		invalidValues = classValidator.getInvalidValues( eng );
-		assertEquals( 0, invalidValues.length );
-	}
-
-	public void testDefaultResourceBundle() throws Exception {
-		Tv tv = new Tv();
-		tv.serial = "FS";
-		tv.name = "TooLong";
-		tv.expDate = new Date( new Date().getTime() + 1000 * 60 * 60 * 24 * 10 );
-		ClassValidator<Tv> classValidator = new ClassValidator<Tv>( Tv.class );
-		InvalidValue[] invalidValues = classValidator.getInvalidValues( tv );
-		assertEquals( 1, invalidValues.length );
-		Locale loc = Locale.getDefault();
-		if ( loc.toString().startsWith( "en" ) ) {
-			assertEquals( "length must be between 0 and 2", invalidValues[0].getMessage() );
-		}
-		else if ( loc.toString().startsWith( "fr" ) ) {
-			String message = invalidValues[0].getMessage();
-			String message2 ="la longueur doit être entre 0 et 2"; 
-			assertEquals( message2, message );
-		}
-		else if ( loc.toString().startsWith( "da" ) ) {
-			assertEquals( "længden skal være mellem 0 og 2", invalidValues[0].getMessage() );
-		}
-		else {
-			// if default not found then it must be english
-			assertEquals( "length must be between 0 and 2", invalidValues[0].getMessage() );
-		}
-	}
-
-	public class PrefixMessageInterpolator implements MessageInterpolator, Serializable {
-		private String prefix;
-
-		public PrefixMessageInterpolator(String prefix) {
-			this.prefix = prefix;
-		}
-
-		public String interpolate(String message, Validator validator, MessageInterpolator defaultInterpolator) {
-			return prefix + defaultInterpolator.interpolate( message, validator, defaultInterpolator );
-		}
-	}
-
-	public void testMessageInterpolator() throws Exception {
-		Tv tv = new Tv();
-		tv.serial = "FS";
-		tv.name = "TooLong";
-		tv.expDate = new Date( new Date().getTime() + 1000 * 60 * 60 * 24 * 10 );
-		String prefix = "Prefix";
-		ClassValidator<Tv> classValidator = new ClassValidator<Tv>( Tv.class, new PrefixMessageInterpolator( prefix )  );
-		InvalidValue[] invalidValues = classValidator.getInvalidValues( tv );
-		assertEquals( 1, invalidValues.length );
-		Locale loc = Locale.getDefault();
-		if ( loc.toString().startsWith( "en" ) ) {
-			assertEquals( prefix + "length must be between 0 and 2", invalidValues[0].getMessage() );
-		}
-		else if ( loc.toString().startsWith( "fr" ) ) {
-			assertEquals( prefix + "la longueur doit être entre 0 et 2", invalidValues[0].getMessage() );
-		}
-		else if ( loc.toString().startsWith( "da" ) ) {
-			assertEquals( prefix + "længden skal være mellem 0 og 2", invalidValues[0].getMessage() );
-		}
-		else {
-			// if default not found then it must be english
-			assertEquals( prefix + "length must be between 0 and 2", invalidValues[0].getMessage() );
-		}
-	}
-
-	public void testBigInteger() throws Exception {
-		Tv tv = new Tv();
-		tv.lifetime = new BigInteger("9223372036854775808");
-		ClassValidator<Tv> classValidator = new ClassValidator<Tv>( Tv.class );
-		InvalidValue[] invalidValues = classValidator.getInvalidValues( tv );
-		assertEquals( 0, invalidValues.length );
-	}
-
-	public void testBeanValidator() throws Exception {
-		Vase v = new Vase();
-		ClassValidator<Vase> classValidator = new ClassValidator<Vase>( Vase.class );
-		InvalidValue[] invalidValues = classValidator.getInvalidValues( v );
-		assertEquals( 1, invalidValues.length );
-		assertNull( invalidValues[0].getPropertyName() );
-	}
-
-	public void testPotentialInvalidValues() throws Exception {
-		Address a = new Address();
-		Address.blacklistedZipCode = null;
-		a.setCountry( "Australia" );
-		a.setZip( "1221341234123" );
-		a.setState( "Vic" );
-		a.setLine1( "Karbarook Ave" );
-		a.setId( 3 );
-		ClassValidator<Address> classValidator = new ClassValidator<Address>( Address.class );
-		InvalidValue[] validationMessages = classValidator.getPotentialInvalidValues(
-				"blacklistedZipCode", Address.blacklistedZipCode
-		);
-		assertEquals( 1, validationMessages.length );
-	}
-
-	public void testRecursivity() throws Exception {
-		Site site = new Site();
-		site.setSiteName( "Rocky mountains" );
-		Contact contact = new Contact();
-		contact.setName( null ); //1 error
-		contact.setPhone( "01234455" );
-		site.setContact( contact );
-		Address a = new Address();
-		Address.blacklistedZipCode = "222";
-		a.setCountry( "Australia" );
-		a.setZip( "123" );
-		a.setState( "Vic" );
-		a.setLine1( null ); // 1 more error
-		a.setId( 3 );
-		site.setAddress( a );
-		ClassValidator<Site> classValidator = new ClassValidator<Site>( Site.class );
-		InvalidValue[] validationMessages = classValidator.getInvalidValues( site );
-		assertEquals( 2, validationMessages.length );
-	}
-}

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/ValidatorTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/ValidatorTest.java)
===================================================================
--- trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/ValidatorTest.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/ValidatorTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,230 @@
+//$Id$
+package org.hibernate.validator.test;
+
+import java.io.Serializable;
+import java.math.BigInteger;
+import java.util.Date;
+import java.util.Locale;
+import java.util.ResourceBundle;
+
+import junit.framework.TestCase;
+import org.hibernate.validator.ClassValidator;
+import org.hibernate.validator.InvalidValue;
+import org.hibernate.validator.MessageInterpolator;
+import org.hibernate.validator.Validator;
+
+/**
+ * @author Gavin King
+ */
+public class ValidatorTest extends TestCase {
+	public static final String ESCAPING_EL = "(escaping #{el})";
+
+	public void testValidator() {
+		Address a = new Address();
+		Address.blacklistedZipCode = null;
+		a.setCountry( "Australia" );
+		a.setZip( "1221341234123" );
+		a.setState( "Vic" );
+		a.setLine1( "Karbarook Ave" );
+		a.setId( 3 );
+		ClassValidator<Address> classValidator = new ClassValidator<Address>(
+				Address.class, ResourceBundle.getBundle( "messages", Locale.ENGLISH )
+		);
+		InvalidValue[] validationMessages = classValidator.getInvalidValues( a );
+		assertEquals( 2, validationMessages.length ); //static field is tested also
+		Address.blacklistedZipCode = "323232";
+		a.setZip( null );
+		a.setState( "Victoria" );
+		validationMessages = classValidator.getInvalidValues( a );
+		assertEquals( 2, validationMessages.length );
+		validationMessages = classValidator.getInvalidValues( a, "zip" );
+		assertEquals( 1, validationMessages.length );
+		a.setZip( "3181" );
+		a.setState( "NSW" );
+		validationMessages = classValidator.getInvalidValues( a );
+		assertEquals( 0, validationMessages.length );
+		a.setCountry( null );
+		validationMessages = classValidator.getInvalidValues( a );
+		assertEquals( 1, validationMessages.length );
+		a.setInternalValid( false );
+		validationMessages = classValidator.getInvalidValues( a );
+		assertEquals( 2, validationMessages.length );
+		a.setInternalValid( true );
+		a.setCountry( "France" );
+		a.floor = 4000;
+		validationMessages = classValidator.getInvalidValues( a );
+		assertEquals( 1, validationMessages.length );
+		assertEquals(
+				"Floor cannot " + ESCAPING_EL
+						+ " be lower that -2 and greater than 50 " + ESCAPING_EL,
+				validationMessages[0].getMessage()
+		);
+	}
+
+	public void testCircularity() throws Exception {
+		Brother emmanuel = new Brother();
+		emmanuel.setName( "Emmanuel" );
+		Address.blacklistedZipCode = "666";
+		Address address = new Address();
+		address.setInternalValid( true );
+		address.setCountry( "France" );
+		address.setId( 3 );
+		address.setLine1( "Rue des rosiers" );
+		address.setState( "NYC" );
+		address.setZip( "33333" );
+		address.floor = 4;
+		emmanuel.setAddress( address );
+		Brother christophe = new Brother();
+		christophe.setName( "Christophe" );
+		christophe.setAddress( address );
+		emmanuel.setYoungerBrother( christophe );
+		christophe.setElder( emmanuel );
+		ClassValidator<Brother> classValidator = new ClassValidator<Brother>( Brother.class );
+		InvalidValue[] invalidValues = classValidator.getInvalidValues( emmanuel );
+		assertEquals( 0, invalidValues.length );
+		christophe.setName( null );
+		invalidValues = classValidator.getInvalidValues( emmanuel );
+		assertEquals( 1, invalidValues.length );
+		assertEquals( emmanuel, invalidValues[0].getRootBean() );
+		assertEquals( "youngerBrother.name", invalidValues[0].getPropertyPath() );
+		christophe.setName( "Christophe" );
+		address = new Address();
+		address.setInternalValid( true );
+		address.setCountry( "France" );
+		address.setId( 4 );
+		address.setLine1( "Rue des plantes" );
+		address.setState( "NYC" );
+		address.setZip( "33333" );
+		address.floor = -100;
+		christophe.setAddress( address );
+		invalidValues = classValidator.getInvalidValues( emmanuel );
+		assertEquals( 1, invalidValues.length );
+	}
+
+	public void testAggregationAnnotations() throws Exception {
+		Engine eng = new Engine();
+		eng.setHorsePower( 23 );
+		eng.setSerialNumber( "23-43###4" );
+		ClassValidator<Engine> classValidator = new ClassValidator<Engine>( Engine.class );
+		InvalidValue[] invalidValues = classValidator.getInvalidValues( eng );
+		assertEquals( 2, invalidValues.length );
+
+		eng.setSerialNumber( "1234-5678-9012");
+		invalidValues = classValidator.getInvalidValues( eng );
+		assertEquals( 0, invalidValues.length );
+	}
+
+	public void testDefaultResourceBundle() throws Exception {
+		Tv tv = new Tv();
+		tv.serial = "FS";
+		tv.name = "TooLong";
+		tv.expDate = new Date( new Date().getTime() + 1000 * 60 * 60 * 24 * 10 );
+		ClassValidator<Tv> classValidator = new ClassValidator<Tv>( Tv.class );
+		InvalidValue[] invalidValues = classValidator.getInvalidValues( tv );
+		assertEquals( 1, invalidValues.length );
+		Locale loc = Locale.getDefault();
+		if ( loc.toString().startsWith( "en" ) ) {
+			assertEquals( "length must be between 0 and 2", invalidValues[0].getMessage() );
+		}
+		else if ( loc.toString().startsWith( "fr" ) ) {
+			String message = invalidValues[0].getMessage();
+			String message2 ="la longueur doit être entre 0 et 2"; 
+			assertEquals( message2, message );
+		}
+		else if ( loc.toString().startsWith( "da" ) ) {
+			assertEquals( "længden skal være mellem 0 og 2", invalidValues[0].getMessage() );
+		}
+		else {
+			// if default not found then it must be english
+			assertEquals( "length must be between 0 and 2", invalidValues[0].getMessage() );
+		}
+	}
+
+	public class PrefixMessageInterpolator implements MessageInterpolator, Serializable {
+		private String prefix;
+
+		public PrefixMessageInterpolator(String prefix) {
+			this.prefix = prefix;
+		}
+
+		public String interpolate(String message, Validator validator, MessageInterpolator defaultInterpolator) {
+			return prefix + defaultInterpolator.interpolate( message, validator, defaultInterpolator );
+		}
+	}
+
+	public void testMessageInterpolator() throws Exception {
+		Tv tv = new Tv();
+		tv.serial = "FS";
+		tv.name = "TooLong";
+		tv.expDate = new Date( new Date().getTime() + 1000 * 60 * 60 * 24 * 10 );
+		String prefix = "Prefix";
+		ClassValidator<Tv> classValidator = new ClassValidator<Tv>( Tv.class, new PrefixMessageInterpolator( prefix )  );
+		InvalidValue[] invalidValues = classValidator.getInvalidValues( tv );
+		assertEquals( 1, invalidValues.length );
+		Locale loc = Locale.getDefault();
+		if ( loc.toString().startsWith( "en" ) ) {
+			assertEquals( prefix + "length must be between 0 and 2", invalidValues[0].getMessage() );
+		}
+		else if ( loc.toString().startsWith( "fr" ) ) {
+			assertEquals( prefix + "la longueur doit être entre 0 et 2", invalidValues[0].getMessage() );
+		}
+		else if ( loc.toString().startsWith( "da" ) ) {
+			assertEquals( prefix + "længden skal være mellem 0 og 2", invalidValues[0].getMessage() );
+		}
+		else {
+			// if default not found then it must be english
+			assertEquals( prefix + "length must be between 0 and 2", invalidValues[0].getMessage() );
+		}
+	}
+
+	public void testBigInteger() throws Exception {
+		Tv tv = new Tv();
+		tv.lifetime = new BigInteger("9223372036854775808");
+		ClassValidator<Tv> classValidator = new ClassValidator<Tv>( Tv.class );
+		InvalidValue[] invalidValues = classValidator.getInvalidValues( tv );
+		assertEquals( 0, invalidValues.length );
+	}
+
+	public void testBeanValidator() throws Exception {
+		Vase v = new Vase();
+		ClassValidator<Vase> classValidator = new ClassValidator<Vase>( Vase.class );
+		InvalidValue[] invalidValues = classValidator.getInvalidValues( v );
+		assertEquals( 1, invalidValues.length );
+		assertNull( invalidValues[0].getPropertyName() );
+	}
+
+	public void testPotentialInvalidValues() throws Exception {
+		Address a = new Address();
+		Address.blacklistedZipCode = null;
+		a.setCountry( "Australia" );
+		a.setZip( "1221341234123" );
+		a.setState( "Vic" );
+		a.setLine1( "Karbarook Ave" );
+		a.setId( 3 );
+		ClassValidator<Address> classValidator = new ClassValidator<Address>( Address.class );
+		InvalidValue[] validationMessages = classValidator.getPotentialInvalidValues(
+				"blacklistedZipCode", Address.blacklistedZipCode
+		);
+		assertEquals( 1, validationMessages.length );
+	}
+
+	public void testRecursivity() throws Exception {
+		Site site = new Site();
+		site.setSiteName( "Rocky mountains" );
+		Contact contact = new Contact();
+		contact.setName( null ); //1 error
+		contact.setPhone( "01234455" );
+		site.setContact( contact );
+		Address a = new Address();
+		Address.blacklistedZipCode = "222";
+		a.setCountry( "Australia" );
+		a.setZip( "123" );
+		a.setState( "Vic" );
+		a.setLine1( null ); // 1 more error
+		a.setId( 3 );
+		site.setAddress( a );
+		ClassValidator<Site> classValidator = new ClassValidator<Site>( Site.class );
+		InvalidValue[] validationMessages = classValidator.getInvalidValues( site );
+		assertEquals( 2, validationMessages.length );
+	}
+}

Deleted: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Vase.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/Vase.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Vase.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,11 +0,0 @@
-//$Id$
-package org.hibernate.validator.test;
-
-/**
- * A vase has to be Serializable to fit in luggages
- *
- * @author Emmanuel Bernard
- */
- at Serializability
-public class Vase {
-}

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Vase.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/Vase.java)
===================================================================
--- trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Vase.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/Vase.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,11 @@
+//$Id$
+package org.hibernate.validator.test;
+
+/**
+ * A vase has to be Serializable to fit in luggages
+ *
+ * @author Emmanuel Bernard
+ */
+ at Serializability
+public class Vase {
+}

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/collections (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/collections)

Deleted: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/collections/Movie.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/collections/Movie.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/collections/Movie.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,12 +0,0 @@
-//$Id: $
-package org.hibernate.validator.test.collections;
-
-import org.hibernate.validator.NotNull;
-
-/**
- * @author Emmanuel Bernard
- */
-public class Movie {
-	@NotNull
-	public String name;
-}

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/collections/Movie.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/collections/Movie.java)
===================================================================
--- trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/collections/Movie.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/collections/Movie.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,12 @@
+//$Id: $
+package org.hibernate.validator.test.collections;
+
+import org.hibernate.validator.NotNull;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Movie {
+	@NotNull
+	public String name;
+}

Deleted: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/collections/Presenter.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/collections/Presenter.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/collections/Presenter.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,12 +0,0 @@
-//$Id: $
-package org.hibernate.validator.test.collections;
-
-import org.hibernate.validator.NotNull;
-
-/**
- * @author Emmanuel Bernard
- */
-public class Presenter {
-	@NotNull
-	public String name;
-}

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/collections/Presenter.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/collections/Presenter.java)
===================================================================
--- trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/collections/Presenter.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/collections/Presenter.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,12 @@
+//$Id: $
+package org.hibernate.validator.test.collections;
+
+import org.hibernate.validator.NotNull;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Presenter {
+	@NotNull
+	public String name;
+}

Deleted: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/collections/Show.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/collections/Show.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/collections/Show.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,12 +0,0 @@
-//$Id: $
-package org.hibernate.validator.test.collections;
-
-import org.hibernate.validator.NotNull;
-
-/**
- * @author Emmanuel Bernard
- */
-public class Show {
-	@NotNull
-	public String name;
-}

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/collections/Show.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/collections/Show.java)
===================================================================
--- trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/collections/Show.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/collections/Show.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,12 @@
+//$Id: $
+package org.hibernate.validator.test.collections;
+
+import org.hibernate.validator.NotNull;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Show {
+	@NotNull
+	public String name;
+}

Deleted: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/collections/Tv.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/collections/Tv.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/collections/Tv.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,28 +0,0 @@
-//$Id: $
-package org.hibernate.validator.test.collections;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.hibernate.validator.NotNull;
-import org.hibernate.validator.Valid;
-
-/**
- * @author Emmanuel Bernard
- */
-public class Tv {
-	@NotNull
-	public String name;
-
-	@Valid
-	public List<Presenter> presenters = new ArrayList<Presenter>();
-
-	@Valid
-	public Map<String, Show> shows = new HashMap<String, Show>();
-
-	public
-	@Valid
-	Movie[] movies;
-}

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/collections/Tv.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/collections/Tv.java)
===================================================================
--- trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/collections/Tv.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/collections/Tv.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,28 @@
+//$Id: $
+package org.hibernate.validator.test.collections;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.hibernate.validator.NotNull;
+import org.hibernate.validator.Valid;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Tv {
+	@NotNull
+	public String name;
+
+	@Valid
+	public List<Presenter> presenters = new ArrayList<Presenter>();
+
+	@Valid
+	public Map<String, Show> shows = new HashMap<String, Show>();
+
+	public
+	@Valid
+	Movie[] movies;
+}

Deleted: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/collections/ValidationCollectionTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/collections/ValidationCollectionTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/collections/ValidationCollectionTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,59 +0,0 @@
-//$Id: $
-package org.hibernate.validator.test.collections;
-
-import junit.framework.TestCase;
-import org.hibernate.validator.ClassValidator;
-import org.hibernate.validator.InvalidValue;
-
-/**
- * @author Emmanuel Bernard
- */
-public class ValidationCollectionTest extends TestCase {
-	public void testCollection() throws Exception {
-		Tv tv = new Tv();
-		tv.name = "France 2";
-		Presenter presNok = new Presenter();
-		presNok.name = null;
-		Presenter presOk = new Presenter();
-		presOk.name = "Thierry Ardisson";
-		tv.presenters.add( presOk );
-		tv.presenters.add( presNok );
-		ClassValidator validator = new ClassValidator( Tv.class );
-		InvalidValue[] values = validator.getInvalidValues( tv );
-		assertEquals( 1, values.length );
-		assertEquals( "presenters[1].name", values[0].getPropertyPath() );
-	}
-
-	public void testMap() throws Exception {
-		Tv tv = new Tv();
-		tv.name = "France 2";
-		Show showOk = new Show();
-		showOk.name = "Tout le monde en parle";
-		Show showNok = new Show();
-		showNok.name = null;
-		tv.shows.put( "Midnight", showOk );
-		tv.shows.put( "Primetime", showNok );
-		ClassValidator validator = new ClassValidator( Tv.class );
-		InvalidValue[] values = validator.getInvalidValues( tv );
-		assertEquals( 1, values.length );
-		assertEquals( "shows['Primetime'].name", values[0].getPropertyPath() );
-	}
-
-	public void testArray() throws Exception {
-		Tv tv = new Tv();
-		tv.name = "France 2";
-		Movie movieOk = new Movie();
-		movieOk.name = "Kill Bill";
-		Movie movieNok = new Movie();
-		movieNok.name = null;
-		tv.movies = new Movie[]{
-				movieOk,
-				null,
-				movieNok
-		};
-		ClassValidator validator = new ClassValidator( Tv.class );
-		InvalidValue[] values = validator.getInvalidValues( tv );
-		assertEquals( 1, values.length );
-		assertEquals( "movies[2].name", values[0].getPropertyPath() );
-	}
-}

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/collections/ValidationCollectionTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/collections/ValidationCollectionTest.java)
===================================================================
--- trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/collections/ValidationCollectionTest.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/collections/ValidationCollectionTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,59 @@
+//$Id: $
+package org.hibernate.validator.test.collections;
+
+import junit.framework.TestCase;
+import org.hibernate.validator.ClassValidator;
+import org.hibernate.validator.InvalidValue;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class ValidationCollectionTest extends TestCase {
+	public void testCollection() throws Exception {
+		Tv tv = new Tv();
+		tv.name = "France 2";
+		Presenter presNok = new Presenter();
+		presNok.name = null;
+		Presenter presOk = new Presenter();
+		presOk.name = "Thierry Ardisson";
+		tv.presenters.add( presOk );
+		tv.presenters.add( presNok );
+		ClassValidator validator = new ClassValidator( Tv.class );
+		InvalidValue[] values = validator.getInvalidValues( tv );
+		assertEquals( 1, values.length );
+		assertEquals( "presenters[1].name", values[0].getPropertyPath() );
+	}
+
+	public void testMap() throws Exception {
+		Tv tv = new Tv();
+		tv.name = "France 2";
+		Show showOk = new Show();
+		showOk.name = "Tout le monde en parle";
+		Show showNok = new Show();
+		showNok.name = null;
+		tv.shows.put( "Midnight", showOk );
+		tv.shows.put( "Primetime", showNok );
+		ClassValidator validator = new ClassValidator( Tv.class );
+		InvalidValue[] values = validator.getInvalidValues( tv );
+		assertEquals( 1, values.length );
+		assertEquals( "shows['Primetime'].name", values[0].getPropertyPath() );
+	}
+
+	public void testArray() throws Exception {
+		Tv tv = new Tv();
+		tv.name = "France 2";
+		Movie movieOk = new Movie();
+		movieOk.name = "Kill Bill";
+		Movie movieNok = new Movie();
+		movieNok.name = null;
+		tv.movies = new Movie[]{
+				movieOk,
+				null,
+				movieNok
+		};
+		ClassValidator validator = new ClassValidator( Tv.class );
+		InvalidValue[] values = validator.getInvalidValues( tv );
+		assertEquals( 1, values.length );
+		assertEquals( "movies[2].name", values[0].getPropertyPath() );
+	}
+}

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration)

Deleted: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/Address.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/Address.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/Address.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,108 +0,0 @@
-//$Id: Address.java 9755 2006-04-17 19:44:22Z epbernard $
-package org.hibernate.validator.test.haintegration;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Transient;
-
-import org.hibernate.validator.AssertTrue;
-import org.hibernate.validator.Length;
-import org.hibernate.validator.Min;
-import org.hibernate.validator.NotNull;
-import org.hibernate.validator.Pattern;
-import org.hibernate.validator.Range;
-
-/**
- * @author Gavin King
- */
- at Entity
-public class Address {
-	@NotNull
-	public static String blacklistedZipCode;
-
-	private String line1;
-	private String line2;
-	private String zip;
-	private String state;
-	@Length(max = 20)
-	@NotNull
-	private String country;
-	private long id;
-	private boolean internalValid = true;
-	@Range(min = -2, max = 50, message = "{floor.out.of.range} (escaping #{el})")
-	public int floor;
-
-	public String getCountry() {
-		return country;
-	}
-
-	public void setCountry(String country) {
-		this.country = country;
-	}
-
-	@NotNull
-	public String getLine1() {
-		return line1;
-	}
-
-	public void setLine1(String line1) {
-		this.line1 = line1;
-	}
-
-	public String getLine2() {
-		return line2;
-	}
-
-	public void setLine2(String line2) {
-		this.line2 = line2;
-	}
-
-	@Length(max = 3)
-	@NotNull
-	public String getState() {
-		return state;
-	}
-
-	public void setState(String state) {
-		this.state = state;
-	}
-
-	@Length(max = 5, message = "{long}")
-	@Pattern(regex = "[0-9]+")
-	@NotNull
-	public String getZip() {
-		return zip;
-	}
-
-	public void setZip(String zip) {
-		this.zip = zip;
-	}
-
-	@AssertTrue
-	@Transient
-	public boolean isValid() {
-		return true;
-	}
-
-	@AssertTrue
-	@Transient
-	private boolean isInternalValid() {
-		return internalValid;
-	}
-
-	public void setInternalValid(boolean internalValid) {
-		this.internalValid = internalValid;
-	}
-
-	@Id
-	@Min(1)
-	@Range(max = 2000)
-	public long getId() {
-		return id;
-	}
-
-	public void setId(long id) {
-		this.id = id;
-	}
-
-}

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/Address.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/Address.java)
===================================================================
--- trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/Address.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/Address.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,108 @@
+//$Id: Address.java 9755 2006-04-17 19:44:22Z epbernard $
+package org.hibernate.validator.test.haintegration;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Transient;
+
+import org.hibernate.validator.AssertTrue;
+import org.hibernate.validator.Length;
+import org.hibernate.validator.Min;
+import org.hibernate.validator.NotNull;
+import org.hibernate.validator.Pattern;
+import org.hibernate.validator.Range;
+
+/**
+ * @author Gavin King
+ */
+ at Entity
+public class Address {
+	@NotNull
+	public static String blacklistedZipCode;
+
+	private String line1;
+	private String line2;
+	private String zip;
+	private String state;
+	@Length(max = 20)
+	@NotNull
+	private String country;
+	private long id;
+	private boolean internalValid = true;
+	@Range(min = -2, max = 50, message = "{floor.out.of.range} (escaping #{el})")
+	public int floor;
+
+	public String getCountry() {
+		return country;
+	}
+
+	public void setCountry(String country) {
+		this.country = country;
+	}
+
+	@NotNull
+	public String getLine1() {
+		return line1;
+	}
+
+	public void setLine1(String line1) {
+		this.line1 = line1;
+	}
+
+	public String getLine2() {
+		return line2;
+	}
+
+	public void setLine2(String line2) {
+		this.line2 = line2;
+	}
+
+	@Length(max = 3)
+	@NotNull
+	public String getState() {
+		return state;
+	}
+
+	public void setState(String state) {
+		this.state = state;
+	}
+
+	@Length(max = 5, message = "{long}")
+	@Pattern(regex = "[0-9]+")
+	@NotNull
+	public String getZip() {
+		return zip;
+	}
+
+	public void setZip(String zip) {
+		this.zip = zip;
+	}
+
+	@AssertTrue
+	@Transient
+	public boolean isValid() {
+		return true;
+	}
+
+	@AssertTrue
+	@Transient
+	private boolean isInternalValid() {
+		return internalValid;
+	}
+
+	public void setInternalValid(boolean internalValid) {
+		this.internalValid = internalValid;
+	}
+
+	@Id
+	@Min(1)
+	@Range(max = 2000)
+	public long getId() {
+		return id;
+	}
+
+	public void setId(long id) {
+		this.id = id;
+	}
+
+}

Deleted: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/CreditCard.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/CreditCard.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/CreditCard.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,41 +0,0 @@
-//$Id: $
-package org.hibernate.validator.test.haintegration;
-
-import javax.persistence.Embedded;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-
-import org.hibernate.validator.NotNull;
-import org.hibernate.validator.Valid;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class CreditCard {
-	@Id
-	@GeneratedValue
-	private Integer id;
-	@Embedded
-	@Valid
-	@NotNull
-	private User username;
-
-	public Integer getId() {
-		return id;
-	}
-
-	public void setId(Integer id) {
-		this.id = id;
-	}
-
-	public User getUsername() {
-		return username;
-	}
-
-	public void setUsername(User username) {
-		this.username = username;
-	}
-
-}

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/CreditCard.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/CreditCard.java)
===================================================================
--- trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/CreditCard.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/CreditCard.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,41 @@
+//$Id: $
+package org.hibernate.validator.test.haintegration;
+
+import javax.persistence.Embedded;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+import org.hibernate.validator.NotNull;
+import org.hibernate.validator.Valid;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class CreditCard {
+	@Id
+	@GeneratedValue
+	private Integer id;
+	@Embedded
+	@Valid
+	@NotNull
+	private User username;
+
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public User getUsername() {
+		return username;
+	}
+
+	public void setUsername(User username) {
+		this.username = username;
+	}
+
+}

Deleted: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/EmbeddedObjectTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/EmbeddedObjectTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/EmbeddedObjectTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,49 +0,0 @@
-//$Id: $
-package org.hibernate.validator.test.haintegration;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-import org.hibernate.cfg.Configuration;
-import org.hibernate.event.PreInsertEventListener;
-import org.hibernate.event.PreUpdateEventListener;
-import org.hibernate.validator.ClassValidator;
-import org.hibernate.validator.event.ValidatePreInsertEventListener;
-import org.hibernate.validator.event.ValidatePreUpdateEventListener;
-import org.hibernate.validator.test.HANTestCase;
-
-/**
- * @author Emmanuel Bernard
- */
-public class EmbeddedObjectTest extends HANTestCase {
-	public void testNotNullEmbeddedObject() throws Exception {
-		CreditCard cc = new CreditCard();
-		User username = new User();
-		username.setFirstname( "Emmanuel" );
-		username.setMiddlename( "P" );
-		username.setLastname( "Bernard" );
-		cc.setUsername( username );
-		ClassValidator ccValid = new ClassValidator( CreditCard.class );
-		assertEquals( 0, ccValid.getInvalidValues( cc ).length );
-		username.setMiddlename( null );
-		assertEquals( 0, ccValid.getInvalidValues( cc ).length );
-		Session s = openSession();
-		Transaction tx = s.beginTransaction();
-		s.persist( cc );
-		s.flush();
-		tx.rollback();
-		s.close();
-	}
-
-	protected Class[] getMappings() {
-		return new Class[]{
-				CreditCard.class
-		};
-	}
-
-    protected void configure(Configuration cfg) {
-		cfg.getEventListeners()
-				.setPreInsertEventListeners( new PreInsertEventListener[]{new ValidatePreInsertEventListener()} );
-		cfg.getEventListeners()
-				.setPreUpdateEventListeners( new PreUpdateEventListener[]{new ValidatePreUpdateEventListener()} );
-	}
-}

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/EmbeddedObjectTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/EmbeddedObjectTest.java)
===================================================================
--- trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/EmbeddedObjectTest.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/EmbeddedObjectTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,49 @@
+//$Id: $
+package org.hibernate.validator.test.haintegration;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.cfg.Configuration;
+import org.hibernate.event.PreInsertEventListener;
+import org.hibernate.event.PreUpdateEventListener;
+import org.hibernate.validator.ClassValidator;
+import org.hibernate.validator.event.ValidatePreInsertEventListener;
+import org.hibernate.validator.event.ValidatePreUpdateEventListener;
+import org.hibernate.validator.test.HANTestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class EmbeddedObjectTest extends HANTestCase {
+	public void testNotNullEmbeddedObject() throws Exception {
+		CreditCard cc = new CreditCard();
+		User username = new User();
+		username.setFirstname( "Emmanuel" );
+		username.setMiddlename( "P" );
+		username.setLastname( "Bernard" );
+		cc.setUsername( username );
+		ClassValidator ccValid = new ClassValidator( CreditCard.class );
+		assertEquals( 0, ccValid.getInvalidValues( cc ).length );
+		username.setMiddlename( null );
+		assertEquals( 0, ccValid.getInvalidValues( cc ).length );
+		Session s = openSession();
+		Transaction tx = s.beginTransaction();
+		s.persist( cc );
+		s.flush();
+		tx.rollback();
+		s.close();
+	}
+
+	protected Class[] getMappings() {
+		return new Class[]{
+				CreditCard.class
+		};
+	}
+
+    protected void configure(Configuration cfg) {
+		cfg.getEventListeners()
+				.setPreInsertEventListeners( new PreInsertEventListener[]{new ValidatePreInsertEventListener()} );
+		cfg.getEventListeners()
+				.setPreUpdateEventListeners( new PreUpdateEventListener[]{new ValidatePreUpdateEventListener()} );
+	}
+}

Deleted: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/HibernateAnnotationIntegrationTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/HibernateAnnotationIntegrationTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/HibernateAnnotationIntegrationTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,169 +0,0 @@
-//$Id$
-package org.hibernate.validator.test.haintegration;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-import org.hibernate.cfg.Configuration;
-import org.hibernate.event.PreInsertEventListener;
-import org.hibernate.event.PreUpdateEventListener;
-import org.hibernate.mapping.Column;
-import org.hibernate.mapping.PersistentClass;
-import org.hibernate.validator.Environment;
-import org.hibernate.validator.InvalidStateException;
-import org.hibernate.validator.event.ValidateEventListener;
-import org.hibernate.validator.test.HANTestCase;
-
-/**
- * Test the validate framework integration with the Hibernate
- * metadata binding
- *
- * @author Emmanuel Bernard
- */
-public class HibernateAnnotationIntegrationTest extends HANTestCase {
-	public void testApply() throws Exception {
-		PersistentClass classMapping = getCfg().getClassMapping( Address.class.getName() );
-		//new ClassValidator( Address.class, ResourceBundle.getBundle("messages", Locale.ENGLISH) ).apply( classMapping );
-		Column stateColumn = (Column) classMapping.getProperty( "state" ).getColumnIterator().next();
-		assertEquals( stateColumn.getLength(), 3 );
-		Column zipColumn = (Column) classMapping.getProperty( "zip" ).getColumnIterator().next();
-		assertEquals( zipColumn.getLength(), 5 );
-		assertFalse( zipColumn.isNullable() );
-	}
-
-	public void testApplyOnIdColumn() throws Exception {
-		PersistentClass classMapping = getCfg().getClassMapping( Tv.class.getName() );
-		Column serialColumn = (Column) classMapping.getIdentifierProperty().getColumnIterator().next();
-		assertEquals( "Vaidator annotation not applied on ids", 2, serialColumn.getLength() );
-	}
-
-	public void testApplyOnManyToOne() throws Exception {
-		PersistentClass classMapping = getCfg().getClassMapping( TvOwner.class.getName() );
-		Column serialColumn = (Column) classMapping.getProperty( "tv" ).getColumnIterator().next();
-		assertEquals( "Validator annotations not applied on associations", false, serialColumn.isNullable() );
-	}
-
-	public void testSingleTableAvoidNotNull() throws Exception {
-		PersistentClass classMapping = getCfg().getClassMapping( Rock.class.getName() );
-		Column serialColumn = (Column) classMapping.getProperty( "bit" ).getColumnIterator().next();
-		assertTrue( "Notnull should not be applised on single tables", serialColumn.isNullable() );
-	}
-
-	public void testEvents() throws Exception {
-		Session s;
-		Transaction tx;
-		Address a = new Address();
-		Address.blacklistedZipCode = "3232";
-		a.setId( 12 );
-		a.setCountry( "Country" );
-		a.setLine1( "Line 1" );
-		a.setZip( "nonnumeric" );
-		a.setState( "NY" );
-		s = openSession();
-		tx = s.beginTransaction();
-		try {
-			s.persist( a );
-			tx.commit();
-			fail( "bean should have been validated" );
-		}
-		catch (InvalidStateException e) {
-			//success
-			assertEquals( 2, e.getInvalidValues().length );
-			assertTrue( "Environment.MESSAGE_INTERPOLATOR_CLASS does not work",
-					e.getInvalidValues()[0].getMessage().startsWith( "prefix_")
-			);
-		}
-		finally {
-			if ( tx != null ) tx.rollback();
-			s.close();
-		}
-		s = openSession();
-		tx = s.beginTransaction();
-		a.setCountry( "Country" );
-		a.setLine1( "Line 1" );
-		a.setZip( "4343" );
-		a.setState( "NY" );
-		s.persist( a );
-		a.setState( "TOOLONG" );
-		try {
-			s.flush();
-			fail( "update should have been checked" );
-		}
-		catch (InvalidStateException e) {
-			assertEquals( 1, e.getInvalidValues().length );
-		}
-		finally {
-			if ( tx != null ) tx.rollback();
-			s.close();
-		}
-	}
-
-	public void testComponents() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		Martian martian = new Martian();
-		MartianPk pk = new MartianPk();
-		pk.setColony( "Liberal" ); //one failure
-		pk.setName( "Biboudie" );
-		MarsAddress address = new MarsAddress();
-		address.setContinent( "cont" ); //one failure
-		address.setCanal( "Plus" ); //one failure
-		martian.setId( pk );
-		martian.setAddress( address );
-		s.persist( martian );
-		try {
-			s.flush();
-			fail( "Components are not validated" );
-		}
-		catch (InvalidStateException e) {
-			assertEquals( 2, e.getInvalidValues().length );
-		}
-		finally {
-			tx.rollback();
-			s.close();
-		}
-	}
-
-	public void testIdClass() throws Exception {
-		Session s;
-		Transaction tx;
-		s = openSession();
-		tx = s.beginTransaction();
-		Venusian venus = new Venusian();
-		venus.setName( "bibi" );
-		venus.setRegion( "ts" );
-		s.persist( venus );
-		try {
-			s.flush();
-			fail( "test on embedded properties should have been done" );
-		}
-		catch (InvalidStateException e) {
-			assertEquals( 1, e.getInvalidValues().length );
-		}
-		finally {
-			tx.rollback();
-			s.close();
-		}
-	}
-
-	protected void configure(Configuration cfg) {
-		cfg.setProperty( Environment.MESSAGE_INTERPOLATOR_CLASS, PrefixMessageInterpolator.class.getName() );
-	}
-
-	protected Class[] getMappings() {
-		return new Class[]{
-				Address.class,
-				Martian.class,
-				Venusian.class,
-				Tv.class,
-				TvOwner.class,
-				Music.class,
-				Rock.class
-		};
-	}
-
-	public HibernateAnnotationIntegrationTest(String x) {
-		super( x );
-	}
-}

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/HibernateAnnotationIntegrationTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/HibernateAnnotationIntegrationTest.java)
===================================================================
--- trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/HibernateAnnotationIntegrationTest.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/HibernateAnnotationIntegrationTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,169 @@
+//$Id$
+package org.hibernate.validator.test.haintegration;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.cfg.Configuration;
+import org.hibernate.event.PreInsertEventListener;
+import org.hibernate.event.PreUpdateEventListener;
+import org.hibernate.mapping.Column;
+import org.hibernate.mapping.PersistentClass;
+import org.hibernate.validator.Environment;
+import org.hibernate.validator.InvalidStateException;
+import org.hibernate.validator.event.ValidateEventListener;
+import org.hibernate.validator.test.HANTestCase;
+
+/**
+ * Test the validate framework integration with the Hibernate
+ * metadata binding
+ *
+ * @author Emmanuel Bernard
+ */
+public class HibernateAnnotationIntegrationTest extends HANTestCase {
+	public void testApply() throws Exception {
+		PersistentClass classMapping = getCfg().getClassMapping( Address.class.getName() );
+		//new ClassValidator( Address.class, ResourceBundle.getBundle("messages", Locale.ENGLISH) ).apply( classMapping );
+		Column stateColumn = (Column) classMapping.getProperty( "state" ).getColumnIterator().next();
+		assertEquals( stateColumn.getLength(), 3 );
+		Column zipColumn = (Column) classMapping.getProperty( "zip" ).getColumnIterator().next();
+		assertEquals( zipColumn.getLength(), 5 );
+		assertFalse( zipColumn.isNullable() );
+	}
+
+	public void testApplyOnIdColumn() throws Exception {
+		PersistentClass classMapping = getCfg().getClassMapping( Tv.class.getName() );
+		Column serialColumn = (Column) classMapping.getIdentifierProperty().getColumnIterator().next();
+		assertEquals( "Vaidator annotation not applied on ids", 2, serialColumn.getLength() );
+	}
+
+	public void testApplyOnManyToOne() throws Exception {
+		PersistentClass classMapping = getCfg().getClassMapping( TvOwner.class.getName() );
+		Column serialColumn = (Column) classMapping.getProperty( "tv" ).getColumnIterator().next();
+		assertEquals( "Validator annotations not applied on associations", false, serialColumn.isNullable() );
+	}
+
+	public void testSingleTableAvoidNotNull() throws Exception {
+		PersistentClass classMapping = getCfg().getClassMapping( Rock.class.getName() );
+		Column serialColumn = (Column) classMapping.getProperty( "bit" ).getColumnIterator().next();
+		assertTrue( "Notnull should not be applised on single tables", serialColumn.isNullable() );
+	}
+
+	public void testEvents() throws Exception {
+		Session s;
+		Transaction tx;
+		Address a = new Address();
+		Address.blacklistedZipCode = "3232";
+		a.setId( 12 );
+		a.setCountry( "Country" );
+		a.setLine1( "Line 1" );
+		a.setZip( "nonnumeric" );
+		a.setState( "NY" );
+		s = openSession();
+		tx = s.beginTransaction();
+		try {
+			s.persist( a );
+			tx.commit();
+			fail( "bean should have been validated" );
+		}
+		catch (InvalidStateException e) {
+			//success
+			assertEquals( 2, e.getInvalidValues().length );
+			assertTrue( "Environment.MESSAGE_INTERPOLATOR_CLASS does not work",
+					e.getInvalidValues()[0].getMessage().startsWith( "prefix_")
+			);
+		}
+		finally {
+			if ( tx != null ) tx.rollback();
+			s.close();
+		}
+		s = openSession();
+		tx = s.beginTransaction();
+		a.setCountry( "Country" );
+		a.setLine1( "Line 1" );
+		a.setZip( "4343" );
+		a.setState( "NY" );
+		s.persist( a );
+		a.setState( "TOOLONG" );
+		try {
+			s.flush();
+			fail( "update should have been checked" );
+		}
+		catch (InvalidStateException e) {
+			assertEquals( 1, e.getInvalidValues().length );
+		}
+		finally {
+			if ( tx != null ) tx.rollback();
+			s.close();
+		}
+	}
+
+	public void testComponents() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		Martian martian = new Martian();
+		MartianPk pk = new MartianPk();
+		pk.setColony( "Liberal" ); //one failure
+		pk.setName( "Biboudie" );
+		MarsAddress address = new MarsAddress();
+		address.setContinent( "cont" ); //one failure
+		address.setCanal( "Plus" ); //one failure
+		martian.setId( pk );
+		martian.setAddress( address );
+		s.persist( martian );
+		try {
+			s.flush();
+			fail( "Components are not validated" );
+		}
+		catch (InvalidStateException e) {
+			assertEquals( 2, e.getInvalidValues().length );
+		}
+		finally {
+			tx.rollback();
+			s.close();
+		}
+	}
+
+	public void testIdClass() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		Venusian venus = new Venusian();
+		venus.setName( "bibi" );
+		venus.setRegion( "ts" );
+		s.persist( venus );
+		try {
+			s.flush();
+			fail( "test on embedded properties should have been done" );
+		}
+		catch (InvalidStateException e) {
+			assertEquals( 1, e.getInvalidValues().length );
+		}
+		finally {
+			tx.rollback();
+			s.close();
+		}
+	}
+
+	protected void configure(Configuration cfg) {
+		cfg.setProperty( Environment.MESSAGE_INTERPOLATOR_CLASS, PrefixMessageInterpolator.class.getName() );
+	}
+
+	protected Class[] getMappings() {
+		return new Class[]{
+				Address.class,
+				Martian.class,
+				Venusian.class,
+				Tv.class,
+				TvOwner.class,
+				Music.class,
+				Rock.class
+		};
+	}
+
+	public HibernateAnnotationIntegrationTest(String x) {
+		super( x );
+	}
+}

Deleted: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/MarsAddress.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/MarsAddress.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/MarsAddress.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,34 +0,0 @@
-//$Id: MarsAddress.java 8593 2005-11-17 18:12:11Z epbernard $
-package org.hibernate.validator.test.haintegration;
-
-import javax.persistence.Embeddable;
-
-import org.hibernate.validator.Length;
-import org.hibernate.validator.NotNull;
-
-/**
- * @author Emmanuel Bernard
- */
- at Embeddable
-public class MarsAddress {
-	private String continent;
-	private String canal;
-
-	@NotNull
-	public String getContinent() {
-		return continent;
-	}
-
-	public void setContinent(String continent) {
-		this.continent = continent;
-	}
-
-	@Length(min = 5)
-	public String getCanal() {
-		return canal;
-	}
-
-	public void setCanal(String canal) {
-		this.canal = canal;
-	}
-}

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/MarsAddress.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/MarsAddress.java)
===================================================================
--- trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/MarsAddress.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/MarsAddress.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,34 @@
+//$Id: MarsAddress.java 8593 2005-11-17 18:12:11Z epbernard $
+package org.hibernate.validator.test.haintegration;
+
+import javax.persistence.Embeddable;
+
+import org.hibernate.validator.Length;
+import org.hibernate.validator.NotNull;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Embeddable
+public class MarsAddress {
+	private String continent;
+	private String canal;
+
+	@NotNull
+	public String getContinent() {
+		return continent;
+	}
+
+	public void setContinent(String continent) {
+		this.continent = continent;
+	}
+
+	@Length(min = 5)
+	public String getCanal() {
+		return canal;
+	}
+
+	public void setCanal(String canal) {
+		this.canal = canal;
+	}
+}

Deleted: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/Martian.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/Martian.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/Martian.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,32 +0,0 @@
-//$Id: Martian.java 7797 2005-08-10 10:40:48Z epbernard $
-package org.hibernate.validator.test.haintegration;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Martian {
-	private MartianPk id;
-	private MarsAddress address;
-
-	@Id
-	public MartianPk getId() {
-		return id;
-	}
-
-	public void setId(MartianPk id) {
-		this.id = id;
-	}
-
-	public MarsAddress getAddress() {
-		return address;
-	}
-
-	public void setAddress(MarsAddress address) {
-		this.address = address;
-	}
-
-}

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/Martian.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/Martian.java)
===================================================================
--- trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/Martian.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/Martian.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,32 @@
+//$Id: Martian.java 7797 2005-08-10 10:40:48Z epbernard $
+package org.hibernate.validator.test.haintegration;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Martian {
+	private MartianPk id;
+	private MarsAddress address;
+
+	@Id
+	public MartianPk getId() {
+		return id;
+	}
+
+	public void setId(MartianPk id) {
+		this.id = id;
+	}
+
+	public MarsAddress getAddress() {
+		return address;
+	}
+
+	public void setAddress(MarsAddress address) {
+		this.address = address;
+	}
+
+}

Deleted: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/MartianPk.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/MartianPk.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/MartianPk.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,52 +0,0 @@
-//$Id: MartianPk.java 8593 2005-11-17 18:12:11Z epbernard $
-package org.hibernate.validator.test.haintegration;
-
-import java.io.Serializable;
-import javax.persistence.Embeddable;
-
-import org.hibernate.validator.Length;
-
-/**
- * @author Emmanuel Bernard
- */
- at Embeddable
-public class MartianPk implements Serializable {
-	private String name;
-	private String colony;
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	@Length(max = 4)
-	public String getColony() {
-		return colony;
-	}
-
-	public void setColony(String colony) {
-		this.colony = colony;
-	}
-
-	public boolean equals(Object o) {
-		if ( this == o ) return true;
-		if ( o == null || getClass() != o.getClass() ) return false;
-
-		final MartianPk martianPk = (MartianPk) o;
-
-		if ( !colony.equals( martianPk.colony ) ) return false;
-		if ( !name.equals( martianPk.name ) ) return false;
-
-		return true;
-	}
-
-	public int hashCode() {
-		int result;
-		result = name.hashCode();
-		result = 29 * result + colony.hashCode();
-		return result;
-	}
-}

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/MartianPk.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/MartianPk.java)
===================================================================
--- trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/MartianPk.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/MartianPk.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,52 @@
+//$Id: MartianPk.java 8593 2005-11-17 18:12:11Z epbernard $
+package org.hibernate.validator.test.haintegration;
+
+import java.io.Serializable;
+import javax.persistence.Embeddable;
+
+import org.hibernate.validator.Length;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Embeddable
+public class MartianPk implements Serializable {
+	private String name;
+	private String colony;
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	@Length(max = 4)
+	public String getColony() {
+		return colony;
+	}
+
+	public void setColony(String colony) {
+		this.colony = colony;
+	}
+
+	public boolean equals(Object o) {
+		if ( this == o ) return true;
+		if ( o == null || getClass() != o.getClass() ) return false;
+
+		final MartianPk martianPk = (MartianPk) o;
+
+		if ( !colony.equals( martianPk.colony ) ) return false;
+		if ( !name.equals( martianPk.name ) ) return false;
+
+		return true;
+	}
+
+	public int hashCode() {
+		int result;
+		result = name.hashCode();
+		result = 29 * result + colony.hashCode();
+		return result;
+	}
+}

Deleted: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/Music.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/Music.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/Music.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,14 +0,0 @@
-//$Id: Music.java 9795 2006-04-26 06:41:18Z epbernard $
-package org.hibernate.validator.test.haintegration;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Music {
-	@Id
-	public String name;
-}

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/Music.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/Music.java)
===================================================================
--- trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/Music.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/Music.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,14 @@
+//$Id: Music.java 9795 2006-04-26 06:41:18Z epbernard $
+package org.hibernate.validator.test.haintegration;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Music {
+	@Id
+	public String name;
+}

Deleted: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/NonHibernateAnnotationsIntegrationTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/NonHibernateAnnotationsIntegrationTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/NonHibernateAnnotationsIntegrationTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,52 +0,0 @@
-//$Id: $
-package org.hibernate.validator.test.haintegration;
-
-import org.hibernate.mapping.PersistentClass;
-import org.hibernate.mapping.Column;
-import org.hibernate.event.PreInsertEventListener;
-import org.hibernate.event.PreUpdateEventListener;
-import org.hibernate.cfg.Configuration;
-import org.hibernate.validator.Environment;
-import org.hibernate.validator.test.HANTestCase;
-import org.hibernate.validator.event.ValidateEventListener;
-import org.hibernate.Session;
-
-/**
- * Test the ability to disable DDL update
- *
- * @author Emmanuel Bernard
- */
-public class NonHibernateAnnotationsIntegrationTest extends HANTestCase {
-	public void testNotApplyDll() throws Exception {
-		PersistentClass classMapping = getCfg().getClassMapping( Address.class.getName() );
-		Column stateColumn = (Column) classMapping.getProperty( "state" ).getColumnIterator().next();
-		assertFalse( stateColumn.getLength() == 3 );
-		Column zipColumn = (Column) classMapping.getProperty( "zip" ).getColumnIterator().next();
-		assertFalse( zipColumn.getLength() ==  5 );
-		assertTrue( zipColumn.isNullable() );
-	}
-
-	public void testNotApplyListener() throws Exception {
-		Session s = openSession( );
-		Address a = new Address();
-		s.persist( a ); //shouldn't fail
-		s.flush();
-		s.close();
-	}
-
-	protected void configure(Configuration cfg) {
-		cfg.setProperty( Environment.MESSAGE_INTERPOLATOR_CLASS, PrefixMessageInterpolator.class.getName() );
-		cfg.setProperty( Environment.APPLY_TO_DDL, "false" );
-		cfg.setProperty( Environment.AUTOREGISTER_LISTENERS, "false" );
-	}
-
-	protected Class[] getMappings() {
-		return new Class[]{
-				Address.class,
-		};
-	}
-
-	public NonHibernateAnnotationsIntegrationTest(String x) {
-		super( x );
-	}
-}

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/NonHibernateAnnotationsIntegrationTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/NonHibernateAnnotationsIntegrationTest.java)
===================================================================
--- trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/NonHibernateAnnotationsIntegrationTest.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/NonHibernateAnnotationsIntegrationTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,52 @@
+//$Id: $
+package org.hibernate.validator.test.haintegration;
+
+import org.hibernate.mapping.PersistentClass;
+import org.hibernate.mapping.Column;
+import org.hibernate.event.PreInsertEventListener;
+import org.hibernate.event.PreUpdateEventListener;
+import org.hibernate.cfg.Configuration;
+import org.hibernate.validator.Environment;
+import org.hibernate.validator.test.HANTestCase;
+import org.hibernate.validator.event.ValidateEventListener;
+import org.hibernate.Session;
+
+/**
+ * Test the ability to disable DDL update
+ *
+ * @author Emmanuel Bernard
+ */
+public class NonHibernateAnnotationsIntegrationTest extends HANTestCase {
+	public void testNotApplyDll() throws Exception {
+		PersistentClass classMapping = getCfg().getClassMapping( Address.class.getName() );
+		Column stateColumn = (Column) classMapping.getProperty( "state" ).getColumnIterator().next();
+		assertFalse( stateColumn.getLength() == 3 );
+		Column zipColumn = (Column) classMapping.getProperty( "zip" ).getColumnIterator().next();
+		assertFalse( zipColumn.getLength() ==  5 );
+		assertTrue( zipColumn.isNullable() );
+	}
+
+	public void testNotApplyListener() throws Exception {
+		Session s = openSession( );
+		Address a = new Address();
+		s.persist( a ); //shouldn't fail
+		s.flush();
+		s.close();
+	}
+
+	protected void configure(Configuration cfg) {
+		cfg.setProperty( Environment.MESSAGE_INTERPOLATOR_CLASS, PrefixMessageInterpolator.class.getName() );
+		cfg.setProperty( Environment.APPLY_TO_DDL, "false" );
+		cfg.setProperty( Environment.AUTOREGISTER_LISTENERS, "false" );
+	}
+
+	protected Class[] getMappings() {
+		return new Class[]{
+				Address.class,
+		};
+	}
+
+	public NonHibernateAnnotationsIntegrationTest(String x) {
+		super( x );
+	}
+}

Deleted: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/PrefixMessageInterpolator.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/PrefixMessageInterpolator.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/PrefixMessageInterpolator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,14 +0,0 @@
-//$Id: $
-package org.hibernate.validator.test.haintegration;
-
-import org.hibernate.validator.MessageInterpolator;
-import org.hibernate.validator.Validator;
-
-/**
- * @author Emmanuel Bernard
- */
-public class PrefixMessageInterpolator implements MessageInterpolator {
-	public String interpolate(String message, Validator validator, MessageInterpolator defaultInterpolator) {
-		return "prefix_" + defaultInterpolator.interpolate( message, validator, defaultInterpolator );
-	}
-}

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/PrefixMessageInterpolator.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/PrefixMessageInterpolator.java)
===================================================================
--- trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/PrefixMessageInterpolator.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/PrefixMessageInterpolator.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,14 @@
+//$Id: $
+package org.hibernate.validator.test.haintegration;
+
+import org.hibernate.validator.MessageInterpolator;
+import org.hibernate.validator.Validator;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class PrefixMessageInterpolator implements MessageInterpolator {
+	public String interpolate(String message, Validator validator, MessageInterpolator defaultInterpolator) {
+		return "prefix_" + defaultInterpolator.interpolate( message, validator, defaultInterpolator );
+	}
+}

Deleted: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/Rock.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/Rock.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/Rock.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,15 +0,0 @@
-//$Id: Rock.java 9795 2006-04-26 06:41:18Z epbernard $
-package org.hibernate.validator.test.haintegration;
-
-import javax.persistence.Entity;
-
-import org.hibernate.validator.NotNull;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Rock extends Music {
-	@NotNull
-	public Integer bit;
-}

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/Rock.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/Rock.java)
===================================================================
--- trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/Rock.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/Rock.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,15 @@
+//$Id: Rock.java 9795 2006-04-26 06:41:18Z epbernard $
+package org.hibernate.validator.test.haintegration;
+
+import javax.persistence.Entity;
+
+import org.hibernate.validator.NotNull;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Rock extends Music {
+	@NotNull
+	public Integer bit;
+}

Deleted: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/Tv.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/Tv.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/Tv.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,30 +0,0 @@
-//$Id: Tv.java 10384 2006-08-31 04:10:44Z epbernard $
-package org.hibernate.validator.test.haintegration;
-
-import java.util.Date;
-import java.math.BigInteger;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-
-import org.hibernate.validator.Future;
-import org.hibernate.validator.Length;
-import org.hibernate.validator.Min;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Tv {
-	@Id
-	@Length(max = 2)
-	public String serial;
-	public int size;
-	@Length(max = 2)
-	public String name;
-	@Future
-	public Date expDate;
-	@Length(min = 0)
-	public String description;
-	@Min(1000)
-	public BigInteger lifetime;
-}

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/Tv.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/Tv.java)
===================================================================
--- trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/Tv.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/Tv.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,30 @@
+//$Id: Tv.java 10384 2006-08-31 04:10:44Z epbernard $
+package org.hibernate.validator.test.haintegration;
+
+import java.util.Date;
+import java.math.BigInteger;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+import org.hibernate.validator.Future;
+import org.hibernate.validator.Length;
+import org.hibernate.validator.Min;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Tv {
+	@Id
+	@Length(max = 2)
+	public String serial;
+	public int size;
+	@Length(max = 2)
+	public String name;
+	@Future
+	public Date expDate;
+	@Length(min = 0)
+	public String description;
+	@Min(1000)
+	public BigInteger lifetime;
+}

Deleted: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/TvOwner.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/TvOwner.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/TvOwner.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,22 +0,0 @@
-//$Id: TvOwner.java 9795 2006-04-26 06:41:18Z epbernard $
-package org.hibernate.validator.test.haintegration;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.ManyToOne;
-
-import org.hibernate.validator.NotNull;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class TvOwner {
-	@Id
-	@GeneratedValue
-	public Integer id;
-	@ManyToOne
-	@NotNull
-	public Tv tv;
-}

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/TvOwner.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/TvOwner.java)
===================================================================
--- trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/TvOwner.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/TvOwner.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,22 @@
+//$Id: TvOwner.java 9795 2006-04-26 06:41:18Z epbernard $
+package org.hibernate.validator.test.haintegration;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+
+import org.hibernate.validator.NotNull;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class TvOwner {
+	@Id
+	@GeneratedValue
+	public Integer id;
+	@ManyToOne
+	@NotNull
+	public Tv tv;
+}

Deleted: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/User.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/User.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/User.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,42 +0,0 @@
-//$Id: $
-package org.hibernate.validator.test.haintegration;
-
-import javax.persistence.Embeddable;
-
-import org.hibernate.validator.NotNull;
-
-/**
- * @author Emmanuel Bernard
- */
- at Embeddable
-public class User {
-	@NotNull
-	private String firstname;
-	private String middlename;
-	@NotNull
-	private String lastname;
-
-	public String getFirstname() {
-		return firstname;
-	}
-
-	public void setFirstname(String firstname) {
-		this.firstname = firstname;
-	}
-
-	public String getLastname() {
-		return lastname;
-	}
-
-	public void setLastname(String lastname) {
-		this.lastname = lastname;
-	}
-
-	public String getMiddlename() {
-		return middlename;
-	}
-
-	public void setMiddlename(String middlename) {
-		this.middlename = middlename;
-	}
-}

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/User.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/User.java)
===================================================================
--- trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/User.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/User.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,42 @@
+//$Id: $
+package org.hibernate.validator.test.haintegration;
+
+import javax.persistence.Embeddable;
+
+import org.hibernate.validator.NotNull;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Embeddable
+public class User {
+	@NotNull
+	private String firstname;
+	private String middlename;
+	@NotNull
+	private String lastname;
+
+	public String getFirstname() {
+		return firstname;
+	}
+
+	public void setFirstname(String firstname) {
+		this.firstname = firstname;
+	}
+
+	public String getLastname() {
+		return lastname;
+	}
+
+	public void setLastname(String lastname) {
+		this.lastname = lastname;
+	}
+
+	public String getMiddlename() {
+		return middlename;
+	}
+
+	public void setMiddlename(String middlename) {
+		this.middlename = middlename;
+	}
+}

Deleted: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/Venusian.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/Venusian.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/Venusian.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,38 +0,0 @@
-//$Id: Venusian.java 9795 2006-04-26 06:41:18Z epbernard $
-package org.hibernate.validator.test.haintegration;
-
-import java.io.Serializable;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.IdClass;
-
-import org.hibernate.validator.Length;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at IdClass(VenusianPk.class)
-public class Venusian implements Serializable {
-	private String region;
-	private String name;
-
-	@Id
-	@Length(min = 3)
-	public String getRegion() {
-		return region;
-	}
-
-	public void setRegion(String region) {
-		this.region = region;
-	}
-
-	@Id
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-}

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/Venusian.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/Venusian.java)
===================================================================
--- trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/Venusian.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/Venusian.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,38 @@
+//$Id: Venusian.java 9795 2006-04-26 06:41:18Z epbernard $
+package org.hibernate.validator.test.haintegration;
+
+import java.io.Serializable;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.IdClass;
+
+import org.hibernate.validator.Length;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at IdClass(VenusianPk.class)
+public class Venusian implements Serializable {
+	private String region;
+	private String name;
+
+	@Id
+	@Length(min = 3)
+	public String getRegion() {
+		return region;
+	}
+
+	public void setRegion(String region) {
+		this.region = region;
+	}
+
+	@Id
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+}

Deleted: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/VenusianPk.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/VenusianPk.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/VenusianPk.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,47 +0,0 @@
-//$Id: VenusianPk.java 7797 2005-08-10 10:40:48Z epbernard $
-package org.hibernate.validator.test.haintegration;
-
-import java.io.Serializable;
-
-/**
- * @author Emmanuel Bernard
- */
-public class VenusianPk implements Serializable {
-	private String region;
-	private String name;
-
-	public String getRegion() {
-		return region;
-	}
-
-	public void setRegion(String region) {
-		this.region = region;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	public boolean equals(Object o) {
-		if ( this == o ) return true;
-		if ( o == null || getClass() != o.getClass() ) return false;
-
-		final VenusianPk that = (VenusianPk) o;
-
-		if ( !name.equals( that.name ) ) return false;
-		if ( !region.equals( that.region ) ) return false;
-
-		return true;
-	}
-
-	public int hashCode() {
-		int result;
-		result = region.hashCode();
-		result = 29 * result + name.hashCode();
-		return result;
-	}
-}

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/VenusianPk.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/VenusianPk.java)
===================================================================
--- trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/VenusianPk.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/haintegration/VenusianPk.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,47 @@
+//$Id: VenusianPk.java 7797 2005-08-10 10:40:48Z epbernard $
+package org.hibernate.validator.test.haintegration;
+
+import java.io.Serializable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class VenusianPk implements Serializable {
+	private String region;
+	private String name;
+
+	public String getRegion() {
+		return region;
+	}
+
+	public void setRegion(String region) {
+		this.region = region;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public boolean equals(Object o) {
+		if ( this == o ) return true;
+		if ( o == null || getClass() != o.getClass() ) return false;
+
+		final VenusianPk that = (VenusianPk) o;
+
+		if ( !name.equals( that.name ) ) return false;
+		if ( !region.equals( that.region ) ) return false;
+
+		return true;
+	}
+
+	public int hashCode() {
+		int result;
+		result = region.hashCode();
+		result = 29 * result + name.hashCode();
+		return result;
+	}
+}

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance)

Deleted: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance/Animal.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance/Animal.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance/Animal.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,19 +0,0 @@
-//$Id$
-package org.hibernate.validator.test.inheritance;
-
-import java.io.Serializable;
-
-/**
- * @author Emmanuel Bernard
- */
-public class Animal implements Serializable, Name {
-	private String name;
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-}

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance/Animal.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance/Animal.java)
===================================================================
--- trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance/Animal.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance/Animal.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,19 @@
+//$Id$
+package org.hibernate.validator.test.inheritance;
+
+import java.io.Serializable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Animal implements Serializable, Name {
+	private String name;
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+}

Deleted: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance/BoneEater.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance/BoneEater.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance/BoneEater.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,14 +0,0 @@
-//$Id$
-package org.hibernate.validator.test.inheritance;
-
-import org.hibernate.validator.NotNull;
-
-/**
- * @author Emmanuel Bernard
- */
-public interface BoneEater extends Eater {
-	@NotNull
-	String getFavoriteBone();
-
-	void setFavoriteBone(String favoriteBone);
-}

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance/BoneEater.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance/BoneEater.java)
===================================================================
--- trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance/BoneEater.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance/BoneEater.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,14 @@
+//$Id$
+package org.hibernate.validator.test.inheritance;
+
+import org.hibernate.validator.NotNull;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public interface BoneEater extends Eater {
+	@NotNull
+	String getFavoriteBone();
+
+	void setFavoriteBone(String favoriteBone);
+}

Deleted: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance/Dog.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance/Dog.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance/Dog.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,31 +0,0 @@
-//$Id$
-package org.hibernate.validator.test.inheritance;
-
-import java.io.Serializable;
-
-import org.hibernate.validator.Length;
-
-/**
- * @author Emmanuel Bernard
- */
-public class Dog extends Animal implements Serializable, BoneEater {
-	private String favoriteBone;
-	private int frequency;
-
-	@Length(min = 3)
-	public String getFavoriteBone() {
-		return favoriteBone;
-	}
-
-	public void setFavoriteBone(String favoriteBone) {
-		this.favoriteBone = favoriteBone;
-	}
-
-	public int getFrequency() {
-		return frequency;
-	}
-
-	public void setFrequency(int frequency) {
-		this.frequency = frequency;
-	}
-}

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance/Dog.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance/Dog.java)
===================================================================
--- trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance/Dog.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance/Dog.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,31 @@
+//$Id$
+package org.hibernate.validator.test.inheritance;
+
+import java.io.Serializable;
+
+import org.hibernate.validator.Length;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Dog extends Animal implements Serializable, BoneEater {
+	private String favoriteBone;
+	private int frequency;
+
+	@Length(min = 3)
+	public String getFavoriteBone() {
+		return favoriteBone;
+	}
+
+	public void setFavoriteBone(String favoriteBone) {
+		this.favoriteBone = favoriteBone;
+	}
+
+	public int getFrequency() {
+		return frequency;
+	}
+
+	public void setFrequency(int frequency) {
+		this.frequency = frequency;
+	}
+}

Deleted: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance/Eater.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance/Eater.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance/Eater.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,14 +0,0 @@
-//$Id$
-package org.hibernate.validator.test.inheritance;
-
-import org.hibernate.validator.Min;
-
-/**
- * @author Emmanuel Bernard
- */
-public interface Eater {
-	@Min(2)
-	int getFrequency();
-
-	void setFrequency(int frequency);
-}

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance/Eater.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance/Eater.java)
===================================================================
--- trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance/Eater.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance/Eater.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,14 @@
+//$Id$
+package org.hibernate.validator.test.inheritance;
+
+import org.hibernate.validator.Min;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public interface Eater {
+	@Min(2)
+	int getFrequency();
+
+	void setFrequency(int frequency);
+}

Deleted: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance/InheritanceTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance/InheritanceTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance/InheritanceTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,21 +0,0 @@
-//$Id$
-package org.hibernate.validator.test.inheritance;
-
-import junit.framework.TestCase;
-import org.hibernate.validator.ClassValidator;
-import org.hibernate.validator.InvalidValue;
-
-/**
- * @author Emmanuel Bernard
- */
-public class InheritanceTest extends TestCase {
-	public void testInheritance() throws Exception {
-		ClassValidator<Dog> classValidator = new ClassValidator<Dog>( Dog.class );
-		Dog dog = new Dog();
-		InvalidValue[] invalidValues = classValidator.getInvalidValues( dog );
-		assertEquals( 3, invalidValues.length );
-		dog.setFavoriteBone( "DE" ); //failure
-		invalidValues = classValidator.getInvalidValues( dog );
-		assertEquals( 3, invalidValues.length );
-	}
-}

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance/InheritanceTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance/InheritanceTest.java)
===================================================================
--- trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance/InheritanceTest.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance/InheritanceTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,21 @@
+//$Id$
+package org.hibernate.validator.test.inheritance;
+
+import junit.framework.TestCase;
+import org.hibernate.validator.ClassValidator;
+import org.hibernate.validator.InvalidValue;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class InheritanceTest extends TestCase {
+	public void testInheritance() throws Exception {
+		ClassValidator<Dog> classValidator = new ClassValidator<Dog>( Dog.class );
+		Dog dog = new Dog();
+		InvalidValue[] invalidValues = classValidator.getInvalidValues( dog );
+		assertEquals( 3, invalidValues.length );
+		dog.setFavoriteBone( "DE" ); //failure
+		invalidValues = classValidator.getInvalidValues( dog );
+		assertEquals( 3, invalidValues.length );
+	}
+}

Deleted: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance/Name.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance/Name.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance/Name.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,14 +0,0 @@
-//$Id$
-package org.hibernate.validator.test.inheritance;
-
-import org.hibernate.validator.NotNull;
-
-/**
- * @author Emmanuel Bernard
- */
-public interface Name {
-	@NotNull
-	String getName();
-
-	void setName(String name);
-}

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance/Name.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance/Name.java)
===================================================================
--- trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance/Name.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/inheritance/Name.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,14 @@
+//$Id$
+package org.hibernate.validator.test.inheritance;
+
+import org.hibernate.validator.NotNull;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public interface Name {
+	@NotNull
+	String getName();
+
+	void setName(String name);
+}

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/jpa (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/jpa)

Deleted: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/jpa/Commander.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/jpa/Commander.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/jpa/Commander.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,25 +0,0 @@
-//$Id: $
-package org.hibernate.validator.test.jpa;
-
-import javax.persistence.Embeddable;
-import javax.persistence.Column;
-
-import org.hibernate.validator.NotEmpty;
-
-/**
- * @author Emmanuel Bernard
- */
- at Embeddable
-public class Commander {
-	@NotEmpty
-	@Column(name="commander_name")
-	private String name;
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-}

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/jpa/Commander.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/jpa/Commander.java)
===================================================================
--- trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/jpa/Commander.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/jpa/Commander.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,25 @@
+//$Id: $
+package org.hibernate.validator.test.jpa;
+
+import javax.persistence.Embeddable;
+import javax.persistence.Column;
+
+import org.hibernate.validator.NotEmpty;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Embeddable
+public class Commander {
+	@NotEmpty
+	@Column(name="commander_name")
+	private String name;
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+}

Deleted: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/jpa/JPATestCase.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/jpa/JPATestCase.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/jpa/JPATestCase.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,103 +0,0 @@
-//$Id: $
-package org.hibernate.validator.test.jpa;
-
-import java.util.Map;
-import java.util.HashMap;
-import java.util.Properties;
-import java.util.ArrayList;
-import java.io.InputStream;
-import java.io.IOException;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.Persistence;
-
-import org.hibernate.cfg.Environment;
-import org.hibernate.ejb.HibernatePersistence;
-
-/**
- * @author Emmanuel Bernard
- */
-public abstract class JPATestCase extends junit.framework.TestCase {
-	protected EntityManagerFactory factory;
-
-	public JPATestCase() {
-		super();
-	}
-
-	public JPATestCase(String name) {
-		super( name );
-	}
-
-	public void setUp() {
-		factory = new HibernatePersistence().createEntityManagerFactory( getConfig() );
-	}
-
-	public void tearDown() {
-		factory.close();
-	}
-
-	public abstract Class[] getAnnotatedClasses();
-
-	public String[] getEjb3DD() {
-		return new String[]{};
-	}
-
-	public Map<Class, String> getCachedClasses() {
-		return new HashMap<Class, String>();
-	}
-
-	public Map<String, String> getCachedCollections() {
-		return new HashMap<String, String>();
-	}
-
-	public static Properties loadProperties() {
-		Properties props = new Properties();
-		InputStream stream = Persistence.class.getResourceAsStream( "/hibernate.properties" );
-		if ( stream != null ) {
-			try {
-				props.load( stream );
-			}
-			catch (Exception e) {
-				throw new RuntimeException( "could not load hibernate.properties" );
-			}
-			finally {
-				try {
-					stream.close();
-				}
-				catch (IOException ioe) {
-				}
-			}
-		}
-		props.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
-		return props;
-	}
-
-	public Map getConfig() {
-		Map config = loadProperties();
-		ArrayList<Class> classes = new ArrayList<Class>();
-
-		for ( Class clazz : getAnnotatedClasses() ) {
-			classes.add( clazz );
-		}
-		config.put( HibernatePersistence.LOADED_CLASSES, classes );
-		for ( Map.Entry<Class, String> entry : getCachedClasses().entrySet() ) {
-			config.put(
-					HibernatePersistence.CLASS_CACHE_PREFIX + "." + entry.getKey().getName(),
-					entry.getValue()
-			);
-		}
-		for ( Map.Entry<String, String> entry : getCachedCollections().entrySet() ) {
-			config.put(
-					HibernatePersistence.COLLECTION_CACHE_PREFIX + "." + entry.getKey(),
-					entry.getValue()
-			);
-		}
-		if ( getEjb3DD().length > 0 ) {
-			ArrayList<String> dds = new ArrayList<String>();
-			for ( String dd : getEjb3DD() ) {
-				dds.add( dd );
-			}
-			config.put( HibernatePersistence.XML_FILE_NAMES, dds );
-		}
-		return config;
-	}
-}

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/jpa/JPATestCase.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/jpa/JPATestCase.java)
===================================================================
--- trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/jpa/JPATestCase.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/jpa/JPATestCase.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,103 @@
+//$Id: $
+package org.hibernate.validator.test.jpa;
+
+import java.util.Map;
+import java.util.HashMap;
+import java.util.Properties;
+import java.util.ArrayList;
+import java.io.InputStream;
+import java.io.IOException;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+
+import org.hibernate.cfg.Environment;
+import org.hibernate.ejb.HibernatePersistence;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public abstract class JPATestCase extends junit.framework.TestCase {
+	protected EntityManagerFactory factory;
+
+	public JPATestCase() {
+		super();
+	}
+
+	public JPATestCase(String name) {
+		super( name );
+	}
+
+	public void setUp() {
+		factory = new HibernatePersistence().createEntityManagerFactory( getConfig() );
+	}
+
+	public void tearDown() {
+		factory.close();
+	}
+
+	public abstract Class[] getAnnotatedClasses();
+
+	public String[] getEjb3DD() {
+		return new String[]{};
+	}
+
+	public Map<Class, String> getCachedClasses() {
+		return new HashMap<Class, String>();
+	}
+
+	public Map<String, String> getCachedCollections() {
+		return new HashMap<String, String>();
+	}
+
+	public static Properties loadProperties() {
+		Properties props = new Properties();
+		InputStream stream = Persistence.class.getResourceAsStream( "/hibernate.properties" );
+		if ( stream != null ) {
+			try {
+				props.load( stream );
+			}
+			catch (Exception e) {
+				throw new RuntimeException( "could not load hibernate.properties" );
+			}
+			finally {
+				try {
+					stream.close();
+				}
+				catch (IOException ioe) {
+				}
+			}
+		}
+		props.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
+		return props;
+	}
+
+	public Map getConfig() {
+		Map config = loadProperties();
+		ArrayList<Class> classes = new ArrayList<Class>();
+
+		for ( Class clazz : getAnnotatedClasses() ) {
+			classes.add( clazz );
+		}
+		config.put( HibernatePersistence.LOADED_CLASSES, classes );
+		for ( Map.Entry<Class, String> entry : getCachedClasses().entrySet() ) {
+			config.put(
+					HibernatePersistence.CLASS_CACHE_PREFIX + "." + entry.getKey().getName(),
+					entry.getValue()
+			);
+		}
+		for ( Map.Entry<String, String> entry : getCachedCollections().entrySet() ) {
+			config.put(
+					HibernatePersistence.COLLECTION_CACHE_PREFIX + "." + entry.getKey(),
+					entry.getValue()
+			);
+		}
+		if ( getEjb3DD().length > 0 ) {
+			ArrayList<String> dds = new ArrayList<String>();
+			for ( String dd : getEjb3DD() ) {
+				dds.add( dd );
+			}
+			config.put( HibernatePersistence.XML_FILE_NAMES, dds );
+		}
+		return config;
+	}
+}

Deleted: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/jpa/JPAValidateListenerTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/jpa/JPAValidateListenerTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/jpa/JPAValidateListenerTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,84 +0,0 @@
-//$Id: $
-package org.hibernate.validator.test.jpa;
-
-import java.util.Map;
-
-import javax.persistence.EntityManager;
-
-import org.hibernate.ejb.HibernatePersistence;
-import org.hibernate.validator.Environment;
-import org.hibernate.validator.InvalidStateException;
-
-/**
- * @author Emmanuel Bernard
- */
-public class JPAValidateListenerTest extends JPATestCase {
-
-	public void testEventTrigger() {
-		EntityManager em = factory.createEntityManager();
-		em.getTransaction().begin();
-		Commander beetles = new Commander();
-		beetles.setName( "" );
-		Submarine yellowSubmarine = new Submarine();
-		yellowSubmarine.setCommander( beetles );
-		yellowSubmarine.setName( "" );
-		yellowSubmarine.setSize( 3 );
-		try {
-			em.persist( yellowSubmarine );
-			em.flush();
-			fail("Event not wired");
-		}
-		catch(InvalidStateException e) {
-			assertEquals( 3, e.getInvalidValues().length );
-		}
-		finally {
-			em.getTransaction().rollback();
-			em.close();
-		}
-
-		//update trigger
-		em = factory.createEntityManager();
-		em.getTransaction().begin();
-		beetles = new Commander();
-		beetles.setName( "Beetles" );
-		yellowSubmarine = new Submarine();
-		yellowSubmarine.setCommander( beetles );
-		yellowSubmarine.setName( "Yellow" );
-		yellowSubmarine.setSize( 13 );
-		em.persist( yellowSubmarine );
-		em.flush();
-		em.clear();
-		yellowSubmarine = em.find( Submarine.class, yellowSubmarine.getId() );
-		yellowSubmarine.setSize( 3 );
-		try {
-			em.flush();
-			fail("Event not wired");
-		}
-		catch(InvalidStateException e) {
-			assertEquals( 1, e.getInvalidValues().length );
-		}
-		finally {
-			em.getTransaction().rollback();
-			em.close();
-		}
-
-	}
-
-	public Class[] getAnnotatedClasses() {
-		return new Class[]{
-				Commander.class,
-				Submarine.class
-		};
-	}
-
-
-	public Map getConfig() {
-		Map map = super.getConfig();
-		//Remove regular Validator wiring
-		map.put( HibernatePersistence.EVENT_LISTENER_PREFIX + "." + "pre-insert",
-				"" );
-		map.put( HibernatePersistence.EVENT_LISTENER_PREFIX + "." + "pre-update",
-				"" );
-		return map;
-	}
-}

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/jpa/JPAValidateListenerTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/jpa/JPAValidateListenerTest.java)
===================================================================
--- trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/jpa/JPAValidateListenerTest.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/jpa/JPAValidateListenerTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,84 @@
+//$Id: $
+package org.hibernate.validator.test.jpa;
+
+import java.util.Map;
+
+import javax.persistence.EntityManager;
+
+import org.hibernate.ejb.HibernatePersistence;
+import org.hibernate.validator.Environment;
+import org.hibernate.validator.InvalidStateException;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class JPAValidateListenerTest extends JPATestCase {
+
+	public void testEventTrigger() {
+		EntityManager em = factory.createEntityManager();
+		em.getTransaction().begin();
+		Commander beetles = new Commander();
+		beetles.setName( "" );
+		Submarine yellowSubmarine = new Submarine();
+		yellowSubmarine.setCommander( beetles );
+		yellowSubmarine.setName( "" );
+		yellowSubmarine.setSize( 3 );
+		try {
+			em.persist( yellowSubmarine );
+			em.flush();
+			fail("Event not wired");
+		}
+		catch(InvalidStateException e) {
+			assertEquals( 3, e.getInvalidValues().length );
+		}
+		finally {
+			em.getTransaction().rollback();
+			em.close();
+		}
+
+		//update trigger
+		em = factory.createEntityManager();
+		em.getTransaction().begin();
+		beetles = new Commander();
+		beetles.setName( "Beetles" );
+		yellowSubmarine = new Submarine();
+		yellowSubmarine.setCommander( beetles );
+		yellowSubmarine.setName( "Yellow" );
+		yellowSubmarine.setSize( 13 );
+		em.persist( yellowSubmarine );
+		em.flush();
+		em.clear();
+		yellowSubmarine = em.find( Submarine.class, yellowSubmarine.getId() );
+		yellowSubmarine.setSize( 3 );
+		try {
+			em.flush();
+			fail("Event not wired");
+		}
+		catch(InvalidStateException e) {
+			assertEquals( 1, e.getInvalidValues().length );
+		}
+		finally {
+			em.getTransaction().rollback();
+			em.close();
+		}
+
+	}
+
+	public Class[] getAnnotatedClasses() {
+		return new Class[]{
+				Commander.class,
+				Submarine.class
+		};
+	}
+
+
+	public Map getConfig() {
+		Map map = super.getConfig();
+		//Remove regular Validator wiring
+		map.put( HibernatePersistence.EVENT_LISTENER_PREFIX + "." + "pre-insert",
+				"" );
+		map.put( HibernatePersistence.EVENT_LISTENER_PREFIX + "." + "pre-update",
+				"" );
+		return map;
+	}
+}

Deleted: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/jpa/Submarine.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/jpa/Submarine.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/jpa/Submarine.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,65 +0,0 @@
-//$Id: $
-package org.hibernate.validator.test.jpa;
-
-import javax.persistence.Entity;
-import javax.persistence.EntityListeners;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-
-import org.hibernate.validator.Min;
-import org.hibernate.validator.NotEmpty;
-import org.hibernate.validator.Valid;
-import org.hibernate.validator.event.JPAValidateListener;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
- at EntityListeners( JPAValidateListener.class )
-public class Submarine {
-	@Id
-	@GeneratedValue
-	private Long id;
-
-	@NotEmpty
-	private String name;
-
-	@Valid
-	private Commander commander;
-
-	@Min( 10 )
-	private long size;
-
-
-	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 long getSize() {
-		return size;
-	}
-
-	public void setSize(long size) {
-		this.size = size;
-	}
-
-	public Commander getCommander() {
-		return commander;
-	}
-
-	public void setCommander(Commander commander) {
-		this.commander = commander;
-	}
-}

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/jpa/Submarine.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/jpa/Submarine.java)
===================================================================
--- trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/jpa/Submarine.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/jpa/Submarine.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,65 @@
+//$Id: $
+package org.hibernate.validator.test.jpa;
+
+import javax.persistence.Entity;
+import javax.persistence.EntityListeners;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+import org.hibernate.validator.Min;
+import org.hibernate.validator.NotEmpty;
+import org.hibernate.validator.Valid;
+import org.hibernate.validator.event.JPAValidateListener;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at EntityListeners( JPAValidateListener.class )
+public class Submarine {
+	@Id
+	@GeneratedValue
+	private Long id;
+
+	@NotEmpty
+	private String name;
+
+	@Valid
+	private Commander commander;
+
+	@Min( 10 )
+	private long size;
+
+
+	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 long getSize() {
+		return size;
+	}
+
+	public void setSize(long size) {
+		this.size = size;
+	}
+
+	public Commander getCommander() {
+		return commander;
+	}
+
+	public void setCommander(Commander commander) {
+		this.commander = commander;
+	}
+}

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/valid (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/valid)

Deleted: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/valid/Address.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/valid/Address.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/valid/Address.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,17 +0,0 @@
-//$Id: $
-package org.hibernate.validator.test.valid;
-
-import org.hibernate.validator.NotNull;
-
-/**
- * @author Emmanuel Bernard
- */
-public class Address {
-
-	private String city;
-
-	@NotNull
-	public String getCity() {
-		return city;
-	}
-} 

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/valid/Address.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/valid/Address.java)
===================================================================
--- trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/valid/Address.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/valid/Address.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,17 @@
+//$Id: $
+package org.hibernate.validator.test.valid;
+
+import org.hibernate.validator.NotNull;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Address {
+
+	private String city;
+
+	@NotNull
+	public String getCity() {
+		return city;
+	}
+} 

Deleted: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/valid/Form.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/valid/Form.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/valid/Form.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,21 +0,0 @@
-//$Id: $
-package org.hibernate.validator.test.valid;
-
-import org.hibernate.validator.Valid;
-
-/**
- * @author Emmanuel Bernard
- */
-public class Form {
-
-	private Member member;
-
-	@Valid
-	public Member getMember() {
-		return member;
-	}
-
-	public void setMember(Member m) {
-		this.member = m;
-	}
-}

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/valid/Form.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/valid/Form.java)
===================================================================
--- trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/valid/Form.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/valid/Form.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,21 @@
+//$Id: $
+package org.hibernate.validator.test.valid;
+
+import org.hibernate.validator.Valid;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Form {
+
+	private Member member;
+
+	@Valid
+	public Member getMember() {
+		return member;
+	}
+
+	public void setMember(Member m) {
+		this.member = m;
+	}
+}

Deleted: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/valid/Member.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/valid/Member.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/valid/Member.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,22 +0,0 @@
-//$Id: $
-package org.hibernate.validator.test.valid;
-
-import org.hibernate.validator.Valid;
-
-/**
- * @author Emmanuel Bernard
- */
-public class Member {
-
-	private Address address;
-
-	@Valid
-	public Address getAddress() {
-		return address;
-	}
-
-
-	public void setAddress(Address address) {
-		this.address = address;
-	}
-}

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/valid/Member.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/valid/Member.java)
===================================================================
--- trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/valid/Member.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/valid/Member.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,22 @@
+//$Id: $
+package org.hibernate.validator.test.valid;
+
+import org.hibernate.validator.Valid;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class Member {
+
+	private Address address;
+
+	@Valid
+	public Address getAddress() {
+		return address;
+	}
+
+
+	public void setAddress(Address address) {
+		this.address = address;
+	}
+}

Deleted: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/valid/ValidTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/valid/ValidTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/valid/ValidTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,22 +0,0 @@
-//$Id: $
-package org.hibernate.validator.test.valid;
-
-import junit.framework.TestCase;
-import org.hibernate.validator.ClassValidator;
-import org.hibernate.validator.InvalidValue;
-
-/**
- * @author Emmanuel Bernard
- */
-public class ValidTest extends TestCase {
-	public void testDeepValid() throws Exception {
-		ClassValidator<Form> formValidator = new ClassValidator<Form>(Form.class);
-		Address a = new Address();
-		Member m = new Member();
-		m.setAddress( a );
-		Form f = new Form();
-		f.setMember(m);
-		InvalidValue[] values = formValidator.getInvalidValues( f );
-		assertEquals( 1, values.length );
-	}
-}

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/valid/ValidTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/valid/ValidTest.java)
===================================================================
--- trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/valid/ValidTest.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/valid/ValidTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,22 @@
+//$Id: $
+package org.hibernate.validator.test.valid;
+
+import junit.framework.TestCase;
+import org.hibernate.validator.ClassValidator;
+import org.hibernate.validator.InvalidValue;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class ValidTest extends TestCase {
+	public void testDeepValid() throws Exception {
+		ClassValidator<Form> formValidator = new ClassValidator<Form>(Form.class);
+		Address a = new Address();
+		Member m = new Member();
+		m.setAddress( a );
+		Form f = new Form();
+		f.setMember(m);
+		InvalidValue[] values = formValidator.getInvalidValues( f );
+		assertEquals( 1, values.length );
+	}
+}

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/validators (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/validators)

Deleted: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/validators/Car.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/validators/Car.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/validators/Car.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,28 +0,0 @@
-//$Id: $
-package org.hibernate.validator.test.validators;
-
-import java.math.BigDecimal;
-
-import javax.persistence.Id;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Entity;
-
-import org.hibernate.validator.NotEmpty;
-import org.hibernate.validator.Digits;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Car {
-	@Id @GeneratedValue
-	public Long id;
-	@NotEmpty
-	public String name;
-	@NotEmpty
-	public String[] insurances;
-	@Digits(integerDigits = 1, fractionalDigits = 2)
-	public BigDecimal length;
-	@Digits(integerDigits = 2, fractionalDigits = 1)
-	public Double gallons; 
-}

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/validators/Car.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/validators/Car.java)
===================================================================
--- trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/validators/Car.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/validators/Car.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,28 @@
+//$Id: $
+package org.hibernate.validator.test.validators;
+
+import java.math.BigDecimal;
+
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Entity;
+
+import org.hibernate.validator.NotEmpty;
+import org.hibernate.validator.Digits;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Car {
+	@Id @GeneratedValue
+	public Long id;
+	@NotEmpty
+	public String name;
+	@NotEmpty
+	public String[] insurances;
+	@Digits(integerDigits = 1, fractionalDigits = 2)
+	public BigDecimal length;
+	@Digits(integerDigits = 2, fractionalDigits = 1)
+	public Double gallons; 
+}

Deleted: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/validators/CreditCard.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/validators/CreditCard.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/validators/CreditCard.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,14 +0,0 @@
-//$Id: $
-package org.hibernate.validator.test.validators;
-
-import org.hibernate.validator.EAN;
-
-/**
- * @author Emmanuel Bernard
- */
-public class CreditCard {
-	@org.hibernate.validator.CreditCardNumber
-	public String number;
-	@EAN
-	public String ean;
-}

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/validators/CreditCard.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/validators/CreditCard.java)
===================================================================
--- trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/validators/CreditCard.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/validators/CreditCard.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,14 @@
+//$Id: $
+package org.hibernate.validator.test.validators;
+
+import org.hibernate.validator.EAN;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class CreditCard {
+	@org.hibernate.validator.CreditCardNumber
+	public String number;
+	@EAN
+	public String ean;
+}

Deleted: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/validators/DigitsTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/validators/DigitsTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/validators/DigitsTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,55 +0,0 @@
-//$Id: $
-package org.hibernate.validator.test.validators;
-
-import java.math.BigDecimal;
-
-import org.hibernate.cfg.Configuration;
-import org.hibernate.event.PreInsertEventListener;
-import org.hibernate.event.PreUpdateEventListener;
-import org.hibernate.mapping.Column;
-import org.hibernate.mapping.PersistentClass;
-import org.hibernate.validator.ClassValidator;
-import org.hibernate.validator.InvalidValue;
-import org.hibernate.validator.test.HANTestCase;
-import org.hibernate.validator.event.ValidateEventListener;
-
-/**
- * @author Emmanuel Bernard
- */
-public class DigitsTest extends HANTestCase {
-
-	public void testDigits() throws Exception {
-		Car car = new Car();
-		car.name = "350Z";
-		car.insurances = new String[] { "random" };
-		car.length = new BigDecimal(10.2);
-		car.gallons = 100.3;
-		ClassValidator<Car> classValidator = new ClassValidator<Car>( Car.class );
-		InvalidValue[] invalidValues = classValidator.getInvalidValues( car );
-		assertEquals( 2, invalidValues.length );
-		car.length = new BigDecimal(1.223); //more than 2
-		car.gallons = 10.300; //1 digit really so not invalid
-		invalidValues = classValidator.getInvalidValues( car );
-		assertEquals( 1, invalidValues.length );
-	}
-
-	public void testApply() throws Exception {
-		PersistentClass classMapping = getCfg().getClassMapping( Car.class.getName() );
-		Column stateColumn = (Column) classMapping.getProperty( "gallons" ).getColumnIterator().next();
-		assertEquals( stateColumn.getPrecision(), 3 );
-		assertEquals( stateColumn.getScale(), 1 );
-	}
-
-	protected void configure(Configuration cfg) {
-		cfg.getEventListeners()
-				.setPreInsertEventListeners( new PreInsertEventListener[]{new ValidateEventListener()} );
-		cfg.getEventListeners()
-				.setPreUpdateEventListeners( new PreUpdateEventListener[]{new ValidateEventListener()} );
-	}
-
-	protected Class[] getMappings() {
-		return new Class[] {
-				Car.class
-		};
-	}
-}

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/validators/DigitsTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/validators/DigitsTest.java)
===================================================================
--- trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/validators/DigitsTest.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/validators/DigitsTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,55 @@
+//$Id: $
+package org.hibernate.validator.test.validators;
+
+import java.math.BigDecimal;
+
+import org.hibernate.cfg.Configuration;
+import org.hibernate.event.PreInsertEventListener;
+import org.hibernate.event.PreUpdateEventListener;
+import org.hibernate.mapping.Column;
+import org.hibernate.mapping.PersistentClass;
+import org.hibernate.validator.ClassValidator;
+import org.hibernate.validator.InvalidValue;
+import org.hibernate.validator.test.HANTestCase;
+import org.hibernate.validator.event.ValidateEventListener;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class DigitsTest extends HANTestCase {
+
+	public void testDigits() throws Exception {
+		Car car = new Car();
+		car.name = "350Z";
+		car.insurances = new String[] { "random" };
+		car.length = new BigDecimal(10.2);
+		car.gallons = 100.3;
+		ClassValidator<Car> classValidator = new ClassValidator<Car>( Car.class );
+		InvalidValue[] invalidValues = classValidator.getInvalidValues( car );
+		assertEquals( 2, invalidValues.length );
+		car.length = new BigDecimal(1.223); //more than 2
+		car.gallons = 10.300; //1 digit really so not invalid
+		invalidValues = classValidator.getInvalidValues( car );
+		assertEquals( 1, invalidValues.length );
+	}
+
+	public void testApply() throws Exception {
+		PersistentClass classMapping = getCfg().getClassMapping( Car.class.getName() );
+		Column stateColumn = (Column) classMapping.getProperty( "gallons" ).getColumnIterator().next();
+		assertEquals( stateColumn.getPrecision(), 3 );
+		assertEquals( stateColumn.getScale(), 1 );
+	}
+
+	protected void configure(Configuration cfg) {
+		cfg.getEventListeners()
+				.setPreInsertEventListeners( new PreInsertEventListener[]{new ValidateEventListener()} );
+		cfg.getEventListeners()
+				.setPreUpdateEventListeners( new PreUpdateEventListener[]{new ValidateEventListener()} );
+	}
+
+	protected Class[] getMappings() {
+		return new Class[] {
+				Car.class
+		};
+	}
+}

Deleted: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/validators/LuhnTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/validators/LuhnTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/validators/LuhnTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,28 +0,0 @@
-//$Id: $
-package org.hibernate.validator.test.validators;
-
-import junit.framework.TestCase;
-import org.hibernate.validator.ClassValidator;
-import org.hibernate.validator.InvalidValue;
-
-/**
- * @author Emmanuel Bernard
- */
-public class LuhnTest extends TestCase {
-	public void testCreditCard() {
-		CreditCard card = new CreditCard();
-		card.number = "1234567890123456";
-		ClassValidator<CreditCard> classValidator = new ClassValidator<CreditCard>( CreditCard.class );
-		InvalidValue[] invalidValues = classValidator.getInvalidValues( card );
-		assertEquals( 1, invalidValues.length );
-		card.number = "541234567890125"; //right CC (luhn compliant)
-		invalidValues = classValidator.getInvalidValues( card );
-		assertEquals( 0, invalidValues.length );
-		card.ean = "9782266156066"; //right EAN
-		invalidValues = classValidator.getInvalidValues( card );
-		assertEquals( 0, invalidValues.length );
-		card.ean = "9782266156067"; //wrong EAN
-		invalidValues = classValidator.getInvalidValues( card );
-		assertEquals( 1, invalidValues.length );
-	}
-}

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/validators/LuhnTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/validators/LuhnTest.java)
===================================================================
--- trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/validators/LuhnTest.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/validators/LuhnTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,28 @@
+//$Id: $
+package org.hibernate.validator.test.validators;
+
+import junit.framework.TestCase;
+import org.hibernate.validator.ClassValidator;
+import org.hibernate.validator.InvalidValue;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class LuhnTest extends TestCase {
+	public void testCreditCard() {
+		CreditCard card = new CreditCard();
+		card.number = "1234567890123456";
+		ClassValidator<CreditCard> classValidator = new ClassValidator<CreditCard>( CreditCard.class );
+		InvalidValue[] invalidValues = classValidator.getInvalidValues( card );
+		assertEquals( 1, invalidValues.length );
+		card.number = "541234567890125"; //right CC (luhn compliant)
+		invalidValues = classValidator.getInvalidValues( card );
+		assertEquals( 0, invalidValues.length );
+		card.ean = "9782266156066"; //right EAN
+		invalidValues = classValidator.getInvalidValues( card );
+		assertEquals( 0, invalidValues.length );
+		card.ean = "9782266156067"; //wrong EAN
+		invalidValues = classValidator.getInvalidValues( card );
+		assertEquals( 1, invalidValues.length );
+	}
+}

Deleted: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/validators/NotEmptyTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/validators/NotEmptyTest.java	2007-03-14 20:57:53 UTC (rev 11279)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/validators/NotEmptyTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -1,31 +0,0 @@
-//$Id: $
-package org.hibernate.validator.test.validators;
-
-import junit.framework.TestCase;
-import org.hibernate.validator.ClassValidator;
-import org.hibernate.validator.InvalidValue;
-
-/**
- * @author Gavin King
- */
-public class NotEmptyTest extends TestCase {
-
-	public void testBigInteger() throws Exception {
-		Car car = new Car();
-		ClassValidator<Car> classValidator = new ClassValidator<Car>( Car.class );
-		InvalidValue[] invalidValues = classValidator.getInvalidValues( car );
-		assertEquals( 2, invalidValues.length );
-		car.name = "";
-		invalidValues = classValidator.getInvalidValues( car );
-		assertEquals( 2, invalidValues.length );
-		car.name = "350Z";
-		invalidValues = classValidator.getInvalidValues( car );
-		assertEquals( 1, invalidValues.length );
-		car.insurances = new String[0];
-		invalidValues = classValidator.getInvalidValues( car );
-		assertEquals( 1, invalidValues.length );
-		car.insurances = new String[1];
-		invalidValues = classValidator.getInvalidValues( car );
-		assertEquals( 0, invalidValues.length );
-	}
-}

Copied: trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/validators/NotEmptyTest.java (from rev 11279, branches/Branch_3_2/HibernateExt/validator/src/test/org/hibernate/validator/test/validators/NotEmptyTest.java)
===================================================================
--- trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/validators/NotEmptyTest.java	                        (rev 0)
+++ trunk/HibernateExt/validator/src/test/org/hibernate/validator/test/validators/NotEmptyTest.java	2007-03-14 22:05:59 UTC (rev 11282)
@@ -0,0 +1,31 @@
+//$Id: $
+package org.hibernate.validator.test.validators;
+
+import junit.framework.TestCase;
+import org.hibernate.validator.ClassValidator;
+import org.hibernate.validator.InvalidValue;
+
+/**
+ * @author Gavin King
+ */
+public class NotEmptyTest extends TestCase {
+
+	public void testBigInteger() throws Exception {
+		Car car = new Car();
+		ClassValidator<Car> classValidator = new ClassValidator<Car>( Car.class );
+		InvalidValue[] invalidValues = classValidator.getInvalidValues( car );
+		assertEquals( 2, invalidValues.length );
+		car.name = "";
+		invalidValues = classValidator.getInvalidValues( car );
+		assertEquals( 2, invalidValues.length );
+		car.name = "350Z";
+		invalidValues = classValidator.getInvalidValues( car );
+		assertEquals( 1, invalidValues.length );
+		car.insurances = new String[0];
+		invalidValues = classValidator.getInvalidValues( car );
+		assertEquals( 1, invalidValues.length );
+		car.insurances = new String[1];
+		invalidValues = classValidator.getInvalidValues( car );
+		assertEquals( 0, invalidValues.length );
+	}
+}




More information about the hibernate-commits mailing list